diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index 3544cf3f2d33345e9bdc0435b4a6414f1a3e5bca..d6c253095137a4438541f54168d1ddb4c8e5347b 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -75,6 +75,7 @@ #include <QtGui/QTextEdit> #include <QtGui/QComboBox> #include <QtGui/QTreeView> +#include <QtGui/QSortFilterProxyModel> using namespace CPlusPlus; using namespace CppEditor::Internal; @@ -239,11 +240,17 @@ void CPPEditor::createToolBar(CPPEditorEditable *editable) QTreeView *methodView = new OverviewTreeView; methodView->header()->hide(); methodView->setItemsExpandable(false); + methodView->setSortingEnabled(true); + methodView->sortByColumn(0, Qt::AscendingOrder); m_methodCombo->setView(methodView); m_methodCombo->setMaxVisibleItems(20); m_overviewModel = new OverviewModel(this); - m_methodCombo->setModel(m_overviewModel); + m_proxyModel = new QSortFilterProxyModel(this); + m_proxyModel->setSourceModel(m_overviewModel); + m_proxyModel->setDynamicSortFilter(true); + m_proxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); + m_methodCombo->setModel(m_proxyModel); connect(m_methodCombo, SIGNAL(activated(int)), this, SLOT(jumpToMethod(int))); connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(updateMethodBoxIndex())); @@ -366,7 +373,7 @@ void CPPEditor::updateFileName() void CPPEditor::jumpToMethod(int) { - QModelIndex index = m_methodCombo->view()->currentIndex(); + QModelIndex index = m_proxyModel->mapToSource(m_methodCombo->view()->currentIndex()); Symbol *symbol = m_overviewModel->symbolFromIndex(index); if (! symbol) return; @@ -394,7 +401,7 @@ void CPPEditor::updateMethodBoxIndex() if (lastIndex.isValid()) { bool blocked = m_methodCombo->blockSignals(true); - m_methodCombo->setCurrentIndex(lastIndex.row()); + m_methodCombo->setCurrentIndex(m_proxyModel->mapFromSource(lastIndex).row()); updateMethodBoxToolTip(); (void) m_methodCombo->blockSignals(blocked); } diff --git a/src/plugins/cppeditor/cppeditor.h b/src/plugins/cppeditor/cppeditor.h index ae352b8d6d503e9b7afa6b47ffb4d24ef4be6f84..7ef5e720a44fb785bdae54a8d7227aa20d349457 100644 --- a/src/plugins/cppeditor/cppeditor.h +++ b/src/plugins/cppeditor/cppeditor.h @@ -37,6 +37,7 @@ QT_BEGIN_NAMESPACE class QComboBox; +class QSortFilterProxyModel; QT_END_NAMESPACE namespace CPlusPlus { @@ -161,6 +162,7 @@ private: QList<int> m_contexts; QComboBox *m_methodCombo; CPlusPlus::OverviewModel *m_overviewModel; + QSortFilterProxyModel *m_proxyModel; }; } // namespace Internal