Blender  V3.3
outliner_context.cc
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2017 Blender Foundation. All rights reserved. */
3 
8 #include "BLI_listbase.h"
9 
10 #include "BKE_context.h"
11 
12 #include "DNA_space_types.h"
13 
14 #include "outliner_intern.hh"
15 #include "tree/tree_iterator.hh"
16 
17 using namespace blender::ed::outliner;
18 
19 static void outliner_context_selected_ids_recursive(const SpaceOutliner &space_outliner,
21 {
22  tree_iterator::all(space_outliner, [&](const TreeElement *te) {
23  const TreeStoreElem *tse = TREESTORE(te);
24  if ((tse->flag & TSE_SELECTED) && (ELEM(tse->type, TSE_SOME_ID, TSE_LAYER_COLLECTION))) {
26  }
27  });
28 }
29 
30 static void outliner_context_selected_ids(const SpaceOutliner *space_outliner,
32 {
35 }
36 
37 static const char *outliner_context_dir[] = {"selected_ids", nullptr};
38 
39 int /*eContextResult*/ outliner_context(const bContext *C,
40  const char *member,
42 {
43  SpaceOutliner *space_outliner = CTX_wm_space_outliner(C);
44 
45  if (CTX_data_dir(member)) {
47  return CTX_RESULT_OK;
48  }
49  if (CTX_data_equals(member, "selected_ids")) {
50  outliner_context_selected_ids(space_outliner, result);
51  return CTX_RESULT_OK;
52  }
53  /* NOTE: Querying non-ID selection could also work if tree elements stored their matching RNA
54  * struct type. */
55 
57 }
void CTX_data_dir_set(bContextDataResult *result, const char **dir)
Definition: context.c:696
bool CTX_data_equals(const char *member, const char *str)
Definition: context.c:634
bool CTX_data_dir(const char *member)
Definition: context.c:639
void CTX_data_id_list_add(bContextDataResult *result, struct ID *id)
Definition: context.c:659
struct SpaceOutliner * CTX_wm_space_outliner(const bContext *C)
Definition: context.c:860
@ CTX_DATA_TYPE_COLLECTION
Definition: BKE_context.h:233
@ CTX_RESULT_MEMBER_NOT_FOUND
Definition: BKE_context.h:75
@ CTX_RESULT_OK
Definition: BKE_context.h:72
void CTX_data_type_set(struct bContextDataResult *result, short type)
Definition: context.c:701
#define ELEM(...)
@ TSE_LAYER_COLLECTION
@ TSE_SOME_ID
@ TSE_SELECTED
#define C
Definition: RandGen.cpp:25
void all(const SpaceOutliner &space_outliner, const VisitorFn visitor)
int outliner_context(const bContext *C, const char *member, bContextDataResult *result)
static const char * outliner_context_dir[]
static void outliner_context_selected_ids(const SpaceOutliner *space_outliner, bContextDataResult *result)
static void outliner_context_selected_ids_recursive(const SpaceOutliner &space_outliner, bContextDataResult *result)
#define TREESTORE(a)