UI: Improve geometry nodes tool popover layout

See #101778, #111524

Separate the layout into one popover for object types and another for
object modes. Use checkboxes with icons and full phrases like "Object
Mode". Also rename the modifier popover to "Modifier". Thought
it just has one option right now, so it looks quite weird.

---

![image](https://projects.blender.org/attachments/17e86c35-3c13-48e4-8113-817c5a80fdd3)
![image](https://projects.blender.org/attachments/f92a55a9-e4f0-4c29-8d15-a47a3154ed70)
![image](https://projects.blender.org/attachments/50cd0a93-0abb-4766-819b-62d265251822)

Pull Request: https://projects.blender.org/blender/blender/pulls/112749
This commit is contained in:
Hans Goudey 2023-09-23 02:33:51 +02:00 committed by Hans Goudey
parent 7c636c1702
commit 2cb34f7c0d
1 changed files with 61 additions and 20 deletions

View File

@ -162,11 +162,12 @@ class NODE_HT_header(Header):
else:
row.template_ID(snode, "node_tree", new="node.new_geometry_nodes_modifier")
if snode.node_tree and snode.node_tree.asset_data:
layout.popover(panel="NODE_PT_geometry_node_asset_traits")
layout.popover(panel="NODE_PT_geometry_node_modifier")
else:
layout.template_ID(snode, "node_tree", new="node.new_geometry_node_group_tool")
if snode.node_tree and snode.node_tree.asset_data:
layout.popover(panel="NODE_PT_geometry_node_asset_traits")
layout.popover(panel="NODE_PT_geometry_node_tool_object_types", text="Types")
layout.popover(panel="NODE_PT_geometry_node_tool_mode", text="Modes")
display_pin = False
else:
# Custom node tree is edited as independent ID block
@ -431,10 +432,62 @@ class NODE_PT_material_slots(Panel):
row.operator("object.material_slot_deselect", text="Deselect")
class NODE_PT_geometry_node_asset_traits(Panel):
class NODE_PT_geometry_node_tool_object_types(Panel):
bl_space_type = 'NODE_EDITOR'
bl_region_type = 'HEADER'
bl_label = "Asset"
bl_label = "Object Types"
bl_ui_units_x = 8
def draw(self, context):
layout = self.layout
snode = context.space_data
group = snode.node_tree
types = [("is_type_mesh", "Mesh", 'MESH_DATA'),
("is_type_curve", "Curves", 'CURVES_DATA')]
if context.preferences.experimental.use_new_point_cloud_type:
types.append(("is_type_point_cloud", "Point Cloud", 'POINTCLOUD_DATA'))
col = layout.column()
col.active = group.is_tool
for prop, name, icon in types:
row = col.row()
row_checkbox = row.row()
row_checkbox.prop(group, prop, text="")
row_label = row.row()
row_label.label(text=name, icon=icon)
class NODE_PT_geometry_node_tool_mode(Panel):
bl_space_type = 'NODE_EDITOR'
bl_region_type = 'HEADER'
bl_label = "Modes"
bl_ui_units_x = 8
def draw(self, context):
layout = self.layout
snode = context.space_data
group = snode.node_tree
modes = [("is_mode_edit", "Edit Mode", 'SCULPTMODE_HLT'),
("is_mode_sculpt", "Sculpt Mode", 'EDITMODE_HLT')]
col = layout.column()
col.active = group.is_tool
for prop, name, icon in modes:
row = col.row()
row_checkbox = row.row()
row_checkbox.prop(group, prop, text="")
row_label = row.row()
row_label.label(text=name, icon=icon)
class NODE_PT_geometry_node_modifier(Panel):
bl_space_type = 'NODE_EDITOR'
bl_region_type = 'HEADER'
bl_label = "Modifier"
def draw(self, context):
layout = self.layout
@ -444,21 +497,7 @@ class NODE_PT_geometry_node_asset_traits(Panel):
snode = context.space_data
group = snode.node_tree
if snode.geometry_nodes_type == 'MODIFIER':
layout.prop(group, "is_modifier")
else:
col = layout.column(heading="Type")
col.prop(group, "is_tool")
col = layout.column(heading="Mode")
col.active = group.is_tool
col.prop(group, "is_mode_edit")
col.prop(group, "is_mode_sculpt")
col = layout.column(heading="Geometry")
col.active = group.is_tool
col.prop(group, "is_type_mesh")
col.prop(group, "is_type_curve")
if context.preferences.experimental.use_new_point_cloud_type:
col.prop(group, "is_type_point_cloud")
layout.prop(group, "is_modifier")
class NODE_PT_node_color_presets(PresetPanel, Panel):
@ -1141,7 +1180,9 @@ classes = (
NODE_MT_context_menu,
NODE_MT_view_pie,
NODE_PT_material_slots,
NODE_PT_geometry_node_asset_traits,
NODE_PT_geometry_node_modifier,
NODE_PT_geometry_node_tool_object_types,
NODE_PT_geometry_node_tool_mode,
NODE_PT_node_color_presets,
NODE_MT_node_tree_interface_context_menu,
NODE_PT_node_tree_interface,