[Bf-blender-cvs] [785ff8e1d2e] master: UI: add Visibility panel for objects

Dalai Felinto noreply at git.blender.org
Mon May 20 13:48:43 CEST 2019


Commit: 785ff8e1d2e973e10c1a3aea3a986c7e1d3cf1db
Author: Dalai Felinto
Date:   Mon May 20 12:14:48 2019 +0200
Branches: master
https://developer.blender.org/rB785ff8e1d2e973e10c1a3aea3a986c7e1d3cf1db

UI: add Visibility panel for objects

The outliner should not be the only way for users to change these settings.
The Python API was extended to keep these properties positive and keyframable.

Differential Revision: https://developer.blender.org/D4889

===================================================================

M	release/scripts/startup/bl_ui/properties_object.py
M	source/blender/editors/include/UI_interface.h
M	source/blender/editors/interface/interface.c
M	source/blender/editors/interface/interface_layout.c
M	source/blender/editors/space_outliner/outliner_draw.c
M	source/blender/makesrna/intern/rna_object.c
M	source/blender/makesrna/intern/rna_ui_api.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/properties_object.py b/release/scripts/startup/bl_ui/properties_object.py
index 6a938b40c2e..aeda8d8648a 100644
--- a/release/scripts/startup/bl_ui/properties_object.py
+++ b/release/scripts/startup/bl_ui/properties_object.py
@@ -378,6 +378,31 @@ class OBJECT_PT_motion_paths_display(MotionPathButtonsPanel_display, Panel):
         self.draw_settings(context, avs, mpath)
 
 
+class OBJECT_PT_visibility(ObjectButtonsPanel, Panel):
+    bl_label = "Visibility"
+    bl_options = {'DEFAULT_CLOSED'}
+    COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
+
+    @classmethod
+    def poll(cls, context):
+        return (context.object) and (context.engine in cls.COMPAT_ENGINES)
+
+    def draw(self, context):
+        layout = self.layout
+        layout.use_property_split = True
+
+        flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
+        layout = self.layout
+        ob = context.object
+
+        col = flow.column()
+        col.prop(ob, "hide_viewport", text="Show in Viewports", invert_checkbox=True)
+        col = flow.column()
+        col.prop(ob, "hide_render", text="Show in Renders", invert_checkbox=True)
+        col = flow.column()
+        col.prop(ob, "hide_select", text="Selectable", invert_checkbox=True)
+
+
 class OBJECT_PT_custom_props(ObjectButtonsPanel, PropertyPanel, Panel):
     COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
     _context_path = "object"
@@ -397,6 +422,7 @@ classes = (
     OBJECT_PT_motion_paths_display,
     OBJECT_PT_display,
     OBJECT_PT_display_bounds,
+    OBJECT_PT_visibility,
     OBJECT_PT_custom_props,
 )
 
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 14d681ee817..5912a3a59e4 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -281,6 +281,9 @@ enum {
 
   /** Value is animated, but the current value differs from the animated one. */
   UI_BUT_ANIMATED_CHANGED = 1 << 25,
+
+  /* Draw the checkbox buttons inverted. */
+  UI_BUT_CHECKBOX_INVERT = 1 << 26,
 };
 
 /* scale fixed button widths by this to account for DPI */
@@ -1719,6 +1722,7 @@ enum {
   UI_ITEM_R_IMMEDIATE = 1 << 8,
   UI_ITEM_O_DEPRESS = 1 << 9,
   UI_ITEM_R_COMPACT = 1 << 10,
+  UI_ITEM_R_CHECKBOX_INVERT = 1 << 11,
 };
 
 #define UI_HEADER_OFFSET ((void)0, 0.4f * UI_UNIT_X)
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index f1724d92402..e436328c139 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -1845,6 +1845,9 @@ int ui_but_is_pushed_ex(uiBut *but, double *value)
     }
   }
 
+  if ((but->drawflag & UI_BUT_CHECKBOX_INVERT) && (is_push != -1)) {
+    is_push = !((bool)is_push);
+  }
   return is_push;
 }
 int ui_but_is_pushed(uiBut *but)
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index dc57be4f07f..df4b18477fc 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -1904,6 +1904,10 @@ void uiItemFullR(uiLayout *layout,
     }
   }
 
+  if (type != PROP_BOOLEAN) {
+    flag &= ~UI_ITEM_R_CHECKBOX_INVERT;
+  }
+
   if (icon == ICON_NONE) {
     icon = RNA_property_ui_icon(prop);
   }
@@ -2156,6 +2160,12 @@ void uiItemFullR(uiLayout *layout,
       but->type = UI_BTYPE_NUM_SLIDER;
     }
 
+    if (flag & UI_ITEM_R_CHECKBOX_INVERT) {
+      if (ELEM(but->type, UI_BTYPE_CHECKBOX, UI_BTYPE_CHECKBOX_N)) {
+        but->drawflag |= UI_BUT_CHECKBOX_INVERT;
+      }
+    }
+
     if (toggle && but->type == UI_BTYPE_CHECKBOX) {
       but->type = UI_BTYPE_TOGGLE;
     }
