fix: undo/redo layer name changes updates tree ui

This commit is contained in:
Sara Gerretsen 2025-12-15 13:41:02 +01:00
parent 73cb82d8db
commit 630641ceee
2 changed files with 15 additions and 0 deletions

View file

@ -15,6 +15,10 @@ void PrimitiveLayerList::_bind_methods() {
void PrimitiveLayerList::generate_subtree(size_t idx, Ref<TerrainPrimitive> prim, TreeItem *parent) {
TreeItem *base{ create_item(get_root()) };
Callable connection{ callable_mp(this, &self_type::primitive_changed).bind(base, prim) };
prim->connect_changed(connection);
this->primitive_changed_connections.push_back(connection);
base->set_icon(ICON_COLUMN, this->icons.has(prim->get_class()) ? this->icons.get(prim->get_class()) : Ref<Texture2D>());
base->set_icon_max_width(ICON_COLUMN, 24);
base->set_selectable(ICON_COLUMN, true);
@ -30,8 +34,12 @@ void PrimitiveLayerList::generate_subtree(size_t idx, Ref<TerrainPrimitive> prim
}
void PrimitiveLayerList::regenerate_tree(Array array) {
for (size_t i{ 0 }; i < this->primitive_changed_connections.size(); i++) {
this->primitives[i]->disconnect_changed(this->primitive_changed_connections[i]);
}
get_root()->clear_children();
this->primitives.clear();
this->primitive_changed_connections.clear();
size_t i{ 0 };
for (Variant var : array) {
Ref<TerrainPrimitive> prim{ var };
@ -67,6 +75,11 @@ void PrimitiveLayerList::layer_renamed(TreeItem *item) {
EditHistory::get_singleton()->push_action(set_name_c.bind(item->get_text(NAME_COLUMN)), set_name_c.bind(old));
}
void PrimitiveLayerList::primitive_changed(TreeItem *item, Ref<TerrainPrimitive> primitive) {
StringName const name{ primitive->get_name() };
item->set_text(NAME_COLUMN, name.is_empty() ? primitive->get_class_name() : name);
}
void PrimitiveLayerList::item_edited() {
TreeItem *edited{ get_edited() };
if (!edited) {

View file

@ -18,6 +18,7 @@ class PrimitiveLayerList : public Tree {
void regenerate_tree(Array array);
void switch_index(size_t from, size_t to);
void layer_renamed(TreeItem *item);
void primitive_changed(TreeItem *item, Ref<TerrainPrimitive> primitive);
void item_edited();
void item_selected();
@ -34,5 +35,6 @@ private:
HashMap<StringName, Ref<Texture2D>> icons{};
TerrainMeshEditor *terrain{};
Vector<Callable> primitive_changed_connections{};
Vector<Ref<TerrainPrimitive>> primitives{};
};