From 42a885fc542ad8a348d80a9ea35ac8073838d244 Mon Sep 17 00:00:00 2001 From: Francois Ferrand Date: Fri, 15 Jun 2012 14:43:12 +0200 Subject: [PATCH] Allow expanding items in the overview combobox. This makes navigation through large files much easier. Change-Id: Ie55f75078a1727949db6e8824af4795deb96292e Reviewed-by: Leandro Melo --- src/plugins/cppeditor/cppeditor.cpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index 11d8360067a..e31e5eb60b7 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -160,14 +160,36 @@ public: class OverviewCombo : public QComboBox { public: - OverviewCombo(QWidget *parent = 0) : QComboBox(parent) + OverviewCombo(QWidget *parent = 0) : QComboBox(parent), m_skipNextHide(false) {} + bool eventFilter(QObject* object, QEvent* event) + { + if (event->type() == QEvent::MouseButtonPress && object == view()->viewport()) { + QMouseEvent* mouseEvent = static_cast(event); + QModelIndex index = view()->indexAt(mouseEvent->pos()); + if (!view()->visualRect(index).contains(mouseEvent->pos())) + m_skipNextHide = true; + } + return false; + } + void showPopup() { static_cast(view())->adjustWidth(); QComboBox::showPopup(); } + + virtual void hidePopup() + { + if (m_skipNextHide) + m_skipNextHide = false; + else + QComboBox::hidePopup(); + } + +private: + bool m_skipNextHide; }; class OverviewProxyModel : public QSortFilterProxyModel @@ -504,9 +526,10 @@ void CPPEditorWidget::createToolBar(CPPEditor *editor) QTreeView *outlineView = new OverviewTreeView; outlineView->header()->hide(); - outlineView->setItemsExpandable(false); + outlineView->setItemsExpandable(true); m_outlineCombo->setView(outlineView); m_outlineCombo->setMaxVisibleItems(40); + outlineView->viewport()->installEventFilter(m_outlineCombo); m_outlineModel = new OverviewModel(this); m_proxyModel = new OverviewProxyModel(m_outlineModel, this);