fix: undo/redo layer name changes updates tree ui
This commit is contained in:
parent
73cb82d8db
commit
630641ceee
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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{};
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue