Fix uncheckable checkboxes in RMB menu. closes #9625
This commit is contained in:
parent
9a502d3c17
commit
7f31cbda4f
|
@ -663,13 +663,16 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
|
||||||
if (List<Node *>::Element *e = selection.front()) {
|
if (List<Node *>::Element *e = selection.front()) {
|
||||||
if (Node *node = e->get()) {
|
if (Node *node = e->get()) {
|
||||||
bool editable = EditorNode::get_singleton()->get_edited_scene()->is_editable_instance(node);
|
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;
|
editable = !editable;
|
||||||
|
|
||||||
EditorNode::get_singleton()->get_edited_scene()->set_editable_instance(node, 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) {
|
if (editable) {
|
||||||
node->set_scene_instance_load_placeholder(false);
|
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();
|
scene_tree->update_tree();
|
||||||
}
|
}
|
||||||
|
@ -681,12 +684,14 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
|
||||||
if (Node *node = e->get()) {
|
if (Node *node = e->get()) {
|
||||||
bool placeholder = node->get_scene_instance_load_placeholder();
|
bool placeholder = node->get_scene_instance_load_placeholder();
|
||||||
placeholder = !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)
|
if (placeholder)
|
||||||
EditorNode::get_singleton()->get_edited_scene()->set_editable_instance(node, false);
|
EditorNode::get_singleton()->get_edited_scene()->set_editable_instance(node, false);
|
||||||
|
|
||||||
node->set_scene_instance_load_placeholder(placeholder);
|
node->set_scene_instance_load_placeholder(placeholder);
|
||||||
menu->set_item_checked(18, false);
|
menu->set_item_checked(editable_item_idx, false);
|
||||||
menu->set_item_checked(19, placeholder);
|
menu->set_item_checked(placeholder_item_idx, placeholder);
|
||||||
scene_tree->update_tree();
|
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_check_item(TTR("Load As Placeholder"), TOOL_SCENE_USE_PLACEHOLDER);
|
||||||
menu->add_item(TTR("Discard Instancing"), TOOL_SCENE_CLEAR_INSTANCING);
|
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->add_icon_item(get_icon("Load", "EditorIcons"), TTR("Open in Editor"), TOOL_SCENE_OPEN);
|
||||||
menu->set_item_checked(18, editable);
|
menu->set_item_checked(menu->get_item_idx_from_text(TTR("Editable Children")), editable);
|
||||||
menu->set_item_checked(19, placeholder);
|
menu->set_item_checked(menu->get_item_idx_from_text(TTR("Load As Placeholder")), placeholder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -696,6 +696,17 @@ String PopupMenu::get_item_text(int p_idx) const {
|
||||||
ERR_FAIL_INDEX_V(p_idx, items.size(), "");
|
ERR_FAIL_INDEX_V(p_idx, items.size(), "");
|
||||||
return items[p_idx].text;
|
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<Texture> PopupMenu::get_item_icon(int p_idx) const {
|
Ref<Texture> PopupMenu::get_item_icon(int p_idx) const {
|
||||||
|
|
||||||
ERR_FAIL_INDEX_V(p_idx, items.size(), Ref<Texture>());
|
ERR_FAIL_INDEX_V(p_idx, items.size(), Ref<Texture>());
|
||||||
|
|
|
@ -132,6 +132,7 @@ public:
|
||||||
void toggle_item_checked(int p_idx);
|
void toggle_item_checked(int p_idx);
|
||||||
|
|
||||||
String get_item_text(int p_idx) const;
|
String get_item_text(int p_idx) const;
|
||||||
|
int get_item_idx_from_text(const String &text) const;
|
||||||
Ref<Texture> get_item_icon(int p_idx) const;
|
Ref<Texture> get_item_icon(int p_idx) const;
|
||||||
bool is_item_checked(int p_idx) const;
|
bool is_item_checked(int p_idx) const;
|
||||||
int get_item_ID(int p_idx) const;
|
int get_item_ID(int p_idx) const;
|
||||||
|
|
Loading…
Reference in New Issue