Qnx: Add BlackBerry runtime management support

Add support for managing user BlackBerry runtime configurations.

This does not handle adding manual runtimes yet, but only detects
runtimes from the NDK directories of the available API levels.

The BlackBerry NDK should provide a better way to detect installed
runtimes (e.g xml installation files) in order to improve
the BlackBerry runtime managemnt in Qt Creator.

Change-Id: I4f139d52352f903a27dfe4175d12b016b4ee25a9
Reviewed-by: Nicolas Arnaud-Cormos <nicolas@kdab.com>
This commit is contained in:
El Mehdi Fekari
2014-02-13 11:16:45 +01:00
committed by Mehdi Fekari
parent b840a2436f
commit aa8786fb2e
25 changed files with 1030 additions and 339 deletions

View File

@@ -29,11 +29,12 @@
** **
****************************************************************************/ ****************************************************************************/
#include "blackberryconfiguration.h" #include "blackberryapilevelconfiguration.h"
#include "blackberryconfigurationmanager.h" #include "blackberryconfigurationmanager.h"
#include "blackberryqtversion.h" #include "blackberryqtversion.h"
#include "qnxtoolchain.h" #include "qnxtoolchain.h"
#include "qnxconstants.h"
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
@@ -76,10 +77,10 @@ const QLatin1String NDKAutoDetectionSourceKey("NDKAutoDetectionSource");
const QLatin1String NDKAutoDetectedKey("NDKAutoDetectedKey"); const QLatin1String NDKAutoDetectedKey("NDKAutoDetectedKey");
#ifdef WITH_TESTS #ifdef WITH_TESTS
bool BlackBerryConfiguration::m_fakeConfig = false; bool BlackBerryApiLevelConfiguration::m_fakeConfig = false;
#endif #endif
BlackBerryConfiguration::BlackBerryConfiguration(const NdkInstallInformation &ndkInstallInfo) BlackBerryApiLevelConfiguration::BlackBerryApiLevelConfiguration(const NdkInstallInformation &ndkInstallInfo)
{ {
QString envFilePath = QnxUtils::envFilePath(ndkInstallInfo.path, ndkInstallInfo.version); QString envFilePath = QnxUtils::envFilePath(ndkInstallInfo.path, ndkInstallInfo.version);
QTC_ASSERT(!envFilePath.isEmpty(), return); QTC_ASSERT(!envFilePath.isEmpty(), return);
@@ -96,7 +97,7 @@ BlackBerryConfiguration::BlackBerryConfiguration(const NdkInstallInformation &nd
ctor(); ctor();
} }
BlackBerryConfiguration::BlackBerryConfiguration(const FileName &ndkEnvFile) BlackBerryApiLevelConfiguration::BlackBerryApiLevelConfiguration(const FileName &ndkEnvFile)
: m_autoDetectionSource(Utils::FileName()) : m_autoDetectionSource(Utils::FileName())
{ {
QTC_ASSERT(!QFileInfo(ndkEnvFile.toString()).isDir(), return); QTC_ASSERT(!QFileInfo(ndkEnvFile.toString()).isDir(), return);
@@ -129,7 +130,7 @@ BlackBerryConfiguration::BlackBerryConfiguration(const FileName &ndkEnvFile)
ctor(); ctor();
} }
BlackBerryConfiguration::BlackBerryConfiguration(const QVariantMap &data) BlackBerryApiLevelConfiguration::BlackBerryApiLevelConfiguration(const QVariantMap &data)
{ {
QString envFilePath = data.value(NDKEnvFileKey).toString(); QString envFilePath = data.value(NDKEnvFileKey).toString();
QTC_ASSERT(!envFilePath.isEmpty(), return); QTC_ASSERT(!envFilePath.isEmpty(), return);
@@ -148,7 +149,7 @@ BlackBerryConfiguration::BlackBerryConfiguration(const QVariantMap &data)
ctor(); ctor();
} }
void BlackBerryConfiguration::ctor() void BlackBerryApiLevelConfiguration::ctor()
{ {
FileName qmake4Path = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/qmake"))); 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"))); FileName qmake5Path = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/qt5/qmake")));
@@ -172,42 +173,42 @@ void BlackBerryConfiguration::ctor()
m_simulatorDebugger = simulatorGdbPath; m_simulatorDebugger = simulatorGdbPath;
} }
QString BlackBerryConfiguration::ndkPath() const QString BlackBerryApiLevelConfiguration::ndkPath() const
{ {
return m_ndkEnvFile.parentDir().toString(); return m_ndkEnvFile.parentDir().toString();
} }
QString BlackBerryConfiguration::displayName() const QString BlackBerryApiLevelConfiguration::displayName() const
{ {
return m_displayName; return m_displayName;
} }
QString BlackBerryConfiguration::targetName() const QString BlackBerryApiLevelConfiguration::targetName() const
{ {
return m_targetName; return m_targetName;
} }
QString BlackBerryConfiguration::qnxHost() const QString BlackBerryApiLevelConfiguration::qnxHost() const
{ {
return m_qnxHost; return m_qnxHost;
} }
BlackBerryVersionNumber BlackBerryConfiguration::version() const BlackBerryVersionNumber BlackBerryApiLevelConfiguration::version() const
{ {
return m_version; return m_version;
} }
bool BlackBerryConfiguration::isAutoDetected() const bool BlackBerryApiLevelConfiguration::isAutoDetected() const
{ {
return !m_autoDetectionSource.isEmpty(); return !m_autoDetectionSource.isEmpty();
} }
Utils::FileName BlackBerryConfiguration::autoDetectionSource() const Utils::FileName BlackBerryApiLevelConfiguration::autoDetectionSource() const
{ {
return m_autoDetectionSource; return m_autoDetectionSource;
} }
bool BlackBerryConfiguration::isActive() const bool BlackBerryApiLevelConfiguration::isActive() const
{ {
foreach (Kit *kit, KitManager::kits()) { foreach (Kit *kit, KitManager::kits()) {
if (kit->isAutoDetected() && if (kit->isAutoDetected() &&
@@ -218,10 +219,10 @@ bool BlackBerryConfiguration::isActive() const
return false; return false;
} }
bool BlackBerryConfiguration::isValid() const bool BlackBerryApiLevelConfiguration::isValid() const
{ {
#ifdef WITH_TESTS #ifdef WITH_TESTS
if (BlackBerryConfiguration::fakeConfig()) if (BlackBerryApiLevelConfiguration::fakeConfig())
return true; return true;
#endif #endif
@@ -232,49 +233,51 @@ bool BlackBerryConfiguration::isValid() const
&& m_sysRoot.toFileInfo().exists()); && m_sysRoot.toFileInfo().exists());
} }
FileName BlackBerryConfiguration::ndkEnvFile() const FileName BlackBerryApiLevelConfiguration::ndkEnvFile() const
{ {
return m_ndkEnvFile; return m_ndkEnvFile;
} }
FileName BlackBerryConfiguration::qmake4BinaryFile() const FileName BlackBerryApiLevelConfiguration::qmake4BinaryFile() const
{ {
return m_qmake4BinaryFile; return m_qmake4BinaryFile;
} }
FileName BlackBerryConfiguration::qmake5BinaryFile() const FileName BlackBerryApiLevelConfiguration::qmake5BinaryFile() const
{ {
return m_qmake5BinaryFile; return m_qmake5BinaryFile;
} }
FileName BlackBerryConfiguration::gccCompiler() const FileName BlackBerryApiLevelConfiguration::gccCompiler() const
{ {
return m_gccCompiler; return m_gccCompiler;
} }
FileName BlackBerryConfiguration::deviceDebuger() const FileName BlackBerryApiLevelConfiguration::deviceDebuger() const
{ {
return m_deviceDebugger; return m_deviceDebugger;
} }
FileName BlackBerryConfiguration::simulatorDebuger() const FileName BlackBerryApiLevelConfiguration::simulatorDebuger() const
{ {
return m_simulatorDebugger; return m_simulatorDebugger;
} }
FileName BlackBerryConfiguration::sysRoot() const FileName BlackBerryApiLevelConfiguration::sysRoot() const
{ {
return m_sysRoot; return m_sysRoot;
} }
QList<Utils::EnvironmentItem> BlackBerryConfiguration::qnxEnv() const QList<Utils::EnvironmentItem> BlackBerryApiLevelConfiguration::qnxEnv() const
{ {
return m_qnxEnv; return m_qnxEnv;
} }
QVariantMap BlackBerryConfiguration::toMap() const QVariantMap BlackBerryApiLevelConfiguration::toMap() const
{ {
QVariantMap data; 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(NDKEnvFileKey), m_ndkEnvFile.toString());
data.insert(QLatin1String(NDKDisplayNameKey), m_displayName); data.insert(QLatin1String(NDKDisplayNameKey), m_displayName);
data.insert(QLatin1String(NDKPathKey), ndkPath()); data.insert(QLatin1String(NDKPathKey), ndkPath());
@@ -286,7 +289,7 @@ QVariantMap BlackBerryConfiguration::toMap() const
return data; return data;
} }
QnxAbstractQtVersion *BlackBerryConfiguration::createQtVersion( QnxAbstractQtVersion *BlackBerryApiLevelConfiguration::createQtVersion(
const FileName &qmakePath, Qnx::QnxArchitecture arch, const QString &versionName) const FileName &qmakePath, Qnx::QnxArchitecture arch, const QString &versionName)
{ {
QnxAbstractQtVersion *version = new BlackBerryQtVersion( QnxAbstractQtVersion *version = new BlackBerryQtVersion(
@@ -296,7 +299,7 @@ QnxAbstractQtVersion *BlackBerryConfiguration::createQtVersion(
return version; return version;
} }
QnxToolChain *BlackBerryConfiguration::createToolChain( QnxToolChain *BlackBerryApiLevelConfiguration::createToolChain(
ProjectExplorer::Abi abi, const QString &versionName) ProjectExplorer::Abi abi, const QString &versionName)
{ {
QnxToolChain* toolChain = new QnxToolChain(ToolChain::AutoDetection); QnxToolChain* toolChain = new QnxToolChain(ToolChain::AutoDetection);
@@ -309,7 +312,7 @@ QnxToolChain *BlackBerryConfiguration::createToolChain(
return toolChain; return toolChain;
} }
QVariant BlackBerryConfiguration::createDebuggerItem( QVariant BlackBerryApiLevelConfiguration::createDebuggerItem(
QList<ProjectExplorer::Abi> abis, Qnx::QnxArchitecture arch, const QString &versionName) QList<ProjectExplorer::Abi> abis, Qnx::QnxArchitecture arch, const QString &versionName)
{ {
Utils::FileName command = arch == X86 ? m_simulatorDebugger : m_deviceDebugger; Utils::FileName command = arch == X86 ? m_simulatorDebugger : m_deviceDebugger;
@@ -322,7 +325,7 @@ QVariant BlackBerryConfiguration::createDebuggerItem(
return DebuggerItemManager::registerDebugger(debugger); return DebuggerItemManager::registerDebugger(debugger);
} }
Kit *BlackBerryConfiguration::createKit( Kit *BlackBerryApiLevelConfiguration::createKit(
QnxAbstractQtVersion *version, QnxToolChain *toolChain, const QVariant &debuggerItemId) QnxAbstractQtVersion *version, QnxToolChain *toolChain, const QVariant &debuggerItemId)
{ {
Kit *kit = new Kit; Kit *kit = new Kit;
@@ -359,7 +362,7 @@ Kit *BlackBerryConfiguration::createKit(
return kit; return kit;
} }
bool BlackBerryConfiguration::activate() bool BlackBerryApiLevelConfiguration::activate()
{ {
if (!isValid()) { if (!isValid()) {
if (!m_autoDetectionSource.isEmpty()) if (!m_autoDetectionSource.isEmpty())
@@ -441,7 +444,7 @@ bool BlackBerryConfiguration::activate()
return true; return true;
} }
void BlackBerryConfiguration::deactivate() void BlackBerryApiLevelConfiguration::deactivate()
{ {
foreach (Kit *kit, KitManager::kits()) { foreach (Kit *kit, KitManager::kits()) {
if (kit->isAutoDetected() && if (kit->isAutoDetected() &&
@@ -464,12 +467,12 @@ void BlackBerryConfiguration::deactivate()
} }
#ifdef WITH_TESTS #ifdef WITH_TESTS
void BlackBerryConfiguration::setFakeConfig(bool fakeConfig) void BlackBerryApiLevelConfiguration::setFakeConfig(bool fakeConfig)
{ {
m_fakeConfig = fakeConfig; m_fakeConfig = fakeConfig;
} }
bool BlackBerryConfiguration::fakeConfig() bool BlackBerryApiLevelConfiguration::fakeConfig()
{ {
return m_fakeConfig; return m_fakeConfig;
} }

View File

@@ -54,13 +54,13 @@ namespace Internal {
class QnxAbstractQtVersion; class QnxAbstractQtVersion;
class QnxToolChain; class QnxToolChain;
class BlackBerryConfiguration class BlackBerryApiLevelConfiguration
{ {
Q_DECLARE_TR_FUNCTIONS(Qnx::Internal::BlackBerryConfiguration) Q_DECLARE_TR_FUNCTIONS(Qnx::Internal::BlackBerryApiLevelConfiguration)
public: public:
BlackBerryConfiguration(const NdkInstallInformation &ndkInstallInfo); BlackBerryApiLevelConfiguration(const NdkInstallInformation &ndkInstallInfo);
BlackBerryConfiguration(const Utils::FileName &ndkEnvFile); BlackBerryApiLevelConfiguration(const Utils::FileName &ndkEnvFile);
BlackBerryConfiguration(const QVariantMap &data); BlackBerryApiLevelConfiguration(const QVariantMap &data);
bool activate(); bool activate();
void deactivate(); void deactivate();
QString ndkPath() const; QString ndkPath() const;

View File

@@ -30,7 +30,7 @@
****************************************************************************/ ****************************************************************************/
#include "blackberrycertificate.h" #include "blackberrycertificate.h"
#include "blackberryconfiguration.h" #include "blackberryapilevelconfiguration.h"
#include "blackberryconfigurationmanager.h" #include "blackberryconfigurationmanager.h"
#include "blackberryndkprocess.h" #include "blackberryndkprocess.h"

View File

@@ -31,7 +31,8 @@
#include "blackberryconfigurationmanager.h" #include "blackberryconfigurationmanager.h"
#include "blackberrycertificate.h" #include "blackberrycertificate.h"
#include "blackberryconfiguration.h" #include "blackberryapilevelconfiguration.h"
#include "blackberryruntimeconfiguration.h"
#include "qnxtoolchain.h" #include "qnxtoolchain.h"
#include "qnxutils.h" #include "qnxutils.h"
@@ -54,6 +55,7 @@
#include <QMessageBox> #include <QMessageBox>
#include <QFileInfo> #include <QFileInfo>
#include <QDebug> #include <QDebug>
#include <QDir>
using namespace ProjectExplorer; using namespace ProjectExplorer;
@@ -79,7 +81,7 @@ static Utils::FileName bbConfigSettingsFileName()
+ QLatin1String(Constants::QNX_BLACKBERRY_CONFIGS_FILENAME)); + QLatin1String(Constants::QNX_BLACKBERRY_CONFIGS_FILENAME));
} }
static bool sortConfigurationsByVersion(const BlackBerryConfiguration *a, const BlackBerryConfiguration *b) template <class T> static bool sortConfigurationsByVersion(const T *a, const T *b)
{ {
return a->version() > b->version(); return a->version() > b->version();
} }
@@ -99,8 +101,17 @@ void BlackBerryConfigurationManager::saveConfigurations()
QVariantMap data; QVariantMap data;
data.insert(QLatin1String(BBConfigsFileVersionKey), 1); data.insert(QLatin1String(BBConfigsFileVersionKey), 1);
int count = 0; int count = 0;
foreach (BlackBerryConfiguration *config, m_configs) { foreach (BlackBerryApiLevelConfiguration *apiLevel, m_apiLevels) {
QVariantMap tmp = config->toMap(); 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()) if (tmp.isEmpty())
continue; continue;
@@ -110,8 +121,8 @@ void BlackBerryConfigurationManager::saveConfigurations()
data.insert(QLatin1String(BBConfigCountKey), count); data.insert(QLatin1String(BBConfigCountKey), count);
const QString newestConfig = (newestConfigurationEnabled()) const QString newestConfig = (newestApiLevelEnabled())
? NewestConfigurationValue : defaultConfiguration()->ndkEnvFile().toString(); ? NewestConfigurationValue : defaultApiLevel()->ndkEnvFile().toString();
//save default configuration //save default configuration
data.insert(QLatin1String(DefaultConfigurationKey), newestConfig); data.insert(QLatin1String(DefaultConfigurationKey), newestConfig);
@@ -142,13 +153,19 @@ void BlackBerryConfigurationManager::restoreConfigurations()
continue; continue;
const QVariantMap dMap = data.value(key).toMap(); 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); if (!useNewestConfiguration && (apiLevel->ndkEnvFile().toString() == ndkEnvFile))
setDefaultConfiguration(apiLevel);
insertByVersion(config); }
if (!useNewestConfiguration && (config->ndkEnvFile().toString() == ndkEnvFile))
setDefaultConfiguration(config);
} }
emit settingsChanged(); emit settingsChanged();
@@ -174,8 +191,9 @@ void BlackBerryConfigurationManager::loadManualConfigurations()
ndkEnvPath = QnxUtils::envFilePath(ndkPath); ndkEnvPath = QnxUtils::envFilePath(ndkPath);
} }
BlackBerryConfiguration *config = new BlackBerryConfiguration(Utils::FileName::fromString(ndkEnvPath)); BlackBerryApiLevelConfiguration *config =
if (!addConfiguration(config)) new BlackBerryApiLevelConfiguration(Utils::FileName::fromString(ndkEnvPath));
if (!addApiLevel(config))
delete config; delete config;
settings->endGroup(); settings->endGroup();
@@ -186,20 +204,36 @@ void BlackBerryConfigurationManager::loadManualConfigurations()
settings->endGroup(); settings->endGroup();
} }
void BlackBerryConfigurationManager::loadAutoDetectedConfigurations() void BlackBerryConfigurationManager::loadAutoDetectedApiLevels()
{ {
foreach (const NdkInstallInformation &ndkInfo, QnxUtils::installedNdks()) { foreach (const NdkInstallInformation &ndkInfo, QnxUtils::installedNdks()) {
BlackBerryConfiguration *config = new BlackBerryConfiguration(ndkInfo); BlackBerryApiLevelConfiguration *config = new BlackBerryApiLevelConfiguration(ndkInfo);
if (!addConfiguration(config)) { if (!addApiLevel(config)) {
delete 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 -" qWarning() << "BlackBerryConfigurationManager::setDefaultConfiguration -"
" configuration does not belong to this instance: " " configuration does not belong to this instance: "
<< config->ndkEnvFile().toString(); << config->ndkEnvFile().toString();
@@ -210,7 +244,7 @@ void BlackBerryConfigurationManager::setDefaultConfiguration(BlackBerryConfigura
emit settingsChanged(); emit settingsChanged();
} }
bool BlackBerryConfigurationManager::newestConfigurationEnabled() const bool BlackBerryConfigurationManager::newestApiLevelEnabled() const
{ {
return !m_defaultConfiguration; return !m_defaultConfiguration;
} }
@@ -227,7 +261,7 @@ void BlackBerryConfigurationManager::setKitsAutoDetectionSource()
(DeviceTypeKitInformation::deviceTypeId(kit) == Constants::QNX_BB_CATEGORY_ICON) && (DeviceTypeKitInformation::deviceTypeId(kit) == Constants::QNX_BB_CATEGORY_ICON) &&
kit->autoDetectionSource().isEmpty()) { kit->autoDetectionSource().isEmpty()) {
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(kit); QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(kit);
foreach (BlackBerryConfiguration *config, m_configs) { foreach (BlackBerryApiLevelConfiguration *config, m_apiLevels) {
if ((version && if ((version &&
(version->qmakeCommand() == config->qmake4BinaryFile() || version->qmakeCommand() == config->qmake5BinaryFile())) (version->qmakeCommand() == config->qmake4BinaryFile() || version->qmakeCommand() == config->qmake5BinaryFile()))
&& (SysRootKitInformation::sysRoot(kit) == config->sysRoot())) && (SysRootKitInformation::sysRoot(kit) == config->sysRoot()))
@@ -237,17 +271,28 @@ void BlackBerryConfigurationManager::setKitsAutoDetectionSource()
} }
} }
void BlackBerryConfigurationManager::insertByVersion(BlackBerryConfiguration *config) void BlackBerryConfigurationManager::insertApiLevelByVersion(
BlackBerryApiLevelConfiguration *apiLevel)
{ {
QList<BlackBerryConfiguration *>::iterator it = qLowerBound(m_configs.begin(), m_configs.end(), QList<BlackBerryApiLevelConfiguration *>::iterator it =
config, &sortConfigurationsByVersion); qLowerBound(m_apiLevels.begin(), m_apiLevels.end(),
m_configs.insert(it, config); apiLevel, sortConfigurationsByVersion<BlackBerryApiLevelConfiguration>);
m_apiLevels.insert(it, apiLevel);
}
void BlackBerryConfigurationManager::insertRuntimeByVersion(
BlackBerryRuntimeConfiguration *runtime)
{
QList<BlackBerryRuntimeConfiguration *>::iterator it =
qLowerBound(m_runtimes.begin(), m_runtimes.end(),
runtime, sortConfigurationsByVersion<BlackBerryRuntimeConfiguration>);
m_runtimes.insert(it, runtime);
} }
// Switch to QnxToolchain for exisintg configuration using GccToolChain // Switch to QnxToolchain for exisintg configuration using GccToolChain
void BlackBerryConfigurationManager::checkToolChainConfiguration() void BlackBerryConfigurationManager::checkToolChainConfiguration()
{ {
foreach (BlackBerryConfiguration *config, m_configs) { foreach (BlackBerryApiLevelConfiguration *config, m_apiLevels) {
foreach (ToolChain *tc, ToolChainManager::toolChains()) { foreach (ToolChain *tc, ToolChainManager::toolChains()) {
if (tc->compilerCommand() == config->gccCompiler() if (tc->compilerCommand() == config->gccCompiler()
&& !tc->id().startsWith(QLatin1String(Constants::QNX_TOOLCHAIN_ID))) { && !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->ndkEnvFile() == c->ndkEnvFile()) {
if (!config->isAutoDetected()) if (!config->isAutoDetected())
QMessageBox::warning(Core::ICore::mainWindow(), tr("NDK Already Known"), QMessageBox::warning(Core::ICore::mainWindow(), tr("NDK Already Known"),
@@ -274,7 +319,7 @@ bool BlackBerryConfigurationManager::addConfiguration(BlackBerryConfiguration *c
} }
if (config->isValid()) { if (config->isValid()) {
insertByVersion(config); insertApiLevelByVersion(config);
emit settingsChanged(); emit settingsChanged();
return true; return true;
} }
@@ -282,7 +327,7 @@ bool BlackBerryConfigurationManager::addConfiguration(BlackBerryConfiguration *c
return false; return false;
} }
void BlackBerryConfigurationManager::removeConfiguration(BlackBerryConfiguration *config) void BlackBerryConfigurationManager::removeApiLevel(BlackBerryApiLevelConfiguration *config)
{ {
if (!config) if (!config)
return; return;
@@ -290,9 +335,9 @@ void BlackBerryConfigurationManager::removeConfiguration(BlackBerryConfiguration
if (config->isActive()) if (config->isActive())
config->deactivate(); config->deactivate();
m_configs.removeAt(m_configs.indexOf(config)); m_apiLevels.removeAll(config);
if (defaultConfiguration() == config) if (defaultApiLevel() == config)
setDefaultConfiguration(0); setDefaultConfiguration(0);
delete config; delete config;
@@ -300,15 +345,40 @@ void BlackBerryConfigurationManager::removeConfiguration(BlackBerryConfiguration
emit settingsChanged(); emit settingsChanged();
} }
QList<BlackBerryConfiguration *> 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<BlackBerryConfiguration *> BlackBerryConfigurationManager::manualConfigurations() const void BlackBerryConfigurationManager::removeRuntime(BlackBerryRuntimeConfiguration *runtime)
{ {
QList<BlackBerryConfiguration*> manuals; if (!runtime)
foreach (BlackBerryConfiguration *config, m_configs) { return;
m_runtimes.removeAll(runtime);
delete runtime;
}
QList<BlackBerryApiLevelConfiguration *> BlackBerryConfigurationManager::apiLevels() const
{
return m_apiLevels;
}
QList<BlackBerryRuntimeConfiguration *> BlackBerryConfigurationManager::runtimes() const
{
return m_runtimes;
}
QList<BlackBerryApiLevelConfiguration *> BlackBerryConfigurationManager::manualApiLevels() const
{
QList<BlackBerryApiLevelConfiguration*> manuals;
foreach (BlackBerryApiLevelConfiguration *config, m_apiLevels) {
if (!config->isAutoDetected()) if (!config->isAutoDetected())
manuals << config; manuals << config;
} }
@@ -316,10 +386,10 @@ QList<BlackBerryConfiguration *> BlackBerryConfigurationManager::manualConfigura
return manuals; return manuals;
} }
QList<BlackBerryConfiguration *> BlackBerryConfigurationManager::activeConfigurations() const QList<BlackBerryApiLevelConfiguration *> BlackBerryConfigurationManager::activeApiLevels() const
{ {
QList<BlackBerryConfiguration*> actives; QList<BlackBerryApiLevelConfiguration*> actives;
foreach (BlackBerryConfiguration *config, m_configs) { foreach (BlackBerryApiLevelConfiguration *config, m_apiLevels) {
if (config->isActive()) if (config->isActive())
actives << config; actives << config;
} }
@@ -327,12 +397,13 @@ QList<BlackBerryConfiguration *> BlackBerryConfigurationManager::activeConfigura
return actives; return actives;
} }
BlackBerryConfiguration *BlackBerryConfigurationManager::configurationFromEnvFile(const Utils::FileName &envFile) const BlackBerryApiLevelConfiguration *BlackBerryConfigurationManager::apiLevelFromEnvFile(
const Utils::FileName &envFile) const
{ {
if (envFile.isEmpty()) if (envFile.isEmpty())
return 0; return 0;
foreach (BlackBerryConfiguration *config, m_configs) { foreach (BlackBerryApiLevelConfiguration *config, m_apiLevels) {
if (config->ndkEnvFile() == envFile) if (config->ndkEnvFile() == envFile)
return config; return config;
} }
@@ -340,21 +411,32 @@ BlackBerryConfiguration *BlackBerryConfigurationManager::configurationFromEnvFil
return 0; 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; return 0;
// !m_defaultConfiguration means use newest configuration // !m_defaultConfiguration means use newest configuration
if (!m_defaultConfiguration) if (!m_defaultConfiguration)
return m_configs.first(); return m_apiLevels.first();
return m_defaultConfiguration; return m_defaultConfiguration;
} }
QList<Utils::EnvironmentItem> BlackBerryConfigurationManager::defaultConfigurationEnv() const QList<Utils::EnvironmentItem> BlackBerryConfigurationManager::defaultConfigurationEnv() const
{ {
const BlackBerryConfiguration *config = defaultConfiguration(); const BlackBerryApiLevelConfiguration *config = defaultApiLevel();
if (config) if (config)
return config->qnxEnv(); return config->qnxEnv();
@@ -371,13 +453,14 @@ void BlackBerryConfigurationManager::loadSettings()
restoreConfigurations(); restoreConfigurations();
// For backward compatibility // For backward compatibility
loadManualConfigurations(); loadManualConfigurations();
loadAutoDetectedConfigurations(); loadAutoDetectedApiLevels();
loadAutoDetectedRuntimes();
checkToolChainConfiguration(); checkToolChainConfiguration();
// If no target was/is activated, activate one since it's needed by // If no target was/is activated, activate one since it's needed by
// device connection and CSK code. // device connection and CSK code.
if (activeConfigurations().isEmpty() && !m_configs.isEmpty()) if (activeApiLevels().isEmpty() && !m_apiLevels.isEmpty())
m_configs.first()->activate(); m_apiLevels.first()->activate();
emit settingsLoaded(); emit settingsLoaded();
emit settingsChanged(); emit settingsChanged();
@@ -397,7 +480,8 @@ BlackBerryConfigurationManager &BlackBerryConfigurationManager::instance()
BlackBerryConfigurationManager::~BlackBerryConfigurationManager() BlackBerryConfigurationManager::~BlackBerryConfigurationManager()
{ {
qDeleteAll(m_configs); qDeleteAll(m_apiLevels);
qDeleteAll(m_runtimes);
delete m_writer; delete m_writer;
} }

View File

@@ -43,7 +43,8 @@ namespace Utils { class PersistentSettingsWriter; }
namespace Qnx { namespace Qnx {
namespace Internal { namespace Internal {
class BlackBerryConfiguration; class BlackBerryApiLevelConfiguration;
class BlackBerryRuntimeConfiguration;
class BlackBerryConfigurationManager : public QObject class BlackBerryConfigurationManager : public QObject
{ {
@@ -51,13 +52,17 @@ class BlackBerryConfigurationManager : public QObject
public: public:
static BlackBerryConfigurationManager &instance(); static BlackBerryConfigurationManager &instance();
~BlackBerryConfigurationManager(); ~BlackBerryConfigurationManager();
bool addConfiguration(BlackBerryConfiguration *config); bool addApiLevel(BlackBerryApiLevelConfiguration *config);
void removeConfiguration(BlackBerryConfiguration *config); void removeApiLevel(BlackBerryApiLevelConfiguration *config);
QList<BlackBerryConfiguration*> configurations() const; bool addRuntime(BlackBerryRuntimeConfiguration *runtime);
QList<BlackBerryConfiguration*> manualConfigurations() const; void removeRuntime(BlackBerryRuntimeConfiguration *runtime);
QList<BlackBerryConfiguration *> activeConfigurations() const; QList<BlackBerryApiLevelConfiguration*> apiLevels() const;
BlackBerryConfiguration *configurationFromEnvFile(const Utils::FileName &envFile) const; QList<BlackBerryRuntimeConfiguration *> runtimes() const;
BlackBerryConfiguration *defaultConfiguration() const; QList<BlackBerryApiLevelConfiguration*> manualApiLevels() const;
QList<BlackBerryApiLevelConfiguration *> activeApiLevels() const;
BlackBerryApiLevelConfiguration *apiLevelFromEnvFile(const Utils::FileName &envFile) const;
BlackBerryRuntimeConfiguration *runtimeFromFilePath(const QString &path);
BlackBerryApiLevelConfiguration *defaultApiLevel() const;
QString barsignerCskPath() const; QString barsignerCskPath() const;
QString idTokenPath() const; QString idTokenPath() const;
@@ -68,10 +73,11 @@ public:
// returns the environment for the default API level // returns the environment for the default API level
QList<Utils::EnvironmentItem> defaultConfigurationEnv() const; QList<Utils::EnvironmentItem> defaultConfigurationEnv() const;
void loadAutoDetectedConfigurations(); void loadAutoDetectedApiLevels();
void setDefaultConfiguration(BlackBerryConfiguration *config); void loadAutoDetectedRuntimes();
void setDefaultConfiguration(BlackBerryApiLevelConfiguration *config);
bool newestConfigurationEnabled() const; bool newestApiLevelEnabled() const;
void emitSettingsChanged(); void emitSettingsChanged();
@@ -86,9 +92,10 @@ signals:
private: private:
BlackBerryConfigurationManager(QObject *parent = 0); BlackBerryConfigurationManager(QObject *parent = 0);
QList<BlackBerryConfiguration*> m_configs; QList<BlackBerryApiLevelConfiguration*> m_apiLevels;
QList<BlackBerryRuntimeConfiguration*> m_runtimes;
BlackBerryConfiguration *m_defaultConfiguration; BlackBerryApiLevelConfiguration *m_defaultConfiguration;
Utils::PersistentSettingsWriter *m_writer; Utils::PersistentSettingsWriter *m_writer;
@@ -98,7 +105,8 @@ private:
void loadManualConfigurations(); void loadManualConfigurations();
void setKitsAutoDetectionSource(); void setKitsAutoDetectionSource();
void insertByVersion(BlackBerryConfiguration* config); void insertApiLevelByVersion(BlackBerryApiLevelConfiguration* apiLevel);
void insertRuntimeByVersion(BlackBerryRuntimeConfiguration* runtime);
}; };
} // namespace Internal } // namespace Internal

View File

@@ -33,7 +33,6 @@
#include "blackberrydebugtokenuploader.h" #include "blackberrydebugtokenuploader.h"
#include "blackberrydebugtokenrequestdialog.h" #include "blackberrydebugtokenrequestdialog.h"
#include "ui_blackberrydeviceconfigurationwidget.h" #include "ui_blackberrydeviceconfigurationwidget.h"
#include "blackberryconfiguration.h"
#include "blackberrydeviceconnectionmanager.h" #include "blackberrydeviceconnectionmanager.h"
#include "blackberrysigningutils.h" #include "blackberrysigningutils.h"
#include "blackberrydebugtokenreader.h" #include "blackberrydebugtokenreader.h"

View File

@@ -30,7 +30,6 @@
****************************************************************************/ ****************************************************************************/
#include "blackberrydeviceconfigurationwizardpages.h" #include "blackberrydeviceconfigurationwizardpages.h"
#include "blackberryconfiguration.h"
#include "blackberrydebugtokenrequestdialog.h" #include "blackberrydebugtokenrequestdialog.h"
#include "blackberrydebugtokenreader.h" #include "blackberrydebugtokenreader.h"
#include "blackberrysshkeysgenerator.h" #include "blackberrysshkeysgenerator.h"
@@ -38,7 +37,6 @@
#include "ui_blackberrydeviceconfigurationwizardsetuppage.h" #include "ui_blackberrydeviceconfigurationwizardsetuppage.h"
#include "ui_blackberrydeviceconfigurationwizardquerypage.h" #include "ui_blackberrydeviceconfigurationwizardquerypage.h"
#include "ui_blackberrydeviceconfigurationwizardconfigpage.h" #include "ui_blackberrydeviceconfigurationwizardconfigpage.h"
#include "blackberryconfiguration.h"
#include "blackberrydeviceconnectionmanager.h" #include "blackberrydeviceconnectionmanager.h"
#include "blackberrysigningutils.h" #include "blackberrysigningutils.h"
#include "qnxutils.h" #include "qnxutils.h"

View File

@@ -31,7 +31,6 @@
#include "blackberrydeviceconnection.h" #include "blackberrydeviceconnection.h"
#include "blackberryconfiguration.h"
#include "blackberryconfigurationmanager.h" #include "blackberryconfigurationmanager.h"
#include "qnxutils.h" #include "qnxutils.h"

View File

@@ -114,7 +114,7 @@ void BlackBerryDeviceConnectionManager::connectDevice(Core::Id deviceId)
// BlackBerry Device connection needs the Qnx environments to be set // BlackBerry Device connection needs the Qnx environments to be set
// in order to find the Connect.jar package. // in order to find the Connect.jar package.
// Let's delay the device connections at startup till the Qnx settings are loaded. // 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; m_pendingDeviceConnections << device;
connect(&BlackBerryConfigurationManager::instance(), SIGNAL(settingsLoaded()), connect(&BlackBerryConfigurationManager::instance(), SIGNAL(settingsLoaded()),
this, SLOT(processPendingDeviceConnections()), Qt::UniqueConnection); this, SLOT(processPendingDeviceConnections()), Qt::UniqueConnection);
@@ -308,7 +308,7 @@ void BlackBerryDeviceConnectionManager::handleProcessOutput(const QString &outpu
void BlackBerryDeviceConnectionManager::processPendingDeviceConnections() void BlackBerryDeviceConnectionManager::processPendingDeviceConnections()
{ {
if (m_pendingDeviceConnections.isEmpty() if (m_pendingDeviceConnections.isEmpty()
|| BlackBerryConfigurationManager::instance().configurations().isEmpty()) || BlackBerryConfigurationManager::instance().apiLevels().isEmpty())
return; return;
foreach (ProjectExplorer::IDevice::ConstPtr device, m_pendingDeviceConnections) foreach (ProjectExplorer::IDevice::ConstPtr device, m_pendingDeviceConnections)

View File

@@ -31,7 +31,7 @@
#include "blackberryinstallwizardpages.h" #include "blackberryinstallwizardpages.h"
#include "blackberryconfigurationmanager.h" #include "blackberryconfigurationmanager.h"
#include "blackberryconfiguration.h" #include "blackberryapilevelconfiguration.h"
#include "ui_blackberryinstallwizardoptionpage.h" #include "ui_blackberryinstallwizardoptionpage.h"
#include "ui_blackberryinstallwizardtargetpage.h" #include "ui_blackberryinstallwizardtargetpage.h"
@@ -482,7 +482,7 @@ void BlackBerryInstallWizardProcessPage::processTarget()
// deactivate target if activated before uninstalling // deactivate target if activated before uninstalling
if (m_data.mode == BlackBerryInstallerDataHandler::UninstallMode) { 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()) { if (m_data.target.contains((config->targetName())) && config->isActive()) {
config->deactivate(); config->deactivate();
break; break;
@@ -519,11 +519,12 @@ void BlackBerryInstallWizardFinalPage::initializePage()
if (m_data.mode == BlackBerryInstallerDataHandler::ManuallMode) { if (m_data.mode == BlackBerryInstallerDataHandler::ManuallMode) {
BlackBerryConfigurationManager &configManager = BlackBerryConfigurationManager::instance(); 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) { if (!config) {
config = new BlackBerryConfiguration(Utils::FileName::fromString(m_data.ndkPath)); config = new BlackBerryApiLevelConfiguration(Utils::FileName::fromString(m_data.ndkPath));
if (!configManager.addConfiguration(config)) { if (!configManager.addApiLevel(config)) {
delete config; delete config;
// TODO: more explicit error message! // TODO: more explicit error message!
label->setText(tr("An error has occurred while adding target from:\n %1").arg(m_data.ndkPath)); label->setText(tr("An error has occurred while adding target from:\n %1").arg(m_data.ndkPath));

View File

@@ -32,8 +32,6 @@
#ifndef BLACKBERRYKEYSWIDGET_H_H #ifndef BLACKBERRYKEYSWIDGET_H_H
#define BLACKBERRYKEYSWIDGET_H_H #define BLACKBERRYKEYSWIDGET_H_H
#include "blackberryconfiguration.h"
#include <QWidget> #include <QWidget>
#include <QString> #include <QString>

View File

@@ -30,7 +30,6 @@
****************************************************************************/ ****************************************************************************/
#include "blackberryndkprocess.h" #include "blackberryndkprocess.h"
#include "blackberryconfiguration.h"
#include "blackberryconfigurationmanager.h" #include "blackberryconfigurationmanager.h"
#include <utils/hostosinfo.h> #include <utils/hostosinfo.h>

View File

@@ -32,7 +32,7 @@
#include "blackberryndksettingspage.h" #include "blackberryndksettingspage.h"
#include "blackberryndksettingswidget.h" #include "blackberryndksettingswidget.h"
#include "blackberryconfigurationmanager.h" #include "blackberryconfigurationmanager.h"
#include "blackberryconfiguration.h" #include "blackberryapilevelconfiguration.h"
#include "qnxconstants.h" #include "qnxconstants.h"
#include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/projectexplorerconstants.h>
@@ -46,7 +46,7 @@ BlackBerryNDKSettingsPage::BlackBerryNDKSettingsPage(QObject *parent) :
Core::IOptionsPage(parent) Core::IOptionsPage(parent)
{ {
setId(Core::Id(Constants::QNX_BB_NDK_SETTINGS_ID)); setId(Core::Id(Constants::QNX_BB_NDK_SETTINGS_ID));
setDisplayName(tr("API Level")); setDisplayName(tr("API Levels and Runtimes"));
setCategory(Constants::QNX_BB_CATEGORY); setCategory(Constants::QNX_BB_CATEGORY);
setDisplayCategory(QCoreApplication::translate("BlackBerry", setDisplayCategory(QCoreApplication::translate("BlackBerry",
Constants::QNX_BB_CATEGORY_TR)); Constants::QNX_BB_CATEGORY_TR));
@@ -62,19 +62,19 @@ QWidget *BlackBerryNDKSettingsPage::widget()
void BlackBerryNDKSettingsPage::apply() void BlackBerryNDKSettingsPage::apply()
{ {
foreach (BlackBerryConfiguration* config, m_widget->activatedTargets()) { foreach (BlackBerryApiLevelConfiguration* config, m_widget->activatedApiLevels()) {
if (!config->isActive()) if (!config->isActive())
config->activate(); config->activate();
} }
foreach (BlackBerryConfiguration* config, m_widget->deactivatedTargets()) { foreach (BlackBerryApiLevelConfiguration* config, m_widget->deactivatedApiLevels()) {
if (config->isActive()) if (config->isActive())
config->deactivate(); config->deactivate();
} }
BlackBerryConfigurationManager &manager = BlackBerryConfigurationManager::instance(); BlackBerryConfigurationManager &manager = BlackBerryConfigurationManager::instance();
manager.setDefaultConfiguration(m_widget->defaultConfiguration()); manager.setDefaultConfiguration(m_widget->defaultApiLevel());
} }
void BlackBerryNDKSettingsPage::finish() void BlackBerryNDKSettingsPage::finish()

View File

@@ -35,7 +35,8 @@
#include "blackberrysigningutils.h" #include "blackberrysigningutils.h"
#include "blackberryconfigurationmanager.h" #include "blackberryconfigurationmanager.h"
#include "blackberryconfiguration.h" #include "blackberryapilevelconfiguration.h"
#include "blackberryruntimeconfiguration.h"
#include <utils/pathchooser.h> #include <utils/pathchooser.h>
@@ -57,37 +58,44 @@ BlackBerryNDKSettingsWidget::BlackBerryNDKSettingsWidget(QWidget *parent) :
m_ui(new Ui_BlackBerryNDKSettingsWidget), m_ui(new Ui_BlackBerryNDKSettingsWidget),
m_bbConfigManager(BlackBerryConfigurationManager::instance()), m_bbConfigManager(BlackBerryConfigurationManager::instance()),
m_autoDetectedNdks(0), m_autoDetectedNdks(0),
m_manualNdks(0) m_manualApiLevel(0)
{ {
m_ui->setupUi(this); m_ui->setupUi(this);
updateInfoTable(0); updateInfoTable(0);
m_activatedTargets << m_bbConfigManager.activeConfigurations(); m_activatedApiLevel << m_bbConfigManager.activeApiLevels();
m_ui->ndksTreeWidget->header()->setResizeMode(QHeaderView::Stretch); m_ui->ndksTreeWidget->header()->setResizeMode(QHeaderView::Stretch);
m_ui->ndksTreeWidget->header()->setStretchLastSection(false); 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->setTextElideMode(Qt::ElideNone);
m_ui->ndksTreeWidget->setColumnCount(2); m_ui->ndksTreeWidget->setColumnCount(1);
m_autoDetectedNdks = new QTreeWidgetItem(m_ui->ndksTreeWidget);
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->setText(0, tr("Auto-Detected"));
m_autoDetectedNdks->setFirstColumnSpanned(true); m_autoDetectedNdks->setFirstColumnSpanned(true);
m_autoDetectedNdks->setFlags(Qt::ItemIsEnabled); m_autoDetectedNdks->setFlags(Qt::ItemIsEnabled);
m_manualNdks = new QTreeWidgetItem(m_ui->ndksTreeWidget); m_manualApiLevel = new QTreeWidgetItem(m_apiLevels);
m_manualNdks->setText(0, tr("Manual")); m_manualApiLevel->setText(0, tr("Manual"));
m_manualNdks->setFirstColumnSpanned(true); m_manualApiLevel->setFirstColumnSpanned(true);
m_manualNdks->setFlags(Qt::ItemIsEnabled); m_manualApiLevel->setFlags(Qt::ItemIsEnabled);
m_ui->ndksTreeWidget->expandAll(); m_ui->ndksTreeWidget->expandAll();
connect(m_ui->addNdkButton, SIGNAL(clicked()), this, SLOT(addNdkTarget())); connect(m_ui->addConfigButton, SIGNAL(clicked()), this, SLOT(addConfiguration()));
connect(m_ui->removeNdkButton, SIGNAL(clicked()), this, SLOT(removeNdkTarget())); connect(m_ui->removeConfigButton, SIGNAL(clicked()), this, SLOT(removeConfiguration()));
connect(m_ui->activateNdkTargetButton, SIGNAL(clicked()), this, SLOT(activateNdkTarget())); connect(m_ui->activateNdkTargetButton, SIGNAL(clicked()), this, SLOT(activateApiLevel()));
connect(m_ui->deactivateNdkTargetButton, SIGNAL(clicked()), this, SLOT(deactivateNdkTarget())); connect(m_ui->deactivateNdkTargetButton, SIGNAL(clicked()), this, SLOT(deactivateApiLevel()));
connect(m_ui->cleanUpButton, SIGNAL(clicked()), this, SLOT(cleanUp())); connect(m_ui->cleanUpButton, SIGNAL(clicked()), this, SLOT(cleanUp()));
connect(m_ui->ndksTreeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), this, SLOT(updateInfoTable(QTreeWidgetItem*))); 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 // BlackBerryConfigurationManager.settingsChanged signal may be emitted multiple times
// during the same event handling. This would result in multiple updatePage() calls even through // 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 bool BlackBerryNDKSettingsWidget::hasActiveNdk() const
{ {
return !m_bbConfigManager.configurations().isEmpty(); return !m_bbConfigManager.apiLevels().isEmpty();
} }
QList<BlackBerryConfiguration *> BlackBerryNDKSettingsWidget::activatedTargets() QList<BlackBerryApiLevelConfiguration *> BlackBerryNDKSettingsWidget::activatedApiLevels()
{ {
return m_activatedTargets; return m_activatedApiLevel;
} }
QList<BlackBerryConfiguration *> BlackBerryNDKSettingsWidget::deactivatedTargets() QList<BlackBerryApiLevelConfiguration *> BlackBerryNDKSettingsWidget::deactivatedApiLevels()
{ {
return m_deactivatedTargets; return m_deactivatedApiLevel;
} }
BlackBerryConfiguration *BlackBerryNDKSettingsWidget::defaultConfiguration() const BlackBerryApiLevelConfiguration *BlackBerryNDKSettingsWidget::defaultApiLevel() const
{ {
const int currentIndex = m_ui->apiLevelCombo->currentIndex(); const int currentIndex = m_ui->apiLevelCombo->currentIndex();
return static_cast<BlackBerryConfiguration*>( return static_cast<BlackBerryApiLevelConfiguration*>(
m_ui->apiLevelCombo->itemData(currentIndex).value<void*>()); m_ui->apiLevelCombo->itemData(currentIndex).value<void*>());
} }
void BlackBerryNDKSettingsWidget::updateInfoTable(QTreeWidgetItem* currentItem) void BlackBerryNDKSettingsWidget::updateInfoTable(QTreeWidgetItem* currentItem)
{ {
BlackBerryConfiguration *config = m_bbConfigManager.configurationFromEnvFile( updateUi(currentItem);
Utils::FileName::fromString(currentItem ? currentItem->text(1) : QString())); if (!currentItem)
updateUi(currentItem, config); return;
m_ui->informationBox->setVisible(config); if (currentItem->parent() == m_runtimes) {
if (config) { BlackBerryRuntimeConfiguration *runtime = static_cast<BlackBerryRuntimeConfiguration*>(
m_ui->baseNameLabel->setText(config->displayName()); currentItem->data(0, Qt::UserRole).value<void*>());
m_ui->hostLabel->setText(QDir::toNativeSeparators(config->qnxHost())); if (runtime) {
m_ui->targetLabel->setText(QDir::toNativeSeparators(config->sysRoot().toString())); m_ui->baseName->setText(runtime->displayName());
m_ui->versionLabel->setText(config->version().toString()); 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<BlackBerryApiLevelConfiguration*>(
currentItem->data(0, Qt::UserRole).value<void*>());
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_autoDetectedNdks->takeChildren());
qDeleteAll(m_manualNdks->takeChildren()); qDeleteAll(m_manualApiLevel->takeChildren());
qDeleteAll(m_runtimes->takeChildren());
bool enableCleanUp = false; bool enableCleanUp = false;
foreach (BlackBerryConfiguration *config, m_bbConfigManager.configurations()) { foreach (BlackBerryApiLevelConfiguration *config, m_bbConfigManager.apiLevels()) {
QTreeWidgetItem *parent = config->isAutoDetected() ? m_autoDetectedNdks : m_manualNdks; QTreeWidgetItem *parent = config->isAutoDetected() ? m_autoDetectedNdks : m_manualApiLevel;
QTreeWidgetItem *item = new QTreeWidgetItem(parent); QTreeWidgetItem *item = new QTreeWidgetItem(parent);
item->setText(0, config->displayName()); item->setText(0, config->displayName());
item->setText(1, config->ndkEnvFile().toString()); item->setData(0, Qt::UserRole, QVariant::fromValue(static_cast<void*>(config)));
QFont font; QFont font;
font.setBold(config->isActive() || m_activatedTargets.contains(config)); font.setBold(config->isActive() || m_activatedApiLevel.contains(config));
item->setFont(0, font); item->setFont(0, font);
item->setFont(1, font);
item->setIcon(0, config->isValid() ? QIcon() : invalidConfigIcon); item->setIcon(0, config->isValid() ? QIcon() : invalidConfigIcon);
// TODO: Do the same if qmake, qcc, debugger are no longer detected... // TODO: Do the same if qmake, qcc, debugger are no longer detected...
if (!config->isValid()) { if (!config->isValid()) {
@@ -181,31 +206,38 @@ 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<void*>(runtime)));
}
m_ui->ndksTreeWidget->setCurrentItem(m_autoDetectedNdks->child(0)); m_ui->ndksTreeWidget->setCurrentItem(m_autoDetectedNdks->child(0));
m_ui->cleanUpButton->setEnabled(enableCleanUp); m_ui->cleanUpButton->setEnabled(enableCleanUp);
} }
void BlackBerryNDKSettingsWidget::addNdkTarget() void BlackBerryNDKSettingsWidget::addConfiguration()
{ {
launchBlackBerryInstallerWizard(BlackBerryInstallerDataHandler::InstallMode); launchBlackBerryInstallerWizard(BlackBerryInstallerDataHandler::InstallMode, BlackBerryInstallerDataHandler::ApiLevel);
emit targetsUpdated(); emit configurationsUpdated();
} }
void BlackBerryNDKSettingsWidget::removeNdkTarget() void BlackBerryNDKSettingsWidget::removeConfiguration()
{ {
if (!m_ui->ndksTreeWidget->currentItem()) QTreeWidgetItem * current = m_ui->ndksTreeWidget->currentItem();
return; if (!current)
QString ndk = m_ui->ndksTreeWidget->currentItem()->text(0);
QString envFilePath = m_ui->ndksTreeWidget->currentItem()->text(1);
BlackBerryConfiguration *config = m_bbConfigManager.configurationFromEnvFile(Utils::FileName::fromString(envFilePath));
if (!config)
return; 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<BlackBerryApiLevelConfiguration*>(
current->data(0, Qt::UserRole).value<void*>());
if (config->isAutoDetected()) { if (config->isAutoDetected()) {
uninstallNdkTarget(); uninstallConfiguration(BlackBerryInstallerDataHandler::ApiLevel);
emit targetsUpdated(); emit configurationsUpdated();
return; return;
} }
@@ -216,122 +248,160 @@ void BlackBerryNDKSettingsWidget::removeNdkTarget()
QMessageBox::Yes | QMessageBox::No); QMessageBox::Yes | QMessageBox::No);
if (button == QMessageBox::Yes) { if (button == QMessageBox::Yes) {
m_activatedTargets.removeOne(config); m_activatedApiLevel.removeOne(config);
m_deactivatedTargets.removeOne(config); m_deactivatedApiLevel.removeOne(config);
m_bbConfigManager.removeConfiguration(config); m_bbConfigManager.removeApiLevel(config);
m_manualNdks->removeChild(m_ui->ndksTreeWidget->currentItem()); m_manualApiLevel->removeChild(m_ui->ndksTreeWidget->currentItem());
emit targetsUpdated(); emit configurationsUpdated();
}
} }
} }
void BlackBerryNDKSettingsWidget::activateNdkTarget() void BlackBerryNDKSettingsWidget::activateApiLevel()
{ {
if (!m_ui->ndksTreeWidget->currentItem()) if (!m_ui->ndksTreeWidget->currentItem())
return; return;
QString envFilePath = m_ui->ndksTreeWidget->currentItem()->text(1); BlackBerryApiLevelConfiguration *config = static_cast<BlackBerryApiLevelConfiguration*>(
m_ui->ndksTreeWidget->currentItem()->data(0, Qt::UserRole).value<void*>());
BlackBerryConfiguration *config = m_bbConfigManager.configurationFromEnvFile(Utils::FileName::fromString(envFilePath)); if (!m_activatedApiLevel.contains(config)) {
if (config && !m_activatedTargets.contains(config)) { m_activatedApiLevel << config;
m_activatedTargets << config; if (m_deactivatedApiLevel.contains(config))
if (m_deactivatedTargets.contains(config)) m_deactivatedApiLevel.removeAt(m_deactivatedApiLevel.indexOf(config));
m_deactivatedTargets.removeAt(m_deactivatedTargets.indexOf(config));
updateUi(m_ui->ndksTreeWidget->currentItem(), config); updateUi(m_ui->ndksTreeWidget->currentItem());
emit targetsUpdated(); emit configurationsUpdated();
} }
} }
void BlackBerryNDKSettingsWidget::deactivateNdkTarget() void BlackBerryNDKSettingsWidget::deactivateApiLevel()
{ {
if (!m_ui->ndksTreeWidget->currentItem()) if (!m_ui->ndksTreeWidget->currentItem())
return; return;
QString envFilePath = m_ui->ndksTreeWidget->currentItem()->text(1); BlackBerryApiLevelConfiguration *config = static_cast<BlackBerryApiLevelConfiguration*>(
m_ui->ndksTreeWidget->currentItem()->data(0, Qt::UserRole).value<void*>());
BlackBerryConfiguration *config = m_bbConfigManager.configurationFromEnvFile(Utils::FileName::fromString(envFilePath)); if (m_activatedApiLevel.contains(config)) {
if (config && m_activatedTargets.contains(config)) { m_deactivatedApiLevel << config;
m_deactivatedTargets << config; m_activatedApiLevel.removeAt(m_activatedApiLevel.indexOf(config));
m_activatedTargets.removeAt(m_activatedTargets.indexOf(config)); updateUi(m_ui->ndksTreeWidget->currentItem());
updateUi(m_ui->ndksTreeWidget->currentItem(), config); emit configurationsUpdated();
emit targetsUpdated();
} }
} }
void BlackBerryNDKSettingsWidget::updateUi(QTreeWidgetItem *item, BlackBerryConfiguration *config) void BlackBerryNDKSettingsWidget::updateUi(QTreeWidgetItem *item)
{ {
if (!item || !config) { if (!item || (item->parent() != m_runtimes &&
m_ui->removeNdkButton->setEnabled(false); item->parent() != m_autoDetectedNdks &&
item->parent() != m_manualApiLevel )) {
m_ui->removeConfigButton->setEnabled(false);
m_ui->activateNdkTargetButton->setEnabled(false); m_ui->activateNdkTargetButton->setEnabled(false);
m_ui->deactivateNdkTargetButton->setEnabled(false); m_ui->deactivateNdkTargetButton->setEnabled(false);
m_ui->informationBox->setVisible(false);
return; return;
} }
const bool contains = m_activatedTargets.contains(config); 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);
if (!isRuntimeItem) {
BlackBerryApiLevelConfiguration *config = static_cast<BlackBerryApiLevelConfiguration*>(
item->data(0, Qt::UserRole).value<void*>());
const bool contains = m_activatedApiLevel.contains(config);
QFont font; QFont font;
font.setBold(contains); font.setBold(contains);
item->setFont(0, font); item->setFont(0, font);
item->setFont(1, font);
m_ui->activateNdkTargetButton->setEnabled(!contains); m_ui->activateNdkTargetButton->setEnabled(!contains);
m_ui->deactivateNdkTargetButton->setEnabled(contains && m_activatedTargets.size() > 1); 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) // Disable remove button for auto detected pre-10.2 NDKs (uninstall wizard doesn't handle them)
m_ui->removeNdkButton->setEnabled(!(config->isAutoDetected() m_ui->removeConfigButton->setEnabled(!(config->isAutoDetected()
&& QnxUtils::sdkInstallerPath(config->ndkPath()).isEmpty())); && QnxUtils::sdkInstallerPath(config->ndkPath()).isEmpty()));
}
} }
void BlackBerryNDKSettingsWidget::uninstallNdkTarget() void BlackBerryNDKSettingsWidget::uninstallConfiguration(BlackBerryInstallerDataHandler::Target target)
{ {
const QMessageBox::StandardButton answer = QMessageBox::question(this, tr("Confirmation"), const QMessageBox::StandardButton answer = QMessageBox::question(this, tr("Confirmation"),
tr("Are you sure you want to uninstall %1?"). tr("Are you sure you want to uninstall %1?").
arg(m_ui->baseNameLabel->text()), arg(m_ui->baseName->text()),
QMessageBox::Yes | QMessageBox::No); QMessageBox::Yes | QMessageBox::No);
if (answer == QMessageBox::Yes) if (answer == QMessageBox::Yes) {
launchBlackBerryInstallerWizard(BlackBerryInstallerDataHandler::UninstallMode, m_ui->versionLabel->text()); 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() void BlackBerryNDKSettingsWidget::cleanUp()
{ {
foreach (BlackBerryConfiguration *config, m_bbConfigManager.configurations()) { foreach (BlackBerryApiLevelConfiguration *config, m_bbConfigManager.apiLevels()) {
if (!config->isValid()) { if (!config->isValid()) {
m_activatedTargets.removeOne(config); m_activatedApiLevel.removeOne(config);
m_deactivatedTargets.removeOne(config); m_deactivatedApiLevel.removeOne(config);
m_bbConfigManager.removeConfiguration(config); m_bbConfigManager.removeApiLevel(config);
} }
} }
updateNdkList(); updateConfigurationList();
} }
void BlackBerryNDKSettingsWidget::handleInstallationFinished() void BlackBerryNDKSettingsWidget::handleInstallationFinished()
{ {
m_bbConfigManager.loadAutoDetectedConfigurations(); m_bbConfigManager.loadAutoDetectedApiLevels();
updateNdkList(); m_bbConfigManager.loadAutoDetectedRuntimes();
updateConfigurationList();
} }
void BlackBerryNDKSettingsWidget::handleUninstallationFinished() void BlackBerryNDKSettingsWidget::handleUninstallationFinished()
{ {
if (!m_ui->ndksTreeWidget->currentItem()) QTreeWidgetItem *current = m_ui->ndksTreeWidget->currentItem();
if (!current)
return; return;
QString targetName = m_ui->ndksTreeWidget->currentItem()->text(0); if (current->parent() == m_runtimes) {
QString envFilePath = m_ui->ndksTreeWidget->currentItem()->text(1); BlackBerryRuntimeConfiguration *runtime = static_cast<BlackBerryRuntimeConfiguration*>(
current->data(0, Qt::UserRole).value<void*>());
m_bbConfigManager.removeRuntime(runtime);
updateConfigurationList();
return;
}
const QString targetName = current->text(0);
// Check if the target is corrrecly uninstalled // Check if the target is corrrecly uninstalled
foreach (const NdkInstallInformation &ndk, QnxUtils::installedNdks()) { foreach (const NdkInstallInformation &ndk, QnxUtils::installedNdks()) {
if (ndk.name == targetName) if (ndk.name == targetName)
return; return;
} }
BlackBerryConfiguration *config = m_bbConfigManager.configurationFromEnvFile(Utils::FileName::fromString(envFilePath)); BlackBerryApiLevelConfiguration *config = static_cast<BlackBerryApiLevelConfiguration*>(
if (m_activatedTargets.contains(config)) current->data(0, Qt::UserRole).value<void*>());
m_activatedTargets.removeAt(m_activatedTargets.indexOf(config)); if (m_activatedApiLevel.contains(config))
else if (m_deactivatedTargets.contains(config)) m_activatedApiLevel.removeAt(m_activatedApiLevel.indexOf(config));
m_deactivatedTargets.removeAt(m_deactivatedTargets.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() void BlackBerryNDKSettingsWidget::populateDefaultConfigurationCombo()
@@ -339,7 +409,7 @@ void BlackBerryNDKSettingsWidget::populateDefaultConfigurationCombo()
// prevent QComboBox::currentIndexChanged() from being emitted // prevent QComboBox::currentIndexChanged() from being emitted
m_ui->apiLevelCombo->clear(); m_ui->apiLevelCombo->clear();
QList<BlackBerryConfiguration*> configurations = m_bbConfigManager.configurations(); QList<BlackBerryApiLevelConfiguration*> configurations = m_bbConfigManager.apiLevels();
m_ui->apiLevelCombo->addItem(tr("Newest version"), m_ui->apiLevelCombo->addItem(tr("Newest version"),
QVariant::fromValue(static_cast<void*>(0))); QVariant::fromValue(static_cast<void*>(0)));
@@ -349,9 +419,9 @@ void BlackBerryNDKSettingsWidget::populateDefaultConfigurationCombo()
int configIndex = 0; 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(), m_ui->apiLevelCombo->addItem(config->displayName(),
QVariant::fromValue(static_cast<void*>(config))); QVariant::fromValue(static_cast<void*>(config)));
@@ -359,15 +429,17 @@ void BlackBerryNDKSettingsWidget::populateDefaultConfigurationCombo()
configIndex = m_ui->apiLevelCombo->count() - 1; 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); m_ui->apiLevelCombo->setCurrentIndex(currentIndex);
} }
void BlackBerryNDKSettingsWidget::launchBlackBerryInstallerWizard(BlackBerryInstallerDataHandler::Mode mode, void BlackBerryNDKSettingsWidget::launchBlackBerryInstallerWizard(
BlackBerryInstallerDataHandler::Mode mode,
BlackBerryInstallerDataHandler::Target target,
const QString& targetVersion) const QString& targetVersion)
{ {
BlackBerryInstallWizard wizard(mode, BlackBerryInstallerDataHandler::ApiLevel, targetVersion, this); BlackBerryInstallWizard wizard(mode, target, targetVersion, this);
if (mode == BlackBerryInstallerDataHandler::InstallMode) if (mode == BlackBerryInstallerDataHandler::InstallMode)
connect(&wizard, SIGNAL(processFinished()), this, SLOT(handleInstallationFinished())); connect(&wizard, SIGNAL(processFinished()), this, SLOT(handleInstallationFinished()));
else else

View File

@@ -45,7 +45,7 @@ QT_END_NAMESPACE
namespace Qnx { namespace Qnx {
namespace Internal { namespace Internal {
class BlackBerryConfiguration; class BlackBerryApiLevelConfiguration;
class BlackBerryConfigurationManager; class BlackBerryConfigurationManager;
class Ui_BlackBerryNDKSettingsWidget; class Ui_BlackBerryNDKSettingsWidget;
@@ -57,41 +57,45 @@ public:
bool hasActiveNdk() const; bool hasActiveNdk() const;
QList<BlackBerryConfiguration *> activatedTargets(); QList<BlackBerryApiLevelConfiguration *> activatedApiLevels();
QList<BlackBerryConfiguration *> deactivatedTargets(); QList<BlackBerryApiLevelConfiguration *> deactivatedApiLevels();
BlackBerryConfiguration *defaultConfiguration() const; BlackBerryApiLevelConfiguration *defaultApiLevel() const;
signals: signals:
void targetsUpdated(); void configurationsUpdated();
public slots: public slots:
void updateInfoTable(QTreeWidgetItem* currentItem); void updateInfoTable(QTreeWidgetItem* currentItem);
void updateNdkList(); void updateConfigurationList();
void addNdkTarget(); void addConfiguration();
void removeNdkTarget(); void removeConfiguration();
void activateNdkTarget(); void activateApiLevel();
void deactivateNdkTarget(); void deactivateApiLevel();
void uninstallNdkTarget(); void uninstallConfiguration(BlackBerryInstallerDataHandler::Target target);
void cleanUp(); void cleanUp();
void handleInstallationFinished(); void handleInstallationFinished();
void handleUninstallationFinished(); void handleUninstallationFinished();
void updateUi(QTreeWidgetItem* item, BlackBerryConfiguration* config); void updateUi(QTreeWidgetItem* item);
void populateDefaultConfigurationCombo(); void populateDefaultConfigurationCombo();
void updatePage(); void updatePage();
private: private:
void launchBlackBerryInstallerWizard(BlackBerryInstallerDataHandler::Mode mode, void launchBlackBerryInstallerWizard(BlackBerryInstallerDataHandler::Mode mode,
BlackBerryInstallerDataHandler::Target target,
const QString& tagetVersion = QString()); const QString& tagetVersion = QString());
Ui_BlackBerryNDKSettingsWidget *m_ui; Ui_BlackBerryNDKSettingsWidget *m_ui;
BlackBerryConfigurationManager &m_bbConfigManager; BlackBerryConfigurationManager &m_bbConfigManager;
QTreeWidgetItem *m_autoDetectedNdks; QTreeWidgetItem *m_apiLevels;
QTreeWidgetItem *m_manualNdks; QTreeWidgetItem *m_runtimes;
QList<BlackBerryConfiguration *> m_activatedTargets; QTreeWidgetItem *m_autoDetectedNdks;
QList<BlackBerryConfiguration *> m_deactivatedTargets; QTreeWidgetItem *m_manualApiLevel;
QList<BlackBerryApiLevelConfiguration *> m_activatedApiLevel;
QList<BlackBerryApiLevelConfiguration *> m_deactivatedApiLevel;
QTimer m_timer; QTimer m_timer;
}; };

View File

@@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>773</width> <width>773</width>
<height>495</height> <height>412</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@@ -55,14 +55,14 @@
<item row="1" column="1" rowspan="2"> <item row="1" column="1" rowspan="2">
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout_2">
<item> <item>
<widget class="QPushButton" name="addNdkButton"> <widget class="QPushButton" name="addConfigButton">
<property name="text"> <property name="text">
<string>Add</string> <string>Add</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QPushButton" name="removeNdkButton"> <widget class="QPushButton" name="removeConfigButton">
<property name="text"> <property name="text">
<string>Remove</string> <string>Remove</string>
</property> </property>
@@ -139,60 +139,77 @@
<item row="2" column="0"> <item row="2" column="0">
<widget class="QGroupBox" name="informationBox"> <widget class="QGroupBox" name="informationBox">
<property name="title"> <property name="title">
<string>API Level Information</string> <string>GroupBox</string>
</property> </property>
<layout class="QFormLayout" name="formLayout"> <layout class="QFormLayout" name="formLayout">
<item row="2" column="1"> <property name="fieldGrowthPolicy">
<widget class="QLabel" name="versionLabel"> <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
<property name="text">
<string/>
</property> </property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Name:</string>
</property>
</widget>
</item>
<item row="2" column="0"> <item row="2" column="0">
<widget class="QLabel" name="label_3"> <widget class="QLabel" name="pathLabel">
<property name="text"> <property name="text">
<string>Version:</string> <string>Path:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1"> <item row="2" column="1">
<widget class="QLabel" name="hostLabel"> <widget class="QLabel" name="path">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="baseNameLabel">
<property name="text"> <property name="text">
<string/> <string/>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0"> <item row="3" column="0">
<widget class="QLabel" name="label_4"> <widget class="QLabel" name="baseNameLabel">
<property name="text">
<string>Name:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="baseName">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="versionLabel">
<property name="text">
<string>Version:</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="hostLabel">
<property name="text"> <property name="text">
<string>Host:</string> <string>Host:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="0"> <item row="5" column="1">
<widget class="QLabel" name="label_5"> <widget class="QLabel" name="host">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="targetLabel">
<property name="text"> <property name="text">
<string>Target:</string> <string>Target:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="1">
<widget class="QLabel" name="target">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="4" column="1"> <item row="4" column="1">
<widget class="QLabel" name="targetLabel"> <widget class="QLabel" name="version">
<property name="text"> <property name="text">
<string/> <string/>
</property> </property>

View File

@@ -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 <QVariantMap>
#include <QFileInfo>
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;
}
}
}

View File

@@ -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 <blackberryversionnumber.h>
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

View File

@@ -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 <QVBoxLayout>
#include <QFileInfo>
#include <QLabel>
#include <QVBoxLayout>
#include <QMessageBox>
#include <QAbstractButton>
#include <QDesktopServices>
#include <QUrl>
#include <QDebug>
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);
}

View File

@@ -31,7 +31,6 @@
#include "blackberrysigningutils.h" #include "blackberrysigningutils.h"
#include "blackberrycertificate.h" #include "blackberrycertificate.h"
#include "blackberryconfiguration.h"
#include "blackberryconfigurationmanager.h" #include "blackberryconfigurationmanager.h"
#include "blackberrycreatecertificatedialog.h" #include "blackberrycreatecertificatedialog.h"
#include "blackberrydebugtokenreader.h" #include "blackberrydebugtokenreader.h"

View File

@@ -51,7 +51,6 @@ SOURCES += qnxplugin.cpp \
blackberryabstractdeploystep.cpp \ blackberryabstractdeploystep.cpp \
blackberryndksettingswidget.cpp \ blackberryndksettingswidget.cpp \
blackberryndksettingspage.cpp \ blackberryndksettingspage.cpp \
blackberryconfiguration.cpp \
bardescriptormagicmatcher.cpp \ bardescriptormagicmatcher.cpp \
bardescriptoreditorfactory.cpp \ bardescriptoreditorfactory.cpp \
bardescriptoreditor.cpp \ bardescriptoreditor.cpp \
@@ -102,7 +101,9 @@ SOURCES += qnxplugin.cpp \
qnxattachdebugdialog.cpp \ qnxattachdebugdialog.cpp \
blackberrydeployqtlibrariesdialog.cpp \ blackberrydeployqtlibrariesdialog.cpp \
blackberrysetuppage.cpp \ blackberrysetuppage.cpp \
blackberrysetupwidget.cpp blackberrysetupwidget.cpp \
blackberryruntimeconfiguration.cpp \
blackberryapilevelconfiguration.cpp
HEADERS += qnxplugin.h\ HEADERS += qnxplugin.h\
qnxconstants.h \ qnxconstants.h \
@@ -153,7 +154,6 @@ HEADERS += qnxplugin.h\
blackberryabstractdeploystep.h \ blackberryabstractdeploystep.h \
blackberryndksettingswidget.h \ blackberryndksettingswidget.h \
blackberryndksettingspage.h \ blackberryndksettingspage.h \
blackberryconfiguration.h \
bardescriptormagicmatcher.h \ bardescriptormagicmatcher.h \
bardescriptoreditorfactory.h \ bardescriptoreditorfactory.h \
bardescriptoreditor.h \ bardescriptoreditor.h \
@@ -204,7 +204,9 @@ HEADERS += qnxplugin.h\
qnxattachdebugdialog.h \ qnxattachdebugdialog.h \
blackberrydeployqtlibrariesdialog.h \ blackberrydeployqtlibrariesdialog.h \
blackberrysetuppage.h \ blackberrysetuppage.h \
blackberrysetupwidget.h blackberrysetupwidget.h \
blackberryruntimeconfiguration.h \
blackberryapilevelconfiguration.h
FORMS += \ FORMS += \
blackberrydeviceconfigurationwizardsetuppage.ui \ blackberrydeviceconfigurationwizardsetuppage.ui \

View File

@@ -159,8 +159,10 @@ QtcPlugin {
"blackberryndksettingswidget.ui", "blackberryndksettingswidget.ui",
"blackberryndksettingspage.cpp", "blackberryndksettingspage.cpp",
"blackberryndksettingspage.h", "blackberryndksettingspage.h",
"blackberryconfiguration.cpp", "blackberryapilevelconfiguration.cpp",
"blackberryconfiguration.h", "blackberryapilevelconfiguration.h",
"blackberryruntimeconfiguration.cpp",
"blackberryruntimeconfiguration",
"blackberrycertificate.cpp", "blackberrycertificate.cpp",
"blackberrycertificate.h", "blackberrycertificate.h",
"blackberrykeyspage.cpp", "blackberrykeyspage.cpp",

View File

@@ -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"; "/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_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 Constants
} // namespace Qnx } // namespace Qnx

View File

@@ -54,7 +54,7 @@
#include "blackberrycheckdevicestatusstepfactory.h" #include "blackberrycheckdevicestatusstepfactory.h"
#include "blackberrydeviceconnectionmanager.h" #include "blackberrydeviceconnectionmanager.h"
#include "blackberryconfigurationmanager.h" #include "blackberryconfigurationmanager.h"
#include "blackberryconfiguration.h" #include "blackberryapilevelconfiguration.h"
#include "cascadesimport/cascadesimportwizard.h" #include "cascadesimport/cascadesimportwizard.h"
#include "qnxtoolchain.h" #include "qnxtoolchain.h"
#include "qnxattachdebugsupport.h" #include "qnxattachdebugsupport.h"
@@ -479,44 +479,46 @@ void QNXPlugin::testConfigurationManager()
{ {
BlackBerryConfigurationManager &manager = BlackBerryConfigurationManager::instance(); BlackBerryConfigurationManager &manager = BlackBerryConfigurationManager::instance();
QCOMPARE(manager.configurations().count(), 0); QCOMPARE(manager.apiLevels().count(), 0);
QCOMPARE(manager.activeConfigurations().count(), 0); QCOMPARE(manager.activeApiLevels().count(), 0);
QCOMPARE(manager.defaultConfiguration(), static_cast<BlackBerryConfiguration*>(0)); QCOMPARE(manager.defaultApiLevel(), static_cast<BlackBerryApiLevelConfiguration*>(0));
QVERIFY(manager.newestConfigurationEnabled()); QVERIFY(manager.newestApiLevelEnabled());
QFETCH(QVariantMap, newerConfiguration); QFETCH(QVariantMap, newerConfiguration);
QFETCH(QVariantMap, olderConfiguration); QFETCH(QVariantMap, olderConfiguration);
BlackBerryConfiguration::setFakeConfig(true); BlackBerryApiLevelConfiguration::setFakeConfig(true);
BlackBerryConfiguration *newerConfig = new BlackBerryConfiguration(newerConfiguration); BlackBerryApiLevelConfiguration *newerConfig =
BlackBerryConfiguration *oldConfig = new BlackBerryConfiguration(olderConfiguration); new BlackBerryApiLevelConfiguration(newerConfiguration);
BlackBerryApiLevelConfiguration *oldConfig =
new BlackBerryApiLevelConfiguration(olderConfiguration);
QVERIFY(manager.addConfiguration(oldConfig)); QVERIFY(manager.addApiLevel(oldConfig));
QVERIFY(manager.newestConfigurationEnabled()); QVERIFY(manager.newestApiLevelEnabled());
QCOMPARE(manager.defaultConfiguration(), oldConfig); QCOMPARE(manager.defaultApiLevel(), oldConfig);
manager.setDefaultConfiguration(oldConfig); manager.setDefaultConfiguration(oldConfig);
QCOMPARE(manager.defaultConfiguration(), oldConfig); QCOMPARE(manager.defaultApiLevel(), oldConfig);
QCOMPARE(manager.configurations().first(), oldConfig); QCOMPARE(manager.apiLevels().first(), oldConfig);
QVERIFY(!manager.newestConfigurationEnabled()); QVERIFY(!manager.newestApiLevelEnabled());
QVERIFY(manager.addConfiguration(newerConfig)); QVERIFY(manager.addApiLevel(newerConfig));
QCOMPARE(manager.configurations().first(), newerConfig); QCOMPARE(manager.apiLevels().first(), newerConfig);
QCOMPARE(manager.defaultConfiguration(), oldConfig); QCOMPARE(manager.defaultApiLevel(), oldConfig);
manager.setDefaultConfiguration(0); manager.setDefaultConfiguration(0);
QVERIFY(manager.newestConfigurationEnabled()); QVERIFY(manager.newestApiLevelEnabled());
QCOMPARE(manager.defaultConfiguration(), newerConfig); QCOMPARE(manager.defaultApiLevel(), newerConfig);
manager.setDefaultConfiguration(oldConfig); manager.setDefaultConfiguration(oldConfig);
manager.removeConfiguration(oldConfig); manager.removeApiLevel(oldConfig);
QCOMPARE(manager.defaultConfiguration(), newerConfig); QCOMPARE(manager.defaultApiLevel(), newerConfig);
QVERIFY(manager.newestConfigurationEnabled()); QVERIFY(manager.newestApiLevelEnabled());
manager.removeConfiguration(newerConfig); manager.removeApiLevel(newerConfig);
QCOMPARE(manager.defaultConfiguration(), static_cast<BlackBerryConfiguration*>(0)); QCOMPARE(manager.defaultApiLevel(), static_cast<BlackBerryApiLevelConfiguration*>(0));
QVERIFY(manager.newestConfigurationEnabled()); QVERIFY(manager.newestApiLevelEnabled());
} }
#endif #endif

View File

@@ -34,7 +34,7 @@
#include "qnxutils.h" #include "qnxutils.h"
#include "blackberryconfigurationmanager.h" #include "blackberryconfigurationmanager.h"
#include "blackberryconfiguration.h" #include "blackberryapilevelconfiguration.h"
#include <utils/pathchooser.h> #include <utils/pathchooser.h>
@@ -87,7 +87,8 @@ ToolChainConfigWidget *QnxToolChain::configurationWidget()
void QnxToolChain::addToEnvironment(Utils::Environment &env) const void QnxToolChain::addToEnvironment(Utils::Environment &env) const
{ {
foreach (BlackBerryConfiguration* config, BlackBerryConfigurationManager::instance().configurations()) { foreach (BlackBerryApiLevelConfiguration* config,
BlackBerryConfigurationManager::instance().apiLevels()) {
if (config->gccCompiler() == compilerCommand()) { if (config->gccCompiler() == compilerCommand()) {
setQnxEnvironment(env, config->qnxEnv()); setQnxEnvironment(env, config->qnxEnv());
break; break;