diff --git a/src/plugins/qnx/blackberryconfiguration.cpp b/src/plugins/qnx/blackberryapilevelconfiguration.cpp similarity index 87% rename from src/plugins/qnx/blackberryconfiguration.cpp rename to src/plugins/qnx/blackberryapilevelconfiguration.cpp index a8840b9d755..f2192aa5f21 100644 --- a/src/plugins/qnx/blackberryconfiguration.cpp +++ b/src/plugins/qnx/blackberryapilevelconfiguration.cpp @@ -29,11 +29,12 @@ ** ****************************************************************************/ -#include "blackberryconfiguration.h" +#include "blackberryapilevelconfiguration.h" #include "blackberryconfigurationmanager.h" #include "blackberryqtversion.h" #include "qnxtoolchain.h" +#include "qnxconstants.h" #include @@ -76,10 +77,10 @@ const QLatin1String NDKAutoDetectionSourceKey("NDKAutoDetectionSource"); const QLatin1String NDKAutoDetectedKey("NDKAutoDetectedKey"); #ifdef WITH_TESTS -bool BlackBerryConfiguration::m_fakeConfig = false; +bool BlackBerryApiLevelConfiguration::m_fakeConfig = false; #endif -BlackBerryConfiguration::BlackBerryConfiguration(const NdkInstallInformation &ndkInstallInfo) +BlackBerryApiLevelConfiguration::BlackBerryApiLevelConfiguration(const NdkInstallInformation &ndkInstallInfo) { QString envFilePath = QnxUtils::envFilePath(ndkInstallInfo.path, ndkInstallInfo.version); QTC_ASSERT(!envFilePath.isEmpty(), return); @@ -96,7 +97,7 @@ BlackBerryConfiguration::BlackBerryConfiguration(const NdkInstallInformation &nd ctor(); } -BlackBerryConfiguration::BlackBerryConfiguration(const FileName &ndkEnvFile) +BlackBerryApiLevelConfiguration::BlackBerryApiLevelConfiguration(const FileName &ndkEnvFile) : m_autoDetectionSource(Utils::FileName()) { QTC_ASSERT(!QFileInfo(ndkEnvFile.toString()).isDir(), return); @@ -129,7 +130,7 @@ BlackBerryConfiguration::BlackBerryConfiguration(const FileName &ndkEnvFile) ctor(); } -BlackBerryConfiguration::BlackBerryConfiguration(const QVariantMap &data) +BlackBerryApiLevelConfiguration::BlackBerryApiLevelConfiguration(const QVariantMap &data) { QString envFilePath = data.value(NDKEnvFileKey).toString(); QTC_ASSERT(!envFilePath.isEmpty(), return); @@ -148,7 +149,7 @@ BlackBerryConfiguration::BlackBerryConfiguration(const QVariantMap &data) ctor(); } -void BlackBerryConfiguration::ctor() +void BlackBerryApiLevelConfiguration::ctor() { FileName qmake4Path = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/qmake"))); FileName qmake5Path = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/qt5/qmake"))); @@ -172,42 +173,42 @@ void BlackBerryConfiguration::ctor() m_simulatorDebugger = simulatorGdbPath; } -QString BlackBerryConfiguration::ndkPath() const +QString BlackBerryApiLevelConfiguration::ndkPath() const { return m_ndkEnvFile.parentDir().toString(); } -QString BlackBerryConfiguration::displayName() const +QString BlackBerryApiLevelConfiguration::displayName() const { return m_displayName; } -QString BlackBerryConfiguration::targetName() const +QString BlackBerryApiLevelConfiguration::targetName() const { return m_targetName; } -QString BlackBerryConfiguration::qnxHost() const +QString BlackBerryApiLevelConfiguration::qnxHost() const { return m_qnxHost; } -BlackBerryVersionNumber BlackBerryConfiguration::version() const +BlackBerryVersionNumber BlackBerryApiLevelConfiguration::version() const { return m_version; } -bool BlackBerryConfiguration::isAutoDetected() const +bool BlackBerryApiLevelConfiguration::isAutoDetected() const { return !m_autoDetectionSource.isEmpty(); } -Utils::FileName BlackBerryConfiguration::autoDetectionSource() const +Utils::FileName BlackBerryApiLevelConfiguration::autoDetectionSource() const { return m_autoDetectionSource; } -bool BlackBerryConfiguration::isActive() const +bool BlackBerryApiLevelConfiguration::isActive() const { foreach (Kit *kit, KitManager::kits()) { if (kit->isAutoDetected() && @@ -218,10 +219,10 @@ bool BlackBerryConfiguration::isActive() const return false; } -bool BlackBerryConfiguration::isValid() const +bool BlackBerryApiLevelConfiguration::isValid() const { #ifdef WITH_TESTS - if (BlackBerryConfiguration::fakeConfig()) + if (BlackBerryApiLevelConfiguration::fakeConfig()) return true; #endif @@ -232,49 +233,51 @@ bool BlackBerryConfiguration::isValid() const && m_sysRoot.toFileInfo().exists()); } -FileName BlackBerryConfiguration::ndkEnvFile() const +FileName BlackBerryApiLevelConfiguration::ndkEnvFile() const { return m_ndkEnvFile; } -FileName BlackBerryConfiguration::qmake4BinaryFile() const +FileName BlackBerryApiLevelConfiguration::qmake4BinaryFile() const { return m_qmake4BinaryFile; } -FileName BlackBerryConfiguration::qmake5BinaryFile() const +FileName BlackBerryApiLevelConfiguration::qmake5BinaryFile() const { return m_qmake5BinaryFile; } -FileName BlackBerryConfiguration::gccCompiler() const +FileName BlackBerryApiLevelConfiguration::gccCompiler() const { return m_gccCompiler; } -FileName BlackBerryConfiguration::deviceDebuger() const +FileName BlackBerryApiLevelConfiguration::deviceDebuger() const { return m_deviceDebugger; } -FileName BlackBerryConfiguration::simulatorDebuger() const +FileName BlackBerryApiLevelConfiguration::simulatorDebuger() const { return m_simulatorDebugger; } -FileName BlackBerryConfiguration::sysRoot() const +FileName BlackBerryApiLevelConfiguration::sysRoot() const { return m_sysRoot; } -QList BlackBerryConfiguration::qnxEnv() const +QList BlackBerryApiLevelConfiguration::qnxEnv() const { return m_qnxEnv; } -QVariantMap BlackBerryConfiguration::toMap() const +QVariantMap BlackBerryApiLevelConfiguration::toMap() const { QVariantMap data; + data.insert(QLatin1String(Qnx::Constants::QNX_BB_KEY_CONFIGURATION_TYPE), + QLatin1String(Qnx::Constants::QNX_BB_APILEVEL_TYPE)); data.insert(QLatin1String(NDKEnvFileKey), m_ndkEnvFile.toString()); data.insert(QLatin1String(NDKDisplayNameKey), m_displayName); data.insert(QLatin1String(NDKPathKey), ndkPath()); @@ -286,7 +289,7 @@ QVariantMap BlackBerryConfiguration::toMap() const return data; } -QnxAbstractQtVersion *BlackBerryConfiguration::createQtVersion( +QnxAbstractQtVersion *BlackBerryApiLevelConfiguration::createQtVersion( const FileName &qmakePath, Qnx::QnxArchitecture arch, const QString &versionName) { QnxAbstractQtVersion *version = new BlackBerryQtVersion( @@ -296,7 +299,7 @@ QnxAbstractQtVersion *BlackBerryConfiguration::createQtVersion( return version; } -QnxToolChain *BlackBerryConfiguration::createToolChain( +QnxToolChain *BlackBerryApiLevelConfiguration::createToolChain( ProjectExplorer::Abi abi, const QString &versionName) { QnxToolChain* toolChain = new QnxToolChain(ToolChain::AutoDetection); @@ -309,7 +312,7 @@ QnxToolChain *BlackBerryConfiguration::createToolChain( return toolChain; } -QVariant BlackBerryConfiguration::createDebuggerItem( +QVariant BlackBerryApiLevelConfiguration::createDebuggerItem( QList abis, Qnx::QnxArchitecture arch, const QString &versionName) { Utils::FileName command = arch == X86 ? m_simulatorDebugger : m_deviceDebugger; @@ -322,7 +325,7 @@ QVariant BlackBerryConfiguration::createDebuggerItem( return DebuggerItemManager::registerDebugger(debugger); } -Kit *BlackBerryConfiguration::createKit( +Kit *BlackBerryApiLevelConfiguration::createKit( QnxAbstractQtVersion *version, QnxToolChain *toolChain, const QVariant &debuggerItemId) { Kit *kit = new Kit; @@ -359,7 +362,7 @@ Kit *BlackBerryConfiguration::createKit( return kit; } -bool BlackBerryConfiguration::activate() +bool BlackBerryApiLevelConfiguration::activate() { if (!isValid()) { if (!m_autoDetectionSource.isEmpty()) @@ -441,7 +444,7 @@ bool BlackBerryConfiguration::activate() return true; } -void BlackBerryConfiguration::deactivate() +void BlackBerryApiLevelConfiguration::deactivate() { foreach (Kit *kit, KitManager::kits()) { if (kit->isAutoDetected() && @@ -464,12 +467,12 @@ void BlackBerryConfiguration::deactivate() } #ifdef WITH_TESTS -void BlackBerryConfiguration::setFakeConfig(bool fakeConfig) +void BlackBerryApiLevelConfiguration::setFakeConfig(bool fakeConfig) { m_fakeConfig = fakeConfig; } -bool BlackBerryConfiguration::fakeConfig() +bool BlackBerryApiLevelConfiguration::fakeConfig() { return m_fakeConfig; } diff --git a/src/plugins/qnx/blackberryconfiguration.h b/src/plugins/qnx/blackberryapilevelconfiguration.h similarity index 92% rename from src/plugins/qnx/blackberryconfiguration.h rename to src/plugins/qnx/blackberryapilevelconfiguration.h index b5df8ebbaea..c49dda17eec 100644 --- a/src/plugins/qnx/blackberryconfiguration.h +++ b/src/plugins/qnx/blackberryapilevelconfiguration.h @@ -54,13 +54,13 @@ namespace Internal { class QnxAbstractQtVersion; class QnxToolChain; -class BlackBerryConfiguration +class BlackBerryApiLevelConfiguration { - Q_DECLARE_TR_FUNCTIONS(Qnx::Internal::BlackBerryConfiguration) + Q_DECLARE_TR_FUNCTIONS(Qnx::Internal::BlackBerryApiLevelConfiguration) public: - BlackBerryConfiguration(const NdkInstallInformation &ndkInstallInfo); - BlackBerryConfiguration(const Utils::FileName &ndkEnvFile); - BlackBerryConfiguration(const QVariantMap &data); + BlackBerryApiLevelConfiguration(const NdkInstallInformation &ndkInstallInfo); + BlackBerryApiLevelConfiguration(const Utils::FileName &ndkEnvFile); + BlackBerryApiLevelConfiguration(const QVariantMap &data); bool activate(); void deactivate(); QString ndkPath() const; diff --git a/src/plugins/qnx/blackberrycertificate.cpp b/src/plugins/qnx/blackberrycertificate.cpp index d101db96630..43cdca8be6d 100644 --- a/src/plugins/qnx/blackberrycertificate.cpp +++ b/src/plugins/qnx/blackberrycertificate.cpp @@ -30,7 +30,7 @@ ****************************************************************************/ #include "blackberrycertificate.h" -#include "blackberryconfiguration.h" +#include "blackberryapilevelconfiguration.h" #include "blackberryconfigurationmanager.h" #include "blackberryndkprocess.h" diff --git a/src/plugins/qnx/blackberryconfigurationmanager.cpp b/src/plugins/qnx/blackberryconfigurationmanager.cpp index 52707592718..5221d88e873 100644 --- a/src/plugins/qnx/blackberryconfigurationmanager.cpp +++ b/src/plugins/qnx/blackberryconfigurationmanager.cpp @@ -31,7 +31,8 @@ #include "blackberryconfigurationmanager.h" #include "blackberrycertificate.h" -#include "blackberryconfiguration.h" +#include "blackberryapilevelconfiguration.h" +#include "blackberryruntimeconfiguration.h" #include "qnxtoolchain.h" #include "qnxutils.h" @@ -54,6 +55,7 @@ #include #include #include +#include using namespace ProjectExplorer; @@ -79,7 +81,7 @@ static Utils::FileName bbConfigSettingsFileName() + QLatin1String(Constants::QNX_BLACKBERRY_CONFIGS_FILENAME)); } -static bool sortConfigurationsByVersion(const BlackBerryConfiguration *a, const BlackBerryConfiguration *b) +template static bool sortConfigurationsByVersion(const T *a, const T *b) { return a->version() > b->version(); } @@ -99,8 +101,17 @@ void BlackBerryConfigurationManager::saveConfigurations() QVariantMap data; data.insert(QLatin1String(BBConfigsFileVersionKey), 1); int count = 0; - foreach (BlackBerryConfiguration *config, m_configs) { - QVariantMap tmp = config->toMap(); + foreach (BlackBerryApiLevelConfiguration *apiLevel, m_apiLevels) { + QVariantMap tmp = apiLevel->toMap(); + if (tmp.isEmpty()) + continue; + + data.insert(BBConfigDataKey + QString::number(count), tmp); + ++count; + } + + foreach (BlackBerryRuntimeConfiguration *runtime, m_runtimes) { + QVariantMap tmp = runtime->toMap(); if (tmp.isEmpty()) continue; @@ -110,8 +121,8 @@ void BlackBerryConfigurationManager::saveConfigurations() data.insert(QLatin1String(BBConfigCountKey), count); - const QString newestConfig = (newestConfigurationEnabled()) - ? NewestConfigurationValue : defaultConfiguration()->ndkEnvFile().toString(); + const QString newestConfig = (newestApiLevelEnabled()) + ? NewestConfigurationValue : defaultApiLevel()->ndkEnvFile().toString(); //save default configuration data.insert(QLatin1String(DefaultConfigurationKey), newestConfig); @@ -142,13 +153,19 @@ void BlackBerryConfigurationManager::restoreConfigurations() continue; const QVariantMap dMap = data.value(key).toMap(); + const QString configurationType = + dMap.value(QLatin1String(Constants::QNX_BB_KEY_CONFIGURATION_TYPE)).toString(); + if (configurationType == QLatin1String(Constants::QNX_BB_RUNTIME_TYPE)) { + BlackBerryRuntimeConfiguration *runtime = new BlackBerryRuntimeConfiguration(dMap); + insertRuntimeByVersion(runtime); + } else if (configurationType == QLatin1String(Constants::QNX_BB_APILEVEL_TYPE) + || configurationType.isEmpty()) { // Backward compatibility + BlackBerryApiLevelConfiguration *apiLevel = new BlackBerryApiLevelConfiguration(dMap); + insertApiLevelByVersion(apiLevel); - BlackBerryConfiguration *config = new BlackBerryConfiguration(dMap); - - insertByVersion(config); - - if (!useNewestConfiguration && (config->ndkEnvFile().toString() == ndkEnvFile)) - setDefaultConfiguration(config); + if (!useNewestConfiguration && (apiLevel->ndkEnvFile().toString() == ndkEnvFile)) + setDefaultConfiguration(apiLevel); + } } emit settingsChanged(); @@ -174,8 +191,9 @@ void BlackBerryConfigurationManager::loadManualConfigurations() ndkEnvPath = QnxUtils::envFilePath(ndkPath); } - BlackBerryConfiguration *config = new BlackBerryConfiguration(Utils::FileName::fromString(ndkEnvPath)); - if (!addConfiguration(config)) + BlackBerryApiLevelConfiguration *config = + new BlackBerryApiLevelConfiguration(Utils::FileName::fromString(ndkEnvPath)); + if (!addApiLevel(config)) delete config; settings->endGroup(); @@ -186,20 +204,36 @@ void BlackBerryConfigurationManager::loadManualConfigurations() settings->endGroup(); } -void BlackBerryConfigurationManager::loadAutoDetectedConfigurations() +void BlackBerryConfigurationManager::loadAutoDetectedApiLevels() { foreach (const NdkInstallInformation &ndkInfo, QnxUtils::installedNdks()) { - BlackBerryConfiguration *config = new BlackBerryConfiguration(ndkInfo); - if (!addConfiguration(config)) { + BlackBerryApiLevelConfiguration *config = new BlackBerryApiLevelConfiguration(ndkInfo); + if (!addApiLevel(config)) { delete config; - continue; } } } -void BlackBerryConfigurationManager::setDefaultConfiguration(BlackBerryConfiguration *config) +void BlackBerryConfigurationManager::loadAutoDetectedRuntimes() { - if (config && !m_configs.contains(config)) { + QRegExp regExp(QLatin1String("runtime_(\\d+)_(\\d+)_(\\d+)_(\\d+)")); + foreach (BlackBerryApiLevelConfiguration *apiLevel, m_apiLevels) { + QDir ndkDir(apiLevel->ndkPath()); + foreach (const QFileInfo& fi, ndkDir.entryInfoList(QDir::Dirs)) { + if (regExp.exactMatch(fi.baseName())) { + BlackBerryRuntimeConfiguration *runtime = + new BlackBerryRuntimeConfiguration(fi.absoluteFilePath()); + if (!addRuntime(runtime)) + delete runtime; + } + } + } +} + +void BlackBerryConfigurationManager::setDefaultConfiguration( + BlackBerryApiLevelConfiguration *config) +{ + if (config && !m_apiLevels.contains(config)) { qWarning() << "BlackBerryConfigurationManager::setDefaultConfiguration -" " configuration does not belong to this instance: " << config->ndkEnvFile().toString(); @@ -210,7 +244,7 @@ void BlackBerryConfigurationManager::setDefaultConfiguration(BlackBerryConfigura emit settingsChanged(); } -bool BlackBerryConfigurationManager::newestConfigurationEnabled() const +bool BlackBerryConfigurationManager::newestApiLevelEnabled() const { return !m_defaultConfiguration; } @@ -227,7 +261,7 @@ void BlackBerryConfigurationManager::setKitsAutoDetectionSource() (DeviceTypeKitInformation::deviceTypeId(kit) == Constants::QNX_BB_CATEGORY_ICON) && kit->autoDetectionSource().isEmpty()) { QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(kit); - foreach (BlackBerryConfiguration *config, m_configs) { + foreach (BlackBerryApiLevelConfiguration *config, m_apiLevels) { if ((version && (version->qmakeCommand() == config->qmake4BinaryFile() || version->qmakeCommand() == config->qmake5BinaryFile())) && (SysRootKitInformation::sysRoot(kit) == config->sysRoot())) @@ -237,17 +271,28 @@ void BlackBerryConfigurationManager::setKitsAutoDetectionSource() } } -void BlackBerryConfigurationManager::insertByVersion(BlackBerryConfiguration *config) +void BlackBerryConfigurationManager::insertApiLevelByVersion( + BlackBerryApiLevelConfiguration *apiLevel) { - QList::iterator it = qLowerBound(m_configs.begin(), m_configs.end(), - config, &sortConfigurationsByVersion); - m_configs.insert(it, config); + QList::iterator it = + qLowerBound(m_apiLevels.begin(), m_apiLevels.end(), + apiLevel, sortConfigurationsByVersion); + m_apiLevels.insert(it, apiLevel); +} + +void BlackBerryConfigurationManager::insertRuntimeByVersion( + BlackBerryRuntimeConfiguration *runtime) +{ + QList::iterator it = + qLowerBound(m_runtimes.begin(), m_runtimes.end(), + runtime, sortConfigurationsByVersion); + m_runtimes.insert(it, runtime); } // Switch to QnxToolchain for exisintg configuration using GccToolChain void BlackBerryConfigurationManager::checkToolChainConfiguration() { - foreach (BlackBerryConfiguration *config, m_configs) { + foreach (BlackBerryApiLevelConfiguration *config, m_apiLevels) { foreach (ToolChain *tc, ToolChainManager::toolChains()) { if (tc->compilerCommand() == config->gccCompiler() && !tc->id().startsWith(QLatin1String(Constants::QNX_TOOLCHAIN_ID))) { @@ -262,9 +307,9 @@ void BlackBerryConfigurationManager::checkToolChainConfiguration() } } -bool BlackBerryConfigurationManager::addConfiguration(BlackBerryConfiguration *config) +bool BlackBerryConfigurationManager::addApiLevel(BlackBerryApiLevelConfiguration *config) { - foreach (BlackBerryConfiguration *c, m_configs) { + foreach (BlackBerryApiLevelConfiguration *c, m_apiLevels) { if (config->ndkEnvFile() == c->ndkEnvFile()) { if (!config->isAutoDetected()) QMessageBox::warning(Core::ICore::mainWindow(), tr("NDK Already Known"), @@ -274,7 +319,7 @@ bool BlackBerryConfigurationManager::addConfiguration(BlackBerryConfiguration *c } if (config->isValid()) { - insertByVersion(config); + insertApiLevelByVersion(config); emit settingsChanged(); return true; } @@ -282,7 +327,7 @@ bool BlackBerryConfigurationManager::addConfiguration(BlackBerryConfiguration *c return false; } -void BlackBerryConfigurationManager::removeConfiguration(BlackBerryConfiguration *config) +void BlackBerryConfigurationManager::removeApiLevel(BlackBerryApiLevelConfiguration *config) { if (!config) return; @@ -290,9 +335,9 @@ void BlackBerryConfigurationManager::removeConfiguration(BlackBerryConfiguration if (config->isActive()) config->deactivate(); - m_configs.removeAt(m_configs.indexOf(config)); + m_apiLevels.removeAll(config); - if (defaultConfiguration() == config) + if (defaultApiLevel() == config) setDefaultConfiguration(0); delete config; @@ -300,15 +345,40 @@ void BlackBerryConfigurationManager::removeConfiguration(BlackBerryConfiguration emit settingsChanged(); } -QList BlackBerryConfigurationManager::configurations() const +bool BlackBerryConfigurationManager::addRuntime(BlackBerryRuntimeConfiguration *runtime) { - return m_configs; + foreach (BlackBerryRuntimeConfiguration *rt, m_runtimes) { + if (runtime->path() == rt->path()) + return false; + } + + insertRuntimeByVersion(runtime); + return true; } -QList BlackBerryConfigurationManager::manualConfigurations() const +void BlackBerryConfigurationManager::removeRuntime(BlackBerryRuntimeConfiguration *runtime) { - QList manuals; - foreach (BlackBerryConfiguration *config, m_configs) { + if (!runtime) + return; + + m_runtimes.removeAll(runtime); + delete runtime; +} + +QList BlackBerryConfigurationManager::apiLevels() const +{ + return m_apiLevels; +} + +QList BlackBerryConfigurationManager::runtimes() const +{ + return m_runtimes; +} + +QList BlackBerryConfigurationManager::manualApiLevels() const +{ + QList manuals; + foreach (BlackBerryApiLevelConfiguration *config, m_apiLevels) { if (!config->isAutoDetected()) manuals << config; } @@ -316,10 +386,10 @@ QList BlackBerryConfigurationManager::manualConfigura return manuals; } -QList BlackBerryConfigurationManager::activeConfigurations() const +QList BlackBerryConfigurationManager::activeApiLevels() const { - QList actives; - foreach (BlackBerryConfiguration *config, m_configs) { + QList actives; + foreach (BlackBerryApiLevelConfiguration *config, m_apiLevels) { if (config->isActive()) actives << config; } @@ -327,12 +397,13 @@ QList BlackBerryConfigurationManager::activeConfigura return actives; } -BlackBerryConfiguration *BlackBerryConfigurationManager::configurationFromEnvFile(const Utils::FileName &envFile) const +BlackBerryApiLevelConfiguration *BlackBerryConfigurationManager::apiLevelFromEnvFile( + const Utils::FileName &envFile) const { if (envFile.isEmpty()) return 0; - foreach (BlackBerryConfiguration *config, m_configs) { + foreach (BlackBerryApiLevelConfiguration *config, m_apiLevels) { if (config->ndkEnvFile() == envFile) return config; } @@ -340,21 +411,32 @@ BlackBerryConfiguration *BlackBerryConfigurationManager::configurationFromEnvFil return 0; } -BlackBerryConfiguration *BlackBerryConfigurationManager::defaultConfiguration() const +BlackBerryRuntimeConfiguration *BlackBerryConfigurationManager::runtimeFromFilePath( + const QString &path) { - if (m_configs.isEmpty()) + foreach (BlackBerryRuntimeConfiguration *runtime, m_runtimes) { + if (runtime->path() == path) + return runtime; + } + + return 0; +} + +BlackBerryApiLevelConfiguration *BlackBerryConfigurationManager::defaultApiLevel() const +{ + if (m_apiLevels.isEmpty()) return 0; // !m_defaultConfiguration means use newest configuration if (!m_defaultConfiguration) - return m_configs.first(); + return m_apiLevels.first(); return m_defaultConfiguration; } QList BlackBerryConfigurationManager::defaultConfigurationEnv() const { - const BlackBerryConfiguration *config = defaultConfiguration(); + const BlackBerryApiLevelConfiguration *config = defaultApiLevel(); if (config) return config->qnxEnv(); @@ -371,13 +453,14 @@ void BlackBerryConfigurationManager::loadSettings() restoreConfigurations(); // For backward compatibility loadManualConfigurations(); - loadAutoDetectedConfigurations(); + loadAutoDetectedApiLevels(); + loadAutoDetectedRuntimes(); checkToolChainConfiguration(); // 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(); + if (activeApiLevels().isEmpty() && !m_apiLevels.isEmpty()) + m_apiLevels.first()->activate(); emit settingsLoaded(); emit settingsChanged(); @@ -397,7 +480,8 @@ BlackBerryConfigurationManager &BlackBerryConfigurationManager::instance() BlackBerryConfigurationManager::~BlackBerryConfigurationManager() { - qDeleteAll(m_configs); + qDeleteAll(m_apiLevels); + qDeleteAll(m_runtimes); delete m_writer; } diff --git a/src/plugins/qnx/blackberryconfigurationmanager.h b/src/plugins/qnx/blackberryconfigurationmanager.h index 88e9f8fdf8a..cbbef821e74 100644 --- a/src/plugins/qnx/blackberryconfigurationmanager.h +++ b/src/plugins/qnx/blackberryconfigurationmanager.h @@ -43,7 +43,8 @@ namespace Utils { class PersistentSettingsWriter; } namespace Qnx { namespace Internal { -class BlackBerryConfiguration; +class BlackBerryApiLevelConfiguration; +class BlackBerryRuntimeConfiguration; class BlackBerryConfigurationManager : public QObject { @@ -51,13 +52,17 @@ class BlackBerryConfigurationManager : public QObject public: static BlackBerryConfigurationManager &instance(); ~BlackBerryConfigurationManager(); - bool addConfiguration(BlackBerryConfiguration *config); - void removeConfiguration(BlackBerryConfiguration *config); - QList configurations() const; - QList manualConfigurations() const; - QList activeConfigurations() const; - BlackBerryConfiguration *configurationFromEnvFile(const Utils::FileName &envFile) const; - BlackBerryConfiguration *defaultConfiguration() const; + bool addApiLevel(BlackBerryApiLevelConfiguration *config); + void removeApiLevel(BlackBerryApiLevelConfiguration *config); + bool addRuntime(BlackBerryRuntimeConfiguration *runtime); + void removeRuntime(BlackBerryRuntimeConfiguration *runtime); + QList apiLevels() const; + QList runtimes() const; + QList manualApiLevels() const; + QList activeApiLevels() const; + BlackBerryApiLevelConfiguration *apiLevelFromEnvFile(const Utils::FileName &envFile) const; + BlackBerryRuntimeConfiguration *runtimeFromFilePath(const QString &path); + BlackBerryApiLevelConfiguration *defaultApiLevel() const; QString barsignerCskPath() const; QString idTokenPath() const; @@ -68,10 +73,11 @@ public: // returns the environment for the default API level QList defaultConfigurationEnv() const; - void loadAutoDetectedConfigurations(); - void setDefaultConfiguration(BlackBerryConfiguration *config); + void loadAutoDetectedApiLevels(); + void loadAutoDetectedRuntimes(); + void setDefaultConfiguration(BlackBerryApiLevelConfiguration *config); - bool newestConfigurationEnabled() const; + bool newestApiLevelEnabled() const; void emitSettingsChanged(); @@ -86,9 +92,10 @@ signals: private: BlackBerryConfigurationManager(QObject *parent = 0); - QList m_configs; + QList m_apiLevels; + QList m_runtimes; - BlackBerryConfiguration *m_defaultConfiguration; + BlackBerryApiLevelConfiguration *m_defaultConfiguration; Utils::PersistentSettingsWriter *m_writer; @@ -98,7 +105,8 @@ private: void loadManualConfigurations(); void setKitsAutoDetectionSource(); - void insertByVersion(BlackBerryConfiguration* config); + void insertApiLevelByVersion(BlackBerryApiLevelConfiguration* apiLevel); + void insertRuntimeByVersion(BlackBerryRuntimeConfiguration* runtime); }; } // namespace Internal diff --git a/src/plugins/qnx/blackberrydeviceconfigurationwidget.cpp b/src/plugins/qnx/blackberrydeviceconfigurationwidget.cpp index 4112c40a51f..a988e7a81dc 100644 --- a/src/plugins/qnx/blackberrydeviceconfigurationwidget.cpp +++ b/src/plugins/qnx/blackberrydeviceconfigurationwidget.cpp @@ -33,7 +33,6 @@ #include "blackberrydebugtokenuploader.h" #include "blackberrydebugtokenrequestdialog.h" #include "ui_blackberrydeviceconfigurationwidget.h" -#include "blackberryconfiguration.h" #include "blackberrydeviceconnectionmanager.h" #include "blackberrysigningutils.h" #include "blackberrydebugtokenreader.h" diff --git a/src/plugins/qnx/blackberrydeviceconfigurationwizardpages.cpp b/src/plugins/qnx/blackberrydeviceconfigurationwizardpages.cpp index 82571651fc1..09c229391f0 100644 --- a/src/plugins/qnx/blackberrydeviceconfigurationwizardpages.cpp +++ b/src/plugins/qnx/blackberrydeviceconfigurationwizardpages.cpp @@ -30,7 +30,6 @@ ****************************************************************************/ #include "blackberrydeviceconfigurationwizardpages.h" -#include "blackberryconfiguration.h" #include "blackberrydebugtokenrequestdialog.h" #include "blackberrydebugtokenreader.h" #include "blackberrysshkeysgenerator.h" @@ -38,7 +37,6 @@ #include "ui_blackberrydeviceconfigurationwizardsetuppage.h" #include "ui_blackberrydeviceconfigurationwizardquerypage.h" #include "ui_blackberrydeviceconfigurationwizardconfigpage.h" -#include "blackberryconfiguration.h" #include "blackberrydeviceconnectionmanager.h" #include "blackberrysigningutils.h" #include "qnxutils.h" diff --git a/src/plugins/qnx/blackberrydeviceconnection.cpp b/src/plugins/qnx/blackberrydeviceconnection.cpp index 4aa1a208069..3d9b6fe2142 100644 --- a/src/plugins/qnx/blackberrydeviceconnection.cpp +++ b/src/plugins/qnx/blackberrydeviceconnection.cpp @@ -31,7 +31,6 @@ #include "blackberrydeviceconnection.h" -#include "blackberryconfiguration.h" #include "blackberryconfigurationmanager.h" #include "qnxutils.h" diff --git a/src/plugins/qnx/blackberrydeviceconnectionmanager.cpp b/src/plugins/qnx/blackberrydeviceconnectionmanager.cpp index eb9411f1130..80d76b1eba7 100644 --- a/src/plugins/qnx/blackberrydeviceconnectionmanager.cpp +++ b/src/plugins/qnx/blackberrydeviceconnectionmanager.cpp @@ -114,7 +114,7 @@ void BlackBerryDeviceConnectionManager::connectDevice(Core::Id deviceId) // BlackBerry Device connection needs the Qnx environments to be set // in order to find the Connect.jar package. // Let's delay the device connections at startup till the Qnx settings are loaded. - if (BlackBerryConfigurationManager::instance().configurations().isEmpty()) { + if (BlackBerryConfigurationManager::instance().apiLevels().isEmpty()) { m_pendingDeviceConnections << device; connect(&BlackBerryConfigurationManager::instance(), SIGNAL(settingsLoaded()), this, SLOT(processPendingDeviceConnections()), Qt::UniqueConnection); @@ -308,7 +308,7 @@ void BlackBerryDeviceConnectionManager::handleProcessOutput(const QString &outpu void BlackBerryDeviceConnectionManager::processPendingDeviceConnections() { if (m_pendingDeviceConnections.isEmpty() - || BlackBerryConfigurationManager::instance().configurations().isEmpty()) + || BlackBerryConfigurationManager::instance().apiLevels().isEmpty()) return; foreach (ProjectExplorer::IDevice::ConstPtr device, m_pendingDeviceConnections) diff --git a/src/plugins/qnx/blackberryinstallwizardpages.cpp b/src/plugins/qnx/blackberryinstallwizardpages.cpp index 7e366864003..29b1e26ec52 100644 --- a/src/plugins/qnx/blackberryinstallwizardpages.cpp +++ b/src/plugins/qnx/blackberryinstallwizardpages.cpp @@ -31,7 +31,7 @@ #include "blackberryinstallwizardpages.h" #include "blackberryconfigurationmanager.h" -#include "blackberryconfiguration.h" +#include "blackberryapilevelconfiguration.h" #include "ui_blackberryinstallwizardoptionpage.h" #include "ui_blackberryinstallwizardtargetpage.h" @@ -482,7 +482,7 @@ void BlackBerryInstallWizardProcessPage::processTarget() // deactivate target if activated before uninstalling if (m_data.mode == BlackBerryInstallerDataHandler::UninstallMode) { - foreach (BlackBerryConfiguration *config, BlackBerryConfigurationManager::instance().configurations()) { + foreach (BlackBerryApiLevelConfiguration *config, BlackBerryConfigurationManager::instance().apiLevels()) { if (m_data.target.contains((config->targetName())) && config->isActive()) { config->deactivate(); break; @@ -519,11 +519,12 @@ void BlackBerryInstallWizardFinalPage::initializePage() if (m_data.mode == BlackBerryInstallerDataHandler::ManuallMode) { BlackBerryConfigurationManager &configManager = BlackBerryConfigurationManager::instance(); - BlackBerryConfiguration *config = configManager.configurationFromEnvFile(Utils::FileName::fromString(m_data.ndkPath)); + BlackBerryApiLevelConfiguration *config = + configManager.apiLevelFromEnvFile(Utils::FileName::fromString(m_data.ndkPath)); if (!config) { - config = new BlackBerryConfiguration(Utils::FileName::fromString(m_data.ndkPath)); - if (!configManager.addConfiguration(config)) { + config = new BlackBerryApiLevelConfiguration(Utils::FileName::fromString(m_data.ndkPath)); + if (!configManager.addApiLevel(config)) { delete config; // TODO: more explicit error message! label->setText(tr("An error has occurred while adding target from:\n %1").arg(m_data.ndkPath)); diff --git a/src/plugins/qnx/blackberrykeyswidget.h b/src/plugins/qnx/blackberrykeyswidget.h index b9e3e8d0a46..46f876b197e 100644 --- a/src/plugins/qnx/blackberrykeyswidget.h +++ b/src/plugins/qnx/blackberrykeyswidget.h @@ -32,8 +32,6 @@ #ifndef BLACKBERRYKEYSWIDGET_H_H #define BLACKBERRYKEYSWIDGET_H_H -#include "blackberryconfiguration.h" - #include #include diff --git a/src/plugins/qnx/blackberryndkprocess.cpp b/src/plugins/qnx/blackberryndkprocess.cpp index f47431e629c..058d05be137 100644 --- a/src/plugins/qnx/blackberryndkprocess.cpp +++ b/src/plugins/qnx/blackberryndkprocess.cpp @@ -30,7 +30,6 @@ ****************************************************************************/ #include "blackberryndkprocess.h" -#include "blackberryconfiguration.h" #include "blackberryconfigurationmanager.h" #include diff --git a/src/plugins/qnx/blackberryndksettingspage.cpp b/src/plugins/qnx/blackberryndksettingspage.cpp index 778931e598f..b02e87d29e8 100644 --- a/src/plugins/qnx/blackberryndksettingspage.cpp +++ b/src/plugins/qnx/blackberryndksettingspage.cpp @@ -32,7 +32,7 @@ #include "blackberryndksettingspage.h" #include "blackberryndksettingswidget.h" #include "blackberryconfigurationmanager.h" -#include "blackberryconfiguration.h" +#include "blackberryapilevelconfiguration.h" #include "qnxconstants.h" #include @@ -46,7 +46,7 @@ BlackBerryNDKSettingsPage::BlackBerryNDKSettingsPage(QObject *parent) : Core::IOptionsPage(parent) { setId(Core::Id(Constants::QNX_BB_NDK_SETTINGS_ID)); - setDisplayName(tr("API Level")); + setDisplayName(tr("API Levels and Runtimes")); setCategory(Constants::QNX_BB_CATEGORY); setDisplayCategory(QCoreApplication::translate("BlackBerry", Constants::QNX_BB_CATEGORY_TR)); @@ -62,19 +62,19 @@ QWidget *BlackBerryNDKSettingsPage::widget() void BlackBerryNDKSettingsPage::apply() { - foreach (BlackBerryConfiguration* config, m_widget->activatedTargets()) { + foreach (BlackBerryApiLevelConfiguration* config, m_widget->activatedApiLevels()) { if (!config->isActive()) config->activate(); } - foreach (BlackBerryConfiguration* config, m_widget->deactivatedTargets()) { + foreach (BlackBerryApiLevelConfiguration* config, m_widget->deactivatedApiLevels()) { if (config->isActive()) config->deactivate(); } BlackBerryConfigurationManager &manager = BlackBerryConfigurationManager::instance(); - manager.setDefaultConfiguration(m_widget->defaultConfiguration()); + manager.setDefaultConfiguration(m_widget->defaultApiLevel()); } void BlackBerryNDKSettingsPage::finish() diff --git a/src/plugins/qnx/blackberryndksettingswidget.cpp b/src/plugins/qnx/blackberryndksettingswidget.cpp index a1e2b5663a0..cca92f6c9f7 100644 --- a/src/plugins/qnx/blackberryndksettingswidget.cpp +++ b/src/plugins/qnx/blackberryndksettingswidget.cpp @@ -35,7 +35,8 @@ #include "blackberrysigningutils.h" #include "blackberryconfigurationmanager.h" -#include "blackberryconfiguration.h" +#include "blackberryapilevelconfiguration.h" +#include "blackberryruntimeconfiguration.h" #include @@ -57,37 +58,44 @@ BlackBerryNDKSettingsWidget::BlackBerryNDKSettingsWidget(QWidget *parent) : m_ui(new Ui_BlackBerryNDKSettingsWidget), m_bbConfigManager(BlackBerryConfigurationManager::instance()), m_autoDetectedNdks(0), - m_manualNdks(0) + m_manualApiLevel(0) { m_ui->setupUi(this); updateInfoTable(0); - m_activatedTargets << m_bbConfigManager.activeConfigurations(); + m_activatedApiLevel << m_bbConfigManager.activeApiLevels(); m_ui->ndksTreeWidget->header()->setResizeMode(QHeaderView::Stretch); m_ui->ndksTreeWidget->header()->setStretchLastSection(false); - m_ui->ndksTreeWidget->setHeaderItem(new QTreeWidgetItem(QStringList() << tr("API Level") << tr("Environment File"))); + m_ui->ndksTreeWidget->setHeaderItem(new QTreeWidgetItem(QStringList() << tr("Configuration"))); m_ui->ndksTreeWidget->setTextElideMode(Qt::ElideNone); - m_ui->ndksTreeWidget->setColumnCount(2); - m_autoDetectedNdks = new QTreeWidgetItem(m_ui->ndksTreeWidget); + m_ui->ndksTreeWidget->setColumnCount(1); + + m_apiLevels = new QTreeWidgetItem(m_ui->ndksTreeWidget); + m_apiLevels->setText(0, tr("Api Levels")); + m_runtimes = new QTreeWidgetItem(m_ui->ndksTreeWidget); + m_runtimes->setText(0, tr("Runtimes")); + + m_autoDetectedNdks = new QTreeWidgetItem(m_apiLevels); m_autoDetectedNdks->setText(0, tr("Auto-Detected")); m_autoDetectedNdks->setFirstColumnSpanned(true); m_autoDetectedNdks->setFlags(Qt::ItemIsEnabled); - m_manualNdks = new QTreeWidgetItem(m_ui->ndksTreeWidget); - m_manualNdks->setText(0, tr("Manual")); - m_manualNdks->setFirstColumnSpanned(true); - m_manualNdks->setFlags(Qt::ItemIsEnabled); + m_manualApiLevel = new QTreeWidgetItem(m_apiLevels); + m_manualApiLevel->setText(0, tr("Manual")); + m_manualApiLevel->setFirstColumnSpanned(true); + m_manualApiLevel->setFlags(Qt::ItemIsEnabled); m_ui->ndksTreeWidget->expandAll(); - 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->addConfigButton, SIGNAL(clicked()), this, SLOT(addConfiguration())); + connect(m_ui->removeConfigButton, SIGNAL(clicked()), this, SLOT(removeConfiguration())); + connect(m_ui->activateNdkTargetButton, SIGNAL(clicked()), this, SLOT(activateApiLevel())); + connect(m_ui->deactivateNdkTargetButton, SIGNAL(clicked()), this, SLOT(deactivateApiLevel())); + connect(m_ui->cleanUpButton, SIGNAL(clicked()), this, SLOT(cleanUp())); connect(m_ui->ndksTreeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), this, SLOT(updateInfoTable(QTreeWidgetItem*))); - connect(this, SIGNAL(targetsUpdated()), this, SLOT(populateDefaultConfigurationCombo())); + connect(this, SIGNAL(configurationsUpdated()), this, SLOT(populateDefaultConfigurationCombo())); // BlackBerryConfigurationManager.settingsChanged signal may be emitted multiple times // during the same event handling. This would result in multiple updatePage() calls even through @@ -102,57 +110,74 @@ BlackBerryNDKSettingsWidget::BlackBerryNDKSettingsWidget(QWidget *parent) : bool BlackBerryNDKSettingsWidget::hasActiveNdk() const { - return !m_bbConfigManager.configurations().isEmpty(); + return !m_bbConfigManager.apiLevels().isEmpty(); } -QList BlackBerryNDKSettingsWidget::activatedTargets() +QList BlackBerryNDKSettingsWidget::activatedApiLevels() { - return m_activatedTargets; + return m_activatedApiLevel; } -QList BlackBerryNDKSettingsWidget::deactivatedTargets() +QList BlackBerryNDKSettingsWidget::deactivatedApiLevels() { - return m_deactivatedTargets; + return m_deactivatedApiLevel; } -BlackBerryConfiguration *BlackBerryNDKSettingsWidget::defaultConfiguration() const +BlackBerryApiLevelConfiguration *BlackBerryNDKSettingsWidget::defaultApiLevel() const { const int currentIndex = m_ui->apiLevelCombo->currentIndex(); - return static_cast( + return static_cast( m_ui->apiLevelCombo->itemData(currentIndex).value()); } void BlackBerryNDKSettingsWidget::updateInfoTable(QTreeWidgetItem* currentItem) { - BlackBerryConfiguration *config = m_bbConfigManager.configurationFromEnvFile( - Utils::FileName::fromString(currentItem ? currentItem->text(1) : QString())); - updateUi(currentItem, config); + updateUi(currentItem); + if (!currentItem) + return; - m_ui->informationBox->setVisible(config); - if (config) { - m_ui->baseNameLabel->setText(config->displayName()); - m_ui->hostLabel->setText(QDir::toNativeSeparators(config->qnxHost())); - m_ui->targetLabel->setText(QDir::toNativeSeparators(config->sysRoot().toString())); - m_ui->versionLabel->setText(config->version().toString()); + if (currentItem->parent() == m_runtimes) { + BlackBerryRuntimeConfiguration *runtime = static_cast( + currentItem->data(0, Qt::UserRole).value()); + if (runtime) { + m_ui->baseName->setText(runtime->displayName()); + m_ui->version->setText(runtime->version().toString()); + m_ui->path->setText(runtime->path()); + + m_ui->removeConfigButton->setEnabled(runtime); + m_ui->activateNdkTargetButton->setEnabled(false); + m_ui->deactivateNdkTargetButton->setEnabled(false); + } + + return; + } else if (currentItem->parent() == m_autoDetectedNdks || currentItem->parent() == m_manualApiLevel) { + BlackBerryApiLevelConfiguration *config = static_cast( + currentItem->data(0, Qt::UserRole).value()); + + m_ui->path->setText(config->ndkEnvFile().toString()); + m_ui->baseName->setText(config->displayName()); + m_ui->host->setText(QDir::toNativeSeparators(config->qnxHost())); + m_ui->target->setText(QDir::toNativeSeparators(config->sysRoot().toString())); + m_ui->version->setText(config->version().toString()); } } -void BlackBerryNDKSettingsWidget::updateNdkList() +void BlackBerryNDKSettingsWidget::updateConfigurationList() { qDeleteAll(m_autoDetectedNdks->takeChildren()); - qDeleteAll(m_manualNdks->takeChildren()); + qDeleteAll(m_manualApiLevel->takeChildren()); + qDeleteAll(m_runtimes->takeChildren()); bool enableCleanUp = false; - foreach (BlackBerryConfiguration *config, m_bbConfigManager.configurations()) { - QTreeWidgetItem *parent = config->isAutoDetected() ? m_autoDetectedNdks : m_manualNdks; + foreach (BlackBerryApiLevelConfiguration *config, m_bbConfigManager.apiLevels()) { + QTreeWidgetItem *parent = config->isAutoDetected() ? m_autoDetectedNdks : m_manualApiLevel; QTreeWidgetItem *item = new QTreeWidgetItem(parent); item->setText(0, config->displayName()); - item->setText(1, config->ndkEnvFile().toString()); + item->setData(0, Qt::UserRole, QVariant::fromValue(static_cast(config))); QFont font; - font.setBold(config->isActive() || m_activatedTargets.contains(config)); + font.setBold(config->isActive() || m_activatedApiLevel.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()) { @@ -181,157 +206,202 @@ void BlackBerryNDKSettingsWidget::updateNdkList() } } + foreach (BlackBerryRuntimeConfiguration *runtime, m_bbConfigManager.runtimes()) { + QTreeWidgetItem *item = new QTreeWidgetItem(m_runtimes); + item->setText(0, runtime->displayName()); + item->setData(0, Qt::UserRole, QVariant::fromValue(static_cast(runtime))); + } + m_ui->ndksTreeWidget->setCurrentItem(m_autoDetectedNdks->child(0)); m_ui->cleanUpButton->setEnabled(enableCleanUp); } -void BlackBerryNDKSettingsWidget::addNdkTarget() +void BlackBerryNDKSettingsWidget::addConfiguration() { - launchBlackBerryInstallerWizard(BlackBerryInstallerDataHandler::InstallMode); - emit targetsUpdated(); + launchBlackBerryInstallerWizard(BlackBerryInstallerDataHandler::InstallMode, BlackBerryInstallerDataHandler::ApiLevel); + emit configurationsUpdated(); } -void BlackBerryNDKSettingsWidget::removeNdkTarget() +void BlackBerryNDKSettingsWidget::removeConfiguration() +{ + QTreeWidgetItem * current = m_ui->ndksTreeWidget->currentItem(); + if (!current) + return; + + if (current->parent() == m_runtimes) { + uninstallConfiguration(BlackBerryInstallerDataHandler::Runtime); + emit configurationsUpdated(); + } else { + const QString ndk = m_ui->ndksTreeWidget->currentItem()->text(0); + BlackBerryApiLevelConfiguration *config = static_cast( + current->data(0, Qt::UserRole).value()); + if (config->isAutoDetected()) { + uninstallConfiguration(BlackBerryInstallerDataHandler::ApiLevel); + emit configurationsUpdated(); + return; + } + + QMessageBox::StandardButton button = + QMessageBox::question(Core::ICore::mainWindow(), + tr("Clean BlackBerry 10 Configuration"), + tr("Are you sure you want to remove:\n %1?").arg(ndk), + QMessageBox::Yes | QMessageBox::No); + + if (button == QMessageBox::Yes) { + m_activatedApiLevel.removeOne(config); + m_deactivatedApiLevel.removeOne(config); + m_bbConfigManager.removeApiLevel(config); + m_manualApiLevel->removeChild(m_ui->ndksTreeWidget->currentItem()); + emit configurationsUpdated(); + } + } +} + +void BlackBerryNDKSettingsWidget::activateApiLevel() { if (!m_ui->ndksTreeWidget->currentItem()) return; - QString ndk = m_ui->ndksTreeWidget->currentItem()->text(0); - QString envFilePath = m_ui->ndksTreeWidget->currentItem()->text(1); + BlackBerryApiLevelConfiguration *config = static_cast( + m_ui->ndksTreeWidget->currentItem()->data(0, Qt::UserRole).value()); - BlackBerryConfiguration *config = m_bbConfigManager.configurationFromEnvFile(Utils::FileName::fromString(envFilePath)); - if (!config) - return; + if (!m_activatedApiLevel.contains(config)) { + m_activatedApiLevel << config; + if (m_deactivatedApiLevel.contains(config)) + m_deactivatedApiLevel.removeAt(m_deactivatedApiLevel.indexOf(config)); - if (config->isAutoDetected()) { - uninstallNdkTarget(); - emit targetsUpdated(); - return; - } - - QMessageBox::StandardButton button = - QMessageBox::question(Core::ICore::mainWindow(), - tr("Clean BlackBerry 10 Configuration"), - tr("Are you sure you want to remove:\n %1?").arg(ndk), - QMessageBox::Yes | QMessageBox::No); - - if (button == QMessageBox::Yes) { - m_activatedTargets.removeOne(config); - m_deactivatedTargets.removeOne(config); - m_bbConfigManager.removeConfiguration(config); - m_manualNdks->removeChild(m_ui->ndksTreeWidget->currentItem()); - emit targetsUpdated(); + updateUi(m_ui->ndksTreeWidget->currentItem()); + emit configurationsUpdated(); } } -void BlackBerryNDKSettingsWidget::activateNdkTarget() +void BlackBerryNDKSettingsWidget::deactivateApiLevel() { 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); - emit targetsUpdated(); + BlackBerryApiLevelConfiguration *config = static_cast( + m_ui->ndksTreeWidget->currentItem()->data(0, Qt::UserRole).value()); + if (m_activatedApiLevel.contains(config)) { + m_deactivatedApiLevel << config; + m_activatedApiLevel.removeAt(m_activatedApiLevel.indexOf(config)); + updateUi(m_ui->ndksTreeWidget->currentItem()); + emit configurationsUpdated(); } } -void BlackBerryNDKSettingsWidget::deactivateNdkTarget() +void BlackBerryNDKSettingsWidget::updateUi(QTreeWidgetItem *item) { - 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); - emit targetsUpdated(); - } -} - -void BlackBerryNDKSettingsWidget::updateUi(QTreeWidgetItem *item, BlackBerryConfiguration *config) -{ - if (!item || !config) { - m_ui->removeNdkButton->setEnabled(false); + if (!item || (item->parent() != m_runtimes && + item->parent() != m_autoDetectedNdks && + item->parent() != m_manualApiLevel )) { + m_ui->removeConfigButton->setEnabled(false); m_ui->activateNdkTargetButton->setEnabled(false); m_ui->deactivateNdkTargetButton->setEnabled(false); + m_ui->informationBox->setVisible(false); return; } - const bool contains = m_activatedTargets.contains(config); - QFont font; - font.setBold(contains); - item->setFont(0, font); - item->setFont(1, font); + const bool isRuntimeItem = item->parent() == m_runtimes; + // Update the infornation to show in the information panel + m_ui->informationBox->setVisible(true); + m_ui->informationBox->setTitle(isRuntimeItem ? + tr("Runtime Information") : tr("API Level Information")); + m_ui->pathLabel->setText(isRuntimeItem ? tr("Path:") : tr("Environment File:")); + m_ui->hostLabel->setVisible(!isRuntimeItem); + m_ui->host->setVisible(!isRuntimeItem); + m_ui->targetLabel->setVisible(!isRuntimeItem); + m_ui->target->setVisible(!isRuntimeItem); - m_ui->activateNdkTargetButton->setEnabled(!contains); - m_ui->deactivateNdkTargetButton->setEnabled(contains && m_activatedTargets.size() > 1); - // Disable remove button for auto detected pre-10.2 NDKs (uninstall wizard doesn't handle them) - m_ui->removeNdkButton->setEnabled(!(config->isAutoDetected() - && QnxUtils::sdkInstallerPath(config->ndkPath()).isEmpty())); + if (!isRuntimeItem) { + BlackBerryApiLevelConfiguration *config = static_cast( + item->data(0, Qt::UserRole).value()); + const bool contains = m_activatedApiLevel.contains(config); + QFont font; + font.setBold(contains); + item->setFont(0, font); + + m_ui->activateNdkTargetButton->setEnabled(!contains); + m_ui->deactivateNdkTargetButton->setEnabled(contains && m_activatedApiLevel.size() > 1); + // Disable remove button for auto detected pre-10.2 NDKs (uninstall wizard doesn't handle them) + m_ui->removeConfigButton->setEnabled(!(config->isAutoDetected() + && QnxUtils::sdkInstallerPath(config->ndkPath()).isEmpty())); + } } -void BlackBerryNDKSettingsWidget::uninstallNdkTarget() +void BlackBerryNDKSettingsWidget::uninstallConfiguration(BlackBerryInstallerDataHandler::Target target) { const QMessageBox::StandardButton answer = QMessageBox::question(this, tr("Confirmation"), tr("Are you sure you want to uninstall %1?"). - arg(m_ui->baseNameLabel->text()), + arg(m_ui->baseName->text()), QMessageBox::Yes | QMessageBox::No); - if (answer == QMessageBox::Yes) - launchBlackBerryInstallerWizard(BlackBerryInstallerDataHandler::UninstallMode, m_ui->versionLabel->text()); + if (answer == QMessageBox::Yes) { + if (target == BlackBerryInstallerDataHandler::ApiLevel) { + launchBlackBerryInstallerWizard(BlackBerryInstallerDataHandler::UninstallMode, + BlackBerryInstallerDataHandler::ApiLevel, m_ui->version->text()); + } else if (target == BlackBerryInstallerDataHandler::Runtime) { + if (m_ui->ndksTreeWidget->currentItem()) { + launchBlackBerryInstallerWizard(BlackBerryInstallerDataHandler::UninstallMode, + BlackBerryInstallerDataHandler::Runtime, + m_ui->ndksTreeWidget->currentItem()->text(0)); + } + } + + } } void BlackBerryNDKSettingsWidget::cleanUp() { - foreach (BlackBerryConfiguration *config, m_bbConfigManager.configurations()) { + foreach (BlackBerryApiLevelConfiguration *config, m_bbConfigManager.apiLevels()) { if (!config->isValid()) { - m_activatedTargets.removeOne(config); - m_deactivatedTargets.removeOne(config); - m_bbConfigManager.removeConfiguration(config); + m_activatedApiLevel.removeOne(config); + m_deactivatedApiLevel.removeOne(config); + m_bbConfigManager.removeApiLevel(config); } } - updateNdkList(); + updateConfigurationList(); } void BlackBerryNDKSettingsWidget::handleInstallationFinished() { - m_bbConfigManager.loadAutoDetectedConfigurations(); - updateNdkList(); + m_bbConfigManager.loadAutoDetectedApiLevels(); + m_bbConfigManager.loadAutoDetectedRuntimes(); + updateConfigurationList(); } void BlackBerryNDKSettingsWidget::handleUninstallationFinished() { - if (!m_ui->ndksTreeWidget->currentItem()) + QTreeWidgetItem *current = m_ui->ndksTreeWidget->currentItem(); + if (!current) return; - QString targetName = m_ui->ndksTreeWidget->currentItem()->text(0); - QString envFilePath = m_ui->ndksTreeWidget->currentItem()->text(1); + if (current->parent() == m_runtimes) { + BlackBerryRuntimeConfiguration *runtime = static_cast( + current->data(0, Qt::UserRole).value()); + m_bbConfigManager.removeRuntime(runtime); + updateConfigurationList(); + return; + } + + const QString targetName = current->text(0); // Check if the target is corrrecly uninstalled foreach (const NdkInstallInformation &ndk, QnxUtils::installedNdks()) { if (ndk.name == targetName) return; } - BlackBerryConfiguration *config = m_bbConfigManager.configurationFromEnvFile(Utils::FileName::fromString(envFilePath)); - if (m_activatedTargets.contains(config)) - m_activatedTargets.removeAt(m_activatedTargets.indexOf(config)); - else if (m_deactivatedTargets.contains(config)) - m_deactivatedTargets.removeAt(m_deactivatedTargets.indexOf(config)); + BlackBerryApiLevelConfiguration *config = static_cast( + current->data(0, Qt::UserRole).value()); + if (m_activatedApiLevel.contains(config)) + m_activatedApiLevel.removeAt(m_activatedApiLevel.indexOf(config)); + else if (m_deactivatedApiLevel.contains(config)) + m_deactivatedApiLevel.removeAt(m_deactivatedApiLevel.indexOf(config)); - m_bbConfigManager.removeConfiguration(config); + m_bbConfigManager.removeApiLevel(config); - updateNdkList(); + updateConfigurationList(); } void BlackBerryNDKSettingsWidget::populateDefaultConfigurationCombo() @@ -339,7 +409,7 @@ void BlackBerryNDKSettingsWidget::populateDefaultConfigurationCombo() // prevent QComboBox::currentIndexChanged() from being emitted m_ui->apiLevelCombo->clear(); - QList configurations = m_bbConfigManager.configurations(); + QList configurations = m_bbConfigManager.apiLevels(); m_ui->apiLevelCombo->addItem(tr("Newest version"), QVariant::fromValue(static_cast(0))); @@ -349,9 +419,9 @@ void BlackBerryNDKSettingsWidget::populateDefaultConfigurationCombo() int configIndex = 0; - BlackBerryConfiguration *defaultConfig = m_bbConfigManager.defaultConfiguration(); + BlackBerryApiLevelConfiguration *defaultConfig = m_bbConfigManager.defaultApiLevel(); - foreach (BlackBerryConfiguration *config, configurations) { + foreach (BlackBerryApiLevelConfiguration *config, configurations) { m_ui->apiLevelCombo->addItem(config->displayName(), QVariant::fromValue(static_cast(config))); @@ -359,15 +429,17 @@ void BlackBerryNDKSettingsWidget::populateDefaultConfigurationCombo() configIndex = m_ui->apiLevelCombo->count() - 1; } - const int currentIndex = (m_bbConfigManager.newestConfigurationEnabled()) ? 0 : configIndex; + const int currentIndex = (m_bbConfigManager.newestApiLevelEnabled()) ? 0 : configIndex; m_ui->apiLevelCombo->setCurrentIndex(currentIndex); } -void BlackBerryNDKSettingsWidget::launchBlackBerryInstallerWizard(BlackBerryInstallerDataHandler::Mode mode, - const QString& targetVersion) +void BlackBerryNDKSettingsWidget::launchBlackBerryInstallerWizard( + BlackBerryInstallerDataHandler::Mode mode, + BlackBerryInstallerDataHandler::Target target, + const QString& targetVersion) { - BlackBerryInstallWizard wizard(mode, BlackBerryInstallerDataHandler::ApiLevel, targetVersion, this); + BlackBerryInstallWizard wizard(mode, target, targetVersion, this); if (mode == BlackBerryInstallerDataHandler::InstallMode) connect(&wizard, SIGNAL(processFinished()), this, SLOT(handleInstallationFinished())); else diff --git a/src/plugins/qnx/blackberryndksettingswidget.h b/src/plugins/qnx/blackberryndksettingswidget.h index d8a2d80f9cf..3e6c5d92535 100644 --- a/src/plugins/qnx/blackberryndksettingswidget.h +++ b/src/plugins/qnx/blackberryndksettingswidget.h @@ -45,7 +45,7 @@ QT_END_NAMESPACE namespace Qnx { namespace Internal { -class BlackBerryConfiguration; +class BlackBerryApiLevelConfiguration; class BlackBerryConfigurationManager; class Ui_BlackBerryNDKSettingsWidget; @@ -57,41 +57,45 @@ public: bool hasActiveNdk() const; - QList activatedTargets(); - QList deactivatedTargets(); + QList activatedApiLevels(); + QList deactivatedApiLevels(); - BlackBerryConfiguration *defaultConfiguration() const; + BlackBerryApiLevelConfiguration *defaultApiLevel() const; signals: - void targetsUpdated(); + void configurationsUpdated(); public slots: void updateInfoTable(QTreeWidgetItem* currentItem); - void updateNdkList(); - void addNdkTarget(); - void removeNdkTarget(); - void activateNdkTarget(); - void deactivateNdkTarget(); - void uninstallNdkTarget(); + void updateConfigurationList(); + void addConfiguration(); + void removeConfiguration(); + void activateApiLevel(); + void deactivateApiLevel(); + void uninstallConfiguration(BlackBerryInstallerDataHandler::Target target); void cleanUp(); void handleInstallationFinished(); void handleUninstallationFinished(); - void updateUi(QTreeWidgetItem* item, BlackBerryConfiguration* config); + void updateUi(QTreeWidgetItem* item); void populateDefaultConfigurationCombo(); void updatePage(); private: void launchBlackBerryInstallerWizard(BlackBerryInstallerDataHandler::Mode mode, + BlackBerryInstallerDataHandler::Target target, const QString& tagetVersion = QString()); Ui_BlackBerryNDKSettingsWidget *m_ui; BlackBerryConfigurationManager &m_bbConfigManager; - QTreeWidgetItem *m_autoDetectedNdks; - QTreeWidgetItem *m_manualNdks; + QTreeWidgetItem *m_apiLevels; + QTreeWidgetItem *m_runtimes; - QList m_activatedTargets; - QList m_deactivatedTargets; + QTreeWidgetItem *m_autoDetectedNdks; + QTreeWidgetItem *m_manualApiLevel; + + QList m_activatedApiLevel; + QList m_deactivatedApiLevel; QTimer m_timer; }; diff --git a/src/plugins/qnx/blackberryndksettingswidget.ui b/src/plugins/qnx/blackberryndksettingswidget.ui index 30bd18b27b7..bfcc59cb194 100644 --- a/src/plugins/qnx/blackberryndksettingswidget.ui +++ b/src/plugins/qnx/blackberryndksettingswidget.ui @@ -7,7 +7,7 @@ 0 0 773 - 495 + 412 @@ -55,14 +55,14 @@ - + Add - + Remove @@ -139,60 +139,77 @@ - API Level Information + GroupBox - - - - - - - - - - - Name: - - - + + QFormLayout::AllNonFixedFieldsGrow + - + - Version: + Path: - - - - - - - - - + + - + + + Name: + + + + + + + + + + + + + + Version: + + + + + Host: - - + + + + + + + + + Target: + + + + + + + - + diff --git a/src/plugins/qnx/blackberryruntimeconfiguration.cpp b/src/plugins/qnx/blackberryruntimeconfiguration.cpp new file mode 100644 index 00000000000..9ebce6edd48 --- /dev/null +++ b/src/plugins/qnx/blackberryruntimeconfiguration.cpp @@ -0,0 +1,94 @@ +/************************************************************************** +** +** Copyright (C) 2014 BlackBerry Limited. All rights reserved. +** +** Contact: BlackBerry (qt@blackberry.com) +** Contact: KDAB (info@kdab.com) +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#include "blackberryruntimeconfiguration.h" + +#include "qnxconstants.h" + +#include +#include + +namespace Qnx { +namespace Internal { + +const QLatin1String PathKey("Path"); +const QLatin1String DisplayNameKey("DisplayName"); +const QLatin1String VersionKey("Version"); + +BlackBerryRuntimeConfiguration::BlackBerryRuntimeConfiguration( + const QString &path, + const BlackBerryVersionNumber &version) + : m_path(path) +{ + if (!version.isEmpty()) + m_version = version; + else + m_version = BlackBerryVersionNumber::fromFileName(QFileInfo(path).baseName(), + QRegExp(QLatin1String("^runtime_(.*)$"))); + + m_displayName = QObject::tr("Runtime ") + m_version.toString(); +} + +BlackBerryRuntimeConfiguration::BlackBerryRuntimeConfiguration(const QVariantMap &data) +{ + m_path = data.value(QLatin1String(PathKey)).toString(); + m_displayName = data.value(QLatin1String(DisplayNameKey)).toString(); + m_version = BlackBerryVersionNumber(data.value(QLatin1String(VersionKey)).toString()); +} + +QString BlackBerryRuntimeConfiguration::path() const +{ + return m_path; +} + +QString BlackBerryRuntimeConfiguration::displayName() const +{ + return m_displayName; +} + +BlackBerryVersionNumber BlackBerryRuntimeConfiguration::version() const +{ + return m_version; +} + +QVariantMap BlackBerryRuntimeConfiguration::toMap() const +{ + QVariantMap data; + data.insert(QLatin1String(Qnx::Constants::QNX_BB_KEY_CONFIGURATION_TYPE), + QLatin1String(Qnx::Constants::QNX_BB_RUNTIME_TYPE)); + data.insert(QLatin1String(PathKey), m_path); + data.insert(QLatin1String(DisplayNameKey), m_displayName); + data.insert(QLatin1String(VersionKey), m_version.toString()); + return data; +} + +} +} diff --git a/src/plugins/qnx/blackberryruntimeconfiguration.h b/src/plugins/qnx/blackberryruntimeconfiguration.h new file mode 100644 index 00000000000..7d6423e6f27 --- /dev/null +++ b/src/plugins/qnx/blackberryruntimeconfiguration.h @@ -0,0 +1,60 @@ +/************************************************************************** +** +** Copyright (C) 2014 BlackBerry Limited. All rights reserved. +** +** Contact: BlackBerry (qt@blackberry.com) +** Contact: KDAB (info@kdab.com) +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#ifndef BLACKBERRYRUNTIMECONFIGURATION_H +#define BLACKBERRYRUNTIMECONFIGURATION_H + +#include + +namespace Qnx { +namespace Internal { +class BlackBerryRuntimeConfiguration +{ +public: + BlackBerryRuntimeConfiguration(const QString &path, + const BlackBerryVersionNumber &version = BlackBerryVersionNumber()); + BlackBerryRuntimeConfiguration(const QVariantMap &data); + + QString path() const; + QString displayName() const; + BlackBerryVersionNumber version() const; + QVariantMap toMap() const; + +private: + QString m_path; + QString m_displayName; + BlackBerryVersionNumber m_version; +}; + +} +} + +#endif // BLACKBERRYRUNTIMECONFIGURATION_H diff --git a/src/plugins/qnx/blackberrysetupwizardpages.cpp b/src/plugins/qnx/blackberrysetupwizardpages.cpp new file mode 100644 index 00000000000..9c17dda9411 --- /dev/null +++ b/src/plugins/qnx/blackberrysetupwizardpages.cpp @@ -0,0 +1,344 @@ +/************************************************************************** +** +** Copyright (C) 2014 BlackBerry Limited. All rights reserved. +** +** Contact: BlackBerry (qt@blackberry.com) +** Contact: KDAB (info@kdab.com) +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#include "blackberrysetupwizardpages.h" +#include "blackberryndksettingswidget.h" +#include "blackberrysigningutils.h" +#include "ui_blackberrysetupwizardkeyspage.h" +#include "ui_blackberrysetupwizardcertificatepage.h" +#include "ui_blackberrysetupwizarddevicepage.h" +#include "ui_blackberrysetupwizardfinishpage.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +using namespace Qnx; +using namespace Qnx::Internal; + +BlackBerrySetupWizardWelcomePage::BlackBerrySetupWizardWelcomePage(QWidget *parent) : + QWizardPage(parent) +{ + const QString welcomeMessage = + tr("Welcome to the BlackBerry Development " + "Environment Setup Wizard.\nThis wizard will guide you through " + "the essential steps to deploy a ready-to-go development environment " + "for BlackBerry 10 devices."); + + setTitle(tr("BlackBerry Development Environment Setup")); + + QLabel *label = new QLabel(this); + label->setWordWrap(true); + label->setText(welcomeMessage); + + QVBoxLayout *layout = new QVBoxLayout; + layout->addStretch(); + layout->addWidget(label); + layout->addStretch(); + + setLayout(layout); +} + +//----------------------------------------------------------------------------- + +BlackBerrySetupWizardNdkPage::BlackBerrySetupWizardNdkPage(QWidget *parent) : + QWizardPage(parent), + m_widget(0) +{ + setTitle(tr("Configure the NDK Path")); + + m_widget = new BlackBerryNDKSettingsWidget(this); + m_widget->setWizardMessageVisible(false); + + connect(m_widget, SIGNAL(targetsUpdated()), this, SIGNAL(completeChanged())); + connect(m_widget, SIGNAL(targetsUpdated()), this, SIGNAL(targetsUpdated())); + + QVBoxLayout *layout = new QVBoxLayout; + layout->addWidget(m_widget); + + setLayout(layout); +} + +BlackBerrySetupWizardNdkPage::~BlackBerrySetupWizardNdkPage() +{ +} + +bool BlackBerrySetupWizardNdkPage::isComplete() const +{ + return m_widget->hasActiveNdk(); +} + +//----------------------------------------------------------------------------- + +BlackBerrySetupWizardKeysPage::BlackBerrySetupWizardKeysPage(QWidget *parent) : + QWizardPage(parent), + m_ui(0), + m_complete(false) +{ + setTitle(tr("Setup Signing Keys")); + + initUi(); +} + +BlackBerrySetupWizardKeysPage::~BlackBerrySetupWizardKeysPage() +{ + delete m_ui; + m_ui = 0; +} + +void BlackBerrySetupWizardKeysPage::showKeysMessage(const QString &url) +{ + const QMessageBox::StandardButton button = QMessageBox::question(this, + tr("Qt Creator"), + tr("This wizard will be closed and you will be taken to the BlackBerry " + "key request web page. Do you want to continue?"), + QMessageBox::Yes | QMessageBox::No); + + if (button == QMessageBox::Yes) { + QDesktopServices::openUrl(QUrl(url)); + wizard()->reject(); + } +} + +bool BlackBerrySetupWizardKeysPage::isComplete() const +{ + return m_complete; +} + +void BlackBerrySetupWizardKeysPage::initUi() +{ + BlackBerrySigningUtils &utils = BlackBerrySigningUtils::instance(); + + m_ui = new Ui::BlackBerrySetupWizardKeysPage; + m_ui->setupUi(this); + + if (utils.hasLegacyKeys()) { + m_ui->linkLabel->setVisible(false); + m_ui->legacyLabel->setVisible(true); + m_ui->statusLabel->setVisible(false); + + setComplete(false); + } else if (utils.hasRegisteredKeys()) { + m_ui->linkLabel->setVisible(false); + m_ui->legacyLabel->setVisible(false); + m_ui->statusLabel->setVisible(true); + + setComplete(true); + } else { + m_ui->linkLabel->setVisible(true); + m_ui->legacyLabel->setVisible(false); + m_ui->statusLabel->setVisible(false); + + setComplete(false); + } + + connect(m_ui->linkLabel, SIGNAL(linkActivated(QString)), + this, SLOT(showKeysMessage(QString))); + connect(m_ui->legacyLabel, SIGNAL(linkActivated(QString)), + this, SLOT(showKeysMessage(QString))); + connect(m_ui->helpLabel, SIGNAL(linkActivated(QString)), + this, SLOT(showKeysMessage(QString))); +} + +void BlackBerrySetupWizardKeysPage::setComplete(bool complete) +{ + if (m_complete != complete) { + m_complete = complete; + m_ui->linkLabel->setVisible(!complete); + m_ui->statusLabel->setVisible(complete); + emit completeChanged(); + } +} + +//----------------------------------------------------------------------------- + +const char BlackBerrySetupWizardCertificatePage::AuthorField[] = "CertificatePage::Author"; +const char BlackBerrySetupWizardCertificatePage::PasswordField[] = "CertificatePage::Password"; +const char BlackBerrySetupWizardCertificatePage::PasswordField2[] = "CertificatePage::Password2"; + +BlackBerrySetupWizardCertificatePage::BlackBerrySetupWizardCertificatePage(QWidget *parent) + : QWizardPage(parent), + m_ui(0), + m_complete(false) +{ + setTitle(tr("Create Developer Certificate")); + + initUi(); +} + +bool BlackBerrySetupWizardCertificatePage::isComplete() const +{ + return m_complete; +} + +void BlackBerrySetupWizardCertificatePage::validate() +{ + if (m_ui->author->text().isEmpty() + || m_ui->password->text().isEmpty() + || m_ui->password2->text().isEmpty()) { + m_ui->status->clear(); + setComplete(false); + return; + } + + if (m_ui->password->text() != m_ui->password2->text()) { + m_ui->status->setText(tr("The entered passwords do not match.")); + setComplete(false); + return; + } + + if (m_ui->password->text().size() < 6) { + // TODO: Use tr() once string freeze is over + m_ui->status->setText(QCoreApplication::translate("Qnx::Internal::BlackBerryCreateCertificateDialog", "Password must be at least 6 characters long.")); + setComplete(false); + return; + } + + m_ui->status->clear(); + setComplete(true); +} + +void BlackBerrySetupWizardCertificatePage::checkBoxChanged(int state) +{ + if (state == Qt::Checked) { + m_ui->password->setEchoMode(QLineEdit::Normal); + m_ui->password2->setEchoMode(QLineEdit::Normal); + } else { + m_ui->password->setEchoMode(QLineEdit::Password); + m_ui->password2->setEchoMode(QLineEdit::Password); + } +} + +void BlackBerrySetupWizardCertificatePage::setComplete(bool complete) +{ + if (m_complete != complete) { + m_complete = complete; + emit completeChanged(); + } +} + +void BlackBerrySetupWizardCertificatePage::initUi() +{ + m_ui = new Ui::BlackBerrySetupWizardCertificatePage; + m_ui->setupUi(this); + m_ui->status->clear(); + + connect(m_ui->author, SIGNAL(textChanged(QString)), + this, SLOT(validate())); + connect(m_ui->password, SIGNAL(textChanged(QString)), + this, SLOT(validate())); + connect(m_ui->password2, SIGNAL(textChanged(QString)), + this, SLOT(validate())); + connect(m_ui->showPassword, SIGNAL(stateChanged(int)), + this, SLOT(checkBoxChanged(int))); + + registerField(QLatin1String(AuthorField) + QLatin1Char('*'), m_ui->author); + registerField(QLatin1String(PasswordField) + QLatin1Char('*'), m_ui->password); + registerField(QLatin1String(PasswordField2) + QLatin1Char('*'), m_ui->password2); +} + +//----------------------------------------------------------------------------- + +const char BlackBerrySetupWizardDevicePage::NameField[] = "DevicePage::Name"; +const char BlackBerrySetupWizardDevicePage::IpAddressField[] = "DevicePage::IpAddress"; +const char BlackBerrySetupWizardDevicePage::PasswordField[] = "DevicePage::PasswordField"; +const char BlackBerrySetupWizardDevicePage::PhysicalDeviceField[] = "DevicePage::PhysicalDeviceField"; + + +BlackBerrySetupWizardDevicePage::BlackBerrySetupWizardDevicePage(QWidget *parent) + : QWizardPage(parent), + m_ui(0) +{ + setTitle(tr("Configure BlackBerry Device Connection")); + + m_ui = new Ui::BlackBerrySetupWizardDevicePage; + m_ui->setupUi(this); + + m_ui->deviceName->setText(tr("BlackBerry Device")); + m_ui->ipAddress->setText(QLatin1String("169.254.0.1")); + + connect(m_ui->deviceName, SIGNAL(textChanged(QString)), this, SIGNAL(completeChanged())); + connect(m_ui->ipAddress, SIGNAL(textChanged(QString)), this, SIGNAL(completeChanged())); + connect(m_ui->password, SIGNAL(textChanged(QString)), this, SIGNAL(completeChanged())); + connect(m_ui->physicalDevice, SIGNAL(toggled(bool)), this, SIGNAL(completeChanged())); + + registerField(QLatin1String(NameField) + QLatin1Char('*'), m_ui->deviceName); + registerField(QLatin1String(IpAddressField) + QLatin1Char('*'), m_ui->ipAddress); + registerField(QLatin1String(PasswordField), m_ui->password); + registerField(QLatin1String(PhysicalDeviceField), m_ui->physicalDevice); +} + +bool BlackBerrySetupWizardDevicePage::isComplete() const +{ + if (m_ui->deviceName->text().isEmpty() || m_ui->ipAddress->text().isEmpty()) + return false; + + const bool passwordMandatory = m_ui->physicalDevice->isChecked(); + + if (passwordMandatory && m_ui->password->text().isEmpty()) + return false; + + return true; +} + +//----------------------------------------------------------------------------- + +BlackBerrySetupWizardFinishPage::BlackBerrySetupWizardFinishPage(QWidget *parent) + : QWizardPage(parent), + m_ui(0) +{ + setTitle(tr("Your environment is ready to be configured.")); + + m_ui = new Ui::BlackBerrySetupWizardFinishPage; + m_ui->setupUi(this); + setProgress(QString(), -1); +} + +void BlackBerrySetupWizardFinishPage::setProgress(const QString &status, int progress) +{ + if (progress < 0) { + m_ui->progressBar->hide(); + m_ui->statusLabel->clear(); + return; + } else if (!m_ui->progressBar->isVisible()) { + m_ui->progressBar->show(); + } + + m_ui->statusLabel->setText(status); + m_ui->progressBar->setValue(progress); +} diff --git a/src/plugins/qnx/blackberrysigningutils.cpp b/src/plugins/qnx/blackberrysigningutils.cpp index 1a987784053..f1f4fd42974 100644 --- a/src/plugins/qnx/blackberrysigningutils.cpp +++ b/src/plugins/qnx/blackberrysigningutils.cpp @@ -31,7 +31,6 @@ #include "blackberrysigningutils.h" #include "blackberrycertificate.h" -#include "blackberryconfiguration.h" #include "blackberryconfigurationmanager.h" #include "blackberrycreatecertificatedialog.h" #include "blackberrydebugtokenreader.h" diff --git a/src/plugins/qnx/qnx.pro b/src/plugins/qnx/qnx.pro index 6bffecb04a6..849f0d4df5e 100644 --- a/src/plugins/qnx/qnx.pro +++ b/src/plugins/qnx/qnx.pro @@ -51,7 +51,6 @@ SOURCES += qnxplugin.cpp \ blackberryabstractdeploystep.cpp \ blackberryndksettingswidget.cpp \ blackberryndksettingspage.cpp \ - blackberryconfiguration.cpp \ bardescriptormagicmatcher.cpp \ bardescriptoreditorfactory.cpp \ bardescriptoreditor.cpp \ @@ -102,7 +101,9 @@ SOURCES += qnxplugin.cpp \ qnxattachdebugdialog.cpp \ blackberrydeployqtlibrariesdialog.cpp \ blackberrysetuppage.cpp \ - blackberrysetupwidget.cpp + blackberrysetupwidget.cpp \ + blackberryruntimeconfiguration.cpp \ + blackberryapilevelconfiguration.cpp HEADERS += qnxplugin.h\ qnxconstants.h \ @@ -153,7 +154,6 @@ HEADERS += qnxplugin.h\ blackberryabstractdeploystep.h \ blackberryndksettingswidget.h \ blackberryndksettingspage.h \ - blackberryconfiguration.h \ bardescriptormagicmatcher.h \ bardescriptoreditorfactory.h \ bardescriptoreditor.h \ @@ -204,7 +204,9 @@ HEADERS += qnxplugin.h\ qnxattachdebugdialog.h \ blackberrydeployqtlibrariesdialog.h \ blackberrysetuppage.h \ - blackberrysetupwidget.h + blackberrysetupwidget.h \ + blackberryruntimeconfiguration.h \ + blackberryapilevelconfiguration.h FORMS += \ blackberrydeviceconfigurationwizardsetuppage.ui \ diff --git a/src/plugins/qnx/qnx.qbs b/src/plugins/qnx/qnx.qbs index 83d2b4fe649..c3b379524c7 100644 --- a/src/plugins/qnx/qnx.qbs +++ b/src/plugins/qnx/qnx.qbs @@ -159,8 +159,10 @@ QtcPlugin { "blackberryndksettingswidget.ui", "blackberryndksettingspage.cpp", "blackberryndksettingspage.h", - "blackberryconfiguration.cpp", - "blackberryconfiguration.h", + "blackberryapilevelconfiguration.cpp", + "blackberryapilevelconfiguration.h", + "blackberryruntimeconfiguration.cpp", + "blackberryruntimeconfiguration", "blackberrycertificate.cpp", "blackberrycertificate.h", "blackberrykeyspage.cpp", diff --git a/src/plugins/qnx/qnxconstants.h b/src/plugins/qnx/qnxconstants.h index db342752a5b..4cd257e1ee2 100644 --- a/src/plugins/qnx/qnxconstants.h +++ b/src/plugins/qnx/qnxconstants.h @@ -130,6 +130,11 @@ const char QNX_LEGACY_KEYS_URL[] = "https://developer.blackberry.com/native/docu "/com.qnx.doc.native_sdk.devguide/topic/bbid_to_sa.html"; const char QNX_REGISTER_KEYS_URL[] = "https://www.blackberry.com/SignedKeys/codesigning.html"; +const char QNX_BB_KEY_CONFIGURATION_TYPE[] = "BBConfigurationType"; + +const char QNX_BB_APILEVEL_TYPE[] = "BBApiLevel"; +const char QNX_BB_RUNTIME_TYPE[] = "BBRuntime"; + } // namespace Constants } // namespace Qnx diff --git a/src/plugins/qnx/qnxplugin.cpp b/src/plugins/qnx/qnxplugin.cpp index 84bd85f9e0a..84e911335e0 100644 --- a/src/plugins/qnx/qnxplugin.cpp +++ b/src/plugins/qnx/qnxplugin.cpp @@ -54,7 +54,7 @@ #include "blackberrycheckdevicestatusstepfactory.h" #include "blackberrydeviceconnectionmanager.h" #include "blackberryconfigurationmanager.h" -#include "blackberryconfiguration.h" +#include "blackberryapilevelconfiguration.h" #include "cascadesimport/cascadesimportwizard.h" #include "qnxtoolchain.h" #include "qnxattachdebugsupport.h" @@ -479,44 +479,46 @@ void QNXPlugin::testConfigurationManager() { BlackBerryConfigurationManager &manager = BlackBerryConfigurationManager::instance(); - QCOMPARE(manager.configurations().count(), 0); - QCOMPARE(manager.activeConfigurations().count(), 0); - QCOMPARE(manager.defaultConfiguration(), static_cast(0)); - QVERIFY(manager.newestConfigurationEnabled()); + QCOMPARE(manager.apiLevels().count(), 0); + QCOMPARE(manager.activeApiLevels().count(), 0); + QCOMPARE(manager.defaultApiLevel(), static_cast(0)); + QVERIFY(manager.newestApiLevelEnabled()); QFETCH(QVariantMap, newerConfiguration); QFETCH(QVariantMap, olderConfiguration); - BlackBerryConfiguration::setFakeConfig(true); - BlackBerryConfiguration *newerConfig = new BlackBerryConfiguration(newerConfiguration); - BlackBerryConfiguration *oldConfig = new BlackBerryConfiguration(olderConfiguration); + BlackBerryApiLevelConfiguration::setFakeConfig(true); + BlackBerryApiLevelConfiguration *newerConfig = + new BlackBerryApiLevelConfiguration(newerConfiguration); + BlackBerryApiLevelConfiguration *oldConfig = + new BlackBerryApiLevelConfiguration(olderConfiguration); - QVERIFY(manager.addConfiguration(oldConfig)); - QVERIFY(manager.newestConfigurationEnabled()); - QCOMPARE(manager.defaultConfiguration(), oldConfig); + QVERIFY(manager.addApiLevel(oldConfig)); + QVERIFY(manager.newestApiLevelEnabled()); + QCOMPARE(manager.defaultApiLevel(), oldConfig); manager.setDefaultConfiguration(oldConfig); - QCOMPARE(manager.defaultConfiguration(), oldConfig); - QCOMPARE(manager.configurations().first(), oldConfig); - QVERIFY(!manager.newestConfigurationEnabled()); + QCOMPARE(manager.defaultApiLevel(), oldConfig); + QCOMPARE(manager.apiLevels().first(), oldConfig); + QVERIFY(!manager.newestApiLevelEnabled()); - QVERIFY(manager.addConfiguration(newerConfig)); - QCOMPARE(manager.configurations().first(), newerConfig); - QCOMPARE(manager.defaultConfiguration(), oldConfig); + QVERIFY(manager.addApiLevel(newerConfig)); + QCOMPARE(manager.apiLevels().first(), newerConfig); + QCOMPARE(manager.defaultApiLevel(), oldConfig); manager.setDefaultConfiguration(0); - QVERIFY(manager.newestConfigurationEnabled()); - QCOMPARE(manager.defaultConfiguration(), newerConfig); + QVERIFY(manager.newestApiLevelEnabled()); + QCOMPARE(manager.defaultApiLevel(), newerConfig); manager.setDefaultConfiguration(oldConfig); - manager.removeConfiguration(oldConfig); - QCOMPARE(manager.defaultConfiguration(), newerConfig); - QVERIFY(manager.newestConfigurationEnabled()); + manager.removeApiLevel(oldConfig); + QCOMPARE(manager.defaultApiLevel(), newerConfig); + QVERIFY(manager.newestApiLevelEnabled()); - manager.removeConfiguration(newerConfig); - QCOMPARE(manager.defaultConfiguration(), static_cast(0)); - QVERIFY(manager.newestConfigurationEnabled()); + manager.removeApiLevel(newerConfig); + QCOMPARE(manager.defaultApiLevel(), static_cast(0)); + QVERIFY(manager.newestApiLevelEnabled()); } #endif diff --git a/src/plugins/qnx/qnxtoolchain.cpp b/src/plugins/qnx/qnxtoolchain.cpp index 1da28c1f7d7..d145d47b2e8 100644 --- a/src/plugins/qnx/qnxtoolchain.cpp +++ b/src/plugins/qnx/qnxtoolchain.cpp @@ -34,7 +34,7 @@ #include "qnxutils.h" #include "blackberryconfigurationmanager.h" -#include "blackberryconfiguration.h" +#include "blackberryapilevelconfiguration.h" #include @@ -87,7 +87,8 @@ ToolChainConfigWidget *QnxToolChain::configurationWidget() void QnxToolChain::addToEnvironment(Utils::Environment &env) const { - foreach (BlackBerryConfiguration* config, BlackBerryConfigurationManager::instance().configurations()) { + foreach (BlackBerryApiLevelConfiguration* config, + BlackBerryConfigurationManager::instance().apiLevels()) { if (config->gccCompiler() == compilerCommand()) { setQnxEnvironment(env, config->qnxEnv()); break;