diff --git a/source/blender/editors/space_outliner/outliner_draw.c b/source/blender/editors/space_outliner/outliner_draw.c
index 6a7795393c9..f34f280a29d 100644
--- a/source/blender/editors/space_outliner/outliner_draw.c
+++ b/source/blender/editors/space_outliner/outliner_draw.c
@@ -1088,10 +1088,13 @@ static void outliner_draw_restrictbuts(uiBlock *block,
         }
 
         if (soops->show_restrict_flags & SO_RESTRICT_SELECT) {
+          const int icon = RNA_property_boolean_get(&ptr, props.object_hide_select) ?
+                               ICON_RESTRICT_SELECT_ON :
+                               ICON_RESTRICT_SELECT_OFF;
           bt = uiDefIconButR_prop(block,
                                   UI_BTYPE_ICON_TOGGLE,
                                   0,
-                                  0,
+                                  icon,
                                   (int)(ar->v2d.cur.xmax - restrict_offsets.select),
                                   te->ys,
                                   UI_UNIT_X,
@@ -1113,10 +1116,13 @@ static void outliner_draw_restrictbuts(uiBlock *block,
         }
 
         if (soops->show_restrict_flags & SO_RESTRICT_VIEWPORT) {
+          const int icon = RNA_property_boolean_get(&ptr, props.object_hide_viewport) ?
+                               ICON_RESTRICT_VIEW_ON :
+                               ICON_RESTRICT_VIEW_OFF;
           bt = uiDefIconButR_prop(block,
                                   UI_BTYPE_ICON_TOGGLE,
                                   0,
-                                  0,
+                                  icon,
                                   (int)(ar->v2d.cur.xmax - restrict_offsets.viewport),
                                   te->ys,
                                   UI_UNIT_X,
@@ -1138,10 +1144,13 @@ static void outliner_draw_restrictbuts(uiBlock *block,
         }
 
         if (soops->show_restrict_flags & SO_RESTRICT_RENDER) {
+          const int icon = RNA_property_boolean_get(&ptr, props.object_hide_render) ?
+                               ICON_RESTRICT_RENDER_ON :
+                               ICON_RESTRICT_RENDER_OFF;
           bt = uiDefIconButR_prop(block,
                                   UI_BTYPE_ICON_TOGGLE,
                                   0,
-                                  0,
+                                  icon,
                                   (int)(ar->v2d.cur.xmax - restrict_offsets.render),
                                   te->ys,
                                   UI_UNIT_X,
diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c
index b4453996095..dbc822460d9 100644
--- a/source/blender/makesrna/intern/rna_object.c
+++ b/source/blender/makesrna/intern/rna_object.c
@@ -2819,7 +2819,6 @@ static void rna_def_object(BlenderRNA *brna)
   RNA_def_property_boolean_sdna(prop, NULL, "restrictflag", OB_RESTRICT_VIEWPORT);
   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
   RNA_def_property_ui_text(prop, "Disable in Viewports", "Globally disable in viewports");
-  RNA_def_property_ui_icon(prop, ICON_RESTRICT_VIEW_OFF, -1);
   RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_hide_update");
 
   prop = RNA_def_property(srna, "hide_select", PROP_BOOLEAN, PROP_NONE);
@@ -2827,14 +2826,12 @@ static void rna_def_object(BlenderRNA *brna)
   RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
   RNA_def_property_ui_text(prop, "Disable Selection", "Disable selection in viewport");
-  RNA_def_property_ui_icon(prop, ICON_RESTRICT_SELECT_OFF, -1);
   RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_hide_update");
 
   prop = RNA_def_property(srna, "hide_render", PROP_BOOLEAN, PROP_NONE);
   RNA_def_property_boolean_sdna(prop, NULL, "restrictflag", OB_RESTRICT_RENDER);
   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
   RNA_def_property_ui_text(prop, "Disable in Renders", "Globally disable in renders");
-  RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, -1);
   RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_hide_update");
 
   prop = RNA_def_property(srna, "show_instancer_for_render", PROP_BOOLEAN, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c
index 7ce9155e3d9..5a001f05b53 100644
--- a/source/blender/makesrna/intern/rna_ui_api.c
+++ b/source/blender/makesrna/intern/rna_ui_api.c
@@ -101,7 +101,8 @@ static void rna_uiItemR(uiLayout *layout,
                         bool full_event,
                         bool emboss,
                         int index,
-                        int icon_value)
+                        int icon_value,
+                        bool invert_checkbox)
 {
   PropertyRNA *prop = RNA_struct_find_property(ptr, propname);
   int flag = 0;
@@ -125,6 +126,7 @@ static void rna_uiItemR(uiLayout *layout,
   flag |= (event) ? UI_ITEM_R_EVENT : 0;
   flag |= (full_event) ? UI_ITEM_R_FULL_EVENT : 0;
   flag |= (emboss) ? 0 : UI_ITEM_R_NO_BG;
+  flag |= (invert_checkbox) ? UI_ITEM_R_CHECKBOX_INVERT : 0;
 
   uiItemFullR(layout, ptr, prop, index, 0, flag, name, icon);
 }
@@ -789,6 +791,7 @@ void RNA_api_ui_layout(StructRNA *srna)
               INT_MAX); /* RNA_NO_INDEX == -1 */
   parm = RNA_def_property(func, "icon_value", PROP_INT, PROP_UNSIGNED);
   RNA_def_property_ui_text(parm, "Icon Value", "Override automatic icon of the item");
+  RNA_def_boolean(func, "invert_checkbox", false, "", "Draw checkbox value inverted");
 
   func = RNA_def_function(srna, "props_enum", "uiItemsEnumR");
   api_ui_item_rna_common(func);



More information about the Bf-blender-cvs mailing list