UI: show symmetry popovers next to newly added mirror buttons

This moves symmetry panels to a small popover
next to the mirror axis buttons.
This commit is contained in:
Campbell Barton 2019-05-21 15:49:36 +10:00
parent 909c0bd043
commit 91a292ba40
2 changed files with 59 additions and 9 deletions

View File

@ -122,40 +122,44 @@ class VIEW3D_HT_tool_header(Header):
row.label(icon='MOD_MIRROR')
sub = row.row(align=True)
sub.scale_x = 0.6
return sub
return row, sub
if mode_string == 'EDIT_MESH':
sub = row_for_mirror()
_row, sub = row_for_mirror()
sub.prop(context.object.data, "use_mirror_x", text="X", toggle=True)
tool_settings = context.tool_settings
layout.prop(tool_settings, "use_mesh_automerge", text="")
elif mode_string == 'EDIT_ARMATURE':
sub = row_for_mirror()
_row, sub = row_for_mirror()
sub.prop(context.object.data, "use_mirror_x", text="X", toggle=True)
elif mode_string == 'POSE':
sub = row_for_mirror()
_row, sub = row_for_mirror()
sub.prop(context.object.pose, "use_mirror_x", text="X", toggle=True)
elif mode_string == 'PAINT_WEIGHT':
sub = row_for_mirror()
row, sub = row_for_mirror()
sub.prop(context.object.data, "use_mirror_x", text="X", toggle=True)
row.popover(panel="VIEW3D_PT_tools_weightpaint_symmetry_for_topbar", text="")
elif mode_string == 'SCULPT':
sub = row_for_mirror()
row, sub = row_for_mirror()
sculpt = context.tool_settings.sculpt
sub.prop(sculpt, "use_symmetry_x", text="X", toggle=True)
sub.prop(sculpt, "use_symmetry_y", text="Y", toggle=True)
sub.prop(sculpt, "use_symmetry_z", text="Z", toggle=True)
row.popover(panel="VIEW3D_PT_sculpt_symmetry_for_topbar", text="")
elif mode_string == 'PAINT_TEXTURE':
sub = row_for_mirror()
_row, sub = row_for_mirror()
ipaint = context.tool_settings.image_paint
sub.prop(ipaint, "use_symmetry_x", text="X", toggle=True)
sub.prop(ipaint, "use_symmetry_y", text="Y", toggle=True)
sub.prop(ipaint, "use_symmetry_z", text="Z", toggle=True)
# No need for a popover, the panel only has these options.
elif mode_string == 'PAINT_VERTEX':
sub = row_for_mirror()
row, sub = row_for_mirror()
vpaint = context.tool_settings.vertex_paint
sub.prop(vpaint, "use_symmetry_x", text="X", toggle=True)
sub.prop(vpaint, "use_symmetry_y", text="Y", toggle=True)
sub.prop(vpaint, "use_symmetry_z", text="Z", toggle=True)
row.popover(panel="VIEW3D_PT_tools_vertexpaint_symmetry_for_topbar", text="")
# Expand panels from the side-bar as popovers.
if mode_string == 'SCULPT':

View File

