OutlineViews: Make behavior consistent with other views

Allow them to be focused, activate also on return/enter. Also fix focus
handling so that assigning a shortcut to "Activate Outline View"
actually
works.

Change-Id: I878777ae0dad493af1715b36ee264a4f0c12443e
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
This commit is contained in:
Daniel Teske
2014-04-09 17:04:50 +02:00
parent 18f8486b05
commit aeabe1a727
6 changed files with 21 additions and 12 deletions

View File

@@ -46,8 +46,6 @@ enum {
CppOutlineTreeView::CppOutlineTreeView(QWidget *parent) : CppOutlineTreeView::CppOutlineTreeView(QWidget *parent) :
Utils::NavigationTreeView(parent) Utils::NavigationTreeView(parent)
{ {
// see also QmlJSOutlineTreeView
setFocusPolicy(Qt::NoFocus);
setExpandsOnDoubleClick(false); setExpandsOnDoubleClick(false);
} }
@@ -105,6 +103,7 @@ CppOutlineWidget::CppOutlineWidget(CPPEditorWidget *editor) :
setLayout(layout); setLayout(layout);
m_treeView->setModel(m_proxyModel); m_treeView->setModel(m_proxyModel);
setFocusProxy(m_treeView);
connect(m_model, SIGNAL(modelReset()), this, SLOT(modelUpdated())); connect(m_model, SIGNAL(modelReset()), this, SLOT(modelUpdated()));
modelUpdated(); modelUpdated();
@@ -113,8 +112,8 @@ CppOutlineWidget::CppOutlineWidget(CPPEditorWidget *editor) :
this, SLOT(updateSelectionInTree(QModelIndex))); this, SLOT(updateSelectionInTree(QModelIndex)));
connect(m_treeView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), connect(m_treeView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
this, SLOT(updateSelectionInText(QItemSelection))); this, SLOT(updateSelectionInText(QItemSelection)));
connect(m_treeView, SIGNAL(doubleClicked(QModelIndex)), connect(m_treeView, SIGNAL(activated(QModelIndex)),
this, SLOT(updateTextCursor(QModelIndex))); this, SLOT(focusEditor()));
} }
QList<QAction*> CppOutlineWidget::filterMenuActions() const QList<QAction*> CppOutlineWidget::filterMenuActions() const
@@ -145,7 +144,7 @@ void CppOutlineWidget::updateSelectionInTree(const QModelIndex &index)
if (debug) if (debug)
qDebug() << "CppOutline - updating selection due to cursor move"; qDebug() << "CppOutline - updating selection due to cursor move";
m_treeView->selectionModel()->select(proxyIndex, QItemSelectionModel::ClearAndSelect); m_treeView->setCurrentIndex(proxyIndex);
m_treeView->scrollTo(proxyIndex); m_treeView->scrollTo(proxyIndex);
m_blockCursorSync = false; m_blockCursorSync = false;
} }
@@ -176,11 +175,15 @@ void CppOutlineWidget::updateTextCursor(const QModelIndex &proxyIndex)
// line has to be 1 based, column 0 based! // line has to be 1 based, column 0 based!
m_editor->gotoLine(symbol->line(), symbol->column() - 1); m_editor->gotoLine(symbol->line(), symbol->column() - 1);
m_editor->setFocus();
m_blockCursorSync = false; m_blockCursorSync = false;
} }
} }
void CppOutlineWidget::focusEditor()
{
m_editor->setFocus();
}
bool CppOutlineWidget::syncCursor() bool CppOutlineWidget::syncCursor()
{ {
return m_enableCursorSync && !m_blockCursorSync; return m_enableCursorSync && !m_blockCursorSync;

View File

@@ -77,6 +77,7 @@ private slots:
void updateSelectionInTree(const QModelIndex &index); void updateSelectionInTree(const QModelIndex &index);
void updateSelectionInText(const QItemSelection &selection); void updateSelectionInText(const QItemSelection &selection);
void updateTextCursor(const QModelIndex &index); void updateTextCursor(const QModelIndex &index);
void focusEditor();
private: private:
bool syncCursor(); bool syncCursor();

View File

@@ -104,6 +104,7 @@ QmlJSOutlineWidget::QmlJSOutlineWidget(QWidget *parent) :
m_filterModel->setFilterBindings(false); m_filterModel->setFilterBindings(false);
m_treeView->setModel(m_filterModel); m_treeView->setModel(m_filterModel);
setFocusProxy(m_treeView);
QVBoxLayout *layout = new QVBoxLayout; QVBoxLayout *layout = new QVBoxLayout;
@@ -130,8 +131,8 @@ void QmlJSOutlineWidget::setEditor(QmlJSTextEditorWidget *editor)
connect(m_treeView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), connect(m_treeView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
this, SLOT(updateSelectionInText(QItemSelection))); this, SLOT(updateSelectionInText(QItemSelection)));
connect(m_treeView, SIGNAL(doubleClicked(QModelIndex)), connect(m_treeView, SIGNAL(activated(QModelIndex)),
this, SLOT(updateTextCursor(QModelIndex))); this, SLOT(focusEditor()));
connect(m_editor, SIGNAL(outlineModelIndexChanged(QModelIndex)), connect(m_editor, SIGNAL(outlineModelIndexChanged(QModelIndex)),
this, SLOT(updateSelectionInTree(QModelIndex))); this, SLOT(updateSelectionInTree(QModelIndex)));
@@ -187,7 +188,7 @@ void QmlJSOutlineWidget::updateSelectionInTree(const QModelIndex &index)
filterIndex = m_filterModel->mapFromSource(baseIndex); filterIndex = m_filterModel->mapFromSource(baseIndex);
} }
m_treeView->selectionModel()->select(filterIndex, QItemSelectionModel::ClearAndSelect); m_treeView->setCurrentIndex(filterIndex);
m_treeView->scrollTo(filterIndex); m_treeView->scrollTo(filterIndex);
m_blockCursorSync = false; m_blockCursorSync = false;
} }
@@ -226,10 +227,14 @@ void QmlJSOutlineWidget::updateTextCursor(const QModelIndex &index)
textCursor.setPosition(location.offset); textCursor.setPosition(location.offset);
m_editor->setTextCursor(textCursor); m_editor->setTextCursor(textCursor);
m_editor->centerCursor(); m_editor->centerCursor();
m_editor->setFocus();
m_blockCursorSync = false; m_blockCursorSync = false;
} }
void QmlJSOutlineWidget::focusEditor()
{
m_editor->setFocus();
}
void QmlJSOutlineWidget::setShowBindings(bool showBindings) void QmlJSOutlineWidget::setShowBindings(bool showBindings)
{ {
m_filterModel->setFilterBindings(!showBindings); m_filterModel->setFilterBindings(!showBindings);

View File

@@ -80,6 +80,7 @@ private slots:
void updateSelectionInTree(const QModelIndex &index); void updateSelectionInTree(const QModelIndex &index);
void updateSelectionInText(const QItemSelection &selection); void updateSelectionInText(const QItemSelection &selection);
void updateTextCursor(const QModelIndex &index); void updateTextCursor(const QModelIndex &index);
void focusEditor();
void setShowBindings(bool showBindings); void setShowBindings(bool showBindings);
private: private:

View File

@@ -39,8 +39,6 @@ namespace Internal {
QmlJSOutlineTreeView::QmlJSOutlineTreeView(QWidget *parent) : QmlJSOutlineTreeView::QmlJSOutlineTreeView(QWidget *parent) :
Utils::NavigationTreeView(parent) Utils::NavigationTreeView(parent)
{ {
// see also CppOutlineTreeView
setFocusPolicy(Qt::NoFocus);
setExpandsOnDoubleClick(false); setExpandsOnDoubleClick(false);
setDragEnabled(true); setDragEnabled(true);

View File

@@ -168,6 +168,7 @@ void OutlineWidgetStack::updateCurrentEditor(Core::IEditor *editor)
newWidget->setCursorSynchronization(m_syncWithEditor); newWidget->setCursorSynchronization(m_syncWithEditor);
addWidget(newWidget); addWidget(newWidget);
setCurrentWidget(newWidget); setCurrentWidget(newWidget);
setFocusProxy(newWidget);
} }
updateFilterMenu(); updateFilterMenu();