Qnx: Simple BlackBerry debug token management.

This patch enables debug token creation and installation.

Change-Id: I85cbb8ddc413228662cd7967e1805196212a430c
Reviewed-by: Tobias Nätterlund <tobias.naetterlund@kdab.com>
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
Rafael Roquetto
2013-02-18 19:22:21 -03:00
committed by hjk
parent 2be16feb5c
commit 0a0debe387
17 changed files with 1154 additions and 36 deletions

View File

@@ -0,0 +1,229 @@
/**************************************************************************
**
** Copyright (C) 2011 - 2013 Research In Motion
**
** Contact: Research In Motion (blackberry-qt@qnx.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 "blackberrydebugtokenrequestdialog.h"
#include "blackberrydebugtokenrequester.h"
#include "blackberryconfiguration.h"
#include "blackberrycertificate.h"
#include "ui_blackberrydebugtokenrequestdialog.h"
#include <QPushButton>
#include <QDir>
#include <QMessageBox>
namespace Qnx {
namespace Internal {
BlackBerryDebugTokenRequestDialog::BlackBerryDebugTokenRequestDialog(
QWidget *parent, Qt::WindowFlags f) :
QDialog(parent, f),
m_ui(new Ui_BlackBerryDebugTokenRequestDialog),
m_requester(new BlackBerryDebugTokenRequester)
{
m_ui->setupUi(this);
m_ui->progressBar->hide();
m_ui->status->clear();
m_ui->debugTokenPath->setExpectedKind(Utils::PathChooser::Any);
m_ui->debugTokenPath->setPromptDialogTitle(tr("Request Debug Token"));
m_ui->debugTokenPath->setPromptDialogFilter(tr("BAR Files (*.bar)"));
m_cancelButton = m_ui->buttonBox->button(QDialogButtonBox::Cancel);
m_okButton = m_ui->buttonBox->button(QDialogButtonBox::Ok);
m_okButton->setEnabled(false);
populateComboBox();
connect(m_cancelButton, SIGNAL(clicked()),
this, SLOT(reject()));
connect(m_okButton, SIGNAL(clicked()),
this, SLOT(requestDebugToken()));
connect(m_ui->debugTokenPath, SIGNAL(changed(QString)),
this, SLOT(validate()));
connect(m_ui->debugTokenPath, SIGNAL(editingFinished()),
this, SLOT(appendExtension()));
connect(m_ui->keystorePassword, SIGNAL(textChanged(QString)),
this, SLOT(validate()));
connect(m_ui->cskPassword, SIGNAL(textChanged(QString)),
this, SLOT(validate()));
connect(m_ui->devicePin, SIGNAL(textChanged(QString)),
this, SLOT(validate()));
connect(m_ui->showPassword, SIGNAL(stateChanged(int)),
this, SLOT(checkBoxChanged(int)));
connect(m_requester, SIGNAL(finished(int)),
this, SLOT(debugTokenArrived(int)));
}
QString BlackBerryDebugTokenRequestDialog::debugToken() const
{
return m_ui->debugTokenPath->path();
}
void BlackBerryDebugTokenRequestDialog::validate()
{
if (!m_ui->debugTokenPath->isValid()
|| m_ui->keystorePassword->text().isEmpty()
|| m_ui->devicePin->text().isEmpty()
|| m_ui->cskPassword->text().isEmpty()) {
m_okButton->setEnabled(false);
return;
}
QFileInfo fileInfo(m_ui->debugTokenPath->path());
if (!fileInfo.dir().exists()) {
m_ui->status->setText(tr("Base directory does not exist."));
m_okButton->setEnabled(false);
return;
}
m_ui->status->clear();
m_okButton->setEnabled(true);
}
void BlackBerryDebugTokenRequestDialog::requestDebugToken()
{
setBusy(true);
QFile file(m_ui->debugTokenPath->path());
if (file.exists()) {
const int result = QMessageBox::question(this, tr("Are you sure?"),
tr("The file '%1' will be overwritten. Do you want to proceed?")
.arg(file.fileName()), QMessageBox::Yes | QMessageBox::No);
if (result & QMessageBox::Yes) {
file.remove();
} else {
setBusy(false);
return;
}
}
m_requester->requestDebugToken(m_ui->debugTokenPath->path(),
m_ui->cskPassword->text(),
m_ui->keystore->itemText(m_ui->keystore->currentIndex()),
m_ui->keystorePassword->text(), m_ui->devicePin->text());
}
void BlackBerryDebugTokenRequestDialog::appendExtension()
{
QString path = m_ui->debugTokenPath->path();
if (!path.endsWith(QLatin1String(".bar"))) {
path += QLatin1String(".bar");
m_ui->debugTokenPath->setPath(path);
}
}
void BlackBerryDebugTokenRequestDialog::checkBoxChanged(int state)
{
if (state == Qt::Checked) {
m_ui->cskPassword->setEchoMode(QLineEdit::Normal);
m_ui->keystorePassword->setEchoMode(QLineEdit::Normal);
} else {
m_ui->cskPassword->setEchoMode(QLineEdit::Password);
m_ui->keystorePassword->setEchoMode(QLineEdit::Password);
}
}
void BlackBerryDebugTokenRequestDialog::debugTokenArrived(int status)
{
QString errorString = tr("Failed to request debug token: ");
switch (status) {
case BlackBerryDebugTokenRequester::Success:
accept();
return;
case BlackBerryDebugTokenRequester::WrongCskPassword:
errorString += tr("Wrong CSK password.");
break;
case BlackBerryDebugTokenRequester::WrongKeystorePassword:
errorString += tr("Wrong keystore password.");
break;
case BlackBerryDebugTokenRequester::NetworkUnreachable:
errorString += tr("Network unreachable.");
break;
case BlackBerryDebugTokenRequester::IllegalPin:
errorString += tr("Illegal device PIN.");
break;
case BlackBerryDebugTokenRequester::FailedToStartInferiorProcess:
errorString += tr("Failed to start inferior process.");
break;
case BlackBerryDebugTokenRequester::InferiorProcessTimedOut:
errorString += tr("Inferior processes timed out.");
break;
case BlackBerryDebugTokenRequester::InferiorProcessCrashed:
errorString += tr("Inferior process has crashed.");
break;
case BlackBerryDebugTokenRequester::InferiorProcessReadError:
case BlackBerryDebugTokenRequester::InferiorProcessWriteError:
errorString += tr("Failed to communicate with the inferior process.");
break;
case BlackBerryDebugTokenRequester::UnknownError:
errorString += tr("An unknwon error has occurred.");
break;
}
QMessageBox::critical(this, tr("Error"), errorString);
setBusy(false);
}
void BlackBerryDebugTokenRequestDialog::setBusy(bool busy)
{
m_okButton->setEnabled(!busy);
m_cancelButton->setEnabled(!busy);
m_ui->debugTokenPath->setEnabled(!busy);
m_ui->keystore->setEnabled(!busy);
m_ui->keystorePassword->setEnabled(!busy);
m_ui->cskPassword->setEnabled(!busy);
m_ui->showPassword->setEnabled(!busy);
m_ui->devicePin->setEnabled(!busy);
m_ui->progressBar->setVisible(busy);
if (busy)
m_ui->status->setText(tr("Requesting debug token..."));
else
m_ui->status->clear();
}
void BlackBerryDebugTokenRequestDialog::populateComboBox()
{
BlackBerryConfiguration &configuration = BlackBerryConfiguration::instance();
QList<BlackBerryCertificate*> certificates = configuration.certificates();
foreach (const BlackBerryCertificate *certificate, certificates)
m_ui->keystore->addItem(certificate->fileName());
}
}
} // namespace Qnx

View File

@@ -0,0 +1,79 @@
/**************************************************************************
**
** Copyright (C) 2011 - 2013 Research In Motion
**
** Contact: Research In Motion (blackberry-qt@qnx.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_BLACKBERRYDEBUGTOKENREQUESTDIALOG_H
#define QNX_INTERNAL_BLACKBERRYDEBUGTOKENREQUESTDIALOG_H
#include <QDialog>
QT_BEGIN_NAMESPACE
class QPushButton;
QT_END_NAMESPACE
namespace Qnx {
namespace Internal {
class Ui_BlackBerryDebugTokenRequestDialog;
class BlackBerryDebugTokenRequester;
class BlackBerryDebugTokenRequestDialog : public QDialog
{
Q_OBJECT
public:
explicit BlackBerryDebugTokenRequestDialog(QWidget *parent = 0,
Qt::WindowFlags f = 0);
QString debugToken() const;
private slots:
void validate();
void requestDebugToken();
void appendExtension();
void checkBoxChanged(int state);
void debugTokenArrived(int status);
private:
void setBusy(bool busy);
void populateComboBox();
Ui_BlackBerryDebugTokenRequestDialog *m_ui;
BlackBerryDebugTokenRequester *m_requester;
QPushButton *m_cancelButton;
QPushButton *m_okButton;
};
}
} // namespace Qnx
#endif // QNX_INTERNAL_BLACKBERRYDEBUGTOKENREQUESTDIALOG_H

View File

@@ -0,0 +1,153 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Qnx::Internal::BlackBerryDebugTokenRequestDialog</class>
<widget class="QDialog" name="Qnx::Internal::BlackBerryDebugTokenRequestDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>388</width>
<height>198</height>
</rect>
</property>
<property name="windowTitle">
<string>Request Debug Token</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Debug token path:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="Utils::PathChooser" name="debugTokenPath" native="true"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Keystore:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="keystore"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Keystore password:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="keystorePassword">
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>CSK password:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="cskPassword">
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Device PIN:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLineEdit" name="devicePin">
<property name="inputMask">
<string notr="true">HHHHHHHH; </string>
</property>
<property name="maxLength">
<number>8</number>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QCheckBox" name="showPassword">
<property name="text">
<string>Show password</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QProgressBar" name="progressBar">
<property name="maximum">
<number>0</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="status">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Status</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>Utils::PathChooser</class>
<extends>QWidget</extends>
<header location="global">utils/pathchooser.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

View File

@@ -0,0 +1,75 @@
/**************************************************************************
**
** Copyright (C) 2011 - 2013 Research In Motion
**
** Contact: Research In Motion (blackberry-qt@qnx.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 "blackberrydebugtokenrequester.h"
namespace {
static const char PROCESS_NAME[] = "blackberry-debugtokenrequest";
static const char ERR_WRONG_CSK_PASS[] = "The signature on the code signing request didn't verify.";
static const char ERR_WRONG_KEYSTORE_PASS[] = "Failed to decrypt keystore, invalid password";
static const char ERR_ILLEGAL_DEVICE_PIN[] = "Illegal device PIN";
static const char ERR_NETWORK_UNREACHABLE[] = "Network is unreachable";
}
namespace Qnx {
namespace Internal {
BlackBerryDebugTokenRequester::BlackBerryDebugTokenRequester(QObject *parent) :
BlackBerryNdkProcess(QLatin1String(PROCESS_NAME), parent)
{
addErrorStringMapping(QLatin1String(ERR_WRONG_CSK_PASS), WrongCskPassword);
addErrorStringMapping(QLatin1String(ERR_WRONG_KEYSTORE_PASS), WrongKeystorePassword);
addErrorStringMapping(QLatin1String(ERR_WRONG_KEYSTORE_PASS), WrongKeystorePassword);
addErrorStringMapping(QLatin1String(ERR_NETWORK_UNREACHABLE), NetworkUnreachable);
}
void BlackBerryDebugTokenRequester::requestDebugToken(const QString &path,
const QString &cskPassword, const QString &keyStore,
const QString &keyStorePassword, const QString &devicePin)
{
QStringList arguments;
arguments << QLatin1String("-keystore")
<< keyStore
<< QLatin1String("-storepass")
<< keyStorePassword
<< QLatin1String("-cskpass")
<< cskPassword
<< QLatin1String("-devicepin")
<< devicePin
<< path;
start(arguments);
}
} // namespace Internal
} // namespace Qnx

View File

@@ -0,0 +1,63 @@
/**************************************************************************
**
** Copyright (C) 2011 - 2013 Research In Motion
**
** Contact: Research In Motion (blackberry-qt@qnx.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_BLACKBERRYDEBUGTOKENREQUESTER_H
#define QNX_INTERNAL_BLACKBERRYDEBUGTOKENREQUESTER_H
#include "blackberryndkprocess.h"
namespace Qnx {
namespace Internal {
class BlackBerryDebugTokenRequester : public BlackBerryNdkProcess
{
Q_OBJECT
public:
enum ReturnStatus
{
WrongCskPassword = UserStatus,
WrongKeystorePassword,
NetworkUnreachable,
IllegalPin
};
explicit BlackBerryDebugTokenRequester(QObject *parent = 0);
void requestDebugToken(const QString &path, const QString &cskPassword,
const QString &keyStore, const QString &keyStorePassword,
const QString &devicePin);
};
}
}
#endif // QNX_INTERNAL_BLACKBERRYDEBUGTOKENREQUESTER_H

View File

@@ -0,0 +1,68 @@
/**************************************************************************
**
** Copyright (C) 2011 - 2013 Research In Motion
**
** Contact: Research In Motion (blackberry-qt@qnx.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 "blackberrydebugtokenuploader.h"
namespace {
static const char PROCESS_NAME[] = "blackberry-deploy";
static const char ERR_NO_ROUTE_HOST[] = "Cannot connect";
static const char ERR_AUTH_FAILED[] = "Authentication failed";
static const char ERR_DEVELOPMENT_MODE_DISABLED[] = "Device is not in the Development Mode";
}
namespace Qnx {
namespace Internal {
BlackBerryDebugTokenUploader::BlackBerryDebugTokenUploader(QObject *parent) :
BlackBerryNdkProcess(QLatin1String(PROCESS_NAME), parent)
{
addErrorStringMapping(QLatin1String(ERR_NO_ROUTE_HOST), NoRouteToHost);
addErrorStringMapping(QLatin1String(ERR_AUTH_FAILED), AuthenticationFailed);
addErrorStringMapping(QLatin1String(ERR_DEVELOPMENT_MODE_DISABLED), DevelopmentModeDisabled);
}
void BlackBerryDebugTokenUploader::uploadDebugToken(const QString &path,
const QString &deviceIp, const QString &devicePassword)
{
QStringList arguments;
arguments << QLatin1String("-installDebugToken")
<< path
<< QLatin1String("-device")
<< deviceIp
<< QLatin1String("-password")
<< devicePassword;
start(arguments);
}
} // namespace Internal
} // namespace Qnx

View File

@@ -0,0 +1,66 @@
/**************************************************************************
**
** Copyright (C) 2011 - 2013 Research In Motion
**
** Contact: Research In Motion (blackberry-qt@qnx.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_BLACKBERRYDEBUGTOKENUPLOADER_H
#define QNX_INTERNAL_BLACKBERRYDEBUGTOKENUPLOADER_H
#include "blackberryndkprocess.h"
namespace Qnx {
namespace Internal {
class BlackBerryDebugTokenUploader : public BlackBerryNdkProcess
{
Q_OBJECT
public:
enum ReturnStatus
{
NoRouteToHost = UserStatus,
AuthenticationFailed,
DevelopmentModeDisabled,
FailedToStartInferiorProcess,
InferiorProcessTimedOut,
InferiorProcessCrashed,
InferiorProcessWriteError,
InferiorProcessReadError
};
explicit BlackBerryDebugTokenUploader(QObject *parent = 0);
void uploadDebugToken(const QString &path, const QString &deviceIp,
const QString &devicePassword);
};
}
}
#endif // QNX_INTERNAL_BLACKBERRYDEBUGTOKENUPLOADER_H

View File

@@ -29,6 +29,8 @@
** **
****************************************************************************/ ****************************************************************************/
#include "blackberrydebugtokenuploader.h"
#include "blackberrydebugtokenrequestdialog.h"
#include "blackberrydeviceconfigurationwidget.h" #include "blackberrydeviceconfigurationwidget.h"
#include "ui_blackberrydeviceconfigurationwidget.h" #include "ui_blackberrydeviceconfigurationwidget.h"
#include "qnxconstants.h" #include "qnxconstants.h"
@@ -36,12 +38,17 @@
#include <ssh/sshconnection.h> #include <ssh/sshconnection.h>
#include <utils/pathchooser.h> #include <utils/pathchooser.h>
#include <QProgressDialog>
#include <QMessageBox>
using namespace ProjectExplorer; using namespace ProjectExplorer;
using namespace Qnx::Internal; using namespace Qnx::Internal;
BlackBerryDeviceConfigurationWidget::BlackBerryDeviceConfigurationWidget(const IDevice::Ptr &device, QWidget *parent) : BlackBerryDeviceConfigurationWidget::BlackBerryDeviceConfigurationWidget(const IDevice::Ptr &device, QWidget *parent) :
IDeviceWidget(device, parent), IDeviceWidget(device, parent),
ui(new Ui::BlackBerryDeviceConfigurationWidget) ui(new Ui::BlackBerryDeviceConfigurationWidget),
progressDialog(new QProgressDialog(this)),
uploader(new BlackBerryDebugTokenUploader(this))
{ {
ui->setupUi(this); ui->setupUi(this);
connect(ui->hostLineEdit, SIGNAL(editingFinished()), this, SLOT(hostNameEditingFinished())); connect(ui->hostLineEdit, SIGNAL(editingFinished()), this, SLOT(hostNameEditingFinished()));
@@ -49,7 +56,11 @@ BlackBerryDeviceConfigurationWidget::BlackBerryDeviceConfigurationWidget(const I
connect(ui->keyFileLineEdit, SIGNAL(editingFinished()), this, SLOT(keyFileEditingFinished())); connect(ui->keyFileLineEdit, SIGNAL(editingFinished()), this, SLOT(keyFileEditingFinished()));
connect(ui->keyFileLineEdit, SIGNAL(browsingFinished()), this, SLOT(keyFileEditingFinished())); connect(ui->keyFileLineEdit, SIGNAL(browsingFinished()), this, SLOT(keyFileEditingFinished()));
connect(ui->showPasswordCheckBox, SIGNAL(toggled(bool)), this, SLOT(showPassword(bool))); connect(ui->showPasswordCheckBox, SIGNAL(toggled(bool)), this, SLOT(showPassword(bool)));
connect(ui->debugToken, SIGNAL(changed(QString)), this, SLOT(updateUploadButton()));
connect(ui->debugToken, SIGNAL(editingFinished()), this, SLOT(debugTokenEditingFinished())); connect(ui->debugToken, SIGNAL(editingFinished()), this, SLOT(debugTokenEditingFinished()));
connect(ui->requestButton, SIGNAL(clicked()), this, SLOT(requestDebugToken()));
connect(ui->uploadButton, SIGNAL(clicked()), this, SLOT(uploadDebugToken()));
connect(uploader, SIGNAL(finished(int)), this, SLOT(uploadFinished(int)));
initGui(); initGui();
} }
@@ -91,6 +102,72 @@ void BlackBerryDeviceConfigurationWidget::debugTokenEditingFinished()
deviceConfiguration()->setDebugToken(ui->debugToken->path()); deviceConfiguration()->setDebugToken(ui->debugToken->path());
} }
void BlackBerryDeviceConfigurationWidget::requestDebugToken()
{
BlackBerryDebugTokenRequestDialog dialog;
const int result = dialog.exec();
if (result != QDialog::Accepted)
return;
ui->debugToken->setPath(dialog.debugToken());
debugTokenEditingFinished();
}
void BlackBerryDeviceConfigurationWidget::uploadDebugToken()
{
progressDialog->show();
uploader->uploadDebugToken(ui->debugToken->path(),
ui->hostLineEdit->text(), ui->pwdLineEdit->text());
}
void BlackBerryDeviceConfigurationWidget::updateUploadButton()
{
ui->uploadButton->setEnabled(!ui->debugToken->path().isEmpty());
}
void BlackBerryDeviceConfigurationWidget::uploadFinished(int status)
{
progressDialog->hide();
QString errorString = tr("Failed to upload debug token: ");
switch (status) {
case BlackBerryDebugTokenUploader::Success:
QMessageBox::information(this, tr("Qt Creator"), tr("Debug token successfully uploaded."));
return;
case BlackBerryDebugTokenUploader::NoRouteToHost:
errorString += tr("No route to host.");
break;
case BlackBerryDebugTokenUploader::AuthenticationFailed:
errorString += tr("Authentication failed.");
break;
case BlackBerryDebugTokenUploader::DevelopmentModeDisabled:
errorString += tr("Development mode is disabled on the device.");
break;
case BlackBerryDebugTokenUploader::FailedToStartInferiorProcess:
errorString += tr("Failed to start inferior process.");
break;
case BlackBerryDebugTokenUploader::InferiorProcessTimedOut:
errorString += tr("Inferior processes timed out.");
break;
case BlackBerryDebugTokenUploader::InferiorProcessCrashed:
errorString += tr("Inferior process has crashed.");
break;
case BlackBerryDebugTokenUploader::InferiorProcessReadError:
case BlackBerryDebugTokenUploader::InferiorProcessWriteError:
errorString += tr("Failed to communicate with the inferior process.");
break;
case BlackBerryDebugTokenUploader::UnknownError:
errorString += tr("An unknwon error has happened.");
break;
}
QMessageBox::critical(this, tr("Error"), errorString);
}
void BlackBerryDeviceConfigurationWidget::updateDeviceFromUi() void BlackBerryDeviceConfigurationWidget::updateDeviceFromUi()
{ {
hostNameEditingFinished(); hostNameEditingFinished();
@@ -121,6 +198,13 @@ void BlackBerryDeviceConfigurationWidget::initGui()
ui->debugToken->setEnabled(false); ui->debugToken->setEnabled(false);
ui->debugTokenLabel->setEnabled(false); ui->debugTokenLabel->setEnabled(false);
} }
progressDialog->setWindowModality(Qt::WindowModal);
progressDialog->setWindowTitle(tr("Operation in progress"));
progressDialog->setCancelButton(0);
progressDialog->setLabelText(tr("Uploading debug token"));
progressDialog->setMinimum(0);
progressDialog->setMaximum(0);
} }
BlackBerryDeviceConfiguration::Ptr BlackBerryDeviceConfigurationWidget::deviceConfiguration() const BlackBerryDeviceConfiguration::Ptr BlackBerryDeviceConfigurationWidget::deviceConfiguration() const

