2.5: Various Fixes
[blender.git] / source / blender / windowmanager / WM_api.h
index d19d189af82f88c4dfc890f2479dd7e9a80f830c..50ba2aec86760554a6ae90490bd819e0d9776671 100644 (file)
 #include "DNA_windowmanager_types.h"
 
 struct bContext;
+struct IDProperty;
 struct wmEvent;
 struct wmEventHandler;
 struct wmGesture;
+struct wmJob;
+struct wmNotifier;
+struct rcti;
+struct PointerRNA;
 
-                       /* general API */
+typedef struct wmJob wmJob;
+
+/* general API */
 void           WM_setprefsize          (int stax, int stay, int sizx, int sizy);
 
 void           WM_init                         (struct bContext *C);
 void           WM_exit                         (struct bContext *C);
 void           WM_main                         (struct bContext *C);
 
+struct wmWindow        *WM_window_open         (struct bContext *C, struct rcti *rect);
+
                        /* files */
-int                    WM_read_homefile        (struct bContext *C, int from_memory);
+int                    WM_read_homefile        (struct bContext *C, struct wmOperator *op);
 int                    WM_write_homefile       (struct bContext *C, struct wmOperator *op);
-void           WM_read_file            (struct bContext *C, char *name);
-void           WM_write_file           (struct bContext *C, char *target);
+void           WM_read_file            (struct bContext *C, char *name, struct ReportList *reports);
+void           WM_write_file           (struct bContext *C, char *target, struct ReportList *reports);
 void           WM_read_autosavefile(struct bContext *C);
 void           WM_write_autosave       (struct bContext *C);
 
                        /* mouse cursors */
-void           WM_init_cursor_data     (void);
-void           WM_set_cursor           (struct bContext *C, int curs);
-void           WM_waitcursor           (struct bContext *C, int val);
-void           WM_timecursor           (struct bContext *C, int nr);
+void           WM_cursor_set           (struct wmWindow *win, int curs);
+void           WM_cursor_modal         (struct wmWindow *win, int curs);
+void           WM_cursor_restore       (struct wmWindow *win);
+void           WM_cursor_wait          (int val);
+void           WM_timecursor           (struct wmWindow *win, int nr);
 