@ -1169,7 +1169,11 @@ class VIEW3D_PT_sculpt_symmetry(Panel, View3DPaintPanel):
@classmethod
def poll(cls, context):
return (context.sculpt_object and context.tool_settings.sculpt)
return (
(context.sculpt_object and context.tool_settings.sculpt) and
# When used in the tool header, this is explicitly included next to the XYZ symmetry buttons.
(context.region.type != 'TOOL_HEADER')
)
def draw(self, context):
layout = self.layout
@ -1223,6 +1227,14 @@ class VIEW3D_PT_sculpt_symmetry(Panel, View3DPaintPanel):
layout.column().prop(sculpt, "tile_offset", text="Tile Offset")
class VIEW3D_PT_sculpt_symmetry_for_topbar(Panel):
bl_space_type = 'TOPBAR'
bl_region_type = 'HEADER'
bl_label = "Symmetry"
draw = VIEW3D_PT_sculpt_symmetry.draw
class VIEW3D_PT_tools_brush_display_show_brush(Panel, View3DPaintPanel):
bl_context = ".paint_common" # dot on purpose (access from topbar)
bl_label = "Show Brush"
@ -1290,6 +1302,11 @@ class VIEW3D_PT_tools_weightpaint_symmetry(Panel, View3DPaintPanel):
bl_options = {'DEFAULT_CLOSED'}
bl_label = "Symmetry"
@classmethod
def poll(cls, context):
# When used in the tool header, this is explicitly included next to the XYZ symmetry buttons.
return (context.region.type != 'TOOL_HEADER')
def draw(self, context):
layout = self.layout
tool_settings = context.tool_settings
@ -1297,6 +1314,14 @@ class VIEW3D_PT_tools_weightpaint_symmetry(Panel, View3DPaintPanel):
draw_vpaint_symmetry(layout, wpaint)
class VIEW3D_PT_tools_weightpaint_symmetry_for_topbar(Panel):
bl_space_type = 'TOPBAR'
bl_region_type = 'HEADER'
bl_label = "Symmetry"
draw = VIEW3D_PT_tools_weightpaint_symmetry.draw
# TODO, move to space_view3d.py
class VIEW3D_PT_tools_weightpaint_options(Panel, View3DPaintPanel):
bl_context = ".weightpaint"
@ -1363,6 +1388,11 @@ class VIEW3D_PT_tools_vertexpaint_symmetry(Panel, View3DPaintPanel):
bl_options = {'DEFAULT_CLOSED'}
bl_label = "Symmetry"
@classmethod
def poll(cls, context):
# When used in the tool header, this is explicitly included next to the XYZ symmetry buttons.
return (context.region.type != 'TOOL_HEADER')
def draw(self, context):
layout = self.layout
tool_settings = context.tool_settings
@ -1370,6 +1400,14 @@ class VIEW3D_PT_tools_vertexpaint_symmetry(Panel, View3DPaintPanel):
draw_vpaint_symmetry(layout, vpaint)
class VIEW3D_PT_tools_vertexpaint_symmetry_for_topbar(Panel):
bl_space_type = 'TOPBAR'
bl_region_type = 'HEADER'
bl_label = "Symmetry"
draw = VIEW3D_PT_tools_vertexpaint_symmetry.draw
# ********** default tools for texture-paint ****************
@ -1407,6 +1445,11 @@ class VIEW3D_PT_tools_imagepaint_symmetry(Panel, View3DPaintPanel):
bl_label = "Symmetry"
bl_options = {'DEFAULT_CLOSED'}
@classmethod
def poll(cls, context):
# When used in the tool header, this is explicitly included next to the XYZ symmetry buttons.
return (context.region.type != 'TOOL_HEADER')
def draw(self, context):
layout = self.layout
@ -2054,13 +2097,16 @@ classes = (
VIEW3D_PT_sculpt_dyntopo,
VIEW3D_PT_sculpt_dyntopo_remesh,
VIEW3D_PT_sculpt_symmetry,
VIEW3D_PT_sculpt_symmetry_for_topbar,
VIEW3D_PT_sculpt_options,
VIEW3D_PT_sculpt_options_unified,
VIEW3D_PT_sculpt_options_gravity,
VIEW3D_PT_tools_weightpaint_symmetry,
VIEW3D_PT_tools_weightpaint_symmetry_for_topbar,
VIEW3D_PT_tools_weightpaint_options,
VIEW3D_PT_tools_weightpaint_options_unified,
VIEW3D_PT_tools_vertexpaint_symmetry,
VIEW3D_PT_tools_vertexpaint_symmetry_for_topbar,
VIEW3D_PT_tools_vertexpaint_options,
VIEW3D_PT_tools_imagepaint_symmetry,
VIEW3D_PT_tools_imagepaint_options,