diff --git a/src/plugins/debugger/debuggerkitconfigwidget.cpp b/src/plugins/debugger/debuggerkitconfigwidget.cpp index 438f92bc48d86bf1f30d9c068eb5b1bdb2129431..f0c40afa896c0b0945200f5e4672d93f8f5c03bb 100644 --- a/src/plugins/debugger/debuggerkitconfigwidget.cpp +++ b/src/plugins/debugger/debuggerkitconfigwidget.cpp @@ -64,13 +64,12 @@ static const char dgbToolsDownloadLink64C[] = "http://www.microsoft.com/whdc/dev // DebuggerKitConfigWidget: // ----------------------------------------------------------------------- -DebuggerKitConfigWidget::DebuggerKitConfigWidget(ProjectExplorer::Kit *k, +DebuggerKitConfigWidget::DebuggerKitConfigWidget(ProjectExplorer::Kit *workingCopy, const DebuggerKitInformation *ki, QWidget *parent) : ProjectExplorer::KitConfigWidget(parent), - m_kit(k), + m_kit(workingCopy), m_info(ki), - m_dirty(false), m_label(new QLabel(this)), m_button(new QPushButton(tr("Manage..."), this)) { @@ -88,7 +87,7 @@ DebuggerKitConfigWidget::DebuggerKitConfigWidget(ProjectExplorer::Kit *k, connect(changeAction, SIGNAL(triggered()), this, SLOT(showDialog())); m_button->setMenu(buttonMenu); - discard(); + refresh(); } QWidget *DebuggerKitConfigWidget::buttonWidget() const @@ -106,45 +105,23 @@ void DebuggerKitConfigWidget::makeReadOnly() m_button->setEnabled(false); } -void DebuggerKitConfigWidget::apply() +void DebuggerKitConfigWidget::refresh() { - DebuggerKitInformation::setDebuggerItem(m_kit, m_item); - m_dirty = false; -} - -void DebuggerKitConfigWidget::discard() -{ - doSetItem(DebuggerKitInformation::debuggerItem(m_kit)); - m_dirty = false; + m_label->setText(DebuggerKitInformation::userOutput(DebuggerKitInformation::debuggerItem(m_kit))); } void DebuggerKitConfigWidget::autoDetectDebugger() { - setItem(DebuggerKitInformation::autoDetectItem(m_kit)); -} - -void DebuggerKitConfigWidget::doSetItem(const DebuggerKitInformation::DebuggerItem &item) -{ - m_item = item; - m_label->setText(DebuggerKitInformation::userOutput(m_item)); -} - -void DebuggerKitConfigWidget::setItem(const DebuggerKitInformation::DebuggerItem &item) -{ - if (m_item != item) { - m_dirty = true; - doSetItem(item); - emit dirty(); - } + DebuggerKitInformation::setDebuggerItem(m_kit, DebuggerKitInformation::autoDetectItem(m_kit)); } void DebuggerKitConfigWidget::showDialog() { DebuggerKitConfigDialog dialog; dialog.setWindowTitle(tr("Debugger for \"%1\"").arg(m_kit->displayName())); - dialog.setDebuggerItem(m_item); + dialog.setDebuggerItem(DebuggerKitInformation::debuggerItem(m_kit)); if (dialog.exec() == QDialog::Accepted) - setItem(dialog.item()); + DebuggerKitInformation::setDebuggerItem(m_kit, dialog.item()); } // ----------------------------------------------------------------------- diff --git a/src/plugins/debugger/debuggerkitconfigwidget.h b/src/plugins/debugger/debuggerkitconfigwidget.h index 2582afec52007dde8d28a7411fc227ef2f8eb2c8..505feca5585170e3b0e76e601828e1c4e6970ab0 100644 --- a/src/plugins/debugger/debuggerkitconfigwidget.h +++ b/src/plugins/debugger/debuggerkitconfigwidget.h @@ -61,7 +61,7 @@ class DebuggerKitConfigWidget : public ProjectExplorer::KitConfigWidget Q_OBJECT public: - DebuggerKitConfigWidget(ProjectExplorer::Kit *k, + DebuggerKitConfigWidget(ProjectExplorer::Kit *workingCopy, const DebuggerKitInformation *ki, QWidget *parent = 0); @@ -69,9 +69,8 @@ public: void makeReadOnly(); - void apply(); - void discard(); - bool isDirty() const { return m_dirty; } + void refresh(); + QWidget *buttonWidget() const; private slots: @@ -79,13 +78,8 @@ private slots: void showDialog(); private: - void setItem(const DebuggerKitInformation::DebuggerItem &item); - void doSetItem(const DebuggerKitInformation::DebuggerItem &item); - ProjectExplorer::Kit *m_kit; const DebuggerKitInformation *m_info; - DebuggerKitInformation::DebuggerItem m_item; - bool m_dirty; QLabel *m_label; QPushButton *m_button; }; diff --git a/src/plugins/projectexplorer/kitconfigwidget.h b/src/plugins/projectexplorer/kitconfigwidget.h index f4079ddf5c30eb5c010bcd1e549ba5049a9a93b2..c9239f3312997e4067454815f7461dc22a2979b0 100644 --- a/src/plugins/projectexplorer/kitconfigwidget.h +++ b/src/plugins/projectexplorer/kitconfigwidget.h @@ -52,10 +52,7 @@ public: virtual QString displayName() const = 0; virtual void makeReadOnly() = 0; - - virtual void apply() = 0; - virtual void discard() = 0; - virtual bool isDirty() const = 0; + virtual void refresh() = 0; virtual QWidget *buttonWidget() const { return 0; } diff --git a/src/plugins/projectexplorer/kitinformationconfigwidget.cpp b/src/plugins/projectexplorer/kitinformationconfigwidget.cpp index cb811d56cd9a6866b8c7eead7227767130713c73..78e3927689d12737383ee2cc4b87741c27506762 100644 --- a/src/plugins/projectexplorer/kitinformationconfigwidget.cpp +++ b/src/plugins/projectexplorer/kitinformationconfigwidget.cpp @@ -69,7 +69,7 @@ SysRootInformationConfigWidget::SysRootInformationConfigWidget(Kit *k, QWidget * m_chooser->setFileName(SysRootKitInformation::sysRoot(k)); - connect(m_chooser, SIGNAL(changed(QString)), this, SIGNAL(dirty())); + connect(m_chooser, SIGNAL(changed(QString)), this, SLOT(pathWasChanged())); } QString SysRootInformationConfigWidget::displayName() const @@ -77,21 +77,11 @@ QString SysRootInformationConfigWidget::displayName() const return tr("Sysroot:"); } -void SysRootInformationConfigWidget::apply() -{ - SysRootKitInformation::setSysRoot(m_kit, m_chooser->fileName()); -} - -void SysRootInformationConfigWidget::discard() +void SysRootInformationConfigWidget::refresh() { m_chooser->setFileName(SysRootKitInformation::sysRoot(m_kit)); } -bool SysRootInformationConfigWidget::isDirty() const -{ - return SysRootKitInformation::sysRoot(m_kit) != m_chooser->fileName(); -} - void SysRootInformationConfigWidget::makeReadOnly() { m_chooser->setEnabled(false); @@ -102,6 +92,11 @@ QWidget *SysRootInformationConfigWidget::buttonWidget() const return m_chooser->buttonAtIndex(0); } +void SysRootInformationConfigWidget::pathWasChanged() +{ + SysRootKitInformation::setSysRoot(m_kit, m_chooser->fileName()); +} + // -------------------------------------------------------------------------- // ToolChainInformationConfigWidget: // -------------------------------------------------------------------------- @@ -128,8 +123,8 @@ ToolChainInformationConfigWidget::ToolChainInformationConfigWidget(Kit *k, QWidg updateComboBox(); - discard(); - connect(m_comboBox, SIGNAL(currentIndexChanged(int)), this, SIGNAL(dirty())); + refresh(); + connect(m_comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(currentToolChainChanged(int))); m_manageButton->setContentsMargins(0, 0, 0, 0); m_manageButton->setText(tr("Manage...")); @@ -148,25 +143,11 @@ QString ToolChainInformationConfigWidget::displayName() const return tr("Compiler:"); } -void ToolChainInformationConfigWidget::apply() -{ - const QString id = m_comboBox->itemData(m_comboBox->currentIndex()).toString(); - ToolChain *tc = ToolChainManager::instance()->findToolChain(id); - ToolChainKitInformation::setToolChain(m_kit, tc); -} - -void ToolChainInformationConfigWidget::discard() +void ToolChainInformationConfigWidget::refresh() { m_comboBox->setCurrentIndex(indexOf(ToolChainKitInformation::toolChain(m_kit))); } -bool ToolChainInformationConfigWidget::isDirty() const -{ - ToolChain *tc = ToolChainKitInformation::toolChain(m_kit); - return (m_comboBox->itemData(m_comboBox->currentIndex()).toString()) - != (tc ? tc->id() : QString()); -} - void ToolChainInformationConfigWidget::makeReadOnly() { m_comboBox->setEnabled(false); @@ -205,6 +186,13 @@ void ToolChainInformationConfigWidget::manageToolChains() QLatin1String(ProjectExplorer::Constants::TOOLCHAIN_SETTINGS_PAGE_ID)); } +void ToolChainInformationConfigWidget::currentToolChainChanged(int idx) +{ + const QString id = m_comboBox->itemData(idx).toString(); + ToolChain *tc = ToolChainManager::instance()->findToolChain(id); + ToolChainKitInformation::setToolChain(m_kit, tc); +} + void ToolChainInformationConfigWidget::updateComboBox() { // remove unavailable tool chain: @@ -234,9 +222,9 @@ int ToolChainInformationConfigWidget::indexOf(const ToolChain *tc) // DeviceTypeInformationConfigWidget: // -------------------------------------------------------------------------- -DeviceTypeInformationConfigWidget::DeviceTypeInformationConfigWidget(Kit *k, QWidget *parent) : +DeviceTypeInformationConfigWidget::DeviceTypeInformationConfigWidget(Kit *workingCopy, QWidget *parent) : KitConfigWidget(parent), - m_isReadOnly(false), m_kit(k), + m_isReadOnly(false), m_kit(workingCopy), m_comboBox(new QComboBox) { setToolTip(tr("The type of device to run applications on.")); @@ -250,12 +238,12 @@ DeviceTypeInformationConfigWidget::DeviceTypeInformationConfigWidget(Kit *k, QWi = ExtensionSystem::PluginManager::instance()->getObjects<IDeviceFactory>(); foreach (IDeviceFactory *factory, factories) { foreach (Core::Id id, factory->availableCreationIds()) { - m_comboBox->addItem(factory->displayNameForId(id), QVariant::fromValue(id)); + m_comboBox->addItem(factory->displayNameForId(id), id.uniqueIdentifier()); } } - discard(); - connect(m_comboBox, SIGNAL(currentIndexChanged(int)), this, SIGNAL(dirty())); + refresh(); + connect(m_comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(currentTypeChanged(int))); } QString DeviceTypeInformationConfigWidget::displayName() const @@ -263,47 +251,37 @@ QString DeviceTypeInformationConfigWidget::displayName() const return tr("Device type:"); } -void DeviceTypeInformationConfigWidget::apply() -{ - Core::Id devType; - if (m_comboBox->currentIndex() >= 0) - devType = m_comboBox->itemData(m_comboBox->currentIndex()).value<Core::Id>(); - DeviceTypeKitInformation::setDeviceTypeId(m_kit, devType); -} - -void DeviceTypeInformationConfigWidget::discard() +void DeviceTypeInformationConfigWidget::refresh() { Core::Id devType = DeviceTypeKitInformation::deviceTypeId(m_kit); if (!devType.isValid()) m_comboBox->setCurrentIndex(-1); for (int i = 0; i < m_comboBox->count(); ++i) { - if (m_comboBox->itemData(i).value<Core::Id>() == devType) { + if (m_comboBox->itemData(i).toInt() == devType.uniqueIdentifier()) { m_comboBox->setCurrentIndex(i); break; } } } -bool DeviceTypeInformationConfigWidget::isDirty() const +void DeviceTypeInformationConfigWidget::makeReadOnly() { - Core::Id devType; - if (m_comboBox->currentIndex() >= 0) - devType = m_comboBox->itemData(m_comboBox->currentIndex()).value<Core::Id>(); - return DeviceTypeKitInformation::deviceTypeId(m_kit) != devType; + m_comboBox->setEnabled(false); } -void DeviceTypeInformationConfigWidget::makeReadOnly() +void DeviceTypeInformationConfigWidget::currentTypeChanged(int idx) { - m_comboBox->setEnabled(false); + Core::Id type = idx < 0 ? Core::Id() : Core::Id::fromUniqueIdentifier(m_comboBox->itemData(idx).toInt()); + DeviceTypeKitInformation::setDeviceTypeId(m_kit, type); } // -------------------------------------------------------------------------- // DeviceInformationConfigWidget: // -------------------------------------------------------------------------- -DeviceInformationConfigWidget::DeviceInformationConfigWidget(Kit *k, QWidget *parent) : +DeviceInformationConfigWidget::DeviceInformationConfigWidget(Kit *workingCopy, QWidget *parent) : KitConfigWidget(parent), - m_isReadOnly(false), m_kit(k), + m_isReadOnly(false), m_kit(workingCopy), m_comboBox(new QComboBox), m_manageButton(new QPushButton(this)), m_model(new DeviceManagerModel(DeviceManager::instance())) { @@ -323,8 +301,8 @@ DeviceInformationConfigWidget::DeviceInformationConfigWidget(Kit *k, QWidget *pa m_manageButton->setContentsMargins(0, 0, 0, 0); m_manageButton->setText(tr("Manage...")); - discard(); - connect(m_comboBox, SIGNAL(currentIndexChanged(int)), this, SIGNAL(dirty())); + refresh(); + connect(m_comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(currentDeviceChanged())); connect(m_manageButton, SIGNAL(clicked()), this, SLOT(manageDevices())); } @@ -334,26 +312,12 @@ QString DeviceInformationConfigWidget::displayName() const return tr("Device:"); } -void DeviceInformationConfigWidget::apply() -{ - int idx = m_comboBox->currentIndex(); - if (idx >= 0) - DeviceKitInformation::setDeviceId(m_kit, m_model->deviceId(idx)); - else - DeviceKitInformation::setDeviceId(m_kit, IDevice::invalidId()); -} - -void DeviceInformationConfigWidget::discard() +void DeviceInformationConfigWidget::refresh() { + m_model->setTypeFilter(DeviceTypeKitInformation::deviceTypeId(m_kit)); m_comboBox->setCurrentIndex(m_model->indexOf(DeviceKitInformation::device(m_kit))); } -bool DeviceInformationConfigWidget::isDirty() const -{ - Core::Id devId = DeviceKitInformation::deviceId(m_kit); - return devId != m_model->deviceId(m_comboBox->currentIndex()); -} - void DeviceInformationConfigWidget::makeReadOnly() { m_comboBox->setEnabled(false); @@ -380,5 +344,10 @@ void DeviceInformationConfigWidget::modelReset() m_comboBox->setCurrentIndex(m_model->indexForId(m_selectedId)); } +void DeviceInformationConfigWidget::currentDeviceChanged() +{ + DeviceKitInformation::setDeviceId(m_kit, m_model->deviceId(m_comboBox->currentIndex())); +} + } // namespace Internal } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/kitinformationconfigwidget.h b/src/plugins/projectexplorer/kitinformationconfigwidget.h index 44b79ff5ba10fc9cde91f09090e42d5dda212a25..2f3aaf1dd0f5e0e1e04b5e9af0b7ba6e10f7fd0a 100644 --- a/src/plugins/projectexplorer/kitinformationconfigwidget.h +++ b/src/plugins/projectexplorer/kitinformationconfigwidget.h @@ -61,12 +61,13 @@ public: explicit SysRootInformationConfigWidget(Kit *k, QWidget *parent = 0); QString displayName() const; - void apply(); - void discard(); - bool isDirty() const; + void refresh(); void makeReadOnly(); QWidget *buttonWidget() const; +private slots: + void pathWasChanged(); + private: Kit *m_kit; Utils::PathChooser *m_chooser; @@ -84,9 +85,7 @@ public: explicit ToolChainInformationConfigWidget(Kit *k, QWidget *parent = 0); QString displayName() const; - void apply(); - void discard(); - bool isDirty() const; + void refresh(); void makeReadOnly(); QWidget *buttonWidget() const; @@ -95,6 +94,7 @@ private slots: void toolChainRemoved(ProjectExplorer::ToolChain *tc); void toolChainUpdated(ProjectExplorer::ToolChain *tc); void manageToolChains(); + void currentToolChainChanged(int idx); private: void updateComboBox(); @@ -115,14 +115,15 @@ class DeviceTypeInformationConfigWidget : public KitConfigWidget Q_OBJECT public: - explicit DeviceTypeInformationConfigWidget(Kit *k, QWidget *parent = 0); + explicit DeviceTypeInformationConfigWidget(Kit *workingCopy, QWidget *parent = 0); QString displayName() const; - void apply(); - void discard(); - bool isDirty() const; + void refresh(); void makeReadOnly(); +private slots: + void currentTypeChanged(int idx); + private: bool m_isReadOnly; Kit *m_kit; @@ -138,12 +139,10 @@ class DeviceInformationConfigWidget : public KitConfigWidget Q_OBJECT public: - explicit DeviceInformationConfigWidget(Kit *k, QWidget *parent = 0); + explicit DeviceInformationConfigWidget(Kit *workingCopy, QWidget *parent = 0); QString displayName() const; - void apply(); - void discard(); - bool isDirty() const; + void refresh(); void makeReadOnly(); QWidget *buttonWidget() const; @@ -151,6 +150,7 @@ private slots: void manageDevices(); void modelAboutToReset(); void modelReset(); + void currentDeviceChanged(); private: bool m_isReadOnly; diff --git a/src/plugins/projectexplorer/kitmanager.cpp b/src/plugins/projectexplorer/kitmanager.cpp index a51770ea43c26cb76ea2a11c425710c11ab71650..8dbf709d0c2c4a66cf6b1ca3f68c245e828e70fa 100644 --- a/src/plugins/projectexplorer/kitmanager.cpp +++ b/src/plugins/projectexplorer/kitmanager.cpp @@ -359,11 +359,9 @@ QList<KitInformation *> KitManager::kitInformation() const Internal::KitManagerConfigWidget *KitManager::createConfigWidget(Kit *k) const { - if (!k) - return 0; Internal::KitManagerConfigWidget *result = new Internal::KitManagerConfigWidget(k); foreach (KitInformation *ki, d->m_informationList) - result->addConfigWidget(ki->createConfigWidget(k)); + result->addConfigWidget(ki->createConfigWidget(result->workingCopy())); return result; } diff --git a/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp b/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp index 857c9121bca970d143798b6f8612a3f01bb24a08..d62dd359cc14938f57952196ce758d81f34269b6 100644 --- a/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp +++ b/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp @@ -30,6 +30,7 @@ #include "kitmanagerconfigwidget.h" #include "kit.h" +#include "kitmanager.h" #include <utils/detailswidget.h> @@ -43,16 +44,20 @@ #include <QSizePolicy> #include <QStyle> +static const char WORKING_COPY_KIT_ID[] = "modified kit"; + namespace ProjectExplorer { namespace Internal { KitManagerConfigWidget::KitManagerConfigWidget(Kit *k, QWidget *parent) : - KitConfigWidget(parent), + QWidget(parent), m_layout(new QGridLayout), m_iconButton(new QToolButton), m_nameEdit(new QLineEdit), - m_kit(k) + m_kit(k), + m_modifiedKit(new Kit(Core::Id(WORKING_COPY_KIT_ID))), + m_fixingKit(false) { QVBoxLayout *top = new QVBoxLayout(this); top->setMargin(0); @@ -81,7 +86,21 @@ KitManagerConfigWidget::KitManagerConfigWidget(Kit *k, QWidget *parent) : discard(); connect(m_iconButton, SIGNAL(clicked()), this, SLOT(setIcon())); - connect(m_nameEdit, SIGNAL(textChanged(QString)), this, SIGNAL(dirty())); + connect(m_nameEdit, SIGNAL(textChanged(QString)), this, SLOT(setDisplayName())); + + KitManager *km = KitManager::instance(); + connect(km, SIGNAL(unmanagedKitUpdated(ProjectExplorer::Kit*)), + this, SLOT(workingCopyWasUpdated(ProjectExplorer::Kit*))); + connect(km, SIGNAL(kitUpdated(ProjectExplorer::Kit*)), + this, SLOT(kitWasUpdated(ProjectExplorer::Kit*))); +} + +KitManagerConfigWidget::~KitManagerConfigWidget() +{ + delete m_modifiedKit; + // Make sure our workingCopy did not get registered somehow: + foreach (const Kit *k, KitManager::instance()->kits()) + Q_ASSERT(k->id() != Core::Id(WORKING_COPY_KIT_ID)); } QString KitManagerConfigWidget::displayName() const @@ -91,27 +110,51 @@ QString KitManagerConfigWidget::displayName() const void KitManagerConfigWidget::apply() { - foreach (KitConfigWidget *w, m_widgets) - w->apply(); - m_kit->setIconPath(m_iconPath); - m_kit->setDisplayName(m_nameEdit->text()); + KitManager *km = KitManager::instance(); + bool mustRegister = false; + if (!m_kit) { + mustRegister = true; + m_kit = new Kit; + } + m_kit->copyFrom(m_modifiedKit); + if (mustRegister) + km->registerKit(m_kit); + + if (m_isDefaultKit) + km->setDefaultKit(m_kit); + emit dirty(); } void KitManagerConfigWidget::discard() { - foreach (KitConfigWidget *w, m_widgets) - w->discard(); - m_iconButton->setIcon(m_kit->icon()); - m_iconPath = m_kit->iconPath(); - m_nameEdit->setText(m_kit->displayName()); + if (m_kit) { + m_modifiedKit->copyFrom(m_kit); + m_isDefaultKit = (m_kit == KitManager::instance()->defaultKit()); + } else { + // This branch will only ever get reached once during setup of widget for a not-yet-existing + // kit. + m_isDefaultKit = false; + } + m_iconButton->setIcon(m_modifiedKit->icon()); + m_nameEdit->setText(m_modifiedKit->displayName()); + emit dirty(); } bool KitManagerConfigWidget::isDirty() const { - foreach (KitConfigWidget *w, m_widgets) - if (w->isDirty()) - return true; - return (m_kit->iconPath() != m_iconPath) || (m_kit->displayName() != m_nameEdit->text()); + return !m_kit + || !m_kit->isEqual(m_modifiedKit) + || m_isDefaultKit != (KitManager::instance()->defaultKit() == m_kit); +} + +bool KitManagerConfigWidget::isValid() const +{ + return m_modifiedKit->isValid(); +} + +QString KitManagerConfigWidget::validityMessage() const +{ + return m_modifiedKit->toHtml(); } void KitManagerConfigWidget::addConfigWidget(ProjectExplorer::KitConfigWidget *widget) @@ -119,8 +162,6 @@ void KitManagerConfigWidget::addConfigWidget(ProjectExplorer::KitConfigWidget *w Q_ASSERT(widget); Q_ASSERT(!m_widgets.contains(widget)); - connect(widget, SIGNAL(dirty()), this, SIGNAL(dirty())); - addToLayout(widget->displayName(), widget->toolTip(), widget, widget->buttonWidget()); m_widgets.append(widget); } @@ -133,9 +174,39 @@ void KitManagerConfigWidget::makeReadOnly() m_nameEdit->setEnabled(false); } +Kit *KitManagerConfigWidget::workingCopy() const +{ + return m_modifiedKit; +} + +bool KitManagerConfigWidget::configures(Kit *k) const +{ + return m_kit == k; +} + +void KitManagerConfigWidget::setIsDefaultKit(bool d) +{ + if (m_isDefaultKit != d) + return; + m_isDefaultKit = d; + emit dirty(); +} + +bool KitManagerConfigWidget::isDefaultKit() const +{ + return m_isDefaultKit; +} + +void KitManagerConfigWidget::removeKit() +{ + if (!m_kit) + return; + KitManager::instance()->deregisterKit(m_kit); +} + void KitManagerConfigWidget::setIcon() { - const QString path = QFileDialog::getOpenFileName(this, tr("Select Icon"), m_iconPath, tr("Images (*.png *.xpm *.jpg)")); + const QString path = QFileDialog::getOpenFileName(this, tr("Select Icon"), m_modifiedKit->iconPath(), tr("Images (*.png *.xpm *.jpg)")); if (path.isEmpty()) return; @@ -144,10 +215,37 @@ void KitManagerConfigWidget::setIcon() return; m_iconButton->setIcon(icon); - m_iconPath = path; + m_modifiedKit->setIconPath(path); emit dirty(); } +void KitManagerConfigWidget::setDisplayName() +{ + m_modifiedKit->setDisplayName(m_nameEdit->text()); +} + +void KitManagerConfigWidget::workingCopyWasUpdated(Kit *k) +{ + if (k != m_modifiedKit || m_fixingKit) + return; + + m_fixingKit = true; + k->fix(); + m_fixingKit = false; + + foreach (KitConfigWidget *w, m_widgets) + w->refresh(); + m_nameEdit->setText(k->displayName()); + m_iconButton->setIcon(k->icon()); + emit dirty(); +} + +void KitManagerConfigWidget::kitWasUpdated(Kit *k) +{ + if (m_kit == k) + discard(); +} + void KitManagerConfigWidget::addToLayout(const QString &name, const QString &toolTip, QWidget *widget, QWidget *button) { diff --git a/src/plugins/projectexplorer/kitmanagerconfigwidget.h b/src/plugins/projectexplorer/kitmanagerconfigwidget.h index df588ce6c70d1de25e8e551feb61018a24e5141b..e10a82ea8bbcdba73eeb3083443b4cf0dce263f7 100644 --- a/src/plugins/projectexplorer/kitmanagerconfigwidget.h +++ b/src/plugins/projectexplorer/kitmanagerconfigwidget.h @@ -44,23 +44,40 @@ class Kit; namespace Internal { -class KitManagerConfigWidget : public ProjectExplorer::KitConfigWidget +class KitManagerConfigWidget : public QWidget { Q_OBJECT public: explicit KitManagerConfigWidget(Kit *k, QWidget *parent = 0); + ~KitManagerConfigWidget(); QString displayName() const; void apply(); void discard(); bool isDirty() const; + bool isValid() const; + QString validityMessage() const; void addConfigWidget(ProjectExplorer::KitConfigWidget *widget); void makeReadOnly(); + Kit *workingCopy() const; + bool configures(ProjectExplorer::Kit *k) const; + void setIsDefaultKit(bool d); + bool isDefaultKit() const; + void removeKit(); + +public slots: + +signals: + void dirty(); + private slots: void setIcon(); + void setDisplayName(); + void workingCopyWasUpdated(ProjectExplorer::Kit *k); + void kitWasUpdated(ProjectExplorer::Kit *k); private: enum LayoutColumns { @@ -80,7 +97,9 @@ private: QLineEdit *m_nameEdit; QList<KitConfigWidget *> m_widgets; Kit *m_kit; - QString m_iconPath; + Kit *m_modifiedKit; + bool m_isDefaultKit; + bool m_fixingKit; }; } // namespace Internal diff --git a/src/plugins/projectexplorer/kitmodel.cpp b/src/plugins/projectexplorer/kitmodel.cpp index adb9a1e3843c10021a63242c4e9f3cabdd948216..6f2f5bafe9d52a786d307d33d15bdc8d5bc0920f 100644 --- a/src/plugins/projectexplorer/kitmodel.cpp +++ b/src/plugins/projectexplorer/kitmodel.cpp @@ -45,11 +45,19 @@ namespace Internal { class KitNode { public: - explicit KitNode(KitNode *kn, Kit *k = 0, bool c = false) : - parent(kn), kit(k), changed(c) + KitNode(KitNode *kn) : + parent(kn), widget(0) { if (kn) kn->childNodes.append(this); + } + + KitNode(KitNode *kn, Kit *k) : + parent(kn) + { + if (kn) + kn->childNodes.append(this); + widget = KitManager::instance()->createConfigWidget(k); if (widget) { if (k && k->isAutoDetected()) @@ -62,6 +70,7 @@ public: { if (parent) parent->childNodes.removeOne(this); + delete widget; // deleting a child removes it from childNodes // so operate on a temporary list @@ -72,9 +81,7 @@ public: KitNode *parent; QList<KitNode *> childNodes; - Kit *kit; KitManagerConfigWidget *widget; - bool changed; }; // -------------------------------------------------------------------------- @@ -92,8 +99,6 @@ KitModel::KitModel(QBoxLayout *parentLayout, QObject *parent) : this, SLOT(addKit(ProjectExplorer::Kit*))); connect(KitManager::instance(), SIGNAL(kitRemoved(ProjectExplorer::Kit*)), this, SLOT(removeKit(ProjectExplorer::Kit*))); - connect(KitManager::instance(), SIGNAL(kitUpdated(ProjectExplorer::Kit*)), - this, SLOT(updateKit(ProjectExplorer::Kit*))); connect(KitManager::instance(), SIGNAL(defaultkitChanged()), this, SLOT(changeDefaultKit())); @@ -162,10 +167,10 @@ QVariant KitModel::data(const QModelIndex &index, int role) const return tr("Auto-detected"); if (node == m_manualRoot && role == Qt::DisplayRole) return tr("Manual"); - if (node->kit) { + if (node->widget) { if (role == Qt::FontRole) { QFont f = QApplication::font(); - if (node->changed) + if (node->widget->isDirty()) f.setBold(!f.bold()); if (node == m_defaultNode) f.setItalic(f.style() != QFont::StyleItalic); @@ -177,9 +182,9 @@ QVariant KitModel::data(const QModelIndex &index, int role) const baseName = tr("%1 (default)").arg(baseName); return baseName; } else if (role == Qt::DecorationRole) { - return node->kit->isValid() ? QIcon() : warningIcon; + return node->widget->isValid() ? QIcon() : warningIcon; } else if (role == Qt::ToolTipRole) { - return node->kit->toHtml(); + return node->widget->validityMessage(); } } return QVariant(); @@ -192,7 +197,7 @@ Qt::ItemFlags KitModel::flags(const QModelIndex &index) const KitNode *node = static_cast<KitNode *>(index.internalPointer()); Q_ASSERT(node); - if (!node->kit) + if (!node->widget) return Qt::ItemIsEnabled; return Qt::ItemIsEnabled | Qt::ItemIsSelectable; @@ -212,12 +217,12 @@ Kit *KitModel::kit(const QModelIndex &index) return 0; KitNode *node = static_cast<KitNode *>(index.internalPointer()); Q_ASSERT(node); - return node->kit; + return node->widget->workingCopy(); } QModelIndex KitModel::indexOf(Kit *k) const { - KitNode *n = find(k); + KitNode *n = findWorkingCopy(k); return n ? index(n) : QModelIndex(); } @@ -227,7 +232,7 @@ void KitModel::setDefaultKit(const QModelIndex &index) return; KitNode *node = static_cast<KitNode *>(index.internalPointer()); Q_ASSERT(node); - if (node->kit) + if (node->widget) setDefaultNode(node); } @@ -236,7 +241,7 @@ bool KitModel::isDefaultKit(const QModelIndex &index) return m_defaultNode == static_cast<KitNode *>(index.internalPointer()); } -KitConfigWidget *KitModel::widget(const QModelIndex &index) +KitManagerConfigWidget *KitModel::widget(const QModelIndex &index) { if (!index.isValid()) return 0; @@ -248,7 +253,7 @@ KitConfigWidget *KitModel::widget(const QModelIndex &index) bool KitModel::isDirty() const { foreach (KitNode *n, m_manualRoot->childNodes) { - if (n->changed) + if (n->widget->isDirty()) return true; } return false; @@ -256,18 +261,18 @@ bool KitModel::isDirty() const bool KitModel::isDirty(Kit *k) const { - KitNode *n = find(k); - return n ? !n->changed : false; + KitNode *n = findWorkingCopy(k); + return n ? n->widget->isDirty() : false; } void KitModel::setDirty() { - KitConfigWidget *w = qobject_cast<KitConfigWidget *>(sender()); - foreach (KitNode *n, m_manualRoot->childNodes) { - if (n->widget == w) { - n->changed = n->widget->isDirty(); + KitManagerConfigWidget *w = qobject_cast<KitManagerConfigWidget *>(sender()); + QList<KitNode *> nodes = m_manualRoot->childNodes; + nodes << m_autoRoot->childNodes; + foreach (KitNode *n, nodes) { + if (n->widget == w) emit dataChanged(index(n, 0), index(n, columnCount(QModelIndex()))); - } } } @@ -277,61 +282,24 @@ void KitModel::apply() QList<KitNode *> nodes = m_toRemoveList; foreach (KitNode *n, nodes) { Q_ASSERT(!n->parent); - KitManager::instance()->deregisterKit(n->kit); + n->widget->removeKit(); } Q_ASSERT(m_toRemoveList.isEmpty()); // Update kits: foreach (KitNode *n, m_manualRoot->childNodes) { Q_ASSERT(n); - Q_ASSERT(n->kit); - if (n->changed) { - KitManager::instance()->blockSignals(true); - if (n->widget) - n->widget->apply(); - n->changed = false; - - KitManager::instance()->blockSignals(false); - KitManager::instance()->notifyAboutUpdate(n->kit); + Q_ASSERT(n->widget); + if (n->widget->isDirty()) { + n->widget->apply(); emit dataChanged(index(n, 0), index(n, columnCount(QModelIndex()))); } } - - // Add new (and already updated) kits - QStringList removedSts; - nodes = m_toAddList; - foreach (KitNode *n, nodes) { - if (!KitManager::instance()->registerKit(n->kit)) - removedSts << n->kit->displayName(); - } - - foreach (KitNode *n, m_toAddList) - markForRemoval(n->kit); - - if (removedSts.count() == 1) { - QMessageBox::warning(0, - tr("Duplicate Kit Detected"), - tr("The kit<br> %1<br>" - " was already configured. It was not configured again.") - .arg(removedSts.at(0))); - - } else if (!removedSts.isEmpty()) { - QMessageBox::warning(0, - tr("Duplicate Kits Detected"), - tr("The following kits were already configured:<br>" - " %1<br>" - "They were not configured again.") - .arg(removedSts.join(QLatin1String(",<br> ")))); - } - - // Set default kit: - if (m_defaultNode) - KitManager::instance()->setDefaultKit(m_defaultNode->kit); } void KitModel::markForRemoval(Kit *k) { - KitNode *node = find(k); + KitNode *node = findWorkingCopy(k); if (!node) return; @@ -347,29 +315,31 @@ void KitModel::markForRemoval(Kit *k) beginRemoveRows(index(m_manualRoot), m_manualRoot->childNodes.indexOf(node), m_manualRoot->childNodes.indexOf(node)); m_manualRoot->childNodes.removeOne(node); node->parent = 0; - if (m_toAddList.contains(node)) { - delete node->kit; - node->kit = 0; - m_toAddList.removeOne(node); + if (node->widget->configures(0)) delete node; - } else { + else m_toRemoveList.append(node); - } endRemoveRows(); } -void KitModel::markForAddition(Kit *k) +Kit *KitModel::markForAddition(Kit *baseKit) { int pos = m_manualRoot->childNodes.size(); beginInsertRows(index(m_manualRoot), pos, pos); - KitNode *node = createNode(m_manualRoot, k, true); - m_toAddList.append(node); + KitNode *node = createNode(m_manualRoot, 0); + if (baseKit) { + Kit *k = node->widget->workingCopy(); + k->copyFrom(baseKit); + k->setDisplayName(tr("Clone of %1").arg(k->displayName())); + } if (!m_defaultNode) setDefaultNode(node); endInsertRows(); + + return node->widget->workingCopy(); } QModelIndex KitModel::index(KitNode *node, int column) const @@ -382,55 +352,47 @@ QModelIndex KitModel::index(KitNode *node, int column) const return index(node->parent->childNodes.indexOf(node), column, index(node->parent)); } -KitNode *KitModel::find(Kit *k) const +KitNode *KitModel::findWorkingCopy(Kit *k) const { foreach (KitNode *n, m_autoRoot->childNodes) { - if (n->kit == k) + if (n->widget->workingCopy() == k) return n; } foreach (KitNode *n, m_manualRoot->childNodes) { - if (n->kit == k) + if (n->widget->workingCopy() == k) return n; } return 0; } -KitNode *KitModel::createNode(KitNode *parent, Kit *k, bool changed) +KitNode *KitModel::createNode(KitNode *parent, Kit *k) { - KitNode *node = new KitNode(parent, k, changed); - if (node->widget) { - node->widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - m_parentLayout->addWidget(node->widget, 10); - connect(node->widget, SIGNAL(dirty()), - this, SLOT(setDirty())); - } + KitNode *node = new KitNode(parent, k); + node->widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + m_parentLayout->addWidget(node->widget, 10); + connect(node->widget, SIGNAL(dirty()), this, SLOT(setDirty())); return node; } void KitModel::setDefaultNode(KitNode *node) { if (m_defaultNode) { - QModelIndex idx = index(m_defaultNode); - if (idx.isValid()) - emit dataChanged(idx, idx); + m_defaultNode->widget->setIsDefaultKit(false); + emit dataChanged(index(m_defaultNode), index(m_defaultNode)); } m_defaultNode = node; if (m_defaultNode) { - QModelIndex idx = index(m_defaultNode); - if (idx.isValid()) - emit dataChanged(idx, idx); + m_defaultNode->widget->setIsDefaultKit(true); + emit dataChanged(index(m_defaultNode), index(m_defaultNode)); } } void KitModel::addKit(Kit *k) { - QList<KitNode *> nodes = m_toAddList; - foreach (KitNode *n, nodes) { - if (n->kit == k) { - m_toAddList.removeOne(n); - // do not delete n: Still used elsewhere! + foreach (KitNode *n, m_manualRoot->childNodes) { + // Was added by us + if (n->widget->configures(k)) return; - } } KitNode *parent = m_manualRoot; @@ -439,7 +401,7 @@ void KitModel::addKit(Kit *k) int row = parent->childNodes.count(); beginInsertRows(index(parent), row, row); - createNode(parent, k, false); + createNode(parent, k); endInsertRows(); emit kitStateChanged(); @@ -449,8 +411,10 @@ void KitModel::removeKit(Kit *k) { QList<KitNode *> nodes = m_toRemoveList; foreach (KitNode *n, nodes) { - if (n->kit == k) { + if (n->widget->configures(k)) { m_toRemoveList.removeOne(n); + if (m_defaultNode == n) + m_defaultNode = 0; delete n; return; } @@ -462,7 +426,7 @@ void KitModel::removeKit(Kit *k) int row = 0; KitNode *node = 0; foreach (KitNode *current, parent->childNodes) { - if (current->kit == k) { + if (current->widget->configures(k)) { node = current; break; } @@ -471,27 +435,25 @@ void KitModel::removeKit(Kit *k) beginRemoveRows(index(parent), row, row); parent->childNodes.removeAt(row); - delete node; + if (m_defaultNode == node) + m_defaultNode = 0; endRemoveRows(); + delete node; emit kitStateChanged(); } -void KitModel::updateKit(Kit *k) -{ - KitNode *n = find(k); - // This can happen if Qt Versions and kits are removed simultaneously. - if (!n) - return; - if (n->widget) - n->widget->discard(); - QModelIndex idx = index(n); - emit dataChanged(idx, idx); -} - void KitModel::changeDefaultKit() { - setDefaultNode(find(KitManager::instance()->defaultKit())); + Kit *defaultKit = KitManager::instance()->defaultKit(); + QList<KitNode *> nodes = m_autoRoot->childNodes; + nodes << m_manualRoot->childNodes; + foreach (KitNode *n, nodes) { + if (n->widget->configures(defaultKit)) { + setDefaultNode(n); + break; + } + } } } // namespace Internal diff --git a/src/plugins/projectexplorer/kitmodel.h b/src/plugins/projectexplorer/kitmodel.h index 065a20047bbc5bcbedaaab9add2845d02b18c076..d0ebf3bfb15c545dcfa9c40e0a989b57504294b1 100644 --- a/src/plugins/projectexplorer/kitmodel.h +++ b/src/plugins/projectexplorer/kitmodel.h @@ -42,11 +42,11 @@ QT_END_NAMESPACE namespace ProjectExplorer { class Kit; -class KitConfigWidget; class KitFactory; class KitManager; namespace Internal { +class KitManagerConfigWidget; class KitNode; @@ -77,7 +77,7 @@ public: void setDefaultKit(const QModelIndex &index); bool isDefaultKit(const QModelIndex &index); - KitConfigWidget *widget(const QModelIndex &); + ProjectExplorer::Internal::KitManagerConfigWidget *widget(const QModelIndex &); bool isDirty() const; bool isDirty(Kit *k) const; @@ -85,7 +85,7 @@ public: void apply(); void markForRemoval(Kit *k); - void markForAddition(Kit *k); + Kit *markForAddition(Kit *baseKit); signals: void kitStateChanged(); @@ -93,21 +93,19 @@ signals: private slots: void addKit(ProjectExplorer::Kit *k); void removeKit(ProjectExplorer::Kit *k); - void updateKit(ProjectExplorer::Kit *k); void changeDefaultKit(); void setDirty(); private: QModelIndex index(KitNode *, int column = 0) const; - KitNode *find(Kit *k) const; - KitNode *createNode(KitNode *parent, Kit *k, bool changed); + KitNode *findWorkingCopy(Kit *k) const; + KitNode *createNode(KitNode *parent, Kit *k); void setDefaultNode(KitNode *node); KitNode *m_root; KitNode *m_autoRoot; KitNode *m_manualRoot; - QList<KitNode *> m_toAddList; QList<KitNode *> m_toRemoveList; QBoxLayout *m_parentLayout; diff --git a/src/plugins/projectexplorer/kitoptionspage.cpp b/src/plugins/projectexplorer/kitoptionspage.cpp index 2e3c8b777e42d1b6440c8f6f7c3c1817cd85875f..71a0a4d61971c3b6a5e4f03532f1d3c0dca914db 100644 --- a/src/plugins/projectexplorer/kitoptionspage.cpp +++ b/src/plugins/projectexplorer/kitoptionspage.cpp @@ -32,7 +32,7 @@ #include "kitmodel.h" #include "kit.h" #include "projectexplorerconstants.h" -#include "kitconfigwidget.h" +#include "kitmanagerconfigwidget.h" #include "kitmanager.h" #include <coreplugin/icore.h> @@ -173,18 +173,18 @@ void KitOptionsPage::kitSelectionChanged() QModelIndex current = currentIndex(); m_currentWidget = current.isValid() ? m_model->widget(current) : 0; - if (m_currentWidget) + if (m_currentWidget) { m_currentWidget->setVisible(true); + m_kitsView->scrollTo(current); + } updateState(); } void KitOptionsPage::addNewKit() { - Kit *k = new Kit; - m_model->markForAddition(k); + Kit *k = m_model->markForAddition(0); QModelIndex newIdx = m_model->indexOf(k); - m_kitsView->scrollTo(newIdx); m_selectionModel->select(newIdx, QItemSelectionModel::Clear | QItemSelectionModel::SelectCurrent @@ -197,10 +197,7 @@ void KitOptionsPage::cloneKit() if (!current) return; - Kit *k = current->clone(); - - m_model->markForAddition(k); - + Kit *k = m_model->markForAddition(current); QModelIndex newIdx = m_model->indexOf(k); m_kitsView->scrollTo(newIdx); m_selectionModel->select(newIdx, @@ -234,7 +231,7 @@ void KitOptionsPage::updateState() QModelIndex index = currentIndex(); Kit *k = m_model->kit(index); if (k) { - canCopy = k->isValid(); + canCopy = true; canDelete = !k->isAutoDetected(); canMakeDefault = !m_model->isDefaultKit(index); } diff --git a/src/plugins/qt4projectmanager/qmakekitconfigwidget.cpp b/src/plugins/qt4projectmanager/qmakekitconfigwidget.cpp index eb177cda80a5d24476c2fcfb87f02c78cad776fe..d5546f90b1ac715e2b365fee794a84b73b35c5fb 100644 --- a/src/plugins/qt4projectmanager/qmakekitconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qmakekitconfigwidget.cpp @@ -54,8 +54,8 @@ QmakeKitConfigWidget::QmakeKitConfigWidget(ProjectExplorer::Kit *k, QWidget *par m_lineEdit->setContentsMargins(0, 0, 0, 0); layout->addWidget(m_lineEdit); - discard(); // set up everything according to kit - connect(m_lineEdit, SIGNAL(textEdited(QString)), this, SIGNAL(dirty())); + refresh(); // set up everything according to kit + connect(m_lineEdit, SIGNAL(textEdited(QString)), this, SLOT(mkspecWasChanged(QString))); } QString QmakeKitConfigWidget::displayName() const @@ -68,19 +68,14 @@ void QmakeKitConfigWidget::makeReadOnly() m_lineEdit->setEnabled(false); } -void QmakeKitConfigWidget::apply() -{ - QmakeKitInformation::setMkspec(m_kit, Utils::FileName::fromString(m_lineEdit->text())); -} - -void QmakeKitConfigWidget::discard() +void QmakeKitConfigWidget::refresh() { m_lineEdit->setText(QmakeKitInformation::mkspec(m_kit).toString()); } -bool QmakeKitConfigWidget::isDirty() const +void QmakeKitConfigWidget::mkspecWasChanged(const QString &text) { - return m_lineEdit->text() != QmakeKitInformation::mkspec(m_kit).toString(); + QmakeKitInformation::setMkspec(m_kit, Utils::FileName::fromString(text)); } } // namespace Internal diff --git a/src/plugins/qt4projectmanager/qmakekitconfigwidget.h b/src/plugins/qt4projectmanager/qmakekitconfigwidget.h index 727a3272be10c7c8a4b83b82743cff558564122e..0f2f9227e3897374bbfa0ec521824b0b9211f21d 100644 --- a/src/plugins/qt4projectmanager/qmakekitconfigwidget.h +++ b/src/plugins/qt4projectmanager/qmakekitconfigwidget.h @@ -52,9 +52,10 @@ public: void makeReadOnly(); - void apply(); - void discard(); - bool isDirty() const; + void refresh(); + +private slots: + void mkspecWasChanged(const QString &text); private: int findQtVersion(const int id) const; diff --git a/src/plugins/qtsupport/qtkitconfigwidget.cpp b/src/plugins/qtsupport/qtkitconfigwidget.cpp index 0d72c89813040ae031d8b021dfcb8c290e567b55..64b02115b7295b90d7c38d739e594388b3ef23c0 100644 --- a/src/plugins/qtsupport/qtkitconfigwidget.cpp +++ b/src/plugins/qtsupport/qtkitconfigwidget.cpp @@ -73,13 +73,11 @@ QtKitConfigWidget::QtKitConfigWidget(ProjectExplorer::Kit *k, QWidget *parent) : versionIds.append(v->uniqueId()); versionsChanged(versionIds, QList<int>(), QList<int>()); - discard(); - connect(m_combo, SIGNAL(currentIndexChanged(int)), this, SIGNAL(dirty())); + refresh(); + connect(m_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(currentWasChanged(int))); connect(mgr, SIGNAL(qtVersionsChanged(QList<int>,QList<int>,QList<int>)), this, SLOT(versionsChanged(QList<int>,QList<int>,QList<int>))); - connect(ProjectExplorer::KitManager::instance(), SIGNAL(kitUpdated(ProjectExplorer::Kit*)), - this, SLOT(kitUpdated(ProjectExplorer::Kit*))); connect(m_manageButton, SIGNAL(clicked()), this, SLOT(manageQtVersions())); } @@ -94,23 +92,11 @@ void QtKitConfigWidget::makeReadOnly() m_combo->setEnabled(false); } -void QtKitConfigWidget::apply() -{ - int id = m_combo->itemData(m_combo->currentIndex()).toInt(); - QtKitInformation::setQtVersionId(m_kit, id); -} - -void QtKitConfigWidget::discard() +void QtKitConfigWidget::refresh() { m_combo->setCurrentIndex(findQtVersion(QtKitInformation::qtVersionId(m_kit))); } -bool QtKitConfigWidget::isDirty() const -{ - int id = m_combo->itemData(m_combo->currentIndex()).toInt(); - return id != QtKitInformation::qtVersionId(m_kit); -} - QWidget *QtKitConfigWidget::buttonWidget() const { return m_manageButton; @@ -141,27 +127,17 @@ void QtKitConfigWidget::versionsChanged(const QList<int> &added, const QList<int } } -void QtKitConfigWidget::kitUpdated(ProjectExplorer::Kit *k) -{ - if (k != m_kit) - return; - - int id = QtKitInformation::qtVersionId(k); - - for (int i = 0; i < m_combo->count(); ++i) { - if (m_combo->itemData(i).toInt() == id) { - m_combo->setCurrentIndex(i); - break; - } - } -} - void QtKitConfigWidget::manageQtVersions() { Core::ICore::showOptionsDialog(QLatin1String(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY), QLatin1String(QtSupport::Constants::QTVERSION_SETTINGS_PAGE_ID)); } +void QtKitConfigWidget::currentWasChanged(int idx) +{ + QtKitInformation::setQtVersionId(m_kit, m_combo->itemData(idx).toInt()); +} + int QtKitConfigWidget::findQtVersion(const int id) const { for (int i = 0; i < m_combo->count(); ++i) { diff --git a/src/plugins/qtsupport/qtkitconfigwidget.h b/src/plugins/qtsupport/qtkitconfigwidget.h index f0dd54e41cdecc6b756d306756f998a0680952c3..0ee01d683863cb9967cde38509733d9b436ef627 100644 --- a/src/plugins/qtsupport/qtkitconfigwidget.h +++ b/src/plugins/qtsupport/qtkitconfigwidget.h @@ -53,15 +53,13 @@ public: void makeReadOnly(); - void apply(); - void discard(); - bool isDirty() const; + void refresh(); QWidget *buttonWidget() const; private slots: void versionsChanged(const QList<int> &added, const QList<int> &removed, const QList<int> &changed); - void kitUpdated(ProjectExplorer::Kit *k); void manageQtVersions(); + void currentWasChanged(int idx); private: int findQtVersion(const int id) const;