-                       /* keymap and handlers */
-void           WM_keymap_set_item      (ListBase *lb, char *idname, short type, 
-                                                                short val, int modifier, short keymodifier);
-void           WM_keymap_verify_item(ListBase *lb, char *idname, short type, 
+void           *WM_paint_cursor_activate(struct wmWindowManager *wm, int (*poll)(struct bContext *C), void (*draw)(struct bContext *C, int, int, void *customdata), void *customdata);
+void           WM_paint_cursor_end(struct wmWindowManager *wm, void *handle);
+
+                       /* keymap */
+wmKeymapItem *WM_keymap_verify_item(ListBase *lb, char *idname, short type, 
                                                                 short val, int modifier, short keymodifier);
-void           WM_keymap_add_item      (ListBase *lb, char *idname, short type, 
+wmKeymapItem *WM_keymap_add_item(ListBase *lb, char *idname, short type, 
                                                                 short val, int modifier, short keymodifier);
+void           WM_keymap_tweak (ListBase *lb, short type, short val, int modifier, short keymodifier);
+ListBase       *WM_keymap_listbase     (struct wmWindowManager *wm, const char *nameid, 
+                                                                int spaceid, int regionid);
+
+const char     *WM_key_event_string(short type);
+char           *WM_key_event_operator_string(const struct bContext *C, const char *opname, int opcontext, struct IDProperty *properties, char *str, int len);
+
+                       /* handlers */
+
 struct wmEventHandler *WM_event_add_keymap_handler(ListBase *handlers, ListBase *keymap);
+                                               /* boundbox, optional subwindow boundbox for offset */
+struct wmEventHandler *WM_event_add_keymap_handler_bb(ListBase *handlers, ListBase *keymap, rcti *bb, rcti *swinbb);
+                                               /* priority not implemented, it adds in begin */
+struct wmEventHandler *WM_event_add_keymap_handler_priority(ListBase *handlers, ListBase *keymap, int priority);
+
 void           WM_event_remove_keymap_handler(ListBase *handlers, ListBase *keymap);
-struct wmEventHandler *WM_event_add_modal_handler(ListBase *handlers, wmOperator *op);
-void           WM_event_remove_modal_handler(ListBase *handlers, wmOperator *op);
-void           WM_event_remove_handlers(ListBase *handlers);
 
-void           WM_event_add_message(wmWindowManager *wm, void *customdata,
-                                 short customdatafree);
+struct wmEventHandler *WM_event_add_ui_handler(const struct bContext *C, ListBase *handlers,
+                       int (*func)(struct bContext *C, struct wmEvent *event, void *userdata),
+                       void (*remove)(struct bContext *C, void *userdata), void *userdata);
+void           WM_event_remove_ui_handler(ListBase *handlers,
+                       int (*func)(struct bContext *C, struct wmEvent *event, void *userdata),
+                       void (*remove)(struct bContext *C, void *userdata), void *userdata);
+
+struct wmEventHandler *WM_event_add_modal_handler(struct bContext *C, ListBase *handlers, struct wmOperator *op);
+void           WM_event_remove_handlers(struct bContext *C, ListBase *handlers);
 
-void           WM_event_add_notifier(wmWindowManager *wm, wmWindow *window,
-                                       int swinid, int type,
-                                       int value, void *data);
+void           WM_event_add_mousemove(struct bContext *C);
+int                    WM_modal_tweak_exit(struct wmEvent *evt, int tweak_event);
 
-                       /* one-shot timer, returns wmTimerData.handle */
-struct wmTimerHandle *WM_event_add_window_timer(wmWindow *win, int delay_ms, int interval_ms);
-void           WM_event_remove_window_timer(wmWindow *wm, struct wmTimerHandle *handle);
+void           WM_event_add_notifier(const struct bContext *C, unsigned int type, void *data);
 
-                       /* operator api, default callbacks */
-                       /* confirm menu + exec */
+void           wm_event_add            (struct wmWindow *win, struct wmEvent *event_to_add); /* XXX only for warning */
+
+                       /* at maximum, every timestep seconds it triggers event_type events */
+struct wmTimer *WM_event_add_window_timer(struct wmWindow *win, int event_type, double timestep);
+void           WM_event_remove_window_timer(struct wmWindow *win, struct wmTimer *timer);
+void           WM_event_window_timer_sleep(struct wmWindow *win, struct wmTimer *timer, int dosleep);
+
+               /* operator api, default callbacks */
+                       /* invoke callback, uses enum property named "type" */
+int                    WM_menu_invoke                  (struct bContext *C, struct wmOperator *op, struct wmEvent *event);
+                       /* invoke callback, confirm menu + exec */
 int                    WM_operator_confirm             (struct bContext *C, struct wmOperator *op, struct wmEvent *event);
-                       /* context checks */
+               /* invoke callback, file selector "filename" unset + exec */
+int                    WM_operator_filesel             (struct bContext *C, struct wmOperator *op, struct wmEvent *event);
+                       /* poll callback, context checks */
 int                    WM_operator_winactive   (struct bContext *C);
+                       /* invoke callback, exec + redo popup */
+int                    WM_operator_props_popup (struct bContext *C, struct wmOperator *op, struct wmEvent *event);
+int                    WM_operator_redo_popup  (struct bContext *C, struct wmOperator *op);
 
-                       /* operator api */
-wmOperatorType *WM_operatortype_find(const char *idname);
-void           WM_operatortype_append(void (*opfunc)(wmOperatorType*));
-
-int                    WM_operator_invoke(struct bContext *C, wmOperatorType *ot, struct wmEvent *event);
-void           WM_operator_cancel(struct bContext *C, ListBase *modalops, wmOperatorType *ot);
+               /* operator api */
+void           WM_operator_free                (struct wmOperator *op);
+void           WM_operator_stack_clear(struct bContext *C);
 
-/* 
- * Operator property api
- *
- * Some notes to take care:
- *
- * All the OP_set_* functions append a new property to the operator,
- * if the property already exist, just replace it with the new
- * value in other case make a new property and append it.
- *
- * The OP_get_string function is a "special case", this function
- * return a pointer to property data, so don't change/resize/free
- * the string, because probably we get a segfault.
- * I really think that is better duplicate the string, so we are
- * really sure that the property data don't change.
- *
- * OP_get_int/float/array return 1 on success (found the property)
- * or 0 if can't find the property in the operator.
- * The property value are store in the "value" pointer.
- *
- * OP_verify_* sets the value only if it wasn't set already, and
- * returns the existing or new value.
- *
- * Both array function copy the property data into the "array"
- * pointer, but you need init the len pointer to the "array" size.
- *
- * For example:
- *     int vec[] = { 1, 2, 3, 4 };
- *     OP_set_int_array (op, "vector", vec, 4);
- *
- *     ...
- *
- *     short len;
- *     int vec[4];
- *     len= 4; <---- set the size!!
- *     OP_get_int_array (op, "vector", vec, &len);
- */
-void OP_set_int(wmOperator *op, char *name, int value);
-void OP_set_float(wmOperator *op, char *name, float value);
-void OP_set_string(wmOperator *op, char *name, char *str);
-void OP_set_int_array(wmOperator *op, char *name, int *array, short len);
-void OP_set_float_array(wmOperator *op, char *name, float *array, short len);
-
-int OP_get_int(wmOperator *op, char *name, int *value);
-int OP_get_float(wmOperator *op, char *name, float *value);
-char *OP_get_string(wmOperator *op, char *name);
-int OP_get_int_array(wmOperator *op, char *name, int *array, short *len);
-int OP_get_float_array(wmOperator *op, char *name, float *array, short *len);
-
-void OP_verify_int(wmOperator *op, char *name, int value, int *result);
-void OP_verify_float(wmOperator *op, char *name, float value, int *result);
-char *OP_verify_string(wmOperator *op, char *name, char *str);
-void OP_verify_int_array(wmOperator *op, char *name, int *array, short len, int *resultarray, short *resultlen);
-void OP_verify_float_array(wmOperator *op, char *name, float *array, short len, float *resultarray, short *resultlen);
-
-/*
- * Need call this function in the "exit callback"
- * of the operator, but only if you use the property system.
- **/
-void OP_free_property(wmOperator *op);
+wmOperatorType *WM_operatortype_find(const char *idname);
+wmOperatorType *WM_operatortype_first(void);
+void           WM_operatortype_append  (void (*opfunc)(wmOperatorType*));
+void           WM_operatortype_append_ptr      (void (*opfunc)(wmOperatorType*, void *), void *userdata);
+int                    WM_operatortype_remove(const char *idname);
+
+int                    WM_operator_call                (struct bContext *C, struct wmOperator *op);
+int                    WM_operator_repeat              (struct bContext *C, struct wmOperator *op);
+int         WM_operator_name_call      (struct bContext *C, const char *opstring, int context, struct PointerRNA *properties);
+int                    WM_operator_call_py(struct bContext *C, struct wmOperatorType *ot, struct PointerRNA *properties, struct ReportList *reports);
+
+void           WM_operator_properties_create(struct PointerRNA *ptr, const char *opstring);
+void           WM_operator_properties_free(struct PointerRNA *ptr);
+
+               /* operator as a python command (resultuing string must be free'd) */
+char           *WM_operator_pystring(struct wmOperator *op);
+
+                       /* default operator callbacks for border/circle/lasso */
+int                    WM_border_select_invoke (struct bContext *C, struct wmOperator *op, struct wmEvent *event);
+int                    WM_border_select_modal  (struct bContext *C, struct wmOperator *op, struct wmEvent *event);
+int                    WM_gesture_circle_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
+int                    WM_gesture_circle_modal(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
+int                    WM_gesture_lines_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
+int                    WM_gesture_lines_modal(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
+int                    WM_gesture_lasso_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
+int                    WM_gesture_lasso_modal(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
+
+                       /* default operator for arearegions, generates event */
+void           WM_OT_tweak_gesture(struct wmOperatorType *ot);
 
                        /* Gesture manager API */
-void WM_gesture_init(struct bContext *C, int type);
-void WM_gesture_update(struct bContext *C, struct wmGesture *from);
-void WM_gesture_end(struct bContext *C, int type);
-void WM_gesture_free(wmWindow *win);
-
-                       /* Reporting information and errors */
-void WM_report(struct bContext *C, int type, const char *message);
-void WM_reportf(struct bContext *C, int type, const char *format, ...);
-
-                       /* OpenGL wrappers, mimicing opengl syntax */
-void           wmLoadMatrix            (wmWindow *win, float mat[][4]);
-void           wmGetMatrix                     (wmWindow *win, float mat[][4]);
-void           wmMultMatrix            (wmWindow *win, float mat[][4]);
-void           wmGetSingleMatrix       (wmWindow *win, float mat[][4]);
-void           wmScale                         (wmWindow *win, float x, float y, float z);
-void           wmLoadIdentity          (wmWindow *win);        /* note: old name clear_view_mat */
-
-void           wmFrustum                       (wmWindow *win, float x1, float x2, float y1, float y2, float n, float f);
-void           wmOrtho                         (wmWindow *win, float x1, float x2, float y1, float y2, float n, float f);
-void           wmOrtho2                        (wmWindow *win, float x1, float x2, float y1, float y2);
+struct wmGesture *WM_gesture_new(struct bContext *C, struct wmEvent *event, int type);
+void           WM_gesture_end(struct bContext *C, struct wmGesture *gesture);
+
+                       /* radial control operator */
+int                    WM_radial_control_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
+int                    WM_radial_control_modal(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
+void           WM_OT_radial_control_partial(struct wmOperatorType *ot);
+void           WM_radial_control_string(struct wmOperator *op, char str[], int maxlen);
+
+                       /* fileselecting support */
+void           WM_event_add_fileselect(struct bContext *C, struct wmOperator *op);
+void           WM_event_fileselect_event(struct bContext *C, void *ophandle, int eventval);
+
+                       /* OpenGL wrappers, mimicking opengl syntax */
+void           wmSubWindowSet                  (struct wmWindow *win, int swinid);
+void           wmSubWindowScissorSet   (struct wmWindow *win, int swinid, struct rcti *srct);
+
+void           wmLoadMatrix            (float mat[][4]);
+void           wmGetMatrix                     (float mat[][4]);
+void           wmMultMatrix            (float mat[][4]);
+void           wmGetSingleMatrix       (float mat[][4]);
+void           wmScale                         (float x, float y, float z);
+void           wmLoadIdentity          (void);         /* note: old name clear_view_mat */
+void           wmPushMatrix            (void);         /* one level only */
+void           wmPopMatrix                     (void);         /* one level only */
+
+void           wmFrustum                       (float x1, float x2, float y1, float y2, float n, float f);
+void           wmOrtho                         (float x1, float x2, float y1, float y2, float n, float f);
+void           wmOrtho2                        (float x1, float x2, float y1, float y2);
+
+                       /* utilities */
+void           WM_set_framebuffer_index_color(int index);
+int                    WM_framebuffer_to_index(unsigned int col);
+
+                       /* threaded Jobs Manager */
+
+struct wmJob *WM_jobs_get(struct wmWindowManager *wm, struct wmWindow *win, void *owner);
+
+int                    WM_jobs_test(struct wmWindowManager *wm, void *owner);
+
+void           WM_jobs_customdata(struct wmJob *, void *customdata, void (*free)(void *));
+void           WM_jobs_timer(struct wmJob *, double timestep, unsigned int note, unsigned int endnote);
+void           WM_jobs_callbacks(struct wmJob *, 
+                                                         void (*startjob)(void *, short *, short *),
+                                                         void (*initjob)(void *),
+                                                         void (*update)(void *));
+
+void           WM_jobs_start(struct wmWindowManager *wm, struct wmJob *);
+void           WM_jobs_stop(struct wmWindowManager *wm, void *owner);
+void           WM_jobs_stop_all(struct wmWindowManager *wm);
+
+                       /* clipboard */
+char           *WM_clipboard_text_get(int selection);
+void           WM_clipboard_text_set(char *buf, int selection);
 
 
 #endif /* WM_API_H */