From 3be695e1bc036fb7b940241b9a1b92aeca62a7fb Mon Sep 17 00:00:00 2001 From: mfekari <mfekari@rim.com> Date: Mon, 22 Oct 2012 10:03:14 -0400 Subject: [PATCH] Qnx: Enable deploying existing Qt apps by adding the bar descriptor file Change-Id: I4a7f4f8b033ac11b5d43010b3a9f479802022c46 Reviewed-by: Nicolas Arnaud-Cormos <nicolas@kdab.com> --- .../qnx/blackberrydeployconfiguration.cpp | 73 +++++++++++++++++++ .../qnx/blackberrydeployconfiguration.h | 2 + .../blackberrydeployconfigurationfactory.cpp | 1 + 3 files changed, 76 insertions(+) diff --git a/src/plugins/qnx/blackberrydeployconfiguration.cpp b/src/plugins/qnx/blackberrydeployconfiguration.cpp index be1da6989fe..91d4f06f90a 100644 --- a/src/plugins/qnx/blackberrydeployconfiguration.cpp +++ b/src/plugins/qnx/blackberrydeployconfiguration.cpp @@ -37,10 +37,15 @@ #include <projectexplorer/kitinformation.h> #include <projectexplorer/target.h> +#include <projectexplorer/projectexplorer.h> #include <qt4projectmanager/qt4nodes.h> #include <qt4projectmanager/qt4project.h> +#include <qt4projectmanager/qt4buildconfiguration.h> +#include <coreplugin/icore.h> #include <ssh/sshconnection.h> +#include <QMessageBox> + using namespace Qnx; using namespace Qnx::Internal; @@ -75,6 +80,74 @@ void BlackBerryDeployConfiguration::ctor() setDefaultDisplayName(tr("Deploy to BlackBerry Device")); } +void BlackBerryDeployConfiguration::setupBarDescriptor() +{ + Qt4ProjectManager::Qt4BuildConfiguration *bc = qobject_cast<Qt4ProjectManager::Qt4BuildConfiguration *>(target()->activeBuildConfiguration()); + if (!bc || !target()->kit()) + return; + + Core::Id deviceType = ProjectExplorer::DeviceTypeKitInformation::deviceTypeId(target()->kit()); + QString projectName = target()->project()->displayName(); + + if (deviceType == Constants::QNX_BB_OS_TYPE) { + const QLatin1String barDescriptorFileName("bar-descriptor.xml"); + Utils::FileName barDescriptorPath = Utils::FileName::fromString(target()->project()->projectDirectory()).appendPath(barDescriptorFileName); + const QFile barDescriptorFile(barDescriptorPath.toString()); + if (barDescriptorFile.exists()) + return; + + Utils::FileReader reader; + QString barDescriptorTemplate; + if (QDir(Utils::FileName::fromString(target()->project()->projectDirectory()).appendPath(QLatin1String("qml")).toString()).exists()) + barDescriptorTemplate = Core::ICore::resourcePath() + + QLatin1String("/templates/wizards/bb-quickapp/") + barDescriptorFileName; + else + barDescriptorTemplate = Core::ICore::resourcePath() + + QLatin1String("/templates/wizards/bb-guiapp/") + barDescriptorFileName; + + + if (!reader.fetch(barDescriptorTemplate)) { + QMessageBox::warning(Core::ICore::mainWindow(), + tr("Error while setting up bar descriptor"), + tr("Reading bar descriptor template failed"), + QMessageBox::Ok); + return; + } + + QString content = QString::fromUtf8(reader.data()); + content.replace(QLatin1String("%ProjectName%"), projectName); + Utils::FileSaver writer(barDescriptorFile.fileName(), QIODevice::WriteOnly); + writer.write(content.toUtf8()); + if (!writer.finalize()) { + QMessageBox::warning(Core::ICore::mainWindow(), + tr("Error while setting up bar descriptor"), + tr("Failure writing bar descriptor file."), + QMessageBox::Ok); + return; + } + + // Add the Bar Descriptor to the existing project + if (target()->project()->rootProjectNode()) + addBarDescriptorToProject(barDescriptorPath.toString()); + } +} + +void BlackBerryDeployConfiguration::addBarDescriptorToProject(const QString &barDesciptorPath) +{ + if (barDesciptorPath.isEmpty()) + return; + + QMessageBox::StandardButton button = + QMessageBox::question(Core::ICore::mainWindow(), + tr("Add bar-descriptor.xml file to project"), + tr("Qt Creator has set up a bar descriptor file to enable " + "packaging.\nDo you want to add it to the project?"), + QMessageBox::Yes | QMessageBox::No); + if (button == QMessageBox::Yes) + ProjectExplorer::ProjectExplorerPlugin::instance() + ->addExistingFiles(target()->project()->rootProjectNode(), QStringList() << barDesciptorPath); +} + BlackBerryDeployConfiguration::~BlackBerryDeployConfiguration() { } diff --git a/src/plugins/qnx/blackberrydeployconfiguration.h b/src/plugins/qnx/blackberrydeployconfiguration.h index 1e9c772dbb6..ec29a886e50 100644 --- a/src/plugins/qnx/blackberrydeployconfiguration.h +++ b/src/plugins/qnx/blackberrydeployconfiguration.h @@ -67,6 +67,8 @@ protected: private: void ctor(); + void setupBarDescriptor(); + void addBarDescriptorToProject(const QString& barDescriptorPath); }; } // namespace Internal diff --git a/src/plugins/qnx/blackberrydeployconfigurationfactory.cpp b/src/plugins/qnx/blackberrydeployconfigurationfactory.cpp index 9579f28f3a7..f3a64af0bff 100644 --- a/src/plugins/qnx/blackberrydeployconfigurationfactory.cpp +++ b/src/plugins/qnx/blackberrydeployconfigurationfactory.cpp @@ -92,6 +92,7 @@ ProjectExplorer::DeployConfiguration *BlackBerryDeployConfigurationFactory::crea return 0; BlackBerryDeployConfiguration *dc = new BlackBerryDeployConfiguration(parent); + dc->setupBarDescriptor(); dc->stepList()->insertStep(0, new BlackBerryCreatePackageStep(dc->stepList())); dc->stepList()->insertStep(1, new BlackBerryDeployStep(dc->stepList())); return dc; -- GitLab