Fix errors raised at generating Python API docs
[blender.git] / source / blender / makesdna / DNA_workspace_types.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16
17 /** \file
18  * \ingroup DNA
19  *
20  * Use API in BKE_workspace.h to edit these.
21  */
22
23 #ifndef __DNA_WORKSPACE_TYPES_H__
24 #define __DNA_WORKSPACE_TYPES_H__
25
26 #include "DNA_scene_types.h"
27
28 #
29 #
30 typedef struct bToolRef_Runtime {
31   int cursor;
32
33   /** One of these 3 must be defined. */
34   char keymap[64];
35   char gizmo_group[64];
36   char data_block[64];
37
38   /** Use to infer primary operator to use when setting accelerator keys. */
39   char op[64];
40
41   /** Index when a tool is a member of a group. */
42   int index;
43 } bToolRef_Runtime;
44
45 /* Stored per mode. */
46 typedef struct bToolRef {
47   struct bToolRef *next, *prev;
48   char idname[64];
49
50   /** Use to avoid initializing the same tool multiple times. */
51   short tag;
52
53   /** #bToolKey (spacetype, mode), used in 'WM_api.h' */
54   short space_type;
55   /**
56    * Value depends on the 'space_type', object mode for 3D view, image editor has own mode too.
57    * RNA needs to handle using item function.
58    */
59   int mode;
60
61   /**
62    * Use for tool options, each group's name must match a tool name:
63    *
64    *    {"Tool Name": {"SOME_OT_operator": {...}, ..}, ..}
65    *
66    * This is done since different tools may call the same operators with their own options.
67    */
68   IDProperty *properties;
69
70   /** Variables needed to operate the tool. */
71   bToolRef_Runtime *runtime;
72 } bToolRef;
73
74 /**
75  * \brief Wrapper for bScreen.
76  *
77  * #bScreens are IDs and thus stored in a main list-base.
78  * We also want to store a list-base of them within the workspace
79  * (so each workspace can have its own set of screen-layouts)
80  * which would mess with the next/prev pointers.
81  * So we use this struct to wrap a bScreen pointer with another pair of next/prev pointers.
82  */
83 typedef struct WorkSpaceLayout {
84   struct WorkSpaceLayout *next, *prev;
85
86   struct bScreen *screen;
87   /* The name of this layout, we override the RNA name of the screen with this
88    * (but not ID name itself) */
89   /** MAX_NAME. */
90   char name[64];
91 } WorkSpaceLayout;
92
93 /** Optional tags, which features to use, aligned with #bAddon names by convention. */
94 typedef struct wmOwnerID {
95   struct wmOwnerID *next, *prev;
96   /** MAX_NAME. */
97   char name[64];
98 } wmOwnerID;
99
100 typedef struct WorkSpace {
101   ID id;
102
103   /** WorkSpaceLayout. */
104   ListBase layouts;
105   /* Store for each hook (so for each window) which layout has
106    * been activated the last time this workspace was visible. */
107   /** WorkSpaceDataRelation. */
108   ListBase hook_layout_relations;
109
110   /* Feature tagging (use for addons) */
111   /** #wmOwnerID. */
112   ListBase owner_ids;
113
114   /** List of #bToolRef */
115   ListBase tools;
116
117   char _pad[4];
118
119   int object_mode;
120
121   /** Enum eWorkSpaceFlags. */
122   int flags;
123
124   /** Number for workspace tab reordering in the UI. */
125   int order;
126
127   /** Info text from modal operators (runtime). */
128   char *status_text;
129 } WorkSpace;
130
131 /**
132  * Generic (and simple/primitive) struct for storing a history of assignments/relations
133  * of workspace data to non-workspace data in a listbase inside the workspace.
134  *
135  * Using this we can restore the old state of a workspace if the user switches back to it.
136  *
137  * Usage
138  * =====
139  * When activating a workspace, it should activate the screen-layout that was active in that
140  * workspace before *in this window*.
141  * More concretely:
142  * * There are two windows, win1 and win2.
143  * * Both show workspace ws1, but both also had workspace ws2 activated at some point before.
144  * * Last time ws2 was active in win1, screen-layout sl1 was activated.
145  * * Last time ws2 was active in win2, screen-layout sl2 was activated.
146  * * When changing from ws1 to ws2 in win1, screen-layout sl1 should be activated again.
147  * * When changing from ws1 to ws2 in win2, screen-layout sl2 should be activated again.
148  * So that means we have to store the active screen-layout in a per workspace, per window
149  * relation. This struct is used to store an active screen-layout for each window within the
150  * workspace.
151  * To find the screen-layout to activate for this window-workspace combination, simply lookup
152  * the WorkSpaceDataRelation with the workspace-hook of the window set as parent.
153  */
154 typedef struct WorkSpaceDataRelation {
155   struct WorkSpaceDataRelation *next, *prev;
156
157   /** The data used to identify the relation
158    * (e.g. to find screen-layout (= value) from/for a hook). */
159   void *parent;
160   /** The value for this parent-data/workspace relation. */
161   void *value;
162 } WorkSpaceDataRelation;
163
164 /**
165  * Little wrapper to store data that is going to be per window, but coming from the workspace.
166  * It allows us to keep workspace and window data completely separate.
167  */
168 typedef struct WorkSpaceInstanceHook {
169   WorkSpace *active;
170   struct WorkSpaceLayout *act_layout;
171
172   /** Needed because we can't change workspaces/layouts in running handler loop,
173    * it would break context. */
174   WorkSpace *temp_workspace_store;
175   struct WorkSpaceLayout *temp_layout_store;
176 } WorkSpaceInstanceHook;
177
178 typedef enum eWorkSpaceFlags {
179   WORKSPACE_USE_FILTER_BY_ORIGIN = (1 << 1),
180 } eWorkSpaceFlags;
181
182 #endif /* __DNA_WORKSPACE_TYPES_H__ */