aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEl Mehdi Fekari <[email protected]>2013-12-05 18:24:08 +0100
committerMehdi Fekari <[email protected]>2014-01-14 16:51:54 +0100
commit41a2059f8521355cdad55bc5ef085d89197d3706 (patch)
tree945fcde0d5d042740a2787465f5d7f524e0a45f7
parent1131c11a111dbd51265add2da05d77d37823f45e (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.cpp62
-rw-r--r--src/plugins/qnx/blackberryconfiguration.h6
-rw-r--r--src/plugins/qnx/blackberryconfigurationmanager.cpp197
-rw-r--r--src/plugins/qnx/blackberryconfigurationmanager.h16
-rw-r--r--src/plugins/qnx/blackberryndksettingswidget.cpp44
-rw-r--r--src/plugins/qnx/blackberryndksettingswidget.h1
-rw-r--r--src/plugins/qnx/blackberryndksettingswidget.ui23
-rw-r--r--src/plugins/qnx/qnxconstants.h2
-rw-r--r--src/plugins/qnx/qnxutils.cpp1
-rw-r--r--src/plugins/qnx/qnxutils.h4
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