diff --git a/src/plugins/qnx/blackberryconfigurationmanager.cpp b/src/plugins/qnx/blackberryconfigurationmanager.cpp index e3a8981b726..28314509b41 100644 --- a/src/plugins/qnx/blackberryconfigurationmanager.cpp +++ b/src/plugins/qnx/blackberryconfigurationmanager.cpp @@ -62,6 +62,7 @@ const QLatin1String NDKLocationKey("NDKLocation"); // For 10.1 NDK support (< QT const QLatin1String NDKEnvFileKey("NDKEnvFile"); const QLatin1String CertificateGroup("Certificates"); const QLatin1String ManualNDKsGroup("ManualNDKs"); +const QLatin1String ActiveNDKsGroup("ActiveNDKs"); } BlackBerryConfigurationManager::BlackBerryConfigurationManager(QObject *parent) @@ -129,13 +130,47 @@ void BlackBerryConfigurationManager::loadManualConfigurations() void BlackBerryConfigurationManager::loadAutoDetectedConfigurations() { + QStringList activePaths = activeConfigurationNdkEnvPaths(); foreach (const NdkInstallInformation &ndkInfo, QnxUtils::installedNdks()) { QString envFilePath = QnxUtils::envFilePath(ndkInfo.path, ndkInfo.version); BlackBerryConfiguration *config = new BlackBerryConfiguration(Utils::FileName::fromString(envFilePath), true, ndkInfo.name); - if (!addConfiguration(config)) + 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.first()->activate(); +} + +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::saveCertificates() @@ -180,6 +215,26 @@ void BlackBerryConfigurationManager::saveManualConfigurations() settings->endGroup(); } +void BlackBerryConfigurationManager::saveActiveConfigurationNdkEnvPath() +{ + if (activeConfigurations().isEmpty()) + return; + + QSettings *settings = Core::ICore::settings(); + settings->beginGroup(SettingsGroup); + settings->beginGroup(ActiveNDKsGroup); + + settings->clear(); + 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() { @@ -216,7 +271,7 @@ bool BlackBerryConfigurationManager::addConfiguration(BlackBerryConfiguration *c } } - if (config->activate()) { + if (config->isValid()) { m_configs.append(config); return true; } @@ -254,6 +309,17 @@ QList BlackBerryConfigurationManager::manualConfigura return manuals; } +QList BlackBerryConfigurationManager::activeConfigurations() const +{ + QList actives; + foreach (BlackBerryConfiguration *config, m_configs) { + if (config->isActive()) + actives << config; + } + + return actives; +} + BlackBerryConfiguration *BlackBerryConfigurationManager::configurationFromEnvFile(const Utils::FileName &envFile) const { foreach (BlackBerryConfiguration *config, m_configs) { @@ -315,7 +381,7 @@ BlackBerryCertificate * BlackBerryConfigurationManager::activeCertificate() QMultiMap BlackBerryConfigurationManager::defaultQnxEnv() { foreach (BlackBerryConfiguration *config, m_configs) { - if (!config->qnxEnv().isEmpty()) + if (config->isActive() && !config->qnxEnv().isEmpty()) return config->qnxEnv(); } @@ -354,6 +420,7 @@ void BlackBerryConfigurationManager::clearConfigurationSettings(BlackBerryConfig void BlackBerryConfigurationManager::saveSettings() { + saveActiveConfigurationNdkEnvPath(); saveManualConfigurations(); saveCertificates(); } diff --git a/src/plugins/qnx/blackberryconfigurationmanager.h b/src/plugins/qnx/blackberryconfigurationmanager.h index d953f182aa0..4283f766ccd 100644 --- a/src/plugins/qnx/blackberryconfigurationmanager.h +++ b/src/plugins/qnx/blackberryconfigurationmanager.h @@ -54,6 +54,7 @@ public: void removeConfiguration(BlackBerryConfiguration *config); QList configurations() const; QList manualConfigurations() const; + QList activeConfigurations() const; BlackBerryConfiguration *configurationFromEnvFile(const Utils::FileName &envFile) const; QString barsignerCskPath() const; @@ -91,7 +92,10 @@ private: void loadAutoDetectedConfigurations(); void saveCertificates(); void saveManualConfigurations(); + void saveActiveConfigurationNdkEnvPath(); void clearInvalidConfigurations(); + + QStringList activeConfigurationNdkEnvPaths(); }; } // namespace Internal diff --git a/src/plugins/qnx/blackberryndksettingspage.cpp b/src/plugins/qnx/blackberryndksettingspage.cpp index 8482d400b9e..5610e0de8c0 100644 --- a/src/plugins/qnx/blackberryndksettingspage.cpp +++ b/src/plugins/qnx/blackberryndksettingspage.cpp @@ -31,6 +31,7 @@ #include "blackberryndksettingspage.h" #include "blackberryndksettingswidget.h" +#include "blackberryconfiguration.h" #include "qnxconstants.h" #include @@ -59,6 +60,15 @@ QWidget *BlackBerryNDKSettingsPage::createPage(QWidget *parent) void BlackBerryNDKSettingsPage::apply() { + foreach (BlackBerryConfiguration* config, m_widget->activatedTargets()) { + if (!config->isActive()) + config->activate(); + } + + foreach (BlackBerryConfiguration* config, m_widget->deactivatedTargets()) { + if (config->isActive()) + config->deactivate(); + } } void BlackBerryNDKSettingsPage::finish() diff --git a/src/plugins/qnx/blackberryndksettingswidget.cpp b/src/plugins/qnx/blackberryndksettingswidget.cpp index 1db4ab6bf24..f86cdb64350 100644 --- a/src/plugins/qnx/blackberryndksettingswidget.cpp +++ b/src/plugins/qnx/blackberryndksettingswidget.cpp @@ -61,12 +61,18 @@ BlackBerryNDKSettingsWidget::BlackBerryNDKSettingsWidget(QWidget *parent) : m_ui->setupUi(this); m_ui->removeNdkButton->setEnabled(false); + m_ui->activateNdkTargetButton->setEnabled(false); + m_ui->deactivateNdkTargetButton->setEnabled(false); + + m_activatedTargets << m_bbConfigManager->activeConfigurations(); initNdkList(); connect(m_ui->wizardButton, SIGNAL(clicked()), this, SLOT(launchBlackBerrySetupWizard())); connect(m_ui->addNdkButton, SIGNAL(clicked()), this, SLOT(addNdkTarget())); 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->ndksTreeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), this, SLOT(updateInfoTable(QTreeWidgetItem*))); } @@ -81,6 +87,16 @@ bool BlackBerryNDKSettingsWidget::hasActiveNdk() const return !m_bbConfigManager->configurations().isEmpty(); } +QList BlackBerryNDKSettingsWidget::activatedTargets() +{ + return m_activatedTargets; +} + +QList BlackBerryNDKSettingsWidget::deactivatedTargets() +{ + return m_deactivatedTargets; +} + void BlackBerryNDKSettingsWidget::launchBlackBerrySetupWizard() const { const bool alreadyConfigured = BlackBerryUtils::hasRegisteredKeys(); @@ -95,11 +111,16 @@ void BlackBerryNDKSettingsWidget::launchBlackBerrySetupWizard() const wizard.exec(); } -void BlackBerryNDKSettingsWidget::updateInfoTable(QTreeWidgetItem* currentNdk) +void BlackBerryNDKSettingsWidget::updateInfoTable(QTreeWidgetItem* currentItem) { - QString envFilePath = currentNdk->text(1); + if (!currentItem) + return; + + QString envFilePath = currentItem->text(1); if (envFilePath.isEmpty()) { m_ui->removeNdkButton->setEnabled(false); + m_ui->activateNdkTargetButton->setEnabled(false); + m_ui->deactivateNdkTargetButton->setEnabled(false); return; } @@ -109,7 +130,7 @@ void BlackBerryNDKSettingsWidget::updateInfoTable(QTreeWidgetItem* currentNdk) foreach (const NdkInstallInformation &ndkInfo, QnxUtils::installedNdks()) { - if (ndkInfo.target.contains(config->targetName())) { + if (ndkInfo.name == config->displayName()) { m_ui->baseNameLabel->setText(ndkInfo.name); m_ui->ndkPathLabel->setText(ndkInfo.path); m_ui->versionLabel->setText(ndkInfo.version); @@ -119,7 +140,7 @@ void BlackBerryNDKSettingsWidget::updateInfoTable(QTreeWidgetItem* currentNdk) } } - m_ui->removeNdkButton->setEnabled(!config->isAutoDetected()); + updateUi(currentItem, config); } void BlackBerryNDKSettingsWidget::updateNdkList() @@ -129,6 +150,10 @@ void BlackBerryNDKSettingsWidget::updateNdkList() QTreeWidgetItem *item = new QTreeWidgetItem(parent); item->setText(0, config->displayName()); item->setText(1, config->ndkEnvFile().toString()); + QFont font; + font.setBold(config->isActive()); + item->setFont(0, font); + item->setFont(1, font); } if (m_autoDetectedNdks->child(0)) { @@ -162,6 +187,9 @@ void BlackBerryNDKSettingsWidget::addNdkTarget() void BlackBerryNDKSettingsWidget::removeNdkTarget() { + if (!m_ui->ndksTreeWidget->currentItem()) + return; + QString ndk = m_ui->ndksTreeWidget->currentItem()->text(0); QString envFilePath = m_ui->ndksTreeWidget->currentItem()->text(1); QMessageBox::StandardButton button = @@ -172,11 +200,61 @@ void BlackBerryNDKSettingsWidget::removeNdkTarget() if (button == QMessageBox::Yes) { BlackBerryConfiguration *config = m_bbConfigManager->configurationFromEnvFile(Utils::FileName::fromString(envFilePath)); - if (config) + if (config) { m_bbConfigManager->removeConfiguration(config); m_manualNdks->removeChild(m_ui->ndksTreeWidget->currentItem()); + } } +} +void BlackBerryNDKSettingsWidget::activateNdkTarget() +{ + if (!m_ui->ndksTreeWidget->currentItem()) + return; + + QString envFilePath = m_ui->ndksTreeWidget->currentItem()->text(1); + + BlackBerryConfiguration *config = m_bbConfigManager->configurationFromEnvFile(Utils::FileName::fromString(envFilePath)); + if (config && !m_activatedTargets.contains(config)) { + m_activatedTargets << config; + if (m_deactivatedTargets.contains(config)) + m_deactivatedTargets.removeAt(m_deactivatedTargets.indexOf(config)); + + updateUi(m_ui->ndksTreeWidget->currentItem(), config); + } +} + +void BlackBerryNDKSettingsWidget::deactivateNdkTarget() +{ + if (!m_ui->ndksTreeWidget->currentItem()) + return; + + QString envFilePath = m_ui->ndksTreeWidget->currentItem()->text(1); + + BlackBerryConfiguration *config = m_bbConfigManager->configurationFromEnvFile(Utils::FileName::fromString(envFilePath)); + if (config && m_activatedTargets.contains(config)) { + m_deactivatedTargets << config; + m_activatedTargets.removeAt(m_activatedTargets.indexOf(config)); + updateUi(m_ui->ndksTreeWidget->currentItem(), config); + } +} + +void BlackBerryNDKSettingsWidget::updateUi(QTreeWidgetItem *item, BlackBerryConfiguration *config) +{ + if (!item || !config) + return; + + QFont font; + font.setBold(m_activatedTargets.contains(config)); + item->setFont(0, font); + item->setFont(1, font); + + m_ui->activateNdkTargetButton->setEnabled((!m_activatedTargets.contains(config)) + && config->isAutoDetected()); + m_ui->deactivateNdkTargetButton->setEnabled((m_activatedTargets.contains(config)) + && m_activatedTargets.size() > 1 + && config->isAutoDetected()); + m_ui->removeNdkButton->setEnabled(!config->isAutoDetected()); } void BlackBerryNDKSettingsWidget::initNdkList() diff --git a/src/plugins/qnx/blackberryndksettingswidget.h b/src/plugins/qnx/blackberryndksettingswidget.h index dc05704a6c4..0ae1fa0972a 100644 --- a/src/plugins/qnx/blackberryndksettingswidget.h +++ b/src/plugins/qnx/blackberryndksettingswidget.h @@ -42,6 +42,7 @@ QT_END_NAMESPACE namespace Qnx { namespace Internal { +class BlackBerryConfiguration; class BlackBerryConfigurationManager; class Ui_BlackBerryNDKSettingsWidget; @@ -55,15 +56,21 @@ public: bool hasActiveNdk() const; + QList activatedTargets(); + QList deactivatedTargets(); + signals: void kitsUpdated(); public slots: void launchBlackBerrySetupWizard() const; - void updateInfoTable(QTreeWidgetItem* currentNdk); + void updateInfoTable(QTreeWidgetItem* currentItem); void updateNdkList(); void addNdkTarget(); void removeNdkTarget(); + void activateNdkTarget(); + void deactivateNdkTarget(); + void updateUi(QTreeWidgetItem* item, BlackBerryConfiguration* config); private: void initNdkList(); @@ -72,6 +79,8 @@ private: BlackBerryConfigurationManager *m_bbConfigManager; QTreeWidgetItem *m_autoDetectedNdks; QTreeWidgetItem *m_manualNdks; + QList m_activatedTargets; + QList m_deactivatedTargets; }; } // namespace Internal diff --git a/src/plugins/qnx/blackberryndksettingswidget.ui b/src/plugins/qnx/blackberryndksettingswidget.ui index 85ce8e60436..4456b029ff6 100644 --- a/src/plugins/qnx/blackberryndksettingswidget.ui +++ b/src/plugins/qnx/blackberryndksettingswidget.ui @@ -163,14 +163,35 @@ - Add Target + Add - Remove Target + Remove + + + + + + + Qt::Horizontal + + + + + + + Activate + + + + + + + Deactivate