Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Craddock <nzcraddock@gmail.com>2020-11-20 18:47:51 +0300
committerNathan Craddock <nzcraddock@gmail.com>2020-11-20 18:47:51 +0300
commit2afdb4ba8754d690ccad058fdbcab21f83c62b5c (patch)
treeb0a04f9e98be6cd80534fd8131b3b3466d66e620
parent96995b2343d96c75e3d03dbfaf8785fb8b28bfc5 (diff)
Outliner: Object state filter invert toggle
This adds an invert toggle for the outliner object state filters. There are some cases where we want a filter for invertable states (Selected, Unselected) and having a single toggle to invert the filter reduces the number of separate filter types needed. This removes the "Hidden" filter which can now be replicated with an inverted "Visible" filter. Differential Revision: https://developer.blender.org/D9598
-rw-r--r--release/scripts/startup/bl_ui/space_outliner.py6
-rw-r--r--source/blender/blenloader/intern/versioning_290.c15
-rw-r--r--source/blender/editors/space_outliner/outliner_tree.c23
-rw-r--r--source/blender/makesdna/DNA_space_types.h12
-rw-r--r--source/blender/makesrna/intern/rna_space.c6
5 files changed, 43 insertions, 19 deletions
diff --git a/release/scripts/startup/bl_ui/space_outliner.py b/release/scripts/startup/bl_ui/space_outliner.py
index 47708db6854..52ae08ac119 100644
--- a/release/scripts/startup/bl_ui/space_outliner.py
+++ b/release/scripts/startup/bl_ui/space_outliner.py
@@ -372,10 +372,16 @@ class OUTLINER_PT_filter(Panel):
row = col.row()
row.label(icon='OUTLINER_COLLECTION')
row.prop(space, "use_filter_collection", text="Collections")
+
row = col.row()
row.label(icon='OBJECT_DATAMODE')
row.prop(space, "use_filter_object", text="Objects")
+ row = col.row(align=True)
+ row.label(icon="BLANK1")
row.prop(space, "filter_state", text="")
+ sub = row.row(align=True)
+ sub.enabled = space.filter_state != 'ALL'
+ sub.prop(space, "filter_invert", text="", icon="ARROW_LEFTRIGHT")
sub = col.column(align=True)
sub.active = space.use_filter_object
diff --git a/source/blender/blenloader/intern/versioning_290.c b/source/blender/blenloader/intern/versioning_290.c
index ec39113c4d0..b591f57a7f1 100644
--- a/source/blender/blenloader/intern/versioning_290.c
+++ b/source/blender/blenloader/intern/versioning_290.c
@@ -1166,5 +1166,20 @@ void blo_do_versions_290(FileData *fd, Library *UNUSED(lib), Main *bmain)
}
}
}
+
+ /* Replace object hidden filter with inverted object visible filter. */
+ LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) {
+ LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
+ LISTBASE_FOREACH (SpaceLink *, space, &area->spacedata) {
+ if (space->spacetype == SPACE_OUTLINER) {
+ SpaceOutliner *space_outliner = (SpaceOutliner *)space;
+ if (space_outliner->filter_state == SO_FILTER_OB_HIDDEN) {
+ space_outliner->filter_state = SO_FILTER_OB_VISIBLE;
+ space_outliner->filter |= SO_FILTER_OB_STATE_INVERSE;
+ }
+ }
+ }
+ }
+ }
}
}
diff --git a/source/blender/editors/space_outliner/outliner_tree.c b/source/blender/editors/space_outliner/outliner_tree.c
index 83be26793ee..159511546be 100644
--- a/source/blender/editors/space_outliner/outliner_tree.c
+++ b/source/blender/editors/space_outliner/outliner_tree.c
@@ -1913,9 +1913,6 @@ static int outliner_exclude_filter_get(const SpaceOutliner *space_outliner)
case SO_FILTER_OB_VISIBLE:
exclude_filter |= SO_FILTER_OB_STATE_VISIBLE;
break;
- case SO_FILTER_OB_HIDDEN:
- exclude_filter |= SO_FILTER_OB_STATE_HIDDEN;
- break;
case SO_FILTER_OB_SELECTED:
exclude_filter |= SO_FILTER_OB_STATE_SELECTED;
break;
@@ -1992,32 +1989,34 @@ static bool outliner_element_visible_get(ViewLayer *view_layer,
}
}
+ bool is_visible = true;
if (exclude_filter & SO_FILTER_OB_STATE_VISIBLE) {
if ((base->flag & BASE_VISIBLE_VIEWLAYER) == 0) {
- return false;
- }
- }
- else if (exclude_filter & SO_FILTER_OB_STATE_HIDDEN) {
- if ((base->flag & BASE_VISIBLE_VIEWLAYER) != 0) {
- return false;
+ is_visible = false;
}
}
else if (exclude_filter & SO_FILTER_OB_STATE_SELECTED) {
if ((base->flag & BASE_SELECTED) == 0) {
- return false;
+ is_visible = false;
}
}
else if (exclude_filter & SO_FILTER_OB_STATE_SELECTABLE) {
if ((base->flag & BASE_SELECTABLE) == 0) {
- return false;
+ is_visible = false;
}
}
else {
BLI_assert(exclude_filter & SO_FILTER_OB_STATE_ACTIVE);
if (base != BASACT(view_layer)) {
- return false;
+ is_visible = false;
}
}
+
+ if (exclude_filter & SO_FILTER_OB_STATE_INVERSE) {
+ is_visible = !is_visible;
+ }
+
+ return is_visible;
}
if ((te->parent != NULL) && (TREESTORE(te->parent)->type == 0) &&
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index 3b805c6edec..cbf6e900416 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -316,9 +316,9 @@ typedef enum eSpaceOutliner_Filter {
SO_FILTER_OB_STATE_SELECTABLE = (1 << 12), /* Not set via DNA. */
SO_FILTER_OB_STATE_VISIBLE = (1 << 13), /* Not set via DNA. */
- SO_FILTER_OB_STATE_HIDDEN = (1 << 14), /* Not set via DNA. */
- SO_FILTER_OB_STATE_SELECTED = (1 << 15), /* Not set via DNA. */
- SO_FILTER_OB_STATE_ACTIVE = (1 << 16), /* Not set via DNA. */
+ SO_FILTER_OB_STATE_INVERSE = (1 << 14),
+ SO_FILTER_OB_STATE_SELECTED = (1 << 15), /* Not set via DNA. */
+ SO_FILTER_OB_STATE_ACTIVE = (1 << 16), /* Not set via DNA. */
SO_FILTER_NO_COLLECTION = (1 << 17),
SO_FILTER_ID_TYPE = (1 << 18),
@@ -329,8 +329,8 @@ typedef enum eSpaceOutliner_Filter {
SO_FILTER_NO_OB_LAMP | SO_FILTER_NO_OB_CAMERA | SO_FILTER_NO_OB_OTHERS)
#define SO_FILTER_OB_STATE \
- (SO_FILTER_OB_STATE_VISIBLE | SO_FILTER_OB_STATE_HIDDEN | SO_FILTER_OB_STATE_SELECTED | \
- SO_FILTER_OB_STATE_ACTIVE | SO_FILTER_OB_STATE_SELECTABLE)
+ (SO_FILTER_OB_STATE_VISIBLE | SO_FILTER_OB_STATE_SELECTED | SO_FILTER_OB_STATE_ACTIVE | \
+ SO_FILTER_OB_STATE_SELECTABLE)
#define SO_FILTER_ANY \
(SO_FILTER_NO_OB_CONTENT | SO_FILTER_NO_CHILDREN | SO_FILTER_OB_TYPE | SO_FILTER_OB_STATE | \
@@ -340,7 +340,7 @@ typedef enum eSpaceOutliner_Filter {
typedef enum eSpaceOutliner_StateFilter {
SO_FILTER_OB_ALL = 0,
SO_FILTER_OB_VISIBLE = 1,
- SO_FILTER_OB_HIDDEN = 2,
+ SO_FILTER_OB_HIDDEN = 2, /* deprecated */
SO_FILTER_OB_SELECTED = 3,
SO_FILTER_OB_ACTIVE = 4,
SO_FILTER_OB_SELECTABLE = 5,
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index dd7cb2bf643..e6e54abebd4 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -3047,7 +3047,6 @@ static void rna_def_space_outliner(BlenderRNA *brna)
static const EnumPropertyItem filter_state_items[] = {
{SO_FILTER_OB_ALL, "ALL", 0, "All", "Show all objects in the view layer"},
{SO_FILTER_OB_VISIBLE, "VISIBLE", 0, "Visible", "Show visible objects"},
- {SO_FILTER_OB_HIDDEN, "HIDDEN", 0, "Hidden", "Show hidden objects"},
{SO_FILTER_OB_SELECTED, "SELECTED", 0, "Selected", "Show selected objects"},
{SO_FILTER_OB_ACTIVE, "ACTIVE", 0, "Active", "Show only the active object"},
{SO_FILTER_OB_SELECTABLE, "SELECTABLE", 0, "Selectable", "Show only selectable objects"},
@@ -3171,6 +3170,11 @@ static void rna_def_space_outliner(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Object State Filter", "");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
+ prop = RNA_def_property(srna, "filter_invert", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "filter", SO_FILTER_OB_STATE_INVERSE);
+ RNA_def_property_ui_text(prop, "Invert", "Invert the object state filter");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
+
/* Filters object type. */
prop = RNA_def_property(srna, "use_filter_object_mesh", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filter", SO_FILTER_NO_OB_MESH);