From 7ae82b9f9453251861394ce9bec95d704353f83b Mon Sep 17 00:00:00 2001 From: Konstantin Tokarev <annulen@yandex.ru> Date: Tue, 27 Mar 2012 23:18:46 +0400 Subject: [PATCH] Added TextEditor commands FollowSymbol and JumpToFile. Most of editors have "jump to file" or "follow symbol" actions. This patch reduces amount of related boilerplate code. New actions are made optional to prevent shortcut clash (both use F2). Change-Id: I2af580ed9d6789df25f4487ba001f3b83887c504 Reviewed-by: hjk <qthjk@ovi.com> --- .../cmakeprojectmanager/cmakeeditor.cpp | 5 ----- src/plugins/cmakeprojectmanager/cmakeeditor.h | 2 -- .../cmakeprojectmanager/cmakeeditorfactory.cpp | 17 +++-------------- .../cmakeprojectmanager/cmakeeditorfactory.h | 3 --- .../cmakeprojectconstants.h | 1 - src/plugins/cppeditor/cppeditor.cpp | 5 ----- src/plugins/cppeditor/cppeditor.h | 1 - src/plugins/cppeditor/cppeditorconstants.h | 1 - src/plugins/cppeditor/cppplugin.cpp | 18 +++--------------- src/plugins/cppeditor/cppplugin.h | 1 - src/plugins/fakevim/fakevimplugin.cpp | 4 +--- src/plugins/qmljseditor/qmljseditor.cpp | 5 ----- src/plugins/qmljseditor/qmljseditor.h | 1 - src/plugins/qmljseditor/qmljseditorconstants.h | 1 - src/plugins/qmljseditor/qmljseditorplugin.cpp | 16 +++------------- src/plugins/qmljseditor/qmljseditorplugin.h | 1 - .../qt4projectmanager/profileeditor.cpp | 5 ----- src/plugins/qt4projectmanager/profileeditor.h | 1 - .../qt4projectmanagerconstants.h | 1 - .../qt4projectmanagerplugin.cpp | 18 +++--------------- .../qt4projectmanagerplugin.h | 1 - src/plugins/texteditor/basetexteditor.cpp | 5 +++++ src/plugins/texteditor/basetexteditor.h | 2 ++ .../texteditor/texteditoractionhandler.cpp | 15 +++++++++++++++ .../texteditor/texteditoractionhandler.h | 7 ++++++- src/plugins/texteditor/texteditorconstants.h | 2 ++ 26 files changed, 43 insertions(+), 96 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakeeditor.cpp b/src/plugins/cmakeprojectmanager/cmakeeditor.cpp index 14be95994da..0f970bfef69 100644 --- a/src/plugins/cmakeprojectmanager/cmakeeditor.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeeditor.cpp @@ -180,11 +180,6 @@ void CMakeEditorWidget::setFontSettings(const TextEditor::FontSettings &fs) highlighter->rehighlight(); } -void CMakeEditorWidget::jumpToFile() -{ - openLink(findLinkAt(textCursor())); -} - static bool isValidFileNameChar(const QChar &c) { if (c.isLetterOrNumber() diff --git a/src/plugins/cmakeprojectmanager/cmakeeditor.h b/src/plugins/cmakeprojectmanager/cmakeeditor.h index 990ececf66d..97fe2529f93 100644 --- a/src/plugins/cmakeprojectmanager/cmakeeditor.h +++ b/src/plugins/cmakeprojectmanager/cmakeeditor.h @@ -83,8 +83,6 @@ public: CMakeEditorFactory *factory() { return m_factory; } TextEditor::TextEditorActionHandler *actionHandler() const { return m_ah; } - void jumpToFile(); - Link findLinkAt(const QTextCursor &cursor, bool resolveTarget = true); diff --git a/src/plugins/cmakeprojectmanager/cmakeeditorfactory.cpp b/src/plugins/cmakeprojectmanager/cmakeeditorfactory.cpp index 17a9ccec1c4..f054f6f0669 100644 --- a/src/plugins/cmakeprojectmanager/cmakeeditorfactory.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeeditorfactory.cpp @@ -54,7 +54,8 @@ CMakeEditorFactory::CMakeEditorFactory(CMakeManager *manager) m_actionHandler = new TextEditorActionHandler(Constants::C_CMAKEEDITOR, - TextEditorActionHandler::UnCommentSelection); + TextEditorActionHandler::UnCommentSelection + | TextEditorActionHandler::JumpToFileUnderCursor); ICore *core = ICore::instance(); ActionManager *am = core->actionManager(); @@ -62,11 +63,7 @@ CMakeEditorFactory::CMakeEditorFactory(CMakeManager *manager) Command *cmd; Context cmakeEditorContext = Context(Constants::C_CMAKEEDITOR); - QAction *jumpToFile = new QAction(tr("Jump to File Under Cursor"), this); - cmd = am->registerAction(jumpToFile, - Constants::JUMP_TO_FILE, cmakeEditorContext); - cmd->setDefaultKeySequence(QKeySequence(Qt::Key_F2)); - connect(jumpToFile, SIGNAL(triggered()), this, SLOT(jumpToFile())); + cmd = am->command(TextEditor::Constants::JUMP_TO_FILE_UNDER_CURSOR); contextMenu->addAction(cmd); QAction *separator = new QAction(this); @@ -101,14 +98,6 @@ Core::IEditor *CMakeEditorFactory::createEditor(QWidget *parent) return rc->editor(); } -void CMakeEditorFactory::jumpToFile() -{ - Core::EditorManager *em = Core::EditorManager::instance(); - CMakeEditorWidget *editor = qobject_cast<CMakeEditorWidget*>(em->currentEditor()->widget()); - if (editor) - editor->jumpToFile(); -} - QStringList CMakeEditorFactory::mimeTypes() const { return m_mimeTypes; diff --git a/src/plugins/cmakeprojectmanager/cmakeeditorfactory.h b/src/plugins/cmakeprojectmanager/cmakeeditorfactory.h index e2d8e4ba58c..a58a4115d16 100644 --- a/src/plugins/cmakeprojectmanager/cmakeeditorfactory.h +++ b/src/plugins/cmakeprojectmanager/cmakeeditorfactory.h @@ -60,9 +60,6 @@ public: Core::IDocument *open(const QString &fileName); Core::IEditor *createEditor(QWidget *parent); -public slots: - void jumpToFile(); - private: const QStringList m_mimeTypes; CMakeManager *m_manager; diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectconstants.h b/src/plugins/cmakeprojectmanager/cmakeprojectconstants.h index 2ae0ba66b24..1b929627675 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectconstants.h +++ b/src/plugins/cmakeprojectmanager/cmakeprojectconstants.h @@ -52,7 +52,6 @@ const char M_CONTEXT[] = "CMakeEditor.ContextMenu"; // Actions const char SEPARATOR[] = "CMakeEditor.Separator"; -const char JUMP_TO_FILE[] = "CMakeEditor.JumpToFile"; } // namespace Constants } // namespace CMakeProjectManager diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index 9bea3f0d4c5..b18cc1dacb9 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -1485,11 +1485,6 @@ CPPEditorWidget::Link CPPEditorWidget::findLinkAt(const QTextCursor &cursor, return Link(); } -void CPPEditorWidget::jumpToDefinition() -{ - openLink(findLinkAt(textCursor())); -} - Symbol *CPPEditorWidget::findDefinition(Symbol *symbol, const Snapshot &snapshot) const { if (symbol->isFunction()) diff --git a/src/plugins/cppeditor/cppeditor.h b/src/plugins/cppeditor/cppeditor.h index bcdcf3e15c0..b9a75de2ce7 100644 --- a/src/plugins/cppeditor/cppeditor.h +++ b/src/plugins/cppeditor/cppeditor.h @@ -208,7 +208,6 @@ public Q_SLOTS: virtual void setTabSettings(const TextEditor::TabSettings &); void setSortedOutline(bool sort); void switchDeclarationDefinition(); - void jumpToDefinition(); void renameSymbolUnderCursor(); void renameUsages(); void findUsages(); diff --git a/src/plugins/cppeditor/cppeditorconstants.h b/src/plugins/cppeditor/cppeditorconstants.h index e2aeff9d688..6ad17f0fda5 100644 --- a/src/plugins/cppeditor/cppeditorconstants.h +++ b/src/plugins/cppeditor/cppeditorconstants.h @@ -48,7 +48,6 @@ const char SEPARATOR[] = "CppEditor.Separator"; const char SEPARATOR2[] = "CppEditor.Separator2"; const char SEPARATOR3[] = "CppEditor.Separator3"; const char SEPARATOR4[] = "CppEditor.Separator4"; -const char JUMP_TO_DEFINITION[] = "CppEditor.JumpToDefinition"; const char UPDATE_CODEMODEL[] = "CppEditor.UpdateCodeModel"; const int TYPE_HIERARCHY_PRIORITY = 700; diff --git a/src/plugins/cppeditor/cppplugin.cpp b/src/plugins/cppeditor/cppplugin.cpp index b96205e43c4..bfc49aafdfe 100644 --- a/src/plugins/cppeditor/cppplugin.cpp +++ b/src/plugins/cppeditor/cppplugin.cpp @@ -242,12 +242,7 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess cmd = am->command(Core::Id(CppTools::Constants::SWITCH_HEADER_SOURCE)); contextMenu->addAction(cmd); - QAction *jumpToDefinition = new QAction(tr("Follow Symbol Under Cursor"), this); - cmd = am->registerAction(jumpToDefinition, - Constants::JUMP_TO_DEFINITION, context, true); - cmd->setDefaultKeySequence(QKeySequence(Qt::Key_F2)); - connect(jumpToDefinition, SIGNAL(triggered()), - this, SLOT(jumpToDefinition())); + cmd = am->command(TextEditor::Constants::FOLLOW_SYMBOL_UNDER_CURSOR); contextMenu->addAction(cmd); cppToolsMenu->addAction(cmd); @@ -304,7 +299,8 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess m_actionHandler = new TextEditor::TextEditorActionHandler(CppEditor::Constants::C_CPPEDITOR, TextEditor::TextEditorActionHandler::Format | TextEditor::TextEditorActionHandler::UnCommentSelection - | TextEditor::TextEditorActionHandler::UnCollapseAll); + | TextEditor::TextEditorActionHandler::UnCollapseAll + | TextEditor::TextEditorActionHandler::FollowSymbolUnderCursor); m_actionHandler->initializeActions(); @@ -355,14 +351,6 @@ void CppPlugin::switchDeclarationDefinition() editor->switchDeclarationDefinition(); } -void CppPlugin::jumpToDefinition() -{ - Core::EditorManager *em = Core::EditorManager::instance(); - CPPEditorWidget *editor = qobject_cast<CPPEditorWidget*>(em->currentEditor()->widget()); - if (editor) - editor->jumpToDefinition(); -} - void CppPlugin::renameSymbolUnderCursor() { Core::EditorManager *em = Core::EditorManager::instance(); diff --git a/src/plugins/cppeditor/cppplugin.h b/src/plugins/cppeditor/cppplugin.h index 3b42b0b28b2..652c942d767 100644 --- a/src/plugins/cppeditor/cppplugin.h +++ b/src/plugins/cppeditor/cppplugin.h @@ -83,7 +83,6 @@ public slots: private slots: void switchDeclarationDefinition(); - void jumpToDefinition(); void renameSymbolUnderCursor(); void onTaskStarted(const QString &type); void onAllTasksFinished(const QString &type); diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp index 350d9b58a54..3253d9685be 100644 --- a/src/plugins/fakevim/fakevimplugin.cpp +++ b/src/plugins/fakevim/fakevimplugin.cpp @@ -78,8 +78,6 @@ #include <utils/treewidgetcolumnstretcher.h> #include <utils/stylehelper.h> -#include <cppeditor/cppeditorconstants.h> - #include <cpptools/cpptoolsconstants.h> #include <QAbstractTableModel> @@ -895,7 +893,7 @@ FakeVimPluginPrivate::FakeVimPluginPrivate(FakeVimPlugin *plugin) QRegExp("^(cN(ext)?|cp(revious)?)!?( (.*))?$"); defaultExCommandMap()["Coreplugin.OutputPane.nextitem"] = QRegExp("^cn(ext)?!?( (.*))?$"); - defaultExCommandMap()[CppEditor::Constants::JUMP_TO_DEFINITION] = + defaultExCommandMap()[TextEditor::Constants::FOLLOW_SYMBOL_UNDER_CURSOR] = QRegExp("^tag?$"); defaultExCommandMap()[Core::Constants::GO_BACK] = QRegExp("^pop?$"); diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp index 78ea9cff7ba..b2f303a0e41 100644 --- a/src/plugins/qmljseditor/qmljseditor.cpp +++ b/src/plugins/qmljseditor/qmljseditor.cpp @@ -1387,11 +1387,6 @@ TextEditor::BaseTextEditorWidget::Link QmlJSTextEditorWidget::findLinkAt(const Q return Link(); } -void QmlJSTextEditorWidget::followSymbolUnderCursor() -{ - openLink(findLinkAt(textCursor())); -} - void QmlJSTextEditorWidget::findUsages() { m_findReferences->findUsages(editorDocument()->fileName(), textCursor().position()); diff --git a/src/plugins/qmljseditor/qmljseditor.h b/src/plugins/qmljseditor/qmljseditor.h index b97f327083e..566dc0aa60d 100644 --- a/src/plugins/qmljseditor/qmljseditor.h +++ b/src/plugins/qmljseditor/qmljseditor.h @@ -176,7 +176,6 @@ public slots: void reparseDocumentNow(); void updateSemanticInfo(); void updateSemanticInfoNow(); - void followSymbolUnderCursor(); void findUsages(); void renameUsages(); void showContextPane(); diff --git a/src/plugins/qmljseditor/qmljseditorconstants.h b/src/plugins/qmljseditor/qmljseditorconstants.h index dda05bb9671..34dccae4f45 100644 --- a/src/plugins/qmljseditor/qmljseditorconstants.h +++ b/src/plugins/qmljseditor/qmljseditorconstants.h @@ -51,7 +51,6 @@ const char TASK_SEARCH[] = "QmlJSEditor.TaskSearch"; const char SETTINGS_CATEGORY_QML[] = "J.QtQuick"; const char SETTINGS_TR_CATEGORY_QML[] = QT_TRANSLATE_NOOP("QmlJSEditor", "Qt Quick"); -const char FOLLOW_SYMBOL_UNDER_CURSOR[] = "QmlJSEditor.FollowSymbolUnderCursor"; const char FIND_USAGES[] = "QmlJSEditor.FindUsages"; const char RENAME_USAGES[] = "QmlJSEditor.RenameUsages"; const char RUN_SEMANTIC_SCAN[] = "QmlJSEditor.RunSemanticScan"; diff --git a/src/plugins/qmljseditor/qmljseditorplugin.cpp b/src/plugins/qmljseditor/qmljseditorplugin.cpp index 357f0dd4afd..5faae4381f5 100644 --- a/src/plugins/qmljseditor/qmljseditorplugin.cpp +++ b/src/plugins/qmljseditor/qmljseditorplugin.cpp @@ -174,7 +174,8 @@ bool QmlJSEditorPlugin::initialize(const QStringList & /*arguments*/, QString *e m_actionHandler = new TextEditor::TextEditorActionHandler(QmlJSEditor::Constants::C_QMLJSEDITOR_ID, TextEditor::TextEditorActionHandler::Format | TextEditor::TextEditorActionHandler::UnCommentSelection - | TextEditor::TextEditorActionHandler::UnCollapseAll); + | TextEditor::TextEditorActionHandler::UnCollapseAll + | TextEditor::TextEditorActionHandler::FollowSymbolUnderCursor); m_actionHandler->initializeActions(); Core::ActionManager *am = Core::ICore::actionManager(); @@ -185,10 +186,7 @@ bool QmlJSEditorPlugin::initialize(const QStringList & /*arguments*/, QString *e qmlToolsMenu->addAction(createSeparator(am, this, globalContext, QmlJSEditor::Constants::SEPARATOR3)); Core::Command *cmd; - QAction *followSymbolUnderCursorAction = new QAction(tr("Follow Symbol Under Cursor"), this); - cmd = am->registerAction(followSymbolUnderCursorAction, Constants::FOLLOW_SYMBOL_UNDER_CURSOR, context); - cmd->setDefaultKeySequence(QKeySequence(Qt::Key_F2)); - connect(followSymbolUnderCursorAction, SIGNAL(triggered()), this, SLOT(followSymbolUnderCursor())); + cmd = am->command(TextEditor::Constants::FOLLOW_SYMBOL_UNDER_CURSOR); contextMenu->addAction(cmd); qmlToolsMenu->addAction(cmd); @@ -294,14 +292,6 @@ Utils::JsonSchemaManager *QmlJSEditorPlugin::jsonManager() const return m_jsonManager.data(); } -void QmlJSEditorPlugin::followSymbolUnderCursor() -{ - Core::EditorManager *em = Core::EditorManager::instance(); - - if (QmlJSTextEditorWidget *editor = qobject_cast<QmlJSTextEditorWidget*>(em->currentEditor()->widget())) - editor->followSymbolUnderCursor(); -} - void QmlJSEditorPlugin::findUsages() { Core::EditorManager *em = Core::EditorManager::instance(); diff --git a/src/plugins/qmljseditor/qmljseditorplugin.h b/src/plugins/qmljseditor/qmljseditorplugin.h index daafed94232..29e22f6b32e 100644 --- a/src/plugins/qmljseditor/qmljseditorplugin.h +++ b/src/plugins/qmljseditor/qmljseditorplugin.h @@ -100,7 +100,6 @@ public: Utils::JsonSchemaManager *jsonManager() const; public Q_SLOTS: - void followSymbolUnderCursor(); void findUsages(); void renameUsages(); void reformatFile(); diff --git a/src/plugins/qt4projectmanager/profileeditor.cpp b/src/plugins/qt4projectmanager/profileeditor.cpp index 25dfee554b1..0041fb9ebc0 100644 --- a/src/plugins/qt4projectmanager/profileeditor.cpp +++ b/src/plugins/qt4projectmanager/profileeditor.cpp @@ -233,11 +233,6 @@ void ProFileEditorWidget::setFontSettings(const TextEditor::FontSettings &fs) highlighter->rehighlight(); } -void ProFileEditorWidget::jumpToFile() -{ - openLink(findLinkAt(textCursor())); -} - // // ProFileDocument // diff --git a/src/plugins/qt4projectmanager/profileeditor.h b/src/plugins/qt4projectmanager/profileeditor.h index e2d153041da..1d143eb7d29 100644 --- a/src/plugins/qt4projectmanager/profileeditor.h +++ b/src/plugins/qt4projectmanager/profileeditor.h @@ -88,7 +88,6 @@ protected: public slots: virtual void setFontSettings(const TextEditor::FontSettings &); - void jumpToFile(); private: ProFileEditorFactory *m_factory; diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h b/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h index 3568058a699..410e0b48eef 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h +++ b/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h @@ -63,7 +63,6 @@ const char BUILDSUBDIR[] = "Qt4Builder.BuildSubDir"; const char REBUILDSUBDIR[] = "Qt4Builder.RebuildSubDir"; const char CLEANSUBDIR[] = "Qt4Builder.CleanSubDir"; const char ADDLIBRARY[] = "Qt4.AddLibrary"; -const char JUMP_TO_FILE[] = "Qt4.JumpToFile"; const char SEPARATOR[] = "Qt4.Separator"; // Tasks diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp index 789c069921c..5386769104b 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp +++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp @@ -129,7 +129,8 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString * TextEditor::TextEditorActionHandler *editorHandler = new TextEditor::TextEditorActionHandler(Constants::C_PROFILEEDITOR, - TextEditor::TextEditorActionHandler::UnCommentSelection); + TextEditor::TextEditorActionHandler::UnCommentSelection + | TextEditor::TextEditorActionHandler::JumpToFileUnderCursor); m_proFileEditorFactory = new ProFileEditorFactory(m_qt4ProjectManager, editorHandler); addObject(m_proFileEditorFactory); @@ -238,12 +239,7 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString * Core::Context proFileEditorContext = Core::Context(Qt4ProjectManager::Constants::C_PROFILEEDITOR); - QAction *jumpToFile = new QAction(tr("Jump to File Under Cursor"), this); - command = am->registerAction(jumpToFile, - Constants::JUMP_TO_FILE, proFileEditorContext); - command->setDefaultKeySequence(QKeySequence(Qt::Key_F2)); - connect(jumpToFile, SIGNAL(triggered()), - this, SLOT(jumpToFile())); + command = am->command(TextEditor::Constants::JUMP_TO_FILE_UNDER_CURSOR); contextMenu->addAction(command); m_addLibraryAction = new QAction(tr("Add Library..."), this); @@ -369,12 +365,4 @@ void Qt4ProjectManagerPlugin::buildStateChanged(ProjectExplorer::Project *pro) updateRunQMakeAction(); } -void Qt4ProjectManagerPlugin::jumpToFile() -{ - Core::EditorManager *em = Core::EditorManager::instance(); - ProFileEditorWidget *editor = qobject_cast<ProFileEditorWidget*>(em->currentEditor()->widget()); - if (editor) - editor->jumpToFile(); -} - Q_EXPORT_PLUGIN(Qt4ProjectManagerPlugin) diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h index aa80311bf0c..f7c2d5995d0 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h +++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h @@ -75,7 +75,6 @@ private slots: void updateRunQMakeAction(); void currentNodeChanged(ProjectExplorer::Node *node); void buildStateChanged(ProjectExplorer::Project *pro); - void jumpToFile(); #ifdef WITH_TESTS void testAbldOutputParsers_data(); diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index f1dbbfbdd02..1e8632df049 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -1074,6 +1074,11 @@ void BaseTextEditorWidget::unindent() indentOrUnindent(false); } +void BaseTextEditorWidget::openLinkUnderCursor() +{ + openLink(findLinkAt(textCursor())); +} + void BaseTextEditorWidget::moveLineUpDown(bool up) { QTextCursor cursor = textCursor(); diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index d61ae1237b7..45f2565f2c5 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -326,6 +326,8 @@ public slots: void indent(); void unindent(); + void openLinkUnderCursor(); + signals: void changed(); diff --git a/src/plugins/texteditor/texteditoractionhandler.cpp b/src/plugins/texteditor/texteditoractionhandler.cpp index 319e559a63e..84747b76750 100644 --- a/src/plugins/texteditor/texteditoractionhandler.cpp +++ b/src/plugins/texteditor/texteditoractionhandler.cpp @@ -105,6 +105,8 @@ TextEditorActionHandler::TextEditorActionHandler(const char *context, m_lowerCaseSelectionAction(0), m_indentAction(0), m_unindentAction(0), + m_followSymbolAction(0), + m_jumpToFileAction(0), m_optionalActions(optionalActions), m_currentEditor(0), m_contextId(context), @@ -395,6 +397,16 @@ void TextEditorActionHandler::createActions() command = am->registerAction(m_unindentAction, Constants::UNINDENT, m_contextId, true); connect(m_unindentAction, SIGNAL(triggered()), this, SLOT(unindent())); + m_followSymbolAction = new QAction(tr("Follow Symbol Under Cursor"), this); + command = am->registerAction(m_followSymbolAction, Constants::FOLLOW_SYMBOL_UNDER_CURSOR, m_contextId, true); + command->setDefaultKeySequence(QKeySequence(Qt::Key_F2)); + connect(m_followSymbolAction, SIGNAL(triggered()), this, SLOT(openLinkUnderCursor())); + + m_jumpToFileAction = new QAction(tr("Jump To File Under Cursor"), this); + command = am->registerAction(m_jumpToFileAction, Constants::JUMP_TO_FILE_UNDER_CURSOR, m_contextId, true); + command->setDefaultKeySequence(QKeySequence(Qt::Key_F2)); + connect(m_jumpToFileAction, SIGNAL(triggered()), this, SLOT(openLinkUnderCursor())); + QAction *a = 0; a = new QAction(tr("Go to Line Start"), this); command = am->registerAction(a, Constants::GOTO_LINE_START, m_contextId, true); @@ -508,6 +520,8 @@ void TextEditorActionHandler::updateActions(UpdateMode um) a->setEnabled(um != ReadOnlyMode); m_formatAction->setEnabled((m_optionalActions & Format) && um != ReadOnlyMode); m_unCommentSelectionAction->setEnabled((m_optionalActions & UnCommentSelection) && um != ReadOnlyMode); + m_followSymbolAction->setEnabled(m_optionalActions & FollowSymbolUnderCursor); + m_jumpToFileAction->setEnabled(m_optionalActions & JumpToFileUnderCursor); m_unfoldAllAction->setEnabled((m_optionalActions & UnCollapseAll)); m_visualizeWhitespaceAction->setChecked(m_currentEditor->displaySettings().m_visualizeWhitespace); @@ -632,6 +646,7 @@ FUNCTION(insertLineAbove) FUNCTION(insertLineBelow) FUNCTION(indent) FUNCTION(unindent) +FUNCTION(openLinkUnderCursor) FUNCTION(gotoLineStart) FUNCTION(gotoLineStartWithSelection) diff --git a/src/plugins/texteditor/texteditoractionhandler.h b/src/plugins/texteditor/texteditoractionhandler.h index d0a41e0e74a..27f0d485ca6 100644 --- a/src/plugins/texteditor/texteditoractionhandler.h +++ b/src/plugins/texteditor/texteditoractionhandler.h @@ -63,7 +63,9 @@ public: None = 0, Format = 1, UnCommentSelection = 2, - UnCollapseAll = 4 + UnCollapseAll = 4, + FollowSymbolUnderCursor = 8, + JumpToFileUnderCursor = 16 }; explicit TextEditorActionHandler(const char *context, uint optionalActions = None); @@ -141,6 +143,7 @@ private slots: void updateCurrentEditor(Core::IEditor *editor); void indent(); void unindent(); + void openLinkUnderCursor(); void gotoLineStart(); void gotoLineStartWithSelection(); @@ -212,6 +215,8 @@ private: QAction *m_lowerCaseSelectionAction; QAction *m_indentAction; QAction *m_unindentAction; + QAction *m_followSymbolAction; + QAction *m_jumpToFileAction; QList<QAction *> m_modifyingActions; uint m_optionalActions; diff --git a/src/plugins/texteditor/texteditorconstants.h b/src/plugins/texteditor/texteditorconstants.h index bd90e06631b..0fc099368be 100644 --- a/src/plugins/texteditor/texteditorconstants.h +++ b/src/plugins/texteditor/texteditorconstants.h @@ -105,6 +105,8 @@ const char CIRCULAR_PASTE[] = "TextEditor.CircularPaste"; const char SWITCH_UTF8BOM[] = "TextEditor.SwitchUtf8bom"; const char INDENT[] = "TextEditor.Indent"; const char UNINDENT[] = "TextEditor.Unindent"; +const char FOLLOW_SYMBOL_UNDER_CURSOR[] = "TextEditor.FollowSymbolUnderCursor"; +const char JUMP_TO_FILE_UNDER_CURSOR[] = "TextEditor.JumpToFileUnderCursor"; // Text color and style categories const char C_TEXT[] = "Text"; -- GitLab