own fix r34446, was incorrect, fixed properly now.
[blender.git] / source / blender / makesdna / DNA_windowmanager_types.h
index 7d03bbec1ee987218c6b090ab86df4dce43bc848..a29ea4e9152a3672771863530c9f1bb83c3bd746 100644 (file)
@@ -1,5 +1,5 @@
 /**
- * $Id:
+ * $Id$
  *
  * ***** BEGIN GPL LICENSE BLOCK *****
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
  * The Original Code is Copyright (C) 2007 Blender Foundation.
  * All rights reserved.
@@ -42,6 +42,7 @@ struct wmGesture;
 struct wmOperatorType;
 struct wmOperator;
 struct wmKeyMap;
+struct wmKeyConfig;
 
 /* forwards */
 struct bContext;
@@ -59,7 +60,7 @@ struct uiLayout;
 #define OP_MAX_TYPENAME        64
 #define KMAP_MAX_NAME  64
 
-
+/* keep in sync with 'wm_report_items' in wm_rna.c */
 typedef enum ReportType {
        RPT_DEBUG                                       = 1<<0,
        RPT_INFO                                        = 1<<1,
@@ -80,21 +81,37 @@ typedef enum ReportType {
 enum ReportListFlags {
        RPT_PRINT = 1,
        RPT_STORE = 2,
+       RPT_FREE = 4
 };
+#
+#
 typedef struct Report {
        struct Report *next, *prev;
        short type; /* ReportType */
        short flag;
        int len; /* strlen(message), saves some time calculating the word wrap  */
-       char *typestr;
-       char *message;
+       const char *typestr;
+       const char *message;
 } Report;
+
+/* saved in the wm, dont remove */
 typedef struct ReportList {
        ListBase list;
        int printlevel; /* ReportType */
        int storelevel; /* ReportType */
        int flag, pad;
+       struct wmTimer *reporttimer;
 } ReportList;
+
+/* timer customdata to control reports display */
+#
+#
+typedef struct ReportTimerInfo {
+       float col[3];
+       float greyscale;
+       float widthfac;
+} ReportTimerInfo;
+
 /* reports need to be before wmWindowManager */
 
 
@@ -107,7 +124,7 @@ typedef struct wmWindowManager {
        
        int initialized;                /* set on file read */
        short file_saved;               /* indicator whether data was saved */
-       short pad;
+       short op_undo_depth;    /* operator stack depth to avoid nested undo pushes */
        
        ListBase operators;             /* operator registry */
        
@@ -119,14 +136,18 @@ typedef struct wmWindowManager {
        
        ListBase paintcursors;  /* extra overlay cursors to draw, like circles */
        
-       /* used keymaps, optionally/partially saved */
-       ListBase keymaps;
+       ListBase drags;                 /* active dragged items */
        
+       ListBase keyconfigs;                            /* known key configurations */
+       struct wmKeyConfig *defaultconf;        /* default configuration, not saved */
+
+       ListBase timers;                                        /* active timers */
+       struct wmTimer *autosavetimer;          /* timer for auto save */
 } wmWindowManager;
 
 /* wmWindowManager.initialized */
-#define WM_INIT_WINDOW         1<<0
-#define WM_INIT_KEYMAP         1<<1
+#define WM_INIT_WINDOW         (1<<0)
+#define WM_INIT_KEYMAP         (1<<1)
 
 /* the savable part, rest of data is local in ghostwinlay */
 typedef struct wmWindow {
@@ -134,7 +155,10 @@ typedef struct wmWindow {
        
        void *ghostwin;         /* dont want to include ghost.h stuff */
        
-       int winid, pad;         /* winid also in screens, is for retrieving this window after read */
+       int winid;              /* winid also in screens, is for retrieving this window after read */
+
+       short grabcursor; /* cursor grab mode */
+       short pad;
        
        struct bScreen *screen;         /* active screen */
        struct bScreen *newscreen;      /* temporary when switching */
@@ -147,8 +171,8 @@ typedef struct wmWindow {
        short cursor;           /* current mouse cursor type */
        short lastcursor;       /* for temp waitcursor */
        short addmousemove;     /* internal: tag this for extra mousemove event, makes cursors/buttons active on UI switching */
-       int pad3;
-       
+       short pad2[2];
+
        struct wmEvent *eventstate;     /* storage for event system */
        
        struct wmSubWindow *curswin;    /* internal for wm_subwindow.c only */
@@ -158,10 +182,9 @@ typedef struct wmWindow {
        int drawmethod, drawfail;       /* internal for wm_draw.c only */
        void *drawdata;                         /* internal for wm_draw.c only */
        
-       ListBase timers;
-       
        ListBase queue;                         /* all events (ghost level events were handled) */
-       ListBase handlers;                      /* window+screen handlers, overriding all queues */
+       ListBase handlers;                      /* window+screen handlers, handled last */
+       ListBase modalhandlers;         /* priority handlers, handled first */
        
        ListBase subwindows;    /* opengl stuff for sub windows, see notes in wm_subwindow.c */
        ListBase gesture;               /* gesture stuff */
@@ -174,98 +197,82 @@ typedef struct wmWindow {
 #
 typedef struct wmOperatorTypeMacro {
        struct wmOperatorTypeMacro *next, *prev;
-       
+
        /* operator id */
-       char idname[MAX_ID_NAME];
+       char idname[64];
        /* rna pointer to access properties, like keymap */
-       struct PointerRNA *ptr; 
+       struct IDProperty *properties;  /* operator properties, assigned to ptr->data and can be written to a file */
+       struct PointerRNA *ptr;
 
 } wmOperatorTypeMacro;
 
-#
-#
-typedef struct wmOperatorType {
-       struct wmOperatorType *next, *prev;
-       
-       char *name;             /* text for ui, undo */
-       char *idname;           /* unique identifier */
-       char *description;      /* tooltips and python docs */
-       
-       /* this callback executes the operator without any interactive input,
-        * parameters may be provided through operator properties. cannot use
-        * any interface code or input device state.
-        * - see defines below for return values */
-       int (*exec)(struct bContext *, struct wmOperator *);
-
-       /* for modal temporary operators, initially invoke is called. then
-        * any further events are handled in modal. if the operation is
-        * cancelled due to some external reason, cancel is called
-        * - see defines below for return values */
-       int (*invoke)(struct bContext *, struct wmOperator *, struct wmEvent *);
-       int (*cancel)(struct bContext *, struct wmOperator *);
-       int (*modal)(struct bContext *, struct wmOperator *, struct wmEvent *);
-
-       /* verify if the operator can be executed in the current context, note
-        * that the operator might still fail to execute even if this return true */
-       int (*poll)(struct bContext *);
-       
-       /* optional panel for redo and repeat, autogenerated if not set */
-       void (*ui)(struct bContext *, struct PointerRNA *, struct uiLayout *);
-       
-       /* rna for properties */
-       struct StructRNA *srna;
-       
-       /* struct wmOperatorTypeMacro */
-       ListBase macro;
-       
-       short flag;
-       
-       /* pointer to modal keymap, do not free! */
-       struct wmKeyMap *modalkeymap;
-       
-       /* only used for operators defined with python
-        * use to store pointers to python functions */
-       void *pyop_data;
-
-} wmOperatorType;
-
-
 /* partial copy of the event, for matching by eventhandler */
-typedef struct wmKeymapItem {
-       struct wmKeymapItem *next, *prev;
+typedef struct wmKeyMapItem {
+       struct wmKeyMapItem *next, *prev;
        
-       char idname[64];                                /* used to retrieve operator type pointer */
-       struct PointerRNA *ptr;                 /* rna pointer to access properties */
+       /* operator */
+       char idname[64];        /* used to retrieve operator type pointer */
+       IDProperty *properties;                 /* operator properties, assigned to ptr->data and can be written to a file */
        
+       /* modal */
+       short propvalue;                                /* if used, the item is from modal map */
+
+       /* event */
        short type;                                             /* event code itself */
-       short val;                                              /* 0=any, 1=click, 2=release, or wheelvalue, or... */
+       short val;                                              /* KM_ANY, KM_PRESS, KM_NOTHING etc */
        short shift, ctrl, alt, oskey;  /* oskey is apple or windowskey, value denotes order of pressed */
        short keymodifier;                              /* rawkey modifier */
        
-       short propvalue;                                /* if used, the item is from modal map */
-       
-       short inactive;                                 /* if set, deactivated item */
-       short maptype;                                          /* keymap editor */
-       short pad2, pad3;
-} wmKeymapItem;
+       /* flag: inactive, expanded */
+       short flag;
 
+       /* runtime */
+       short maptype;                                  /* keymap editor */
+       short id;                                               /* unique identifier. Positive for kmi that override builtins, negative otherwise */
+       short pad;
+       struct PointerRNA *ptr;                 /* rna pointer to access properties */
+} wmKeyMapItem;
+
+/* wmKeyMapItem.flag */
+#define KMI_INACTIVE   1
+#define KMI_EXPANDED   2
 
 /* stored in WM, the actively used keymaps */
 typedef struct wmKeyMap {
        struct wmKeyMap *next, *prev;
        
-       ListBase keymap;
+       ListBase items;
        
-       char nameid[64];        /* global editor keymaps, or for more per space/region */
+       char idname[64];        /* global editor keymaps, or for more per space/region */
        short spaceid;          /* same IDs as in DNA_space_types.h */
        short regionid;         /* see above */
        
-       short is_modal;         /* modal map, not using operatornames */
-       short pad;
+       short flag;                     /* general flags */
+       short kmi_id;           /* last kmi id */
        
-       void *items;            /* struct EnumPropertyItem for now */
+       /* runtime */
+       int (*poll)(struct bContext *); /* verify if enabled in the current context */
+       void *modal_items;                              /* for modal, EnumPropertyItem for now */
 } wmKeyMap;
 
+/* wmKeyMap.flag */
+#define KEYMAP_MODAL                           1       /* modal map, not using operatornames */
+#define KEYMAP_USER                                    2       /* user created keymap */
+#define KEYMAP_EXPANDED                                4
+#define KEYMAP_CHILDREN_EXPANDED       8
+
+typedef struct wmKeyConfig {
+       struct wmKeyConfig *next, *prev;
+
+       char idname[64];                /* unique name */
+       char basename[64];              /* idname of configuration this is derives from, "" if none */
+       
+       ListBase keymaps;
+       int actkeymap, flag;
+} wmKeyConfig;
+
+/* wmKeyConfig.flag */
+#define KEYCONF_USER                   (1 << 1)
 
 /* this one is the operator itself, stored in files for macros etc */
 /* operator + operatortype should be able to redo entirely, but for different contextes */
@@ -273,19 +280,22 @@ typedef struct wmOperator {
        struct wmOperator *next, *prev;
 
        /* saved */
-       char idname[64];                        /* used to retrieve type pointer */
+       char idname[64];/* used to retrieve type pointer */
        IDProperty *properties;         /* saved, user-settable properties */
-       
+
        /* runtime */
-       wmOperatorType *type;           /* operator type definition from idname */
+       struct wmOperatorType *type;/* operator type definition from idname */
        void *customdata;                       /* custom storage, only while operator runs */
-       
+       void *py_instance;                      /* python stores the class instance here */
+
        struct PointerRNA *ptr;         /* rna pointer to access properties */
        struct ReportList *reports;     /* errors and warnings storage */
-       
+
        ListBase macro;                         /* list of operators, can be a tree */
        struct wmOperator *opm;         /* current running macro, not saved */
-       
+       struct uiLayout *layout;        /* runtime for drawing */
+       short flag, pad[3];
+
 } wmOperator;
 
 /* operator type exec(), invoke() modal(), return values */
@@ -294,41 +304,11 @@ typedef struct wmOperator {
 #define OPERATOR_FINISHED              4
 /* add this flag if the event should pass through */
 #define OPERATOR_PASS_THROUGH  8
+/* in case operator got executed outside WM code... like via fileselect */
+#define OPERATOR_HANDLED               16
 
-
-/* ************** wmEvent ************************ */
-/* for read-only rna access, dont save this */
-
-/* each event should have full modifier state */
-/* event comes from eventmanager and from keymap */
-typedef struct wmEvent {
-       struct wmEvent *next, *prev;
-       
-       short type;                     /* event code itself (short, is also in keymap) */
-       short val;                      /* press, release, scrollvalue */
-       short x, y;                     /* mouse pointer position, screen coord */
-       short mval[2];          /* region mouse position, name convention pre 2.5 :) */
-       short prevx, prevy;     /* previous mouse pointer position */
-       short unicode;          /* future, ghost? */
-       char ascii;                     /* from ghost */
-       char pad;
-       
-       /* modifier states */
-       short shift, ctrl, alt, oskey;  /* oskey is apple or windowskey, value denotes order of pressed */
-       short keymodifier;                              /* rawkey modifier */
-       
-       short pad1;
-       
-       /* keymap item, set by handler (weak?) */
-       const char *keymap_idname;
-       
-       /* custom data */
-       short custom;           /* custom data type, stylus, 6dof, see wm_event_types.h */
-       short customdatafree;
-       int pad2;
-       void *customdata;       /* ascii, unicode, mouse coords, angles, vectors, dragdrop info */
-       
-} wmEvent;
+/* wmOperator flag */
+#define OP_GRAB_POINTER                        1
 
 typedef enum wmRadialControlMode {
        WM_RADIALCONTROL_SIZE,
@@ -337,4 +317,3 @@ typedef enum wmRadialControlMode {
 } wmRadialControlMode;
 
 #endif /* DNA_WINDOWMANAGER_TYPES_H */
-