From 196d8ddb5566f002f5254e8687a8e82edfcb46a6 Mon Sep 17 00:00:00 2001 From: El Mehdi Fekari Date: Fri, 6 Sep 2013 14:47:38 +0200 Subject: [PATCH] Qnx: Activate/Deactivate auto detected configurations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add activate and deactivate actions to only create kits for used NDK targets and not for all installed ones. Users may want to switch between different targets without uninstalling non active taregts. Change-Id: Ie023ebdedbf3494bb7f1c251ce5f7fadec9f9206 Reviewed-by: Tobias Hunger Reviewed-by: Tobias Nätterlund Reviewed-by: David Kaspar --- .../qnx/blackberryconfigurationmanager.cpp | 73 ++++++++++++++- .../qnx/blackberryconfigurationmanager.h | 4 + src/plugins/qnx/blackberryndksettingspage.cpp | 10 +++ .../qnx/blackberryndksettingswidget.cpp | 88 +++++++++++++++++-- src/plugins/qnx/blackberryndksettingswidget.h | 11 ++- .../qnx/blackberryndksettingswidget.ui | 25 +++++- 6 files changed, 200 insertions(+), 11 deletions(-) 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