context menu improvements
This commit is contained in:
parent
e38051970c
commit
1bb13e95a8
@ -1753,6 +1753,11 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) {
|
|||||||
} else {
|
} else {
|
||||||
tab_closing = editor_data.get_edited_scene();
|
tab_closing = editor_data.get_edited_scene();
|
||||||
}
|
}
|
||||||
|
if (!editor_data.get_edited_scene_root(tab_closing)) {
|
||||||
|
// empty tab
|
||||||
|
_scene_tab_closed(tab_closing);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
} // fallthrough
|
} // fallthrough
|
||||||
case SCENE_TAB_CLOSE:
|
case SCENE_TAB_CLOSE:
|
||||||
@ -3833,6 +3838,7 @@ void EditorNode::_scene_tab_input(const Ref<InputEvent> &p_input) {
|
|||||||
Ref<InputEventMouseButton> mb = p_input;
|
Ref<InputEventMouseButton> mb = p_input;
|
||||||
|
|
||||||
if (mb.is_valid()) {
|
if (mb.is_valid()) {
|
||||||
|
|
||||||
if (scene_tabs->get_hovered_tab() >= 0) {
|
if (scene_tabs->get_hovered_tab() >= 0) {
|
||||||
if (mb->get_button_index() == BUTTON_MIDDLE && mb->is_pressed()) {
|
if (mb->get_button_index() == BUTTON_MIDDLE && mb->is_pressed()) {
|
||||||
_scene_tab_closed(scene_tabs->get_hovered_tab());
|
_scene_tab_closed(scene_tabs->get_hovered_tab());
|
||||||
@ -3842,6 +3848,26 @@ void EditorNode::_scene_tab_input(const Ref<InputEvent> &p_input) {
|
|||||||
_menu_option_confirm(FILE_NEW_SCENE, true);
|
_menu_option_confirm(FILE_NEW_SCENE, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed()) {
|
||||||
|
|
||||||
|
// context menu
|
||||||
|
scene_tabs_context_menu->clear();
|
||||||
|
scene_tabs_context_menu->set_size(Size2(1, 1));
|
||||||
|
|
||||||
|
scene_tabs_context_menu->add_shortcut(ED_GET_SHORTCUT("editor/new_scene"), FILE_NEW_SCENE);
|
||||||
|
if (scene_tabs->get_hovered_tab() >= 0) {
|
||||||
|
scene_tabs_context_menu->add_shortcut(ED_GET_SHORTCUT("editor/save_scene"), FILE_SAVE_SCENE);
|
||||||
|
scene_tabs_context_menu->add_shortcut(ED_GET_SHORTCUT("editor/save_scene_as"), FILE_SAVE_AS_SCENE);
|
||||||
|
}
|
||||||
|
scene_tabs_context_menu->add_shortcut(ED_GET_SHORTCUT("editor/save_all_scenes"), FILE_SAVE_ALL_SCENES);
|
||||||
|
if (scene_tabs->get_hovered_tab() >= 0) {
|
||||||
|
scene_tabs_context_menu->add_separator();
|
||||||
|
scene_tabs_context_menu->add_item(TTR("Play This Scene"), RUN_PLAY_SCENE);
|
||||||
|
scene_tabs_context_menu->add_item(TTR("Close Tab"), FILE_CLOSE);
|
||||||
|
}
|
||||||
|
scene_tabs_context_menu->set_position(mb->get_global_position());
|
||||||
|
scene_tabs_context_menu->popup();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4897,6 +4923,7 @@ EditorNode::EditorNode() {
|
|||||||
scene_tabs = memnew(Tabs);
|
scene_tabs = memnew(Tabs);
|
||||||
scene_tabs->add_style_override("tab_fg", gui_base->get_stylebox("SceneTabFG", "EditorStyles"));
|
scene_tabs->add_style_override("tab_fg", gui_base->get_stylebox("SceneTabFG", "EditorStyles"));
|
||||||
scene_tabs->add_style_override("tab_bg", gui_base->get_stylebox("SceneTabBG", "EditorStyles"));
|
scene_tabs->add_style_override("tab_bg", gui_base->get_stylebox("SceneTabBG", "EditorStyles"));
|
||||||
|
scene_tabs->set_select_with_rmb(true);
|
||||||
scene_tabs->add_tab("unsaved");
|
scene_tabs->add_tab("unsaved");
|
||||||
scene_tabs->set_tab_align(Tabs::ALIGN_LEFT);
|
scene_tabs->set_tab_align(Tabs::ALIGN_LEFT);
|
||||||
scene_tabs->set_tab_close_display_policy((bool(EDITOR_DEF("interface/scene_tabs/always_show_close_button", false)) ? Tabs::CLOSE_BUTTON_SHOW_ALWAYS : Tabs::CLOSE_BUTTON_SHOW_ACTIVE_ONLY));
|
scene_tabs->set_tab_close_display_policy((bool(EDITOR_DEF("interface/scene_tabs/always_show_close_button", false)) ? Tabs::CLOSE_BUTTON_SHOW_ALWAYS : Tabs::CLOSE_BUTTON_SHOW_ACTIVE_ONLY));
|
||||||
@ -4914,6 +4941,11 @@ EditorNode::EditorNode() {
|
|||||||
tabbar_container = memnew(HBoxContainer);
|
tabbar_container = memnew(HBoxContainer);
|
||||||
scene_tabs->set_h_size_flags(Control::SIZE_EXPAND_FILL);
|
scene_tabs->set_h_size_flags(Control::SIZE_EXPAND_FILL);
|
||||||
|
|
||||||
|
scene_tabs_context_menu = memnew(PopupMenu);
|
||||||
|
tabbar_container->add_child(scene_tabs_context_menu);
|
||||||
|
scene_tabs_context_menu->connect("id_pressed", this, "_menu_option");
|
||||||
|
scene_tabs_context_menu->set_hide_on_window_lose_focus(true);
|
||||||
|
|
||||||
srt->add_child(tabbar_container);
|
srt->add_child(tabbar_container);
|
||||||
tabbar_container->add_child(scene_tabs);
|
tabbar_container->add_child(scene_tabs);
|
||||||
distraction_free = memnew(ToolButton);
|
distraction_free = memnew(ToolButton);
|
||||||
@ -5020,6 +5052,7 @@ EditorNode::EditorNode() {
|
|||||||
|
|
||||||
file_menu->set_tooltip(TTR("Operations with scene files."));
|
file_menu->set_tooltip(TTR("Operations with scene files."));
|
||||||
p = file_menu->get_popup();
|
p = file_menu->get_popup();
|
||||||
|
p->set_hide_on_window_lose_focus(true);
|
||||||
p->add_shortcut(ED_SHORTCUT("editor/new_scene", TTR("New Scene")), FILE_NEW_SCENE);
|
p->add_shortcut(ED_SHORTCUT("editor/new_scene", TTR("New Scene")), FILE_NEW_SCENE);
|
||||||
p->add_shortcut(ED_SHORTCUT("editor/new_inherited_scene", TTR("New Inherited Scene...")), FILE_NEW_INHERITED_SCENE);
|
p->add_shortcut(ED_SHORTCUT("editor/new_inherited_scene", TTR("New Inherited Scene...")), FILE_NEW_INHERITED_SCENE);
|
||||||
p->add_shortcut(ED_SHORTCUT("editor/open_scene", TTR("Open Scene..."), KEY_MASK_CMD + KEY_O), FILE_OPEN_SCENE);
|
p->add_shortcut(ED_SHORTCUT("editor/open_scene", TTR("Open Scene..."), KEY_MASK_CMD + KEY_O), FILE_OPEN_SCENE);
|
||||||
@ -5065,6 +5098,7 @@ EditorNode::EditorNode() {
|
|||||||
left_menu_hb->add_child(project_menu);
|
left_menu_hb->add_child(project_menu);
|
||||||
|
|
||||||
p = project_menu->get_popup();
|
p = project_menu->get_popup();
|
||||||
|
p->set_hide_on_window_lose_focus(true);
|
||||||
p->add_item(TTR("Project Settings"), RUN_SETTINGS);
|
p->add_item(TTR("Project Settings"), RUN_SETTINGS);
|
||||||
p->add_separator();
|
p->add_separator();
|
||||||
p->connect("id_pressed", this, "_menu_option");
|
p->connect("id_pressed", this, "_menu_option");
|
||||||
@ -5097,6 +5131,7 @@ EditorNode::EditorNode() {
|
|||||||
left_menu_hb->add_child(debug_menu);
|
left_menu_hb->add_child(debug_menu);
|
||||||
|
|
||||||
p = debug_menu->get_popup();
|
p = debug_menu->get_popup();
|
||||||
|
p->set_hide_on_window_lose_focus(true);
|
||||||
p->set_hide_on_item_selection(false);
|
p->set_hide_on_item_selection(false);
|
||||||
p->add_check_item(TTR("Deploy with Remote Debug"), RUN_DEPLOY_REMOTE_DEBUG);
|
p->add_check_item(TTR("Deploy with Remote Debug"), RUN_DEPLOY_REMOTE_DEBUG);
|
||||||
p->set_item_tooltip(p->get_item_count() - 1, TTR("When exporting or deploying, the resulting executable will attempt to connect to the IP of this computer in order to be debugged."));
|
p->set_item_tooltip(p->get_item_count() - 1, TTR("When exporting or deploying, the resulting executable will attempt to connect to the IP of this computer in order to be debugged."));
|
||||||
@ -5121,8 +5156,9 @@ EditorNode::EditorNode() {
|
|||||||
settings_menu->set_text(TTR("Editor"));
|
settings_menu->set_text(TTR("Editor"));
|
||||||
settings_menu->add_style_override("hover", gui_base->get_stylebox("MenuHover", "EditorStyles"));
|
settings_menu->add_style_override("hover", gui_base->get_stylebox("MenuHover", "EditorStyles"));
|
||||||
left_menu_hb->add_child(settings_menu);
|
left_menu_hb->add_child(settings_menu);
|
||||||
p = settings_menu->get_popup();
|
|
||||||
|
|
||||||
|
p = settings_menu->get_popup();
|
||||||
|
p->set_hide_on_window_lose_focus(true);
|
||||||
p->add_item(TTR("Editor Settings"), SETTINGS_PREFERENCES);
|
p->add_item(TTR("Editor Settings"), SETTINGS_PREFERENCES);
|
||||||
p->add_separator();
|
p->add_separator();
|
||||||
editor_layouts = memnew(PopupMenu);
|
editor_layouts = memnew(PopupMenu);
|
||||||
@ -5146,6 +5182,7 @@ EditorNode::EditorNode() {
|
|||||||
left_menu_hb->add_child(help_menu);
|
left_menu_hb->add_child(help_menu);
|
||||||
|
|
||||||
p = help_menu->get_popup();
|
p = help_menu->get_popup();
|
||||||
|
p->set_hide_on_window_lose_focus(true);
|
||||||
p->connect("id_pressed", this, "_menu_option");
|
p->connect("id_pressed", this, "_menu_option");
|
||||||
p->add_icon_item(gui_base->get_icon("ClassList", "EditorIcons"), TTR("Classes"), HELP_CLASSES);
|
p->add_icon_item(gui_base->get_icon("ClassList", "EditorIcons"), TTR("Classes"), HELP_CLASSES);
|
||||||
p->add_icon_item(gui_base->get_icon("HelpSearch", "EditorIcons"), TTR("Search"), HELP_SEARCH);
|
p->add_icon_item(gui_base->get_icon("HelpSearch", "EditorIcons"), TTR("Search"), HELP_SEARCH);
|
||||||
|
@ -220,6 +220,7 @@ private:
|
|||||||
//main tabs
|
//main tabs
|
||||||
|
|
||||||
Tabs *scene_tabs;
|
Tabs *scene_tabs;
|
||||||
|
PopupMenu *scene_tabs_context_menu;
|
||||||
Panel *tab_preview_panel;
|
Panel *tab_preview_panel;
|
||||||
TextureRect *tab_preview;
|
TextureRect *tab_preview;
|
||||||
int tab_closing;
|
int tab_closing;
|
||||||
|
@ -1983,9 +1983,11 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) {
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
file_options = memnew(PopupMenu);
|
file_options = memnew(PopupMenu);
|
||||||
|
file_options->set_hide_on_window_lose_focus(true);
|
||||||
add_child(file_options);
|
add_child(file_options);
|
||||||
|
|
||||||
folder_options = memnew(PopupMenu);
|
folder_options = memnew(PopupMenu);
|
||||||
|
folder_options->set_hide_on_window_lose_focus(true);
|
||||||
add_child(folder_options);
|
add_child(folder_options);
|
||||||
|
|
||||||
split_box = memnew(VSplitContainer);
|
split_box = memnew(VSplitContainer);
|
||||||
|
@ -2401,26 +2401,25 @@ void ScriptEditor::_make_script_list_context_menu() {
|
|||||||
if (se) {
|
if (se) {
|
||||||
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/save"), FILE_SAVE);
|
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/save"), FILE_SAVE);
|
||||||
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/save_as"), FILE_SAVE_AS);
|
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/save_as"), FILE_SAVE_AS);
|
||||||
|
}
|
||||||
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/close_file"), FILE_CLOSE);
|
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/close_file"), FILE_CLOSE);
|
||||||
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/close_all"), CLOSE_ALL);
|
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/close_all"), CLOSE_ALL);
|
||||||
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/close_other_tabs"), CLOSE_OTHER_TABS);
|
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/close_other_tabs"), CLOSE_OTHER_TABS);
|
||||||
context_menu->add_separator();
|
context_menu->add_separator();
|
||||||
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/copy_path"), FILE_COPY_PATH);
|
if (se) {
|
||||||
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/show_in_file_system"), SHOW_IN_FILE_SYSTEM);
|
|
||||||
|
|
||||||
Ref<Script> scr = se->get_edited_resource();
|
Ref<Script> scr = se->get_edited_resource();
|
||||||
if (scr != NULL) {
|
if (scr != NULL) {
|
||||||
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/reload_script_soft"), FILE_TOOL_RELOAD_SOFT);
|
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/reload_script_soft"), FILE_TOOL_RELOAD_SOFT);
|
||||||
if (!scr.is_null() && scr->is_tool()) {
|
if (!scr.is_null() && scr->is_tool()) {
|
||||||
context_menu->add_separator();
|
|
||||||
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/run_file"), FILE_RUN);
|
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/run_file"), FILE_RUN);
|
||||||
|
context_menu->add_separator();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/copy_path"), FILE_COPY_PATH);
|
||||||
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/close_file"), FILE_CLOSE);
|
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/show_in_file_system"), SHOW_IN_FILE_SYSTEM);
|
||||||
|
context_menu->add_separator();
|
||||||
}
|
}
|
||||||
|
|
||||||
context_menu->add_separator();
|
|
||||||
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/window_move_up"), WINDOW_MOVE_UP);
|
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/window_move_up"), WINDOW_MOVE_UP);
|
||||||
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/window_move_down"), WINDOW_MOVE_DOWN);
|
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/window_move_down"), WINDOW_MOVE_DOWN);
|
||||||
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/window_sort"), WINDOW_SORT);
|
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/window_sort"), WINDOW_SORT);
|
||||||
@ -2901,6 +2900,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
|
|||||||
context_menu = memnew(PopupMenu);
|
context_menu = memnew(PopupMenu);
|
||||||
add_child(context_menu);
|
add_child(context_menu);
|
||||||
context_menu->connect("id_pressed", this, "_menu_option");
|
context_menu->connect("id_pressed", this, "_menu_option");
|
||||||
|
context_menu->set_hide_on_window_lose_focus(true);
|
||||||
|
|
||||||
overview_vbox = memnew(VBoxContainer);
|
overview_vbox = memnew(VBoxContainer);
|
||||||
overview_vbox->set_custom_minimum_size(Size2(0, 90));
|
overview_vbox->set_custom_minimum_size(Size2(0, 90));
|
||||||
@ -2955,6 +2955,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
|
|||||||
file_menu = memnew(MenuButton);
|
file_menu = memnew(MenuButton);
|
||||||
menu_hb->add_child(file_menu);
|
menu_hb->add_child(file_menu);
|
||||||
file_menu->set_text(TTR("File"));
|
file_menu->set_text(TTR("File"));
|
||||||
|
file_menu->get_popup()->set_hide_on_window_lose_focus(true);
|
||||||
file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/new", TTR("New")), FILE_NEW);
|
file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/new", TTR("New")), FILE_NEW);
|
||||||
file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/open", TTR("Open")), FILE_OPEN);
|
file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/open", TTR("Open")), FILE_OPEN);
|
||||||
file_menu->get_popup()->add_submenu_item(TTR("Open Recent"), "RecentScripts", FILE_OPEN_RECENT);
|
file_menu->get_popup()->add_submenu_item(TTR("Open Recent"), "RecentScripts", FILE_OPEN_RECENT);
|
||||||
@ -3004,6 +3005,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
|
|||||||
script_search_menu = memnew(MenuButton);
|
script_search_menu = memnew(MenuButton);
|
||||||
menu_hb->add_child(script_search_menu);
|
menu_hb->add_child(script_search_menu);
|
||||||
script_search_menu->set_text(TTR("Search"));
|
script_search_menu->set_text(TTR("Search"));
|
||||||
|
script_search_menu->get_popup()->set_hide_on_window_lose_focus(true);
|
||||||
script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find", TTR("Find..."), KEY_MASK_CMD | KEY_F), HELP_SEARCH_FIND);
|
script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find", TTR("Find..."), KEY_MASK_CMD | KEY_F), HELP_SEARCH_FIND);
|
||||||
script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_next", TTR("Find Next"), KEY_F3), HELP_SEARCH_FIND_NEXT);
|
script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_next", TTR("Find Next"), KEY_F3), HELP_SEARCH_FIND_NEXT);
|
||||||
script_search_menu->get_popup()->connect("id_pressed", this, "_menu_option");
|
script_search_menu->get_popup()->connect("id_pressed", this, "_menu_option");
|
||||||
@ -3012,6 +3014,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
|
|||||||
debug_menu = memnew(MenuButton);
|
debug_menu = memnew(MenuButton);
|
||||||
menu_hb->add_child(debug_menu);
|
menu_hb->add_child(debug_menu);
|
||||||
debug_menu->set_text(TTR("Debug"));
|
debug_menu->set_text(TTR("Debug"));
|
||||||
|
debug_menu->get_popup()->set_hide_on_window_lose_focus(true);
|
||||||
debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("debugger/step_over", TTR("Step Over"), KEY_F10), DEBUG_NEXT);
|
debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("debugger/step_over", TTR("Step Over"), KEY_F10), DEBUG_NEXT);
|
||||||
debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("debugger/step_into", TTR("Step Into"), KEY_F11), DEBUG_STEP);
|
debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("debugger/step_into", TTR("Step Into"), KEY_F11), DEBUG_STEP);
|
||||||
debug_menu->get_popup()->add_separator();
|
debug_menu->get_popup()->add_separator();
|
||||||
|
@ -967,7 +967,6 @@ void ScriptTextEditor::_edit_option(int p_op) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case HELP_CONTEXTUAL: {
|
case HELP_CONTEXTUAL: {
|
||||||
|
|
||||||
String text = tx->get_selection_text();
|
String text = tx->get_selection_text();
|
||||||
@ -977,6 +976,15 @@ void ScriptTextEditor::_edit_option(int p_op) {
|
|||||||
emit_signal("request_help_search", text);
|
emit_signal("request_help_search", text);
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
case LOOKUP_SYMBOL: {
|
||||||
|
|
||||||
|
String text = tx->get_word_under_cursor();
|
||||||
|
if (text == "")
|
||||||
|
text = tx->get_selection_text();
|
||||||
|
if (text != "") {
|
||||||
|
_lookup_symbol(text, tx->cursor_get_line(), tx->cursor_get_column());
|
||||||
|
}
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1182,19 +1190,13 @@ void ScriptTextEditor::_text_edit_gui_input(const Ref<InputEvent> &ev) {
|
|||||||
|
|
||||||
if (mb.is_valid()) {
|
if (mb.is_valid()) {
|
||||||
|
|
||||||
if (mb->get_button_index() == BUTTON_RIGHT) {
|
if (mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed()) {
|
||||||
|
|
||||||
int col, row;
|
int col, row;
|
||||||
TextEdit *tx = code_editor->get_text_edit();
|
TextEdit *tx = code_editor->get_text_edit();
|
||||||
tx->_get_mouse_pos(mb->get_global_position() - tx->get_global_position(), row, col);
|
tx->_get_mouse_pos(mb->get_global_position() - tx->get_global_position(), row, col);
|
||||||
Vector2 mpos = mb->get_global_position() - tx->get_global_position();
|
Vector2 mpos = mb->get_global_position() - tx->get_global_position();
|
||||||
|
|
||||||
tx->set_right_click_moves_caret(EditorSettings::get_singleton()->get("text_editor/cursor/right_click_moves_caret"));
|
tx->set_right_click_moves_caret(EditorSettings::get_singleton()->get("text_editor/cursor/right_click_moves_caret"));
|
||||||
bool has_color = (tx->get_word_at_pos(mpos) == "Color");
|
|
||||||
int fold_state = 0;
|
|
||||||
bool can_fold = tx->can_fold(row);
|
|
||||||
bool is_folded = tx->is_folded(row);
|
|
||||||
|
|
||||||
if (tx->is_right_click_moving_caret()) {
|
if (tx->is_right_click_moving_caret()) {
|
||||||
if (tx->is_selection_active()) {
|
if (tx->is_selection_active()) {
|
||||||
|
|
||||||
@ -1214,7 +1216,32 @@ void ScriptTextEditor::_text_edit_gui_input(const Ref<InputEvent> &ev) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mb->is_pressed()) {
|
String word_at_mouse = tx->get_word_at_pos(mpos);
|
||||||
|
if (word_at_mouse == "")
|
||||||
|
word_at_mouse = tx->get_word_under_cursor();
|
||||||
|
if (word_at_mouse == "")
|
||||||
|
word_at_mouse = tx->get_selection_text();
|
||||||
|
|
||||||
|
bool has_color = (word_at_mouse == "Color");
|
||||||
|
int fold_state = 0;
|
||||||
|
bool foldable = tx->can_fold(row) || tx->is_folded(row);
|
||||||
|
bool open_docs = false;
|
||||||
|
bool goto_definition = false;
|
||||||
|
|
||||||
|
if (word_at_mouse.is_resource_file()) {
|
||||||
|
open_docs = true;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
Node *base = get_tree()->get_edited_scene_root();
|
||||||
|
if (base) {
|
||||||
|
base = _find_node_for_script(base, base, script);
|
||||||
|
}
|
||||||
|
ScriptLanguage::LookupResult result;
|
||||||
|
if (script->get_language()->lookup_code(code_editor->get_text_edit()->get_text_for_lookup_completion(), word_at_mouse, script->get_path().get_base_dir(), base, result) == OK) {
|
||||||
|
open_docs = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (has_color) {
|
if (has_color) {
|
||||||
String line = tx->get_line(row);
|
String line = tx->get_line(row);
|
||||||
color_line = row;
|
color_line = row;
|
||||||
@ -1244,8 +1271,7 @@ void ScriptTextEditor::_text_edit_gui_input(const Ref<InputEvent> &ev) {
|
|||||||
has_color = false;
|
has_color = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_make_context_menu(tx->is_selection_active(), has_color, can_fold, is_folded);
|
_make_context_menu(tx->is_selection_active(), has_color, foldable, open_docs, goto_definition);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1264,7 +1290,7 @@ void ScriptTextEditor::_color_changed(const Color &p_color) {
|
|||||||
code_editor->get_text_edit()->set_line(color_line, new_line);
|
code_editor->get_text_edit()->set_line(color_line, new_line);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptTextEditor::_make_context_menu(bool p_selection, bool p_color, bool p_can_fold, bool p_is_folded) {
|
void ScriptTextEditor::_make_context_menu(bool p_selection, bool p_color, bool p_foldable, bool p_open_docs, bool p_goto_definition) {
|
||||||
|
|
||||||
context_menu->clear();
|
context_menu->clear();
|
||||||
if (p_selection) {
|
if (p_selection) {
|
||||||
@ -1287,13 +1313,17 @@ void ScriptTextEditor::_make_context_menu(bool p_selection, bool p_color, bool p
|
|||||||
context_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/convert_to_uppercase"), EDIT_TO_UPPERCASE);
|
context_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/convert_to_uppercase"), EDIT_TO_UPPERCASE);
|
||||||
context_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/convert_to_lowercase"), EDIT_TO_LOWERCASE);
|
context_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/convert_to_lowercase"), EDIT_TO_LOWERCASE);
|
||||||
}
|
}
|
||||||
if (p_can_fold || p_is_folded)
|
if (p_foldable)
|
||||||
context_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/toggle_fold_line"), EDIT_TOGGLE_FOLD_LINE);
|
context_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/toggle_fold_line"), EDIT_TOGGLE_FOLD_LINE);
|
||||||
|
|
||||||
if (p_color) {
|
if (p_color || p_open_docs || p_goto_definition) {
|
||||||
context_menu->add_separator();
|
context_menu->add_separator();
|
||||||
|
if (p_open_docs)
|
||||||
|
context_menu->add_item(TTR("Lookup Symbol"), LOOKUP_SYMBOL);
|
||||||
|
if (p_color)
|
||||||
context_menu->add_item(TTR("Pick Color"), EDIT_PICK_COLOR);
|
context_menu->add_item(TTR("Pick Color"), EDIT_PICK_COLOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
context_menu->set_position(get_global_transform().xform(get_local_mouse_position()));
|
context_menu->set_position(get_global_transform().xform(get_local_mouse_position()));
|
||||||
context_menu->set_size(Vector2(1, 1));
|
context_menu->set_size(Vector2(1, 1));
|
||||||
context_menu->popup();
|
context_menu->popup();
|
||||||
@ -1327,6 +1357,7 @@ ScriptTextEditor::ScriptTextEditor() {
|
|||||||
context_menu = memnew(PopupMenu);
|
context_menu = memnew(PopupMenu);
|
||||||
add_child(context_menu);
|
add_child(context_menu);
|
||||||
context_menu->connect("id_pressed", this, "_edit_option");
|
context_menu->connect("id_pressed", this, "_edit_option");
|
||||||
|
context_menu->set_hide_on_window_lose_focus(true);
|
||||||
|
|
||||||
color_panel = memnew(PopupPanel);
|
color_panel = memnew(PopupPanel);
|
||||||
add_child(color_panel);
|
add_child(color_panel);
|
||||||
@ -1338,6 +1369,7 @@ ScriptTextEditor::ScriptTextEditor() {
|
|||||||
|
|
||||||
edit_menu = memnew(MenuButton);
|
edit_menu = memnew(MenuButton);
|
||||||
edit_menu->set_text(TTR("Edit"));
|
edit_menu->set_text(TTR("Edit"));
|
||||||
|
edit_menu->get_popup()->set_hide_on_window_lose_focus(true);
|
||||||
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/undo"), EDIT_UNDO);
|
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/undo"), EDIT_UNDO);
|
||||||
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/redo"), EDIT_REDO);
|
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/redo"), EDIT_REDO);
|
||||||
edit_menu->get_popup()->add_separator();
|
edit_menu->get_popup()->add_separator();
|
||||||
@ -1391,6 +1423,7 @@ ScriptTextEditor::ScriptTextEditor() {
|
|||||||
search_menu = memnew(MenuButton);
|
search_menu = memnew(MenuButton);
|
||||||
edit_hb->add_child(search_menu);
|
edit_hb->add_child(search_menu);
|
||||||
search_menu->set_text(TTR("Search"));
|
search_menu->set_text(TTR("Search"));
|
||||||
|
search_menu->get_popup()->set_hide_on_window_lose_focus(true);
|
||||||
search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find"), SEARCH_FIND);
|
search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find"), SEARCH_FIND);
|
||||||
search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find_next"), SEARCH_FIND_NEXT);
|
search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find_next"), SEARCH_FIND_NEXT);
|
||||||
search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find_previous"), SEARCH_FIND_PREV);
|
search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find_previous"), SEARCH_FIND_PREV);
|
||||||
|
@ -112,6 +112,7 @@ class ScriptTextEditor : public ScriptEditorBase {
|
|||||||
DEBUG_GOTO_NEXT_BREAKPOINT,
|
DEBUG_GOTO_NEXT_BREAKPOINT,
|
||||||
DEBUG_GOTO_PREV_BREAKPOINT,
|
DEBUG_GOTO_PREV_BREAKPOINT,
|
||||||
HELP_CONTEXTUAL,
|
HELP_CONTEXTUAL,
|
||||||
|
LOOKUP_SYMBOL,
|
||||||
};
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -131,7 +132,7 @@ protected:
|
|||||||
void _change_syntax_highlighter(int p_idx);
|
void _change_syntax_highlighter(int p_idx);
|
||||||
|
|
||||||
void _edit_option(int p_op);
|
void _edit_option(int p_op);
|
||||||
void _make_context_menu(bool p_selection, bool p_color, bool p_can_fold, bool p_is_folded);
|
void _make_context_menu(bool p_selection, bool p_color, bool p_foldable, bool p_open_docs, bool p_goto_definition);
|
||||||
void _text_edit_gui_input(const Ref<InputEvent> &ev);
|
void _text_edit_gui_input(const Ref<InputEvent> &ev);
|
||||||
void _color_changed(const Color &p_color);
|
void _color_changed(const Color &p_color);
|
||||||
|
|
||||||
|
@ -465,7 +465,7 @@ void ShaderEditor::_text_edit_gui_input(const Ref<InputEvent> &ev) {
|
|||||||
|
|
||||||
if (mb.is_valid()) {
|
if (mb.is_valid()) {
|
||||||
|
|
||||||
if (mb->get_button_index() == BUTTON_RIGHT) {
|
if (mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed()) {
|
||||||
|
|
||||||
int col, row;
|
int col, row;
|
||||||
TextEdit *tx = shader_editor->get_text_edit();
|
TextEdit *tx = shader_editor->get_text_edit();
|
||||||
@ -491,12 +491,9 @@ void ShaderEditor::_text_edit_gui_input(const Ref<InputEvent> &ev) {
|
|||||||
tx->cursor_set_column(col);
|
tx->cursor_set_column(col);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mb->is_pressed()) {
|
|
||||||
_make_context_menu(tx->is_selection_active());
|
_make_context_menu(tx->is_selection_active());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShaderEditor::_make_context_menu(bool p_selection) {
|
void ShaderEditor::_make_context_menu(bool p_selection) {
|
||||||
@ -546,6 +543,7 @@ ShaderEditor::ShaderEditor(EditorNode *p_node) {
|
|||||||
context_menu = memnew(PopupMenu);
|
context_menu = memnew(PopupMenu);
|
||||||
add_child(context_menu);
|
add_child(context_menu);
|
||||||
context_menu->connect("id_pressed", this, "_menu_option");
|
context_menu->connect("id_pressed", this, "_menu_option");
|
||||||
|
context_menu->set_hide_on_window_lose_focus(true);
|
||||||
|
|
||||||
VBoxContainer *main_container = memnew(VBoxContainer);
|
VBoxContainer *main_container = memnew(VBoxContainer);
|
||||||
HBoxContainer *hbc = memnew(HBoxContainer);
|
HBoxContainer *hbc = memnew(HBoxContainer);
|
||||||
@ -554,6 +552,7 @@ ShaderEditor::ShaderEditor(EditorNode *p_node) {
|
|||||||
//edit_menu->set_position(Point2(5, -1));
|
//edit_menu->set_position(Point2(5, -1));
|
||||||
edit_menu->set_text(TTR("Edit"));
|
edit_menu->set_text(TTR("Edit"));
|
||||||
|
|
||||||
|
edit_menu->get_popup()->set_hide_on_window_lose_focus(true);
|
||||||
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/undo"), EDIT_UNDO);
|
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/undo"), EDIT_UNDO);
|
||||||
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/redo"), EDIT_REDO);
|
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/redo"), EDIT_REDO);
|
||||||
edit_menu->get_popup()->add_separator();
|
edit_menu->get_popup()->add_separator();
|
||||||
@ -578,7 +577,7 @@ ShaderEditor::ShaderEditor(EditorNode *p_node) {
|
|||||||
search_menu = memnew(MenuButton);
|
search_menu = memnew(MenuButton);
|
||||||
//search_menu->set_position(Point2(38, -1));
|
//search_menu->set_position(Point2(38, -1));
|
||||||
search_menu->set_text(TTR("Search"));
|
search_menu->set_text(TTR("Search"));
|
||||||
|
search_menu->get_popup()->set_hide_on_window_lose_focus(true);
|
||||||
search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find"), SEARCH_FIND);
|
search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find"), SEARCH_FIND);
|
||||||
search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find_next"), SEARCH_FIND_NEXT);
|
search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find_next"), SEARCH_FIND_NEXT);
|
||||||
search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find_previous"), SEARCH_FIND_PREV);
|
search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find_previous"), SEARCH_FIND_PREV);
|
||||||
|
@ -1984,6 +1984,8 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) {
|
|||||||
|
|
||||||
if (selection.size() == 1) {
|
if (selection.size() == 1) {
|
||||||
|
|
||||||
|
Node *selected = selection[0];
|
||||||
|
|
||||||
subresources.clear();
|
subresources.clear();
|
||||||
menu_subresources->clear();
|
menu_subresources->clear();
|
||||||
menu_subresources->set_size(Size2(1, 1));
|
menu_subresources->set_size(Size2(1, 1));
|
||||||
@ -1994,18 +1996,23 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) {
|
|||||||
menu->add_icon_shortcut(get_icon("Add", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/add_child_node"), TOOL_NEW);
|
menu->add_icon_shortcut(get_icon("Add", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/add_child_node"), TOOL_NEW);
|
||||||
menu->add_icon_shortcut(get_icon("Instance", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/instance_scene"), TOOL_INSTANCE);
|
menu->add_icon_shortcut(get_icon("Instance", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/instance_scene"), TOOL_INSTANCE);
|
||||||
menu->add_separator();
|
menu->add_separator();
|
||||||
|
|
||||||
menu->add_icon_shortcut(get_icon("ScriptCreate", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/attach_script"), TOOL_ATTACH_SCRIPT);
|
menu->add_icon_shortcut(get_icon("ScriptCreate", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/attach_script"), TOOL_ATTACH_SCRIPT);
|
||||||
|
Ref<Script> existing = selected->get_script();
|
||||||
|
if (existing.is_valid()) {
|
||||||
menu->add_icon_shortcut(get_icon("ScriptRemove", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/clear_script"), TOOL_CLEAR_SCRIPT);
|
menu->add_icon_shortcut(get_icon("ScriptRemove", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/clear_script"), TOOL_CLEAR_SCRIPT);
|
||||||
|
}
|
||||||
menu->add_separator();
|
menu->add_separator();
|
||||||
menu->add_icon_shortcut(get_icon("Rename", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/rename"), TOOL_RENAME);
|
menu->add_icon_shortcut(get_icon("Rename", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/rename"), TOOL_RENAME);
|
||||||
}
|
}
|
||||||
menu->add_icon_shortcut(get_icon("Reload", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/change_node_type"), TOOL_REPLACE);
|
menu->add_icon_shortcut(get_icon("Reload", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/change_node_type"), TOOL_REPLACE);
|
||||||
|
if (scene_tree->get_selected() != edited_scene) {
|
||||||
menu->add_separator();
|
menu->add_separator();
|
||||||
menu->add_icon_shortcut(get_icon("MoveUp", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/move_up"), TOOL_MOVE_UP);
|
menu->add_icon_shortcut(get_icon("MoveUp", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/move_up"), TOOL_MOVE_UP);
|
||||||
menu->add_icon_shortcut(get_icon("MoveDown", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/move_down"), TOOL_MOVE_DOWN);
|
menu->add_icon_shortcut(get_icon("MoveDown", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/move_down"), TOOL_MOVE_DOWN);
|
||||||
menu->add_icon_shortcut(get_icon("Duplicate", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/duplicate"), TOOL_DUPLICATE);
|
menu->add_icon_shortcut(get_icon("Duplicate", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/duplicate"), TOOL_DUPLICATE);
|
||||||
menu->add_icon_shortcut(get_icon("Reparent", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/reparent"), TOOL_REPARENT);
|
menu->add_icon_shortcut(get_icon("Reparent", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/reparent"), TOOL_REPARENT);
|
||||||
|
}
|
||||||
if (selection.size() == 1) {
|
if (selection.size() == 1) {
|
||||||
|
|
||||||
menu->add_icon_shortcut(get_icon("NewRoot", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/make_root"), TOOL_MAKE_ROOT);
|
menu->add_icon_shortcut(get_icon("NewRoot", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/make_root"), TOOL_MAKE_ROOT);
|
||||||
@ -2324,6 +2331,7 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel
|
|||||||
menu = memnew(PopupMenu);
|
menu = memnew(PopupMenu);
|
||||||
add_child(menu);
|
add_child(menu);
|
||||||
menu->connect("id_pressed", this, "_tool_selected");
|
menu->connect("id_pressed", this, "_tool_selected");
|
||||||
|
menu->set_hide_on_window_lose_focus(true);
|
||||||
menu_subresources = memnew(PopupMenu);
|
menu_subresources = memnew(PopupMenu);
|
||||||
menu_subresources->set_name("Sub-Resources");
|
menu_subresources->set_name("Sub-Resources");
|
||||||
menu_subresources->connect("id_pressed", this, "_tool_selected");
|
menu_subresources->connect("id_pressed", this, "_tool_selected");
|
||||||
|
@ -530,6 +530,11 @@ void PopupMenu::_notification(int p_what) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
|
case MainLoop::NOTIFICATION_WM_FOCUS_OUT: {
|
||||||
|
|
||||||
|
if (hide_on_window_lose_focus)
|
||||||
|
hide();
|
||||||
|
} break;
|
||||||
case NOTIFICATION_MOUSE_ENTER: {
|
case NOTIFICATION_MOUSE_ENTER: {
|
||||||
|
|
||||||
grab_focus();
|
grab_focus();
|
||||||
@ -1249,6 +1254,16 @@ float PopupMenu::get_submenu_popup_delay() const {
|
|||||||
return submenu_timer->get_wait_time();
|
return submenu_timer->get_wait_time();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PopupMenu::set_hide_on_window_lose_focus(bool p_enabled) {
|
||||||
|
|
||||||
|
hide_on_window_lose_focus = p_enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PopupMenu::is_hide_on_window_lose_focus() const {
|
||||||
|
|
||||||
|
return hide_on_window_lose_focus;
|
||||||
|
}
|
||||||
|
|
||||||
String PopupMenu::get_tooltip(const Point2 &p_pos) const {
|
String PopupMenu::get_tooltip(const Point2 &p_pos) const {
|
||||||
|
|
||||||
int over = _get_mouse_over(p_pos);
|
int over = _get_mouse_over(p_pos);
|
||||||
@ -1353,6 +1368,10 @@ void PopupMenu::_bind_methods() {
|
|||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("set_submenu_popup_delay", "seconds"), &PopupMenu::set_submenu_popup_delay);
|
ClassDB::bind_method(D_METHOD("set_submenu_popup_delay", "seconds"), &PopupMenu::set_submenu_popup_delay);
|
||||||
ClassDB::bind_method(D_METHOD("get_submenu_popup_delay"), &PopupMenu::get_submenu_popup_delay);
|
ClassDB::bind_method(D_METHOD("get_submenu_popup_delay"), &PopupMenu::get_submenu_popup_delay);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("set_hide_on_window_lose_focus", "enable"), &PopupMenu::set_hide_on_window_lose_focus);
|
||||||
|
ClassDB::bind_method(D_METHOD("is_hide_on_window_lose_focus"), &PopupMenu::is_hide_on_window_lose_focus);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("_submenu_timeout"), &PopupMenu::_submenu_timeout);
|
ClassDB::bind_method(D_METHOD("_submenu_timeout"), &PopupMenu::_submenu_timeout);
|
||||||
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "items", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_items", "_get_items");
|
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "items", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_items", "_get_items");
|
||||||
|
@ -101,6 +101,7 @@ class PopupMenu : public Popup {
|
|||||||
bool hide_on_item_selection;
|
bool hide_on_item_selection;
|
||||||
bool hide_on_checkable_item_selection;
|
bool hide_on_checkable_item_selection;
|
||||||
bool hide_on_multistate_item_selection;
|
bool hide_on_multistate_item_selection;
|
||||||
|
bool hide_on_window_lose_focus;
|
||||||
Vector2 moved;
|
Vector2 moved;
|
||||||
|
|
||||||
Array _get_items() const;
|
Array _get_items() const;
|
||||||
@ -207,6 +208,9 @@ public:
|
|||||||
|
|
||||||
virtual void popup(const Rect2 &p_bounds = Rect2());
|
virtual void popup(const Rect2 &p_bounds = Rect2());
|
||||||
|
|
||||||
|
void set_hide_on_window_lose_focus(bool p_enabled);
|
||||||
|
bool is_hide_on_window_lose_focus() const;
|
||||||
|
|
||||||
PopupMenu();
|
PopupMenu();
|
||||||
~PopupMenu();
|
~PopupMenu();
|
||||||
};
|
};
|
||||||
|
@ -189,7 +189,7 @@ void Tabs::_gui_input(const Ref<InputEvent> &p_event) {
|
|||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) {
|
if (mb->is_pressed() && (mb->get_button_index() == BUTTON_LEFT || (select_with_rmb && mb->get_button_index() == BUTTON_RIGHT))) {
|
||||||
|
|
||||||
// clicks
|
// clicks
|
||||||
Point2 pos(mb->get_position().x, mb->get_position().y);
|
Point2 pos(mb->get_position().x, mb->get_position().y);
|
||||||
@ -920,6 +920,14 @@ int Tabs::get_tabs_rearrange_group() const {
|
|||||||
return tabs_rearrange_group;
|
return tabs_rearrange_group;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Tabs::set_select_with_rmb(bool p_enabled) {
|
||||||
|
select_with_rmb = p_enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Tabs::get_select_with_rmb() const {
|
||||||
|
return select_with_rmb;
|
||||||
|
}
|
||||||
|
|
||||||
void Tabs::_bind_methods() {
|
void Tabs::_bind_methods() {
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("_gui_input"), &Tabs::_gui_input);
|
ClassDB::bind_method(D_METHOD("_gui_input"), &Tabs::_gui_input);
|
||||||
@ -950,6 +958,9 @@ void Tabs::_bind_methods() {
|
|||||||
ClassDB::bind_method(D_METHOD("set_tabs_rearrange_group", "group_id"), &Tabs::set_tabs_rearrange_group);
|
ClassDB::bind_method(D_METHOD("set_tabs_rearrange_group", "group_id"), &Tabs::set_tabs_rearrange_group);
|
||||||
ClassDB::bind_method(D_METHOD("get_tabs_rearrange_group"), &Tabs::get_tabs_rearrange_group);
|
ClassDB::bind_method(D_METHOD("get_tabs_rearrange_group"), &Tabs::get_tabs_rearrange_group);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("set_select_with_rmb", "enabled"), &Tabs::set_select_with_rmb);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_select_with_rmb"), &Tabs::get_select_with_rmb);
|
||||||
|
|
||||||
ADD_SIGNAL(MethodInfo("tab_changed", PropertyInfo(Variant::INT, "tab")));
|
ADD_SIGNAL(MethodInfo("tab_changed", PropertyInfo(Variant::INT, "tab")));
|
||||||
ADD_SIGNAL(MethodInfo("right_button_pressed", PropertyInfo(Variant::INT, "tab")));
|
ADD_SIGNAL(MethodInfo("right_button_pressed", PropertyInfo(Variant::INT, "tab")));
|
||||||
ADD_SIGNAL(MethodInfo("tab_close", PropertyInfo(Variant::INT, "tab")));
|
ADD_SIGNAL(MethodInfo("tab_close", PropertyInfo(Variant::INT, "tab")));
|
||||||
@ -988,6 +999,8 @@ Tabs::Tabs() {
|
|||||||
offset = 0;
|
offset = 0;
|
||||||
max_drawn_tab = 0;
|
max_drawn_tab = 0;
|
||||||
|
|
||||||
|
select_with_rmb = false;
|
||||||
|
|
||||||
min_width = 0;
|
min_width = 0;
|
||||||
scrolling_enabled = true;
|
scrolling_enabled = true;
|
||||||
buttons_visible = false;
|
buttons_visible = false;
|
||||||
|
@ -83,6 +83,8 @@ private:
|
|||||||
int rb_hover;
|
int rb_hover;
|
||||||
bool rb_pressing;
|
bool rb_pressing;
|
||||||
|
|
||||||
|
bool select_with_rmb;
|
||||||
|
|
||||||
int cb_hover;
|
int cb_hover;
|
||||||
bool cb_pressing;
|
bool cb_pressing;
|
||||||
CloseButtonDisplayPolicy cb_displaypolicy;
|
CloseButtonDisplayPolicy cb_displaypolicy;
|
||||||
@ -150,6 +152,9 @@ public:
|
|||||||
void set_tabs_rearrange_group(int p_group_id);
|
void set_tabs_rearrange_group(int p_group_id);
|
||||||
int get_tabs_rearrange_group() const;
|
int get_tabs_rearrange_group() const;
|
||||||
|
|
||||||
|
void set_select_with_rmb(bool p_enabled);
|
||||||
|
bool get_select_with_rmb() const;
|
||||||
|
|
||||||
void ensure_tab_visible(int p_idx);
|
void ensure_tab_visible(int p_idx);
|
||||||
void set_min_width(int p_width);
|
void set_min_width(int p_width);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user