aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/texteditor
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@digia.com>2013-02-05 14:14:33 +0100
committerDavid Schulz <david.schulz@digia.com>2013-02-14 09:46:16 +0100
commit6ef0cf1a30f1c31d24363fa5ab7a3673f7886126 (patch)
tree6b988785304e03eb728196a98e37e4462c164fde /src/plugins/texteditor
parenta37770ba3b05c480338d2a1fe08f9677249aeb8f (diff)
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.cpp85
-rw-r--r--src/plugins/texteditor/basetexteditor.h10
-rw-r--r--src/plugins/texteditor/displaysettings.cpp3
-rw-r--r--src/plugins/texteditor/displaysettingspage.cpp13
-rw-r--r--src/plugins/texteditor/displaysettingspage.h3
-rw-r--r--src/plugins/texteditor/displaysettingspage.ui29
-rw-r--r--src/plugins/texteditor/texteditoractionhandler.cpp15
-rw-r--r--src/plugins/texteditor/texteditoractionhandler.h3
-rw-r--r--src/plugins/texteditor/texteditorconstants.h2
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);