fix item_edited behavior on Asset Installer.
This commit is contained in:
parent
18c51d3f0c
commit
b0fbde6abd
2 changed files with 25 additions and 1 deletions
|
@ -54,6 +54,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() {
|
||||
if (updating) {
|
||||
return;
|
||||
|
@ -67,7 +88,7 @@ void EditorAssetInstaller::_item_edited() {
|
|||
String path = item->get_metadata(0);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -76,6 +97,8 @@ void EditorAssetInstaller::_item_edited() {
|
|||
item->set_checked(0, true);
|
||||
item = item->get_parent();
|
||||
}
|
||||
} else {
|
||||
_uncheck_parent(item->get_parent());
|
||||
}
|
||||
updating = false;
|
||||
}
|
||||
|
|
|
@ -42,6 +42,7 @@ class EditorAssetInstaller : public ConfirmationDialog {
|
|||
Map<String, TreeItem *> status_map;
|
||||
bool updating;
|
||||
void _update_subitems(TreeItem *p_item, bool p_check, bool p_first = false);
|
||||
void _uncheck_parent(TreeItem *p_item);
|
||||
void _item_edited();
|
||||
virtual void ok_pressed();
|
||||
|
||||
|
|
Loading…
Reference in a new issue