diff options
author | El Mehdi Fekari <mfekari@rim.com> | 2013-09-12 18:35:41 +0200 |
---|---|---|
committer | Mehdi Fekari <mfekari@blackberry.com> | 2013-10-01 11:22:41 +0200 |
commit | 59a578d4a9de614c5597589f10235d07d5ea734f (patch) | |
tree | 9f273b48f35b83c474e7c8f5c9c63aa3328ea10e | |
parent | 668a50b775e14f9b0f644eeef2cc493071bd71c9 (diff) | |
download | qt-creator-59a578d4a9de614c5597589f10235d07d5ea734f.tar.gz |
Qnx: Install/uninstall NDK targets
Basic implementation of an install/uninstall targets utility.
Note: This does not support 10.1 NKDs.
Change-Id: I3bb29ef467dd24a121ee59e11abb2237dcff696a
Reviewed-by: Nicolas Arnaud-Cormos <nicolas@kdab.com>
-rw-r--r-- | src/plugins/qnx/blackberryconfigurationmanager.h | 3 | ||||
-rw-r--r-- | src/plugins/qnx/blackberryinstallwizard.cpp | 90 | ||||
-rw-r--r-- | src/plugins/qnx/blackberryinstallwizard.h | 100 | ||||
-rw-r--r-- | src/plugins/qnx/blackberryinstallwizardndkpage.ui | 31 | ||||
-rw-r--r-- | src/plugins/qnx/blackberryinstallwizardpages.cpp | 499 | ||||
-rw-r--r-- | src/plugins/qnx/blackberryinstallwizardpages.h | 187 | ||||
-rw-r--r-- | src/plugins/qnx/blackberryinstallwizardprocesspage.ui | 48 | ||||
-rw-r--r-- | src/plugins/qnx/blackberryinstallwizardtargetpage.ui | 37 | ||||
-rw-r--r-- | src/plugins/qnx/blackberryndksettingswidget.cpp | 125 | ||||
-rw-r--r-- | src/plugins/qnx/blackberryndksettingswidget.h | 14 | ||||
-rw-r--r-- | src/plugins/qnx/blackberryndksettingswidget.ui | 2 | ||||
-rw-r--r-- | src/plugins/qnx/qnx.pro | 10 | ||||
-rw-r--r-- | src/plugins/qnx/qnx.qbs | 9 | ||||
-rw-r--r-- | src/plugins/qnx/qnxutils.cpp | 29 | ||||
-rw-r--r-- | src/plugins/qnx/qnxutils.h | 6 |
15 files changed, 1137 insertions, 53 deletions
diff --git a/src/plugins/qnx/blackberryconfigurationmanager.h b/src/plugins/qnx/blackberryconfigurationmanager.h index ea94d90741..97603ee81a 100644 --- a/src/plugins/qnx/blackberryconfigurationmanager.h +++ b/src/plugins/qnx/blackberryconfigurationmanager.h @@ -65,6 +65,8 @@ public: QMultiMap<QString, QString> defaultQnxEnv(); + void loadAutoDetectedConfigurations(); + public slots: void loadSettings(); void saveSettings(); @@ -78,7 +80,6 @@ private: QList<BlackBerryConfiguration*> m_configs; void loadManualConfigurations(); - void loadAutoDetectedConfigurations(); void saveManualConfigurations(); void saveActiveConfigurationNdkEnvPath(); void clearInvalidConfigurations(); diff --git a/src/plugins/qnx/blackberryinstallwizard.cpp b/src/plugins/qnx/blackberryinstallwizard.cpp new file mode 100644 index 0000000000..ffa3076fe7 --- /dev/null +++ b/src/plugins/qnx/blackberryinstallwizard.cpp @@ -0,0 +1,90 @@ +/************************************************************************** +** +** Copyright (C) 2013 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 "blackberryinstallwizard.h" +#include "blackberryinstallwizardpages.h" + +#include <QAbstractButton> + +#include <QMessageBox> + +using namespace Qnx; +using namespace Qnx::Internal; + +BlackBerryInstallWizard::BlackBerryInstallWizard(BlackBerryInstallerDataHandler::Mode mode, + const QString& version, + QWidget *parent) + : QWizard(parent) + , m_ndkPage(0) + , m_targetPage(0) +{ + setWindowTitle(tr("BlackBerry NDK Installation Wizard")); + + m_data.mode = mode; + m_data.version = version; + + if (m_data.mode != BlackBerryInstallerDataHandler::UninstallMode) { + m_optionPage = new BlackBerryInstallWizardOptionPage(m_data, this); + m_ndkPage = new BlackBerryInstallWizardNdkPage(m_data, this); + m_targetPage = new BlackBerryInstallWizardTargetPage(m_data, this); + setPage(OptionPage, m_optionPage); + setPage(NdkPageId, m_ndkPage); + setPage(TargetPageId, m_targetPage); + } + + m_processPage = new BlackBerryInstallWizardProcessPage(m_data, this); + m_finalPage = new BlackBerryInstallWizardFinalPage(m_data, this); + + connect(m_finalPage, SIGNAL(done()), this, SIGNAL(processFinished())); + disconnect(button(CancelButton), SIGNAL(clicked()), this, SLOT(reject())); + connect(button(CancelButton), SIGNAL(clicked()), this, SLOT(handleProcessCancelled())); + + setPage(ProcessPageId, m_processPage); + setPage(FinalPageId, m_finalPage); + + m_finalPage->setCommitPage(true); + + setOption(DisabledBackButtonOnLastPage, true); +} + +void BlackBerryInstallWizard::handleProcessCancelled() +{ + if ((m_targetPage && m_targetPage->isProcessRunning()) + || m_processPage->isProcessRunning()) { + const QMessageBox::StandardButton answer = QMessageBox::question(this, tr("Confirmation"), + tr("Are you sure you want to cancel?"), + QMessageBox::Yes | QMessageBox::No); + if (answer == QMessageBox::No) + return; + } + + reject(); +} diff --git a/src/plugins/qnx/blackberryinstallwizard.h b/src/plugins/qnx/blackberryinstallwizard.h new file mode 100644 index 0000000000..b81a26e636 --- /dev/null +++ b/src/plugins/qnx/blackberryinstallwizard.h @@ -0,0 +1,100 @@ +/************************************************************************** +** +** Copyright (C) 2013 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 QNX_INTERNAL_BLACKBERRYDEVICECONFIGURATIONWIZARD_H +#define QNX_INTERNAL_BLACKBERRYDEVICECONFIGURATIONWIZARD_H + +#include <QProcess> + +#include <QWizard> + +namespace Qnx { +namespace Internal { + +class BlackBerryInstallWizardOptionPage; +class BlackBerryInstallWizardNdkPage; +class BlackBerryInstallWizardTargetPage; +class BlackBerryInstallWizardProcessPage; +class BlackBerryInstallWizardFinalPage; + +class BlackBerryInstallerDataHandler { +public: + enum Mode { + InstallMode, + UninstallMode, + ManuallMode + }; + + QString ndkPath; + QString target; + QString version; + int exitCode; + QProcess::ExitStatus exitStatus; + Mode mode; +}; + +class BlackBerryInstallWizard : public QWizard +{ + Q_OBJECT +public: + enum PageId { + OptionPage, + NdkPageId, + TargetPageId, + ProcessPageId, + FinalPageId + }; + + explicit BlackBerryInstallWizard(BlackBerryInstallerDataHandler::Mode mode = BlackBerryInstallerDataHandler::InstallMode, + const QString& version = QString(), + QWidget *parent = 0); + +signals: + void processFinished(); + +private slots: + void handleProcessCancelled(); + +private: + + BlackBerryInstallWizardOptionPage *m_optionPage; + BlackBerryInstallWizardNdkPage *m_ndkPage; + BlackBerryInstallWizardTargetPage *m_targetPage; + BlackBerryInstallWizardProcessPage *m_processPage; + BlackBerryInstallWizardFinalPage *m_finalPage; + + BlackBerryInstallerDataHandler m_data; +}; + +} // namespace Internal +} // namespace Qnx + +#endif // QNX_INTERNAL_BLACKBERRYDEVICECONFIGURATIONWIZARD_H diff --git a/src/plugins/qnx/blackberryinstallwizardndkpage.ui b/src/plugins/qnx/blackberryinstallwizardndkpage.ui new file mode 100644 index 0000000000..321892e584 --- /dev/null +++ b/src/plugins/qnx/blackberryinstallwizardndkpage.ui @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Qnx::Internal::BlackBerryInstallWizardNdkPage</class> + <widget class="QWidget" name="Qnx::Internal::BlackBerryInstallWizardNdkPage"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>300</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Select NDK Path</string> + </property> + </widget> + </item> + <item> + <widget class="QListWidget" name="ndkPathListWidget"/> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src/plugins/qnx/blackberryinstallwizardpages.cpp b/src/plugins/qnx/blackberryinstallwizardpages.cpp new file mode 100644 index 0000000000..442f91feec --- /dev/null +++ b/src/plugins/qnx/blackberryinstallwizardpages.cpp @@ -0,0 +1,499 @@ +/************************************************************************** +** +** Copyright (C) 2013 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 "blackberryinstallwizardpages.h" +#include "blackberryconfigurationmanager.h" +#include "blackberryconfiguration.h" + +#include "ui_blackberryinstallwizardtargetpage.h" +#include "ui_blackberryinstallwizardprocesspage.h" +#include "ui_blackberryinstallwizardndkpage.h" + +#include "qnxutils.h" + +#include <utils/synchronousprocess.h> +#include <utils/pathchooser.h> + +#include <QProcess> + +#include <QTreeWidgetItem> + +#include <QFileInfo> +#include <QDir> + +#include <QMessageBox> +#include <QLayout> +#include <QRadioButton> + +namespace Qnx { +namespace Internal { + +namespace { +const QLatin1String targetKeyWord("Native SDK"); +} + +NdkPathChooser::NdkPathChooser(Mode mode, QWidget *parent) + : Utils::PathChooser(parent) + , m_mode(mode) +{ + if (m_mode == NdkPathChooser::InstallMode) + setExpectedKind(Utils::PathChooser::Directory); + else + setExpectedKind(Utils::PathChooser::File); +} + +bool NdkPathChooser::validatePath(const QString &path, QString *errorMessage) +{ + bool result = PathChooser::validatePath(path, errorMessage); + if (!result) + return false; + + if (m_mode == NdkPathChooser::InstallMode) + return !(QnxUtils::sdkInstallerPath(path).isEmpty()); + + QFileInfo fi(path); + return (fi.suffix() == QLatin1String("sh") || fi.suffix() == QLatin1String("bat")); +} + +//------------------------------------------------------------------ + +BlackBerryInstallWizardOptionPage::BlackBerryInstallWizardOptionPage(BlackBerryInstallerDataHandler &data, + QWidget *parent) + : QWizardPage(parent) + , m_layout(new QVBoxLayout(this)) + , m_installButton(new QRadioButton) + , m_addButton(new QRadioButton) + , m_envFileChooser(new NdkPathChooser(NdkPathChooser::ManualMode)) + , m_data(data) +{ + connect(m_addButton, SIGNAL(toggled(bool)), this, SLOT(handleOptionChanged())); + connect(m_envFileChooser, SIGNAL(pathChanged(QString)), this, SLOT(handlePathChanged(QString))); +} + +void BlackBerryInstallWizardOptionPage::initializePage() +{ + m_installButton->setText(tr("Install a new target")); + m_addButton->setText(tr("Add an existing target")); + + if (m_data.mode == BlackBerryInstallerDataHandler::ManuallMode) + m_addButton->setChecked(true); + else + m_installButton->setChecked(true); + + m_envFileChooser->setEnabled(m_addButton->isChecked()); + + m_layout->addWidget(m_installButton); + m_layout->addWidget(m_addButton); + m_layout->addWidget(m_envFileChooser); +} + +bool BlackBerryInstallWizardOptionPage::isComplete() const +{ + return (m_installButton->isChecked() + || (m_addButton->isChecked() && m_envFileChooser->isValid())); +} + +int BlackBerryInstallWizardOptionPage::nextId() const +{ + if (m_addButton->isChecked()) + return BlackBerryInstallWizard::FinalPageId; + + return BlackBerryInstallWizard::NdkPageId; +} + +void BlackBerryInstallWizardOptionPage::handleOptionChanged() +{ + if (m_addButton->isChecked()) + m_data.mode = BlackBerryInstallerDataHandler::ManuallMode; + else + m_data.mode = BlackBerryInstallerDataHandler::InstallMode; + + m_envFileChooser->setEnabled(m_addButton->isChecked()); + emit completeChanged(); +} + +void BlackBerryInstallWizardOptionPage::handlePathChanged(const QString &envFilePath) +{ + if (m_envFileChooser->isValid()) + m_data.ndkPath = envFilePath; + + emit completeChanged(); +} + +//------------------------------------------------------------------ + +BlackBerryInstallWizardNdkPage::BlackBerryInstallWizardNdkPage(BlackBerryInstallerDataHandler &data, QWidget *parent) + : QWizardPage(parent) + , m_ui(new Ui_BlackBerryInstallWizardNdkPage) + , m_data(data) + , m_ndkPathChooser(new NdkPathChooser(NdkPathChooser::InstallMode)) + , m_manual(new QListWidgetItem) + , m_validNdkPath(false) +{ + m_ui->setupUi(this); + m_ui->verticalLayout->addWidget(m_ndkPathChooser); + connect(m_ui->ndkPathListWidget, SIGNAL(itemSelectionChanged()), this, SLOT(setNdkPath())); + connect(m_ndkPathChooser, SIGNAL(pathChanged(QString)), this, SLOT(setManualNdkPath())); +} + +BlackBerryInstallWizardNdkPage::~BlackBerryInstallWizardNdkPage() +{ + delete m_ui; +} + +void BlackBerryInstallWizardNdkPage::initializePage() +{ + m_manual->setText(tr("Specify 10.2 NDK path manually")); + m_ui->ndkPathListWidget->addItem(m_manual); + m_manual->setSelected(true); + QFont font; + font.setItalic(true); + m_manual->setFont(font); + foreach (const NdkInstallInformation &ndk, QnxUtils::installedNdks()) { + bool found = false; + for (int i = 0; i < m_ui->ndkPathListWidget->count(); i++) { + QListWidgetItem* item = m_ui->ndkPathListWidget->item(i); + if (item->text() == ndk.path) { + found = true; + break; + } + } + + if (found) + continue; + + if (!QnxUtils::sdkInstallerPath(ndk.path).isEmpty()) { + QListWidgetItem *ndkItem = new QListWidgetItem(m_ui->ndkPathListWidget); + ndkItem->setText(ndk.path); + } + } +} + +void BlackBerryInstallWizardNdkPage::setNdkPath() +{ + if (m_ui->ndkPathListWidget->selectedItems().isEmpty()) + return; + + m_ndkPathChooser->setEnabled(m_manual->isSelected()); + QString selected = m_ui->ndkPathListWidget->selectedItems().first()->text(); + if (!QnxUtils::sdkInstallerPath(selected).isEmpty()) { + m_validNdkPath = true; + m_data.ndkPath = selected; + } else { + m_validNdkPath = false; + } + + emit completeChanged(); +} + +void BlackBerryInstallWizardNdkPage::setManualNdkPath() +{ + if (m_ndkPathChooser->isValid()) { + m_validNdkPath = true; + m_data.ndkPath = m_ndkPathChooser->path(); + } else { + m_validNdkPath = false; + } + + emit completeChanged(); +} + +bool BlackBerryInstallWizardNdkPage::isComplete() const +{ + return m_validNdkPath; +} + +//------------------------------------------------------------------ + +BlackBerryInstallWizardTargetPage::BlackBerryInstallWizardTargetPage(BlackBerryInstallerDataHandler &data, + QWidget *parent) + : QWizardPage(parent) + , m_data(data) + , m_ui(new Ui_BlackBerryInstallWizardTargetPage) + , m_isTargetValid(false) + , m_targetListProcess(new QProcess(this)) +{ + m_ui->setupUi(this); + + connect(m_targetListProcess, SIGNAL(finished(int, QProcess::ExitStatus)), + this, SLOT(targetsListProcessFinished())); + connect(m_ui->targetsTreeWidget, SIGNAL(itemSelectionChanged()), this, SLOT(setTarget())); +} + +BlackBerryInstallWizardTargetPage::~BlackBerryInstallWizardTargetPage() +{ + Utils::SynchronousProcess::stopProcess(*m_targetListProcess); + delete m_ui; +} + +void BlackBerryInstallWizardTargetPage::initializePage() +{ + // process may be running if going back and forth + if (m_targetListProcess->state() == QProcess::Running) { + disconnect(m_targetListProcess, SIGNAL(finished(int, QProcess::ExitStatus)), + this, SLOT(targetsListProcessFinished())); + Utils::SynchronousProcess::stopProcess(*m_targetListProcess); + connect(m_targetListProcess, SIGNAL(finished(int, QProcess::ExitStatus)), + this, SLOT(targetsListProcessFinished())); + } + + updateAvailableTargetsList(); +} + +bool BlackBerryInstallWizardTargetPage::isComplete() const +{ + return m_isTargetValid; +} + +bool BlackBerryInstallWizardTargetPage::isProcessRunning() const +{ + return (m_targetListProcess->state() == QProcess::Running); +} + +void BlackBerryInstallWizardTargetPage::targetsListProcessFinished() +{ + initTargetsTreeWidget(); + QString output = Utils::SynchronousProcess::normalizeNewlines(QString::fromLatin1(m_targetListProcess->readAll())); + QList<QString> targetList = output.split(QLatin1Char('\n')); + m_ui->targetsTreeWidget->clear(); + foreach (const QString &target, targetList) { + if (!target.isEmpty() && target.contains(targetKeyWord)) { + QTreeWidgetItem *item = new QTreeWidgetItem(m_ui->targetsTreeWidget); + QStringList res = target.split(QLatin1Char('-')); + if (res.count() > 1) { + item->setText(0, res.at(0)); + item->setText(1, res.at(1)); + } + } + } + + m_ui->targetsTreeWidget->sortByColumn(0, Qt::DescendingOrder); + +} + +void BlackBerryInstallWizardTargetPage::setTarget() +{ + if (m_ui->targetsTreeWidget->selectedItems().isEmpty()) + return; + + QString version = m_ui->targetsTreeWidget->selectedItems().first()->text(0); + QString target = m_ui->targetsTreeWidget->selectedItems().first()->text(1); + if (target.contains(targetKeyWord)) { + m_data.target = target; + m_data.version = version; + m_isTargetValid = true; + } else { + m_isTargetValid = false; + } + + emit completeChanged(); +} + +void BlackBerryInstallWizardTargetPage::initTargetsTreeWidget() +{ + m_ui->targetsTreeWidget->clear(); + m_ui->targetsTreeWidget->setHeaderHidden(false); + m_ui->targetsTreeWidget->header()->setResizeMode(QHeaderView::ResizeToContents); + m_ui->targetsTreeWidget->setHeaderItem(new QTreeWidgetItem(QStringList() << tr("Version") << tr("Target"))); + m_ui->targetsTreeWidget->setTextElideMode(Qt::ElideNone); + m_ui->targetsTreeWidget->setColumnCount(2); +} + +void BlackBerryInstallWizardTargetPage::updateAvailableTargetsList() +{ + m_ui->targetsTreeWidget->clear(); + m_ui->targetsTreeWidget->setHeaderHidden(true); + QTreeWidgetItem *item = new QTreeWidgetItem(m_ui->targetsTreeWidget); + item->setText(0, tr("Querying available targets. Please wait..")); + QFont font; + font.setItalic(true); + item->setFont(0, font); + QString qdeProcess = QnxUtils::qdeInstallProcess(m_data.ndkPath, QLatin1String(" --list")); + QTC_ASSERT(!qdeProcess.isEmpty(), return); + m_targetListProcess->start(qdeProcess); +} + +//------------------------------------------------------------------ + +BlackBerryInstallWizardProcessPage::BlackBerryInstallWizardProcessPage(BlackBerryInstallerDataHandler &data, + QWidget *parent) + : QWizardPage(parent) + , m_ui(new Ui_BlackBerryInstallWizardProcessPage) + , m_data(data) + , m_targetProcess(new QProcess(this)) +{ + m_ui->setupUi(this); + connect(m_targetProcess, SIGNAL(finished(int, QProcess::ExitStatus)), + this, SLOT(handleProcessFinished(int, QProcess::ExitStatus))); +} + +BlackBerryInstallWizardProcessPage::~BlackBerryInstallWizardProcessPage() +{ + Utils::SynchronousProcess::stopProcess(*m_targetProcess); + delete m_ui; +} + +void BlackBerryInstallWizardProcessPage::initializePage() +{ + if (m_data.mode == BlackBerryInstallerDataHandler::UninstallMode) { + if (m_data.version.isEmpty()) { + wizard()->next(); + return; + } + + foreach (const NdkInstallInformation &ndk, QnxUtils::installedNdks()) { + if (ndk.version == m_data.version) { + m_data.ndkPath = ndk.path; + m_data.target = ndk.name; + break; + } + } + + m_ui->label->setText(tr("Uninstalling target:\n") + m_data.target); + } else { + m_ui->label->setText(tr("Installing target:\n") + m_data.target); + } + // m_targetProcess could be running + if (m_targetProcess->state() == QProcess::Running) { + disconnect(m_targetProcess, SIGNAL(finished(int, QProcess::ExitStatus)), + this, SLOT(handleProcessFinished(int, QProcess::ExitStatus))); + Utils::SynchronousProcess::stopProcess(*m_targetProcess); + connect(m_targetProcess, SIGNAL(finished(int, QProcess::ExitStatus)), + this, SLOT(handleProcessFinished(int, QProcess::ExitStatus))); + } + + processTarget(); +} + +bool BlackBerryInstallWizardProcessPage::isComplete() const +{ + return false; +} + +bool BlackBerryInstallWizardProcessPage::isProcessRunning() const +{ + return (m_targetProcess->state() == QProcess::Running); +} + +void BlackBerryInstallWizardProcessPage::handleProcessFinished(int exitCode, QProcess::ExitStatus exitStatus) +{ + m_data.exitCode = exitCode; + m_data.exitStatus = exitStatus; + + if (wizard()->currentPage() == this) + wizard()->next(); +} + +void BlackBerryInstallWizardProcessPage::processTarget() +{ + QString option; + if (m_data.mode == BlackBerryInstallerDataHandler::UninstallMode) + option = QLatin1String(" --uninstall"); + else + option = QLatin1String(" --install"); + + QString version = m_data.version; + QTC_ASSERT(!version.isEmpty(), return); + + // deactivate target if activated before uninstalling + if (m_data.mode == BlackBerryInstallerDataHandler::UninstallMode) { + foreach (BlackBerryConfiguration *config, BlackBerryConfigurationManager::instance().configurations()) { + if (m_data.target.contains((config->targetName())) && config->isActive()) { + config->deactivate(); + break; + } + } + } + + // Killing the sdkinstall process won't kill the qde process it launched + // thus, let's directly launch the resulting qde process + QString qdeProcess = QnxUtils::qdeInstallProcess(m_data.ndkPath, option, version); + QTC_ASSERT(!qdeProcess.isEmpty(), return); + m_targetProcess->start(qdeProcess); + + m_ui->progressBar->setMaximum(0); + m_ui->progressBar->setMinimum(0); + m_ui->progressBar->setValue(0); +} + +// -------------------------------------------------------------------------------- + +BlackBerryInstallWizardFinalPage::BlackBerryInstallWizardFinalPage(BlackBerryInstallerDataHandler &data, + QWidget *parent) + : QWizardPage(parent) + , m_data(data) +{ +} + +void BlackBerryInstallWizardFinalPage::initializePage() +{ + QVBoxLayout *layout = new QVBoxLayout(this); + QLabel *label = new QLabel(this); + layout->addWidget(label); + + if (m_data.mode == BlackBerryInstallerDataHandler::ManuallMode) { + BlackBerryConfigurationManager &configManager = BlackBerryConfigurationManager::instance(); + BlackBerryConfiguration *config = configManager.configurationFromEnvFile(Utils::FileName::fromString(m_data.ndkPath)); + + if (!config) { + config = new BlackBerryConfiguration(Utils::FileName::fromString(m_data.ndkPath), false); + if (!configManager.addConfiguration(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)); + return; + } + + label->setText(tr("Target is being added.").arg(m_data.ndkPath)); + emit done(); + return; + } else { + label->setText(tr("Target is already added.").arg(m_data.ndkPath)); + return; + } + } + + QString actionMsg; + if (m_data.mode == BlackBerryInstallerDataHandler::UninstallMode) + actionMsg = tr("uninstalling"); + else + actionMsg = tr("installing"); + + if (m_data.exitCode == 0 && m_data.exitStatus == QProcess::NormalExit) { + label->setText(tr("Finished %1 target:\n %2").arg(actionMsg, m_data.target)); + emit done(); + } else { + label->setText(tr("An error has occurred while %1 target:\n %2").arg(actionMsg, m_data.target)); + } +} + +} // namespace Internal +} // namespace Qnx diff --git a/src/plugins/qnx/blackberryinstallwizardpages.h b/src/plugins/qnx/blackberryinstallwizardpages.h new file mode 100644 index 0000000000..4a8c084b63 --- /dev/null +++ b/src/plugins/qnx/blackberryinstallwizardpages.h @@ -0,0 +1,187 @@ +/************************************************************************** +** +** Copyright (C) 2013 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 QNX_INTERNAL_BLACKBERRYINSTALLWIZARDPAGES_H +#define QNX_INTERNAL_BLACKBERRYINSTALLWIZARDPAGES_H + +#include <QWizardPage> +#include <QListWidgetItem> + +#include "blackberryinstallwizard.h" + +#include <utils/pathchooser.h> + +QT_BEGIN_NAMESPACE +class QProcess; +class QRadioButton; +class QVBoxLayout; +QT_END_NAMESPACE + +namespace Qnx { +namespace Internal { + +class Ui_BlackBerryInstallWizardNdkPage; +class Ui_BlackBerryInstallWizardTargetPage; +class Ui_BlackBerryInstallWizardProcessPage; + +class NdkPathChooser : public Utils::PathChooser +{ + Q_OBJECT +public: + enum Mode { + InstallMode, // Select a valid 10.2 NDK path + ManualMode // Select a target bbnk-env file path + }; + + NdkPathChooser(Mode mode, QWidget *parent = 0); + virtual bool validatePath(const QString &path, QString *errorMessage); + +private: + Mode m_mode; +}; + +class BlackBerryInstallWizardOptionPage : public QWizardPage +{ + Q_OBJECT + +public: + explicit BlackBerryInstallWizardOptionPage(BlackBerryInstallerDataHandler &data, QWidget *parent = 0); + void initializePage(); + bool isComplete() const; + int nextId() const; + +protected slots: + void handleOptionChanged(); + void handlePathChanged(const QString &envFilePath); + +signals: + void installModeChanged(); + +private: + QVBoxLayout *m_layout; + QRadioButton* m_installButton; + QRadioButton* m_addButton; + NdkPathChooser* m_envFileChooser; + BlackBerryInstallerDataHandler &m_data; +}; + +class BlackBerryInstallWizardNdkPage : public QWizardPage +{ + Q_OBJECT + +public: + explicit BlackBerryInstallWizardNdkPage(BlackBerryInstallerDataHandler &data, QWidget *parent = 0); + ~BlackBerryInstallWizardNdkPage(); + void initializePage(); + bool isComplete() const; + +protected slots: + void setNdkPath(); + void setManualNdkPath(); + +private: + Ui_BlackBerryInstallWizardNdkPage *m_ui; + BlackBerryInstallerDataHandler &m_data; + NdkPathChooser* m_ndkPathChooser; + QListWidgetItem* m_manual; + bool m_validNdkPath; +}; + +class BlackBerryInstallWizardTargetPage : public QWizardPage +{ + Q_OBJECT + +public: + explicit BlackBerryInstallWizardTargetPage(BlackBerryInstallerDataHandler &data, QWidget *parent = 0); + ~BlackBerryInstallWizardTargetPage(); + + void initializePage(); + bool isComplete() const; + bool isProcessRunning() const; + +protected slots: + void targetsListProcessFinished(); + void setTarget(); + +private: + BlackBerryInstallerDataHandler &m_data; + Ui_BlackBerryInstallWizardTargetPage *m_ui; + bool m_isTargetValid; + QProcess *m_targetListProcess; + + void initTargetsTreeWidget(); + void updateAvailableTargetsList(); + +}; + +class BlackBerryInstallWizardProcessPage : public QWizardPage +{ + Q_OBJECT + +public: + explicit BlackBerryInstallWizardProcessPage(BlackBerryInstallerDataHandler &data, + QWidget *parent = 0); + ~BlackBerryInstallWizardProcessPage(); + + void initializePage(); + bool isComplete() const; + bool isProcessRunning() const; + +protected slots: + void handleProcessFinished(int exitCode, QProcess::ExitStatus exitStatus); + +private: + Ui_BlackBerryInstallWizardProcessPage *m_ui; + BlackBerryInstallerDataHandler &m_data; + QProcess *m_targetProcess; + + void processTarget(); +}; + +class BlackBerryInstallWizardFinalPage : public QWizardPage +{ + Q_OBJECT + +public: + explicit BlackBerryInstallWizardFinalPage(BlackBerryInstallerDataHandler &data, QWidget *parent = 0); + void initializePage(); + +signals: + void done(); + +private: + BlackBerryInstallerDataHandler &m_data; +}; + +} // namespace Internal +} // namespace Qnx + +#endif // QNX_INTERNAL_BLACKBERRYINSTALLWIZARDPAGES_H diff --git a/src/plugins/qnx/blackberryinstallwizardprocesspage.ui b/src/plugins/qnx/blackberryinstallwizardprocesspage.ui new file mode 100644 index 0000000000..02fe3f7643 --- /dev/null +++ b/src/plugins/qnx/blackberryinstallwizardprocesspage.ui @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Qnx::Internal::BlackBerryInstallWizardProcessPage</class> + <widget class="QWidget" name="Qnx::Internal::BlackBerryInstallWizardProcessPage"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>300</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Please wait...</string> + </property> + </widget> + </item> + <item> + <widget class="QProgressBar" name="progressBar"> + <property name="value"> + <number>24</number> + </property> + </widget> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src/plugins/qnx/blackberryinstallwizardtargetpage.ui b/src/plugins/qnx/blackberryinstallwizardtargetpage.ui new file mode 100644 index 0000000000..71591f2179 --- /dev/null +++ b/src/plugins/qnx/blackberryinstallwizardtargetpage.ui @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Qnx::Internal::BlackBerryInstallWizardTargetPage</class> + <widget class="QWidget" name="Qnx::Internal::BlackBerryInstallWizardTargetPage"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>543</width> + <height>373</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Please select target:</string> + </property> + </widget> + </item> + <item> + <widget class="QTreeWidget" name="targetsTreeWidget"> + <column> + <property name="text"> + <string notr="true">1</string> + </property> + </column> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src/plugins/qnx/blackberryndksettingswidget.cpp b/src/plugins/qnx/blackberryndksettingswidget.cpp index 862e478c99..8591234ea8 100644 --- a/src/plugins/qnx/blackberryndksettingswidget.cpp +++ b/src/plugins/qnx/blackberryndksettingswidget.cpp @@ -60,13 +60,28 @@ BlackBerryNDKSettingsWidget::BlackBerryNDKSettingsWidget(QWidget *parent) : m_bbConfigManager = &BlackBerryConfigurationManager::instance(); m_ui->setupUi(this); - m_ui->removeNdkButton->setEnabled(false); m_ui->activateNdkTargetButton->setEnabled(false); m_ui->deactivateNdkTargetButton->setEnabled(false); m_activatedTargets << m_bbConfigManager->activeConfigurations(); - initNdkList(); + m_ui->ndksTreeWidget->header()->setResizeMode(QHeaderView::Stretch); + m_ui->ndksTreeWidget->header()->setStretchLastSection(false); + m_ui->ndksTreeWidget->setHeaderItem(new QTreeWidgetItem(QStringList() << tr("NDK") << tr("NDK Environment File"))); + m_ui->ndksTreeWidget->setTextElideMode(Qt::ElideNone); + m_ui->ndksTreeWidget->setColumnCount(2); + m_autoDetectedNdks = new QTreeWidgetItem(m_ui->ndksTreeWidget); + m_autoDetectedNdks->setText(0, tr("Auto-Detected")); + m_autoDetectedNdks->setFirstColumnSpanned(true); + m_autoDetectedNdks->setFlags(Qt::ItemIsEnabled); + m_manualNdks = new QTreeWidgetItem(m_ui->ndksTreeWidget); + m_manualNdks->setText(0, tr("Manual")); + m_manualNdks->setFirstColumnSpanned(true); + m_manualNdks->setFlags(Qt::ItemIsEnabled); + + m_ui->ndksTreeWidget->expandAll(); + + updateNdkList(); connect(m_ui->wizardButton, SIGNAL(clicked()), this, SLOT(launchBlackBerrySetupWizard())); connect(m_ui->addNdkButton, SIGNAL(clicked()), this, SLOT(addNdkTarget())); @@ -146,13 +161,16 @@ void BlackBerryNDKSettingsWidget::updateInfoTable(QTreeWidgetItem* currentItem) void BlackBerryNDKSettingsWidget::updateNdkList() { + qDeleteAll(m_autoDetectedNdks->takeChildren()); + qDeleteAll(m_manualNdks->takeChildren()); + foreach (BlackBerryConfiguration *config, m_bbConfigManager->configurations()) { QTreeWidgetItem *parent = config->isAutoDetected() ? m_autoDetectedNdks : m_manualNdks; QTreeWidgetItem *item = new QTreeWidgetItem(parent); item->setText(0, config->displayName()); item->setText(1, config->ndkEnvFile().toString()); QFont font; - font.setBold(config->isActive()); + font.setBold(config->isActive() || m_activatedTargets.contains(config)); item->setFont(0, font); item->setFont(1, font); } @@ -165,25 +183,7 @@ void BlackBerryNDKSettingsWidget::updateNdkList() void BlackBerryNDKSettingsWidget::addNdkTarget() { - QString selectedPath = QFileDialog::getOpenFileName(0, tr("Select the NDK Environment file"), - QString(), tr("BlackBerry Environment File (*.sh *.bat)")); - if (selectedPath.isEmpty() || !QFileInfo(selectedPath).exists()) - return; - - BlackBerryConfiguration *config = m_bbConfigManager->configurationFromEnvFile(Utils::FileName::fromString(selectedPath)); - - if (!config) { - config = new BlackBerryConfiguration(Utils::FileName::fromString(selectedPath), false); - if (!m_bbConfigManager->addConfiguration(config)) { - delete config; - return; - } - - QTreeWidgetItem *item = new QTreeWidgetItem(m_manualNdks); - item->setText(0, selectedPath.split(QDir::separator()).last()); - item->setText(1, selectedPath); - updateInfoTable(item); - } + launchBlackBerryInstallerWizard(BlackBerryInstallerDataHandler::InstallMode); } void BlackBerryNDKSettingsWidget::removeNdkTarget() @@ -193,6 +193,16 @@ void BlackBerryNDKSettingsWidget::removeNdkTarget() 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; + + if (config->isAutoDetected()) { + uninstallNdkTarget(); + return; + } + QMessageBox::StandardButton button = QMessageBox::question(Core::ICore::mainWindow(), tr("Clean BlackBerry 10 Configuration"), @@ -200,11 +210,8 @@ void BlackBerryNDKSettingsWidget::removeNdkTarget() QMessageBox::Yes | QMessageBox::No); if (button == QMessageBox::Yes) { - BlackBerryConfiguration *config = m_bbConfigManager->configurationFromEnvFile(Utils::FileName::fromString(envFilePath)); - if (config) { - m_bbConfigManager->removeConfiguration(config); - m_manualNdks->removeChild(m_ui->ndksTreeWidget->currentItem()); - } + m_bbConfigManager->removeConfiguration(config); + m_manualNdks->removeChild(m_ui->ndksTreeWidget->currentItem()); } } @@ -255,30 +262,62 @@ void BlackBerryNDKSettingsWidget::updateUi(QTreeWidgetItem *item, BlackBerryConf m_ui->deactivateNdkTargetButton->setEnabled((m_activatedTargets.contains(config)) && m_activatedTargets.size() > 1 && config->isAutoDetected()); - m_ui->removeNdkButton->setEnabled(!config->isAutoDetected()); + m_ui->removeNdkButton->setEnabled(true); } -void BlackBerryNDKSettingsWidget::initNdkList() +void BlackBerryNDKSettingsWidget::uninstallNdkTarget() { - m_ui->ndksTreeWidget->header()->setResizeMode(QHeaderView::Stretch); - m_ui->ndksTreeWidget->header()->setStretchLastSection(false); - m_ui->ndksTreeWidget->setHeaderItem(new QTreeWidgetItem(QStringList() << tr("NDK") << tr("NDK Environment File"))); - m_ui->ndksTreeWidget->setTextElideMode(Qt::ElideNone); - m_ui->ndksTreeWidget->setColumnCount(2); - m_autoDetectedNdks = new QTreeWidgetItem(m_ui->ndksTreeWidget); - m_autoDetectedNdks->setText(0, tr("Auto-Detected")); - m_autoDetectedNdks->setFirstColumnSpanned(true); - m_autoDetectedNdks->setFlags(Qt::ItemIsEnabled); - m_manualNdks = new QTreeWidgetItem(m_ui->ndksTreeWidget); - m_manualNdks->setText(0, tr("Manual")); - m_manualNdks->setFirstColumnSpanned(true); - m_manualNdks->setFlags(Qt::ItemIsEnabled); + const QMessageBox::StandardButton answer = QMessageBox::question(this, tr("Confirmation"), + tr("Are you sure you want to uninstall %1?"). + arg(m_ui->baseNameLabel->text()), + QMessageBox::Yes | QMessageBox::No); - m_ui->ndksTreeWidget->expandAll(); + if (answer == QMessageBox::Yes) + launchBlackBerryInstallerWizard(BlackBerryInstallerDataHandler::UninstallMode, m_ui->versionLabel->text()); +} +void BlackBerryNDKSettingsWidget::handleInstallationFinished() +{ + m_bbConfigManager->loadAutoDetectedConfigurations(); updateNdkList(); } +void BlackBerryNDKSettingsWidget::handleUninstallationFinished() +{ + if (!m_ui->ndksTreeWidget->currentItem()) + return; + + QString targetName = m_ui->ndksTreeWidget->currentItem()->text(0); + QString envFilePath = m_ui->ndksTreeWidget->currentItem()->text(1); + // Check if the target is corrrecly uninstalled + foreach (const NdkInstallInformation &ndk, QnxUtils::installedNdks()) { + if (ndk.name == targetName) + return; + } + + BlackBerryConfiguration *config = m_bbConfigManager->configurationFromEnvFile(Utils::FileName::fromString(envFilePath)); + if (m_activatedTargets.contains(config)) + m_activatedTargets.removeAt(m_activatedTargets.indexOf(config)); + else if (m_deactivatedTargets.contains(config)) + m_deactivatedTargets.removeAt(m_deactivatedTargets.indexOf(config)); + + m_bbConfigManager->removeConfiguration(config); + + updateNdkList(); +} + +void BlackBerryNDKSettingsWidget::launchBlackBerryInstallerWizard(BlackBerryInstallerDataHandler::Mode mode, + const QString& targetVersion) +{ + BlackBerryInstallWizard wizard(mode, targetVersion, this); + if (mode == BlackBerryInstallerDataHandler::InstallMode) + connect(&wizard, SIGNAL(processFinished()), this, SLOT(handleInstallationFinished())); + else + connect(&wizard, SIGNAL(processFinished()), this, SLOT(handleUninstallationFinished())); + + wizard.exec(); +} + } // namespace Internal } // namespace Qnx diff --git a/src/plugins/qnx/blackberryndksettingswidget.h b/src/plugins/qnx/blackberryndksettingswidget.h index 0ae1fa0972..4bacfa5413 100644 --- a/src/plugins/qnx/blackberryndksettingswidget.h +++ b/src/plugins/qnx/blackberryndksettingswidget.h @@ -1,8 +1,8 @@ /************************************************************************** ** -** Copyright (C) 2011 - 2013 Research In Motion +** Copyright (C) 2013 BlackBerry Limited. All rights reserved ** -** Contact: Research In Motion (blackberry-qt@qnx.com) +** Contact: BlackBerry (qt@blackberry.com) ** Contact: KDAB (info@kdab.com) ** ** This file is part of Qt Creator. @@ -32,6 +32,8 @@ #ifndef BLACKBERRYNDKSETTINGSWIDGET_H #define BLACKBERRYNDKSETTINGSWIDGET_H +#include "blackberryinstallwizard.h" + #include <QWidget> QT_BEGIN_NAMESPACE @@ -70,15 +72,21 @@ public slots: void removeNdkTarget(); void activateNdkTarget(); void deactivateNdkTarget(); + void uninstallNdkTarget(); + void handleInstallationFinished(); + void handleUninstallationFinished(); void updateUi(QTreeWidgetItem* item, BlackBerryConfiguration* config); private: - void initNdkList(); + void launchBlackBerryInstallerWizard(BlackBerryInstallerDataHandler::Mode mode, + const QString& tagetVersion = QString()); Ui_BlackBerryNDKSettingsWidget *m_ui; BlackBerryConfigurationManager *m_bbConfigManager; + QTreeWidgetItem *m_autoDetectedNdks; QTreeWidgetItem *m_manualNdks; + QList<BlackBerryConfiguration *> m_activatedTargets; QList<BlackBerryConfiguration *> m_deactivatedTargets; }; diff --git a/src/plugins/qnx/blackberryndksettingswidget.ui b/src/plugins/qnx/blackberryndksettingswidget.ui index 4456b029ff..bb0fdd4339 100644 --- a/src/plugins/qnx/blackberryndksettingswidget.ui +++ b/src/plugins/qnx/blackberryndksettingswidget.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>773</width> - <height>443</height> + <height>495</height> </rect> </property> <property name="windowTitle"> diff --git a/src/plugins/qnx/qnx.pro b/src/plugins/qnx/qnx.pro index b32df8ee21..07b4b57361 100644 --- a/src/plugins/qnx/qnx.pro +++ b/src/plugins/qnx/qnx.pro @@ -93,6 +93,8 @@ SOURCES += qnxplugin.cpp \ blackberryconfigurationmanager.cpp \ blackberrydevicelistdetector.cpp \ blackberrylogprocessrunner.cpp \ + blackberryinstallwizardpages.cpp \ + blackberryinstallwizard.cpp \ qnxdeviceprocesssignaloperation.cpp \ qnxdeviceprocesslist.cpp @@ -187,9 +189,12 @@ HEADERS += qnxplugin.h\ blackberryconfigurationmanager.h \ blackberrydevicelistdetector.h \ blackberrylogprocessrunner.h \ + blackberryinstallwizardpages.h \ + blackberryinstallwizard.h \ qnxdeviceprocesssignaloperation.h \ qnxdeviceprocesslist.h + FORMS += \ blackberrydeviceconfigurationwizardsetuppage.ui \ blackberryrunconfigurationwidget.ui \ @@ -215,7 +220,10 @@ FORMS += \ blackberrysetupwizarddevicepage.ui \ blackberrysetupwizardfinishpage.ui \ blackberrydeviceconfigurationwizardconfigpage.ui \ - blackberrydeviceconfigurationwizardquerypage.ui + blackberrydeviceconfigurationwizardquerypage.ui \ + blackberryinstallwizardtargetpage.ui \ + blackberryinstallwizardndkpage.ui \ + blackberryinstallwizardprocesspage.ui include(../../private_headers.pri) diff --git a/src/plugins/qnx/qnx.qbs b/src/plugins/qnx/qnx.qbs index 71e00e9a18..ea5f167acd 100644 --- a/src/plugins/qnx/qnx.qbs +++ b/src/plugins/qnx/qnx.qbs @@ -115,6 +115,15 @@ QtcPlugin { "blackberrydeviceconnectionmanager.h", "blackberrydevicelistdetector.cpp", "blackberrydevicelistdetector.h", + "blackberrydeviceprocesssupport.h", + "blackberrydeviceprocesssupport.cpp", + "blackberryinstallwizard.cpp", + "blackberryinstallwizard.h", + "blackberryinstallwizardndkpage.ui", + "blackberryinstallwizardpages.cpp", + "blackberryinstallwizardpages.h", + "blackberryinstallwizardprocesspage.ui", + "blackberryinstallwizardtargetpage.ui", "blackberrylogprocessrunner.cpp", "blackberrylogprocessrunner.h", "blackberryqtversion.cpp", diff --git a/src/plugins/qnx/qnxutils.cpp b/src/plugins/qnx/qnxutils.cpp index dadacceb0c..95dc33bb64 100644 --- a/src/plugins/qnx/qnxutils.cpp +++ b/src/plugins/qnx/qnxutils.cpp @@ -1,8 +1,8 @@ /************************************************************************** ** -** Copyright (C) 2011 - 2013 Research In Motion +** Copyright (C) 2013 BlackBerry Limited. All rights reserved ** -** Contact: Research In Motion (blackberry-qt@qnx.com) +** Contact: BlackBerry (qt@blackberry.com) ** Contact: KDAB (info@kdab.com) ** ** This file is part of Qt Creator. @@ -311,3 +311,28 @@ QList<NdkInstallInformation> QnxUtils::installedNdks() return ndkList; } + +QString QnxUtils::sdkInstallerPath(const QString &ndkPath) +{ + QString sdkinstallPath; + if (Utils::HostOsInfo::isWindowsHost()) + sdkinstallPath = ndkPath + QLatin1String("/qde.exe"); + else + sdkinstallPath = ndkPath + QLatin1String("/qde"); + + if (QFileInfo(sdkinstallPath).exists()) + return sdkinstallPath; + + return QString(); +} + +// The resulting process when launching sdkinstall +QString QnxUtils::qdeInstallProcess(const QString &ndkPath, const QString &option, const QString &version) +{ + QString installerPath = sdkInstallerPath(ndkPath); + if (ndkPath.isEmpty()) + return QString(); + + return QString::fromLatin1("%1 -nosplash -application com.qnx.tools.ide.sdk.manager.core.SDKInstallerApplication " + "%2 %3 -vmargs -Dosgi.console=:none").arg(installerPath, option, version); +} diff --git a/src/plugins/qnx/qnxutils.h b/src/plugins/qnx/qnxutils.h index 7c68825359..4d2e7d36ee 100644 --- a/src/plugins/qnx/qnxutils.h +++ b/src/plugins/qnx/qnxutils.h @@ -1,8 +1,8 @@ /************************************************************************** ** -** Copyright (C) 2011 - 2013 Research In Motion +** Copyright (C) 2013 BlackBerry Limited. All rights reserved ** -** Contact: Research In Motion (blackberry-qt@qnx.com) +** Contact: BlackBerry (qt@blackberry.com) ** Contact: KDAB (info@kdab.com) ** ** This file is part of Qt Creator. @@ -71,6 +71,8 @@ public: static QString qConfigPath(); static QString defaultTargetVersion(const QString& ndkPath); static QList<NdkInstallInformation> installedNdks(); + static QString sdkInstallerPath(const QString& ndkPath); + static QString qdeInstallProcess(const QString& ndkPath, const QString &option, const QString &version = QString()); }; } // namespace Internal |