[Bf-blender-cvs] [a7fcd78d2d6] master: User Preference Experimental Tab

Dalai Felinto noreply at git.blender.org
Fri Nov 8 05:32:26 CET 2019


Commit: a7fcd78d2d690f0fa57cc65d04ee20d9d26b08e4
Author: Dalai Felinto
Date:   Thu Nov 7 12:31:33 2019 -0300
Branches: master
https://developer.blender.org/rBa7fcd78d2d690f0fa57cc65d04ee20d9d26b08e4

User Preference Experimental Tab

Experimental tab in User Preferences for experimental features.
The tab option is only visible when "Developer Extras" is on.

Included here is a (commented out) example panel to be used as a
template for the new experimental panels. Since these panels will come
and go it is nice to have a reference in the code.

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

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

M	release/scripts/startup/bl_ui/space_userpref.py
M	source/blender/makesdna/DNA_userdef_types.h
M	source/blender/makesrna/intern/rna_userdef.c

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

diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index cf4326ed764..1b40885ff9e 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -2132,6 +2132,66 @@ class USERPREF_PT_studiolight_light_editor(Panel):
         layout.prop(system, "light_ambient")
 
 
+class ExperimentalPanel:
+    bl_space_type = 'PREFERENCES'
+    bl_region_type = 'WINDOW'
+
+    @classmethod
+    def poll(cls, context):
+        prefs = context.preferences
+        return (prefs.active_section == 'EXPERIMENTAL')
+
+    def draw(self, context):
+        layout = self.layout
+
+        layout.use_property_split = True
+        layout.use_property_decorate = False
+
+        self.draw_props(context, layout)
+
+
+class USERPREF_PT_experimental_all(ExperimentalPanel, Panel):
+    bl_label = "All"
+    bl_options = {'HIDE_HEADER'}
+
+    def draw_props(self, context, layout):
+        prefs = context.preferences
+        experimental = prefs.experimental
+
+        col = layout.column()
+        col.prop(experimental, "use_experimental_all")
+
+        # For the other settings create new panels
+        # and make sure they are disabled if use_experimental_all is True
+
+
+"""
+Example panel, leave it here so we always have a template to follow even
+after the features are gone from the experimental panel.
+
+class USERPREF_PT_experimental_virtual_reality(ExperimentalPanel, Panel):
+    bl_label = "Virtual Reality"
+
+    def draw_props(self, context, _layout):
+        prefs = context.preferences
+        experimental = prefs.experimental
+        _layout.active = not experimental.use_experimental_all
+
+        row = _layout.row()
+        split = row.split().column()
+        split.prop(experimental, "use_virtual_reality_scene_inspection, text="Scene Inspection")
+        split.prop(experimental, "use_virtual_reality_immersive_drawing", text="Continuous Immersive Drawing")
+
+        split = row.split().column()
+        split.operator(
+                "wm.url_open", text="https://developer.blender.org/T71347", icon='URL',
+                ).url = "https://developer.blender.org/T71347"
+        split.operator(
+                "wm.url_open", text="https://developer.blender.org/T71348", icon='URL',
+                ).url = "https://developer.blender.org/T71348"
+"""
+
+
 # Order of registration defines order in UI,
 # so dynamically generated classes are 'injected' in the intended order.
 classes = (
@@ -2214,6 +2274,8 @@ classes = (
     USERPREF_PT_studiolight_matcaps,
     USERPREF_PT_studiolight_world,
 
+    USERPREF_PT_experimental_all,
+
     # Add dynamically generated editor theme panels last,
     # so they show up last in the theme section.
     *ThemeGenericClassGenerator.generate_panel_classes_from_theme_areas(),
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index 752d2853707..eae7a9f262f 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -595,6 +595,16 @@ typedef struct UserDef_FileSpaceData {
   int temp_win_sizey;
 } UserDef_FileSpaceData;
 
+/**
+ * Store UI data here instead of the space
+ * since the space is typically a window which is freed.
+ */
+typedef struct UserDef_Experimental {
+  /** #eUserPref_Experimental_Flag options. */
+  int flag;
+  char _pad0[4];
+} UserDef_Experimental;
+
 typedef struct UserDef {
   /** UserDef has separate do-version handling, and can be read from other files. */
   int versionfile, subversionfile;
@@ -846,6 +856,8 @@ typedef struct UserDef {
   UserDef_SpaceData space_data;
   UserDef_FileSpaceData file_space_data;
 
+  UserDef_Experimental experimental;
+
   /** Runtime data (keep last). */
   UserDef_Runtime runtime;
 } UserDef;
@@ -878,6 +890,7 @@ typedef enum eUserPref_Section {
   USER_SECTION_ANIMATION = 13,
   USER_SECTION_NAVIGATION = 14,
   USER_SECTION_FILE_PATHS = 15,
+  USER_SECTION_EXPERIMENTAL = 16,
 } eUserPref_Section;
 
 /** #UserDef_SpaceData.flag (State of the user preferences UI). */
@@ -887,6 +900,11 @@ typedef enum eUserPref_SpaceData_Flag {
   USER_SPACEDATA_ADDONS_SHOW_ONLY_ENABLED = (1 << 1),
 } eUserPref_SpaceData_Flag;
 
+/** #UserDef_Experimental.flag. */
+typedef enum eUserPref_Experimental_Flag {
+  USER_EXPERIMENTAL_ALL = (1 << 0),
+} eUserPref_Experimental_Flag;
+
 /** #UserDef.flag */
 typedef enum eUserPref_Flag {
   USER_AUTOSAVE = (1 << 0),
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index 9ecfc7f675f..1b73c1e78db 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -69,6 +69,32 @@ static const EnumPropertyItem opensubdiv_compute_type_items[] = {
 };
 #endif
 
+static const EnumPropertyItem preference_section_items[] = {
+    {USER_SECTION_INTERFACE, "INTERFACE", 0, "Interface", ""},
+    {USER_SECTION_THEME, "THEMES", 0, "Themes", ""},
+    {USER_SECTION_VIEWPORT, "VIEWPORT", 0, "Viewport", ""},
+    {USER_SECTION_LIGHT, "LIGHTS", 0, "Lights", ""},
+    {USER_SECTION_EDITING, "EDITING", 0, "Editing", ""},
+    {USER_SECTION_ANIMATION, "ANIMATION", 0, "Animation", ""},
+    {0, "", 0, NULL, NULL},
+    {USER_SECTION_ADDONS, "ADDONS", 0, "Add-ons", ""},
+#if 0  // def WITH_USERDEF_WORKSPACES
+    {0, "", 0, NULL, NULL},
+    {USER_SECTION_WORKSPACE_CONFIG, "WORKSPACE_CONFIG", 0, "Configuration File", ""},
+    {USER_SECTION_WORKSPACE_ADDONS, "WORKSPACE_ADDONS", 0, "Add-on Overrides", ""},
+    {USER_SECTION_WORKSPACE_KEYMAPS, "WORKSPACE_KEYMAPS", 0, "Keymap Overrides", ""},
+#endif
+    {0, "", 0, NULL, NULL},
+    {USER_SECTION_INPUT, "INPUT", 0, "Input", ""},
+    {USER_SECTION_NAVIGATION, "NAVIGATION", 0, "Navigation", ""},
+    {USER_SECTION_KEYMAP, "KEYMAP", 0, "Keymap", ""},
+    {0, "", 0, NULL, NULL},
+    {USER_SECTION_SYSTEM, "SYSTEM", 0, "System", ""},
+    {USER_SECTION_SAVE_LOAD, "SAVE_LOAD", 0, "Save & Load", ""},
+    {USER_SECTION_FILE_PATHS, "FILE_PATHS", 0, "File Paths", ""},
+    {0, NULL, 0, NULL, NULL},
+};
+
 static const EnumPropertyItem audio_device_items[] = {
     {0, "Null", 0, "None", "Null device - there will be no audio output"},
     {0, NULL, 0, NULL, NULL},
@@ -435,6 +461,39 @@ static int rna_UserDef_mouse_emulate_3_button_modifier_get(PointerRNA *ptr)
 #  endif
 }
 
+static const EnumPropertyItem *rna_UseDef_active_section_itemf(bContext *UNUSED(C),
+                                                               PointerRNA *ptr,
+                                                               PropertyRNA *UNUSED(prop),
+                                                               bool *r_free)
+{
+  UserDef *userdef = ptr->data;
+
+  if ((userdef->flag & USER_DEVELOPER_UI) == 0) {
+    *r_free = false;
+    return preference_section_items;
+  }
+
+  EnumPropertyItem *items = NULL;
+  int totitem = 0;
+
+  RNA_enum_items_add(&items, &totitem, preference_section_items);
+  RNA_enum_item_add_separator(&items, &totitem);
+
+  EnumPropertyItem item = {
+      .value = USER_SECTION_EXPERIMENTAL,
+      .name = "Experimental",
+      .identifier = "EXPERIMENTAL",
+      .icon = 0,
+      .description = "",
+  };
+
+  RNA_enum_item_add(&items, &totitem, &item);
+  RNA_enum_item_end(&items, &totitem);
+
+  *r_free = true;
+  return items;
+}
+
 static PointerRNA rna_UserDef_view_get(PointerRNA *ptr)
 {
   return rna_pointer_inherit_refine(ptr, &RNA_PreferencesView, ptr->data);
@@ -4162,6 +4221,7 @@ static void rna_def_userdef_view(BlenderRNA *brna)
       prop,
       "Developer Extras",
       "Show options for developers (edit source in context menu, geometry indices)");
+  RNA_def_property_update(prop, 0, "rna_userdef_update");
 
   prop = RNA_def_property(srna, "show_object_info", PROP_BOOLEAN, PROP_NONE);
   RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_DRAWVIEWINFO);
@@ -5756,6 +5816,25 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna)
                            "Enables automatic saving of preview images in the .blend file");
 }
 
