Commit aa8786fb authored by El Mehdi Fekari's avatar El Mehdi Fekari Committed by Mehdi Fekari

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's avatarNicolas Arnaud-Cormos <nicolas@kdab.com>
parent b840a243
......@@ -29,11 +29,12 @@
**
****************************************************************************/
#include "blackberryconfiguration.h"
#include "blackberryapilevelconfiguration.h"
#include "blackberryconfigurationmanager.h"
#include "blackberryqtversion.h"
#include "qnxtoolchain.h"
#include "qnxconstants.h"
#include <utils/qtcassert.h>
......@@ -76,10 +77,10 @@ const QLatin1String NDKAutoDetectionSourceKey("NDKAutoDetectionSource");
const QLatin1String NDKAutoDetectedKey("NDKAutoDetectedKey");
#ifdef WITH_TESTS
bool BlackBerryConfiguration::m_fakeConfig = false;
bool BlackBerryApiLevelConfiguration::m_fakeConfig = false;
#endif
BlackBerryConfiguration::BlackBerryConfiguration(const NdkInstallInformation &ndkInstallInfo)
BlackBerryApiLevelConfiguration::BlackBerryApiLevelConfiguration(const NdkInstallInformation &ndkInstallInfo)
{
QString envFilePath = QnxUtils::envFilePath(ndkInstallInfo.path, ndkInstallInfo.version);
QTC_ASSERT(!envFilePath.isEmpty(), return);
......@@ -96,7 +97,7 @@ BlackBerryConfiguration::BlackBerryConfiguration(const NdkInstallInformation &nd
ctor();
}
BlackBerryConfiguration::BlackBerryConfiguration(const FileName &ndkEnvFile)
BlackBerryApiLevelConfiguration::BlackBerryApiLevelConfiguration(const FileName &ndkEnvFile)
: m_autoDetectionSource(Utils::FileName())
{
QTC_ASSERT(!QFileInfo(ndkEnvFile.toString()).isDir(), return);
......@@ -129,7 +130,7 @@ BlackBerryConfiguration::BlackBerryConfiguration(const FileName &ndkEnvFile)
ctor();
}
BlackBerryConfiguration::BlackBerryConfiguration(const QVariantMap &data)
BlackBerryApiLevelConfiguration::BlackBerryApiLevelConfiguration(const QVariantMap &data)
{
QString envFilePath = data.value(NDKEnvFileKey).toString();
QTC_ASSERT(!envFilePath.isEmpty(), return);
......@@ -148,7 +149,7 @@ BlackBerryConfiguration::BlackBerryConfiguration(const QVariantMap &data)
ctor();
}
void BlackBerryConfiguration::ctor()
void BlackBerryApiLevelConfiguration::ctor()
{
FileName qmake4Path = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/qmake")));
FileName qmake5Path = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/qt5/qmake")));
......@@ -172,42 +173,42 @@ void BlackBerryConfiguration::ctor()
m_simulatorDebugger = simulatorGdbPath;
}
QString BlackBerryConfiguration::ndkPath() const
QString BlackBerryApiLevelConfiguration::ndkPath() const
{
return m_ndkEnvFile.parentDir().toString();
}
QString BlackBerryConfiguration::displayName() const
QString BlackBerryApiLevelConfiguration::displayName() const
{
return m_displayName;
}
QString BlackBerryConfiguration::targetName() const
QString BlackBerryApiLevelConfiguration::targetName() const
{
return m_targetName;
}
QString BlackBerryConfiguration::qnxHost() const
QString BlackBerryApiLevelConfiguration::qnxHost() const
{
return m_qnxHost;
}
BlackBerryVersionNumber BlackBerryConfiguration::version() const
BlackBerryVersionNumber BlackBerryApiLevelConfiguration::version() const
{
return m_version;
}
bool BlackBerryConfiguration::isAutoDetected() const
bool BlackBerryApiLevelConfiguration::isAutoDetected() const
{
return !m_autoDetectionSource.isEmpty();
}
Utils::FileName BlackBerryConfiguration::autoDetectionSource() const
Utils::FileName BlackBerryApiLevelConfiguration::autoDetectionSource() const
{
return m_autoDetectionSource;
}
bool BlackBerryConfiguration::isActive() const
bool BlackBerryApiLevelConfiguration::isActive() const
{
foreach (Kit *kit, KitManager::kits()) {
if (kit->isAutoDetected() &&
......@@ -218,10 +219,10 @@ bool BlackBerryConfiguration::isActive() const
return false;
}
bool BlackBerryConfiguration::isValid() const
bool BlackBerryApiLevelConfiguration::isValid() const
{
#ifdef WITH_TESTS
if (BlackBerryConfiguration::fakeConfig())
if (BlackBerryApiLevelConfiguration::fakeConfig())
return true;
#endif
......@@ -232,49 +233,51 @@ bool BlackBerryConfiguration::isValid() const
&& m_sysRoot.toFileInfo().exists());
}
FileName BlackBerryConfiguration::ndkEnvFile() const
FileName BlackBerryApiLevelConfiguration::ndkEnvFile() const
{
return m_ndkEnvFile;
}
FileName BlackBerryConfiguration::qmake4BinaryFile() const
FileName BlackBerryApiLevelConfiguration::qmake4BinaryFile() const
{
return m_qmake4BinaryFile;
}
FileName BlackBerryConfiguration::qmake5BinaryFile() const
FileName BlackBerryApiLevelConfiguration::qmake5BinaryFile() const
{
return m_qmake5BinaryFile;
}
FileName BlackBerryConfiguration::gccCompiler() const
FileName BlackBerryApiLevelConfiguration::gccCompiler() const
{
return m_gccCompiler;
}
FileName BlackBerryConfiguration::deviceDebuger() const
FileName BlackBerryApiLevelConfiguration::deviceDebuger() const
{
return m_deviceDebugger;
}
FileName BlackBerryConfiguration::simulatorDebuger() const
FileName BlackBerryApiLevelConfiguration::simulatorDebuger() const
{
return m_simulatorDebugger;
}
FileName BlackBerryConfiguration::sysRoot() const
FileName BlackBerryApiLevelConfiguration::sysRoot() const
{
return m_sysRoot;
}
QList<Utils::EnvironmentItem> BlackBerryConfiguration::qnxEnv() const
QList<Utils::EnvironmentItem> BlackBerryApiLevelConfiguration::qnxEnv() const
{
return m_qnxEnv;
}
QVariantMap BlackBerryConfiguration::toMap() const
QVariantMap BlackBerryApiLevelConfiguration::toMap() const
{
QVariantMap data;
data.insert(QLatin1String(Qnx::Constants::QNX_BB_KEY_CONFIGURATION_TYPE),
QLatin1String(Qnx::Constants::QNX_BB_APILEVEL_TYPE));
data.insert(QLatin1String(NDKEnvFileKey), m_ndkEnvFile.toString());
data.insert(QLatin1String(NDKDisplayNameKey), m_displayName);
data.insert(QLatin1String(NDKPathKey), ndkPath());
......@@ -286,7 +289,7 @@ QVariantMap BlackBerryConfiguration::toMap() const
return data;
}
QnxAbstractQtVersion *BlackBerryConfiguration::createQtVersion(
QnxAbstractQtVersion *BlackBerryApiLevelConfiguration::createQtVersion(
const FileName &qmakePath, Qnx::QnxArchitecture arch, const QString &versionName)
{
QnxAbstractQtVersion *version = new BlackBerryQtVersion(
......@@ -296,7 +299,7 @@ QnxAbstractQtVersion *BlackBerryConfiguration::createQtVersion(
return version;
}
QnxToolChain *BlackBerryConfiguration::createToolChain(
QnxToolChain *BlackBerryApiLevelConfiguration::createToolChain(
ProjectExplorer::Abi abi, const QString &versionName)
{
QnxToolChain* toolChain = new QnxToolChain(ToolChain::AutoDetection);
......@@ -309,7 +312,7 @@ QnxToolChain *BlackBerryConfiguration::createToolChain(
return toolChain;
}
QVariant BlackBerryConfiguration::createDebuggerItem(
QVariant BlackBerryApiLevelConfiguration::createDebuggerItem(
QList<ProjectExplorer::Abi> abis, Qnx::QnxArchitecture arch, const QString &versionName)
{
Utils::FileName command = arch == X86 ? m_simulatorDebugger : m_deviceDebugger;
......@@ -322,7 +325,7 @@ QVariant BlackBerryConfiguration::createDebuggerItem(
return DebuggerItemManager::registerDebugger(debugger);
}
Kit *BlackBerryConfiguration::createKit(
Kit *BlackBerryApiLevelConfiguration::createKit(
QnxAbstractQtVersion *version, QnxToolChain *toolChain, const QVariant &debuggerItemId)
{
Kit *kit = new Kit;
......@@ -359,7 +362,7 @@ Kit *BlackBerryConfiguration::createKit(
return kit;
}
bool BlackBerryConfiguration::activate()
bool BlackBerryApiLevelConfiguration::activate()
{
if (!isValid()) {
if (!m_autoDetectionSource.isEmpty())
......@@ -441,7 +444,7 @@ bool BlackBerryConfiguration::activate()
return true;
}
void BlackBerryConfiguration::deactivate()
void BlackBerryApiLevelConfiguration::deactivate()
{
foreach (Kit *kit, KitManager::kits()) {
if (kit->isAutoDetected() &&
......@@ -464,12 +467,12 @@ void BlackBerryConfiguration::deactivate()
}
#ifdef WITH_TESTS
void BlackBerryConfiguration::setFakeConfig(bool fakeConfig)
void BlackBerryApiLevelConfiguration::setFakeConfig(bool fakeConfig)
{
m_fakeConfig = fakeConfig;
}
bool BlackBerryConfiguration::fakeConfig()
bool BlackBerryApiLevelConfiguration::fakeConfig()
{
return m_fakeConfig;
}
......
......@@ -54,13 +54,13 @@ namespace Internal {
class QnxAbstractQtVersion;
class QnxToolChain;
class BlackBerryConfiguration
class BlackBerryApiLevelConfiguration
{
Q_DECLARE_TR_FUNCTIONS(Qnx::Internal::BlackBerryConfiguration)
Q_DECLARE_TR_FUNCTIONS(Qnx::Internal::BlackBerryApiLevelConfiguration)
public:
BlackBerryConfiguration(const NdkInstallInformation &ndkInstallInfo);
BlackBerryConfiguration(const Utils::FileName &ndkEnvFile);
BlackBerryConfiguration(const QVariantMap &data);
BlackBerryApiLevelConfiguration(const NdkInstallInformation &ndkInstallInfo);
BlackBerryApiLevelConfiguration(const Utils::FileName &ndkEnvFile);
BlackBerryApiLevelConfiguration(const QVariantMap &data);
bool activate();
void deactivate();
QString ndkPath() const;
......
......@@ -30,7 +30,7 @@
****************************************************************************/
#include "blackberrycertificate.h"
#include "blackberryconfiguration.h"
#include "blackberryapilevelconfiguration.h"
#include "blackberryconfigurationmanager.h"
#include "blackberryndkprocess.h"
......
......@@ -43,7 +43,8 @@ namespace Utils { class PersistentSettingsWriter; }
namespace Qnx {
namespace Internal {
class BlackBerryConfiguration;
class BlackBerryApiLevelConfiguration;
class BlackBerryRuntimeConfiguration;
class BlackBerryConfigurationManager : public QObject
{
......@@ -51,13 +52,17 @@ class BlackBerryConfigurationManager : public QObject
public:
static BlackBerryConfigurationManager &instance();
~BlackBerryConfigurationManager();
bool addConfiguration(BlackBerryConfiguration *config);
void removeConfiguration(BlackBerryConfiguration *config);
QList<BlackBerryConfiguration*> configurations() const;
QList<BlackBerryConfiguration*> manualConfigurations() const;
QList<BlackBerryConfiguration *> activeConfigurations() const;
BlackBerryConfiguration *configurationFromEnvFile(const Utils::FileName &envFile) const;
BlackBerryConfiguration *defaultConfiguration() const;
bool addApiLevel(BlackBerryApiLevelConfiguration *config);
void removeApiLevel(BlackBerryApiLevelConfiguration *config);
bool addRuntime(BlackBerryRuntimeConfiguration *runtime);
void removeRuntime(BlackBerryRuntimeConfiguration *runtime);
QList<BlackBerryApiLevelConfiguration*> apiLevels() const;
QList<BlackBerryRuntimeConfiguration *> runtimes() 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 idTokenPath() const;
......@@ -68,10 +73,11 @@ public:
// returns the environment for the default API level
QList<Utils::EnvironmentItem> defaultConfigurationEnv() const;
void loadAutoDetectedConfigurations();
void setDefaultConfiguration(BlackBerryConfiguration *config);
void loadAutoDetectedApiLevels();
void loadAutoDetectedRuntimes();
void setDefaultConfiguration(BlackBerryApiLevelConfiguration *config);
bool newestConfigurationEnabled() const;
bool newestApiLevelEnabled() const;
void emitSettingsChanged();
......@@ -86,9 +92,10 @@ signals:
private:
BlackBerryConfigurationManager(QObject *parent = 0);
QList<BlackBerryConfiguration*> m_configs;
QList<BlackBerryApiLevelConfiguration*> m_apiLevels;
QList<BlackBerryRuntimeConfiguration*> m_runtimes;
BlackBerryConfiguration *m_defaultConfiguration;
BlackBerryApiLevelConfiguration *m_defaultConfiguration;
Utils::PersistentSettingsWriter *m_writer;
......@@ -98,7 +105,8 @@ private:
void loadManualConfigurations();
void setKitsAutoDetectionSource();
void insertByVersion(BlackBerryConfiguration* config);
void insertApiLevelByVersion(BlackBerryApiLevelConfiguration* apiLevel);
void insertRuntimeByVersion(BlackBerryRuntimeConfiguration* runtime);
};
} // namespace Internal
......
......@@ -33,7 +33,6 @@
#include "blackberrydebugtokenuploader.h"
#include "blackberrydebugtokenrequestdialog.h"
#include "ui_blackberrydeviceconfigurationwidget.h"
#include "blackberryconfiguration.h"
#include "blackberrydeviceconnectionmanager.h"
#include "blackberrysigningutils.h"
#include "blackberrydebugtokenreader.h"
......
......@@ -30,7 +30,6 @@
****************************************************************************/
#include "blackberrydeviceconfigurationwizardpages.h"
#include "blackberryconfiguration.h"
#include "blackberrydebugtokenrequestdialog.h"
#include "blackberrydebugtokenreader.h"
#include "blackberrysshkeysgenerator.h"
......@@ -38,7 +37,6 @@
#include "ui_blackberrydeviceconfigurationwizardsetuppage.h"
#include "ui_blackberrydeviceconfigurationwizardquerypage.h"
#include "ui_blackberrydeviceconfigurationwizardconfigpage.h"
#include "blackberryconfiguration.h"
#include "blackberrydeviceconnectionmanager.h"
#include "blackberrysigningutils.h"
#include "qnxutils.h"
......
......@@ -31,7 +31,6 @@
#include "blackberrydeviceconnection.h"
#include "blackberryconfiguration.h"
#include "blackberryconfigurationmanager.h"
#include "qnxutils.h"
......
......@@ -114,7 +114,7 @@ void BlackBerryDeviceConnectionManager::connectDevice(Core::Id deviceId)
// BlackBerry Device connection needs the Qnx environments to be set
// in order to find the Connect.jar package.
// Let's delay the device connections at startup till the Qnx settings are loaded.
if (BlackBerryConfigurationManager::instance().configurations().isEmpty()) {
if (BlackBerryConfigurationManager::instance().apiLevels().isEmpty()) {
m_pendingDeviceConnections << device;
connect(&BlackBerryConfigurationManager::instance(), SIGNAL(settingsLoaded()),
this, SLOT(processPendingDeviceConnections()), Qt::UniqueConnection);
......@@ -308,7 +308,7 @@ void BlackBerryDeviceConnectionManager::handleProcessOutput(const QString &outpu
void BlackBerryDeviceConnectionManager::processPendingDeviceConnections()
{
if (m_pendingDeviceConnections.isEmpty()
|| BlackBerryConfigurationManager::instance().configurations().isEmpty())
|| BlackBerryConfigurationManager::instance().apiLevels().isEmpty())
return;
foreach (ProjectExplorer::IDevice::ConstPtr device, m_pendingDeviceConnections)
......
......@@ -31,7 +31,7 @@
#include "blackberryinstallwizardpages.h"
#include "blackberryconfigurationmanager.h"
#include "blackberryconfiguration.h"
#include "blackberryapilevelconfiguration.h"
#include "ui_blackberryinstallwizardoptionpage.h"
#include "ui_blackberryinstallwizardtargetpage.h"
......@@ -482,7 +482,7 @@ void BlackBerryInstallWizardProcessPage::processTarget()
// deactivate target if activated before uninstalling
if (m_data.mode == BlackBerryInstallerDataHandler::UninstallMode) {
foreach (BlackBerryConfiguration *config, BlackBerryConfigurationManager::instance().configurations()) {
foreach (BlackBerryApiLevelConfiguration *config, BlackBerryConfigurationManager::instance().apiLevels()) {
if (m_data.target.contains((config->targetName())) && config->isActive()) {
config->deactivate();
break;
......@@ -519,11 +519,12 @@ void BlackBerryInstallWizardFinalPage::initializePage()
if (m_data.mode == BlackBerryInstallerDataHandler::ManuallMode) {
BlackBerryConfigurationManager &configManager = BlackBerryConfigurationManager::instance();
BlackBerryConfiguration *config = configManager.configurationFromEnvFile(Utils::FileName::fromString(m_data.ndkPath));
BlackBerryApiLevelConfiguration *config =
configManager.apiLevelFromEnvFile(Utils::FileName::fromString(m_data.ndkPath));
if (!config) {
config = new BlackBerryConfiguration(Utils::FileName::fromString(m_data.ndkPath));
if (!configManager.addConfiguration(config)) {
config = new BlackBerryApiLevelConfiguration(Utils::FileName::fromString(m_data.ndkPath));
if (!configManager.addApiLevel(config)) {
delete config;
// TODO: more explicit error message!
label->setText(tr("An error has occurred while adding target from:\n %1").arg(m_data.ndkPath));
......
......@@ -32,8 +32,6 @@
#ifndef BLACKBERRYKEYSWIDGET_H_H
#define BLACKBERRYKEYSWIDGET_H_H
#include "blackberryconfiguration.h"
#include <QWidget>
#include <QString>
......
......@@ -30,7 +30,6 @@
****************************************************************************/
#include "blackberryndkprocess.h"
#include "blackberryconfiguration.h"
#include "blackberryconfigurationmanager.h"
#include <utils/hostosinfo.h>
......
......@@ -32,7 +32,7 @@
#include "blackberryndksettingspage.h"
#include "blackberryndksettingswidget.h"
#include "blackberryconfigurationmanager.h"
#include "blackberryconfiguration.h"
#include "blackberryapilevelconfiguration.h"
#include "qnxconstants.h"
#include <projectexplorer/projectexplorerconstants.h>
......@@ -46,7 +46,7 @@ BlackBerryNDKSettingsPage::BlackBerryNDKSettingsPage(QObject *parent) :
Core::IOptionsPage(parent)
{
setId(Core::Id(Constants::QNX_BB_NDK_SETTINGS_ID));
setDisplayName(tr("API Level"));
setDisplayName(tr("API Levels and Runtimes"));
setCategory(Constants::QNX_BB_CATEGORY);
setDisplayCategory(QCoreApplication::translate("BlackBerry",
Constants::QNX_BB_CATEGORY_TR));
......@@ -62,19 +62,19 @@ QWidget *BlackBerryNDKSettingsPage::widget()
void BlackBerryNDKSettingsPage::apply()
{
foreach (BlackBerryConfiguration* config, m_widget->activatedTargets()) {
foreach (BlackBerryApiLevelConfiguration* config, m_widget->activatedApiLevels()) {
if (!config->isActive())
config->activate();
}
foreach (BlackBerryConfiguration* config, m_widget->deactivatedTargets()) {
foreach (BlackBerryApiLevelConfiguration* config, m_widget->deactivatedApiLevels()) {
if (config->isActive())
config->deactivate();
}
BlackBerryConfigurationManager &manager = BlackBerryConfigurationManager::instance();
manager.setDefaultConfiguration(m_widget->defaultConfiguration());
manager.setDefaultConfiguration(m_widget->defaultApiLevel());
}
void BlackBerryNDKSettingsPage::finish()
......
......@@ -45,7 +45,7 @@ QT_END_NAMESPACE
namespace Qnx {
namespace Internal {
class BlackBerryConfiguration;
class BlackBerryApiLevelConfiguration;
class BlackBerryConfigurationManager;
class Ui_BlackBerryNDKSettingsWidget;
......@@ -57,41 +57,45 @@ public:
bool hasActiveNdk() const;
QList<BlackBerryConfiguration *> activatedTargets();
QList<BlackBerryConfiguration *> deactivatedTargets();
QList<BlackBerryApiLevelConfiguration *> activatedApiLevels();
QList<BlackBerryApiLevelConfiguration *> deactivatedApiLevels();
BlackBerryConfiguration *defaultConfiguration() const;
BlackBerryApiLevelConfiguration *defaultApiLevel() const;
signals:
void targetsUpdated();
void configurationsUpdated();
public slots:
void updateInfoTable(QTreeWidgetItem* currentItem);
void updateNdkList();
void addNdkTarget();
void removeNdkTarget();
void activateNdkTarget();
void deactivateNdkTarget();
void uninstallNdkTarget();
void updateConfigurationList();
void addConfiguration();
void removeConfiguration();
void activateApiLevel();
void deactivateApiLevel();
void uninstallConfiguration(BlackBerryInstallerDataHandler::Target target);
void cleanUp();
void handleInstallationFinished();
void handleUninstallationFinished();
void updateUi(QTreeWidgetItem* item, BlackBerryConfiguration* config);
void updateUi(QTreeWidgetItem* item);
void populateDefaultConfigurationCombo();
void updatePage();
private:
void launchBlackBerryInstallerWizard(BlackBerryInstallerDataHandler::Mode mode,
BlackBerryInstallerDataHandler::Target target,
const QString& tagetVersion = QString());
Ui_BlackBerryNDKSettingsWidget *m_ui;
BlackBerryConfigurationManager &m_bbConfigManager;
QTreeWidgetItem *m_apiLevels;
QTreeWidgetItem *m_runtimes;
QTreeWidgetItem *m_autoDetectedNdks;
QTreeWidgetItem *m_manualNdks;
QTreeWidgetItem *m_manualApiLevel;
QList<BlackBerryConfiguration *> m_activatedTargets;
QList<BlackBerryConfiguration *> m_deactivatedTargets;
QList<BlackBerryApiLevelConfiguration *> m_activatedApiLevel;
QList<BlackBerryApiLevelConfiguration *> m_deactivatedApiLevel;
QTimer m_timer;
};
......
......@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>773</width>
<height>495</height>
<height>412</height>
</rect>
</property>
<property name="windowTitle">
......@@ -55,14 +55,14 @@
<item row="1" column="1" rowspan="2">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QPushButton" name="addNdkButton">
<widget class="QPushButton" name="addConfigButton">
<property name="text">
<string>Add</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="removeNdkButton">
<widget class="QPushButton" name="removeConfigButton">
<property name="text">
<string>Remove</string>
</property>
......@@ -139,60 +139,77 @@
<item row="2" column="0">
<widget class="QGroupBox" name="informationBox">
<property name="title">
<string>API Level Information</string>
<string>GroupBox</string>
</property>
<layout class="QFormLayout" name="formLayout">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<item row="2" column="0">
<widget class="QLabel" name="pathLabel">
<property name="text">
<string>Path:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="versionLabel">
<widget class="QLabel" name="path">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<item row="3" column="0">
<widget class="QLabel" name="baseNameLabel">
<property name="text">
<string>Name:</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<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="3" column="1">
<item row="5" column="0">
<widget class="QLabel" name="hostLabel">
<property name="text">
<string/>
<string>Host:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="baseNameLabel">
<item row="5" column="1">
<widget class="QLabel" name="host">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_4">
<item row="6" column="0">
<widget class="QLabel" name="targetLabel">
<property name="text">
<string>Host:</string>
<string>Target:</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_5">
<item row="6" column="1">
<widget class="QLabel" name="target">
<property name="text">
<string>Target:</string>
<string/>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLabel" name="targetLabel">
<widget class="QLabel" name="version">
<property name="text">
<string/>
</property>
......
/**************************************************************************
**
** 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