forked from qt-creator/qt-creator
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:
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user