UI: move gizmo orientation settings into popover
authorCampbell Barton <ideasman42@gmail.com>
Wed, 19 Dec 2018 11:36:33 +0000 (22:36 +1100)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 19 Dec 2018 11:45:36 +0000 (22:45 +1100)
Instead of link toggle with enum, use a single popover that contains
both settings. The code for this isn't nice - needing 3x panels for now.

See D4075

release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
release/scripts/startup/bl_ui/space_view3d.py
source/blender/editors/transform/transform_gizmo_3d.c
source/blender/makesrna/intern/rna_scene.c

index 590d429996810511493503c227cef4265ab7d698..6a2de414ae7b28264965d0139eee41f3cbd056ee 100644 (file)
@@ -67,13 +67,25 @@ class _template_widget:
     class TRANSFORM_GGT_gizmo:
         @staticmethod
         def draw_settings_with_index(context, layout, index):
-            row = layout.row(align=True)
             scene = context.scene
-            orientation_slot = scene.transform_orientation_slots[index]
-            value = orientation_slot.use
-            row.prop(orientation_slot, "use", text="", icon='LINKED' if value else 'UNLINKED')
-            if not value:
-                row.prop(orientation_slot, "type", text="")
+            orient_slot = scene.transform_orientation_slots[index]
+            use_global = orient_slot.use_global
+            row = layout.row(align=True)
+
+            row.label(text="Orientation:")
+
+            popover_kw = {
+                "panel": "VIEW3D_PT_transform_orientations_gizmo_" f"{index}",
+            }
+
+            if use_global:
+                popover_kw["text"], popover_kw["icon"] = "Scene", 'OBJECT_ORIGIN'
+            else:
+                popover_kw["text"], popover_kw["icon_value"] = orient_slot.ui_info()
+
+            sub = layout.row()
+            sub.ui_units_x = 4
+            sub.popover(**popover_kw)
 
 
 class _defs_view3d_generic:
index 7922cdb90ec96ac4be99eee366473b5ff6d0b7ba..ce2fa8a51e45442a1332c5200b113fd0236ed972 100644 (file)
@@ -5270,6 +5270,40 @@ class VIEW3D_PT_transform_orientations(Panel):
             row.operator("transform.delete_orientation", text="", icon='X', emboss=False)
 
 
+# XXX, each panel needs to access a different orientation index.
+# look into a way to pass this from the UI that draws it.
+def VIEW3D_PT_transform_orientations_gizmo_factory(index):
+    class VIEW3D_PT_transform_orientations_other_n(Panel):
+        bl_space_type = 'VIEW_3D'
+        bl_region_type = 'HEADER'
+        bl_label = "Transform Orientations"
+        bl_ui_units_x = 8
+        bl_idname = "VIEW3D_PT_transform_orientations_gizmo_" + str(index)
+
+        def draw(self, context):
+            layout = self.layout
+
+            layout.label(text="Transform Orientations")
+
+            scene = context.scene
+            orient_slot = scene.transform_orientation_slots[index]
+
+            layout.prop(orient_slot, "use_global", text="Scene Orientation", icon='OBJECT_ORIGIN')
+            use_global = orient_slot.use_global
+
+            col = layout.column()
+            col.active = not use_global
+            col.column().prop(orient_slot, "type", expand=True)
+
+            # Only 'VIEW3D_PT_transform_orientations' can edit
+
+    return VIEW3D_PT_transform_orientations_other_n
+
+VIEW3D_PT_transform_orientations_gizmo_1 = VIEW3D_PT_transform_orientations_gizmo_factory(1)
+VIEW3D_PT_transform_orientations_gizmo_2 = VIEW3D_PT_transform_orientations_gizmo_factory(2)
+VIEW3D_PT_transform_orientations_gizmo_3 = VIEW3D_PT_transform_orientations_gizmo_factory(3)
+
+
 class VIEW3D_PT_gpencil_origin(Panel):
     bl_space_type = 'VIEW_3D'
     bl_region_type = 'HEADER'
@@ -5782,6 +5816,9 @@ classes = (
     VIEW3D_PT_gpencil_origin,
     VIEW3D_PT_gpencil_lock,
     VIEW3D_PT_transform_orientations,
+    VIEW3D_PT_transform_orientations_gizmo_1,
+    VIEW3D_PT_transform_orientations_gizmo_2,
+    VIEW3D_PT_transform_orientations_gizmo_3,
     VIEW3D_PT_overlay_gpencil_options,
     VIEW3D_PT_context_properties,
     TOPBAR_PT_gpencil_materials,
index b17a345ee097bc769c75315cb0a3726d8a03939e..3680c8c829cf5e0cf869adc19842b1fe5b2f0ae5 100644 (file)
@@ -1242,10 +1242,10 @@ static void gizmo_xform_message_subscribe(
        RNA_pointer_create(&scene->id, &RNA_TransformOrientationSlot, orient_slot, &orient_ref_ptr);
        {
                extern PropertyRNA rna_TransformOrientationSlot_type;
-               extern PropertyRNA rna_TransformOrientationSlot_use;
+               extern PropertyRNA rna_TransformOrientationSlot_use_global;
                const PropertyRNA *props[] = {
                        &rna_TransformOrientationSlot_type,
-                       &rna_TransformOrientationSlot_use,
+                       &rna_TransformOrientationSlot_use_global,
                };
                for (int i = 0; i < ARRAY_SIZE(props); i++) {
                        if (props[i]) {
index 3a8cfbff3a199cda1bf7532ac1c87d4647eb0e5c..8a3c328f131fc7cf1cee26461bb1cbeb6657bcdc 100644 (file)
@@ -2237,9 +2237,9 @@ static void rna_def_transform_orientation_slot(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Current Transform Orientation", "");
 
        /* flag */
-       prop = RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE);
+       prop = RNA_def_property(srna, "use_global", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SELECT);
-       RNA_def_property_ui_text(prop, "Use", "Disable to unlink the orientation from the scene-setting");
+       RNA_def_property_ui_text(prop, "Use", "Use scene orientation instead of a custom setting");
        RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL);
 
        FunctionRNA *func;