From 5f9198593105c6a5e1bef1dc77a4447ea5a2c704 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 15 Jun 2020 12:40:08 +0200 Subject: [PATCH] Editor: enable optional actions per editor Use an additional action mask to enable actions like find usage and rename symbol per editor instance. Change-Id: Iabee1820d0f3c156ad30ba760bfce9f6181045e6 Reviewed-by: Christian Stenger --- src/plugins/texteditor/texteditor.cpp | 11 +++++++++++ src/plugins/texteditor/texteditor.h | 4 ++++ .../texteditor/texteditoractionhandler.cpp | 19 ++++++++++++------- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 91c44b9d445..8b363a08488 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -628,6 +628,7 @@ public: QComboBox *m_fileLineEnding = nullptr; QAction *m_fileLineEndingAction = nullptr; + uint m_optionalActionMask = TextEditorActionHandler::None; bool m_contentsChanged = false; bool m_lastCursorChangeWasInteresting = false; @@ -7827,6 +7828,16 @@ void TextEditorWidget::appendStandardContextMenuActions(QMenu *menu) } } +uint TextEditorWidget::optionalActionMask() +{ + return d->m_optionalActionMask; +} + +void TextEditorWidget::addOptionalActions(uint optionalActionMask) +{ + d->m_optionalActionMask |= optionalActionMask; + emit optionalActionMaskChanged(); +} BaseTextEditor::BaseTextEditor() : d(new BaseTextEditorPrivate) diff --git a/src/plugins/texteditor/texteditor.h b/src/plugins/texteditor/texteditor.h index ad95abe3cdf..b2fb6110aab 100644 --- a/src/plugins/texteditor/texteditor.h +++ b/src/plugins/texteditor/texteditor.h @@ -204,6 +204,9 @@ public: void appendStandardContextMenuActions(QMenu *menu); + uint optionalActionMask(); + void addOptionalActions(uint optionalActionMask); + void setAutoCompleter(AutoCompleter *autoCompleter); AutoCompleter *autoCompleter() const; @@ -492,6 +495,7 @@ signals: bool resolveTarget, bool inNextSplit); void requestUsages(const QTextCursor &cursor); void requestRename(const QTextCursor &cursor); + void optionalActionMaskChanged(); protected: QTextBlock blockForVisibleRow(int row) const; diff --git a/src/plugins/texteditor/texteditoractionhandler.cpp b/src/plugins/texteditor/texteditoractionhandler.cpp index b04e89af323..23f0c640e98 100644 --- a/src/plugins/texteditor/texteditoractionhandler.cpp +++ b/src/plugins/texteditor/texteditoractionhandler.cpp @@ -543,20 +543,23 @@ void TextEditorActionHandlerPrivate::updateActions() void TextEditorActionHandlerPrivate::updateOptionalActions() { + uint optionalActions = m_optionalActions; + if (m_currentEditorWidget) + optionalActions |= m_currentEditorWidget->optionalActionMask(); m_followSymbolAction->setEnabled( - m_optionalActions & TextEditorActionHandler::FollowSymbolUnderCursor); + optionalActions & TextEditorActionHandler::FollowSymbolUnderCursor); m_followSymbolInNextSplitAction->setEnabled( - m_optionalActions & TextEditorActionHandler::FollowSymbolUnderCursor); + optionalActions & TextEditorActionHandler::FollowSymbolUnderCursor); m_jumpToFileAction->setEnabled( - m_optionalActions & TextEditorActionHandler::JumpToFileUnderCursor); + optionalActions & TextEditorActionHandler::JumpToFileUnderCursor); m_jumpToFileInNextSplitAction->setEnabled( - m_optionalActions & TextEditorActionHandler::JumpToFileUnderCursor); + optionalActions & TextEditorActionHandler::JumpToFileUnderCursor); m_unfoldAllAction->setEnabled( - m_optionalActions & TextEditorActionHandler::UnCollapseAll); + optionalActions & TextEditorActionHandler::UnCollapseAll); m_renameSymbolAction->setEnabled( - m_optionalActions & TextEditorActionHandler::RenameSymbol); + optionalActions & TextEditorActionHandler::RenameSymbol); - bool formatEnabled = (m_optionalActions & TextEditorActionHandler::Format) + bool formatEnabled = (optionalActions & TextEditorActionHandler::Format) && m_currentEditorWidget && !m_currentEditorWidget->isReadOnly(); m_autoIndentAction->setEnabled(formatEnabled); m_autoFormatAction->setEnabled(formatEnabled); @@ -599,6 +602,8 @@ void TextEditorActionHandlerPrivate::updateCurrentEditor(Core::IEditor *editor) this, &TextEditorActionHandlerPrivate::updateCopyAction); connect(editorWidget, &TextEditorWidget::readOnlyChanged, this, &TextEditorActionHandlerPrivate::updateActions); + connect(editorWidget, &TextEditorWidget::optionalActionMaskChanged, + this, &TextEditorActionHandlerPrivate::updateOptionalActions); } updateActions(); }