aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/texteditor
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/texteditor')
-rw-r--r--src/plugins/texteditor/CMakeLists.txt1
-rw-r--r--src/plugins/texteditor/jsoneditor.cpp3
-rw-r--r--src/plugins/texteditor/markdowneditor.cpp15
-rw-r--r--src/plugins/texteditor/plaintexteditorfactory.cpp7
-rw-r--r--src/plugins/texteditor/texteditor.cpp511
-rw-r--r--src/plugins/texteditor/texteditor.h19
-rw-r--r--src/plugins/texteditor/texteditor.qbs2
-rw-r--r--src/plugins/texteditor/texteditoractionhandler.cpp671
-rw-r--r--src/plugins/texteditor/texteditoractionhandler.h69
-rw-r--r--src/plugins/texteditor/texteditorplugin.cpp355
10 files changed, 876 insertions, 777 deletions
diff --git a/src/plugins/texteditor/CMakeLists.txt b/src/plugins/texteditor/CMakeLists.txt
index e766ec06a1..978d0de86a 100644
--- a/src/plugins/texteditor/CMakeLists.txt
+++ b/src/plugins/texteditor/CMakeLists.txt
@@ -104,7 +104,6 @@ add_qtc_plugin(TextEditor
texteditor.qrc
texteditor_global.h
texteditortr.h
- texteditoractionhandler.cpp texteditoractionhandler.h
texteditorconstants.cpp texteditorconstants.h
texteditoroverlay.cpp texteditoroverlay.h
texteditorplugin.cpp
diff --git a/src/plugins/texteditor/jsoneditor.cpp b/src/plugins/texteditor/jsoneditor.cpp
index d06f215c68..7081394f9b 100644
--- a/src/plugins/texteditor/jsoneditor.cpp
+++ b/src/plugins/texteditor/jsoneditor.cpp
@@ -6,7 +6,6 @@
#include "autocompleter.h"
#include "textdocument.h"
#include "texteditor.h"
-#include "texteditoractionhandler.h"
#include "texteditortr.h"
#include "textindenter.h"
@@ -164,7 +163,7 @@ public:
setDocumentCreator([] { return new TextDocument(JSON_EDITOR_ID); });
setAutoCompleterCreator([] { return new JsonAutoCompleter; });
setIndenterCreator([](QTextDocument *doc) { return new JsonIndenter(doc); });
- setEditorActionHandlers(TextEditorActionHandler::Format);
+ setOptionalActionMask(OptionalActions::Format);
setUseGenericHighlighter(true);
}
};
diff --git a/src/plugins/texteditor/markdowneditor.cpp b/src/plugins/texteditor/markdowneditor.cpp
index dbfdcda2b4..c08fedeb10 100644
--- a/src/plugins/texteditor/markdowneditor.cpp
+++ b/src/plugins/texteditor/markdowneditor.cpp
@@ -16,8 +16,6 @@
#include <coreplugin/icore.h>
#include <coreplugin/minisplitter.h>
-#include <texteditor/texteditoractionhandler.h>
-
#include <utils/action.h>
#include <utils/ranges.h>
#include <utils/qtcsettings.h>
@@ -73,7 +71,7 @@ class MarkdownEditor : public IEditor
{
Q_OBJECT
public:
- MarkdownEditor(const TextEditor::TextEditorActionHandler *actionHandler)
+ MarkdownEditor()
: m_document(new TextDocument(MARKDOWNVIEWER_ID))
{
m_document->setMimeType(MARKDOWNVIEWER_MIME_TYPE);
@@ -108,7 +106,7 @@ public:
// editor
m_textEditorWidget = new MarkdownEditorWidget;
- m_textEditorWidget->setOptionalActions(actionHandler->optionalActions());
+ m_textEditorWidget->setOptionalActions(OptionalActions::FollowSymbolUnderCursor);
m_textEditorWidget->setTextDocument(m_document);
m_textEditorWidget->setupGenericHighlighter();
m_textEditorWidget->setMarksVisible(false);
@@ -501,7 +499,6 @@ public:
MarkdownEditorFactory();
private:
- TextEditorActionHandler m_actionHandler;
Action m_emphasisAction;
Action m_strongAction;
Action m_inlineCodeAction;
@@ -512,17 +509,11 @@ private:
};
MarkdownEditorFactory::MarkdownEditorFactory()
- : m_actionHandler(MARKDOWNVIEWER_ID,
- MARKDOWNVIEWER_TEXT_CONTEXT,
- TextEditor::TextEditorActionHandler::FollowSymbolUnderCursor,
- [](IEditor *editor) {
- return static_cast<MarkdownEditor *>(editor)->textEditorWidget();
- })
{
setId(MARKDOWNVIEWER_ID);
setDisplayName(::Core::Tr::tr("Markdown Editor"));
addMimeType(MARKDOWNVIEWER_MIME_TYPE);
- setEditorCreator([this] { return new MarkdownEditor{&m_actionHandler}; });
+ setEditorCreator([] { return new MarkdownEditor; });
const auto textContext = Context(MARKDOWNVIEWER_TEXT_CONTEXT);
const auto context = Context(MARKDOWNVIEWER_ID);
diff --git a/src/plugins/texteditor/plaintexteditorfactory.cpp b/src/plugins/texteditor/plaintexteditorfactory.cpp
index fbaf430284..ef989ee621 100644
--- a/src/plugins/texteditor/plaintexteditorfactory.cpp
+++ b/src/plugins/texteditor/plaintexteditorfactory.cpp
@@ -5,7 +5,6 @@
#include "basehoverhandler.h"
#include "textdocument.h"
#include "texteditor.h"
-#include "texteditoractionhandler.h"
#include "texteditorconstants.h"
#include <coreplugin/coreconstants.h>
@@ -40,9 +39,9 @@ public:
setEditorWidgetCreator([]() { return new PlainTextEditorWidget; });
setUseGenericHighlighter(true);
- setEditorActionHandlers(TextEditorActionHandler::Format |
- TextEditorActionHandler::UnCommentSelection |
- TextEditorActionHandler::UnCollapseAll);
+ setOptionalActionMask(
+ OptionalActions::Format | OptionalActions::UnCommentSelection
+ | OptionalActions::UnCollapseAll);
}
};
diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp
index 85bd4732ba..9a7c0a2b26 100644
--- a/src/plugins/texteditor/texteditor.cpp
+++ b/src/plugins/texteditor/texteditor.cpp
@@ -21,6 +21,7 @@
#include "highlighterhelper.h"
#include "highlightersettings.h"
#include "icodestylepreferences.h"
+#include "linenumberfilter.h"
#include "marginsettings.h"
#include "refactoroverlay.h"
#include "snippets/snippetoverlay.h"
@@ -28,11 +29,11 @@
#include "tabsettings.h"
#include "textdocument.h"
#include "textdocumentlayout.h"
-#include "texteditoractionhandler.h"
#include "texteditorconstants.h"
#include "texteditoroverlay.h"
#include "texteditorsettings.h"
#include "texteditortr.h"
+#include "typehierarchy.h"
#include "typingsettings.h"
#include <aggregation/aggregate.h>
@@ -45,7 +46,9 @@
#include <coreplugin/find/basetextfind.h>
#include <coreplugin/find/highlightscrollbarcontroller.h>
#include <coreplugin/icore.h>
+#include <coreplugin/locator/locatormanager.h>
#include <coreplugin/manhattanstyle.h>
+#include <coreplugin/navigationwidget.h>
#include <utils/algorithm.h>
#include <utils/async.h>
@@ -738,6 +741,14 @@ public:
void openTypeUnderCursor(bool openInNextSplit);
qreal charWidth() const;
+ // actions
+ void registerActions();
+ void updateActions();
+ void updateOptionalActions();
+ void updateRedoAction(bool on);
+ void updateUndoAction(bool on);
+ void updateCopyAction(bool on);
+
public:
TextEditorWidget *q;
QWidget *m_toolBarWidget = nullptr;
@@ -753,7 +764,7 @@ public:
QToolButton *m_fileLineEnding = nullptr;
QAction *m_fileLineEndingAction = nullptr;
- uint m_optionalActionMask = TextEditorActionHandler::None;
+ uint m_optionalActionMask = OptionalActions::None;
bool m_contentsChanged = false;
bool m_lastCursorChangeWasInteresting = false;
std::shared_ptr<void> m_suggestionBlocker;
@@ -927,6 +938,30 @@ public:
void updateSuggestion();
void clearCurrentSuggestion();
QTextBlock m_suggestionBlock;
+
+ Context m_editorContext;
+ QAction *m_undoAction = nullptr;
+ QAction *m_redoAction = nullptr;
+ QAction *m_copyAction = nullptr;
+ QAction *m_copyHtmlAction = nullptr;
+ QAction *m_cutAction = nullptr;
+ QAction *m_autoIndentAction = nullptr;
+ QAction *m_autoFormatAction = nullptr;
+ QAction *m_visualizeWhitespaceAction = nullptr;
+ QAction *m_textWrappingAction = nullptr;
+ QAction *m_unCommentSelectionAction = nullptr;
+ QAction *m_unfoldAllAction = nullptr;
+ QAction *m_followSymbolAction = nullptr;
+ QAction *m_followSymbolInNextSplitAction = nullptr;
+ QAction *m_followToTypeAction = nullptr;
+ QAction *m_followToTypeInNextSplitAction = nullptr;
+ QAction *m_findUsageAction = nullptr;
+ QAction *m_openCallHierarchyAction = nullptr;
+ QAction *m_openTypeHierarchyAction = nullptr;
+ QAction *m_renameSymbolAction = nullptr;
+ QAction *m_jumpToFileAction = nullptr;
+ QAction *m_jumpToFileInNextSplitAction = nullptr;
+ QList<QAction *> m_modifyingActions;
};
class TextEditorWidgetFind : public BaseTextFind
@@ -1031,6 +1066,8 @@ TextEditorWidgetPrivate::TextEditorWidgetPrivate(TextEditorWidget *parent)
, m_codeAssistant(parent)
, m_hoverHandlerRunner(parent, m_hoverHandlers)
, m_autoCompleter(new AutoCompleter)
+ , m_editorContext(
+ Id(Core::Constants::K_DEFAULT_TEXT_EDITOR_ID).withSuffix(QUuid::createUuid().toString()))
{
m_selectionHighlightOverlay->show();
auto aggregate = new Aggregation::Aggregate;
@@ -1095,6 +1132,15 @@ TextEditorWidgetPrivate::TextEditorWidgetPrivate(TextEditorWidget *parent)
connect(q, &QPlainTextEdit::selectionChanged,
this, &TextEditorWidgetPrivate::slotSelectionChanged);
+ connect(q, &QPlainTextEdit::undoAvailable,
+ this, &TextEditorWidgetPrivate::updateUndoAction);
+
+ connect(q, &QPlainTextEdit::redoAvailable,
+ this, &TextEditorWidgetPrivate::updateRedoAction);
+
+ connect(q, &QPlainTextEdit::copyAvailable,
+ this, &TextEditorWidgetPrivate::updateCopyAction);
+
m_parenthesesMatchingTimer.setSingleShot(true);
m_parenthesesMatchingTimer.setInterval(50);
connect(&m_parenthesesMatchingTimer, &QTimer::timeout,
@@ -1141,6 +1187,14 @@ TextEditorWidgetPrivate::TextEditorWidgetPrivate(TextEditorWidget *parent)
q, &TextEditorWidget::setCompletionSettings);
connect(settings, &TextEditorSettings::extraEncodingSettingsChanged,
q, &TextEditorWidget::setExtraEncodingSettings);
+
+ auto context = new Core::IContext(this);
+ context->setWidget(q);
+ context->setContext(m_editorContext);
+ Core::ICore::addContextObject(context);
+
+ registerActions();
+ updateActions();
}
TextEditorWidgetPrivate::~TextEditorWidgetPrivate()
@@ -3810,6 +3864,434 @@ qreal TextEditorWidgetPrivate::charWidth() const
return QFontMetricsF(q->font()).horizontalAdvance(QLatin1Char('x'));
}
+void TextEditorWidgetPrivate::registerActions()
+{
+ using namespace Core::Constants;
+ using namespace TextEditor::Constants;
+
+ m_undoAction = ActionBuilder(this, UNDO)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->undo(); })
+ .contextAction();
+ m_redoAction = ActionBuilder(this, REDO)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->redo(); })
+ .contextAction();
+ m_copyAction = ActionBuilder(this, COPY)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->copy(); })
+ .contextAction();
+ m_cutAction = ActionBuilder(this, CUT)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->cut(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, PASTE)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->paste(); })
+ .contextAction();
+ ActionBuilder(this, SELECTALL)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->selectAll(); });
+ ActionBuilder(this, GOTO)
+ .setContext(m_editorContext)
+ .addOnTriggered([] { LocatorManager::showFilter(lineNumberFilter()); });
+ ActionBuilder(this, PRINT)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->print(ICore::printer()); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, DELETE_LINE)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->deleteLine(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, DELETE_END_OF_LINE)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->deleteEndOfLine(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, DELETE_END_OF_WORD)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->deleteEndOfWord(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, DELETE_END_OF_WORD_CAMEL_CASE)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->deleteEndOfWordCamelCase(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, DELETE_START_OF_LINE)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->deleteStartOfLine(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, DELETE_START_OF_WORD)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->deleteStartOfWord(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, DELETE_START_OF_WORD_CAMEL_CASE)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->deleteStartOfWordCamelCase(); })
+ .contextAction();
+ ActionBuilder(this, GOTO_BLOCK_START_WITH_SELECTION)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoBlockStartWithSelection(); });
+ ActionBuilder(this, GOTO_BLOCK_END_WITH_SELECTION)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoBlockEndWithSelection(); });
+ m_modifyingActions << ActionBuilder(this, MOVE_LINE_UP)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->moveLineUp(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, MOVE_LINE_DOWN)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->moveLineDown(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, COPY_LINE_UP)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->copyLineUp(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, COPY_LINE_DOWN)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->copyLineDown(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, JOIN_LINES)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->joinLines(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, INSERT_LINE_ABOVE)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->insertLineAbove(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, INSERT_LINE_BELOW)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->insertLineBelow(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, SWITCH_UTF8BOM)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->switchUtf8bom(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, INDENT)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->indent(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, UNINDENT)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->unindent(); })
+ .contextAction();
+ m_followSymbolAction = ActionBuilder(this, FOLLOW_SYMBOL_UNDER_CURSOR)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->openLinkUnderCursor(); })
+ .contextAction();
+ m_followSymbolInNextSplitAction = ActionBuilder(this, FOLLOW_SYMBOL_UNDER_CURSOR_IN_NEXT_SPLIT)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->openLinkUnderCursorInNextSplit(); })
+ .contextAction();
+ m_followToTypeAction = ActionBuilder(this, FOLLOW_SYMBOL_TO_TYPE)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->openTypeUnderCursor(); })
+ .contextAction();
+ m_followToTypeInNextSplitAction = ActionBuilder(this, FOLLOW_SYMBOL_TO_TYPE_IN_NEXT_SPLIT)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->openTypeUnderCursorInNextSplit(); })
+ .contextAction();
+ m_findUsageAction = ActionBuilder(this, FIND_USAGES)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->findUsages(); })
+ .contextAction();
+ m_renameSymbolAction = ActionBuilder(this, RENAME_SYMBOL)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->renameSymbolUnderCursor(); })
+ .contextAction();
+ m_jumpToFileAction = ActionBuilder(this, JUMP_TO_FILE_UNDER_CURSOR)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->openLinkUnderCursor(); })
+ .contextAction();
+ m_jumpToFileInNextSplitAction = ActionBuilder(this, JUMP_TO_FILE_UNDER_CURSOR_IN_NEXT_SPLIT)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->openLinkUnderCursorInNextSplit(); })
+ .contextAction();
+ m_openCallHierarchyAction = ActionBuilder(this, OPEN_CALL_HIERARCHY)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->openCallHierarchy(); })
+ .contextAction();
+ m_openTypeHierarchyAction = ActionBuilder(this, OPEN_TYPE_HIERARCHY)
+ .setContext(m_editorContext)
+ .addOnTriggered([] {
+ updateTypeHierarchy(NavigationWidget::activateSubWidget(
+ Constants::TYPE_HIERARCHY_FACTORY_ID, Side::Left));
+ })
+ .contextAction();
+ ActionBuilder(this, VIEW_PAGE_UP)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->viewPageUp(); });
+ ActionBuilder(this, VIEW_PAGE_DOWN)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->viewPageDown(); });
+ ActionBuilder(this, VIEW_LINE_UP)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->viewLineUp(); });
+ ActionBuilder(this, VIEW_LINE_DOWN)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->viewLineDown(); });
+
+ ActionBuilder(this, SELECT_ENCODING)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->selectEncoding(); });
+ m_modifyingActions << ActionBuilder(this, CIRCULAR_PASTE)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->circularPaste(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, NO_FORMAT_PASTE)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->pasteWithoutFormat(); })
+ .contextAction();
+
+ m_autoIndentAction = ActionBuilder(this, AUTO_INDENT_SELECTION)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->autoIndent(); })
+ .contextAction();
+ m_autoFormatAction = ActionBuilder(this, AUTO_FORMAT_SELECTION)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->autoFormat(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, REWRAP_PARAGRAPH)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->rewrapParagraph(); })
+ .contextAction();
+ m_visualizeWhitespaceAction = ActionBuilder(this, VISUALIZE_WHITESPACE)
+ .setContext(m_editorContext)
+ .addOnToggled(
+ this,
+ [this](bool checked) {
+ DisplaySettings ds = q->displaySettings();
+ ds.m_visualizeWhitespace = checked;
+ q->setDisplaySettings(ds);
+ })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, CLEAN_WHITESPACE)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->cleanWhitespace(); })
+ .contextAction();
+ m_textWrappingAction = ActionBuilder(this, TEXT_WRAPPING)
+ .setContext(m_editorContext)
+ .addOnToggled(this, [this] (bool checked) {
+ DisplaySettings ds = q->displaySettings();
+ ds.m_textWrapping = checked;
+ q->setDisplaySettings(ds);
+ })
+ .contextAction();
+ m_unCommentSelectionAction = ActionBuilder(this, UN_COMMENT_SELECTION)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->unCommentSelection(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, CUT_LINE)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->cutLine(); })
+ .contextAction();
+ ActionBuilder(this, COPY_LINE)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->copyLine(); });
+ m_copyHtmlAction = ActionBuilder(this, COPY_WITH_HTML)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->copyWithHtml(); })
+ .contextAction();
+ ActionBuilder(this, ADD_CURSORS_TO_LINE_ENDS)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->addCursorsToLineEnds(); });
+ ActionBuilder(this, ADD_SELECT_NEXT_FIND_MATCH)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->addSelectionNextFindMatch(); });
+ m_modifyingActions << ActionBuilder(this, DUPLICATE_SELECTION)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->duplicateSelection(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, DUPLICATE_SELECTION_AND_COMMENT)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->duplicateSelectionAndComment(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, UPPERCASE_SELECTION)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->uppercaseSelection(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, LOWERCASE_SELECTION)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->lowercaseSelection(); })
+ .contextAction();
+ m_modifyingActions << ActionBuilder(this, SORT_LINES)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->sortLines(); })
+ .contextAction();
+ ActionBuilder(this, FOLD)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->foldCurrentBlock(); });
+ ActionBuilder(this, UNFOLD)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->unfoldCurrentBlock(); });
+ m_unfoldAllAction = ActionBuilder(this, UNFOLD_ALL)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->unfoldAll(); })
+ .contextAction();
+ ActionBuilder(this, INCREASE_FONT_SIZE)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->increaseFontZoom(); });
+ ActionBuilder(this, DECREASE_FONT_SIZE)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->decreaseFontZoom(); });
+ ActionBuilder(this, RESET_FONT_SIZE)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->zoomReset(); });
+ ActionBuilder(this, GOTO_BLOCK_START)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoBlockStart(); });
+ ActionBuilder(this, GOTO_BLOCK_END)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoBlockEnd(); });
+ ActionBuilder(this, SELECT_BLOCK_UP)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->selectBlockUp(); });
+ ActionBuilder(this, SELECT_BLOCK_DOWN)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->selectBlockDown(); });
+ ActionBuilder(this, SELECT_WORD_UNDER_CURSOR)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->selectWordUnderCursor(); });
+
+ ActionBuilder(this, GOTO_DOCUMENT_START)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoDocumentStart(); });
+ ActionBuilder(this, GOTO_DOCUMENT_END)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoDocumentEnd(); });
+ ActionBuilder(this, GOTO_LINE_START)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoLineStart(); });
+ ActionBuilder(this, GOTO_LINE_END)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoLineEnd(); });
+ ActionBuilder(this, GOTO_NEXT_LINE)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoNextLine(); });
+ ActionBuilder(this, GOTO_PREVIOUS_LINE)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoPreviousLine(); });
+ ActionBuilder(this, GOTO_PREVIOUS_CHARACTER)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoPreviousCharacter(); });
+ ActionBuilder(this, GOTO_NEXT_CHARACTER)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoNextCharacter(); });
+ ActionBuilder(this, GOTO_PREVIOUS_WORD)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoPreviousWord(); });
+ ActionBuilder(this, GOTO_NEXT_WORD)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoNextWord(); });
+ ActionBuilder(this, GOTO_PREVIOUS_WORD_CAMEL_CASE)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoPreviousWordCamelCase(); });
+ ActionBuilder(this, GOTO_NEXT_WORD_CAMEL_CASE)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoNextWordCamelCase(); });
+
+ ActionBuilder(this, GOTO_LINE_START_WITH_SELECTION)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoLineStartWithSelection(); });
+ ActionBuilder(this, GOTO_LINE_END_WITH_SELECTION)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoLineEndWithSelection(); });
+ ActionBuilder(this, GOTO_NEXT_LINE_WITH_SELECTION)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoNextLineWithSelection(); });
+ ActionBuilder(this, GOTO_PREVIOUS_LINE_WITH_SELECTION)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoPreviousLineWithSelection(); });
+ ActionBuilder(this, GOTO_PREVIOUS_CHARACTER_WITH_SELECTION)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoPreviousCharacterWithSelection(); });
+ ActionBuilder(this, GOTO_NEXT_CHARACTER_WITH_SELECTION)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoNextCharacterWithSelection(); });
+ ActionBuilder(this, GOTO_PREVIOUS_WORD_WITH_SELECTION)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoPreviousWordWithSelection(); });
+ ActionBuilder(this, GOTO_NEXT_WORD_WITH_SELECTION)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoNextWordWithSelection(); });
+ ActionBuilder(this, GOTO_PREVIOUS_WORD_CAMEL_CASE_WITH_SELECTION)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoPreviousWordCamelCaseWithSelection(); });
+ ActionBuilder(this, GOTO_NEXT_WORD_CAMEL_CASE_WITH_SELECTION)
+ .setContext(m_editorContext)
+ .addOnTriggered([this] { q->gotoNextWordCamelCaseWithSelection(); });
+
+ // Collect additional modifying actions so we can check for them inside a readonly file
+ // and disable them
+ m_modifyingActions << m_autoIndentAction;
+ m_modifyingActions << m_autoFormatAction;
+ m_modifyingActions << m_unCommentSelectionAction;
+
+ updateOptionalActions();
+}
+
+void TextEditorWidgetPrivate::updateActions()
+{
+ bool isWritable = !q->isReadOnly();
+ for (QAction *a : std::as_const(m_modifyingActions))
+ a->setEnabled(isWritable);
+ m_unCommentSelectionAction->setEnabled((m_optionalActionMask & OptionalActions::UnCommentSelection) && isWritable);
+ m_visualizeWhitespaceAction->setEnabled(q);
+ if (TextEditorSettings::fontSettings().relativeLineSpacing() == 100) {
+ m_textWrappingAction->setEnabled(q);
+ } else {
+ m_textWrappingAction->setEnabled(false);
+ m_textWrappingAction->setChecked(false);
+ }
+ m_visualizeWhitespaceAction->setChecked(m_displaySettings.m_visualizeWhitespace);
+ m_textWrappingAction->setChecked(m_displaySettings.m_textWrapping);
+
+ updateRedoAction(q->document()->isRedoAvailable());
+ updateUndoAction(q->document()->isUndoAvailable());
+ updateCopyAction(q->textCursor().hasSelection());
+
+ updateOptionalActions();
+}
+
+void TextEditorWidgetPrivate::updateOptionalActions()
+{
+ using namespace OptionalActions;
+ m_followSymbolAction->setEnabled(m_optionalActionMask & FollowSymbolUnderCursor);
+ m_followSymbolInNextSplitAction->setEnabled(m_optionalActionMask & FollowSymbolUnderCursor);
+ m_followToTypeAction->setEnabled(m_optionalActionMask & FollowTypeUnderCursor);
+ m_followToTypeInNextSplitAction->setEnabled(m_optionalActionMask & FollowTypeUnderCursor);
+ m_findUsageAction->setEnabled(m_optionalActionMask & FindUsage);
+ m_jumpToFileAction->setEnabled(m_optionalActionMask & JumpToFileUnderCursor);
+ m_jumpToFileInNextSplitAction->setEnabled(m_optionalActionMask & JumpToFileUnderCursor);
+ m_unfoldAllAction->setEnabled(m_optionalActionMask & UnCollapseAll);
+ m_renameSymbolAction->setEnabled(m_optionalActionMask & RenameSymbol);
+ m_openCallHierarchyAction->setEnabled(m_optionalActionMask & CallHierarchy);
+ m_openTypeHierarchyAction->setEnabled(m_optionalActionMask & TypeHierarchy);
+
+ bool formatEnabled = (m_optionalActionMask & OptionalActions::Format)
+ && !q->isReadOnly();
+ m_autoIndentAction->setEnabled(formatEnabled);
+ m_autoFormatAction->setEnabled(formatEnabled);
+}
+
+void TextEditorWidgetPrivate::updateRedoAction(bool on)
+{
+ m_redoAction->setEnabled(on);
+}
+
+void TextEditorWidgetPrivate::updateUndoAction(bool on)
+{
+ m_undoAction->setEnabled(on);
+}
+
+void TextEditorWidgetPrivate::updateCopyAction(bool hasCopyableText)
+{
+ if (m_cutAction)
+ m_cutAction->setEnabled(hasCopyableText && !q->isReadOnly());
+ if (m_copyAction)
+ m_copyAction->setEnabled(hasCopyableText);
+ if (m_copyHtmlAction)
+ m_copyHtmlAction->setEnabled(hasCopyableText);
+}
+
bool TextEditorWidget::codeFoldingVisible() const
{
return d->m_codeFoldingVisible;
@@ -8103,6 +8585,7 @@ void TextEditorWidgetPrivate::applyFontSettingsDelayed()
m_fontSettingsNeedsApply = true;
if (q->isVisible())
q->triggerPendingUpdates();
+ updateActions();
}
void TextEditorWidgetPrivate::markRemoved(TextMark *mark)
@@ -8338,6 +8821,7 @@ void TextEditorWidget::setReadOnly(bool b)
emit readOnlyChanged();
if (b)
setTextInteractionFlags(textInteractionFlags() | Qt::TextSelectableByKeyboard);
+ d->updateActions();
}
void TextEditorWidget::cut()
@@ -8735,32 +9219,32 @@ void TextEditorWidget::setupFallBackEditor(Id id)
void TextEditorWidget::appendStandardContextMenuActions(QMenu *menu)
{
- if (optionalActions() & TextEditorActionHandler::FollowSymbolUnderCursor) {
+ if (optionalActions() & OptionalActions::FollowSymbolUnderCursor) {
const auto action = ActionManager::command(Constants::FOLLOW_SYMBOL_UNDER_CURSOR)->action();
if (!menu->actions().contains(action))
menu->addAction(action);
}
- if (optionalActions() & TextEditorActionHandler::FollowTypeUnderCursor) {
+ if (optionalActions() & OptionalActions::FollowTypeUnderCursor) {
const auto action = ActionManager::command(Constants::FOLLOW_SYMBOL_TO_TYPE)->action();
if (!menu->actions().contains(action))
menu->addAction(action);
}
- if (optionalActions() & TextEditorActionHandler::FindUsage) {
+ if (optionalActions() & OptionalActions::FindUsage) {
const auto action = ActionManager::command(Constants::FIND_USAGES)->action();
if (!menu->actions().contains(action))
menu->addAction(action);
}
- if (optionalActions() & TextEditorActionHandler::RenameSymbol) {
+ if (optionalActions() & OptionalActions::RenameSymbol) {
const auto action = ActionManager::command(Constants::RENAME_SYMBOL)->action();
if (!menu->actions().contains(action))
menu->addAction(action);
}
- if (optionalActions() & TextEditorActionHandler::CallHierarchy) {
+ if (optionalActions() & OptionalActions::CallHierarchy) {
const auto action = ActionManager::command(Constants::OPEN_CALL_HIERARCHY)->action();
if (!menu->actions().contains(action))
menu->addAction(action);
}
- if (optionalActions() & TextEditorActionHandler::TypeHierarchy) {
+ if (optionalActions() & OptionalActions::TypeHierarchy) {
const auto action = ActionManager::command(Constants::OPEN_TYPE_HIERARCHY)->action();
if (!menu->actions().contains(action))
menu->addAction(action);
@@ -8792,7 +9276,7 @@ void TextEditorWidget::setOptionalActions(uint optionalActionMask)
if (d->m_optionalActionMask == optionalActionMask)
return;
d->m_optionalActionMask = optionalActionMask;
- emit optionalActionMaskChanged();
+ d->updateOptionalActions();
}
void TextEditorWidget::addOptionalActions( uint optionalActionMask)
@@ -9492,7 +9976,7 @@ public:
CommentDefinition m_commentDefinition;
QList<BaseHoverHandler *> m_hoverHandlers; // owned
std::unique_ptr<CompletionAssistProvider> m_completionAssistProvider; // owned
- std::unique_ptr<TextEditorActionHandler> m_textEditorActionHandler;
+ int m_optionalActionMask = 0;
bool m_useGenericHighlighter = false;
bool m_duplicatedSupported = true;
bool m_codeFoldingSupported = false;
@@ -9565,9 +10049,9 @@ void TextEditorFactory::setAutoCompleterCreator(const AutoCompleterCreator &crea
d->m_autoCompleterCreator = creator;
}
-void TextEditorFactory::setEditorActionHandlers(uint optionalActions)
+void TextEditorFactory::setOptionalActionMask(int optionalActions)
{
- d->m_textEditorActionHandler.reset(new TextEditorActionHandler(id(), id(), optionalActions));
+ d->m_optionalActionMask = optionalActions;
}
void TextEditorFactory::addHoverHandler(BaseHoverHandler *handler)
@@ -9613,8 +10097,7 @@ BaseTextEditor *TextEditorFactoryPrivate::createEditorHelper(const TextDocumentP
textEditorWidget->setMarksVisible(m_marksVisible);
textEditorWidget->setParenthesesMatchingEnabled(m_paranthesesMatchinEnabled);
textEditorWidget->setCodeFoldingSupported(m_codeFoldingSupported);
- if (m_textEditorActionHandler)
- textEditorWidget->setOptionalActions(m_textEditorActionHandler->optionalActions());
+ textEditorWidget->setOptionalActions(m_optionalActionMask);
BaseTextEditor *editor = m_editorCreator();
editor->setDuplicateSupported(m_duplicatedSupported);
diff --git a/src/plugins/texteditor/texteditor.h b/src/plugins/texteditor/texteditor.h
index 85344a8dbd..2d54231b1c 100644
--- a/src/plugins/texteditor/texteditor.h
+++ b/src/plugins/texteditor/texteditor.h
@@ -85,6 +85,22 @@ enum TextMarkRequestKind
TaskMarkRequest
};
+namespace OptionalActions {
+enum Mask {
+ None = 0,
+ Format = 1,
+ UnCommentSelection = 2,
+ UnCollapseAll = 4,
+ FollowSymbolUnderCursor = 8,
+ FollowTypeUnderCursor = 16,
+ JumpToFileUnderCursor = 32,
+ RenameSymbol = 64,
+ FindUsage = 128,
+ CallHierarchy = 256,
+ TypeHierarchy = 512,
+};
+} // namespace OptionalActions
+
class TEXTEDITOR_EXPORT BaseTextEditor : public Core::IEditor
{
Q_OBJECT
@@ -511,7 +527,6 @@ signals:
void requestUsages(const QTextCursor &cursor);
void requestRename(const QTextCursor &cursor);
void requestCallHierarchy(const QTextCursor &cursor);
- void optionalActionMaskChanged();
void toolbarOutlineChanged(QWidget *newOutline);
protected:
@@ -689,7 +704,7 @@ public:
void setSyntaxHighlighterCreator(const SyntaxHighLighterCreator &creator);
void setUseGenericHighlighter(bool enabled);
void setAutoCompleterCreator(const AutoCompleterCreator &creator);
- void setEditorActionHandlers(uint optionalActions);
+ void setOptionalActionMask(int optionalActions);
void addHoverHandler(BaseHoverHandler *handler);
void setCompletionAssistProvider(CompletionAssistProvider *provider);
diff --git a/src/plugins/texteditor/texteditor.qbs b/src/plugins/texteditor/texteditor.qbs
index 30a4712b73..7c0ee12093 100644
--- a/src/plugins/texteditor/texteditor.qbs
+++ b/src/plugins/texteditor/texteditor.qbs
@@ -137,8 +137,6 @@ QtcPlugin {
"texteditor.qrc",
"texteditor_global.h",
"texteditortr.h",
- "texteditoractionhandler.cpp",
- "texteditoractionhandler.h",
"texteditorconstants.cpp",
"texteditorconstants.h",
"texteditoroverlay.cpp",
diff --git a/src/plugins/texteditor/texteditoractionhandler.cpp b/src/plugins/texteditor/texteditoractionhandler.cpp
deleted file mode 100644
index 2cf553689c..0000000000
--- a/src/plugins/texteditor/texteditoractionhandler.cpp
+++ /dev/null
@@ -1,671 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-#include "texteditoractionhandler.h"
-
-#include "texteditor.h"
-#include "displaysettings.h"
-#include "fontsettings.h"
-#include "linenumberfilter.h"
-#include "texteditortr.h"
-#include "texteditorsettings.h"
-#include "typehierarchy.h"
-
-#include <aggregation/aggregate.h>
-
-#include <coreplugin/locator/locatormanager.h>
-#include <coreplugin/icore.h>
-#include <coreplugin/editormanager/editormanager.h>
-#include <coreplugin/coreconstants.h>
-#include <coreplugin/navigationwidget.h>
-#include <coreplugin/actionmanager/actionmanager.h>
-#include <coreplugin/actionmanager/actioncontainer.h>
-#include <coreplugin/actionmanager/command.h>
-
-#include <utils/hostosinfo.h>
-#include <utils/qtcassert.h>
-
-#include <QDebug>
-#include <QAction>
-
-#include <functional>
-
-using namespace Core;
-
-namespace TextEditor {
-namespace Internal {
-
-class TextEditorActionHandlerPrivate : public QObject
-{
-public:
- TextEditorActionHandlerPrivate(Utils::Id editorId, Utils::Id contextId, uint optionalActions);
-
- QAction *registerActionHelper(Utils::Id id,
- bool scriptable,
- const QString &title,
- const QKeySequence &keySequence,
- Utils::Id menueGroup,
- ActionContainer *container,
- std::function<void(bool)> slot)
- {
- auto result = new QAction(title, this);
- Command *command
- = ActionManager::registerAction(result, id, Context(m_contextId), scriptable);
- if (!keySequence.isEmpty())
- command->setDefaultKeySequence(keySequence);
-
- if (container && menueGroup.isValid())
- container->addAction(command, menueGroup);
-
- connect(result, &QAction::triggered, slot);
- return result;
- }
-
- QAction *registerAction(Utils::Id id,
- std::function<void(TextEditorWidget *)> slot,
- bool scriptable = false,
- const QString &title = QString(),
- const QKeySequence &keySequence = QKeySequence(),
- Utils::Id menueGroup = Utils::Id(),
- ActionContainer *container = nullptr)
- {
- return registerActionHelper(id,
- scriptable,
- title,
- keySequence,
- menueGroup,
- container,
- [this, slot, id](bool) {
- if (m_currentEditorWidget)
- slot(m_currentEditorWidget);
- else if (m_unhandledCallback)
- m_unhandledCallback(id, m_currentEditor);
- });
- }
-
- QAction *registerBoolAction(Utils::Id id,
- std::function<void(TextEditorWidget *, bool)> slot,
- bool scriptable = false,
- const QString &title = QString(),
- const QKeySequence &keySequence = QKeySequence(),
- Utils::Id menueGroup = Utils::Id(),
- ActionContainer *container = nullptr)
- {
- return registerActionHelper(id, scriptable, title, keySequence, menueGroup, container,
- [this, slot](bool on) { if (m_currentEditorWidget) slot(m_currentEditorWidget, on); });
- }
-
- QAction *registerIntAction(Utils::Id id,
- std::function<void(TextEditorWidget *, int)> slot,
- bool scriptable = false,
- const QString &title = QString(),
- const QKeySequence &keySequence = QKeySequence(),
- Utils::Id menueGroup = Utils::Id(),
- ActionContainer *container = nullptr)
- {
- return registerActionHelper(id, scriptable, title, keySequence, menueGroup, container,
- [this, slot](bool on) { if (m_currentEditorWidget) slot(m_currentEditorWidget, on); });
- }
-
- void createActions();
-
- void updateActions();
- void updateOptionalActions();
- void updateRedoAction(bool on);
- void updateUndoAction(bool on);
- void updateCopyAction(bool on);
-
- void updateCurrentEditor(IEditor *editor);
-
- void setCanUndoCallback(const TextEditorActionHandler::Predicate &callback);
- void setCanRedoCallback(const TextEditorActionHandler::Predicate &callback);
-
-public:
- TextEditorActionHandler::TextEditorWidgetResolver m_findTextWidget;
- QAction *m_undoAction = nullptr;
- QAction *m_redoAction = nullptr;
- QAction *m_copyAction = nullptr;
- QAction *m_copyHtmlAction = nullptr;
- QAction *m_cutAction = nullptr;
- QAction *m_autoIndentAction = nullptr;
- QAction *m_autoFormatAction = nullptr;
- QAction *m_visualizeWhitespaceAction = nullptr;
- QAction *m_textWrappingAction = nullptr;
- QAction *m_unCommentSelectionAction = nullptr;
- QAction *m_unfoldAllAction = nullptr;
- QAction *m_followSymbolAction = nullptr;
- QAction *m_followSymbolInNextSplitAction = nullptr;
- QAction *m_followToTypeAction = nullptr;
- QAction *m_followToTypeInNextSplitAction = nullptr;
- QAction *m_findUsageAction = nullptr;
- QAction *m_openCallHierarchyAction = nullptr;
- QAction *m_openTypeHierarchyAction = nullptr;
- QAction *m_renameSymbolAction = nullptr;
- QAction *m_jumpToFileAction = nullptr;
- QAction *m_jumpToFileInNextSplitAction = nullptr;
- QList<QAction *> m_modifyingActions;
-
- uint m_optionalActions = TextEditorActionHandler::None;
- QPointer<TextEditorWidget> m_currentEditorWidget;
- QPointer<IEditor> m_currentEditor;
- Utils::Id m_editorId;
- Utils::Id m_contextId;
-
- TextEditorActionHandler::Predicate m_canUndoCallback;
- TextEditorActionHandler::Predicate m_canRedoCallback;
-
- TextEditorActionHandler::UnhandledCallback m_unhandledCallback;
-};
-
-TextEditorActionHandlerPrivate::TextEditorActionHandlerPrivate
- (Utils::Id editorId, Utils::Id contextId, uint optionalActions)
- : m_optionalActions(optionalActions)
- , m_editorId(editorId)
- , m_contextId(contextId)
-{
- createActions();
- connect(EditorManager::instance(),
- &EditorManager::currentEditorChanged,
- this,
- &TextEditorActionHandlerPrivate::updateCurrentEditor);
- connect(TextEditorSettings::instance(), &TextEditorSettings::fontSettingsChanged,
- this, &TextEditorActionHandlerPrivate::updateActions);
-}
-
-void TextEditorActionHandlerPrivate::createActions()
-{
- using namespace Core::Constants;
- using namespace TextEditor::Constants;
-
- m_undoAction = registerAction(UNDO,
- [] (TextEditorWidget *w) { w->undo(); }, true, Tr::tr("&Undo"));
- m_redoAction = registerAction(REDO,
- [] (TextEditorWidget *w) { w->redo(); }, true, Tr::tr("&Redo"));
- m_copyAction = registerAction(COPY,
- [] (TextEditorWidget *w) { w->copy(); }, true);
- m_cutAction = registerAction(CUT,
- [] (TextEditorWidget *w) { w->cut(); }, true);
- m_modifyingActions << registerAction(PASTE,
- [] (TextEditorWidget *w) { w->paste(); }, true);
- registerAction(SELECTALL,
- [] (TextEditorWidget *w) { w->selectAll(); }, true);
- registerAction(GOTO, [](TextEditorWidget *) {
- LocatorManager::showFilter(lineNumberFilter());
- });
- m_modifyingActions << registerAction(PRINT, [](TextEditorWidget *widget) {
- widget->print(ICore::printer());
- });
- m_modifyingActions << registerAction(DELETE_LINE,
- [] (TextEditorWidget *w) { w->deleteLine(); }, true, Tr::tr("Delete &Line"));
- m_modifyingActions << registerAction(DELETE_END_OF_LINE,
- [] (TextEditorWidget *w) { w->deleteEndOfLine(); }, true, Tr::tr("Delete Line from Cursor On"));
- m_modifyingActions << registerAction(DELETE_END_OF_WORD,
- [] (TextEditorWidget *w) { w->deleteEndOfWord(); }, true, Tr::tr("Delete Word from Cursor On"));
- m_modifyingActions << registerAction(DELETE_END_OF_WORD_CAMEL_CASE,
- [] (TextEditorWidget *w) { w->deleteEndOfWordCamelCase(); }, true, Tr::tr("Delete Word Camel Case from Cursor On"));
- m_modifyingActions << registerAction(
- DELETE_START_OF_LINE,
- [](TextEditorWidget *w) { w->deleteStartOfLine(); },
- true,
- Tr::tr("Delete Line up to Cursor"),
- Core::useMacShortcuts ? QKeySequence(Tr::tr("Ctrl+Backspace")) : QKeySequence());
- m_modifyingActions << registerAction(DELETE_START_OF_WORD,
- [] (TextEditorWidget *w) { w->deleteStartOfWord(); }, true, Tr::tr("Delete Word up to Cursor"));
- m_modifyingActions << registerAction(DELETE_START_OF_WORD_CAMEL_CASE,
- [] (TextEditorWidget *w) { w->deleteStartOfWordCamelCase(); }, true, Tr::tr("Delete Word Camel Case up to Cursor"));
- registerAction(GOTO_BLOCK_START_WITH_SELECTION,
- [] (TextEditorWidget *w) { w->gotoBlockStartWithSelection(); }, true, Tr::tr("Go to Block Start with Selection"),
- QKeySequence(Tr::tr("Ctrl+{")));
- registerAction(GOTO_BLOCK_END_WITH_SELECTION,
- [] (TextEditorWidget *w) { w->gotoBlockEndWithSelection(); }, true, Tr::tr("Go to Block End with Selection"),
- QKeySequence(Tr::tr("Ctrl+}")));
- m_modifyingActions << registerAction(MOVE_LINE_UP,
- [] (TextEditorWidget *w) { w->moveLineUp(); }, true, Tr::tr("Move Line Up"),
- QKeySequence(Tr::tr("Ctrl+Shift+Up")));
- m_modifyingActions << registerAction(MOVE_LINE_DOWN,
- [] (TextEditorWidget *w) { w->moveLineDown(); }, true, Tr::tr("Move Line Down"),
- QKeySequence(Tr::tr("Ctrl+Shift+Down")));
- m_modifyingActions << registerAction(COPY_LINE_UP,
- [] (TextEditorWidget *w) { w->copyLineUp(); }, true, Tr::tr("Copy Line Up"),
- QKeySequence(Tr::tr("Ctrl+Alt+Up")));
- m_modifyingActions << registerAction(COPY_LINE_DOWN,
- [] (TextEditorWidget *w) { w->copyLineDown(); }, true, Tr::tr("Copy Line Down"),
- QKeySequence(Tr::tr("Ctrl+Alt+Down")));
- m_modifyingActions << registerAction(JOIN_LINES,
- [] (TextEditorWidget *w) { w->joinLines(); }, true, Tr::tr("Join Lines"),
- QKeySequence(Tr::tr("Ctrl+J")));
- m_modifyingActions << registerAction(INSERT_LINE_ABOVE,
- [] (TextEditorWidget *w) { w->insertLineAbove(); }, true, Tr::tr("Insert Line Above Current Line"),
- QKeySequence(Tr::tr("Ctrl+Shift+Return")));
- m_modifyingActions << registerAction(INSERT_LINE_BELOW,
- [] (TextEditorWidget *w) { w->insertLineBelow(); }, true, Tr::tr("Insert Line Below Current Line"),
- QKeySequence(Tr::tr("Ctrl+Return")));
- m_modifyingActions << registerAction(SWITCH_UTF8BOM,
- [] (TextEditorWidget *w) { w->switchUtf8bom(); }, true, Tr::tr("Toggle UTF-8 BOM"));
- m_modifyingActions << registerAction(INDENT,
- [] (TextEditorWidget *w) { w->indent(); }, true, Tr::tr("Indent"));
- m_modifyingActions << registerAction(UNINDENT,
- [] (TextEditorWidget *w) { w->unindent(); }, true, Tr::tr("Unindent"));
- m_followSymbolAction = registerAction(FOLLOW_SYMBOL_UNDER_CURSOR,
- [] (TextEditorWidget *w) { w->openLinkUnderCursor(); }, true, Tr::tr("Follow Symbol Under Cursor"),
- QKeySequence(Qt::Key_F2));
- m_followSymbolInNextSplitAction = registerAction(FOLLOW_SYMBOL_UNDER_CURSOR_IN_NEXT_SPLIT,
- [] (TextEditorWidget *w) { w->openLinkUnderCursorInNextSplit(); }, true, Tr::tr("Follow Symbol Under Cursor in Next Split"),
- QKeySequence(Utils::HostOsInfo::isMacHost() ? Tr::tr("Meta+E, F2") : Tr::tr("Ctrl+E, F2")));
- m_followToTypeAction = registerAction(FOLLOW_SYMBOL_TO_TYPE,
- [] (TextEditorWidget *w) { w->openTypeUnderCursor(); }, true, Tr::tr("Follow Type Under Cursor"),
- QKeySequence(Tr::tr("Ctrl+Shift+F2")));
- m_followToTypeInNextSplitAction = registerAction(FOLLOW_SYMBOL_TO_TYPE_IN_NEXT_SPLIT,
- [] (TextEditorWidget *w) { w->openTypeUnderCursorInNextSplit(); }, true, Tr::tr("Follow Type Under Cursor in Next Split"),
- QKeySequence(Utils::HostOsInfo::isMacHost() ? Tr::tr("Meta+E, Shift+F2") : Tr::tr("Ctrl+E, Ctrl+Shift+F2")));
- m_findUsageAction = registerAction(FIND_USAGES,
- [] (TextEditorWidget *w) { w->findUsages(); }, true, Tr::tr("Find References to Symbol Under Cursor"),
- QKeySequence(Tr::tr("Ctrl+Shift+U")));
- m_renameSymbolAction = registerAction(RENAME_SYMBOL,
- [] (TextEditorWidget *w) { w->renameSymbolUnderCursor(); }, true, Tr::tr("Rename Symbol Under Cursor"),
- QKeySequence(Tr::tr("Ctrl+Shift+R")));
- m_jumpToFileAction = registerAction(JUMP_TO_FILE_UNDER_CURSOR,
- [] (TextEditorWidget *w) { w->openLinkUnderCursor(); }, true, Tr::tr("Jump to File Under Cursor"),
- QKeySequence(Qt::Key_F2));
- m_jumpToFileInNextSplitAction = registerAction(JUMP_TO_FILE_UNDER_CURSOR_IN_NEXT_SPLIT,
- [] (TextEditorWidget *w) { w->openLinkUnderCursorInNextSplit(); }, true, Tr::tr("Jump to File Under Cursor in Next Split"),
- QKeySequence(Utils::HostOsInfo::isMacHost() ? Tr::tr("Meta+E, F2") : Tr::tr("Ctrl+E, F2")).toString());
- m_openCallHierarchyAction = registerAction(OPEN_CALL_HIERARCHY,
- [] (TextEditorWidget *w) { w->openCallHierarchy(); }, true, Tr::tr("Open Call Hierarchy"));
- m_openTypeHierarchyAction = registerAction(
- OPEN_TYPE_HIERARCHY,
- [](TextEditorWidget *) {
- updateTypeHierarchy(
- NavigationWidget::activateSubWidget(Constants::TYPE_HIERARCHY_FACTORY_ID,
- Side::Left));
- },
- true,
- Tr::tr("Open Type Hierarchy"),
- QKeySequence(Utils::HostOsInfo::isMacHost() ? Tr::tr("Meta+Shift+T")
- : Tr::tr("Ctrl+Shift+T")));
- registerAction(VIEW_PAGE_UP,
- [] (TextEditorWidget *w) { w->viewPageUp(); }, true, Tr::tr("Move the View a Page Up and Keep the Cursor Position"),
- QKeySequence(Tr::tr("Ctrl+PgUp")));
- registerAction(VIEW_PAGE_DOWN,
- [] (TextEditorWidget *w) { w->viewPageDown(); }, true, Tr::tr("Move the View a Page Down and Keep the Cursor Position"),
- QKeySequence(Tr::tr("Ctrl+PgDown")));
- registerAction(VIEW_LINE_UP,
- [] (TextEditorWidget *w) { w->viewLineUp(); }, true, Tr::tr("Move the View a Line Up and Keep the Cursor Position"),
- QKeySequence(Tr::tr("Ctrl+Up")));
- registerAction(VIEW_LINE_DOWN,
- [] (TextEditorWidget *w) { w->viewLineDown(); }, true, Tr::tr("Move the View a Line Down and Keep the Cursor Position"),
- QKeySequence(Tr::tr("Ctrl+Down")));
-
- // register "Edit" Menu Actions
- ActionContainer *editMenu = ActionManager::actionContainer(M_EDIT);
- registerAction(SELECT_ENCODING,
- [] (TextEditorWidget *w) { w->selectEncoding(); }, false, Tr::tr("Select Encoding..."),
- QKeySequence(), G_EDIT_OTHER, editMenu);
- m_modifyingActions << registerAction(CIRCULAR_PASTE,
- [] (TextEditorWidget *w) { w->circularPaste(); }, false, Tr::tr("Paste from Clipboard History"),
- QKeySequence(Tr::tr("Ctrl+Shift+V")), G_EDIT_COPYPASTE, editMenu);
- m_modifyingActions << registerAction(NO_FORMAT_PASTE,
- [] (TextEditorWidget *w) { w->pasteWithoutFormat(); }, false, Tr::tr("Paste Without Formatting"),
- QKeySequence(Core::useMacShortcuts ? Tr::tr("Ctrl+Alt+Shift+V") : QString()), G_EDIT_COPYPASTE, editMenu);
-
- // register "Edit -> Advanced" Menu Actions
- ActionContainer *advancedEditMenu = ActionManager::actionContainer(M_EDIT_ADVANCED);
- m_autoIndentAction = registerAction(AUTO_INDENT_SELECTION,
- [] (TextEditorWidget *w) { w->autoIndent(); }, true, Tr::tr("Auto-&indent Selection"),
- QKeySequence(Tr::tr("Ctrl+I")),
- G_EDIT_FORMAT, advancedEditMenu);
- m_autoFormatAction = registerAction(AUTO_FORMAT_SELECTION,
- [] (TextEditorWidget *w) { w->autoFormat(); }, true, Tr::tr("Auto-&format Selection"),
- QKeySequence(Tr::tr("Ctrl+;")),
- G_EDIT_FORMAT, advancedEditMenu);
- m_modifyingActions << registerAction(REWRAP_PARAGRAPH,
- [] (TextEditorWidget *w) { w->rewrapParagraph(); }, true, Tr::tr("&Rewrap Paragraph"),
- QKeySequence(Core::useMacShortcuts ? Tr::tr("Meta+E, R") : Tr::tr("Ctrl+E, R")),
- G_EDIT_FORMAT, advancedEditMenu);
- m_visualizeWhitespaceAction = registerBoolAction(VISUALIZE_WHITESPACE,
- [] (TextEditorWidget *widget, bool checked) {
- if (widget) {
- DisplaySettings ds = widget->displaySettings();
- ds.m_visualizeWhitespace = checked;
- widget->setDisplaySettings(ds);
- }
- },
- false, Tr::tr("&Visualize Whitespace"),
- QKeySequence(Core::useMacShortcuts ? Tr::tr("Meta+E, Meta+V") : Tr::tr("Ctrl+E, Ctrl+V")),
- G_EDIT_FORMAT, advancedEditMenu);
- m_visualizeWhitespaceAction->setCheckable(true);
- m_modifyingActions << registerAction(CLEAN_WHITESPACE,
- [] (TextEditorWidget *w) { w->cleanWhitespace(); }, true, Tr::tr("Clean Whitespace"),
- QKeySequence(),
- G_EDIT_FORMAT, advancedEditMenu);
- m_textWrappingAction = registerBoolAction(TEXT_WRAPPING,
- [] (TextEditorWidget *widget, bool checked) {
- if (widget) {
- DisplaySettings ds = widget->displaySettings();
- ds.m_textWrapping = checked;
- widget->setDisplaySettings(ds);
- }
- },
- false, Tr::tr("Enable Text &Wrapping"),
- QKeySequence(Core::useMacShortcuts ? Tr::tr("Meta+E, Meta+W") : Tr::tr("Ctrl+E, Ctrl+W")),
- G_EDIT_FORMAT, advancedEditMenu);
- m_textWrappingAction->setCheckable(true);
- m_unCommentSelectionAction = registerAction(UN_COMMENT_SELECTION,
- [] (TextEditorWidget *w) { w->unCommentSelection(); }, true, Tr::tr("Toggle Comment &Selection"),
- QKeySequence(Tr::tr("Ctrl+/")),
- G_EDIT_FORMAT, advancedEditMenu);
- m_modifyingActions << registerAction(CUT_LINE,
- [] (TextEditorWidget *w) { w->cutLine(); }, true, Tr::tr("Cut &Line"),
- QKeySequence(Tr::tr("Shift+Del")),
- G_EDIT_TEXT, advancedEditMenu);
- registerAction(COPY_LINE,
- [] (TextEditorWidget *w) { w->copyLine(); }, false, Tr::tr("Copy &Line"),
- QKeySequence(Tr::tr("Ctrl+Ins")),
- G_EDIT_TEXT, advancedEditMenu);
- m_copyHtmlAction = registerAction(COPY_WITH_HTML,
- [] (TextEditorWidget *w) { w->copyWithHtml(); }, true, Tr::tr("Copy With Highlighting"),
- QKeySequence(), G_EDIT_TEXT, advancedEditMenu);
-
- registerAction(ADD_CURSORS_TO_LINE_ENDS,
- [] (TextEditorWidget *w) { w->addCursorsToLineEnds(); }, false, Tr::tr("Create Cursors at Selected Line Ends"),
- QKeySequence(Tr::tr("Alt+Shift+I")),
- G_EDIT_TEXT, advancedEditMenu);
- registerAction(ADD_SELECT_NEXT_FIND_MATCH,
- [] (TextEditorWidget *w) { w->addSelectionNextFindMatch(); }, false, Tr::tr("Add Next Occurrence to Selection"),
- QKeySequence(Tr::tr("Ctrl+D")),
- G_EDIT_TEXT, advancedEditMenu);
- m_modifyingActions << registerAction(DUPLICATE_SELECTION,
- [] (TextEditorWidget *w) { w->duplicateSelection(); }, false, Tr::tr("&Duplicate Selection"),
- QKeySequence(),
- G_EDIT_TEXT, advancedEditMenu);
- m_modifyingActions << registerAction(DUPLICATE_SELECTION_AND_COMMENT,
- [] (TextEditorWidget *w) { w->duplicateSelectionAndComment(); }, false, Tr::tr("&Duplicate Selection and Comment"),
- QKeySequence(),
- G_EDIT_TEXT, advancedEditMenu);
- m_modifyingActions << registerAction(UPPERCASE_SELECTION,
- [] (TextEditorWidget *w) { w->uppercaseSelection(); }, true, Tr::tr("Uppercase Selection"),
- QKeySequence(Core::useMacShortcuts ? Tr::tr("Meta+Shift+U") : Tr::tr("Alt+Shift+U")),
- G_EDIT_TEXT, advancedEditMenu);
- m_modifyingActions << registerAction(LOWERCASE_SELECTION,
- [] (TextEditorWidget *w) { w->lowercaseSelection(); }, true, Tr::tr("Lowercase Selection"),
- QKeySequence(Core::useMacShortcuts ? Tr::tr("Meta+U") : Tr::tr("Alt+U")),
- G_EDIT_TEXT, advancedEditMenu);
- m_modifyingActions << registerAction(SORT_LINES,
- [] (TextEditorWidget *w) { w->sortLines(); }, false, Tr::tr("&Sort Lines"),
- QKeySequence(Core::useMacShortcuts ? Tr::tr("Meta+Shift+S") : Tr::tr("Alt+Shift+S")),
- G_EDIT_TEXT, advancedEditMenu);
- registerAction(FOLD,
- [] (TextEditorWidget *w) { w->foldCurrentBlock(); }, true, Tr::tr("Fold"),
- QKeySequence(Tr::tr("Ctrl+<")),
- G_EDIT_COLLAPSING, advancedEditMenu);
- registerAction(UNFOLD,
- [] (TextEditorWidget *w) { w->unfoldCurrentBlock(); }, true, Tr::tr("Unfold"),
- QKeySequence(Tr::tr("Ctrl+>")),
- G_EDIT_COLLAPSING, advancedEditMenu);
- m_unfoldAllAction = registerAction(UNFOLD_ALL,
- [] (TextEditorWidget *w) { w->unfoldAll(); }, true, Tr::tr("Toggle &Fold All"),
- QKeySequence(),
- G_EDIT_COLLAPSING, advancedEditMenu);
- registerAction(INCREASE_FONT_SIZE,
- [] (TextEditorWidget *w) { w->increaseFontZoom(); }, false, Tr::tr("Increase Font Size"),
- QKeySequence(Tr::tr("Ctrl++")),
- G_EDIT_FONT, advancedEditMenu);
- registerAction(DECREASE_FONT_SIZE,
- [] (TextEditorWidget *w) { w->decreaseFontZoom(); }, false, Tr::tr("Decrease Font Size"),
- QKeySequence(Tr::tr("Ctrl+-")),
- G_EDIT_FONT, advancedEditMenu);
- registerAction(RESET_FONT_SIZE,
- [] (TextEditorWidget *w) { w->zoomReset(); }, false, Tr::tr("Reset Font Size"),
- QKeySequence(Core::useMacShortcuts ? Tr::tr("Meta+0") : Tr::tr("Ctrl+0")),
- G_EDIT_FONT, advancedEditMenu);
- registerAction(GOTO_BLOCK_START,
- [] (TextEditorWidget *w) { w->gotoBlockStart(); }, true, Tr::tr("Go to Block Start"),
- QKeySequence(Tr::tr("Ctrl+[")),
- G_EDIT_BLOCKS, advancedEditMenu);
- registerAction(GOTO_BLOCK_END,
- [] (TextEditorWidget *w) { w->gotoBlockEnd(); }, true, Tr::tr("Go to Block End"),
- QKeySequence(Tr::tr("Ctrl+]")),
- G_EDIT_BLOCKS, advancedEditMenu);
- registerAction(SELECT_BLOCK_UP,
- [] (TextEditorWidget *w) { w->selectBlockUp(); }, true, Tr::tr("Select Block Up"),
- QKeySequence(Tr::tr("Ctrl+U")),
- G_EDIT_BLOCKS, advancedEditMenu);
- registerAction(SELECT_BLOCK_DOWN,
- [] (TextEditorWidget *w) { w->selectBlockDown(); }, true, Tr::tr("Select Block Down"),
- QKeySequence(Tr::tr("Ctrl+Shift+Alt+U")),
- G_EDIT_BLOCKS, advancedEditMenu);
- registerAction(SELECT_WORD_UNDER_CURSOR,
- [] (TextEditorWidget *w) { w->selectWordUnderCursor(); }, true,
- Tr::tr("Select Word Under Cursor"));
-
- // register GOTO Actions
- registerAction(GOTO_DOCUMENT_START,
- [] (TextEditorWidget *w) { w->gotoDocumentStart(); }, true, Tr::tr("Go to Document Start"));
- registerAction(GOTO_DOCUMENT_END,
- [] (TextEditorWidget *w) { w->gotoDocumentEnd(); }, true, Tr::tr("Go to Document End"));
- registerAction(GOTO_LINE_START,
- [] (TextEditorWidget *w) { w->gotoLineStart(); }, true, Tr::tr("Go to Line Start"));
- registerAction(GOTO_LINE_END,
- [] (TextEditorWidget *w) { w->gotoLineEnd(); }, true, Tr::tr("Go to Line End"));
- registerAction(GOTO_NEXT_LINE,
- [] (TextEditorWidget *w) { w->gotoNextLine(); }, true, Tr::tr("Go to Next Line"));
- registerAction(GOTO_PREVIOUS_LINE,
- [] (TextEditorWidget *w) { w->gotoPreviousLine(); }, true, Tr::tr("Go to Previous Line"));
- registerAction(GOTO_PREVIOUS_CHARACTER,
- [] (TextEditorWidget *w) { w->gotoPreviousCharacter(); }, true, Tr::tr("Go to Previous Character"));
- registerAction(GOTO_NEXT_CHARACTER,
- [] (TextEditorWidget *w) { w->gotoNextCharacter(); }, true, Tr::tr("Go to Next Character"));
- registerAction(GOTO_PREVIOUS_WORD,
- [] (TextEditorWidget *w) { w->gotoPreviousWord(); }, true, Tr::tr("Go to Previous Word"));
- registerAction(GOTO_NEXT_WORD,
- [] (TextEditorWidget *w) { w->gotoNextWord(); }, true, Tr::tr("Go to Next Word"));
- registerAction(GOTO_PREVIOUS_WORD_CAMEL_CASE,
- [] (TextEditorWidget *w) { w->gotoPreviousWordCamelCase(); }, false, Tr::tr("Go to Previous Word Camel Case"));
- registerAction(GOTO_NEXT_WORD_CAMEL_CASE,
- [] (TextEditorWidget *w) { w->gotoNextWordCamelCase(); }, false, Tr::tr("Go to Next Word Camel Case"));
-
- // register GOTO actions with selection
- registerAction(GOTO_LINE_START_WITH_SELECTION,
- [] (TextEditorWidget *w) { w->gotoLineStartWithSelection(); }, true, Tr::tr("Go to Line Start with Selection"));
- registerAction(GOTO_LINE_END_WITH_SELECTION,
- [] (TextEditorWidget *w) { w->gotoLineEndWithSelection(); }, true, Tr::tr("Go to Line End with Selection"));
- registerAction(GOTO_NEXT_LINE_WITH_SELECTION,
- [] (TextEditorWidget *w) { w->gotoNextLineWithSelection(); }, true, Tr::tr("Go to Next Line with Selection"));
- registerAction(GOTO_PREVIOUS_LINE_WITH_SELECTION,
- [] (TextEditorWidget *w) { w->gotoPreviousLineWithSelection(); }, true, Tr::tr("Go to Previous Line with Selection"));
- registerAction(GOTO_PREVIOUS_CHARACTER_WITH_SELECTION,
- [] (TextEditorWidget *w) { w->gotoPreviousCharacterWithSelection(); }, true, Tr::tr("Go to Previous Character with Selection"));
- registerAction(GOTO_NEXT_CHARACTER_WITH_SELECTION,
- [] (TextEditorWidget *w) { w->gotoNextCharacterWithSelection(); }, true, Tr::tr("Go to Next Character with Selection"));
- registerAction(GOTO_PREVIOUS_WORD_WITH_SELECTION,
- [] (TextEditorWidget *w) { w->gotoPreviousWordWithSelection(); }, true, Tr::tr("Go to Previous Word with Selection"));
- registerAction(GOTO_NEXT_WORD_WITH_SELECTION,
- [] (TextEditorWidget *w) { w->gotoNextWordWithSelection(); }, true, Tr::tr("Go to Next Word with Selection"));
- registerAction(GOTO_PREVIOUS_WORD_CAMEL_CASE_WITH_SELECTION,
- [] (TextEditorWidget *w) { w->gotoPreviousWordCamelCaseWithSelection(); }, false, Tr::tr("Go to Previous Word Camel Case with Selection"));
- registerAction(GOTO_NEXT_WORD_CAMEL_CASE_WITH_SELECTION,
- [] (TextEditorWidget *w) { w->gotoNextWordCamelCaseWithSelection(); }, false, Tr::tr("Go to Next Word Camel Case with Selection"));
-
- // Collect additional modifying actions so we can check for them inside a readonly file
- // and disable them
- m_modifyingActions << m_autoIndentAction;
- m_modifyingActions << m_autoFormatAction;
- m_modifyingActions << m_unCommentSelectionAction;
-
- updateOptionalActions();
-}
-
-void TextEditorActionHandlerPrivate::updateActions()
-{
- bool isWritable = m_currentEditorWidget && !m_currentEditorWidget->isReadOnly();
- for (QAction *a : std::as_const(m_modifyingActions))
- a->setEnabled(isWritable);
- m_unCommentSelectionAction->setEnabled((m_optionalActions & TextEditorActionHandler::UnCommentSelection) && isWritable);
- m_visualizeWhitespaceAction->setEnabled(m_currentEditorWidget);
- if (TextEditorSettings::fontSettings().relativeLineSpacing() == 100) {
- m_textWrappingAction->setEnabled(m_currentEditorWidget);
- } else {
- m_textWrappingAction->setEnabled(false);
- m_textWrappingAction->setChecked(false);
- }
- if (m_currentEditorWidget) {
- m_visualizeWhitespaceAction->setChecked(
- m_currentEditorWidget->displaySettings().m_visualizeWhitespace);
- m_textWrappingAction->setChecked(m_currentEditorWidget->displaySettings().m_textWrapping);
- }
-
- bool canRedo = false;
- bool canUndo = false;
- bool canCopy = false;
-
- if (m_currentEditor && m_currentEditor->document()
- && m_currentEditor->document()->id() == m_editorId) {
- canRedo = m_canRedoCallback ? m_canRedoCallback(m_currentEditor) : false;
- canUndo = m_canUndoCallback ? m_canUndoCallback(m_currentEditor) : false;
-
- if (m_currentEditorWidget) {
- canRedo = m_canRedoCallback ? canRedo
- : m_currentEditorWidget->document()->isRedoAvailable();
- canUndo = m_canUndoCallback ? canUndo
- : m_currentEditorWidget->document()->isUndoAvailable();
- canCopy = m_currentEditorWidget->textCursor().hasSelection();
- }
- }
-
- updateRedoAction(canRedo);
- updateUndoAction(canUndo);
- updateCopyAction(canCopy);
-
- updateOptionalActions();
-}
-
-void TextEditorActionHandlerPrivate::updateOptionalActions()
-{
- const uint optionalActions = m_currentEditorWidget ? m_currentEditorWidget->optionalActions()
- : m_optionalActions;
- m_followSymbolAction->setEnabled(
- optionalActions & TextEditorActionHandler::FollowSymbolUnderCursor);
- m_followSymbolInNextSplitAction->setEnabled(
- optionalActions & TextEditorActionHandler::FollowSymbolUnderCursor);
- m_followToTypeAction->setEnabled(
- optionalActions & TextEditorActionHandler::FollowTypeUnderCursor);
- m_followToTypeInNextSplitAction->setEnabled(
- optionalActions & TextEditorActionHandler::FollowTypeUnderCursor);
- m_findUsageAction->setEnabled(
- optionalActions & TextEditorActionHandler::FindUsage);
- m_jumpToFileAction->setEnabled(
- optionalActions & TextEditorActionHandler::JumpToFileUnderCursor);
- m_jumpToFileInNextSplitAction->setEnabled(
- optionalActions & TextEditorActionHandler::JumpToFileUnderCursor);
- m_unfoldAllAction->setEnabled(
- optionalActions & TextEditorActionHandler::UnCollapseAll);
- m_renameSymbolAction->setEnabled(
- optionalActions & TextEditorActionHandler::RenameSymbol);
- m_openCallHierarchyAction->setEnabled(
- optionalActions & TextEditorActionHandler::CallHierarchy);
- m_openTypeHierarchyAction->setEnabled(
- optionalActions & TextEditorActionHandler::TypeHierarchy);
-
- bool formatEnabled = (optionalActions & TextEditorActionHandler::Format)
- && m_currentEditorWidget && !m_currentEditorWidget->isReadOnly();
- m_autoIndentAction->setEnabled(formatEnabled);
- m_autoFormatAction->setEnabled(formatEnabled);
-}
-
-void TextEditorActionHandlerPrivate::updateRedoAction(bool on)
-{
- m_redoAction->setEnabled(on);
-}
-
-void TextEditorActionHandlerPrivate::updateUndoAction(bool on)
-{
- m_undoAction->setEnabled(on);
-}
-
-void TextEditorActionHandlerPrivate::updateCopyAction(bool hasCopyableText)
-{
- if (m_cutAction)
- m_cutAction->setEnabled(hasCopyableText && m_currentEditorWidget
- && !m_currentEditorWidget->isReadOnly());
- if (m_copyAction)
- m_copyAction->setEnabled(hasCopyableText);
- if (m_copyHtmlAction)
- m_copyHtmlAction->setEnabled(hasCopyableText);
-}
-
-void TextEditorActionHandlerPrivate::updateCurrentEditor(IEditor *editor)
-{
- if (m_currentEditorWidget)
- m_currentEditorWidget->disconnect(this);
- m_currentEditorWidget = nullptr;
-
- m_currentEditor = editor;
-
- if (editor && editor->document()->id() == m_editorId) {
- m_currentEditorWidget = m_findTextWidget(editor);
- if (m_currentEditorWidget) {
- connect(m_currentEditorWidget, &QPlainTextEdit::undoAvailable,
- this, &TextEditorActionHandlerPrivate::updateUndoAction);
- connect(m_currentEditorWidget, &QPlainTextEdit::redoAvailable,
- this, &TextEditorActionHandlerPrivate::updateRedoAction);
- connect(m_currentEditorWidget, &QPlainTextEdit::copyAvailable,
- this, &TextEditorActionHandlerPrivate::updateCopyAction);
- connect(m_currentEditorWidget, &TextEditorWidget::readOnlyChanged,
- this, &TextEditorActionHandlerPrivate::updateActions);
- connect(m_currentEditorWidget, &TextEditorWidget::optionalActionMaskChanged,
- this, &TextEditorActionHandlerPrivate::updateOptionalActions);
- }
- }
- updateActions();
-}
-
-} // namespace Internal
-
-TextEditorActionHandler::TextEditorActionHandler(Utils::Id editorId,
- Utils::Id contextId,
- uint optionalActions,
- const TextEditorWidgetResolver &resolver)
- : d(new Internal::TextEditorActionHandlerPrivate(editorId, contextId, optionalActions))
-{
- if (resolver)
- d->m_findTextWidget = resolver;
- else
- d->m_findTextWidget = TextEditorWidget::fromEditor;
-}
-
-uint TextEditorActionHandler::optionalActions() const
-{
- return d->m_optionalActions;
-}
-
-TextEditorActionHandler::~TextEditorActionHandler()
-{
- delete d;
-}
-
-void TextEditorActionHandler::updateCurrentEditor()
-{
- d->updateCurrentEditor(EditorManager::currentEditor());
-}
-
-void TextEditorActionHandler::updateActions()
-{
- d->updateActions();
-}
-
-void TextEditorActionHandler::setCanUndoCallback(const Predicate &callback)
-{
- d->m_canUndoCallback = callback;
-}
-
-void TextEditorActionHandler::setCanRedoCallback(const Predicate &callback)
-{
- d->m_canRedoCallback = callback;
-}
-
-void TextEditorActionHandler::setUnhandledCallback(const UnhandledCallback &callback)
-{
- d->m_unhandledCallback = callback;
-}
-
-} // namespace TextEditor
diff --git a/src/plugins/texteditor/texteditoractionhandler.h b/src/plugins/texteditor/texteditoractionhandler.h
deleted file mode 100644
index ce969b7b6f..0000000000
--- a/src/plugins/texteditor/texteditoractionhandler.h
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-#pragma once
-
-#include "texteditor_global.h"
-
-#include <utils/id.h>
-
-#include <QObject>
-
-#include <functional>
-
-namespace Core {
-class IEditor;
-}
-
-namespace TextEditor {
-class TextEditorWidget;
-
-namespace Internal { class TextEditorActionHandlerPrivate; }
-
-// Redirects slots from global actions to the respective editor.
-
-class TEXTEDITOR_EXPORT TextEditorActionHandler final
-{
- TextEditorActionHandler(const TextEditorActionHandler &) = delete;
- TextEditorActionHandler &operator=(const TextEditorActionHandler &) = delete;
-
-public:
- enum OptionalActionsMask {
- None = 0,
- Format = 1,
- UnCommentSelection = 2,
- UnCollapseAll = 4,
- FollowSymbolUnderCursor = 8,
- FollowTypeUnderCursor = 16,
- JumpToFileUnderCursor = 32,
- RenameSymbol = 64,
- FindUsage = 128,
- CallHierarchy = 256,
- TypeHierarchy = 512,
- };
- using TextEditorWidgetResolver = std::function<TextEditorWidget *(Core::IEditor *)>;
-
- TextEditorActionHandler(Utils::Id editorId,
- Utils::Id contextId,
- uint optionalActions = None,
- const TextEditorWidgetResolver &resolver = {});
-
- uint optionalActions() const;
- ~TextEditorActionHandler();
-
- void updateCurrentEditor();
- void updateActions();
-
- using Predicate = std::function<bool(Core::IEditor *editor)>;
-
- void setCanUndoCallback(const Predicate &callback);
- void setCanRedoCallback(const Predicate &callback);
-
- using UnhandledCallback = std::function<void(Utils::Id commandId, Core::IEditor *editor)>;
- void setUnhandledCallback(const UnhandledCallback &callback);
-
-private:
- Internal::TextEditorActionHandlerPrivate *d;
-};
-
-} // namespace TextEditor
diff --git a/src/plugins/texteditor/texteditorplugin.cpp b/src/plugins/texteditor/texteditorplugin.cpp
index d279b6254f..0852da2ca8 100644
--- a/src/plugins/texteditor/texteditorplugin.cpp
+++ b/src/plugins/texteditor/texteditorplugin.cpp
@@ -85,6 +85,7 @@ public:
void updateCurrentSelection(const QString &text);
void createStandardContextMenu();
+ void createEditorCommands();
};
void TextEditorPlugin::initialize()
@@ -174,6 +175,7 @@ void TextEditorPlugin::initialize()
Tr::tr("Text", "SnippetProvider"));
createStandardContextMenu();
+ createEditorCommands();
#ifdef WITH_TESTS
addTestCreator(createCodeAssistTests);
@@ -349,6 +351,359 @@ void TextEditorPlugin::createStandardContextMenu()
add(Constants::SWITCH_UTF8BOM, Constants::G_BOM);
}
+void TextEditorPlugin::createEditorCommands()
+{
+ using namespace Core::Constants;
+ ActionBuilder(this, UNDO).setText(Tr::tr("&Undo")).setScriptable(true);
+ ActionBuilder(this, REDO).setText(Tr::tr("&Redo")).setScriptable(true);
+ ActionBuilder(this, COPY).setScriptable(true);
+ ActionBuilder(this, CUT).setScriptable(true);
+ ActionBuilder(this, PASTE).setScriptable(true);
+ ActionBuilder(this, SELECTALL).setScriptable(true);
+ ActionBuilder(this, GOTO);
+ ActionBuilder(this, PRINT);
+ ActionBuilder(this, DELETE_LINE).setText(Tr::tr("Delete &Line")).setScriptable(true);
+ ActionBuilder(this, DELETE_END_OF_LINE)
+ .setText(Tr::tr("Delete Line from Cursor On"))
+ .setScriptable(true);
+ ActionBuilder(this, DELETE_END_OF_WORD)
+ .setText(Tr::tr("Delete Word from Cursor On"))
+ .setScriptable(true);
+ ActionBuilder(this, DELETE_END_OF_WORD_CAMEL_CASE)
+ .setText(Tr::tr("Delete Word Camel Case from Cursor On"))
+ .setScriptable(true);
+ ActionBuilder(this, DELETE_START_OF_LINE)
+ .setText(Tr::tr("Delete Line up to Cursor"))
+ .setScriptable(true)
+ .setDefaultKeySequence(Tr::tr("Ctrl+Backspace"), {});
+ ActionBuilder(this, DELETE_START_OF_WORD)
+ .setText(Tr::tr("Delete Word up to Cursor"))
+ .setScriptable(true);
+ ActionBuilder(this, DELETE_START_OF_WORD_CAMEL_CASE)
+ .setText(Tr::tr("Delete Word Camel Case up to Cursor"))
+ .setScriptable(true);
+ ActionBuilder(this, GOTO_BLOCK_START_WITH_SELECTION)
+ .setText(Tr::tr("Go to Block Start with Selection"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+{")));
+ ActionBuilder(this, GOTO_BLOCK_END_WITH_SELECTION)
+ .setText(Tr::tr("Go to Block End with Selection"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+}")));
+ ActionBuilder(this, MOVE_LINE_UP)
+ .setText(Tr::tr("Move Line Up"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+Shift+Up")));
+ ActionBuilder(this, MOVE_LINE_DOWN)
+ .setText(Tr::tr("Move Line Down"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+Shift+Down")));
+ ActionBuilder(this, COPY_LINE_UP)
+ .setText(Tr::tr("Copy Line Up"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+Alt+Up")));
+ ActionBuilder(this, COPY_LINE_DOWN)
+ .setText(Tr::tr("Copy Line Down"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+Alt+Down")));
+ ActionBuilder(this, JOIN_LINES)
+ .setText(Tr::tr("Join Lines"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+J")));
+ ActionBuilder(this, INSERT_LINE_ABOVE)
+ .setText(Tr::tr("Insert Line Above Current Line"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+Shift+Return")));
+ ActionBuilder(this, INSERT_LINE_BELOW)
+ .setText(Tr::tr("Insert Line Below Current Line"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+Return")));
+ ActionBuilder(this, SWITCH_UTF8BOM)
+ .setText(Tr::tr("Delete Word up to Cursor"))
+ .setScriptable(true);
+ ActionBuilder(this, INDENT)
+ .setText(Tr::tr("Indent"))
+ .setScriptable(true);
+ ActionBuilder(this, UNINDENT)
+ .setText(Tr::tr("Unindent"))
+ .setScriptable(true);
+ ActionBuilder(this, FOLLOW_SYMBOL_UNDER_CURSOR)
+ .setText(Tr::tr("Follow Symbol Under Cursor"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Qt::Key_F2));
+ ActionBuilder(this, FOLLOW_SYMBOL_UNDER_CURSOR_IN_NEXT_SPLIT)
+ .setText(Tr::tr("Follow Symbol Under Cursor in Next Split"))
+ .setScriptable(true)
+ .setDefaultKeySequence(Tr::tr("Meta+E, F2"), Tr::tr("Ctrl+E, F2"));
+ ActionBuilder(this, FOLLOW_SYMBOL_TO_TYPE)
+ .setText(Tr::tr("Follow Type Under Cursor"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+Shift+F2")));
+ ActionBuilder(this, FOLLOW_SYMBOL_TO_TYPE_IN_NEXT_SPLIT)
+ .setText(Tr::tr("Follow Type Under Cursor in Next Split"))
+ .setScriptable(true)
+ .setDefaultKeySequence(Tr::tr("Meta+E, Shift+F2"), Tr::tr("Ctrl+E, Ctrl+Shift+F2"));
+ ActionBuilder(this, FIND_USAGES)
+ .setText(Tr::tr("Find References to Symbol Under Cursor"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+Shift+U")));
+ ActionBuilder(this, RENAME_SYMBOL)
+ .setText(Tr::tr("Rename Symbol Under Cursor"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+Shift+R")));
+ ActionBuilder(this, JUMP_TO_FILE_UNDER_CURSOR)
+ .setText(Tr::tr("Jump to File Under Cursor"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Qt::Key_F2));
+ ActionBuilder(this, JUMP_TO_FILE_UNDER_CURSOR_IN_NEXT_SPLIT)
+ .setText(Tr::tr("Jump to File Under Cursor in Next Split"))
+ .setScriptable(true)
+ .setDefaultKeySequence(Tr::tr("Meta+E, F2"), Tr::tr("Ctrl+E, F2"));
+ ActionBuilder(this, OPEN_CALL_HIERARCHY)
+ .setText(Tr::tr("Open Call Hierarchy"))
+ .setScriptable(true);
+ ActionBuilder(this, OPEN_TYPE_HIERARCHY)
+ .setText(Tr::tr("Open Type Hierarchy"))
+ .setScriptable(true)
+ .setDefaultKeySequence(Tr::tr("Meta+Shift+T"), Tr::tr("Ctrl+Shift+T"));
+ ActionBuilder(this, VIEW_PAGE_UP)
+ .setText(Tr::tr("Move the View a Page Up and Keep the Cursor Position"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+PgUp")));
+ ActionBuilder(this, VIEW_PAGE_DOWN)
+ .setText(Tr::tr("Move the View a Page Down and Keep the Cursor Position"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+PgDown")));
+ ActionBuilder(this, VIEW_LINE_UP)
+ .setText(Tr::tr("Move the View a Line Up and Keep the Cursor Position"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+Up")));
+ ActionBuilder(this, VIEW_LINE_DOWN)
+ .setText(Tr::tr("Move the View a Line Down and Keep the Cursor Position"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+Down")));
+
+ ActionManager::actionContainer(M_EDIT);
+ ActionBuilder(this, SELECT_ENCODING)
+ .setText(Tr::tr("Select Encoding..."))
+ .setScriptable(false)
+ .addToContainer(M_EDIT, G_EDIT_OTHER);
+ ActionBuilder(this, CIRCULAR_PASTE)
+ .setText(Tr::tr("Paste from Clipboard History"))
+ .setScriptable(false)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+Shift+V")))
+ .addToContainer(M_EDIT, G_EDIT_COPYPASTE);
+ ActionBuilder(this, NO_FORMAT_PASTE)
+ .setText(Tr::tr("Paste Without Formatting"))
+ .setScriptable(false)
+ .setDefaultKeySequence(Tr::tr("Ctrl+Alt+Shift+V"), QString())
+ .addToContainer(M_EDIT, G_EDIT_COPYPASTE);
+
+ ActionManager::actionContainer(M_EDIT_ADVANCED);
+ ActionBuilder(this, AUTO_INDENT_SELECTION)
+ .setText(Tr::tr("Auto-&indent Selection"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+I")))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_FORMAT);
+ ActionBuilder(this, AUTO_FORMAT_SELECTION)
+ .setText(Tr::tr("Auto-&format Selection"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+;")))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_FORMAT);
+ ActionBuilder(this, REWRAP_PARAGRAPH)
+ .setText(Tr::tr("&Rewrap Paragraph"))
+ .setScriptable(true)
+ .setDefaultKeySequence(Tr::tr("Meta+E, R"), Tr::tr("Ctrl+E, R"))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_FORMAT);
+ ActionBuilder(this, VISUALIZE_WHITESPACE)
+ .setText(Tr::tr("&Visualize Whitespace"))
+ .setScriptable(false)
+ .setDefaultKeySequence(Tr::tr("Meta+E, Meta+V"), Tr::tr("Ctrl+E, Ctrl+V"))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_FORMAT);
+ ActionBuilder(this, CLEAN_WHITESPACE)
+ .setText(Tr::tr("Clean Whitespace"))
+ .setScriptable(true)
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_FORMAT);
+ ActionBuilder(this, TEXT_WRAPPING)
+ .setText(Tr::tr("Enable Text &Wrapping"))
+ .setScriptable(true)
+ .setDefaultKeySequence(Tr::tr("Meta+E, Meta+W"), Tr::tr("Ctrl+E, Ctrl+W"))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_FORMAT)
+ .setCheckable(true);
+ ActionBuilder(this, UN_COMMENT_SELECTION)
+ .setText(Tr::tr("Toggle Comment &Selection"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+/")))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_FORMAT);
+ ActionBuilder(this, CUT_LINE)
+ .setText(Tr::tr("Cut &Line"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Shift+Del")))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_TEXT);
+ ActionBuilder(this, COPY_LINE)
+ .setText(Tr::tr("Copy &Line"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+Ins")))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_TEXT);
+ ActionBuilder(this, COPY_WITH_HTML)
+ .setText(Tr::tr("Copy With Highlighting"))
+ .setScriptable(true)
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_TEXT);
+ ActionBuilder(this, ADD_CURSORS_TO_LINE_ENDS)
+ .setText(Tr::tr("Create Cursors at Selected Line Ends"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Alt+Shift+I")))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_TEXT);
+ ActionBuilder(this, ADD_SELECT_NEXT_FIND_MATCH)
+ .setText(Tr::tr("Add Next Occurrence to Selection"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+D")))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_TEXT);
+ ActionBuilder(this, DUPLICATE_SELECTION)
+ .setText(Tr::tr("&Duplicate Selection"))
+ .setScriptable(true)
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_TEXT);
+ ActionBuilder(this, DUPLICATE_SELECTION_AND_COMMENT)
+ .setText(Tr::tr("&Duplicate Selection and Comment"))
+ .setScriptable(true)
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_TEXT);
+ ActionBuilder(this, UPPERCASE_SELECTION)
+ .setText(Tr::tr("Uppercase Selection"))
+ .setScriptable(true)
+ .setDefaultKeySequence(Tr::tr("Meta+Shift+U"), Tr::tr("Alt+Shift+U"))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_TEXT);
+ ActionBuilder(this, LOWERCASE_SELECTION)
+ .setText(Tr::tr("Lowercase Selection"))
+ .setScriptable(true)
+ .setDefaultKeySequence(Tr::tr("Meta+U"), Tr::tr("Alt+U"))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_TEXT);
+ ActionBuilder(this, SORT_LINES)
+ .setText(Tr::tr("Sort Lines"))
+ .setScriptable(true)
+ .setDefaultKeySequence(Tr::tr("Meta+Shift+S"), Tr::tr("Alt+Shift+S"))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_TEXT);
+ ActionBuilder(this, FOLD)
+ .setText(Tr::tr("Fold"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+<")))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_COLLAPSING);
+ ActionBuilder(this, UNFOLD)
+ .setText(Tr::tr("Unfold"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+>")))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_COLLAPSING);
+ ActionBuilder(this, UNFOLD_ALL)
+ .setText(Tr::tr("Toggle &Fold All"))
+ .setScriptable(true)
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_COLLAPSING);
+ ActionBuilder(this, INCREASE_FONT_SIZE)
+ .setText(Tr::tr("Increase Font Size"))
+ .setScriptable(false)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl++")))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_FONT);
+ ActionBuilder(this, DECREASE_FONT_SIZE)
+ .setText(Tr::tr("Decrease Font Size"))
+ .setScriptable(false)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+-")))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_FONT);
+ ActionBuilder(this, RESET_FONT_SIZE)
+ .setText(Tr::tr("Reset Font Size"))
+ .setScriptable(false)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+0")))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_FONT);
+ ActionBuilder(this, GOTO_BLOCK_START)
+ .setText(Tr::tr("Go to Block Start"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+[")))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_BLOCKS);
+ ActionBuilder(this, GOTO_BLOCK_END)
+ .setText(Tr::tr("Go to Block End"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+]")))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_BLOCKS);
+ ActionBuilder(this, SELECT_BLOCK_UP)
+ .setText(Tr::tr("Select Block Up"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+U")))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_BLOCKS);
+ ActionBuilder(this, SELECT_BLOCK_DOWN)
+ .setText(Tr::tr("Select Block Down"))
+ .setScriptable(true)
+ .setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+Shift+Alt+U")))
+ .addToContainer(M_EDIT_ADVANCED, G_EDIT_BLOCKS);
+ ActionBuilder(this, SELECT_WORD_UNDER_CURSOR)
+ .setText(Tr::tr("Select Word Under Cursor"))
+ .setScriptable(true);
+
+ ActionBuilder(this, GOTO_DOCUMENT_START)
+ .setText(Tr::tr("Go to Document Start"))
+ .setScriptable(true);
+ ActionBuilder(this, GOTO_DOCUMENT_END)
+ .setText(Tr::tr("Go to Document End"))
+ .setScriptable(true);
+ ActionBuilder(this, GOTO_LINE_START)
+ .setText(Tr::tr("Go to Line Start"))
+ .setScriptable(true);
+ ActionBuilder(this, GOTO_LINE_END)
+ .setText(Tr::tr("Go to Line End"))
+ .setScriptable(true);
+ ActionBuilder(this, GOTO_NEXT_LINE)
+ .setText(Tr::tr("Go to Next Line"))
+ .setScriptable(true);
+ ActionBuilder(this, GOTO_PREVIOUS_LINE)
+ .setText(Tr::tr("Go to Previous Line"))
+ .setScriptable(true);
+ ActionBuilder(this, GOTO_PREVIOUS_CHARACTER)
+ .setText(Tr::tr("Go to Previous Character"))
+ .setScriptable(true);
+ ActionBuilder(this, GOTO_NEXT_CHARACTER)
+ .setText(Tr::tr("Go to Next Character"))
+ .setScriptable(true);
+ ActionBuilder(this, GOTO_PREVIOUS_WORD)
+ .setText(Tr::tr("Go to Previous Word"))
+ .setScriptable(true);
+ ActionBuilder(this, GOTO_NEXT_WORD)
+ .setText(Tr::tr("Go to Next Word"))
+ .setScriptable(true);
+ ActionBuilder(this, GOTO_PREVIOUS_WORD_CAMEL_CASE)
+ .setText(Tr::tr("Go to Previous Word (Camel Case)"))
+ .setScriptable(true);
+ ActionBuilder(this, GOTO_NEXT_WORD_CAMEL_CASE)
+ .setText(Tr::tr("Go to Next Word (Camel Case)"))
+ .setScriptable(true);
+
+ ActionBuilder(this, GOTO_LINE_START_WITH_SELECTION)
+ .setText(Tr::tr("Go to Line Start with Selection"))
+ .setScriptable(true);
+ ActionBuilder(this, GOTO_LINE_END_WITH_SELECTION)
+ .setText(Tr::tr("Go to Line End with Selection"))
+ .setScriptable(true);
+ ActionBuilder(this, GOTO_NEXT_LINE_WITH_SELECTION)
+ .setText(Tr::tr("Go to Next Line with Selection"))
+ .setScriptable(true);
+ ActionBuilder(this, GOTO_PREVIOUS_LINE_WITH_SELECTION)
+ .setText(Tr::tr("Go to Previous Line with Selection"))
+ .setScriptable(true);
+ ActionBuilder(this, GOTO_PREVIOUS_CHARACTER_WITH_SELECTION)
+ .setText(Tr::tr("Go to Previous Character with Selection"))
+ .setScriptable(true);
+ ActionBuilder(this, GOTO_NEXT_CHARACTER_WITH_SELECTION)
+ .setText(Tr::tr("Go to Next Character with Selection"))
+ .setScriptable(true);
+ ActionBuilder(this, GOTO_PREVIOUS_WORD_WITH_SELECTION)
+ .setText(Tr::tr("Go to Previous Word with Selection"))
+ .setScriptable(true);
+ ActionBuilder(this, GOTO_NEXT_WORD_WITH_SELECTION)
+ .setText(Tr::tr("Go to Next Word with Selection"))
+ .setScriptable(true);
+ ActionBuilder(this, GOTO_PREVIOUS_WORD_CAMEL_CASE_WITH_SELECTION)
+ .setText(Tr::tr("Go to Previous Word (Camel Case) with Selection"))
+ .setScriptable(true);
+ ActionBuilder(this, GOTO_NEXT_WORD_CAMEL_CASE_WITH_SELECTION)
+ .setText(Tr::tr("Go to Next Word (Camel Case) with Selection"))
+ .setScriptable(true);
+}
+
} // namespace TextEditor::Internal
#include "texteditorplugin.moc"