This repository has been archived on 2023-10-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
blender-archive/source/blender/editors/space_outliner/outliner_context.c
Julian Eisel b9e54566e3 Cleanup: Add & use enum value for ID Outliner element type
Code to check if the Outliner tree-element type was the general ID one
would always check against "0" (explicity or even implicitly). For
somebody unfamiliar with the code this is very confusing. Instead the
value should be given a name, e.g. through an enum.

Adds `TSE_SOME_ID` as the "default" ID tree-element type. Other types
may still represent IDs, as I explained in a comment at the definition.

There may also still be cases where the type is checked against "0". I
noted in the comment that such cases should be cleaned up if found.
2021-03-05 17:46:33 +01:00

72 lines
2.4 KiB
C

/*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* The Original Code is Copyright (C) 2017 Blender Foundation.
* All rights reserved.
*/
/** \file
* \ingroup spoutliner
*/
#include "BLI_listbase.h"
#include "BKE_context.h"
#include "DNA_space_types.h"
#include "outliner_intern.h"
static void outliner_context_selected_ids_recursive(const ListBase *subtree,
bContextDataResult *result)
{
LISTBASE_FOREACH (const TreeElement *, te, subtree) {
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);
}
outliner_context_selected_ids_recursive(&te->subtree, result);
}
}
static void outliner_context_selected_ids(const SpaceOutliner *space_outliner,
bContextDataResult *result)
{
outliner_context_selected_ids_recursive(&space_outliner->tree, result);
CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
}
static const char *outliner_context_dir[] = {"selected_ids", NULL};
int /*eContextResult*/ outliner_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, "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;
}