mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 01:27:43 +00:00
TextEditor: Add Alt shortcuts to menu actions
This commit is contained in:
parent
2bac9eb79d
commit
f718f04b14
1 changed files with 33 additions and 33 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
* Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -137,7 +137,7 @@ TextEditorWidget::TextEditorWidget()
|
||||||
};
|
};
|
||||||
m_wrap_around_checkbox->set_checked(true);
|
m_wrap_around_checkbox->set_checked(true);
|
||||||
|
|
||||||
m_find_next_action = GUI::Action::create("Find next", { Mod_Ctrl, Key_G }, Gfx::Bitmap::load_from_file("/res/icons/16x16/find-next.png"), [&](auto&) {
|
m_find_next_action = GUI::Action::create("Find &Next", { Mod_Ctrl, Key_G }, Gfx::Bitmap::load_from_file("/res/icons/16x16/find-next.png"), [&](auto&) {
|
||||||
auto needle = m_find_textbox->text();
|
auto needle = m_find_textbox->text();
|
||||||
if (needle.is_empty())
|
if (needle.is_empty())
|
||||||
return;
|
return;
|
||||||
|
@ -156,7 +156,7 @@ TextEditorWidget::TextEditorWidget()
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
m_find_previous_action = GUI::Action::create("Find previous", { Mod_Ctrl | Mod_Shift, Key_G }, Gfx::Bitmap::load_from_file("/res/icons/16x16/find-previous.png"), [&](auto&) {
|
m_find_previous_action = GUI::Action::create("Find &Previous", { Mod_Ctrl | Mod_Shift, Key_G }, Gfx::Bitmap::load_from_file("/res/icons/16x16/find-previous.png"), [&](auto&) {
|
||||||
auto needle = m_find_textbox->text();
|
auto needle = m_find_textbox->text();
|
||||||
if (needle.is_empty())
|
if (needle.is_empty())
|
||||||
return;
|
return;
|
||||||
|
@ -179,7 +179,7 @@ TextEditorWidget::TextEditorWidget()
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
m_replace_action = GUI::Action::create("Replace", { Mod_Ctrl, Key_F1 }, [&](auto&) {
|
m_replace_action = GUI::Action::create("&Replace", { Mod_Ctrl, Key_F1 }, [&](auto&) {
|
||||||
auto needle = m_find_textbox->text();
|
auto needle = m_find_textbox->text();
|
||||||
auto substitute = m_replace_textbox->text();
|
auto substitute = m_replace_textbox->text();
|
||||||
if (needle.is_empty())
|
if (needle.is_empty())
|
||||||
|
@ -199,7 +199,7 @@ TextEditorWidget::TextEditorWidget()
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
m_replace_all_action = GUI::Action::create("Replace all", { Mod_Ctrl, Key_F2 }, [&](auto&) {
|
m_replace_all_action = GUI::Action::create("Replace &All", { Mod_Ctrl, Key_F2 }, [&](auto&) {
|
||||||
auto needle = m_find_textbox->text();
|
auto needle = m_find_textbox->text();
|
||||||
auto substitute = m_replace_textbox->text();
|
auto substitute = m_replace_textbox->text();
|
||||||
if (needle.is_empty())
|
if (needle.is_empty())
|
||||||
|
@ -247,7 +247,7 @@ TextEditorWidget::TextEditorWidget()
|
||||||
m_editor->set_focus(true);
|
m_editor->set_focus(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
m_vim_emulation_setting_action = GUI::Action::create_checkable("Vim emulation", { Mod_Ctrl | Mod_Shift | Mod_Alt, Key_V }, [&](auto& action) {
|
m_vim_emulation_setting_action = GUI::Action::create_checkable("&Vim Emulation", { Mod_Ctrl | Mod_Shift | Mod_Alt, Key_V }, [&](auto& action) {
|
||||||
if (action.is_checked())
|
if (action.is_checked())
|
||||||
m_editor->set_editing_engine(make<GUI::VimEditingEngine>());
|
m_editor->set_editing_engine(make<GUI::VimEditingEngine>());
|
||||||
else
|
else
|
||||||
|
@ -255,7 +255,7 @@ TextEditorWidget::TextEditorWidget()
|
||||||
});
|
});
|
||||||
m_vim_emulation_setting_action->set_checked(false);
|
m_vim_emulation_setting_action->set_checked(false);
|
||||||
|
|
||||||
m_find_replace_action = GUI::Action::create("Find/Replace...", { Mod_Ctrl, Key_F }, Gfx::Bitmap::load_from_file("/res/icons/16x16/find.png"), [this](auto&) {
|
m_find_replace_action = GUI::Action::create("&Find/Replace...", { Mod_Ctrl, Key_F }, Gfx::Bitmap::load_from_file("/res/icons/16x16/find.png"), [this](auto&) {
|
||||||
m_find_replace_widget->set_visible(true);
|
m_find_replace_widget->set_visible(true);
|
||||||
m_find_widget->set_visible(true);
|
m_find_widget->set_visible(true);
|
||||||
m_replace_widget->set_visible(true);
|
m_replace_widget->set_visible(true);
|
||||||
|
@ -277,7 +277,7 @@ TextEditorWidget::TextEditorWidget()
|
||||||
m_editor->on_cursor_change = [this] { update_statusbar(); };
|
m_editor->on_cursor_change = [this] { update_statusbar(); };
|
||||||
m_editor->on_selection_change = [this] { update_statusbar(); };
|
m_editor->on_selection_change = [this] { update_statusbar(); };
|
||||||
|
|
||||||
m_new_action = GUI::Action::create("New", { Mod_Ctrl, Key_N }, Gfx::Bitmap::load_from_file("/res/icons/16x16/new.png"), [this](const GUI::Action&) {
|
m_new_action = GUI::Action::create("&New", { Mod_Ctrl, Key_N }, Gfx::Bitmap::load_from_file("/res/icons/16x16/new.png"), [this](const GUI::Action&) {
|
||||||
if (m_document_dirty) {
|
if (m_document_dirty) {
|
||||||
auto save_document_first_result = GUI::MessageBox::show(window(), "Save changes to current document first?", "Warning", GUI::MessageBox::Type::Warning, GUI::MessageBox::InputType::YesNoCancel);
|
auto save_document_first_result = GUI::MessageBox::show(window(), "Save changes to current document first?", "Warning", GUI::MessageBox::Type::Warning, GUI::MessageBox::InputType::YesNoCancel);
|
||||||
if (save_document_first_result == GUI::Dialog::ExecResult::ExecYes)
|
if (save_document_first_result == GUI::Dialog::ExecResult::ExecYes)
|
||||||
|
@ -361,7 +361,7 @@ TextEditorWidget::~TextEditorWidget()
|
||||||
|
|
||||||
void TextEditorWidget::initialize_menubar(GUI::MenuBar& menubar)
|
void TextEditorWidget::initialize_menubar(GUI::MenuBar& menubar)
|
||||||
{
|
{
|
||||||
auto& app_menu = menubar.add_menu("File");
|
auto& app_menu = menubar.add_menu("&File");
|
||||||
app_menu.add_action(*m_new_action);
|
app_menu.add_action(*m_new_action);
|
||||||
app_menu.add_action(*m_open_action);
|
app_menu.add_action(*m_open_action);
|
||||||
app_menu.add_action(*m_save_action);
|
app_menu.add_action(*m_save_action);
|
||||||
|
@ -373,7 +373,7 @@ void TextEditorWidget::initialize_menubar(GUI::MenuBar& menubar)
|
||||||
GUI::Application::the()->quit();
|
GUI::Application::the()->quit();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
auto& edit_menu = menubar.add_menu("Edit");
|
auto& edit_menu = menubar.add_menu("&Edit");
|
||||||
edit_menu.add_action(m_editor->undo_action());
|
edit_menu.add_action(m_editor->undo_action());
|
||||||
edit_menu.add_action(m_editor->redo_action());
|
edit_menu.add_action(m_editor->redo_action());
|
||||||
edit_menu.add_separator();
|
edit_menu.add_separator();
|
||||||
|
@ -391,18 +391,18 @@ void TextEditorWidget::initialize_menubar(GUI::MenuBar& menubar)
|
||||||
edit_menu.add_action(*m_replace_all_action);
|
edit_menu.add_action(*m_replace_all_action);
|
||||||
|
|
||||||
m_no_preview_action = GUI::Action::create_checkable(
|
m_no_preview_action = GUI::Action::create_checkable(
|
||||||
"No preview", [this](auto&) {
|
"&No Preview", [this](auto&) {
|
||||||
set_preview_mode(PreviewMode::None);
|
set_preview_mode(PreviewMode::None);
|
||||||
});
|
});
|
||||||
|
|
||||||
m_markdown_preview_action = GUI::Action::create_checkable(
|
m_markdown_preview_action = GUI::Action::create_checkable(
|
||||||
"Markdown preview", [this](auto&) {
|
"&Markdown Preview", [this](auto&) {
|
||||||
set_preview_mode(PreviewMode::Markdown);
|
set_preview_mode(PreviewMode::Markdown);
|
||||||
},
|
},
|
||||||
this);
|
this);
|
||||||
|
|
||||||
m_html_preview_action = GUI::Action::create_checkable(
|
m_html_preview_action = GUI::Action::create_checkable(
|
||||||
"HTML preview", [this](auto&) {
|
"&HTML Preview", [this](auto&) {
|
||||||
set_preview_mode(PreviewMode::HTML);
|
set_preview_mode(PreviewMode::HTML);
|
||||||
},
|
},
|
||||||
this);
|
this);
|
||||||
|
@ -412,7 +412,7 @@ void TextEditorWidget::initialize_menubar(GUI::MenuBar& menubar)
|
||||||
m_preview_actions.add_action(*m_html_preview_action);
|
m_preview_actions.add_action(*m_html_preview_action);
|
||||||
m_preview_actions.set_exclusive(true);
|
m_preview_actions.set_exclusive(true);
|
||||||
|
|
||||||
m_layout_toolbar_action = GUI::Action::create_checkable("Toolbar", [&](auto& action) {
|
m_layout_toolbar_action = GUI::Action::create_checkable("&Toolbar", [&](auto& action) {
|
||||||
action.is_checked() ? m_toolbar_container->set_visible(true) : m_toolbar_container->set_visible(false);
|
action.is_checked() ? m_toolbar_container->set_visible(true) : m_toolbar_container->set_visible(false);
|
||||||
m_config->write_bool_entry("Layout", "ShowToolbar", action.is_checked());
|
m_config->write_bool_entry("Layout", "ShowToolbar", action.is_checked());
|
||||||
m_config->sync();
|
m_config->sync();
|
||||||
|
@ -421,7 +421,7 @@ void TextEditorWidget::initialize_menubar(GUI::MenuBar& menubar)
|
||||||
m_layout_toolbar_action->set_checked(show_toolbar);
|
m_layout_toolbar_action->set_checked(show_toolbar);
|
||||||
m_toolbar_container->set_visible(show_toolbar);
|
m_toolbar_container->set_visible(show_toolbar);
|
||||||
|
|
||||||
m_layout_statusbar_action = GUI::Action::create_checkable("Status bar", [&](auto& action) {
|
m_layout_statusbar_action = GUI::Action::create_checkable("&Status Bar", [&](auto& action) {
|
||||||
action.is_checked() ? m_statusbar->set_visible(true) : m_statusbar->set_visible(false);
|
action.is_checked() ? m_statusbar->set_visible(true) : m_statusbar->set_visible(false);
|
||||||
m_config->write_bool_entry("Layout", "ShowStatusBar", action.is_checked());
|
m_config->write_bool_entry("Layout", "ShowStatusBar", action.is_checked());
|
||||||
m_config->sync();
|
m_config->sync();
|
||||||
|
@ -439,15 +439,15 @@ void TextEditorWidget::initialize_menubar(GUI::MenuBar& menubar)
|
||||||
m_layout_ruler_action->set_checked(show_ruler);
|
m_layout_ruler_action->set_checked(show_ruler);
|
||||||
m_editor->set_ruler_visible(show_ruler);
|
m_editor->set_ruler_visible(show_ruler);
|
||||||
|
|
||||||
auto& view_menu = menubar.add_menu("View");
|
auto& view_menu = menubar.add_menu("&View");
|
||||||
auto& layout_menu = view_menu.add_submenu("Layout");
|
auto& layout_menu = view_menu.add_submenu("&Layout");
|
||||||
layout_menu.add_action(*m_layout_toolbar_action);
|
layout_menu.add_action(*m_layout_toolbar_action);
|
||||||
layout_menu.add_action(*m_layout_statusbar_action);
|
layout_menu.add_action(*m_layout_statusbar_action);
|
||||||
layout_menu.add_action(*m_layout_ruler_action);
|
layout_menu.add_action(*m_layout_ruler_action);
|
||||||
|
|
||||||
view_menu.add_separator();
|
view_menu.add_separator();
|
||||||
|
|
||||||
view_menu.add_action(GUI::Action::create("Editor font...", Gfx::Bitmap::load_from_file("/res/icons/16x16/app-font-editor.png"),
|
view_menu.add_action(GUI::Action::create("Editor &Font...", Gfx::Bitmap::load_from_file("/res/icons/16x16/app-font-editor.png"),
|
||||||
[&](auto&) {
|
[&](auto&) {
|
||||||
auto picker = GUI::FontPicker::construct(window(), &m_editor->font(), false);
|
auto picker = GUI::FontPicker::construct(window(), &m_editor->font(), false);
|
||||||
if (picker->exec() == GUI::Dialog::ExecOK) {
|
if (picker->exec() == GUI::Dialog::ExecOK) {
|
||||||
|
@ -459,14 +459,14 @@ void TextEditorWidget::initialize_menubar(GUI::MenuBar& menubar)
|
||||||
view_menu.add_separator();
|
view_menu.add_separator();
|
||||||
|
|
||||||
m_wrapping_mode_actions.set_exclusive(true);
|
m_wrapping_mode_actions.set_exclusive(true);
|
||||||
auto& wrapping_mode_menu = view_menu.add_submenu("Wrapping mode");
|
auto& wrapping_mode_menu = view_menu.add_submenu("&Wrapping Mode");
|
||||||
m_no_wrapping_action = GUI::Action::create_checkable("No wrapping", [&](auto&) {
|
m_no_wrapping_action = GUI::Action::create_checkable("&No Wrapping", [&](auto&) {
|
||||||
m_editor->set_wrapping_mode(GUI::TextEditor::WrappingMode::NoWrap);
|
m_editor->set_wrapping_mode(GUI::TextEditor::WrappingMode::NoWrap);
|
||||||
});
|
});
|
||||||
m_wrap_anywhere_action = GUI::Action::create_checkable("Wrap anywhere", [&](auto&) {
|
m_wrap_anywhere_action = GUI::Action::create_checkable("Wrap &Anywhere", [&](auto&) {
|
||||||
m_editor->set_wrapping_mode(GUI::TextEditor::WrappingMode::WrapAnywhere);
|
m_editor->set_wrapping_mode(GUI::TextEditor::WrappingMode::WrapAnywhere);
|
||||||
});
|
});
|
||||||
m_wrap_at_words_action = GUI::Action::create_checkable("Wrap at words", [&](auto&) {
|
m_wrap_at_words_action = GUI::Action::create_checkable("Wrap at &Words", [&](auto&) {
|
||||||
m_editor->set_wrapping_mode(GUI::TextEditor::WrappingMode::WrapAtWords);
|
m_editor->set_wrapping_mode(GUI::TextEditor::WrappingMode::WrapAtWords);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -483,7 +483,7 @@ void TextEditorWidget::initialize_menubar(GUI::MenuBar& menubar)
|
||||||
view_menu.add_separator();
|
view_menu.add_separator();
|
||||||
|
|
||||||
m_soft_tab_width_actions.set_exclusive(true);
|
m_soft_tab_width_actions.set_exclusive(true);
|
||||||
auto& soft_tab_width_menu = view_menu.add_submenu("Tab width");
|
auto& soft_tab_width_menu = view_menu.add_submenu("&Tab Width");
|
||||||
m_soft_tab_1_width_action = GUI::Action::create_checkable("1", [&](auto&) {
|
m_soft_tab_1_width_action = GUI::Action::create_checkable("1", [&](auto&) {
|
||||||
m_editor->set_soft_tab_width(1);
|
m_editor->set_soft_tab_width(1);
|
||||||
});
|
});
|
||||||
|
@ -516,10 +516,10 @@ void TextEditorWidget::initialize_menubar(GUI::MenuBar& menubar)
|
||||||
|
|
||||||
view_menu.add_separator();
|
view_menu.add_separator();
|
||||||
|
|
||||||
m_visualize_trailing_whitespace_action = GUI::Action::create_checkable("Visualize trailing whitespace", [&](auto&) {
|
m_visualize_trailing_whitespace_action = GUI::Action::create_checkable("Visualize &Trailing Whitespace", [&](auto&) {
|
||||||
m_editor->set_visualize_trailing_whitespace(m_visualize_trailing_whitespace_action->is_checked());
|
m_editor->set_visualize_trailing_whitespace(m_visualize_trailing_whitespace_action->is_checked());
|
||||||
});
|
});
|
||||||
m_visualize_leading_whitespace_action = GUI::Action::create_checkable("Visualize leading whitespace", [&](auto&) {
|
m_visualize_leading_whitespace_action = GUI::Action::create_checkable("Visualize &Leading Whitespace", [&](auto&) {
|
||||||
m_editor->set_visualize_leading_whitespace(m_visualize_leading_whitespace_action->is_checked());
|
m_editor->set_visualize_leading_whitespace(m_visualize_leading_whitespace_action->is_checked());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -537,8 +537,8 @@ void TextEditorWidget::initialize_menubar(GUI::MenuBar& menubar)
|
||||||
|
|
||||||
syntax_actions.set_exclusive(true);
|
syntax_actions.set_exclusive(true);
|
||||||
|
|
||||||
auto& syntax_menu = view_menu.add_submenu("Syntax");
|
auto& syntax_menu = view_menu.add_submenu("&Syntax");
|
||||||
m_plain_text_highlight = GUI::Action::create_checkable("Plain text", [&](auto&) {
|
m_plain_text_highlight = GUI::Action::create_checkable("&Plain Text", [&](auto&) {
|
||||||
m_editor->set_syntax_highlighter({});
|
m_editor->set_syntax_highlighter({});
|
||||||
m_editor->update();
|
m_editor->update();
|
||||||
});
|
});
|
||||||
|
@ -546,42 +546,42 @@ void TextEditorWidget::initialize_menubar(GUI::MenuBar& menubar)
|
||||||
syntax_actions.add_action(*m_plain_text_highlight);
|
syntax_actions.add_action(*m_plain_text_highlight);
|
||||||
syntax_menu.add_action(*m_plain_text_highlight);
|
syntax_menu.add_action(*m_plain_text_highlight);
|
||||||
|
|
||||||
m_cpp_highlight = GUI::Action::create_checkable("C++", [&](auto&) {
|
m_cpp_highlight = GUI::Action::create_checkable("&C++", [&](auto&) {
|
||||||
m_editor->set_syntax_highlighter(make<Cpp::SyntaxHighlighter>());
|
m_editor->set_syntax_highlighter(make<Cpp::SyntaxHighlighter>());
|
||||||
m_editor->update();
|
m_editor->update();
|
||||||
});
|
});
|
||||||
syntax_actions.add_action(*m_cpp_highlight);
|
syntax_actions.add_action(*m_cpp_highlight);
|
||||||
syntax_menu.add_action(*m_cpp_highlight);
|
syntax_menu.add_action(*m_cpp_highlight);
|
||||||
|
|
||||||
m_js_highlight = GUI::Action::create_checkable("JavaScript", [&](auto&) {
|
m_js_highlight = GUI::Action::create_checkable("&JavaScript", [&](auto&) {
|
||||||
m_editor->set_syntax_highlighter(make<JS::SyntaxHighlighter>());
|
m_editor->set_syntax_highlighter(make<JS::SyntaxHighlighter>());
|
||||||
m_editor->update();
|
m_editor->update();
|
||||||
});
|
});
|
||||||
syntax_actions.add_action(*m_js_highlight);
|
syntax_actions.add_action(*m_js_highlight);
|
||||||
syntax_menu.add_action(*m_js_highlight);
|
syntax_menu.add_action(*m_js_highlight);
|
||||||
|
|
||||||
m_gml_highlight = GUI::Action::create_checkable("GML", [&](auto&) {
|
m_gml_highlight = GUI::Action::create_checkable("&GML", [&](auto&) {
|
||||||
m_editor->set_syntax_highlighter(make<GUI::GMLSyntaxHighlighter>());
|
m_editor->set_syntax_highlighter(make<GUI::GMLSyntaxHighlighter>());
|
||||||
m_editor->update();
|
m_editor->update();
|
||||||
});
|
});
|
||||||
syntax_actions.add_action(*m_gml_highlight);
|
syntax_actions.add_action(*m_gml_highlight);
|
||||||
syntax_menu.add_action(*m_gml_highlight);
|
syntax_menu.add_action(*m_gml_highlight);
|
||||||
|
|
||||||
m_ini_highlight = GUI::Action::create_checkable("INI File", [&](auto&) {
|
m_ini_highlight = GUI::Action::create_checkable("&INI File", [&](auto&) {
|
||||||
m_editor->set_syntax_highlighter(make<GUI::IniSyntaxHighlighter>());
|
m_editor->set_syntax_highlighter(make<GUI::IniSyntaxHighlighter>());
|
||||||
m_editor->update();
|
m_editor->update();
|
||||||
});
|
});
|
||||||
syntax_actions.add_action(*m_ini_highlight);
|
syntax_actions.add_action(*m_ini_highlight);
|
||||||
syntax_menu.add_action(*m_ini_highlight);
|
syntax_menu.add_action(*m_ini_highlight);
|
||||||
|
|
||||||
m_shell_highlight = GUI::Action::create_checkable("Shell File", [&](auto&) {
|
m_shell_highlight = GUI::Action::create_checkable("&Shell File", [&](auto&) {
|
||||||
m_editor->set_syntax_highlighter(make<Shell::SyntaxHighlighter>());
|
m_editor->set_syntax_highlighter(make<Shell::SyntaxHighlighter>());
|
||||||
m_editor->update();
|
m_editor->update();
|
||||||
});
|
});
|
||||||
syntax_actions.add_action(*m_shell_highlight);
|
syntax_actions.add_action(*m_shell_highlight);
|
||||||
syntax_menu.add_action(*m_shell_highlight);
|
syntax_menu.add_action(*m_shell_highlight);
|
||||||
|
|
||||||
auto& help_menu = menubar.add_menu("Help");
|
auto& help_menu = menubar.add_menu("&Help");
|
||||||
help_menu.add_action(GUI::CommonActions::make_help_action([](auto&) {
|
help_menu.add_action(GUI::CommonActions::make_help_action([](auto&) {
|
||||||
Desktop::Launcher::open(URL::create_with_file_protocol("/usr/share/man/man1/TextEditor.md"), "/bin/Help");
|
Desktop::Launcher::open(URL::create_with_file_protocol("/usr/share/man/man1/TextEditor.md"), "/bin/Help");
|
||||||
}));
|
}));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue