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 <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2020-06-15 12:40:08 +02:00
parent bdc8411af5
commit 5f91985931
3 changed files with 27 additions and 7 deletions

View File

@@ -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)

View File

@@ -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;

View File

@@ -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();
}