Blender V2.61 - r43446

WM_api.h

Go to the documentation of this file.
00001 /*
00002  * ***** BEGIN GPL LICENSE BLOCK *****
00003  *
00004  * This program is free software; you can redistribute it and/or
00005  * modify it under the terms of the GNU General Public License
00006  * as published by the Free Software Foundation; either version 2
00007  * of the License, or (at your option) any later version. 
00008  *
00009  * This program is distributed in the hope that it will be useful,
00010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  * GNU General Public License for more details.
00013  *
00014  * You should have received a copy of the GNU General Public License
00015  * along with this program; if not, write to the Free Software Foundation,
00016  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00017  *
00018  * The Original Code is Copyright (C) 2007 Blender Foundation.
00019  * All rights reserved.
00020  *
00021  * 
00022  * Contributor(s): Blender Foundation
00023  *
00024  * ***** END GPL LICENSE BLOCK *****
00025  */
00026 #ifndef WM_API_H
00027 #define WM_API_H
00028 
00040 /* dna-savable wmStructs here */
00041 #include "DNA_windowmanager_types.h"
00042 #include "WM_keymap.h"
00043 
00044 #ifdef __cplusplus
00045 extern "C" {
00046 #endif
00047 
00048 struct bContext;
00049 struct IDProperty;
00050 struct wmEvent;
00051 struct wmEventHandler;
00052 struct wmGesture;
00053 struct wmJob;
00054 struct wmNotifier;
00055 struct wmOperatorType;
00056 struct wmOperator;
00057 struct rcti;
00058 struct PointerRNA;
00059 struct EnumPropertyItem;
00060 struct MenuType;
00061 struct wmDropBox;
00062 struct wmDrag;
00063 struct ImBuf;
00064 
00065 typedef struct wmJob wmJob;
00066 
00067 /* general API */
00068 void        WM_setprefsize      (int stax, int stay, int sizx, int sizy);
00069 void        WM_setinitialstate_fullscreen(void);
00070 void        WM_setinitialstate_normal(void);
00071 
00072 void        WM_init             (struct bContext *C, int argc, const char **argv);
00073 void        WM_exit_ext         (struct bContext *C, const short do_python);
00074 void        WM_exit             (struct bContext *C);
00075 void        WM_main             (struct bContext *C);
00076 
00077 int         WM_init_game        (struct bContext *C);
00078 void        WM_init_splash      (struct bContext *C);
00079 
00080 
00081 void        WM_check            (struct bContext *C);
00082 
00083 struct wmWindow *WM_window_open (struct bContext *C, struct rcti *rect);
00084 
00085             /* defines for 'type' WM_window_open_temp */
00086 #define WM_WINDOW_RENDER        0
00087 #define WM_WINDOW_USERPREFS     1
00088 #define WM_WINDOW_FILESEL       2
00089 
00090 void        WM_window_open_temp (struct bContext *C, struct rcti *position, int type);
00091 
00092 
00093 
00094             /* files */
00095 int         WM_read_homefile_exec(struct bContext *C, struct wmOperator *op);
00096 int         WM_read_homefile    (struct bContext *C, struct ReportList *reports, short from_memory);
00097 int         WM_write_homefile   (struct bContext *C, struct wmOperator *op);
00098 void        WM_read_file        (struct bContext *C, const char *filepath, struct ReportList *reports);
00099 int         WM_write_file       (struct bContext *C, const char *target, int fileflags, struct ReportList *reports, int copy);
00100 void        WM_read_autosavefile(struct bContext *C);
00101 void        WM_autosave_init    (struct wmWindowManager *wm);
00102 
00103             /* mouse cursors */
00104 void        WM_cursor_set       (struct wmWindow *win, int curs);
00105 void        WM_cursor_modal     (struct wmWindow *win, int curs);
00106 void        WM_cursor_restore   (struct wmWindow *win);
00107 void        WM_cursor_wait      (int val);
00108 void        WM_cursor_grab(struct wmWindow *win, int wrap, int hide, int *bounds);
00109 void        WM_cursor_ungrab(struct wmWindow *win);
00110 void        WM_timecursor       (struct wmWindow *win, int nr);
00111 
00112 void        *WM_paint_cursor_activate(struct wmWindowManager *wm, int (*poll)(struct bContext *C), void (*draw)(struct bContext *C, int, int, void *customdata), void *customdata);
00113 void        WM_paint_cursor_end(struct wmWindowManager *wm, void *handle);
00114 
00115 void        WM_cursor_warp      (struct wmWindow *win, int x, int y);
00116 
00117             /* event map */
00118 int         WM_userdef_event_map(int kmitype);
00119 
00120             /* handlers */
00121 
00122 struct wmEventHandler *WM_event_add_keymap_handler(ListBase *handlers, wmKeyMap *keymap);
00123                         /* boundbox, optional subwindow boundbox for offset */
00124 struct wmEventHandler *WM_event_add_keymap_handler_bb(ListBase *handlers, wmKeyMap *keymap, rcti *bb, rcti *swinbb);
00125                         /* priority not implemented, it adds in begin */
00126 struct wmEventHandler *WM_event_add_keymap_handler_priority(ListBase *handlers, wmKeyMap *keymap, int priority);
00127 
00128 void        WM_event_remove_keymap_handler(ListBase *handlers, wmKeyMap *keymap);
00129 
00130 struct wmEventHandler *WM_event_add_ui_handler(const struct bContext *C, ListBase *handlers,
00131             int (*func)(struct bContext *C, struct wmEvent *event, void *userdata),
00132             void (*remove)(struct bContext *C, void *userdata), void *userdata);
00133 void        WM_event_remove_ui_handler(ListBase *handlers,
00134             int (*func)(struct bContext *C, struct wmEvent *event, void *userdata),
00135             void (*remove)(struct bContext *C, void *userdata), void *userdata, int postpone);
00136 void        WM_event_remove_area_handler(struct ListBase *handlers, void *area);
00137 
00138 struct wmEventHandler *WM_event_add_modal_handler(struct bContext *C, struct wmOperator *op);
00139 void        WM_event_remove_handlers(struct bContext *C, ListBase *handlers);
00140 
00141 struct wmEventHandler *WM_event_add_dropbox_handler(ListBase *handlers, ListBase *dropboxes);
00142 
00143             /* mouse */
00144 void        WM_event_add_mousemove(struct bContext *C);
00145 int         WM_modal_tweak_exit(struct wmEvent *evt, int tweak_event);
00146 
00147             /* notifiers */
00148 void        WM_event_add_notifier(const struct bContext *C, unsigned int type, void *reference);
00149 void        WM_main_add_notifier(unsigned int type, void *reference);
00150 
00151 void        wm_event_add        (struct wmWindow *win, struct wmEvent *event_to_add); /* XXX only for warning */
00152 
00153             /* at maximum, every timestep seconds it triggers event_type events */
00154 struct wmTimer *WM_event_add_timer(struct wmWindowManager *wm, struct wmWindow *win, int event_type, double timestep);
00155 void        WM_event_remove_timer(struct wmWindowManager *wm, struct wmWindow *win, struct wmTimer *timer);
00156 void        WM_event_timer_sleep(struct wmWindowManager *wm, struct wmWindow *win, struct wmTimer *timer, int dosleep);
00157 
00158         /* operator api, default callbacks */
00159             /* invoke callback, uses enum property named "type" */
00160 int         WM_menu_invoke          (struct bContext *C, struct wmOperator *op, struct wmEvent *event);
00161 int         WM_enum_search_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
00162             /* invoke callback, confirm menu + exec */
00163 int         WM_operator_confirm     (struct bContext *C, struct wmOperator *op, struct wmEvent *event);
00164         /* invoke callback, file selector "filepath" unset + exec */
00165 int         WM_operator_filesel     (struct bContext *C, struct wmOperator *op, struct wmEvent *event);
00166             /* poll callback, context checks */
00167 int         WM_operator_winactive   (struct bContext *C);
00168             /* invoke callback, exec + redo popup */
00169 int         WM_operator_props_popup (struct bContext *C, struct wmOperator *op, struct wmEvent *event);
00170 int         WM_operator_props_dialog_popup (struct bContext *C, struct wmOperator *op, int width, int height);
00171 int         WM_operator_redo_popup  (struct bContext *C, struct wmOperator *op);
00172 int         WM_operator_ui_popup    (struct bContext *C, struct wmOperator *op, int width, int height);
00173 
00174 int         WM_operator_confirm_message(struct bContext *C, struct wmOperator *op, const char *message);
00175 
00176         /* operator api */
00177 void        WM_operator_free        (struct wmOperator *op);
00178 void        WM_operator_stack_clear(struct wmWindowManager *wm);
00179 
00180 struct wmOperatorType *WM_operatortype_find(const char *idnamem, int quiet);
00181 struct GHashIterator *WM_operatortype_iter(void);
00182 void        WM_operatortype_append  (void (*opfunc)(struct wmOperatorType*));
00183 void        WM_operatortype_append_ptr  (void (*opfunc)(struct wmOperatorType*, void *), void *userdata);
00184 void        WM_operatortype_append_macro_ptr    (void (*opfunc)(struct wmOperatorType*, void *), void *userdata);
00185 int         WM_operatortype_remove(const char *idname);
00186 
00187 struct wmOperatorType *WM_operatortype_append_macro(const char *idname, const char *name, int flag);
00188 struct wmOperatorTypeMacro *WM_operatortype_macro_define(struct wmOperatorType *ot, const char *idname);
00189 
00190 
00191 int         WM_operator_poll        (struct bContext *C, struct wmOperatorType *ot);
00192 int         WM_operator_poll_context(struct bContext *C, struct wmOperatorType *ot, int context);
00193 int         WM_operator_call        (struct bContext *C, struct wmOperator *op);
00194 int         WM_operator_call_notest(struct bContext *C, struct wmOperator *op);
00195 int         WM_operator_repeat      (struct bContext *C, struct wmOperator *op);
00196 int         WM_operator_repeat_check(const struct bContext *C, struct wmOperator *op);
00197 int         WM_operator_name_call   (struct bContext *C, const char *opstring, int context, struct PointerRNA *properties);
00198 int         WM_operator_call_py(struct bContext *C, struct wmOperatorType *ot, int context, struct PointerRNA *properties, struct ReportList *reports);
00199 
00200 void        WM_operator_properties_alloc(struct PointerRNA **ptr, struct IDProperty **properties, const char *opstring); /* used for keymap and macro items */
00201 void        WM_operator_properties_sanitize(struct PointerRNA *ptr, const short no_context); /* make props context sensitive or not */
00202 void        WM_operator_properties_reset(struct wmOperator *op);
00203 void        WM_operator_properties_create(struct PointerRNA *ptr, const char *opstring);
00204 void        WM_operator_properties_create_ptr(struct PointerRNA *ptr, struct wmOperatorType *ot);
00205 void        WM_operator_properties_free(struct PointerRNA *ptr);
00206 void        WM_operator_properties_filesel(struct wmOperatorType *ot, int filter, short type, short action, short flag);
00207 void        WM_operator_properties_gesture_border(struct wmOperatorType *ot, int extend);
00208 void        WM_operator_properties_gesture_straightline(struct wmOperatorType *ot, int cursor);
00209 void        WM_operator_properties_select_all(struct wmOperatorType *ot);
00210 
00211 int         WM_operator_check_ui_enabled(const struct bContext *C, const char *idname);
00212 wmOperator *WM_operator_last_redo(const struct bContext *C);
00213 
00214 /* MOVE THIS SOMEWHERE ELSE */
00215 #define SEL_TOGGLE      0
00216 #define SEL_SELECT      1
00217 #define SEL_DESELECT    2
00218 #define SEL_INVERT      3
00219 
00220 
00221 /* flags for WM_operator_properties_filesel */
00222 #define WM_FILESEL_RELPATH      (1 << 0)
00223 
00224 #define WM_FILESEL_DIRECTORY    (1 << 1)
00225 #define WM_FILESEL_FILENAME     (1 << 2)
00226 #define WM_FILESEL_FILEPATH     (1 << 3)
00227 #define WM_FILESEL_FILES        (1 << 4)
00228 
00229 
00230         /* operator as a python command (resultuing string must be free'd) */
00231 char        *WM_operator_pystring(struct bContext *C, struct wmOperatorType *ot, struct PointerRNA *opptr, int all_args);
00232 void        WM_operator_bl_idname(char *to, const char *from);
00233 void        WM_operator_py_idname(char *to, const char *from);
00234 
00235 /* *************** menu types ******************** */
00236 void                WM_menutype_init(void);
00237 struct MenuType     *WM_menutype_find(const char *idname, int quiet);
00238 int                 WM_menutype_add(struct MenuType* mt);
00239 void                WM_menutype_freelink(struct MenuType* mt);
00240 void                WM_menutype_free(void);
00241 
00242             /* default operator callbacks for border/circle/lasso */
00243 int         WM_border_select_invoke (struct bContext *C, struct wmOperator *op, struct wmEvent *event);
00244 int         WM_border_select_modal  (struct bContext *C, struct wmOperator *op, struct wmEvent *event);
00245 int         WM_border_select_cancel(struct bContext *C, struct wmOperator *op);
00246 int         WM_gesture_circle_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
00247 int         WM_gesture_circle_modal(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
00248 int         WM_gesture_circle_cancel(struct bContext *C, struct wmOperator *op);
00249 int         WM_gesture_lines_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
00250 int         WM_gesture_lines_modal(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
00251 int         WM_gesture_lines_cancel(struct bContext *C, struct wmOperator *op);
00252 int         WM_gesture_lasso_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
00253 int         WM_gesture_lasso_modal(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
00254 int         WM_gesture_lasso_cancel(struct bContext *C, struct wmOperator *op);
00255 int         WM_gesture_straightline_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
00256 int         WM_gesture_straightline_modal(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
00257 int         WM_gesture_straightline_cancel(struct bContext *C, struct wmOperator *op);
00258 
00259             /* default operator for arearegions, generates event */
00260 void        WM_OT_tweak_gesture(struct wmOperatorType *ot);
00261 
00262             /* Gesture manager API */
00263 struct wmGesture *WM_gesture_new(struct bContext *C, struct wmEvent *event, int type);
00264 void        WM_gesture_end(struct bContext *C, struct wmGesture *gesture);
00265 void        WM_gestures_remove(struct bContext *C);
00266 
00267             /* fileselecting support */
00268 void        WM_event_add_fileselect(struct bContext *C, struct wmOperator *op);
00269 void        WM_event_fileselect_event(struct bContext *C, void *ophandle, int eventval);
00270 #ifndef NDEBUG
00271 void        WM_event_print(struct wmEvent *event);
00272 #endif
00273 
00274             /* drag and drop */
00275 struct wmDrag       *WM_event_start_drag(struct bContext *C, int icon, int type, void *poin, double value);
00276 void                WM_event_drag_image(struct wmDrag *, struct ImBuf *, float scale, int sx, int sy);
00277 
00278 struct wmDropBox    *WM_dropbox_add(ListBase *lb, const char *idname, int (*poll)(struct bContext *, struct wmDrag *, struct wmEvent *event),
00279                           void (*copy)(struct wmDrag *, struct wmDropBox *));
00280 ListBase    *WM_dropboxmap_find(const char *idname, int spaceid, int regionid);
00281 
00282             /* Set a subwindow active in pixelspace view, with optional scissor subset */
00283 void        wmSubWindowSet          (struct wmWindow *win, int swinid);
00284 void        wmSubWindowScissorSet   (struct wmWindow *win, int swinid, struct rcti *srct);
00285 
00286             /* OpenGL utilities with safety check + working in modelview matrix mode */
00287 void        wmFrustum           (float x1, float x2, float y1, float y2, float n, float f);
00288 void        wmOrtho             (float x1, float x2, float y1, float y2, float n, float f);
00289 void        wmOrtho2            (float x1, float x2, float y1, float y2);
00290 
00291             /* utilities */
00292 void        WM_set_framebuffer_index_color(int index);
00293 int         WM_framebuffer_to_index(unsigned int col);
00294 
00295             /* threaded Jobs Manager */
00296 #define WM_JOB_PRIORITY     1
00297 #define WM_JOB_EXCL_RENDER  2
00298 #define WM_JOB_PROGRESS     4
00299 #define WM_JOB_SUSPEND      8
00300 
00301 struct wmJob *WM_jobs_get(struct wmWindowManager *wm, struct wmWindow *win, void *owner, const char *name, int flag);
00302 
00303 int         WM_jobs_test(struct wmWindowManager *wm, void *owner);
00304 float       WM_jobs_progress(struct wmWindowManager *wm, void *owner);
00305 char        *WM_jobs_name(struct wmWindowManager *wm, void *owner);
00306 
00307 int             WM_jobs_is_running(struct wmJob *);
00308 void*           WM_jobs_get_customdata(struct wmJob *);
00309 void        WM_jobs_customdata(struct wmJob *, void *customdata, void (*free)(void *));
00310 void        WM_jobs_timer(struct wmJob *, double timestep, unsigned int note, unsigned int endnote);
00311 void        WM_jobs_callbacks(struct wmJob *, 
00312                               void (*startjob)(void *, short *, short *, float *),
00313                               void (*initjob)(void *),
00314                               void (*update)(void *),
00315                               void (*endjob)(void *));
00316 
00317 void        WM_jobs_start(struct wmWindowManager *wm, struct wmJob *);
00318 void        WM_jobs_stop(struct wmWindowManager *wm, void *owner, void *startjob);
00319 void        WM_jobs_kill(struct wmWindowManager *wm, void *owner, void (*)(void *, short int *, short int *, float *));
00320 void        WM_jobs_stop_all(struct wmWindowManager *wm);
00321 
00322 int         WM_jobs_has_running(struct wmWindowManager *wm);
00323 
00324             /* clipboard */
00325 char        *WM_clipboard_text_get(int selection);
00326 void        WM_clipboard_text_set(char *buf, int selection);
00327 
00328             /* progress */
00329 void        WM_progress_set(struct wmWindow *win, float progress);
00330 void        WM_progress_clear(struct wmWindow *win);
00331 
00332 #ifdef WIN32
00333             /* Windows System Console */
00334 void        WM_console_toggle(struct bContext *C, short show);
00335 #endif
00336 
00337             /* Draw (for screenshot) */
00338 void        WM_redraw_windows(struct bContext *C);
00339 
00340 /* debugging only, convenience function to write on crash */
00341 int write_crash_blend(void);
00342 
00343 #ifdef __cplusplus
00344 }
00345 #endif
00346 
00347 #endif /* WM_API_H */
00348