Git commit d49354e3bf13cb838005054c5dbcdf20dbb9abbe by David E. Narv?ez. Committed on 14/12/2011 at 04:31. Pushed by narvaez into branch 'master'.
Replace Projects QComboBox by Filtered QListView in KDE Provider It should help developers find projects faster REVIEW: 103383 GUI: QComboBox now replaced by a filtered QListView M +28 -13 providers/kdeprovider/kdeproviderwidget.cpp M +5 -2 providers/kdeprovider/kdeproviderwidget.h http://commits.kde.org/kdevelop/d49354e3bf13cb838005054c5dbcdf20dbb9abbe diff --git a/providers/kdeprovider/kdeproviderwidget.cpp b/providers/kdeprovider/kdeproviderwidget.cpp index eb84faf..2241f13 100644 --- a/providers/kdeprovider/kdeproviderwidget.cpp +++ b/providers/kdeprovider/kdeproviderwidget.cpp @@ -20,7 +20,7 @@ #include "kdeproviderwidget.h" #include <QVBoxLayout> -#include <QComboBox> +#include <QListView> #include <KIcon> #include <KPushButton> #include <KConfigDialog> @@ -33,26 +33,33 @@ #include "kdeprojectsmodel.h" #include "kdeprojectsreader.h" #include <QSortFilterProxyModel> +#include <KFilterProxySearchLine> using namespace KDevelop; KDEProviderWidget::KDEProviderWidget(QWidget* parent) : IProjectProviderWidget(parent) { - setLayout(new QHBoxLayout(this)); - m_projects = new QComboBox(this); + setLayout(new QVBoxLayout()); + m_projects = new QListView(this); + QHBoxLayout* topLayout = new QHBoxLayout(this); + KFilterProxySearchLine* filterLine = new KFilterProxySearchLine(this); KDEProjectsModel* model = new KDEProjectsModel(this); KDEProjectsReader* reader = new KDEProjectsReader(model, model); connect(reader, SIGNAL(downloadDone()), reader, SLOT(deleteLater())); - connect(m_projects, SIGNAL(currentIndexChanged(QString)), this, SIGNAL(changed(QString))); - - layout()->addWidget(m_projects); + connect(m_projects, SIGNAL(clicked(QModelIndex)), this, SLOT(projectIndexChanged(QModelIndex))); + + topLayout->addWidget(filterLine); + QPushButton* settings=new QPushButton(KIcon("configure"), i18n("Settings"), this); settings->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed); connect(settings, SIGNAL(clicked()), SLOT(showSettings())); + + topLayout->addWidget(settings); - layout()->addWidget(settings); + layout()->addItem(topLayout); + layout()->addWidget(m_projects); m_dialog = new KConfigDialog(this, "settings", KDEProviderSettings::self()); m_dialog->setFaceType(KPageDialog::Auto); @@ -71,6 +78,8 @@ KDEProviderWidget::KDEProviderWidget(QWidget* parent) proxyModel->sort(0); proxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); m_projects->setModel(proxyModel); + m_projects->setEditTriggers(QAbstractItemView::NoEditTriggers); + filterLine->setProxy(proxyModel); } VcsLocation extractLocation(const QVariantMap& urls) @@ -81,16 +90,13 @@ VcsLocation extractLocation(const QVariantMap& urls) VcsJob* KDEProviderWidget::createWorkingCopy(const KUrl& destinationDirectory) { - int pos = m_projects->currentIndex(); - if(pos<0) + QModelIndex pos = m_projects->currentIndex(); + if(!pos.isValid()) return 0; - QModelIndex idx = m_projects->model()->index(pos, 0); - Q_ASSERT(idx.isValid()); - IPlugin* plugin = ICore::self()->pluginController()->pluginForExtension("org.kdevelop.IBasicVersionControl", "kdevgit"); IBasicVersionControl* vcIface = plugin->extension<IBasicVersionControl>(); - VcsJob* ret = vcIface->createWorkingCopy(extractLocation(idx.data(KDEProjectsModel::VcsLocationRole).toMap()), destinationDirectory); + VcsJob* ret = vcIface->createWorkingCopy(extractLocation(pos.data(KDEProjectsModel::VcsLocationRole).toMap()), destinationDirectory); return ret; } @@ -102,3 +108,12 @@ void KDEProviderWidget::showSettings() m_dialog->show(); } + +void KDEProviderWidget::projectIndexChanged(QModelIndex currentIndex) +{ + if (currentIndex.isValid()) { + QString currentProjectName = currentIndex.data(Qt::DisplayRole).toString(); + + emit changed(currentProjectName); + } +} diff --git a/providers/kdeprovider/kdeproviderwidget.h b/providers/kdeprovider/kdeproviderwidget.h index 8025638..c498404 100644 --- a/providers/kdeprovider/kdeproviderwidget.h +++ b/providers/kdeprovider/kdeproviderwidget.h @@ -23,8 +23,10 @@ #include <interfaces/iprojectprovider.h> +class QModelIndex; class KConfigDialog; -class QComboBox; +class KFilterProxySearchLine; +class QListView; class KDEProviderWidget : public KDevelop::IProjectProviderWidget { Q_OBJECT @@ -35,9 +37,10 @@ class KDEProviderWidget : public KDevelop::IProjectProviderWidget private slots: void showSettings(); + void projectIndexChanged(QModelIndex currentIndex); private: - QComboBox* m_projects; + QListView* m_projects; KConfigDialog* m_dialog; };
