Geometry Nodes: reorganize panels in modifier #117170

Merged
Jacques Lucke merged 6 commits from JacquesLucke/blender:panel-reorganization into main 2024-01-17 13:40:38 +01:00
2 changed files with 34 additions and 26 deletions
Showing only changes of commit 71760ac70c - Show all commits

View File

@ -7331,9 +7331,10 @@ static void rna_def_modifier_nodes(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_NO_DEG_UPDATE);
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, nullptr);
rna_def_modifier_panel_open_prop(srna, "open_manage_panel", 0);
rna_def_modifier_panel_open_prop(srna, "open_bake_panel", 1);
rna_def_modifier_panel_open_prop(srna, "open_named_attributes_panel", 2);
rna_def_modifier_panel_open_prop(srna, "open_output_attributes_panel", 0);
rna_def_modifier_panel_open_prop(srna, "open_manage_panel", 1);
rna_def_modifier_panel_open_prop(srna, "open_bake_panel", 2);
rna_def_modifier_panel_open_prop(srna, "open_named_attributes_panel", 3);
RNA_define_lib_overridable(false);
}

View File

@ -1880,18 +1880,13 @@ static void draw_property_for_output_socket(const bContext &C,
const std::string rna_path_attribute_name = "[\"" + StringRef(socket_id_esc) +
nodes::input_attribute_name_suffix() + "\"]";
uiLayout *row = uiLayoutRow(layout, true);
uiLayoutSetPropDecorate(row, false);
uiLayout *split = uiLayoutSplit(row, 0.4f, false);
uiLayout *split = uiLayoutSplit(layout, 0.4f, false);
uiLayout *name_row = uiLayoutRow(split, false);
uiLayoutSetAlignment(name_row, UI_LAYOUT_ALIGN_RIGHT);
uiItemL(name_row, socket.name ? socket.name : "", ICON_NONE);
uiLayout *prop_row = uiLayoutRow(split, true);
add_attribute_search_button(C, prop_row, nmd, md_ptr, rna_path_attribute_name, socket, true);
uiItemL(prop_row, "", ICON_BLANK1);
uiItemL(row, "", ICON_BLANK1);
uiLayout *row = uiLayoutRow(split, true);
add_attribute_search_button(C, row, nmd, md_ptr, rna_path_attribute_name, socket, true);
}
static NodesModifierPanel *find_panel_by_id(NodesModifierData &nmd, const int id)
@ -1934,20 +1929,27 @@ static void draw_interface_panel_content(const bContext *C,
}
}
}
for (const bNodeTreeInterfaceItem *item : interface_panel.items()) {
if (item->item_type != NODE_INTERFACE_SOCKET) {
continue;
}
static void draw_output_attributes_panel(const bContext *C,
uiLayout *layout,
const NodesModifierData &nmd,
PointerRNA *ptr)
{
bool has_output_attribute = false;
if (nmd.node_group != nullptr && nmd.settings.properties != nullptr) {
for (const bNodeTreeInterfaceSocket *socket : nmd.node_group->interface_outputs()) {
const bNodeSocketType *typeinfo = socket->socket_typeinfo();
const eNodeSocketDatatype type = typeinfo ? eNodeSocketDatatype(typeinfo->type) :
SOCK_CUSTOM;
if (nodes::socket_type_has_attribute_toggle(type)) {
has_output_attribute = true;
draw_property_for_output_socket(*C, layout, nmd, ptr, *socket);
}
}
const auto &interface_socket = *reinterpret_cast<const bNodeTreeInterfaceSocket *>(item);
if (!(interface_socket.flag & NODE_INTERFACE_SOCKET_OUTPUT)) {
continue;
}
const bNodeSocketType *typeinfo = interface_socket.socket_typeinfo();
const eNodeSocketDatatype type = typeinfo ? eNodeSocketDatatype(typeinfo->type) : SOCK_CUSTOM;
if (!nodes::socket_type_has_attribute_toggle(type)) {
continue;
}
draw_property_for_output_socket(*C, layout, nmd, modifier_ptr, interface_socket);
}
if (!has_output_attribute) {
uiItemL(layout, RPT_("No group output attributes connected"), ICON_INFO);
}
}
@ -2083,13 +2085,18 @@ static void panel_draw(const bContext *C, Panel *panel)
}
}
modifier_panel_end(layout, ptr);
if (uiLayout *panel_layout = uiLayoutPanel(
C, layout, IFACE_("Output Attributes"), ptr, "open_output_attributes_panel"))
{
draw_output_attributes_panel(C, panel_layout, *nmd, ptr);
}
if (uiLayout *panel_layout = uiLayoutPanel(
C, layout, IFACE_("Manage"), ptr, "open_manage_panel"))
{
draw_manage_panel(C, panel_layout, ptr, *nmd);
}
modifier_panel_end(layout, ptr);
}
static void panel_register(ARegionType *region_type)