Blender  V3.3
space_outliner.cc
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2008 Blender Foundation. All rights reserved. */
3 
8 #include <cstdio>
9 #include <cstring>
10 
11 #include "MEM_guardedalloc.h"
12 
13 #include "BLI_blenlib.h"
14 #include "BLI_mempool.h"
15 #include "BLI_utildefines.h"
16 
17 #include "BKE_context.h"
18 #include "BKE_lib_remap.h"
19 #include "BKE_outliner_treehash.h"
20 #include "BKE_screen.h"
21 
22 #include "ED_screen.h"
23 #include "ED_space_api.h"
24 
25 #include "WM_api.h"
26 #include "WM_message.h"
27 #include "WM_types.h"
28 
29 #include "RNA_access.h"
30 
31 #include "DNA_object_types.h"
32 #include "DNA_scene_types.h"
33 
34 #include "UI_resources.h"
35 #include "UI_view2d.h"
36 
37 #include "outliner_intern.hh"
38 #include "tree/tree_display.hh"
39 
41  : tree_display(nullptr), treehash(nullptr)
42 {
43 }
44 
46 {
47  if (treehash) {
49  }
50 }
51 
53 {
54  ListBase *lb;
55  wmKeyMap *keymap;
56 
57  /* make sure we keep the hide flags */
59  region->v2d.scroll &= ~(V2D_SCROLL_LEFT | V2D_SCROLL_TOP); /* prevent any noise of past */
62 
65  region->v2d.keeptot = V2D_KEEPTOT_STRICT;
66  region->v2d.minzoom = region->v2d.maxzoom = 1.0f;
67 
68  UI_view2d_region_reinit(&region->v2d, V2D_COMMONVIEW_LIST, region->winx, region->winy);
69 
70  /* own keymap */
71  keymap = WM_keymap_ensure(wm->defaultconf, "Outliner", SPACE_OUTLINER, 0);
73 
74  /* Add dropboxes */
77 }
78 
79 static void outliner_main_region_draw(const bContext *C, ARegion *region)
80 {
81  View2D *v2d = &region->v2d;
82 
83  /* clear */
85 
87 
88  /* reset view matrix */
90 
91  /* scrollers */
92  UI_view2d_scrollers_draw(v2d, nullptr);
93 }
94 
96 {
97 }
98 
100 {
101  ScrArea *area = params->area;
102  ARegion *region = params->region;
103  wmNotifier *wmn = params->notifier;
104  SpaceOutliner *space_outliner = reinterpret_cast<SpaceOutliner *>(area->spacedata.first);
105 
106  /* context changes */
107  switch (wmn->category) {
108  case NC_WM:
109  switch (wmn->data) {
111  ED_region_tag_redraw(region);
112  break;
113  }
114  break;
115  case NC_SCENE:
116  switch (wmn->data) {
117  case ND_OB_ACTIVE:
118  case ND_OB_SELECT:
120  ED_region_tag_redraw(region);
121  }
122  else {
124  }
125  break;
126  case ND_OB_VISIBLE:
127  case ND_OB_RENDER:
128  case ND_MODE:
129  case ND_KEYINGSET:
130  case ND_FRAME:
131  case ND_RENDER_OPTIONS:
132  case ND_SEQUENCER:
133  case ND_LAYER_CONTENT:
134  case ND_WORLD:
135  case ND_SCENEBROWSE:
136  ED_region_tag_redraw(region);
137  break;
138  case ND_LAYER:
139  /* Avoid rebuild if only the active collection changes */
140  if ((wmn->subtype == NS_LAYER_COLLECTION) && (wmn->action == NA_ACTIVATED)) {
142  break;
143  }
144 
145  ED_region_tag_redraw(region);
146  break;
147  }
148  if (wmn->action == NA_EDITED) {
150  }
151  break;
152  case NC_OBJECT:
153  switch (wmn->data) {
154  case ND_TRANSFORM:
156  break;
157  case ND_BONE_ACTIVE:
158  case ND_BONE_SELECT:
159  case ND_DRAW:
160  case ND_PARENT:
161  case ND_OB_SHADING:
162  ED_region_tag_redraw(region);
163  break;
164  case ND_CONSTRAINT:
165  /* all constraint actions now, for reordering */
166  ED_region_tag_redraw(region);
167  break;
168  case ND_MODIFIER:
169  /* all modifier actions now */
170  ED_region_tag_redraw(region);
171  break;
172  default:
173  /* Trigger update for NC_OBJECT itself */
174  ED_region_tag_redraw(region);
175  break;
176  }
177  break;
178  case NC_GROUP:
179  /* All actions now, TODO: check outliner view mode? */
180  ED_region_tag_redraw(region);
181  break;
182  case NC_LAMP:
183  /* For updating light icons, when changing light type */
184  if (wmn->data == ND_LIGHTING_DRAW) {
185  ED_region_tag_redraw(region);
186  }
187  break;
188  case NC_SPACE:
189  if (wmn->data == ND_SPACE_OUTLINER) {
190  ED_region_tag_redraw(region);
191  }
192  break;
193  case NC_ID:
194  if (ELEM(wmn->action, NA_RENAME, NA_ADDED, NA_REMOVED)) {
195  ED_region_tag_redraw(region);
196  }
197  break;
198  case NC_ASSET:
199  if (ELEM(wmn->action, NA_ADDED, NA_REMOVED)) {
201  }
202  break;
203  case NC_MATERIAL:
204  switch (wmn->data) {
205  case ND_SHADING_LINKS:
207  break;
208  }
209  break;
210  case NC_GEOM:
211  switch (wmn->data) {
212  case ND_VERTEX_GROUP:
213  case ND_DATA:
214  ED_region_tag_redraw(region);
215  break;
216  }
217  break;
218  case NC_ANIMATION:
219  switch (wmn->data) {
220  case ND_NLA_ACTCHANGE:
221  case ND_KEYFRAME:
222  ED_region_tag_redraw(region);
223  break;
224  case ND_ANIMCHAN:
225  if (ELEM(wmn->action, NA_SELECTED, NA_RENAME)) {
226  ED_region_tag_redraw(region);
227  }
228  break;
229  case ND_NLA:
230  if (ELEM(wmn->action, NA_ADDED, NA_REMOVED)) {
231  ED_region_tag_redraw(region);
232  }
233  break;
234  case ND_NLA_ORDER:
235  ED_region_tag_redraw(region);
236  break;
237  }
238  break;
239  case NC_GPENCIL:
240  if (ELEM(wmn->action, NA_EDITED, NA_SELECTED)) {
241  ED_region_tag_redraw(region);
242  }
243  break;
244  case NC_SCREEN:
245  if (ELEM(wmn->data, ND_LAYOUTDELETE, ND_LAYER)) {
246  ED_region_tag_redraw(region);
247  }
248  break;
249  case NC_MASK:
250  if (ELEM(wmn->action, NA_ADDED)) {
251  ED_region_tag_redraw(region);
252  }
253  break;
254  case NC_PAINTCURVE:
255  if (ELEM(wmn->action, NA_ADDED)) {
256  ED_region_tag_redraw(region);
257  }
258  break;
259  case NC_TEXT:
260  if (ELEM(wmn->action, NA_ADDED, NA_REMOVED)) {
261  ED_region_tag_redraw(region);
262  }
263  break;
264  case NC_NODE:
265  if (ELEM(wmn->action, NA_ADDED, NA_REMOVED) &&
266  ELEM(space_outliner->outlinevis, SO_LIBRARIES, SO_DATA_API)) {
267  ED_region_tag_redraw(region);
268  }
269  break;
270  }
271 }
272 
274 {
275  struct wmMsgBus *mbus = params->message_bus;
276  ScrArea *area = params->area;
277  ARegion *region = params->region;
278  SpaceOutliner *space_outliner = reinterpret_cast<SpaceOutliner *>(area->spacedata.first);
279 
280  wmMsgSubscribeValue msg_sub_value_region_tag_redraw{};
281  msg_sub_value_region_tag_redraw.owner = region;
282  msg_sub_value_region_tag_redraw.user_data = region;
283  msg_sub_value_region_tag_redraw.notify = ED_region_do_msg_notify_tag_redraw;
284 
285  if (ELEM(space_outliner->outlinevis, SO_VIEW_LAYER, SO_SCENES, SO_OVERRIDES_LIBRARY)) {
286  WM_msg_subscribe_rna_anon_prop(mbus, Window, view_layer, &msg_sub_value_region_tag_redraw);
287  }
288 }
289 
290 /* ************************ header outliner area region *********************** */
291 
292 /* add handlers, stuff you only do once or on area/region changes */
294 {
295  ED_region_header_init(region);
296 }
297 
298 static void outliner_header_region_draw(const bContext *C, ARegion *region)
299 {
300  ED_region_header(C, region);
301 }
302 
304 {
305 }
306 
308 {
309  ARegion *region = params->region;
310  wmNotifier *wmn = params->notifier;
311 
312  /* context changes */
313  switch (wmn->category) {
314  case NC_SCENE:
315  if (wmn->data == ND_KEYINGSET) {
316  ED_region_tag_redraw(region);
317  }
318  break;
319  case NC_SPACE:
320  if (wmn->data == ND_SPACE_OUTLINER) {
321  ED_region_tag_redraw(region);
322  }
323  break;
324  }
325 }
326 
327 /* ******************** default callbacks for outliner space ***************** */
328 
330 {
331  ARegion *region;
332  SpaceOutliner *space_outliner;
333 
334  space_outliner = MEM_cnew<SpaceOutliner>("initoutliner");
335  space_outliner->spacetype = SPACE_OUTLINER;
336  space_outliner->filter_id_type = ID_GR;
338  space_outliner->outlinevis = SO_VIEW_LAYER;
340  space_outliner->flag = SO_SYNC_SELECT | SO_MODE_COLUMN;
341  space_outliner->filter = SO_FILTER_NO_VIEW_LAYERS;
342 
343  /* header */
344  region = MEM_cnew<ARegion>("header for outliner");
345 
346  BLI_addtail(&space_outliner->regionbase, region);
347  region->regiontype = RGN_TYPE_HEADER;
349 
350  /* main region */
351  region = MEM_cnew<ARegion>("main region for outliner");
352 
353  BLI_addtail(&space_outliner->regionbase, region);
354  region->regiontype = RGN_TYPE_WINDOW;
355 
356  return (SpaceLink *)space_outliner;
357 }
358 
359 /* not spacelink itself */
360 static void outliner_free(SpaceLink *sl)
361 {
362  SpaceOutliner *space_outliner = (SpaceOutliner *)sl;
363 
364  outliner_free_tree(&space_outliner->tree);
365  if (space_outliner->treestore) {
366  BLI_mempool_destroy(space_outliner->treestore);
367  }
368 
369  MEM_delete(space_outliner->runtime);
370 }
371 
372 /* spacetype; init callback */
374 {
375  SpaceOutliner *space_outliner = reinterpret_cast<SpaceOutliner *>(area->spacedata.first);
376 
377  if (space_outliner->runtime == nullptr) {
378  space_outliner->runtime = MEM_new<SpaceOutliner_Runtime>("SpaceOutliner_Runtime");
379  }
380 }
381 
383 {
384  SpaceOutliner *space_outliner = (SpaceOutliner *)sl;
385  SpaceOutliner *space_outliner_new = MEM_cnew<SpaceOutliner>(__func__, *space_outliner);
386 
387  BLI_listbase_clear(&space_outliner_new->tree);
388  space_outliner_new->treestore = nullptr;
389 
391 
392  if (space_outliner->runtime) {
393  /* Copy constructor handles details. */
394  space_outliner_new->runtime = MEM_new<SpaceOutliner_Runtime>("SpaceOutliner_runtime dup",
395  *space_outliner->runtime);
396  }
397 
398  return (SpaceLink *)space_outliner_new;
399 }
400 
401 static void outliner_id_remap(ScrArea *area, SpaceLink *slink, const struct IDRemapper *mappings)
402 {
403  SpaceOutliner *space_outliner = (SpaceOutliner *)slink;
404 
405  BKE_id_remapper_apply(mappings, (ID **)&space_outliner->search_tse.id, ID_REMAP_APPLY_DEFAULT);
406 
407  if (!space_outliner->treestore) {
408  return;
409  }
410 
411  TreeStoreElem *tselem;
412  BLI_mempool_iter iter;
413  bool changed = false;
414  bool unassigned = false;
415 
416  BLI_mempool_iternew(space_outliner->treestore, &iter);
417  while ((tselem = static_cast<TreeStoreElem *>(BLI_mempool_iterstep(&iter)))) {
418  switch (BKE_id_remapper_apply(mappings, &tselem->id, ID_REMAP_APPLY_DEFAULT)) {
420  changed = true;
421  break;
423  changed = true;
424  unassigned = true;
425  break;
428  break;
429  }
430  }
431 
432  /* Note that the Outliner may not be the active editor of the area, and hence not initialized.
433  * So runtime data might not have been created yet. */
434  if (space_outliner->runtime && space_outliner->runtime->treehash && changed) {
435  /* rebuild hash table, because it depends on ids too */
436  /* postpone a full rebuild because this can be called many times on-free */
437  space_outliner->storeflag |= SO_TREESTORE_REBUILD;
438 
439  if (unassigned) {
440  /* Redraw is needed when removing data for multiple outlines show the same data.
441  * without this, the stale data won't get fully flushed when this outliner
442  * is not the active outliner the user is interacting with. See T85976. */
444  }
445  }
446 }
447 
448 static void outliner_deactivate(struct ScrArea *area)
449 {
450  /* Remove hover highlights */
451  SpaceOutliner *space_outliner = reinterpret_cast<SpaceOutliner *>(area->spacedata.first);
452  outliner_flag_set(*space_outliner, TSE_HIGHLIGHTED_ANY, false);
454 }
455 
457 {
458  SpaceType *st = MEM_cnew<SpaceType>("spacetype time");
459  ARegionType *art;
460 
461  st->spaceid = SPACE_OUTLINER;
462  strncpy(st->name, "Outliner", BKE_ST_MAXNAME);
463 
464  st->create = outliner_create;
465  st->free = outliner_free;
466  st->init = outliner_init;
467  st->duplicate = outliner_duplicate;
468  st->operatortypes = outliner_operatortypes;
469  st->keymap = outliner_keymap;
470  st->dropboxes = outliner_dropboxes;
471  st->id_remap = outliner_id_remap;
472  st->deactivate = outliner_deactivate;
473  st->context = outliner_context;
474 
475  /* regions: main window */
476  art = MEM_cnew<ARegionType>("spacetype outliner region");
477  art->regionid = RGN_TYPE_WINDOW;
479 
485  BLI_addhead(&st->regiontypes, art);
486 
487  /* regions: header */
488  art = MEM_cnew<ARegionType>("spacetype outliner header region");
489  art->regionid = RGN_TYPE_HEADER;
490  art->prefsizey = HEADERY;
492 
497  BLI_addhead(&st->regiontypes, art);
498 
500 }
@ ID_REMAP_RESULT_SOURCE_REMAPPED
@ ID_REMAP_RESULT_SOURCE_UNASSIGNED
@ ID_REMAP_RESULT_SOURCE_NOT_MAPPABLE
@ ID_REMAP_RESULT_SOURCE_UNAVAILABLE
@ ID_REMAP_APPLY_DEFAULT
IDRemapperApplyResult BKE_id_remapper_apply(const struct IDRemapper *id_remapper, struct ID **r_id_ptr, IDRemapperApplyOptions options)
void BKE_outliner_treehash_free(void *treehash)
struct ARegion * BKE_area_find_region_type(const struct ScrArea *area, int type)
#define BKE_ST_MAXNAME
Definition: BKE_screen.h:53
void BKE_spacetype_register(struct SpaceType *st)
Definition: screen.c:391
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition: listbase.c:60
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
Definition: BLI_listbase.h:273
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition: listbase.c:80
void BLI_mempool_iternew(BLI_mempool *pool, BLI_mempool_iter *iter) ATTR_NONNULL()
Definition: BLI_mempool.c:498
void * BLI_mempool_iterstep(BLI_mempool_iter *iter) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
Definition: BLI_mempool.c:577
void BLI_mempool_destroy(BLI_mempool *pool) ATTR_NONNULL(1)
Definition: BLI_mempool.c:707
#define UNUSED(x)
#define ELEM(...)
@ ID_GR
Definition: DNA_ID_enums.h:65
Object is a sort of wrapper for general info.
@ TSE_HIGHLIGHTED_ANY
#define HEADERY
@ RGN_TYPE_WINDOW
@ RGN_TYPE_HEADER
@ RGN_ALIGN_BOTTOM
@ RGN_ALIGN_TOP
@ SPACE_OUTLINER
@ SO_RESTRICT_HIDE
@ SO_RESTRICT_RENDER
@ SO_RESTRICT_ENABLE
@ SO_FILTER_NO_VIEW_LAYERS
@ SO_SYNC_SELECT
@ SO_MODE_COLUMN
@ SO_TREESTORE_REBUILD
@ SO_OVERRIDES_LIBRARY
@ SO_DATA_API
@ SO_LIBRARIES
@ SO_VIEW_LAYER
@ SO_SCENES
@ USER_HEADER_BOTTOM
@ V2D_KEEPTOT_STRICT
@ V2D_LIMITZOOM
@ V2D_LOCKZOOM_X
@ V2D_KEEPASPECT
@ V2D_LOCKZOOM_Y
@ V2D_SCROLL_LEFT
@ V2D_SCROLL_HORIZONTAL_HIDE
@ V2D_SCROLL_VERTICAL_HIDE
@ V2D_SCROLL_TOP
@ V2D_SCROLL_RIGHT
@ V2D_SCROLL_BOTTOM
@ V2D_ALIGN_NO_NEG_X
@ V2D_ALIGN_NO_POS_Y
#define WM_OUTLINER_SYNC_SELECT_FROM_ALL
void ED_area_tag_redraw(ScrArea *area)
Definition: area.c:729
@ ED_KEYMAP_UI
Definition: ED_screen.h:691
@ ED_KEYMAP_HEADER
Definition: ED_screen.h:697
@ ED_KEYMAP_VIEW2D
Definition: ED_screen.h:694
void ED_region_header(const struct bContext *C, struct ARegion *region)
void ED_region_do_msg_notify_tag_redraw(struct bContext *C, struct wmMsgSubscribeKey *msg_key, struct wmMsgSubscribeValue *msg_val)
void ED_region_tag_redraw_no_rebuild(struct ARegion *region)
Definition: area.c:674
void ED_region_tag_redraw(struct ARegion *region)
Definition: area.c:655
void ED_region_header_init(struct ARegion *region)
Definition: area.c:3417
Read Guarded memory(de)allocation.
#define C
Definition: RandGen.cpp:25
@ TH_BACK
Definition: UI_resources.h:39
void UI_ThemeClearColor(int colorid)
Definition: resources.c:1448
void UI_view2d_region_reinit(struct View2D *v2d, short type, int winx, int winy)
Definition: view2d.cc:217
void UI_view2d_view_restore(const struct bContext *C)
void UI_view2d_scrollers_draw(struct View2D *v2d, const struct rcti *mask_custom)
@ V2D_COMMONVIEW_LIST
Definition: UI_view2d.h:38
#define ND_SEQUENCER
Definition: WM_types.h:385
#define ND_WORLD
Definition: WM_types.h:401
#define NA_ACTIVATED
Definition: WM_types.h:529
#define NC_ID
Definition: WM_types.h:345
#define NC_NODE
Definition: WM_types.h:344
#define NC_GEOM
Definition: WM_types.h:343
#define ND_NLA_ACTCHANGE
Definition: WM_types.h:446
#define ND_DRAW
Definition: WM_types.h:410
#define ND_OB_ACTIVE
Definition: WM_types.h:388
#define NC_WM
Definition: WM_types.h:324
#define ND_DATA
Definition: WM_types.h:456
#define ND_LIGHTING_DRAW
Definition: WM_types.h:432
#define ND_RENDER_OPTIONS
Definition: WM_types.h:383
#define NC_ANIMATION
Definition: WM_types.h:338
#define ND_VERTEX_GROUP
Definition: WM_types.h:457
#define NC_PAINTCURVE
Definition: WM_types.h:346
#define NC_SCREEN
Definition: WM_types.h:327
#define ND_MODE
Definition: WM_types.h:393
#define ND_LIB_OVERRIDE_CHANGED
Definition: WM_types.h:367
#define ND_OB_SELECT
Definition: WM_types.h:390
#define ND_KEYINGSET
Definition: WM_types.h:396
#define NC_SCENE
Definition: WM_types.h:328
#define NA_ADDED
Definition: WM_types.h:525
#define ND_OB_VISIBLE
Definition: WM_types.h:391
#define ND_LAYER_CONTENT
Definition: WM_types.h:402
#define NC_GROUP
Definition: WM_types.h:333
#define ND_MODIFIER
Definition: WM_types.h:411
#define NA_EDITED
Definition: WM_types.h:523
#define ND_PARENT
Definition: WM_types.h:416
#define NC_TEXT
Definition: WM_types.h:336
#define NC_MATERIAL
Definition: WM_types.h:330
#define NC_LAMP
Definition: WM_types.h:332
#define ND_CONSTRAINT
Definition: WM_types.h:413
#define ND_FRAME
Definition: WM_types.h:382
#define NC_ASSET
Definition: WM_types.h:354
#define NA_REMOVED
Definition: WM_types.h:526
#define ND_NLA_ORDER
Definition: WM_types.h:448
#define NC_GPENCIL
Definition: WM_types.h:349
#define ND_NLA
Definition: WM_types.h:445
#define ND_BONE_ACTIVE
Definition: WM_types.h:408
#define ND_OB_RENDER
Definition: WM_types.h:392
#define ND_TRANSFORM
Definition: WM_types.h:405
#define ND_LAYER
Definition: WM_types.h:398
#define NC_MASK
Definition: WM_types.h:348
#define NA_RENAME
Definition: WM_types.h:527
#define ND_BONE_SELECT
Definition: WM_types.h:409
#define ND_OB_SHADING
Definition: WM_types.h:406
#define ND_KEYFRAME
Definition: WM_types.h:442
#define NC_OBJECT
Definition: WM_types.h:329
#define ND_SCENEBROWSE
Definition: WM_types.h:380
#define ND_LAYOUTDELETE
Definition: WM_types.h:371
#define ND_ANIMCHAN
Definition: WM_types.h:444
#define ND_SHADING_LINKS
Definition: WM_types.h:427
#define NS_LAYER_COLLECTION
Definition: WM_types.h:519
#define NC_SPACE
Definition: WM_types.h:342
#define NA_SELECTED
Definition: WM_types.h:528
#define ND_SPACE_OUTLINER
Definition: WM_types.h:470
unsigned int U
Definition: btGjkEpa3.h:78
Scene scene
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
static void area(int d1, int d2, int e1, int e2, float weights[2])
static const pxr::TfToken st("st", pxr::TfToken::Immortal)
int outliner_context(const bContext *C, const char *member, bContextDataResult *result)
void outliner_dropboxes(void)
void draw_outliner(const bContext *C)
bool outliner_flag_set(const SpaceOutliner &space_outliner, const short flag, const short set)
bool outliner_requires_rebuild_on_select_or_active_change(const struct SpaceOutliner *space_outliner)
void outliner_free_tree(ListBase *tree)
void outliner_keymap(struct wmKeyConfig *keyconf)
void outliner_operatortypes(void)
Definition: outliner_ops.cc:18
static void outliner_header_region_free(ARegion *UNUSED(region))
static SpaceLink * outliner_create(const ScrArea *UNUSED(area), const Scene *UNUSED(scene))
static SpaceLink * outliner_duplicate(SpaceLink *sl)
static void outliner_header_region_listener(const wmRegionListenerParams *params)
static void outliner_init(wmWindowManager *UNUSED(wm), ScrArea *area)
static void outliner_main_region_message_subscribe(const wmRegionMessageSubscribeParams *params)
static void outliner_id_remap(ScrArea *area, SpaceLink *slink, const struct IDRemapper *mappings)
static void outliner_main_region_init(wmWindowManager *wm, ARegion *region)
static void outliner_main_region_listener(const wmRegionListenerParams *params)
void ED_spacetype_outliner(void)
static void outliner_header_region_draw(const bContext *C, ARegion *region)
static void outliner_main_region_free(ARegion *UNUSED(region))
static void outliner_header_region_init(wmWindowManager *UNUSED(wm), ARegion *region)
static void outliner_main_region_draw(const bContext *C, ARegion *region)
static void outliner_free(SpaceLink *sl)
static void outliner_deactivate(struct ScrArea *area)
void(* draw)(const struct bContext *C, struct ARegion *region)
Definition: BKE_screen.h:151
void(* message_subscribe)(const wmRegionMessageSubscribeParams *params)
Definition: BKE_screen.h:167
void(* listener)(const wmRegionListenerParams *params)
Definition: BKE_screen.h:165
int keymapflag
Definition: BKE_screen.h:208
void(* free)(struct ARegion *)
Definition: BKE_screen.h:169
void(* init)(struct wmWindowManager *wm, struct ARegion *region)
Definition: BKE_screen.h:147
ListBase handlers
short alignment
short regiontype
Definition: DNA_ID.h:368
SpaceOutliner_Runtime()=default
struct GHash * treehash
struct TreeStoreElem search_tse
ListBase regionbase
SpaceOutliner_Runtime * runtime
struct BLI_mempool * treestore
float minzoom
short align
short keeptot
short keepzoom
short scroll
float maxzoom
unsigned int data
Definition: WM_types.h:308
unsigned int action
Definition: WM_types.h:308
unsigned int category
Definition: WM_types.h:308
unsigned int subtype
Definition: WM_types.h:308
struct wmKeyConfig * defaultconf
Establish and manage Outliner trees for different display modes.
ListBase * WM_dropboxmap_find(const char *idname, int spaceid, int regionid)
Definition: wm_dragdrop.cc:76
wmEventHandler_Dropbox * WM_event_add_dropbox_handler(ListBase *handlers, ListBase *dropboxes)
wmEventHandler_Keymap * WM_event_add_keymap_handler_v2d_mask(ListBase *handlers, wmKeyMap *keymap)
wmKeyMap * WM_keymap_ensure(wmKeyConfig *keyconf, const char *idname, int spaceid, int regionid)
Definition: wm_keymap.c:852
#define WM_msg_subscribe_rna_anon_prop(mbus, type_, prop_, value)