diff options
author | David Schulz <david.schulz@digia.com> | 2013-02-05 14:14:33 +0100 |
---|---|---|
committer | David Schulz <david.schulz@digia.com> | 2013-02-14 09:46:16 +0100 |
commit | 6ef0cf1a30f1c31d24363fa5ab7a3673f7886126 (patch) | |
tree | 6b988785304e03eb728196a98e37e4462c164fde /src/plugins/texteditor | |
parent | a37770ba3b05c480338d2a1fe08f9677249aeb8f (diff) | |
download | qt-creator-6ef0cf1a30f1c31d24363fa5ab7a3673f7886126.tar.gz |
Editor: Refactor Open Link in Next Split.
Cleanup code and added shortcuts and menu entries for
- open header/source in next split
- follow symbol under cursor in next split
- open declaration/definition in next split
Change-Id: I2c4347749d26669d88b7c2968f30f60710f442b1
Reviewed-by: Petar Perisin <petar.perisin@gmail.com>
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Diffstat (limited to 'src/plugins/texteditor')
-rw-r--r-- | src/plugins/texteditor/basetexteditor.cpp | 85 | ||||
-rw-r--r-- | src/plugins/texteditor/basetexteditor.h | 10 | ||||
-rw-r--r-- | src/plugins/texteditor/displaysettings.cpp | 3 | ||||
-rw-r--r-- | src/plugins/texteditor/displaysettingspage.cpp | 13 | ||||
-rw-r--r-- | src/plugins/texteditor/displaysettingspage.h | 3 | ||||
-rw-r--r-- | src/plugins/texteditor/displaysettingspage.ui | 29 | ||||
-rw-r--r-- | src/plugins/texteditor/texteditoractionhandler.cpp | 15 | ||||
-rw-r--r-- | src/plugins/texteditor/texteditoractionhandler.h | 3 | ||||
-rw-r--r-- | src/plugins/texteditor/texteditorconstants.h | 2 |
9 files changed, 46 insertions, 117 deletions
diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 5b9cf4d86d..ee04b52f4d 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -1079,35 +1079,16 @@ void BaseTextEditorWidget::unindent() void BaseTextEditorWidget::openLinkUnderCursor() { - Core::EditorManager* editorManager = Core::EditorManager::instance(); Link symbolLink = findLinkAt(textCursor()); - if (!openLinksInNextSplit() || !editorManager->hasSplitter()) { - openLink(symbolLink); - return; - } - - Core::IEditor *editor = Core::EditorManager::currentEditor(); + openLink(symbolLink, alwaysOpenLinksInNextSplit()); +} - if (forceOpenLinksInNextSplit()) { - editorManager->gotoOtherSplit(); - } else { - bool isVisible = false; - foreach (Core::IEditor *visEditor, editorManager->visibleEditors()) { - if (visEditor->document() && - (symbolLink.targetFileName == visEditor->document()->fileName()) && - (visEditor != editor)) { - isVisible = true; - editorManager->activateEditor(visEditor); - break; - } - } +void BaseTextEditorWidget::openLinkUnderCursorInNextSplit() +{ + Link symbolLink = findLinkAt(textCursor()); - if (!isVisible) - editorManager->gotoOtherSplit(); - } - openLink(symbolLink); - editorManager->activateEditor(editor); + openLink(symbolLink, !alwaysOpenLinksInNextSplit()); } void BaseTextEditorWidget::moveLineUpDown(bool up) @@ -2336,25 +2317,16 @@ bool BaseTextEditorWidget::lineNumbersVisible() const return d->m_lineNumbersVisible; } -void BaseTextEditorWidget::setOpenLinksInNextSplit(bool b) +void BaseTextEditorWidget::setAlwaysOpenLinksInNextSplit(bool b) { d->m_displaySettings.m_openLinksInNextSplit = b; } -bool BaseTextEditorWidget::openLinksInNextSplit() const +bool BaseTextEditorWidget::alwaysOpenLinksInNextSplit() const { return d->m_displaySettings.m_openLinksInNextSplit; } -void BaseTextEditorWidget::setForceOpenLinksInNextSplit(bool b) -{ - d->m_displaySettings.m_forceOpenLinksInNextSplit = b; -} - -bool BaseTextEditorWidget::forceOpenLinksInNextSplit() const -{ - return d->m_displaySettings.m_forceOpenLinksInNextSplit; -} void BaseTextEditorWidget::setMarksVisible(bool b) { @@ -4315,32 +4287,10 @@ void BaseTextEditorWidget::mouseReleaseEvent(QMouseEvent *e) && e->button() == Qt::LeftButton ) { - Core::EditorManager* editorManager = Core::EditorManager::instance(); - editorManager->addCurrentPositionToNavigationHistory(); - Core::IEditor *editor = Core::EditorManager::currentEditor(); - const QTextCursor cursor = cursorForPosition(e->pos()); - Link symbolLink = findLinkAt(cursor); - if (((!(e->modifiers() & Qt::AltModifier)) == openLinksInNextSplit()) && - (editorManager->hasSplitter())) { - if (forceOpenLinksInNextSplit()) { - editorManager->gotoOtherSplit(); - } else { - bool isVisible = false; - foreach (Core::IEditor *visEditor, editorManager->visibleEditors()) - if (visEditor->document() && - (symbolLink.targetFileName == visEditor->document()->fileName()) && - (editor != visEditor)) { - isVisible = true; - editorManager->activateEditor(visEditor); - break; - } - - if (!isVisible) - editorManager->gotoOtherSplit(); - } - } - - if (openLink(symbolLink)) { + Core::EditorManager::instance()->addCurrentPositionToNavigationHistory(); + bool inNextSplit = ((e->modifiers() & Qt::AltModifier) && !alwaysOpenLinksInNextSplit()) + || (alwaysOpenLinksInNextSplit() && !(e->modifiers() & Qt::AltModifier)); + if (openLink(findLinkAt(cursorForPosition(e->pos())), inNextSplit)) { clearLink(); return; } @@ -4909,13 +4859,18 @@ BaseTextEditorWidget::Link BaseTextEditorWidget::findLinkAt(const QTextCursor &, return Link(); } -bool BaseTextEditorWidget::openLink(const Link &link) +bool BaseTextEditorWidget::openLink(const Link &link, bool inNextSplit) { if (!link.hasValidTarget()) return false; - if (baseTextDocument()->fileName() == link.targetFileName) { - Core::EditorManager::instance()->addCurrentPositionToNavigationHistory(); + Core::EditorManager *editorManager = Core::EditorManager::instance(); + if (inNextSplit) { + if (!editorManager->hasSplitter()) + editorManager->splitSideBySide(); + editorManager->gotoOtherSplit(); + } else if (baseTextDocument()->fileName() == link.targetFileName) { + editorManager->addCurrentPositionToNavigationHistory(); gotoLine(link.targetLine, link.targetColumn); setFocus(); return true; diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index 2fc63eb394..ffc9782cb1 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -181,11 +181,8 @@ public: void setLineNumbersVisible(bool b); bool lineNumbersVisible() const; - void setOpenLinksInNextSplit(bool b); - bool openLinksInNextSplit() const; - - void setForceOpenLinksInNextSplit(bool b); - bool forceOpenLinksInNextSplit() const; + void setAlwaysOpenLinksInNextSplit(bool b); + bool alwaysOpenLinksInNextSplit() const; void setMarksVisible(bool b); bool marksVisible() const; @@ -333,6 +330,7 @@ public slots: void unindent(); void openLinkUnderCursor(); + void openLinkUnderCursorInNextSplit(); signals: void changed(); @@ -530,7 +528,7 @@ protected: Reimplement this function if you want to customize the way a link is opened. Returns whether the link was opened successfully. */ - virtual bool openLink(const Link &link); + virtual bool openLink(const Link &link, bool inNextSplit = false); void maybeClearSomeExtraSelections(const QTextCursor &cursor); diff --git a/src/plugins/texteditor/displaysettings.cpp b/src/plugins/texteditor/displaysettings.cpp index 709a85fa23..7d2569bed1 100644 --- a/src/plugins/texteditor/displaysettings.cpp +++ b/src/plugins/texteditor/displaysettings.cpp @@ -46,7 +46,6 @@ static const char markTextChangesKey[] = "MarkTextChanges"; static const char autoFoldFirstCommentKey[] = "AutoFoldFirstComment"; static const char centerCursorOnScrollKey[] = "CenterCursorOnScroll"; static const char openLinksInNextSplitKey[] = "OpenLinksInNextSplitKey"; -static const char forceOpenLinksInNextSplitKey[] = "ForceOpenLinksInNextSplitKey"; static const char groupPostfix[] = "DisplaySettings"; namespace TextEditor { @@ -90,7 +89,6 @@ void DisplaySettings::toSettings(const QString &category, QSettings *s) const s->setValue(QLatin1String(autoFoldFirstCommentKey), m_autoFoldFirstComment); s->setValue(QLatin1String(centerCursorOnScrollKey), m_centerCursorOnScroll); s->setValue(QLatin1String(openLinksInNextSplitKey), m_openLinksInNextSplit); - s->setValue(QLatin1String(forceOpenLinksInNextSplitKey), m_forceOpenLinksInNextSplit); s->endGroup(); } @@ -117,7 +115,6 @@ void DisplaySettings::fromSettings(const QString &category, const QSettings *s) m_autoFoldFirstComment = s->value(group + QLatin1String(autoFoldFirstCommentKey), m_autoFoldFirstComment).toBool(); m_centerCursorOnScroll = s->value(group + QLatin1String(centerCursorOnScrollKey), m_centerCursorOnScroll).toBool(); m_openLinksInNextSplit = s->value(group + QLatin1String(openLinksInNextSplitKey), m_openLinksInNextSplit).toBool(); - m_forceOpenLinksInNextSplit = s->value(group + QLatin1String(forceOpenLinksInNextSplitKey), m_forceOpenLinksInNextSplit).toBool(); } bool DisplaySettings::equals(const DisplaySettings &ds) const diff --git a/src/plugins/texteditor/displaysettingspage.cpp b/src/plugins/texteditor/displaysettingspage.cpp index ed3904db25..dddd5e2535 100644 --- a/src/plugins/texteditor/displaysettingspage.cpp +++ b/src/plugins/texteditor/displaysettingspage.cpp @@ -74,7 +74,6 @@ QWidget *DisplaySettingsPage::createPage(QWidget *parent) QWidget *w = new QWidget(parent); d->m_page = new Internal::Ui::DisplaySettingsPage; d->m_page->setupUi(w); - connect(d->m_page->openLinksInNextSplit, SIGNAL(toggled(bool)), this, SLOT(updateForceOpenLinksInNextSplit(bool))); settingsToUI(); if (d->m_searchKeywords.isEmpty()) { QTextStream(&d->m_searchKeywords) << d->m_page->displayLineNumbers->text() @@ -87,8 +86,7 @@ QWidget *DisplaySettingsPage::createPage(QWidget *parent) << ' ' << d->m_page->enableTextWrapping->text() << ' ' << d->m_page->autoFoldFirstComment->text() << ' ' << d->m_page->centerOnScroll->text() - << ' ' << d->m_page->openLinksInNextSplit->text() - << ' ' << d->m_page->forceOpenLinksInNextSplit->text(); + << ' ' << d->m_page->openLinksInNextSplit->text(); d->m_searchKeywords.remove(QLatin1Char('&')); } return w; @@ -112,13 +110,6 @@ void DisplaySettingsPage::finish() d->m_page = 0; } -void DisplaySettingsPage::updateForceOpenLinksInNextSplit(bool openLinksInNextSplitChecked) -{ - d->m_page->forceOpenLinksInNextSplit->setEnabled(openLinksInNextSplitChecked); - if (!openLinksInNextSplitChecked) - d->m_page->forceOpenLinksInNextSplit->setChecked(openLinksInNextSplitChecked); -} - void DisplaySettingsPage::settingsFromUI(DisplaySettings &displaySettings) const { displaySettings.m_displayLineNumbers = d->m_page->displayLineNumbers->isChecked(); @@ -135,7 +126,6 @@ void DisplaySettingsPage::settingsFromUI(DisplaySettings &displaySettings) const displaySettings.m_autoFoldFirstComment = d->m_page->autoFoldFirstComment->isChecked(); displaySettings.m_centerCursorOnScroll = d->m_page->centerOnScroll->isChecked(); displaySettings.m_openLinksInNextSplit = d->m_page->openLinksInNextSplit->isChecked(); - displaySettings.m_forceOpenLinksInNextSplit = d->m_page->forceOpenLinksInNextSplit->isChecked(); } void DisplaySettingsPage::settingsToUI() @@ -155,7 +145,6 @@ void DisplaySettingsPage::settingsToUI() d->m_page->autoFoldFirstComment->setChecked(displaySettings.m_autoFoldFirstComment); d->m_page->centerOnScroll->setChecked(displaySettings.m_centerCursorOnScroll); d->m_page->openLinksInNextSplit->setChecked(displaySettings.m_openLinksInNextSplit); - d->m_page->forceOpenLinksInNextSplit->setChecked(displaySettings.m_forceOpenLinksInNextSplit); } const DisplaySettings &DisplaySettingsPage::displaySettings() const diff --git a/src/plugins/texteditor/displaysettingspage.h b/src/plugins/texteditor/displaysettingspage.h index 2b4886dd3e..802e303277 100644 --- a/src/plugins/texteditor/displaysettingspage.h +++ b/src/plugins/texteditor/displaysettingspage.h @@ -65,9 +65,6 @@ public: signals: void displaySettingsChanged(const TextEditor::DisplaySettings &); -private slots: - void updateForceOpenLinksInNextSplit(bool openLinksInNextSplitChecked); - private: void settingsFromUI(DisplaySettings &displaySettings) const; void settingsToUI(); diff --git a/src/plugins/texteditor/displaysettingspage.ui b/src/plugins/texteditor/displaysettingspage.ui index 61527ec1d1..ce3697ad3d 100644 --- a/src/plugins/texteditor/displaysettingspage.ui +++ b/src/plugins/texteditor/displaysettingspage.ui @@ -156,37 +156,10 @@ <item row="5" column="1"> <widget class="QCheckBox" name="openLinksInNextSplit"> <property name="text"> - <string>Open links in another split</string> + <string>Always open links in another split</string> </property> </widget> </item> - <item row="6" column="1"> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <item> - <spacer name="horizontalSpacer_2"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeType"> - <enum>QSizePolicy::Fixed</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QCheckBox" name="forceOpenLinksInNextSplit"> - <property name="text"> - <string>Force open links in next split</string> - </property> - </widget> - </item> - </layout> - </item> </layout> </widget> </item> diff --git a/src/plugins/texteditor/texteditoractionhandler.cpp b/src/plugins/texteditor/texteditoractionhandler.cpp index 80c90d9012..6c1b47d875 100644 --- a/src/plugins/texteditor/texteditoractionhandler.cpp +++ b/src/plugins/texteditor/texteditoractionhandler.cpp @@ -103,7 +103,9 @@ TextEditorActionHandler::TextEditorActionHandler(const char *context, m_indentAction(0), m_unindentAction(0), m_followSymbolAction(0), + m_followSymbolInNextSplitAction(0), m_jumpToFileAction(0), + m_jumpToFileInNextSplitAction(0), m_optionalActions(optionalActions), m_currentEditor(0), m_contextId(context), @@ -389,11 +391,21 @@ void TextEditorActionHandler::createActions() command->setDefaultKeySequence(QKeySequence(Qt::Key_F2)); connect(m_followSymbolAction, SIGNAL(triggered()), this, SLOT(openLinkUnderCursor())); + m_followSymbolInNextSplitAction = new QAction(tr("Follow Symbol Under Cursor In Next Split"), this); + command = Core::ActionManager::registerAction(m_followSymbolInNextSplitAction, Constants::FOLLOW_SYMBOL_UNDER_CURSOR_IN_NEXT_SPLIT, m_contextId, true); + command->setDefaultKeySequence(QKeySequence(Qt::CTRL + Qt::Key_E, Qt::Key_F2)); + connect(m_followSymbolInNextSplitAction, SIGNAL(triggered()), this, SLOT(openLinkUnderCursorInNextSplit())); + m_jumpToFileAction = new QAction(tr("Jump To File Under Cursor"), this); command = Core::ActionManager::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())); + m_jumpToFileInNextSplitAction = new QAction(tr("Jump To File Under Cursor In Next Split"), this); + command = Core::ActionManager::registerAction(m_jumpToFileInNextSplitAction, Constants::JUMP_TO_FILE_UNDER_CURSOR_IN_NEXT_SPLIT, m_contextId, true); + command->setDefaultKeySequence(QKeySequence(Qt::CTRL + Qt::Key_E, Qt::Key_F2)); + connect(m_jumpToFileInNextSplitAction, SIGNAL(triggered()), this, SLOT(openLinkUnderCursorInNextSplit())); + QAction *a = 0; a = new QAction(tr("Go to Line Start"), this); command = Core::ActionManager::registerAction(a, Constants::GOTO_LINE_START, m_contextId, true); @@ -508,7 +520,9 @@ void TextEditorActionHandler::updateActions(UpdateMode um) m_formatAction->setEnabled((m_optionalActions & Format) && um != ReadOnlyMode); m_unCommentSelectionAction->setEnabled((m_optionalActions & UnCommentSelection) && um != ReadOnlyMode); m_followSymbolAction->setEnabled(m_optionalActions & FollowSymbolUnderCursor); + m_followSymbolInNextSplitAction->setEnabled(m_optionalActions & FollowSymbolUnderCursor); m_jumpToFileAction->setEnabled(m_optionalActions & JumpToFileUnderCursor); + m_jumpToFileInNextSplitAction->setEnabled(m_optionalActions & JumpToFileUnderCursor); m_unfoldAllAction->setEnabled((m_optionalActions & UnCollapseAll)); m_visualizeWhitespaceAction->setChecked(m_currentEditor->displaySettings().m_visualizeWhitespace); @@ -632,6 +646,7 @@ FUNCTION(insertLineBelow) FUNCTION(indent) FUNCTION(unindent) FUNCTION(openLinkUnderCursor) +FUNCTION(openLinkUnderCursorInNextSplit) FUNCTION(gotoLineStart) FUNCTION(gotoLineStartWithSelection) diff --git a/src/plugins/texteditor/texteditoractionhandler.h b/src/plugins/texteditor/texteditoractionhandler.h index 5d40cd8a58..0a8f510b43 100644 --- a/src/plugins/texteditor/texteditoractionhandler.h +++ b/src/plugins/texteditor/texteditoractionhandler.h @@ -141,6 +141,7 @@ private slots: void indent(); void unindent(); void openLinkUnderCursor(); + void openLinkUnderCursorInNextSplit(); void gotoLineStart(); void gotoLineStartWithSelection(); @@ -213,7 +214,9 @@ private: QAction *m_indentAction; QAction *m_unindentAction; QAction *m_followSymbolAction; + QAction *m_followSymbolInNextSplitAction; QAction *m_jumpToFileAction; + QAction *m_jumpToFileInNextSplitAction; QList<QAction *> m_modifyingActions; uint m_optionalActions; diff --git a/src/plugins/texteditor/texteditorconstants.h b/src/plugins/texteditor/texteditorconstants.h index fc487f7c4c..39e656afcd 100644 --- a/src/plugins/texteditor/texteditorconstants.h +++ b/src/plugins/texteditor/texteditorconstants.h @@ -159,7 +159,9 @@ 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 FOLLOW_SYMBOL_UNDER_CURSOR_IN_NEXT_SPLIT[] = "TextEditor.FollowSymbolUnderCursorInNextSplit"; const char JUMP_TO_FILE_UNDER_CURSOR[] = "TextEditor.JumpToFileUnderCursor"; +const char JUMP_TO_FILE_UNDER_CURSOR_IN_NEXT_SPLIT[] = "TextEditor.JumpToFileUnderCursorInNextSplit"; const char *nameForStyle(TextStyle style); TextStyle styleFromName(const char *name); |