Files
test2/source/blender/editors/space_outliner/outliner_context.cc
Campbell Barton b372ebae68 Cleanup: unused headers for source/blender/editors
Remove 1317 includes from editors.
2024-02-13 10:02:53 +11:00

73 lines
2.1 KiB
C++

/* SPDX-FileCopyrightText: 2017 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
/** \file
* \ingroup spoutliner
*/
#include "BKE_context.hh"
#include "DNA_space_types.h"
#include "outliner_intern.hh"
#include "tree/tree_iterator.hh"
namespace blender::ed::outliner {
static void outliner_context_selected_ids(const SpaceOutliner *space_outliner,
bContextDataResult *result)
{
tree_iterator::all(*space_outliner, [&](const TreeElement *te) {
const TreeStoreElem *tse = TREESTORE(te);
if ((tse->flag & TSE_SELECTED) && ELEM(tse->type, TSE_SOME_ID, TSE_LAYER_COLLECTION)) {
CTX_data_id_list_add(result, tse->id);
}
});
CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
}
static const char *outliner_context_dir[] = {
"id",
"selected_ids",
nullptr,
};
int /*eContextResult*/ outliner_main_region_context(const bContext *C,
const char *member,
bContextDataResult *result)
{
SpaceOutliner *space_outliner = CTX_wm_space_outliner(C);
if (CTX_data_dir(member)) {
CTX_data_dir_set(result, outliner_context_dir);
return CTX_RESULT_OK;
}
if (CTX_data_equals(member, "id")) {
const TreeElement *active_element = outliner_find_element_with_flag(&space_outliner->tree,
TSE_ACTIVE);
if (!active_element) {
return CTX_RESULT_NO_DATA;
}
const TreeStoreElem *active_tse = TREESTORE(active_element);
if (!TSE_IS_REAL_ID(active_tse)) {
return CTX_RESULT_NO_DATA;
}
CTX_data_id_pointer_set(result, active_tse->id);
return CTX_RESULT_OK;
}
if (CTX_data_equals(member, "selected_ids")) {
outliner_context_selected_ids(space_outliner, result);
return CTX_RESULT_OK;
}
/* NOTE: Querying non-ID selection could also work if tree elements stored their matching RNA
* struct type. */
return CTX_RESULT_MEMBER_NOT_FOUND;
}
} // namespace blender::ed::outliner