Editor: Allow to open links in a new split.

This changes current behavior while opening links. Link is now opened in
next split by default. If you use CTRL+Click to open links, it will also
open in next split. However, by using CTRL+ALT+click it will open in
current split.

There are two new checkboxes in Tools/Options/Text Editor/Display:
- "Open Links in New Split" - if it is checked, links will not be opened
in current split. However, if document with link is already opened, it
will be used to open the split
- "Force open links in next split" - Links will always open in next
split, even if their document is already opened somewhere else.

Task-number: QTCREATORBUG-8117
Change-Id: Ib99075b55d9e9683ed2c2386767227457de0a3fc
Reviewed-by: David Schulz <david.schulz@digia.com>
This commit is contained in:
Petar Perisin
2012-11-01 03:43:28 +01:00
committed by David Schulz
parent c0e7b65db3
commit 39e9c5ef20
10 changed files with 276 additions and 51 deletions

View File

@@ -1068,7 +1068,35 @@ void BaseTextEditorWidget::unindent()
void BaseTextEditorWidget::openLinkUnderCursor()
{
openLink(findLinkAt(textCursor()));
Core::EditorManager* editorManager = Core::EditorManager::instance();
Link symbolLink = findLinkAt(textCursor());
if (!openLinksInNextSplit() || !editorManager->hasSplitter()) {
openLink(symbolLink);
return;
}
Core::IEditor *editor = Core::EditorManager::currentEditor();
if (forceOpenLinksInNextSplit()) {
editorManager->gotoOtherSplit();
} else {
bool isVisible = false;
foreach (Core::IEditor *visEditor, editorManager->visibleEditors()) {
if (visEditor->document() &&
(symbolLink.fileName == visEditor->document()->fileName()) &&
(visEditor != editor)) {
isVisible = true;
editorManager->activateEditor(visEditor);
break;
}
}
if (!isVisible)
editorManager->gotoOtherSplit();
}
openLink(symbolLink);
editorManager->activateEditor(editor);
}
void BaseTextEditorWidget::moveLineUpDown(bool up)
@@ -2297,6 +2325,26 @@ bool BaseTextEditorWidget::lineNumbersVisible() const
return d->m_lineNumbersVisible;
}
void BaseTextEditorWidget::setOpenLinksInNextSplit(bool b)
{
d->m_displaySettings.m_openLinksInNextSplit = b;
}
bool BaseTextEditorWidget::openLinksInNextSplit() 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)
{
d->m_marksVisible = b;
@@ -4256,13 +4304,38 @@ void BaseTextEditorWidget::mousePressEvent(QMouseEvent *e)
void BaseTextEditorWidget::mouseReleaseEvent(QMouseEvent *e)
{
if (mouseNavigationEnabled()
&& d->m_linkPressed
&& e->modifiers() & Qt::ControlModifier
&& !(e->modifiers() & Qt::ShiftModifier)
&& e->button() == Qt::LeftButton
) {
&& d->m_linkPressed
&& e->modifiers() & Qt::ControlModifier
&& !(e->modifiers() & Qt::ShiftModifier)
&& e->button() == Qt::LeftButton
) {
Core::EditorManager* editorManager = Core::EditorManager::instance();
editorManager->addCurrentPositionToNavigationHistory();
Core::IEditor *editor = Core::EditorManager::currentEditor();
const QTextCursor cursor = cursorForPosition(e->pos());
if (openLink(findLinkAt(cursor))) {
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.fileName == visEditor->document()->fileName()) &&
(editor != visEditor)) {
isVisible = true;
editorManager->activateEditor(visEditor);
break;
}
if (!isVisible)
editorManager->gotoOtherSplit();
}
}
if (openLink(symbolLink)) {
clearLink();
return;
}