Merge pull request #13958 from jjjuande/fix_revert_button

Fix the revert button issue with instanced nodes
This commit is contained in:
Rémi Verschelde 2017-12-07 00:30:07 +01:00 committed by GitHub
commit e3155071bc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 15 deletions

View file

@ -2101,6 +2101,23 @@ bool PropertyEditor::_is_property_different(const Variant &p_current, const Vari
return bool(Variant::evaluate(Variant::OP_NOT_EQUAL, p_current, p_orig));
}
bool PropertyEditor::_is_instanced_node_with_original_property_different(const String &p_name, TreeItem *item) {
bool mbi = _might_be_in_instance();
if (mbi) {
Variant vorig;
Dictionary d = item->get_metadata(0);
int usage = d.has("usage") ? int(int(d["usage"]) & (PROPERTY_USAGE_STORE_IF_NONONE | PROPERTY_USAGE_STORE_IF_NONZERO)) : 0;
if (_get_instanced_node_original_property(p_name, vorig) || usage) {
Variant v = obj->get(p_name);
if (_is_property_different(v, vorig, usage)) {
return true;
}
}
}
return false;
}
TreeItem *PropertyEditor::find_item(TreeItem *p_item, const String &p_name) {
if (!p_item)
@ -2360,6 +2377,10 @@ void PropertyEditor::_check_reload_status(const String &p_name, TreeItem *item)
}
}
if (_is_instanced_node_with_original_property_different(p_name, item)) {
has_reload = true;
}
if (obj->call("property_can_revert", p_name).operator bool()) {
has_reload = true;
@ -3509,21 +3530,10 @@ void PropertyEditor::update_tree() {
bool has_reload = false;
bool mbi = _might_be_in_instance();
if (mbi) {
Variant vorig;
Dictionary d = item->get_metadata(0);
int usage = d.has("usage") ? int(int(d["usage"]) & (PROPERTY_USAGE_STORE_IF_NONONE | PROPERTY_USAGE_STORE_IF_NONZERO)) : 0;
if (_get_instanced_node_original_property(p.name, vorig) || usage) {
Variant v = obj->get(p.name);
if (_is_property_different(v, vorig, usage)) {
if (_is_instanced_node_with_original_property_different(p.name, item)) {
item->add_button(1, get_icon("ReloadSmall", "EditorIcons"), 3);
has_reload = true;
}
}
}
if (obj->call("property_can_revert", p.name).operator bool()) {
@ -3542,7 +3552,7 @@ void PropertyEditor::update_tree() {
}
}
if (mbi && !has_reload && item->get_cell_mode(1) == TreeItem::CELL_MODE_RANGE && item->get_text(1) == String()) {
if (_might_be_in_instance() && !has_reload && item->get_cell_mode(1) == TreeItem::CELL_MODE_RANGE && item->get_text(1) == String()) {
item->add_button(1, get_icon("ReloadEmpty", "EditorIcons"), 3, true);
}
}

View file

@ -244,6 +244,7 @@ class PropertyEditor : public Control {
bool _might_be_in_instance();
bool _get_instanced_node_original_property(const StringName &p_prop, Variant &value);
bool _is_property_different(const Variant &p_current, const Variant &p_orig, int p_usage = 0);
bool _is_instanced_node_with_original_property_different(const String &p_name, TreeItem *item);
void _refresh_item(TreeItem *p_item);
void _set_range_def(Object *p_item, String prop, float p_frame);