From 7f31cbda4fcd974fd72e61eb33074abd75b0e195 Mon Sep 17 00:00:00 2001 From: Jakub Grzesik Date: Fri, 14 Jul 2017 10:45:24 +0200 Subject: Fix uncheckable checkboxes in RMB menu. closes #9625 --- editor/scene_tree_dock.cpp | 17 +++++++++++------ scene/gui/popup_menu.cpp | 11 +++++++++++ scene/gui/popup_menu.h | 1 + 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index 886474200e..cdae9baaf2 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -663,13 +663,16 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { if (List::Element *e = selection.front()) { if (Node *node = e->get()) { bool editable = EditorNode::get_singleton()->get_edited_scene()->is_editable_instance(node); + int editable_item_idx = menu->get_item_idx_from_text(TTR("Editable Children")); + int placeholder_item_idx = menu->get_item_idx_from_text(TTR("Load As Placeholder")); editable = !editable; EditorNode::get_singleton()->get_edited_scene()->set_editable_instance(node, editable); - menu->set_item_checked(18, editable); + + menu->set_item_checked(editable_item_idx, editable); if (editable) { node->set_scene_instance_load_placeholder(false); - menu->set_item_checked(19, false); + menu->set_item_checked(placeholder_item_idx, false); } scene_tree->update_tree(); } @@ -681,12 +684,14 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { if (Node *node = e->get()) { bool placeholder = node->get_scene_instance_load_placeholder(); placeholder = !placeholder; + int editable_item_idx = menu->get_item_idx_from_text(TTR("Editable Children")); + int placeholder_item_idx = menu->get_item_idx_from_text(TTR("Load As Placeholder")); if (placeholder) EditorNode::get_singleton()->get_edited_scene()->set_editable_instance(node, false); node->set_scene_instance_load_placeholder(placeholder); - menu->set_item_checked(18, false); - menu->set_item_checked(19, placeholder); + menu->set_item_checked(editable_item_idx, false); + menu->set_item_checked(placeholder_item_idx, placeholder); scene_tree->update_tree(); } } @@ -1892,8 +1897,8 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) { menu->add_check_item(TTR("Load As Placeholder"), TOOL_SCENE_USE_PLACEHOLDER); menu->add_item(TTR("Discard Instancing"), TOOL_SCENE_CLEAR_INSTANCING); menu->add_icon_item(get_icon("Load", "EditorIcons"), TTR("Open in Editor"), TOOL_SCENE_OPEN); - menu->set_item_checked(18, editable); - menu->set_item_checked(19, placeholder); + menu->set_item_checked(menu->get_item_idx_from_text(TTR("Editable Children")), editable); + menu->set_item_checked(menu->get_item_idx_from_text(TTR("Load As Placeholder")), placeholder); } } } diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp index 072e90df3a..864fb3d3d5 100644 --- a/scene/gui/popup_menu.cpp +++ b/scene/gui/popup_menu.cpp @@ -696,6 +696,17 @@ String PopupMenu::get_item_text(int p_idx) const { ERR_FAIL_INDEX_V(p_idx, items.size(), ""); return items[p_idx].text; } + +int PopupMenu::get_item_idx_from_text(const String &text) const { + + for (int idx = 0; idx < items.size(); idx++) { + if (items[idx].text == text) + return idx; + } + + return -1; +} + Ref PopupMenu::get_item_icon(int p_idx) const { ERR_FAIL_INDEX_V(p_idx, items.size(), Ref()); diff --git a/scene/gui/popup_menu.h b/scene/gui/popup_menu.h index a9bd8f7e50..6f1a2db363 100644 --- a/scene/gui/popup_menu.h +++ b/scene/gui/popup_menu.h @@ -132,6 +132,7 @@ public: void toggle_item_checked(int p_idx); String get_item_text(int p_idx) const; + int get_item_idx_from_text(const String &text) const; Ref get_item_icon(int p_idx) const; bool is_item_checked(int p_idx) const; int get_item_ID(int p_idx) const; -- cgit v1.2.3