UI: move gizmo orientation settings into popover

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
This commit is contained in:
Campbell Barton 2018-12-19 22:36:33 +11:00
parent 25fcb44d2d
commit 2af0ec9457
4 changed files with 59 additions and 10 deletions

View 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:

View 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,

View 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]) {

View 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;