fix item_edited behavior on Asset Installer.

(cherry picked from commit b0fbde6abd)
This commit is contained in:
Zae 2020-07-08 21:32:42 +08:00 committed by Rémi Verschelde
parent e798cf81c5
commit ac3ff49ae5
2 changed files with 25 additions and 1 deletions

View File

@ -55,6 +55,27 @@ void EditorAssetInstaller::_update_subitems(TreeItem *p_item, bool p_check, bool
} }
} }
void EditorAssetInstaller::_uncheck_parent(TreeItem *p_item) {
if (!p_item) {
return;
}
bool any_checked = false;
TreeItem *item = p_item->get_children();
while (item) {
if (item->is_checked(0)) {
any_checked = true;
break;
}
item = item->get_next();
}
if (!any_checked) {
p_item->set_checked(0, false);
_uncheck_parent(p_item->get_parent());
}
}
void EditorAssetInstaller::_item_edited() { void EditorAssetInstaller::_item_edited() {
if (updating) if (updating)
@ -67,7 +88,7 @@ void EditorAssetInstaller::_item_edited() {
String path = item->get_metadata(0); String path = item->get_metadata(0);
updating = true; updating = true;
if (path == String()) { //a dir if (path == String() || item == tree->get_root()) { //a dir or root
_update_subitems(item, item->is_checked(0), true); _update_subitems(item, item->is_checked(0), true);
} }
@ -76,6 +97,8 @@ void EditorAssetInstaller::_item_edited() {
item->set_checked(0, true); item->set_checked(0, true);
item = item->get_parent(); item = item->get_parent();
} }
} else {
_uncheck_parent(item->get_parent());
} }
updating = false; updating = false;
} }

View File

@ -43,6 +43,7 @@ class EditorAssetInstaller : public ConfirmationDialog {
Map<String, TreeItem *> status_map; Map<String, TreeItem *> status_map;
bool updating; bool updating;
void _update_subitems(TreeItem *p_item, bool p_check, bool p_first = false); void _update_subitems(TreeItem *p_item, bool p_check, bool p_first = false);
void _uncheck_parent(TreeItem *p_item);
void _item_edited(); void _item_edited();
virtual void ok_pressed(); virtual void ok_pressed();