Userpreferences Panel (for the 3DView)
authorCampbell Barton <ideasman42@gmail.com>
Sat, 20 Feb 2016 12:46:53 +0000 (13:46 +0100)
committerGaia Clary <gaia.clary@machinimatrix.org>
Sat, 20 Feb 2016 13:07:20 +0000 (14:07 +0100)
This is an attempt to improve the User preferences panel for the 3DView. I made 2 changes:

- I reordered the sequence of properties by grouping them into more logical groups as it made sense to me. Please indicate where to rearrange the order if necessary.

- Then i added some changes in the code to get the groups better arranged visually. I am pretty sure that this can be done much better, more clever, more generic, whatever. This is just what i could figure out on my own so far.

Reviewers: aligorith, sergey, gaiaclary

Subscribers: sergey

Projects: #user_interface

Maniphest Tasks: T47295

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

release/scripts/startup/bl_ui/space_userpref.py
source/blender/makesrna/intern/rna_userdef.c

index e6302ff7bdcb211b362ea94bbbbedd38ab3375df..163458ee0fd186a6b4207d50fcc959d70c53b088 100644 (file)
@@ -559,8 +559,33 @@ class USERPREF_PT_theme(Panel):
     bl_region_type = 'WINDOW'
     bl_options = {'HIDE_HEADER'}
 
+    # not essential, hard-coded UI delimiters for the theme layout
+    ui_delimiters = {
+        'VIEW_3D': {
+            "text_grease_pencil",
+            "text_keyframe",
+            "speaker",
+            "freestyle_face_mark",
+            "split_normal",
+            "bone_solid",
+            "paint_curve_pivot",
+            },
+        'GRAPH_EDITOR': {
+            "handle_vertex_select",
+            },
+        'IMAGE_EDITOR': {
+            "paint_curve_pivot",
+            },
+        'NODE_EDITOR': {
+            "layout_node",
+            },
+        'CLIP_EDITOR': {
+            "handle_vertex_select",
+            }
+        }
+
     @staticmethod
-    def _theme_generic(split, themedata):
+    def _theme_generic(split, themedata, theme_area):
 
         col = split.column()
 
@@ -587,13 +612,30 @@ class USERPREF_PT_theme(Panel):
 
                 props_type.setdefault((prop.type, prop.subtype), []).append(prop)
 
+            th_delimiters = USERPREF_PT_theme.ui_delimiters.get(theme_area)
             for props_type, props_ls in sorted(props_type.items()):
                 if props_type[0] == 'POINTER':
                     for i, prop in enumerate(props_ls):
                         theme_generic_recurse(getattr(data, prop.identifier))
                 else:
-                    for i, prop in enumerate(props_ls):
-                        colsub_pair[i % 2].row().prop(data, prop.identifier)
+                    if th_delimiters is None:
+                        # simple, no delimiters
+                        for i, prop in enumerate(props_ls):
+                            colsub_pair[i % 2].row().prop(data, prop.identifier)
+                    else:
+                        # add hard coded delimiters
+                        i = 0
+                        for prop in props_ls:
+                            colsub = colsub_pair[i]
+                            colsub.row().prop(data, prop.identifier)
+                            i = (i + 1) % 2
+                            if prop.identifier in th_delimiters:
+                                if i:
+                                    colsub = colsub_pair[1]
+                                    colsub.row().label("")
+                                colsub_pair[0].row().label("")
+                                colsub_pair[1].row().label("")
+                                i = 0
 
         theme_generic_recurse(themedata)
 
@@ -864,7 +906,7 @@ class USERPREF_PT_theme(Panel):
             col.label(text="Widget Label:")
             self._ui_font_style(col, style.widget_label)
         else:
-            self._theme_generic(split, getattr(theme, theme.theme_area.lower()))
+            self._theme_generic(split, getattr(theme, theme.theme_area.lower()), theme.theme_area)
 
 
 class USERPREF_PT_file(Panel):
index 6a36048acd790cb20b757ca06089fc34d3396950..f4c6fdf42f5c5da470ecafee7451f872ebf594fb 100644 (file)
@@ -1593,11 +1593,18 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna)
 
        rna_def_userdef_theme_spaces_gradient(srna);
 
+       /* General Viewport options */
+
        prop = RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR_GAMMA);
        RNA_def_property_array(prop, 3);
        RNA_def_property_ui_text(prop, "Grid", "");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
 
+       prop = RNA_def_property(srna, "clipping_border_3d", PROP_FLOAT, PROP_COLOR_GAMMA);
+       RNA_def_property_array(prop, 4);
+       RNA_def_property_ui_text(prop, "Clipping Border", "");
+       RNA_def_property_update(prop, 0, "rna_userdef_update");
+
        prop = RNA_def_property(srna, "wire", PROP_FLOAT, PROP_COLOR_GAMMA);
        RNA_def_property_array(prop, 3);
        RNA_def_property_ui_text(prop, "Wire", "");
@@ -1608,32 +1615,18 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Wire Edit", "");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
        
-       rna_def_userdef_theme_spaces_gpencil(srna);
 
-       prop = RNA_def_property(srna, "lamp", PROP_FLOAT, PROP_COLOR_GAMMA);
-       RNA_def_property_array(prop, 4);
-       RNA_def_property_ui_text(prop, "Lamp", "");
-       RNA_def_property_update(prop, 0, "rna_userdef_update");
+       /* Grease Pencil */
 
-       prop = RNA_def_property(srna, "speaker", PROP_FLOAT, PROP_COLOR_GAMMA);
-       RNA_def_property_array(prop, 3);
-       RNA_def_property_ui_text(prop, "Speaker", "");
-       RNA_def_property_update(prop, 0, "rna_userdef_update");
-       
-       prop = RNA_def_property(srna, "camera", PROP_FLOAT, PROP_COLOR_GAMMA);
-       RNA_def_property_array(prop, 3);
-       RNA_def_property_ui_text(prop, "Camera", "");
-       RNA_def_property_update(prop, 0, "rna_userdef_update");
+       rna_def_userdef_theme_spaces_gpencil(srna);
 
-       prop = RNA_def_property(srna, "view_overlay", PROP_FLOAT, PROP_COLOR_GAMMA);
+       prop = RNA_def_property(srna, "text_grease_pencil", PROP_FLOAT, PROP_COLOR_GAMMA);
+       RNA_def_property_float_sdna(prop, NULL, "time_gp_keyframe");
        RNA_def_property_array(prop, 3);
-       RNA_def_property_ui_text(prop, "View Overlay", "");
+       RNA_def_property_ui_text(prop, "Grease Pencil Keyframe", "Color for indicating Grease Pencil keyframes");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
 
