[Bf-blender-cvs] [1ce9a142b6a] blender2.8: UI: expose gizmo orientation as a single enum

Campbell Barton noreply at git.blender.org
Wed Dec 19 21:48:22 CET 2018


Commit: 1ce9a142b6abda92e20886d54b79c9de74099f5a
Author: Campbell Barton
Date:   Thu Dec 20 07:43:50 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB1ce9a142b6abda92e20886d54b79c9de74099f5a

UI: expose gizmo orientation as a single enum

Avoids awkward logic from the popover,
by faking an extra item in the enum.

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

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

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

diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
index 6a2de414ae7..24af3ce1318 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
@@ -69,23 +69,7 @@ class _template_widget:
         def draw_settings_with_index(context, layout, index):
             scene = context.scene
             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)
+            layout.prop(orient_slot, "type")
 
 
 class _defs_view3d_generic:
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index ce2fa8a51e4..7922cdb90ec 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -5270,40 +5270,6 @@ 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'
@@ -5816,9 +5782,6 @@ 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,
diff --git a/source/blender/editors/transform/transform_gizmo_3d.c b/source/blender/editors/transform/transform_gizmo_3d.c
index 3680c8c829c..b17a345ee09 100644
--- a/source/blender/editors/transform/transform_gizmo_3d.c
+++ b/source/blender/editors/transform/transform_gizmo_3d.c
@@ -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_global;
+		extern PropertyRNA rna_TransformOrientationSlot_use;
 		const PropertyRNA *props[] = {
 			&rna_TransformOrientationSlot_type,
-			&rna_TransformOrientationSlot_use_global,
+			&rna_TransformOrientationSlot_use,
 		};
 		for (int i = 0; i < ARRAY_SIZE(props); i++) {
 			if (props[i]) {
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 8a3c328f131..1fea0aa3e63 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -1975,15 +1975,36 @@ static void rna_ViewLayer_remove(
 	}
 }
 
+/* Fake value, used internally (not saved to DNA). */
+#define V3D_MANIP_DEFAULT -1
+
 static int rna_TransformOrientationSlot_type_get(PointerRNA *ptr)
 {
+	Scene *scene = ptr->id.data;
 	TransformOrientationSlot *orient_slot = ptr->data;
+	if (orient_slot != &scene->orientation_slots[SCE_ORIENT_DEFAULT]) {
+		if ((orient_slot->flag & SELECT) == 0) {
+			return V3D_MANIP_DEFAULT;
+		}
+	}
 	return BKE_scene_orientation_slot_get_index(orient_slot);
 }
 
 void rna_TransformOrientationSlot_type_set(PointerRNA *ptr, int value)
 {
+	Scene *scene = ptr->id.data;
 	TransformOrientationSlot *orient_slot = ptr->data;
+
+	if (orient_slot != &scene->orientation_slots[SCE_ORIENT_DEFAULT]) {
+		if (value == V3D_MANIP_DEFAULT) {
+			orient_slot->flag &= ~SELECT;
+			return;
+		}
+		else {
+			orient_slot->flag |= SELECT;
+		}
+	}
+
 	BKE_scene_orientation_slot_set_index(orient_slot, value);
 }
 
@@ -2001,13 +2022,27 @@ static PointerRNA rna_TransformOrientationSlot_get(PointerRNA *ptr)
 	return rna_pointer_inherit_refine(ptr, &RNA_TransformOrientation, orientation);
 }
 
-const EnumPropertyItem *rna_TransformOrientation_itemf(
-        bContext *C, PointerRNA *ptr, PropertyRNA *UNUSED(prop), bool *r_free)
+static const EnumPropertyItem *rna_TransformOrientation_impl_itemf(
+        bContext *C, PointerRNA *ptr,
+        const bool with_scene,
+        bool *r_free)
 {
 	EnumPropertyItem tmp = {0, "", 0, "", ""};
 	EnumPropertyItem *item = NULL;
 	int i = V3D_MANIP_CUSTOM, totitem = 0;
 
+	if (with_scene) {
+		tmp.identifier = "DEFAULT";
+		tmp.name = "Default";
+		tmp.description = "Use the scene orientation";
+		tmp.value = V3D_MANIP_DEFAULT;
+		tmp.icon = ICON_OBJECT_ORIGIN;
+		RNA_enum_item_add(&item, &totitem, &tmp);
+		tmp.icon = 0;
+
+		RNA_enum_item_add_separator(&item, &totitem);
+	}
+
 	RNA_enum_items_add(&item, &totitem, rna_enum_transform_orientation_items);
 
 	Scene *scene;
@@ -2035,6 +2070,19 @@ const EnumPropertyItem *rna_TransformOrientation_itemf(
 
 	return item;
 }
+const EnumPropertyItem *rna_TransformOrientation_itemf(
+        bContext *C, PointerRNA *ptr, PropertyRNA *UNUSED(prop), bool *r_free)
+{
+	return rna_TransformOrientation_impl_itemf(C, ptr, false, r_free);
+}
+
+const EnumPropertyItem *rna_TransformOrientation_with_scene_itemf(
+        bContext *C, PointerRNA *ptr, PropertyRNA *UNUSED(prop), bool *r_free)
+{
+	return rna_TransformOrientation_impl_itemf(C, ptr, true, r_free);
+}
+
+#undef V3D_MANIP_DEFAULT
 
 void rna_TransformOrientationSlot_ui_info(
         ID *scene_id, TransformOrientationSlot *orient_slot,
@@ -2227,8 +2275,8 @@ static void rna_def_transform_orientation_slot(BlenderRNA *brna)
 	        prop,
 	        "rna_TransformOrientationSlot_type_get",
 	        "rna_TransformOrientationSlot_type_set",
-	        "rna_TransformOrientation_itemf");
-	RNA_def_property_ui_text(prop, "Transform Orientation", "Transformation orientation");
+	        "rna_TransformOrientation_with_scene_itemf");
+	RNA_def_property_ui_text(prop, "Orientation", "Transformation orientation");
 	RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
 
 	prop = RNA_def_property(srna, "custom_orientation", PROP_POINTER, PROP_NONE);
@@ -2237,8 +2285,8 @@ 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_global", PROP_BOOLEAN, PROP_NONE);
-	RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SELECT);
+	prop = RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT);
 	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);



More information about the Bf-blender-cvs mailing list