forked from qt-creator/qt-creator
Qnx: Save BlackBerry user configurations
* Add a bbndkconfigurations.xml file to store BlackBerry user configurations * Save both manual and auto detected user configurations * Mark invalid configurations in the BlackBerry settings widget * Provide a cleanup user action to clear invalid configurations Task-number: QTCREATORBUG-11004 Change-Id: Ibb29aa5010317f62233865d42d6ca4ae3afa0de3 Reviewed-by: David Kaspar <dkaspar@blackberry.com> Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
committed by
Mehdi Fekari
parent
1131c11a11
commit
41a2059f85
@@ -65,8 +65,16 @@ using namespace Debugger;
|
|||||||
namespace Qnx {
|
namespace Qnx {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
|
const QLatin1String NDKEnvFileKey("NDKEnvFile");
|
||||||
|
const QLatin1String NDKPathKey("NDKPath");
|
||||||
|
const QLatin1String NDKDisplayNameKey("NDKDisplayName");
|
||||||
|
const QLatin1String NDKTargetKey("NDKTarget");
|
||||||
|
const QLatin1String NDKHostKey("NDKHost");
|
||||||
|
const QLatin1String NDKVersionKey("NDKVersion");
|
||||||
|
const QLatin1String NDKAutoDetectionSourceKey("NDKAutoDetectionSource");
|
||||||
|
const QLatin1String NDKAutoDetectedKey("NDKAutoDetectedKey");
|
||||||
|
|
||||||
BlackBerryConfiguration::BlackBerryConfiguration(const NdkInstallInformation &ndkInstallInfo)
|
BlackBerryConfiguration::BlackBerryConfiguration(const NdkInstallInformation &ndkInstallInfo)
|
||||||
: m_isAutoDetected(true)
|
|
||||||
{
|
{
|
||||||
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);
|
||||||
@@ -79,11 +87,12 @@ BlackBerryConfiguration::BlackBerryConfiguration(const NdkInstallInformation &nd
|
|||||||
m_qnxHost = ndkInstallInfo.host;
|
m_qnxHost = ndkInstallInfo.host;
|
||||||
m_sysRoot = FileName::fromString(ndkInstallInfo.target);
|
m_sysRoot = FileName::fromString(ndkInstallInfo.target);
|
||||||
m_version = BlackBerryVersionNumber(ndkInstallInfo.version);
|
m_version = BlackBerryVersionNumber(ndkInstallInfo.version);
|
||||||
|
m_autoDetectionSource = Utils::FileName::fromString(ndkInstallInfo.installationXmlFilePath);
|
||||||
ctor();
|
ctor();
|
||||||
}
|
}
|
||||||
|
|
||||||
BlackBerryConfiguration::BlackBerryConfiguration(const FileName &ndkEnvFile)
|
BlackBerryConfiguration::BlackBerryConfiguration(const FileName &ndkEnvFile)
|
||||||
: m_isAutoDetected(false)
|
: m_autoDetectionSource(Utils::FileName())
|
||||||
{
|
{
|
||||||
QTC_ASSERT(!QFileInfo(ndkEnvFile.toString()).isDir(), return);
|
QTC_ASSERT(!QFileInfo(ndkEnvFile.toString()).isDir(), return);
|
||||||
m_ndkEnvFile = ndkEnvFile;
|
m_ndkEnvFile = ndkEnvFile;
|
||||||
@@ -115,6 +124,25 @@ BlackBerryConfiguration::BlackBerryConfiguration(const FileName &ndkEnvFile)
|
|||||||
ctor();
|
ctor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BlackBerryConfiguration::BlackBerryConfiguration(const QVariantMap &data)
|
||||||
|
{
|
||||||
|
QString envFilePath = data.value(NDKEnvFileKey).toString();
|
||||||
|
QTC_ASSERT(!envFilePath.isEmpty(), return);
|
||||||
|
m_ndkEnvFile = Utils::FileName::fromString(envFilePath);
|
||||||
|
m_displayName = data.value(NDKDisplayNameKey).toString();
|
||||||
|
m_qnxEnv = QnxUtils::qnxEnvironmentFromNdkFile(m_ndkEnvFile.toString());
|
||||||
|
QString sep = QString::fromLatin1("/qnx6");
|
||||||
|
// The QNX_TARGET value is using Unix-like separator on all platforms.
|
||||||
|
m_targetName = data.value(NDKTargetKey).toString().split(sep).first().split(QLatin1Char('/')).last();
|
||||||
|
m_qnxHost = data.value(NDKHostKey).toString();
|
||||||
|
m_sysRoot = FileName::fromString(data.value(NDKTargetKey).toString());
|
||||||
|
m_version = BlackBerryVersionNumber(data.value(NDKVersionKey).toString());
|
||||||
|
if (data.value(QLatin1String(NDKAutoDetectedKey)).toBool())
|
||||||
|
m_autoDetectionSource = Utils::FileName::fromString(data.value(NDKAutoDetectionSourceKey).toString());
|
||||||
|
|
||||||
|
ctor();
|
||||||
|
}
|
||||||
|
|
||||||
void BlackBerryConfiguration::ctor()
|
void BlackBerryConfiguration::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")));
|
||||||
@@ -166,7 +194,12 @@ BlackBerryVersionNumber BlackBerryConfiguration::version() const
|
|||||||
|
|
||||||
bool BlackBerryConfiguration::isAutoDetected() const
|
bool BlackBerryConfiguration::isAutoDetected() const
|
||||||
{
|
{
|
||||||
return m_isAutoDetected;
|
return !m_autoDetectionSource.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
Utils::FileName BlackBerryConfiguration::autoDetectionSource() const
|
||||||
|
{
|
||||||
|
return m_autoDetectionSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BlackBerryConfiguration::isActive() const
|
bool BlackBerryConfiguration::isActive() const
|
||||||
@@ -182,8 +215,11 @@ bool BlackBerryConfiguration::isActive() const
|
|||||||
|
|
||||||
bool BlackBerryConfiguration::isValid() const
|
bool BlackBerryConfiguration::isValid() const
|
||||||
{
|
{
|
||||||
return !((m_qmake4BinaryFile.isEmpty() && m_qmake5BinaryFile.isEmpty()) || m_gccCompiler.isEmpty()
|
return ((!m_qmake4BinaryFile.isEmpty() || !m_qmake5BinaryFile.isEmpty()) && !m_gccCompiler.isEmpty()
|
||||||
|| m_deviceDebugger.isEmpty() || m_simulatorDebugger.isEmpty());
|
&& !m_deviceDebugger.isEmpty() && !m_simulatorDebugger.isEmpty()
|
||||||
|
&& m_ndkEnvFile.toFileInfo().exists() && (m_autoDetectionSource.isEmpty() ||
|
||||||
|
m_autoDetectionSource.toFileInfo().exists())
|
||||||
|
&& m_sysRoot.toFileInfo().exists());
|
||||||
}
|
}
|
||||||
|
|
||||||
FileName BlackBerryConfiguration::ndkEnvFile() const
|
FileName BlackBerryConfiguration::ndkEnvFile() const
|
||||||
@@ -226,6 +262,20 @@ QList<Utils::EnvironmentItem> BlackBerryConfiguration::qnxEnv() const
|
|||||||
return m_qnxEnv;
|
return m_qnxEnv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVariantMap BlackBerryConfiguration::toMap() const
|
||||||
|
{
|
||||||
|
QVariantMap data;
|
||||||
|
data.insert(QLatin1String(NDKEnvFileKey), m_ndkEnvFile.toString());
|
||||||
|
data.insert(QLatin1String(NDKDisplayNameKey), m_displayName);
|
||||||
|
data.insert(QLatin1String(NDKPathKey), ndkPath());
|
||||||
|
data.insert(QLatin1String(NDKTargetKey), m_sysRoot.toString());
|
||||||
|
data.insert(QLatin1String(NDKHostKey), m_qnxHost);
|
||||||
|
data.insert(QLatin1String(NDKVersionKey), m_version.toString());
|
||||||
|
data.insert(QLatin1String(NDKAutoDetectionSourceKey), m_autoDetectionSource.toString());
|
||||||
|
data.insert(QLatin1String(NDKAutoDetectedKey), isAutoDetected());
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
QnxAbstractQtVersion *BlackBerryConfiguration::createQtVersion(
|
QnxAbstractQtVersion *BlackBerryConfiguration::createQtVersion(
|
||||||
const FileName &qmakePath, Qnx::QnxArchitecture arch, const QString &versionName)
|
const FileName &qmakePath, Qnx::QnxArchitecture arch, const QString &versionName)
|
||||||
{
|
{
|
||||||
@@ -302,7 +352,7 @@ Kit *BlackBerryConfiguration::createKit(
|
|||||||
bool BlackBerryConfiguration::activate()
|
bool BlackBerryConfiguration::activate()
|
||||||
{
|
{
|
||||||
if (!isValid()) {
|
if (!isValid()) {
|
||||||
if (m_isAutoDetected)
|
if (!m_autoDetectionSource.isEmpty())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
QString errorMessage = tr("The following errors occurred while activating target: %1").arg(m_targetName);
|
QString errorMessage = tr("The following errors occurred while activating target: %1").arg(m_targetName);
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ class BlackBerryConfiguration
|
|||||||
public:
|
public:
|
||||||
BlackBerryConfiguration(const NdkInstallInformation &ndkInstallInfo);
|
BlackBerryConfiguration(const NdkInstallInformation &ndkInstallInfo);
|
||||||
BlackBerryConfiguration(const Utils::FileName &ndkEnvFile);
|
BlackBerryConfiguration(const Utils::FileName &ndkEnvFile);
|
||||||
|
BlackBerryConfiguration(const QVariantMap &data);
|
||||||
bool activate();
|
bool activate();
|
||||||
void deactivate();
|
void deactivate();
|
||||||
QString ndkPath() const;
|
QString ndkPath() const;
|
||||||
@@ -72,6 +73,7 @@ public:
|
|||||||
QString qnxHost() const;
|
QString qnxHost() const;
|
||||||
BlackBerryVersionNumber version() const;
|
BlackBerryVersionNumber version() const;
|
||||||
bool isAutoDetected() const;
|
bool isAutoDetected() const;
|
||||||
|
Utils::FileName autoDetectionSource() const;
|
||||||
bool isActive() const;
|
bool isActive() const;
|
||||||
bool isValid() const;
|
bool isValid() const;
|
||||||
Utils::FileName ndkEnvFile() const;
|
Utils::FileName ndkEnvFile() const;
|
||||||
@@ -82,13 +84,14 @@ public:
|
|||||||
Utils::FileName simulatorDebuger() const;
|
Utils::FileName simulatorDebuger() const;
|
||||||
Utils::FileName sysRoot() const;
|
Utils::FileName sysRoot() const;
|
||||||
QList<Utils::EnvironmentItem> qnxEnv() const;
|
QList<Utils::EnvironmentItem> qnxEnv() const;
|
||||||
|
QVariantMap toMap() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString m_displayName;
|
QString m_displayName;
|
||||||
QString m_targetName;
|
QString m_targetName;
|
||||||
QString m_qnxHost;
|
QString m_qnxHost;
|
||||||
bool m_isAutoDetected;
|
|
||||||
BlackBerryVersionNumber m_version;
|
BlackBerryVersionNumber m_version;
|
||||||
|
Utils::FileName m_autoDetectionSource;
|
||||||
Utils::FileName m_ndkEnvFile;
|
Utils::FileName m_ndkEnvFile;
|
||||||
Utils::FileName m_qmake4BinaryFile;
|
Utils::FileName m_qmake4BinaryFile;
|
||||||
Utils::FileName m_qmake5BinaryFile;
|
Utils::FileName m_qmake5BinaryFile;
|
||||||
@@ -99,6 +102,7 @@ private:
|
|||||||
QList<Utils::EnvironmentItem> m_qnxEnv;
|
QList<Utils::EnvironmentItem> m_qnxEnv;
|
||||||
|
|
||||||
void ctor();
|
void ctor();
|
||||||
|
|
||||||
QnxAbstractQtVersion* createQtVersion(
|
QnxAbstractQtVersion* createQtVersion(
|
||||||
const Utils::FileName &qmakePath, Qnx::QnxArchitecture arch, const QString &versionName);
|
const Utils::FileName &qmakePath, Qnx::QnxArchitecture arch, const QString &versionName);
|
||||||
QnxToolChain* createToolChain(
|
QnxToolChain* createToolChain(
|
||||||
|
|||||||
@@ -67,6 +67,15 @@ const QLatin1String NDKEnvFileKey("NDKEnvFile");
|
|||||||
const QLatin1String ManualNDKsGroup("ManualNDKs");
|
const QLatin1String ManualNDKsGroup("ManualNDKs");
|
||||||
const QLatin1String ActiveNDKsGroup("ActiveNDKs");
|
const QLatin1String ActiveNDKsGroup("ActiveNDKs");
|
||||||
const QLatin1String DefaultApiLevelKey("DefaultApiLevel");
|
const QLatin1String DefaultApiLevelKey("DefaultApiLevel");
|
||||||
|
const QLatin1String BBConfigsFileVersionKey("Version");
|
||||||
|
const QLatin1String BBConfigDataKey("BBConfiguration.");
|
||||||
|
const QLatin1String BBConfigCountKey("BBConfiguration.Count");
|
||||||
|
}
|
||||||
|
|
||||||
|
static Utils::FileName bbConfigSettingsFileName()
|
||||||
|
{
|
||||||
|
return Utils::FileName::fromString(Core::ICore::userResourcePath() + QLatin1String("/qnx/")
|
||||||
|
+ QLatin1String(Constants::QNX_BLACKBERRY_CONFIGS_FILENAME));
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool sortConfigurationsByVersion(const BlackBerryConfiguration *a, const BlackBerryConfiguration *b)
|
static bool sortConfigurationsByVersion(const BlackBerryConfiguration *a, const BlackBerryConfiguration *b)
|
||||||
@@ -78,9 +87,50 @@ BlackBerryConfigurationManager::BlackBerryConfigurationManager(QObject *parent)
|
|||||||
: QObject(parent),
|
: QObject(parent),
|
||||||
m_defaultApiLevel(0)
|
m_defaultApiLevel(0)
|
||||||
{
|
{
|
||||||
|
m_writer = new Utils::PersistentSettingsWriter(bbConfigSettingsFileName(),
|
||||||
|
QLatin1String("BlackBerryConfigurations"));
|
||||||
connect(Core::ICore::instance(), SIGNAL(saveSettingsRequested()), this, SLOT(saveSettings()));
|
connect(Core::ICore::instance(), SIGNAL(saveSettingsRequested()), this, SLOT(saveSettings()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BlackBerryConfigurationManager::saveConfigurations()
|
||||||
|
{
|
||||||
|
QTC_ASSERT(m_writer, return);
|
||||||
|
QVariantMap data;
|
||||||
|
data.insert(QLatin1String(BBConfigsFileVersionKey), 1);
|
||||||
|
int count = 0;
|
||||||
|
foreach (BlackBerryConfiguration *config, m_configs) {
|
||||||
|
QVariantMap tmp = config->toMap();
|
||||||
|
if (tmp.isEmpty())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
data.insert(BBConfigDataKey + QString::number(count), tmp);
|
||||||
|
++count;
|
||||||
|
}
|
||||||
|
|
||||||
|
data.insert(QLatin1String(BBConfigCountKey), count);
|
||||||
|
m_writer->save(data, Core::ICore::mainWindow());
|
||||||
|
}
|
||||||
|
|
||||||
|
void BlackBerryConfigurationManager::restoreConfigurations()
|
||||||
|
{
|
||||||
|
Utils::PersistentSettingsReader reader;
|
||||||
|
if (!reader.load(bbConfigSettingsFileName()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
QVariantMap data = reader.restoreValues();
|
||||||
|
int count = data.value(BBConfigCountKey, 0).toInt();
|
||||||
|
for (int i = 0; i < count; ++i) {
|
||||||
|
const QString key = BBConfigDataKey + QString::number(i);
|
||||||
|
if (!data.contains(key))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
const QVariantMap dMap = data.value(key).toMap();
|
||||||
|
insertByVersion(new BlackBerryConfiguration(dMap));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Backward compatibility: Read existing entries in the ManualNDKsGroup
|
||||||
|
// and then remove the group since not used.
|
||||||
void BlackBerryConfigurationManager::loadManualConfigurations()
|
void BlackBerryConfigurationManager::loadManualConfigurations()
|
||||||
{
|
{
|
||||||
QSettings *settings = Core::ICore::settings();
|
QSettings *settings = Core::ICore::settings();
|
||||||
@@ -107,6 +157,7 @@ void BlackBerryConfigurationManager::loadManualConfigurations()
|
|||||||
}
|
}
|
||||||
|
|
||||||
settings->endGroup();
|
settings->endGroup();
|
||||||
|
settings->remove(ManualNDKsGroup);
|
||||||
settings->endGroup();
|
settings->endGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,25 +193,13 @@ void BlackBerryConfigurationManager::loadDefaultApiLevel()
|
|||||||
|
|
||||||
void BlackBerryConfigurationManager::loadAutoDetectedConfigurations()
|
void BlackBerryConfigurationManager::loadAutoDetectedConfigurations()
|
||||||
{
|
{
|
||||||
QStringList activePaths = activeConfigurationNdkEnvPaths();
|
|
||||||
foreach (const NdkInstallInformation &ndkInfo, QnxUtils::installedNdks()) {
|
foreach (const NdkInstallInformation &ndkInfo, QnxUtils::installedNdks()) {
|
||||||
BlackBerryConfiguration *config = new BlackBerryConfiguration(ndkInfo);
|
BlackBerryConfiguration *config = new BlackBerryConfiguration(ndkInfo);
|
||||||
if (!addConfiguration(config)) {
|
if (!addConfiguration(config)) {
|
||||||
delete config;
|
delete config;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Activate targets
|
|
||||||
foreach (const QString activeNdkEnvPath, activePaths) {
|
|
||||||
if (config->ndkEnvFile().toString() == activeNdkEnvPath)
|
|
||||||
config->activate();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If no target was/is activated, activate one since it's needed by
|
|
||||||
// device connection and CSK code.
|
|
||||||
if (activeConfigurations().isEmpty() && !m_configs.isEmpty())
|
|
||||||
m_configs.first()->activate();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlackBerryConfigurationManager::setDefaultApiLevel(BlackBerryConfiguration *config)
|
void BlackBerryConfigurationManager::setDefaultApiLevel(BlackBerryConfiguration *config)
|
||||||
@@ -175,45 +214,6 @@ void BlackBerryConfigurationManager::setDefaultApiLevel(BlackBerryConfiguration
|
|||||||
m_defaultApiLevel = config;
|
m_defaultApiLevel = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList BlackBerryConfigurationManager::activeConfigurationNdkEnvPaths()
|
|
||||||
{
|
|
||||||
QStringList actives;
|
|
||||||
QSettings *settings = Core::ICore::settings();
|
|
||||||
|
|
||||||
settings->beginGroup(SettingsGroup);
|
|
||||||
settings->beginGroup(ActiveNDKsGroup);
|
|
||||||
|
|
||||||
foreach (const QString &activeNdkEnvPath, settings->childGroups()) {
|
|
||||||
settings->beginGroup(activeNdkEnvPath);
|
|
||||||
actives.append(settings->value(NDKEnvFileKey).toString());
|
|
||||||
settings->endGroup();
|
|
||||||
}
|
|
||||||
|
|
||||||
settings->endGroup();
|
|
||||||
settings->endGroup();
|
|
||||||
|
|
||||||
return actives;
|
|
||||||
}
|
|
||||||
|
|
||||||
void BlackBerryConfigurationManager::saveManualConfigurations()
|
|
||||||
{
|
|
||||||
if (manualConfigurations().isEmpty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
QSettings *settings = Core::ICore::settings();
|
|
||||||
settings->beginGroup(SettingsGroup);
|
|
||||||
settings->beginGroup(ManualNDKsGroup);
|
|
||||||
|
|
||||||
foreach (BlackBerryConfiguration *config, manualConfigurations()) {
|
|
||||||
settings->beginGroup(config->displayName());
|
|
||||||
settings->setValue(NDKEnvFileKey, config->ndkEnvFile().toString());
|
|
||||||
settings->endGroup();
|
|
||||||
}
|
|
||||||
|
|
||||||
settings->endGroup();
|
|
||||||
settings->endGroup();
|
|
||||||
}
|
|
||||||
|
|
||||||
void BlackBerryConfigurationManager::saveDefaultApiLevel()
|
void BlackBerryConfigurationManager::saveDefaultApiLevel()
|
||||||
{
|
{
|
||||||
if (!m_defaultApiLevel)
|
if (!m_defaultApiLevel)
|
||||||
@@ -225,51 +225,6 @@ void BlackBerryConfigurationManager::saveDefaultApiLevel()
|
|||||||
settings->endGroup();
|
settings->endGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlackBerryConfigurationManager::saveActiveConfigurationNdkEnvPath()
|
|
||||||
{
|
|
||||||
if (activeConfigurations().isEmpty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
QSettings *settings = Core::ICore::settings();
|
|
||||||
settings->beginGroup(SettingsGroup);
|
|
||||||
settings->beginGroup(ActiveNDKsGroup);
|
|
||||||
|
|
||||||
settings->remove(QString());
|
|
||||||
|
|
||||||
foreach (BlackBerryConfiguration *config, activeConfigurations()) {
|
|
||||||
settings->beginGroup(config->displayName());
|
|
||||||
settings->setValue(NDKEnvFileKey, config->ndkEnvFile().toString());
|
|
||||||
settings->endGroup();
|
|
||||||
}
|
|
||||||
|
|
||||||
settings->endGroup();
|
|
||||||
settings->endGroup();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove no longer available/valid 'auto detected' BlackBerry kits and qt versions
|
|
||||||
void BlackBerryConfigurationManager::clearInvalidConfigurations()
|
|
||||||
{
|
|
||||||
// Deregister invalid auto deteted BlackBerry Kits
|
|
||||||
foreach (Kit *kit, KitManager::kits()) {
|
|
||||||
if (!kit->isAutoDetected())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (DeviceTypeKitInformation::deviceTypeId(kit) == Constants::QNX_BB_OS_TYPE
|
|
||||||
&& !kit->isValid())
|
|
||||||
KitManager::deregisterKit(kit);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove invalid auto detected BlackBerry qtVerions
|
|
||||||
foreach (QtSupport::BaseQtVersion *qtVersion, QtSupport::QtVersionManager::versions()) {
|
|
||||||
if (!qtVersion->isAutodetected())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (qtVersion->platformName() == QLatin1String(Constants::QNX_BB_PLATFORM_NAME)
|
|
||||||
&& !qtVersion->isValid())
|
|
||||||
QtSupport::QtVersionManager::removeVersion(qtVersion);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void BlackBerryConfigurationManager::setKitsAutoDetectionSource()
|
void BlackBerryConfigurationManager::setKitsAutoDetectionSource()
|
||||||
{
|
{
|
||||||
foreach (Kit *kit, KitManager::kits()) {
|
foreach (Kit *kit, KitManager::kits()) {
|
||||||
@@ -287,6 +242,13 @@ void BlackBerryConfigurationManager::setKitsAutoDetectionSource()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BlackBerryConfigurationManager::insertByVersion(BlackBerryConfiguration *config)
|
||||||
|
{
|
||||||
|
QList<BlackBerryConfiguration *>::iterator it = qLowerBound(m_configs.begin(), m_configs.end(),
|
||||||
|
config, &sortConfigurationsByVersion);
|
||||||
|
m_configs.insert(it, config);
|
||||||
|
}
|
||||||
|
|
||||||
// Switch to QnxToolchain for exisintg configuration using GccToolChain
|
// Switch to QnxToolchain for exisintg configuration using GccToolChain
|
||||||
void BlackBerryConfigurationManager::checkToolChainConfiguration()
|
void BlackBerryConfigurationManager::checkToolChainConfiguration()
|
||||||
{
|
{
|
||||||
@@ -308,8 +270,7 @@ void BlackBerryConfigurationManager::checkToolChainConfiguration()
|
|||||||
bool BlackBerryConfigurationManager::addConfiguration(BlackBerryConfiguration *config)
|
bool BlackBerryConfigurationManager::addConfiguration(BlackBerryConfiguration *config)
|
||||||
{
|
{
|
||||||
foreach (BlackBerryConfiguration *c, m_configs) {
|
foreach (BlackBerryConfiguration *c, m_configs) {
|
||||||
if (c->ndkPath() == config->ndkPath()
|
if (config->ndkEnvFile() == c->ndkEnvFile()) {
|
||||||
&& c->targetName() == config->targetName()) {
|
|
||||||
if (!config->isAutoDetected())
|
if (!config->isAutoDetected())
|
||||||
QMessageBox::warning(Core::ICore::mainWindow(), tr("NDK Already Known"),
|
QMessageBox::warning(Core::ICore::mainWindow(), tr("NDK Already Known"),
|
||||||
tr("The NDK already has a configuration."), QMessageBox::Ok);
|
tr("The NDK already has a configuration."), QMessageBox::Ok);
|
||||||
@@ -318,9 +279,7 @@ bool BlackBerryConfigurationManager::addConfiguration(BlackBerryConfiguration *c
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (config->isValid()) {
|
if (config->isValid()) {
|
||||||
QList<BlackBerryConfiguration *>::iterator it = qLowerBound(m_configs.begin(), m_configs.end(),
|
insertByVersion(config);
|
||||||
config, &sortConfigurationsByVersion);
|
|
||||||
m_configs.insert(it, config);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -335,8 +294,6 @@ void BlackBerryConfigurationManager::removeConfiguration(BlackBerryConfiguration
|
|||||||
if (config->isActive())
|
if (config->isActive())
|
||||||
config->deactivate();
|
config->deactivate();
|
||||||
|
|
||||||
clearConfigurationSettings(config);
|
|
||||||
|
|
||||||
m_configs.removeAt(m_configs.indexOf(config));
|
m_configs.removeAt(m_configs.indexOf(config));
|
||||||
|
|
||||||
if (m_defaultApiLevel == config) {
|
if (m_defaultApiLevel == config) {
|
||||||
@@ -409,39 +366,25 @@ void BlackBerryConfigurationManager::loadSettings()
|
|||||||
// Backward compatibility: Set kit's auto detection source
|
// Backward compatibility: Set kit's auto detection source
|
||||||
// for existing BlackBerry kits that do not have it set yet.
|
// for existing BlackBerry kits that do not have it set yet.
|
||||||
setKitsAutoDetectionSource();
|
setKitsAutoDetectionSource();
|
||||||
clearInvalidConfigurations();
|
|
||||||
loadAutoDetectedConfigurations();
|
restoreConfigurations();
|
||||||
|
// For backward compatibility
|
||||||
loadManualConfigurations();
|
loadManualConfigurations();
|
||||||
|
loadAutoDetectedConfigurations();
|
||||||
loadDefaultApiLevel();
|
loadDefaultApiLevel();
|
||||||
checkToolChainConfiguration();
|
checkToolChainConfiguration();
|
||||||
|
|
||||||
|
// If no target was/is activated, activate one since it's needed by
|
||||||
|
// device connection and CSK code.
|
||||||
|
if (activeConfigurations().isEmpty() && !m_configs.isEmpty())
|
||||||
|
m_configs.first()->activate();
|
||||||
|
|
||||||
emit settingsLoaded();
|
emit settingsLoaded();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlackBerryConfigurationManager::clearConfigurationSettings(BlackBerryConfiguration *config)
|
|
||||||
{
|
|
||||||
if (!config)
|
|
||||||
return;
|
|
||||||
|
|
||||||
QSettings *settings = Core::ICore::settings();
|
|
||||||
settings->beginGroup(SettingsGroup);
|
|
||||||
settings->beginGroup(ManualNDKsGroup);
|
|
||||||
|
|
||||||
foreach (const QString &manualNdk, settings->childGroups()) {
|
|
||||||
if (manualNdk == config->displayName()) {
|
|
||||||
settings->remove(manualNdk);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
settings->endGroup();
|
|
||||||
settings->endGroup();
|
|
||||||
}
|
|
||||||
|
|
||||||
void BlackBerryConfigurationManager::saveSettings()
|
void BlackBerryConfigurationManager::saveSettings()
|
||||||
{
|
{
|
||||||
saveActiveConfigurationNdkEnvPath();
|
saveConfigurations();
|
||||||
saveManualConfigurations();
|
|
||||||
saveDefaultApiLevel();
|
saveDefaultApiLevel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,8 @@
|
|||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
|
namespace Utils { class PersistentSettingsWriter; }
|
||||||
|
|
||||||
namespace Qnx {
|
namespace Qnx {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
@@ -81,17 +83,21 @@ signals:
|
|||||||
private:
|
private:
|
||||||
BlackBerryConfigurationManager(QObject *parent = 0);
|
BlackBerryConfigurationManager(QObject *parent = 0);
|
||||||
QList<BlackBerryConfiguration*> m_configs;
|
QList<BlackBerryConfiguration*> m_configs;
|
||||||
|
|
||||||
BlackBerryConfiguration *m_defaultApiLevel;
|
BlackBerryConfiguration *m_defaultApiLevel;
|
||||||
|
|
||||||
void loadManualConfigurations();
|
|
||||||
void loadDefaultApiLevel();
|
void loadDefaultApiLevel();
|
||||||
void saveManualConfigurations();
|
|
||||||
void saveDefaultApiLevel();
|
void saveDefaultApiLevel();
|
||||||
void saveActiveConfigurationNdkEnvPath();
|
|
||||||
void clearInvalidConfigurations();
|
Utils::PersistentSettingsWriter *m_writer;
|
||||||
|
|
||||||
|
void saveConfigurations();
|
||||||
|
void restoreConfigurations();
|
||||||
|
|
||||||
|
void loadManualConfigurations();
|
||||||
void setKitsAutoDetectionSource();
|
void setKitsAutoDetectionSource();
|
||||||
|
|
||||||
QStringList activeConfigurationNdkEnvPaths();
|
void insertByVersion(BlackBerryConfiguration* config);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
|||||||
@@ -51,6 +51,8 @@
|
|||||||
namespace Qnx {
|
namespace Qnx {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
|
static QIcon invalidConfigIcon(QLatin1String(":/projectexplorer/images/compile_error.png"));
|
||||||
|
|
||||||
BlackBerryNDKSettingsWidget::BlackBerryNDKSettingsWidget(QWidget *parent) :
|
BlackBerryNDKSettingsWidget::BlackBerryNDKSettingsWidget(QWidget *parent) :
|
||||||
QWidget(parent),
|
QWidget(parent),
|
||||||
m_ui(new Ui_BlackBerryNDKSettingsWidget),
|
m_ui(new Ui_BlackBerryNDKSettingsWidget),
|
||||||
@@ -86,6 +88,7 @@ BlackBerryNDKSettingsWidget::BlackBerryNDKSettingsWidget(QWidget *parent) :
|
|||||||
connect(m_ui->removeNdkButton, SIGNAL(clicked()), this, SLOT(removeNdkTarget()));
|
connect(m_ui->removeNdkButton, SIGNAL(clicked()), this, SLOT(removeNdkTarget()));
|
||||||
connect(m_ui->activateNdkTargetButton, SIGNAL(clicked()), this, SLOT(activateNdkTarget()));
|
connect(m_ui->activateNdkTargetButton, SIGNAL(clicked()), this, SLOT(activateNdkTarget()));
|
||||||
connect(m_ui->deactivateNdkTargetButton, SIGNAL(clicked()), this, SLOT(deactivateNdkTarget()));
|
connect(m_ui->deactivateNdkTargetButton, SIGNAL(clicked()), this, SLOT(deactivateNdkTarget()));
|
||||||
|
connect(m_ui->cleanUpButton, SIGNAL(clicked()), this, SLOT(cleanUp()));
|
||||||
connect(m_ui->ndksTreeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), this, SLOT(updateInfoTable(QTreeWidgetItem*)));
|
connect(m_ui->ndksTreeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), this, SLOT(updateInfoTable(QTreeWidgetItem*)));
|
||||||
connect(m_ui->apiLevelCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setDefaultApiLevel(int)));
|
connect(m_ui->apiLevelCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setDefaultApiLevel(int)));
|
||||||
|
|
||||||
@@ -155,6 +158,7 @@ void BlackBerryNDKSettingsWidget::updateNdkList()
|
|||||||
qDeleteAll(m_autoDetectedNdks->takeChildren());
|
qDeleteAll(m_autoDetectedNdks->takeChildren());
|
||||||
qDeleteAll(m_manualNdks->takeChildren());
|
qDeleteAll(m_manualNdks->takeChildren());
|
||||||
|
|
||||||
|
bool enableCleanUp = false;
|
||||||
foreach (BlackBerryConfiguration *config, m_bbConfigManager->configurations()) {
|
foreach (BlackBerryConfiguration *config, m_bbConfigManager->configurations()) {
|
||||||
QTreeWidgetItem *parent = config->isAutoDetected() ? m_autoDetectedNdks : m_manualNdks;
|
QTreeWidgetItem *parent = config->isAutoDetected() ? m_autoDetectedNdks : m_manualNdks;
|
||||||
QTreeWidgetItem *item = new QTreeWidgetItem(parent);
|
QTreeWidgetItem *item = new QTreeWidgetItem(parent);
|
||||||
@@ -164,9 +168,36 @@ void BlackBerryNDKSettingsWidget::updateNdkList()
|
|||||||
font.setBold(config->isActive() || m_activatedTargets.contains(config));
|
font.setBold(config->isActive() || m_activatedTargets.contains(config));
|
||||||
item->setFont(0, font);
|
item->setFont(0, font);
|
||||||
item->setFont(1, font);
|
item->setFont(1, font);
|
||||||
|
item->setIcon(0, config->isValid() ? QIcon() : invalidConfigIcon);
|
||||||
|
// TODO: Do the same if qmake, qcc, debugger are no longer detected...
|
||||||
|
if (!config->isValid()) {
|
||||||
|
QString toolTip = tr("Invalid target %1: ").arg(config->targetName());
|
||||||
|
if (config->isAutoDetected() && !config->autoDetectionSource().toFileInfo().exists())
|
||||||
|
toolTip += QLatin1Char('\n') + tr("- Target no longer installed.");
|
||||||
|
|
||||||
|
if (!config->ndkEnvFile().toFileInfo().exists())
|
||||||
|
toolTip += QLatin1Char('\n') + tr("- No NDK environment file found.");
|
||||||
|
|
||||||
|
if (config->qmake4BinaryFile().isEmpty()
|
||||||
|
&& config->qmake5BinaryFile().isEmpty())
|
||||||
|
toolTip += QLatin1Char('\n') + tr("- No Qt version found.");
|
||||||
|
|
||||||
|
if (config->gccCompiler().isEmpty())
|
||||||
|
toolTip += QLatin1Char('\n') + tr("- No compiler found.");
|
||||||
|
|
||||||
|
if (config->deviceDebuger().isEmpty())
|
||||||
|
toolTip += QLatin1Char('\n') + tr("- No debugger found for device.");
|
||||||
|
|
||||||
|
if (config->simulatorDebuger().isEmpty())
|
||||||
|
toolTip += QLatin1Char('\n') + tr("- No debugger found for simulator.");
|
||||||
|
|
||||||
|
item->setToolTip(0, toolTip);
|
||||||
|
enableCleanUp = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_ui->ndksTreeWidget->setCurrentItem(m_autoDetectedNdks->child(0));
|
m_ui->ndksTreeWidget->setCurrentItem(m_autoDetectedNdks->child(0));
|
||||||
|
m_ui->cleanUpButton->setEnabled(enableCleanUp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlackBerryNDKSettingsWidget::addNdkTarget()
|
void BlackBerryNDKSettingsWidget::addNdkTarget()
|
||||||
@@ -276,6 +307,19 @@ void BlackBerryNDKSettingsWidget::uninstallNdkTarget()
|
|||||||
launchBlackBerryInstallerWizard(BlackBerryInstallerDataHandler::UninstallMode, m_ui->versionLabel->text());
|
launchBlackBerryInstallerWizard(BlackBerryInstallerDataHandler::UninstallMode, m_ui->versionLabel->text());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BlackBerryNDKSettingsWidget::cleanUp()
|
||||||
|
{
|
||||||
|
foreach (BlackBerryConfiguration *config, m_bbConfigManager->configurations()) {
|
||||||
|
if (!config->isValid()) {
|
||||||
|
m_activatedTargets.removeOne(config);
|
||||||
|
m_deactivatedTargets.removeOne(config);
|
||||||
|
m_bbConfigManager->removeConfiguration(config);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
updateNdkList();
|
||||||
|
}
|
||||||
|
|
||||||
void BlackBerryNDKSettingsWidget::handleInstallationFinished()
|
void BlackBerryNDKSettingsWidget::handleInstallationFinished()
|
||||||
{
|
{
|
||||||
m_bbConfigManager->loadAutoDetectedConfigurations();
|
m_bbConfigManager->loadAutoDetectedConfigurations();
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ public slots:
|
|||||||
void activateNdkTarget();
|
void activateNdkTarget();
|
||||||
void deactivateNdkTarget();
|
void deactivateNdkTarget();
|
||||||
void uninstallNdkTarget();
|
void uninstallNdkTarget();
|
||||||
|
void cleanUp();
|
||||||
void handleInstallationFinished();
|
void handleInstallationFinished();
|
||||||
void handleUninstallationFinished();
|
void handleUninstallationFinished();
|
||||||
void updateUi(QTreeWidgetItem* item, BlackBerryConfiguration* config);
|
void updateUi(QTreeWidgetItem* item, BlackBerryConfiguration* config);
|
||||||
|
|||||||
@@ -229,6 +229,29 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType">
|
||||||
|
<enum>QSizePolicy::Fixed</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>13</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="cleanUpButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>Clean Up</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="verticalSpacer">
|
<spacer name="verticalSpacer">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
|
|||||||
@@ -113,6 +113,8 @@ const char QNX_BLACKBERRY_DEPLOY_CMD[] = "blackberry-deploy";
|
|||||||
|
|
||||||
const char QNX_BLACKBERRY_CASCADESIMPORTER_VERSION[] = "0.0.1";
|
const char QNX_BLACKBERRY_CASCADESIMPORTER_VERSION[] = "0.0.1";
|
||||||
|
|
||||||
|
const char QNX_BLACKBERRY_CONFIGS_FILENAME[] = "bbndkconfigurations.xml";
|
||||||
|
|
||||||
} // namespace Constants
|
} // namespace Constants
|
||||||
} // namespace Qnx
|
} // namespace Qnx
|
||||||
|
|
||||||
|
|||||||
@@ -258,6 +258,7 @@ QList<NdkInstallInformation> QnxUtils::installedNdks()
|
|||||||
ndkInfo.host = childElt.firstChildElement(QLatin1String("host")).text();
|
ndkInfo.host = childElt.firstChildElement(QLatin1String("host")).text();
|
||||||
ndkInfo.target = childElt.firstChildElement(QLatin1String("target")).text();
|
ndkInfo.target = childElt.firstChildElement(QLatin1String("target")).text();
|
||||||
ndkInfo.version = childElt.firstChildElement(QLatin1String("version")).text();
|
ndkInfo.version = childElt.firstChildElement(QLatin1String("version")).text();
|
||||||
|
ndkInfo.installationXmlFilePath = ndkFile.absoluteFilePath();
|
||||||
|
|
||||||
ndkList.append(ndkInfo);
|
ndkList.append(ndkInfo);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,6 +54,10 @@ public:
|
|||||||
QString host;
|
QString host;
|
||||||
QString target;
|
QString target;
|
||||||
QString version;
|
QString version;
|
||||||
|
QString installationXmlFilePath;
|
||||||
|
|
||||||
|
bool isValid() { return !path.isEmpty() && !name.isEmpty() && !host.isEmpty()
|
||||||
|
&& !target.isEmpty() && !version.isEmpty() && !installationXmlFilePath.isEmpty(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
class QnxUtils
|
class QnxUtils
|
||||||
|
|||||||
Reference in New Issue
Block a user