diff options
author | El Mehdi Fekari <[email protected]> | 2013-12-05 18:24:08 +0100 |
---|---|---|
committer | Mehdi Fekari <[email protected]> | 2014-01-14 16:51:54 +0100 |
commit | 41a2059f8521355cdad55bc5ef085d89197d3706 (patch) | |
tree | 945fcde0d5d042740a2787465f5d7f524e0a45f7 | |
parent | 1131c11a111dbd51265add2da05d77d37823f45e (diff) |
Qnx: Save BlackBerry user configurations
* Add a bbndkconfigurations.xml file to store BlackBerry user configurations
* Save both manual and auto detected user configurations
* Mark invalid configurations in the BlackBerry settings widget
* Provide a cleanup user action to clear invalid configurations
Task-number: QTCREATORBUG-11004
Change-Id: Ibb29aa5010317f62233865d42d6ca4ae3afa0de3
Reviewed-by: David Kaspar <[email protected]>
Reviewed-by: Tobias Hunger <[email protected]>
-rw-r--r-- | src/plugins/qnx/blackberryconfiguration.cpp | 62 | ||||
-rw-r--r-- | src/plugins/qnx/blackberryconfiguration.h | 6 | ||||
-rw-r--r-- | src/plugins/qnx/blackberryconfigurationmanager.cpp | 197 | ||||
-rw-r--r-- | src/plugins/qnx/blackberryconfigurationmanager.h | 16 | ||||
-rw-r--r-- | src/plugins/qnx/blackberryndksettingswidget.cpp | 44 | ||||
-rw-r--r-- | src/plugins/qnx/blackberryndksettingswidget.h | 1 | ||||
-rw-r--r-- | src/plugins/qnx/blackberryndksettingswidget.ui | 23 | ||||
-rw-r--r-- | src/plugins/qnx/qnxconstants.h | 2 | ||||
-rw-r--r-- | src/plugins/qnx/qnxutils.cpp | 1 | ||||
-rw-r--r-- | src/plugins/qnx/qnxutils.h | 4 |
10 files changed, 217 insertions, 139 deletions
diff --git a/src/plugins/qnx/blackberryconfiguration.cpp b/src/plugins/qnx/blackberryconfiguration.cpp index 83b47dedadd..2213faca0ba 100644 --- a/src/plugins/qnx/blackberryconfiguration.cpp +++ b/src/plugins/qnx/blackberryconfiguration.cpp @@ -65,8 +65,16 @@ using namespace Debugger; namespace Qnx { namespace Internal { +const QLatin1String NDKEnvFileKey("NDKEnvFile"); +const QLatin1String NDKPathKey("NDKPath"); +const QLatin1String NDKDisplayNameKey("NDKDisplayName"); +const QLatin1String NDKTargetKey("NDKTarget"); +const QLatin1String NDKHostKey("NDKHost"); +const QLatin1String NDKVersionKey("NDKVersion"); +const QLatin1String NDKAutoDetectionSourceKey("NDKAutoDetectionSource"); +const QLatin1String NDKAutoDetectedKey("NDKAutoDetectedKey"); + BlackBerryConfiguration::BlackBerryConfiguration(const NdkInstallInformation &ndkInstallInfo) - : m_isAutoDetected(true) { QString envFilePath = QnxUtils::envFilePath(ndkInstallInfo.path, ndkInstallInfo.version); QTC_ASSERT(!envFilePath.isEmpty(), return); @@ -79,11 +87,12 @@ BlackBerryConfiguration::BlackBerryConfiguration(const NdkInstallInformation &nd m_qnxHost = ndkInstallInfo.host; m_sysRoot = FileName::fromString(ndkInstallInfo.target); m_version = BlackBerryVersionNumber(ndkInstallInfo.version); + m_autoDetectionSource = Utils::FileName::fromString(ndkInstallInfo.installationXmlFilePath); ctor(); } BlackBerryConfiguration::BlackBerryConfiguration(const FileName &ndkEnvFile) - : m_isAutoDetected(false) + : m_autoDetectionSource(Utils::FileName()) { QTC_ASSERT(!QFileInfo(ndkEnvFile.toString()).isDir(), return); m_ndkEnvFile = ndkEnvFile; @@ -115,6 +124,25 @@ BlackBerryConfiguration::BlackBerryConfiguration(const FileName &ndkEnvFile) ctor(); } +BlackBerryConfiguration::BlackBerryConfiguration(const QVariantMap &data) +{ + QString envFilePath = data.value(NDKEnvFileKey).toString(); + QTC_ASSERT(!envFilePath.isEmpty(), return); + m_ndkEnvFile = Utils::FileName::fromString(envFilePath); + m_displayName = data.value(NDKDisplayNameKey).toString(); + m_qnxEnv = QnxUtils::qnxEnvironmentFromNdkFile(m_ndkEnvFile.toString()); + QString sep = QString::fromLatin1("/qnx6"); + // The QNX_TARGET value is using Unix-like separator on all platforms. + m_targetName = data.value(NDKTargetKey).toString().split(sep).first().split(QLatin1Char('/')).last(); + m_qnxHost = data.value(NDKHostKey).toString(); + m_sysRoot = FileName::fromString(data.value(NDKTargetKey).toString()); + m_version = BlackBerryVersionNumber(data.value(NDKVersionKey).toString()); + if (data.value(QLatin1String(NDKAutoDetectedKey)).toBool()) + m_autoDetectionSource = Utils::FileName::fromString(data.value(NDKAutoDetectionSourceKey).toString()); + + ctor(); +} + void BlackBerryConfiguration::ctor() { FileName qmake4Path = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/qmake"))); @@ -166,7 +194,12 @@ BlackBerryVersionNumber BlackBerryConfiguration::version() const bool BlackBerryConfiguration::isAutoDetected() const { - return m_isAutoDetected; + return !m_autoDetectionSource.isEmpty(); +} + +Utils::FileName BlackBerryConfiguration::autoDetectionSource() const +{ + return m_autoDetectionSource; } bool BlackBerryConfiguration::isActive() const @@ -182,8 +215,11 @@ bool BlackBerryConfiguration::isActive() const bool BlackBerryConfiguration::isValid() const { - return !((m_qmake4BinaryFile.isEmpty() && m_qmake5BinaryFile.isEmpty()) || m_gccCompiler.isEmpty() - || m_deviceDebugger.isEmpty() || m_simulatorDebugger.isEmpty()); + return ((!m_qmake4BinaryFile.isEmpty() || !m_qmake5BinaryFile.isEmpty()) && !m_gccCompiler.isEmpty() + && !m_deviceDebugger.isEmpty() && !m_simulatorDebugger.isEmpty() + && m_ndkEnvFile.toFileInfo().exists() && (m_autoDetectionSource.isEmpty() || + m_autoDetectionSource.toFileInfo().exists()) + && m_sysRoot.toFileInfo().exists()); } FileName BlackBerryConfiguration::ndkEnvFile() const @@ -226,6 +262,20 @@ QList<Utils::EnvironmentItem> BlackBerryConfiguration::qnxEnv() const return m_qnxEnv; } +QVariantMap BlackBerryConfiguration::toMap() const +{ + QVariantMap data; + data.insert(QLatin1String(NDKEnvFileKey), m_ndkEnvFile.toString()); + data.insert(QLatin1String(NDKDisplayNameKey), m_displayName); + data.insert(QLatin1String(NDKPathKey), ndkPath()); + data.insert(QLatin1String(NDKTargetKey), m_sysRoot.toString()); + data.insert(QLatin1String(NDKHostKey), m_qnxHost); + data.insert(QLatin1String(NDKVersionKey), m_version.toString()); + data.insert(QLatin1String(NDKAutoDetectionSourceKey), m_autoDetectionSource.toString()); + data.insert(QLatin1String(NDKAutoDetectedKey), isAutoDetected()); + return data; +} + QnxAbstractQtVersion *BlackBerryConfiguration::createQtVersion( const FileName &qmakePath, Qnx::QnxArchitecture arch, const QString &versionName) { @@ -302,7 +352,7 @@ Kit *BlackBerryConfiguration::createKit( bool BlackBerryConfiguration::activate() { if (!isValid()) { - if (m_isAutoDetected) + if (!m_autoDetectionSource.isEmpty()) return false; QString errorMessage = tr("The following errors occurred while activating target: %1").arg(m_targetName); diff --git a/src/plugins/qnx/blackberryconfiguration.h b/src/plugins/qnx/blackberryconfiguration.h index 275c7d71f93..da5f50d3de6 100644 --- a/src/plugins/qnx/blackberryconfiguration.h +++ b/src/plugins/qnx/blackberryconfiguration.h @@ -64,6 +64,7 @@ class BlackBerryConfiguration public: BlackBerryConfiguration(const NdkInstallInformation &ndkInstallInfo); BlackBerryConfiguration(const Utils::FileName &ndkEnvFile); + BlackBerryConfiguration(const QVariantMap &data); bool activate(); void deactivate(); QString ndkPath() const; @@ -72,6 +73,7 @@ public: QString qnxHost() const; BlackBerryVersionNumber version() const; bool isAutoDetected() const; + Utils::FileName autoDetectionSource() const; bool isActive() const; bool isValid() const; Utils::FileName ndkEnvFile() const; @@ -82,13 +84,14 @@ public: Utils::FileName simulatorDebuger() const; Utils::FileName sysRoot() const; QList<Utils::EnvironmentItem> qnxEnv() const; + QVariantMap toMap() const; private: QString m_displayName; QString m_targetName; QString m_qnxHost; - bool m_isAutoDetected; BlackBerryVersionNumber m_version; + Utils::FileName m_autoDetectionSource; Utils::FileName m_ndkEnvFile; Utils::FileName m_qmake4BinaryFile; Utils::FileName m_qmake5BinaryFile; @@ -99,6 +102,7 @@ private: QList<Utils::EnvironmentItem> m_qnxEnv; void ctor(); + QnxAbstractQtVersion* createQtVersion( const Utils::FileName &qmakePath, Qnx::QnxArchitecture arch, const QString &versionName); QnxToolChain* createToolChain( diff --git a/src/plugins/qnx/blackberryconfigurationmanager.cpp b/src/plugins/qnx/blackberryconfigurationmanager.cpp index 8a98a49a966..6f0e1806763 100644 --- a/src/plugins/qnx/blackberryconfigurationmanager.cpp +++ b/src/plugins/qnx/blackberryconfigurationmanager.cpp @@ -67,6 +67,15 @@ const QLatin1String NDKEnvFileKey("NDKEnvFile"); const QLatin1String ManualNDKsGroup("ManualNDKs"); const QLatin1String ActiveNDKsGroup("ActiveNDKs"); const QLatin1String DefaultApiLevelKey("DefaultApiLevel"); +const QLatin1String BBConfigsFileVersionKey("Version"); +const QLatin1String BBConfigDataKey("BBConfiguration."); +const QLatin1String BBConfigCountKey("BBConfiguration.Count"); +} + +static Utils::FileName bbConfigSettingsFileName() +{ + return Utils::FileName::fromString(Core::ICore::userResourcePath() + QLatin1String("/qnx/") + + QLatin1String(Constants::QNX_BLACKBERRY_CONFIGS_FILENAME)); } static bool sortConfigurationsByVersion(const BlackBerryConfiguration *a, const BlackBerryConfiguration *b) @@ -78,9 +87,50 @@ BlackBerryConfigurationManager::BlackBerryConfigurationManager(QObject *parent) : QObject(parent), m_defaultApiLevel(0) { + m_writer = new Utils::PersistentSettingsWriter(bbConfigSettingsFileName(), + QLatin1String("BlackBerryConfigurations")); connect(Core::ICore::instance(), SIGNAL(saveSettingsRequested()), this, SLOT(saveSettings())); } +void BlackBerryConfigurationManager::saveConfigurations() +{ + QTC_ASSERT(m_writer, return); + QVariantMap data; + data.insert(QLatin1String(BBConfigsFileVersionKey), 1); + int count = 0; + foreach (BlackBerryConfiguration *config, m_configs) { + QVariantMap tmp = config->toMap(); + if (tmp.isEmpty()) + continue; + + data.insert(BBConfigDataKey + QString::number(count), tmp); + ++count; + } + + data.insert(QLatin1String(BBConfigCountKey), count); + m_writer->save(data, Core::ICore::mainWindow()); +} + +void BlackBerryConfigurationManager::restoreConfigurations() +{ + Utils::PersistentSettingsReader reader; + if (!reader.load(bbConfigSettingsFileName())) + return; + + QVariantMap data = reader.restoreValues(); + int count = data.value(BBConfigCountKey, 0).toInt(); + for (int i = 0; i < count; ++i) { + const QString key = BBConfigDataKey + QString::number(i); + if (!data.contains(key)) + continue; + + const QVariantMap dMap = data.value(key).toMap(); + insertByVersion(new BlackBerryConfiguration(dMap)); + } +} + +// Backward compatibility: Read existing entries in the ManualNDKsGroup +// and then remove the group since not used. void BlackBerryConfigurationManager::loadManualConfigurations() { QSettings *settings = Core::ICore::settings(); @@ -107,6 +157,7 @@ void BlackBerryConfigurationManager::loadManualConfigurations() } settings->endGroup(); + settings->remove(ManualNDKsGroup); settings->endGroup(); } @@ -142,25 +193,13 @@ void BlackBerryConfigurationManager::loadDefaultApiLevel() void BlackBerryConfigurationManager::loadAutoDetectedConfigurations() { - QStringList activePaths = activeConfigurationNdkEnvPaths(); foreach (const NdkInstallInformation &ndkInfo, QnxUtils::installedNdks()) { BlackBerryConfiguration *config = new BlackBerryConfiguration(ndkInfo); if (!addConfiguration(config)) { delete config; continue; } - - // Activate targets - foreach (const QString activeNdkEnvPath, activePaths) { - if (config->ndkEnvFile().toString() == activeNdkEnvPath) - config->activate(); - } } - - // If no target was/is activated, activate one since it's needed by - // device connection and CSK code. - if (activeConfigurations().isEmpty() && !m_configs.isEmpty()) - m_configs.first()->activate(); } void BlackBerryConfigurationManager::setDefaultApiLevel(BlackBerryConfiguration *config) @@ -175,45 +214,6 @@ void BlackBerryConfigurationManager::setDefaultApiLevel(BlackBerryConfiguration m_defaultApiLevel = config; } -QStringList BlackBerryConfigurationManager::activeConfigurationNdkEnvPaths() -{ - QStringList actives; - QSettings *settings = Core::ICore::settings(); - - settings->beginGroup(SettingsGroup); - settings->beginGroup(ActiveNDKsGroup); - - foreach (const QString &activeNdkEnvPath, settings->childGroups()) { - settings->beginGroup(activeNdkEnvPath); - actives.append(settings->value(NDKEnvFileKey).toString()); - settings->endGroup(); - } - - settings->endGroup(); - settings->endGroup(); - - return actives; -} - -void BlackBerryConfigurationManager::saveManualConfigurations() -{ - if (manualConfigurations().isEmpty()) - return; - - QSettings *settings = Core::ICore::settings(); - settings->beginGroup(SettingsGroup); - settings->beginGroup(ManualNDKsGroup); - - foreach (BlackBerryConfiguration *config, manualConfigurations()) { - settings->beginGroup(config->displayName()); - settings->setValue(NDKEnvFileKey, config->ndkEnvFile().toString()); - settings->endGroup(); - } - - settings->endGroup(); - settings->endGroup(); -} - void BlackBerryConfigurationManager::saveDefaultApiLevel() { if (!m_defaultApiLevel) @@ -225,51 +225,6 @@ void BlackBerryConfigurationManager::saveDefaultApiLevel() settings->endGroup(); } -void BlackBerryConfigurationManager::saveActiveConfigurationNdkEnvPath() -{ - if (activeConfigurations().isEmpty()) - return; - - QSettings *settings = Core::ICore::settings(); - settings->beginGroup(SettingsGroup); - settings->beginGroup(ActiveNDKsGroup); - - settings->remove(QString()); - - foreach (BlackBerryConfiguration *config, activeConfigurations()) { - settings->beginGroup(config->displayName()); - settings->setValue(NDKEnvFileKey, config->ndkEnvFile().toString()); - settings->endGroup(); - } - - settings->endGroup(); - settings->endGroup(); -} - -// Remove no longer available/valid 'auto detected' BlackBerry kits and qt versions -void BlackBerryConfigurationManager::clearInvalidConfigurations() -{ - // Deregister invalid auto deteted BlackBerry Kits - foreach (Kit *kit, KitManager::kits()) { - if (!kit->isAutoDetected()) - continue; - - if (DeviceTypeKitInformation::deviceTypeId(kit) == Constants::QNX_BB_OS_TYPE - && !kit->isValid()) - KitManager::deregisterKit(kit); - } - - // Remove invalid auto detected BlackBerry qtVerions - foreach (QtSupport::BaseQtVersion *qtVersion, QtSupport::QtVersionManager::versions()) { - if (!qtVersion->isAutodetected()) - continue; - - if (qtVersion->platformName() == QLatin1String(Constants::QNX_BB_PLATFORM_NAME) - && !qtVersion->isValid()) - QtSupport::QtVersionManager::removeVersion(qtVersion); - } -} - void BlackBerryConfigurationManager::setKitsAutoDetectionSource() { foreach (Kit *kit, KitManager::kits()) { @@ -287,6 +242,13 @@ void BlackBerryConfigurationManager::setKitsAutoDetectionSource() } } +void BlackBerryConfigurationManager::insertByVersion(BlackBerryConfiguration *config) +{ + QList<BlackBerryConfiguration *>::iterator it = qLowerBound(m_configs.begin(), m_configs.end(), + config, &sortConfigurationsByVersion); + m_configs.insert(it, config); +} + // Switch to QnxToolchain for exisintg configuration using GccToolChain void BlackBerryConfigurationManager::checkToolChainConfiguration() { @@ -308,8 +270,7 @@ void BlackBerryConfigurationManager::checkToolChainConfiguration() bool BlackBerryConfigurationManager::addConfiguration(BlackBerryConfiguration *config) { foreach (BlackBerryConfiguration *c, m_configs) { - if (c->ndkPath() == config->ndkPath() - && c->targetName() == config->targetName()) { + if (config->ndkEnvFile() == c->ndkEnvFile()) { if (!config->isAutoDetected()) QMessageBox::warning(Core::ICore::mainWindow(), tr("NDK Already Known"), tr("The NDK already has a configuration."), QMessageBox::Ok); @@ -318,9 +279,7 @@ bool BlackBerryConfigurationManager::addConfiguration(BlackBerryConfiguration *c } if (config->isValid()) { - QList<BlackBerryConfiguration *>::iterator it = qLowerBound(m_configs.begin(), m_configs.end(), - config, &sortConfigurationsByVersion); - m_configs.insert(it, config); + insertByVersion(config); return true; } @@ -335,8 +294,6 @@ void BlackBerryConfigurationManager::removeConfiguration(BlackBerryConfiguration if (config->isActive()) config->deactivate(); - clearConfigurationSettings(config); - m_configs.removeAt(m_configs.indexOf(config)); if (m_defaultApiLevel == config) { @@ -409,39 +366,25 @@ void BlackBerryConfigurationManager::loadSettings() // Backward compatibility: Set kit's auto detection source // for existing BlackBerry kits that do not have it set yet. setKitsAutoDetectionSource(); - clearInvalidConfigurations(); - loadAutoDetectedConfigurations(); + + restoreConfigurations(); + // For backward compatibility loadManualConfigurations(); + loadAutoDetectedConfigurations(); loadDefaultApiLevel(); checkToolChainConfiguration(); - emit settingsLoaded(); -} - -void BlackBerryConfigurationManager::clearConfigurationSettings(BlackBerryConfiguration *config) -{ - if (!config) - return; - - QSettings *settings = Core::ICore::settings(); - settings->beginGroup(SettingsGroup); - settings->beginGroup(ManualNDKsGroup); - - foreach (const QString &manualNdk, settings->childGroups()) { - if (manualNdk == config->displayName()) { - settings->remove(manualNdk); - break; - } - } + // If no target was/is activated, activate one since it's needed by + // device connection and CSK code. + if (activeConfigurations().isEmpty() && !m_configs.isEmpty()) + m_configs.first()->activate(); - settings->endGroup(); - settings->endGroup(); + emit settingsLoaded(); } void BlackBerryConfigurationManager::saveSettings() { - saveActiveConfigurationNdkEnvPath(); - saveManualConfigurations(); + saveConfigurations(); saveDefaultApiLevel(); } diff --git a/src/plugins/qnx/blackberryconfigurationmanager.h b/src/plugins/qnx/blackberryconfigurationmanager.h index 1b9effa07cc..646b631b385 100644 --- a/src/plugins/qnx/blackberryconfigurationmanager.h +++ b/src/plugins/qnx/blackberryconfigurationmanager.h @@ -38,6 +38,8 @@ #include <QSettings> #include <QObject> +namespace Utils { class PersistentSettingsWriter; } + namespace Qnx { namespace Internal { @@ -81,17 +83,21 @@ signals: private: BlackBerryConfigurationManager(QObject *parent = 0); QList<BlackBerryConfiguration*> m_configs; + BlackBerryConfiguration *m_defaultApiLevel; - void loadManualConfigurations(); void loadDefaultApiLevel(); - void saveManualConfigurations(); void saveDefaultApiLevel(); - void saveActiveConfigurationNdkEnvPath(); - void clearInvalidConfigurations(); + + Utils::PersistentSettingsWriter *m_writer; + + void saveConfigurations(); + void restoreConfigurations(); + + void loadManualConfigurations(); void setKitsAutoDetectionSource(); - QStringList activeConfigurationNdkEnvPaths(); + void insertByVersion(BlackBerryConfiguration* config); }; } // namespace Internal diff --git a/src/plugins/qnx/blackberryndksettingswidget.cpp b/src/plugins/qnx/blackberryndksettingswidget.cpp index a9c8d9741af..a30a988bc9f 100644 --- a/src/plugins/qnx/blackberryndksettingswidget.cpp +++ b/src/plugins/qnx/blackberryndksettingswidget.cpp @@ -51,6 +51,8 @@ namespace Qnx { namespace Internal { +static QIcon invalidConfigIcon(QLatin1String(":/projectexplorer/images/compile_error.png")); + BlackBerryNDKSettingsWidget::BlackBerryNDKSettingsWidget(QWidget *parent) : QWidget(parent), m_ui(new Ui_BlackBerryNDKSettingsWidget), @@ -86,6 +88,7 @@ BlackBerryNDKSettingsWidget::BlackBerryNDKSettingsWidget(QWidget *parent) : connect(m_ui->removeNdkButton, SIGNAL(clicked()), this, SLOT(removeNdkTarget())); connect(m_ui->activateNdkTargetButton, SIGNAL(clicked()), this, SLOT(activateNdkTarget())); connect(m_ui->deactivateNdkTargetButton, SIGNAL(clicked()), this, SLOT(deactivateNdkTarget())); + connect(m_ui->cleanUpButton, SIGNAL(clicked()), this, SLOT(cleanUp())); connect(m_ui->ndksTreeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), this, SLOT(updateInfoTable(QTreeWidgetItem*))); connect(m_ui->apiLevelCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setDefaultApiLevel(int))); @@ -155,6 +158,7 @@ void BlackBerryNDKSettingsWidget::updateNdkList() qDeleteAll(m_autoDetectedNdks->takeChildren()); qDeleteAll(m_manualNdks->takeChildren()); + bool enableCleanUp = false; foreach (BlackBerryConfiguration *config, m_bbConfigManager->configurations()) { QTreeWidgetItem *parent = config->isAutoDetected() ? m_autoDetectedNdks : m_manualNdks; QTreeWidgetItem *item = new QTreeWidgetItem(parent); @@ -164,9 +168,36 @@ void BlackBerryNDKSettingsWidget::updateNdkList() font.setBold(config->isActive() || m_activatedTargets.contains(config)); item->setFont(0, font); item->setFont(1, font); + item->setIcon(0, config->isValid() ? QIcon() : invalidConfigIcon); + // TODO: Do the same if qmake, qcc, debugger are no longer detected... + if (!config->isValid()) { + QString toolTip = tr("Invalid target %1: ").arg(config->targetName()); + if (config->isAutoDetected() && !config->autoDetectionSource().toFileInfo().exists()) + toolTip += QLatin1Char('\n') + tr("- Target no longer installed."); + + if (!config->ndkEnvFile().toFileInfo().exists()) + toolTip += QLatin1Char('\n') + tr("- No NDK environment file found."); + + if (config->qmake4BinaryFile().isEmpty() + && config->qmake5BinaryFile().isEmpty()) + toolTip += QLatin1Char('\n') + tr("- No Qt version found."); + + if (config->gccCompiler().isEmpty()) + toolTip += QLatin1Char('\n') + tr("- No compiler found."); + + if (config->deviceDebuger().isEmpty()) + toolTip += QLatin1Char('\n') + tr("- No debugger found for device."); + + if (config->simulatorDebuger().isEmpty()) + toolTip += QLatin1Char('\n') + tr("- No debugger found for simulator."); + + item->setToolTip(0, toolTip); + enableCleanUp = true; + } } m_ui->ndksTreeWidget->setCurrentItem(m_autoDetectedNdks->child(0)); + m_ui->cleanUpButton->setEnabled(enableCleanUp); } void BlackBerryNDKSettingsWidget::addNdkTarget() @@ -276,6 +307,19 @@ void BlackBerryNDKSettingsWidget::uninstallNdkTarget() launchBlackBerryInstallerWizard(BlackBerryInstallerDataHandler::UninstallMode, m_ui->versionLabel->text()); } +void BlackBerryNDKSettingsWidget::cleanUp() +{ + foreach (BlackBerryConfiguration *config, m_bbConfigManager->configurations()) { + if (!config->isValid()) { + m_activatedTargets.removeOne(config); + m_deactivatedTargets.removeOne(config); + m_bbConfigManager->removeConfiguration(config); + } + } + + updateNdkList(); +} + void BlackBerryNDKSettingsWidget::handleInstallationFinished() { m_bbConfigManager->loadAutoDetectedConfigurations(); diff --git a/src/plugins/qnx/blackberryndksettingswidget.h b/src/plugins/qnx/blackberryndksettingswidget.h index 1108a789ba9..494eb8aeedc 100644 --- a/src/plugins/qnx/blackberryndksettingswidget.h +++ b/src/plugins/qnx/blackberryndksettingswidget.h @@ -75,6 +75,7 @@ public slots: void activateNdkTarget(); void deactivateNdkTarget(); void uninstallNdkTarget(); + void cleanUp(); void handleInstallationFinished(); void handleUninstallationFinished(); void updateUi(QTreeWidgetItem* item, BlackBerryConfiguration* config); diff --git a/src/plugins/qnx/blackberryndksettingswidget.ui b/src/plugins/qnx/blackberryndksettingswidget.ui index 441593f080e..c142b583682 100644 --- a/src/plugins/qnx/blackberryndksettingswidget.ui +++ b/src/plugins/qnx/blackberryndksettingswidget.ui @@ -230,6 +230,29 @@ </widget> </item> <item> + <spacer name="verticalSpacer_3"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>13</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="cleanUpButton"> + <property name="text"> + <string>Clean Up</string> + </property> + </widget> + </item> + <item> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> diff --git a/src/plugins/qnx/qnxconstants.h b/src/plugins/qnx/qnxconstants.h index cdddeb8ae23..62366b99ab6 100644 --- a/src/plugins/qnx/qnxconstants.h +++ b/src/plugins/qnx/qnxconstants.h @@ -113,6 +113,8 @@ const char QNX_BLACKBERRY_DEPLOY_CMD[] = "blackberry-deploy"; const char QNX_BLACKBERRY_CASCADESIMPORTER_VERSION[] = "0.0.1"; +const char QNX_BLACKBERRY_CONFIGS_FILENAME[] = "bbndkconfigurations.xml"; + } // namespace Constants } // namespace Qnx diff --git a/src/plugins/qnx/qnxutils.cpp b/src/plugins/qnx/qnxutils.cpp index 5d26da2008c..a56f909669f 100644 --- a/src/plugins/qnx/qnxutils.cpp +++ b/src/plugins/qnx/qnxutils.cpp @@ -258,6 +258,7 @@ QList<NdkInstallInformation> QnxUtils::installedNdks() ndkInfo.host = childElt.firstChildElement(QLatin1String("host")).text(); ndkInfo.target = childElt.firstChildElement(QLatin1String("target")).text(); ndkInfo.version = childElt.firstChildElement(QLatin1String("version")).text(); + ndkInfo.installationXmlFilePath = ndkFile.absoluteFilePath(); ndkList.append(ndkInfo); } diff --git a/src/plugins/qnx/qnxutils.h b/src/plugins/qnx/qnxutils.h index c57e0afb0df..9edae410a03 100644 --- a/src/plugins/qnx/qnxutils.h +++ b/src/plugins/qnx/qnxutils.h @@ -54,6 +54,10 @@ public: QString host; QString target; QString version; + QString installationXmlFilePath; + + bool isValid() { return !path.isEmpty() && !name.isEmpty() && !host.isEmpty() + && !target.isEmpty() && !version.isEmpty() && !installationXmlFilePath.isEmpty(); } }; class QnxUtils |