KitChooser: Add a 'Manage' button for quick setting access

Change-Id: I0f90075ed6549b1e5093d8cc81975bc46acf38fb
Reviewed-by: David Schulz <david.schulz@digia.com>
This commit is contained in:
hjk
2013-06-07 17:57:25 +02:00
parent 242ad7e527
commit 6669e8ea75
6 changed files with 50 additions and 14 deletions

View File

@@ -43,6 +43,7 @@
#include <QButtonGroup> #include <QButtonGroup>
#include <QCheckBox> #include <QCheckBox>
#include <QComboBox>
#include <QDebug> #include <QDebug>
#include <QDialogButtonBox> #include <QDialogButtonBox>
#include <QDir> #include <QDir>

View File

@@ -109,6 +109,7 @@
# include <utils/winutils.h> # include <utils/winutils.h>
#endif #endif
#include <QComboBox>
#include <QDockWidget> #include <QDockWidget>
#include <QFileDialog> #include <QFileDialog>
#include <QInputDialog> #include <QInputDialog>

View File

@@ -316,7 +316,7 @@ bool AttachCoreDialog::useLocalCoreFile() const
void AttachCoreDialog::changed() void AttachCoreDialog::changed()
{ {
bool isValid = d->kitChooser->currentIndex() >= 0 && d->localExecFileName->isValid(); bool isValid = d->kitChooser->currentKit() && d->localExecFileName->isValid();
bool isKitLocal = isLocalKit(); bool isKitLocal = isLocalKit();
d->forceLocalLabel->setVisible(!isKitLocal); d->forceLocalLabel->setVisible(!isKitLocal);

View File

@@ -47,6 +47,7 @@
#include <QDebug> #include <QDebug>
#include <QProcess> #include <QProcess>
#include <QtAlgorithms> #include <QtAlgorithms>
#include <QTabWidget>
#include <QTextEdit> #include <QTextEdit>
#include <ctype.h> #include <ctype.h>

View File

@@ -33,6 +33,11 @@
#include "kitmanager.h" #include "kitmanager.h"
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <projectexplorerconstants.h>
#include <QComboBox>
#include <QHBoxLayout>
#include <QPushButton>
#include <QSettings> #include <QSettings>
namespace ProjectExplorer { namespace ProjectExplorer {
@@ -40,9 +45,25 @@ namespace ProjectExplorer {
const char lastKitKey[] = "LastSelectedKit"; const char lastKitKey[] = "LastSelectedKit";
KitChooser::KitChooser(QWidget *parent) : KitChooser::KitChooser(QWidget *parent) :
QComboBox(parent) QWidget(parent)
{ {
connect(this, SIGNAL(currentIndexChanged(int)), SLOT(onCurrentIndexChanged(int))); m_chooser = new QComboBox(this);
m_manageButton = new QPushButton(tr("Manage..."), this);
QHBoxLayout *layout = new QHBoxLayout(this);
layout->setContentsMargins(0, 0, 0, 0);
layout->addWidget(m_chooser);
layout->addWidget(m_manageButton);
connect(m_chooser, SIGNAL(currentIndexChanged(int)), SLOT(onCurrentIndexChanged(int)));
connect(m_manageButton, SIGNAL(clicked()), SLOT(onManageButtonClicked()));
connect(KitManager::instance(), SIGNAL(kitsChanged()), SLOT(populate()));
}
void KitChooser::onManageButtonClicked()
{
Core::ICore::showOptionsDialog(Constants::PROJECTEXPLORER_SETTINGS_CATEGORY,
Constants::KITS_SETTINGS_PAGE_ID, this);
} }
void KitChooser::onCurrentIndexChanged(int index) void KitChooser::onCurrentIndexChanged(int index)
@@ -51,6 +72,7 @@ void KitChooser::onCurrentIndexChanged(int index)
setToolTip(kitToolTip(kit)); setToolTip(kitToolTip(kit));
else else
setToolTip(QString()); setToolTip(QString());
emit currentIndexChanged(index);
} }
bool KitChooser::kitMatches(const Kit *k) const bool KitChooser::kitMatches(const Kit *k) const
@@ -70,31 +92,31 @@ QString KitChooser::kitToolTip(Kit *k) const
void KitChooser::populate() void KitChooser::populate()
{ {
clear(); m_chooser->clear();
foreach (Kit *kit, KitManager::kits()) { foreach (Kit *kit, KitManager::kits()) {
if (kitMatches(kit)) { if (kitMatches(kit)) {
addItem(kitText(kit), qVariantFromValue(kit->id())); m_chooser->addItem(kitText(kit), qVariantFromValue(kit->id()));
setItemData(count() - 1, kitToolTip(kit), Qt::ToolTipRole); m_chooser->setItemData(m_chooser->count() - 1, kitToolTip(kit), Qt::ToolTipRole);
} }
} }
setEnabled(count() > 1); m_chooser->setEnabled(m_chooser->count() > 1);
const int index = Core::ICore::settings()->value(QLatin1String(lastKitKey)).toInt(); const int index = Core::ICore::settings()->value(QLatin1String(lastKitKey)).toInt();
setCurrentIndex(qMin(index, count())); m_chooser->setCurrentIndex(qMin(index, m_chooser->count()));
} }
Kit *KitChooser::currentKit() const Kit *KitChooser::currentKit() const
{ {
const int index = currentIndex(); const int index = m_chooser->currentIndex();
Core::ICore::settings()->setValue(QLatin1String(lastKitKey), index); Core::ICore::settings()->setValue(QLatin1String(lastKitKey), index);
return index == -1 ? 0 : kitAt(index); return index == -1 ? 0 : kitAt(index);
} }
void KitChooser::setCurrentKitId(Core::Id id) void KitChooser::setCurrentKitId(Core::Id id)
{ {
for (int i = 0, n = count(); i != n; ++i) { for (int i = 0, n = m_chooser->count(); i != n; ++i) {
if (kitAt(i)->id() == id) { if (kitAt(i)->id() == id) {
setCurrentIndex(i); m_chooser->setCurrentIndex(i);
break; break;
} }
} }
@@ -108,7 +130,7 @@ Core::Id KitChooser::currentKitId() const
Kit *KitChooser::kitAt(int index) const Kit *KitChooser::kitAt(int index) const
{ {
Core::Id id = qvariant_cast<Core::Id>(itemData(index)); Core::Id id = qvariant_cast<Core::Id>(m_chooser->itemData(index));
return KitManager::find(id); return KitManager::find(id);
} }

View File

@@ -32,7 +32,12 @@
#include "projectexplorer_export.h" #include "projectexplorer_export.h"
#include <QComboBox> #include <QWidget>
QT_BEGIN_NAMESPACE
class QComboBox;
class QPushButton;
QT_END_NAMESPACE
namespace Core { class Id; } namespace Core { class Id; }
@@ -41,7 +46,7 @@ namespace ProjectExplorer {
class Kit; class Kit;
// Let the user pick a kit. // Let the user pick a kit.
class PROJECTEXPLORER_EXPORT KitChooser : public QComboBox class PROJECTEXPLORER_EXPORT KitChooser : public QWidget
{ {
Q_OBJECT Q_OBJECT
@@ -53,11 +58,15 @@ public:
Kit *currentKit() const; Kit *currentKit() const;
signals:
void currentIndexChanged(int);
public slots: public slots:
void populate(); void populate();
private slots: private slots:
void onCurrentIndexChanged(int index); void onCurrentIndexChanged(int index);
void onManageButtonClicked();
protected: protected:
virtual bool kitMatches(const Kit *k) const; virtual bool kitMatches(const Kit *k) const;
@@ -66,6 +75,8 @@ protected:
private: private:
Kit *kitAt(int index) const; Kit *kitAt(int index) const;
QComboBox *m_chooser;
QPushButton *m_manageButton;
}; };
} // namespace ProjectExplorer } // namespace ProjectExplorer