+static void rna_def_userdef_experimental(BlenderRNA *brna)
+{
+  StructRNA *srna;
+  PropertyRNA *prop;
+
+  srna = RNA_def_struct(brna, "PreferencesExperimental", NULL);
+  RNA_def_struct_sdna(srna, "UserDef_Experimental");
+  RNA_def_struct_nested(brna, srna, "Preferences");
+  RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
+  RNA_def_struct_ui_text(srna, "Experimental", "Experimental features");
+
+  prop = RNA_def_property(srna, "use_experimental_all", PROP_BOOLEAN, PROP_NONE);
+  RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_EXPERIMENTAL_ALL);
+  RNA_def_property_ui_text(prop,
+                           "All Experimental Features",
+                           "Expose all the experimental features in the user interface");
+  RNA_def_property_update(prop, 0, "rna_userdef_update");
+}
+
 static void rna_def_userdef_addon_collection(BlenderRNA *brna, PropertyRNA *cprop)
 {
   StructRNA *srna;
@@ -5815,32 +5894,6 @@ void RNA_def_userdef(BlenderRNA *brna)
   StructRNA *srna;
   PropertyRNA *prop;
 
-  static const EnumPropertyItem preference_section_items[] = {
-    {USER_SECTION_INTERFACE, "INTERFACE", 0, "Interface", ""},
-    {USER_SECTION_THEME, "THEMES", 0, "Themes", ""},
-    {USER_SECTION_VIEWPORT, "VIEWPORT", 0, "Viewport", ""},
-    {USER_SECTION_LIGHT, "LIGHTS", 0, "Lights", ""},
-    {USER_SECTION_EDITING, "EDITING", 0, "Editing", ""},
-    {USER_SECTION_ANIMATION, "ANIMATION", 0, "Animation", ""},
-    {0, "", 0, NULL, NULL},
-    {USER_SECTION_ADDONS, "ADDONS", 0, "Add-ons", ""},
-#  if 0  // def WITH_USERDEF_WORKSPACES
-    {0, "", 0, NULL, NULL},
-    {USER_SECTION_WORKSPACE_CONFIG, "WORKSPACE_CONFIG", 0, "Configuration File", ""},
-    {USER_SECTION_WORKSPACE_ADDONS, "WORKSPACE_ADDONS", 0, "Add-on Overrides", ""},
-    {USER_SECTION_WORKSPACE_KEYMAPS, "WORKSPACE_KEYMAPS", 0, "Keymap Overrides", ""},
-#  endif
-    {0, "", 0, NULL, NULL},
-    {USER_SECTION_INPUT, "INPUT", 0, "Input", ""},
-    {USER_SECTION_NAVIGATION, "NAVIGATION", 0, "Navigation", ""},
-    {USER_SECTION_KEYMAP, "KEYMAP", 0, "Keymap", ""},
-    {0, "", 0, 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list