View File

@@ -36,9 +36,15 @@
#include "blackberrydeviceconfiguration.h" #include "blackberrydeviceconfiguration.h"
QT_BEGIN_NAMESPACE
class QProgressDialog;
QT_END_NAMESPACE
namespace Qnx { namespace Qnx {
namespace Internal { namespace Internal {
class BlackBerryDebugTokenUploader;
namespace Ui { namespace Ui {
class BlackBerryDeviceConfigurationWidget; class BlackBerryDeviceConfigurationWidget;
} }
@@ -58,6 +64,10 @@ private slots:
void keyFileEditingFinished(); void keyFileEditingFinished();
void showPassword(bool showClearText); void showPassword(bool showClearText);
void debugTokenEditingFinished(); void debugTokenEditingFinished();
void requestDebugToken();
void uploadDebugToken();
void updateUploadButton();
void uploadFinished(int status);
private: private:
void updateDeviceFromUi(); void updateDeviceFromUi();
@@ -66,6 +76,10 @@ private:
BlackBerryDeviceConfiguration::Ptr deviceConfiguration() const; BlackBerryDeviceConfiguration::Ptr deviceConfiguration() const;
Ui::BlackBerryDeviceConfigurationWidget *ui; Ui::BlackBerryDeviceConfigurationWidget *ui;
QProgressDialog *progressDialog;
BlackBerryDebugTokenUploader *uploader;
}; };

View File

@@ -11,9 +11,6 @@
</rect> </rect>
</property> </property>
<layout class="QFormLayout" name="formLayout"> <layout class="QFormLayout" name="formLayout">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::FieldsStayAtSizeHint</enum>
</property>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="hostNameLabel"> <widget class="QLabel" name="hostNameLabel">
<property name="text"> <property name="text">
@@ -70,7 +67,25 @@
</widget> </widget>
</item> </item>
<item row="2" column="1"> <item row="2" column="1">
<widget class="Utils::PathChooser" name="debugToken" native="true"/> <layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="Utils::PathChooser" name="debugToken" native="true"/>
</item>
<item>
<widget class="QPushButton" name="requestButton">
<property name="text">
<string>Request</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="uploadButton">
<property name="text">
<string>Upload</string>
</property>
</widget>
</item>
</layout>
</item> </item>
<item row="3" column="0"> <item row="3" column="0">
<widget class="QLabel" name="keyLabel"> <widget class="QLabel" name="keyLabel">
@@ -83,12 +98,12 @@
<widget class="Utils::PathChooser" name="keyFileLineEdit" native="true"/> <widget class="Utils::PathChooser" name="keyFileLineEdit" native="true"/>
</item> </item>
</layout> </layout>
<zorder>keyFileLineEdit</zorder>
<zorder>hostNameLabel</zorder> <zorder>hostNameLabel</zorder>
<zorder>hostLineEdit</zorder> <zorder>hostLineEdit</zorder>
<zorder>passwordLabel</zorder> <zorder>passwordLabel</zorder>
<zorder>keyLabel</zorder> <zorder>keyLabel</zorder>
<zorder>debugTokenLabel</zorder> <zorder>debugTokenLabel</zorder>
<zorder>debugToken</zorder>
</widget> </widget>
<customwidgets> <customwidgets>
<customwidget> <customwidget>

View File

@@ -29,6 +29,7 @@
** **
****************************************************************************/ ****************************************************************************/
#include "blackberrydebugtokenrequestdialog.h"
#include "blackberrydeviceconfigurationwizardpages.h" #include "blackberrydeviceconfigurationwizardpages.h"
#include "ui_blackberrydeviceconfigurationwizardsetuppage.h" #include "ui_blackberrydeviceconfigurationwizardsetuppage.h"
#include "ui_blackberrydeviceconfigurationwizardsshkeypage.h" #include "ui_blackberrydeviceconfigurationwizardsshkeypage.h"
@@ -67,6 +68,7 @@ BlackBerryDeviceConfigurationWizardSetupPage::BlackBerryDeviceConfigurationWizar
connect(m_ui->physicalDevice, SIGNAL(toggled(bool)), this, SLOT(handleMachineTypeChanged())); connect(m_ui->physicalDevice, SIGNAL(toggled(bool)), this, SLOT(handleMachineTypeChanged()));
connect(m_ui->physicalDevice, SIGNAL(toggled(bool)), this, SIGNAL(completeChanged())); connect(m_ui->physicalDevice, SIGNAL(toggled(bool)), this, SIGNAL(completeChanged()));
connect(m_ui->debugToken, SIGNAL(changed(QString)), this, SIGNAL(completeChanged())); connect(m_ui->debugToken, SIGNAL(changed(QString)), this, SIGNAL(completeChanged()));
connect(m_ui->requestButton, SIGNAL(clicked()), this, SLOT(requestDebugToken()));
registerField(QLatin1String(DEVICENAME_FIELD_ID), m_ui->deviceName); registerField(QLatin1String(DEVICENAME_FIELD_ID), m_ui->deviceName);
} }
@@ -126,6 +128,17 @@ void BlackBerryDeviceConfigurationWizardSetupPage::handleMachineTypeChanged()
m_ui->deviceHostIp->setText(defaultDeviceHostIp(machineType())); m_ui->deviceHostIp->setText(defaultDeviceHostIp(machineType()));
} }
void BlackBerryDeviceConfigurationWizardSetupPage::requestDebugToken()
{
BlackBerryDebugTokenRequestDialog dialog;
const int result = dialog.exec();
if (result != QDialog::Accepted)
return;
m_ui->debugToken->setPath(dialog.debugToken());
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -65,6 +65,7 @@ public:
private slots: private slots:
void handleMachineTypeChanged(); void handleMachineTypeChanged();
void requestDebugToken();
private: private:
Ui::BlackBerryDeviceConfigurationWizardSetupPage *m_ui; Ui::BlackBerryDeviceConfigurationWizardSetupPage *m_ui;

View File

@@ -14,9 +14,6 @@
<string>WizardPage</string> <string>WizardPage</string>
</property> </property>
<layout class="QFormLayout" name="formLayout"> <layout class="QFormLayout" name="formLayout">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::FieldsStayAtSizeHint</enum>
</property>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="label"> <widget class="QLabel" name="label">
<property name="text"> <property name="text">
@@ -27,14 +24,39 @@
<item row="0" column="1"> <item row="0" column="1">
<widget class="QLineEdit" name="deviceName"/> <widget class="QLineEdit" name="deviceName"/>
</item> </item>
<item row="3" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Device type:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QRadioButton" name="physicalDevice">
<property name="text">
<string>Physical device</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="simulator">
<property name="text">
<string>Simulator</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2"> <widget class="QLabel" name="label_2">
<property name="text"> <property name="text">
<string>The device's host name or IP address:</string> <string>The device's host name or IP address:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1"> <item row="2" column="1">
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
<item> <item>
<widget class="QLineEdit" name="deviceHostIp"/> <widget class="QLineEdit" name="deviceHostIp"/>
@@ -54,14 +76,14 @@
</item> </item>
</layout> </layout>
</item> </item>
<item row="4" column="0"> <item row="3" column="0">
<widget class="QLabel" name="label_3"> <widget class="QLabel" name="label_3">
<property name="text"> <property name="text">
<string>Device password:</string> <string>Device password:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="1"> <item row="3" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2"> <layout class="QHBoxLayout" name="horizontalLayout_2">
<item> <item>
<widget class="QLineEdit" name="password"> <widget class="QLineEdit" name="password">
@@ -85,36 +107,22 @@
</item> </item>
</layout> </layout>
</item> </item>
<item row="6" column="0"> <item row="4" column="0">
<widget class="QLabel" name="label_5"> <widget class="QLabel" name="label_5">
<property name="text"> <property name="text">
<string>Debug token:</string> <string>Debug token:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="1"> <item row="4" column="1">
<widget class="Utils::PathChooser" name="debugToken" native="true"/> <layout class="QHBoxLayout" name="horizontalLayout_4">
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Device type:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item> <item>
<widget class="QRadioButton" name="physicalDevice"> <widget class="Utils::PathChooser" name="debugToken" native="true"/>
<property name="text">
<string>Physical device</string>
</property>
</widget>
</item> </item>
<item> <item>
<widget class="QRadioButton" name="simulator"> <widget class="QPushButton" name="requestButton">
<property name="text"> <property name="text">
<string>Simulator</string> <string>Request</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@@ -0,0 +1,145 @@
/**************************************************************************
**
** Copyright (C) 2011 - 2013 Research In Motion
**
** Contact: Research In Motion (blackberry-qt@qnx.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 "blackberryndkprocess.h"
#include "blackberryconfiguration.h"
#include <utils/hostosinfo.h>
#include <QTextStream>
namespace Qnx {
namespace Internal {
BlackBerryNdkProcess::BlackBerryNdkProcess(const QString &command, QObject *parent) :
QObject(parent),
m_process(new QProcess(this)),
m_command(command)
{
m_process->setProcessChannelMode(QProcess::MergedChannels);
connect(m_process, SIGNAL(finished(int,QProcess::ExitStatus)),
this, SLOT(processFinished()));
connect(m_process, SIGNAL(error(QProcess::ProcessError)),
this, SLOT(processError(QProcess::ProcessError)));
}
QString BlackBerryNdkProcess::command() const
{
QString command = BlackBerryConfiguration::instance()
.qnxEnv().value(QLatin1String("QNX_HOST"))
+ (QLatin1String("/usr/bin/")) + m_command;
if (Utils::HostOsInfo::isWindowsHost())
command += QLatin1String(".bat");
return command;
}
void BlackBerryNdkProcess::start(const QStringList &arguments)
{
if (m_process->state() != QProcess::NotRunning)
return;
m_process->start(command(), arguments);
}
void BlackBerryNdkProcess::addErrorStringMapping(
const QString &message, int errorCode)
{
m_errorStringMap.insert(message, errorCode);
}
void BlackBerryNdkProcess::processFinished()
{
if (m_process->exitCode() == 0) {
emit finished(Success);
return;
}
QTextStream processOutput(m_process);
QString errorString;
int returnStatus = UnknownError;
while (!processOutput.atEnd()) {
const QString line = processOutput.readLine();
returnStatus = errorLineToReturnStatus(line);
if (returnStatus >= 0)
break;
}
emit finished(returnStatus);
}
void BlackBerryNdkProcess::processError(QProcess::ProcessError error)
{
int errorCode;
switch (error) {
case QProcess::FailedToStart:
errorCode = FailedToStartInferiorProcess;
break;
case QProcess::Timedout:
errorCode = InferiorProcessTimedOut;
break;
case QProcess::Crashed:
errorCode = InferiorProcessCrashed;
break;
case QProcess::WriteError:
errorCode = InferiorProcessWriteError;
break;
case QProcess::ReadError:
errorCode = InferiorProcessReadError;
break;
case QProcess::UnknownError:
default:
errorCode = UnknownError;
break;
}
emit finished(errorCode);
}
int BlackBerryNdkProcess::errorLineToReturnStatus(const QString &line) const
{
foreach (const QString &key, m_errorStringMap.keys()) {
if (line.contains(key))
return m_errorStringMap.value(key);
}
return -1;
}
} // namespace Internal
} // namespace Qnx

View File

@@ -0,0 +1,87 @@
/**************************************************************************
**
** Copyright (C) 2011 - 2013 Research In Motion
**
** Contact: Research In Motion (blackberry-qt@qnx.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_BLACKBERRYNDKPROCESS_H
#define QNX_INTERNAL_BLACKBERRYNDKPROCESS_H
#include <QObject>
#include <QProcess>
#include <QMap>
namespace Qnx {
namespace Internal {
class BlackBerryNdkProcess : public QObject
{
Q_OBJECT
public:
enum ProcessStatus
{
Success,
FailedToStartInferiorProcess,
InferiorProcessTimedOut,
InferiorProcessCrashed,
InferiorProcessWriteError,
InferiorProcessReadError,
UnknownError,
UserStatus
};
signals:
void finished(int status);
protected:
explicit BlackBerryNdkProcess(const QString &command, QObject *parent = 0);
void start(const QStringList &arguments);
void addErrorStringMapping(const QString &message, int errorCode);
QString command() const;
private slots:
void processFinished();
void processError(QProcess::ProcessError error);
private:
int errorLineToReturnStatus(const QString &line) const;
QProcess *m_process;
QString m_command;
QMap<QString, int> m_errorStringMap;
};
}
}
#endif // QNX_INTERNAL_BLACKBERRYNDKPROCESS_H

View File

@@ -68,7 +68,11 @@ SOURCES += qnxplugin.cpp \
blackberrycertificatemodel.cpp \ blackberrycertificatemodel.cpp \
blackberryregisterkeydialog.cpp \ blackberryregisterkeydialog.cpp \
blackberryimportcertificatedialog.cpp \ blackberryimportcertificatedialog.cpp \
blackberrycreatecertificatedialog.cpp blackberrycreatecertificatedialog.cpp \
blackberrydebugtokenrequester.cpp \
blackberrydebugtokenrequestdialog.cpp \
blackberrydebugtokenuploader.cpp \
blackberryndkprocess.cpp
HEADERS += qnxplugin.h\ HEADERS += qnxplugin.h\
qnxconstants.h \ qnxconstants.h \
@@ -133,7 +137,11 @@ HEADERS += qnxplugin.h\
blackberrycertificatemodel.h \ blackberrycertificatemodel.h \
blackberryregisterkeydialog.h \ blackberryregisterkeydialog.h \
blackberryimportcertificatedialog.h \ blackberryimportcertificatedialog.h \
blackberrycreatecertificatedialog.h blackberrycreatecertificatedialog.h \
blackberrydebugtokenrequester.h \
blackberrydebugtokenrequestdialog.h \
blackberrydebugtokenuploader.h \
blackberryndkprocess.h
FORMS += \ FORMS += \
blackberrydeviceconfigurationwizardsetuppage.ui \ blackberrydeviceconfigurationwizardsetuppage.ui \
@@ -147,7 +155,8 @@ FORMS += \
blackberrykeyswidget.ui \ blackberrykeyswidget.ui \
blackberryregisterkeydialog.ui \ blackberryregisterkeydialog.ui \
blackberryimportcertificatedialog.ui \ blackberryimportcertificatedialog.ui \
blackberrycreatecertificatedialog.ui blackberrycreatecertificatedialog.ui \
blackberrydebugtokenrequestdialog.ui
DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII

View File

@@ -117,6 +117,15 @@ QtcPlugin {
"blackberrycreatecertificatedialog.cpp", "blackberrycreatecertificatedialog.cpp",
"blackberrycreatecertificatedialog.h", "blackberrycreatecertificatedialog.h",
"blackberrycreatecertificatedialog.ui", "blackberrycreatecertificatedialog.ui",
"blackberrydebugtokenrequester.cpp",
"blackberrydebugtokenrequester.h",
"blackberrydebugtokenrequestdialog.cpp",
"blackberrydebugtokenrequestdialog.h",
"blackberrydebugtokenrequestdialog.ui",
"blackberrydebugtokenuploader.cpp",
"blackberrydebugtokenuploader.h",
"blackberryndkprocess.cpp",
"blackberryndkprocess.h",
"pathchooserdelegate.cpp", "pathchooserdelegate.cpp",
"pathchooserdelegate.h", "pathchooserdelegate.h",
"qnx.qrc", "qnx.qrc",