-       prop = RNA_def_property(srna, "empty", PROP_FLOAT, PROP_COLOR_GAMMA);
-       RNA_def_property_array(prop, 3);
-       RNA_def_property_ui_text(prop, "Empty", "");
-       RNA_def_property_update(prop, 0, "rna_userdef_update");
+       /* Object specific options */
 
        prop = RNA_def_property(srna, "object_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
        RNA_def_property_float_sdna(prop, NULL, "select");
@@ -1659,14 +1652,42 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Object Grouped Active", "");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
 
-       prop = RNA_def_property(srna, "transform", PROP_FLOAT, PROP_COLOR_GAMMA);
+       prop = RNA_def_property(srna, "text_keyframe", PROP_FLOAT, PROP_COLOR_GAMMA);
+       RNA_def_property_float_sdna(prop, NULL, "time_keyframe");
        RNA_def_property_array(prop, 3);
-       RNA_def_property_ui_text(prop, "Transform", "");
+       RNA_def_property_ui_text(prop, "Object Keyframe", "Color for indicating Object keyframes");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
-       
+
+       /* Object type options */
+
+       prop = RNA_def_property(srna, "camera", PROP_FLOAT, PROP_COLOR_GAMMA);
+       RNA_def_property_array(prop, 3);
+       RNA_def_property_ui_text(prop, "Camera", "");
+       RNA_def_property_update(prop, 0, "rna_userdef_update");
+
+       prop = RNA_def_property(srna, "empty", PROP_FLOAT, PROP_COLOR_GAMMA);
+       RNA_def_property_array(prop, 3);
+       RNA_def_property_ui_text(prop, "Empty", "");
+       RNA_def_property_update(prop, 0, "rna_userdef_update");
+
+       prop = RNA_def_property(srna, "lamp", PROP_FLOAT, PROP_COLOR_GAMMA);
+       RNA_def_property_array(prop, 4);
+       RNA_def_property_ui_text(prop, "Lamp", "");
+       RNA_def_property_update(prop, 0, "rna_userdef_update");
+
+       prop = RNA_def_property(srna, "speaker", PROP_FLOAT, PROP_COLOR_GAMMA);
+       RNA_def_property_array(prop, 3);
+       RNA_def_property_ui_text(prop, "Speaker", "");
+       RNA_def_property_update(prop, 0, "rna_userdef_update");
+
+       /* Mesh Object specific */
+
        rna_def_userdef_theme_spaces_vertex(srna);
        rna_def_userdef_theme_spaces_edge(srna);
        rna_def_userdef_theme_spaces_face(srna);
+
+       /* Mesh Object specific curves*/
+
        rna_def_userdef_theme_spaces_curves(srna, true, true, true, false);
 
        prop = RNA_def_property(srna, "extra_edge_len", PROP_FLOAT, PROP_COLOR_GAMMA);
@@ -1710,10 +1731,7 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Split Normal", "");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
 
-       prop = RNA_def_property(srna, "bone_solid", PROP_FLOAT, PROP_COLOR_GAMMA);
-       RNA_def_property_array(prop, 3);
-       RNA_def_property_ui_text(prop, "Bone Solid", "");
-       RNA_def_property_update(prop, 0, "rna_userdef_update");
+       /* Armature Object specific  */
 
        prop = RNA_def_property(srna, "bone_pose", PROP_FLOAT, PROP_COLOR_GAMMA);
        RNA_def_property_array(prop, 3);
@@ -1725,16 +1743,12 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Bone Pose Active", "");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
 
-       prop = RNA_def_property(srna, "frame_current", PROP_FLOAT, PROP_COLOR_GAMMA);
-       RNA_def_property_float_sdna(prop, NULL, "cframe");
+       prop = RNA_def_property(srna, "bone_solid", PROP_FLOAT, PROP_COLOR_GAMMA);
        RNA_def_property_array(prop, 3);
-       RNA_def_property_ui_text(prop, "Current Frame", "");
+       RNA_def_property_ui_text(prop, "Bone Solid", "");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
 
-       prop = RNA_def_property(srna, "outline_width", PROP_INT, PROP_NONE);
-       RNA_def_property_range(prop, 1, 5);
-       RNA_def_property_ui_text(prop, "Outline Width", "");
-       RNA_def_property_update(prop, 0, "rna_userdef_update");
+       /* misc */
 
        prop = RNA_def_property(srna, "bundle_solid", PROP_FLOAT, PROP_COLOR_GAMMA);
        RNA_def_property_float_sdna(prop, NULL, "bundle_solid");
@@ -1753,24 +1767,29 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Skin Root", "");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
 
-       prop = RNA_def_property(srna, "clipping_border_3d", PROP_FLOAT, PROP_COLOR_GAMMA);
-       RNA_def_property_array(prop, 4);
-       RNA_def_property_ui_text(prop, "Clipping Border", "");
+       prop = RNA_def_property(srna, "view_overlay", PROP_FLOAT, PROP_COLOR_GAMMA);
+       RNA_def_property_array(prop, 3);
+       RNA_def_property_ui_text(prop, "View Overlay", "");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
 
-       prop = RNA_def_property(srna, "text_keyframe", PROP_FLOAT, PROP_COLOR_GAMMA);
-       RNA_def_property_float_sdna(prop, NULL, "time_keyframe");
+       prop = RNA_def_property(srna, "transform", PROP_FLOAT, PROP_COLOR_GAMMA);
        RNA_def_property_array(prop, 3);
-       RNA_def_property_ui_text(prop, "Keyframe", "Color for indicating Object keyframes");
+       RNA_def_property_ui_text(prop, "Transform", "");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
 
-       prop = RNA_def_property(srna, "text_grease_pencil", PROP_FLOAT, PROP_COLOR_GAMMA);
-       RNA_def_property_float_sdna(prop, NULL, "time_gp_keyframe");
+       prop = RNA_def_property(srna, "frame_current", PROP_FLOAT, PROP_COLOR_GAMMA);
+       RNA_def_property_float_sdna(prop, NULL, "cframe");
        RNA_def_property_array(prop, 3);
-       RNA_def_property_ui_text(prop, "Grease Pencil", "Color for indicating Grease Pencil keyframes");
+       RNA_def_property_ui_text(prop, "Current Frame", "");
        RNA_def_property_update(prop, 0, "rna_userdef_update");
 
        rna_def_userdef_theme_spaces_paint_curves(srna);
+
+       prop = RNA_def_property(srna, "outline_width", PROP_INT, PROP_NONE);
+       RNA_def_property_range(prop, 1, 5);
+       RNA_def_property_ui_text(prop, "Outline Width", "");
+       RNA_def_property_update(prop, 0, "rna_userdef_update");
+
 }