diff options
author | Christian Kandeler <christian.kandeler@nokia.com> | 2010-09-13 11:20:13 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@nokia.com> | 2010-09-13 11:22:38 +0200 |
commit | e83ba4d4ece9dd2206ca67e399d5dfeb881472f7 (patch) | |
tree | 83cac7e5894fdc0594f6a54c4693c2bf9eac629b /src | |
parent | 342ab57db29cad5692a7e5919a413dd44f082993 (diff) | |
download | qt-creator-e83ba4d4ece9dd2206ca67e399d5dfeb881472f7.tar.gz |
Mobile wizard: Model after QML wizard.
Nodded-at-by: dt
Diffstat (limited to 'src')
12 files changed, 1309 insertions, 48 deletions
diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.cpp b/src/plugins/qt4projectmanager/qt4projectmanager.cpp index 6454625d72..b708ebd901 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanager.cpp +++ b/src/plugins/qt4projectmanager/qt4projectmanager.cpp @@ -187,13 +187,13 @@ QString Qt4Manager::mimeType() const // When removing this, also remove the inclusions of "wizards/qmlstandaloneapp.h" and QtGui/QMessageBox inline void updateQmlApplicationViewerFiles(const QString proFile) { - const QList<GeneratedFileInfo> updates = + const QList<QmlAppGeneratedFileInfo> updates = QmlStandaloneApp::fileUpdates(proFile); if (!updates.empty()) { // TODO Translate the folloing strings when we want to keep the code QString message = QLatin1String("The following files are either outdated or have been modified:"); message.append(QLatin1String("<ul>")); - foreach (const GeneratedFileInfo &info, updates) { + foreach (const QmlAppGeneratedFileInfo &info, updates) { QStringList reasons; if (info.wasModified()) reasons.append(QLatin1String("modified")); diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro index 9308625298..1813628861 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanager.pro +++ b/src/plugins/qt4projectmanager/qt4projectmanager.pro @@ -16,7 +16,9 @@ HEADERS += qt4deployconfiguration.h \ profilereader.h \ wizards/qtprojectparameters.h \ wizards/guiappwizard.h \ - wizards/mobileguiappwizard.h \ + wizards/mobileapp.h \ + wizards/mobileappwizard.h \ + wizards/mobileappwizardpages.h \ wizards/consoleappwizard.h \ wizards/consoleappwizarddialog.h \ wizards/libraryparameters.h \ @@ -68,7 +70,9 @@ SOURCES += qt4projectmanagerplugin.cpp \ profilereader.cpp \ wizards/qtprojectparameters.cpp \ wizards/guiappwizard.cpp \ - wizards/mobileguiappwizard.cpp \ + wizards/mobileapp.cpp \ + wizards/mobileappwizard.cpp \ + wizards/mobileappwizardpages.cpp \ wizards/consoleappwizard.cpp \ wizards/consoleappwizarddialog.cpp \ wizards/libraryparameters.cpp \ @@ -116,6 +120,7 @@ FORMS += makestep.ui \ wizards/targetsetuppage.ui \ wizards/qmlstandaloneappwizardoptionspage.ui \ wizards/qmlstandaloneappwizardsourcespage.ui \ + wizards/mobileappwizardoptionspage.ui \ librarydetailswidget.ui RESOURCES += qt4projectmanager.qrc \ wizards/wizards.qrc diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp index 8d69eb703f..0ed2261595 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp +++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp @@ -34,7 +34,7 @@ #include "makestep.h" #include "wizards/consoleappwizard.h" #include "wizards/guiappwizard.h" -#include "wizards/mobileguiappwizard.h" +#include "wizards/mobileappwizard.h" #include "wizards/librarywizard.h" #include "wizards/testwizard.h" #include "wizards/emptyprojectwizard.h" @@ -137,8 +137,8 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString * ConsoleAppWizard *consoleWizard = new ConsoleAppWizard; addAutoReleasedObject(consoleWizard); - MobileGuiAppWizard *mobileGuiWizard = new MobileGuiAppWizard(); - addAutoReleasedObject(mobileGuiWizard); + MobileAppWizard *mobileWizard = new MobileAppWizard; + addAutoReleasedObject(mobileWizard); addAutoReleasedObject(new QmlStandaloneAppWizard(QmlStandaloneAppWizard::NewQmlFile)); addAutoReleasedObject(new QmlStandaloneAppWizard(QmlStandaloneAppWizard::ImportQmlFile)); diff --git a/src/plugins/qt4projectmanager/wizards/mobileapp.cpp b/src/plugins/qt4projectmanager/wizards/mobileapp.cpp new file mode 100644 index 0000000000..1634e1384d --- /dev/null +++ b/src/plugins/qt4projectmanager/wizards/mobileapp.cpp @@ -0,0 +1,410 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** 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. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#include "mobileapp.h" + +#include <coreplugin/icore.h> + +#include <QtCore/QDir> +#include <QtCore/QFile> +#include <QtCore/QRegExp> +#include <QtCore/QTextStream> + +namespace Qt4ProjectManager { +namespace Internal { + +const QString mainWindowBaseName(QLatin1String("mainwindow")); + +const QString mainWindowCppFileName(mainWindowBaseName + QLatin1String(".cpp")); +const QString mainWindowHFileName(mainWindowBaseName + QLatin1String(".h")); +const QString mainWindowUiFileName(mainWindowBaseName + QLatin1String(".ui")); +const QString fileChecksum(QLatin1String("checksum")); +const QString fileStubVersion(QLatin1String("version")); + + +MobileAppGeneratedFileInfo::MobileAppGeneratedFileInfo() + : file(MainWindowCppFile) + , version(-1) + , dataChecksum(0) + , statedChecksum(0) +{ +} + +bool MobileAppGeneratedFileInfo::isUpToDate() const +{ + return !isOutdated() && !wasModified(); +} + +bool MobileAppGeneratedFileInfo::isOutdated() const +{ + return version < MobileApp::stubVersion(); +} + +bool MobileAppGeneratedFileInfo::wasModified() const +{ + return dataChecksum != statedChecksum; +} + +MobileApp::MobileApp() : m_orientation(Auto), m_networkEnabled(false) +{ +} + +MobileApp::~MobileApp() +{ +} + +QString MobileApp::symbianUidForPath(const QString &path) +{ + quint32 hash = 5381; + for (int i = 0; i < path.size(); ++i) { + const char c = path.at(i).toAscii(); + hash ^= c + ((c - i) << i % 20) + ((c + i) << (i + 5) % 20) + ((c - 2 * i) << (i + 10) % 20) + ((c + 2 * i) << (i + 15) % 20); + } + return QString::fromLatin1("0xE") + + QString::fromLatin1("%1").arg(hash, 7, 16, QLatin1Char('0')).right(7); +} + +void MobileApp::setOrientation(Orientation orientation) +{ + m_orientation = orientation; +} + +MobileApp::Orientation MobileApp::orientation() const +{ + return m_orientation; +} + +void MobileApp::setProjectName(const QString &name) +{ + m_projectName = name; +} + +QString MobileApp::projectName() const +{ + return m_projectName; +} + +void MobileApp::setProjectPath(const QString &path) +{ + m_projectPath.setFile(path); +} + +void MobileApp::setSymbianSvgIcon(const QString &icon) +{ + m_symbianSvgIcon = icon; +} + +QString MobileApp::symbianSvgIcon() const +{ + return path(SymbianSvgIconOrigin); +} + +void MobileApp::setMaemoPngIcon(const QString &icon) +{ + m_maemoPngIcon = icon; +} + +QString MobileApp::maemoPngIcon() const +{ + return path(MaemoPngIconOrigin); +} + +void MobileApp::setSymbianTargetUid(const QString &uid) +{ + m_symbianTargetUid = uid; +} + +QString MobileApp::symbianTargetUid() const +{ + return !m_symbianTargetUid.isEmpty() ? m_symbianTargetUid + : symbianUidForPath(path(AppPro)); +} + +void MobileApp::setNetworkEnabled(bool enabled) +{ + m_networkEnabled = enabled; +} + +bool MobileApp::networkEnabled() const +{ + return m_networkEnabled; +} + + +QString MobileApp::path(Path path) const +{ + const QString originsRoot = templatesRoot(); + const QString mainCppFileName = QLatin1String("main.cpp"); + const QString symbianIconFileName = QLatin1String("symbianicon.svg"); + const QString pathBase = m_projectPath.absoluteFilePath() + QLatin1Char('/') + + m_projectName + QLatin1Char('/'); + + switch (path) { + case MainCpp: return pathBase + mainCppFileName; + case MainCppOrigin: return originsRoot + mainCppFileName; + case AppPro: return pathBase + m_projectName + QLatin1String(".pro"); + case AppProOrigin: return originsRoot + QLatin1String("app.pro"); + case AppProPath: return pathBase; + case AppPri: return pathBase + m_projectName + QLatin1String(".pri"); + case AppPriOrigin: return originsRoot + QLatin1String("app.pri"); + case Desktop: return pathBase + m_projectName + QLatin1String(".desktop"); + case DesktopOrigin: return originsRoot + QLatin1String("app.desktop"); + case MainWindowCpp: return pathBase + mainWindowCppFileName; + case MainWindowCppOrigin: return originsRoot + mainWindowCppFileName; + case MainWindowH: return pathBase + mainWindowHFileName; + case MainWindowHOrigin: return originsRoot + mainWindowHFileName; + case MainWindowUi: return pathBase + mainWindowUiFileName; + case MainWindowUiOrigin: return originsRoot + mainWindowUiFileName; + case SymbianSvgIcon: return pathBase + symbianIconFileName; + case SymbianSvgIconOrigin: return !m_symbianSvgIcon.isEmpty() ? m_symbianSvgIcon + : originsRoot + symbianIconFileName; + case MaemoPngIcon: return pathBase + projectName() + QLatin1String(".png"); + case MaemoPngIconOrigin: return !m_maemoPngIcon.isEmpty() ? m_maemoPngIcon + : originsRoot + QLatin1String("maemoicon.png"); + default: qFatal("MobileApp::path() needs more work"); + } + return QString(); +} + +static QString insertParameter(const QString &line, const QString ¶meter) +{ + return QString(line).replace(QRegExp(QLatin1String("\\([^()]+\\)")), + QLatin1Char('(') + parameter + QLatin1Char(')')); +} + +QByteArray MobileApp::generateMainCpp(const QString *errorMessage) const +{ + Q_UNUSED(errorMessage) + + QFile sourceFile(path(MainCppOrigin)); + sourceFile.open(QIODevice::ReadOnly); + Q_ASSERT(sourceFile.isOpen()); + QTextStream in(&sourceFile); + + QByteArray mainCppContent; + QTextStream out(&mainCppContent, QIODevice::WriteOnly); + + QString line; + while (!(line = in.readLine()).isNull()) { + if (line.contains(QLatin1String("// ORIENTATION"))) { + const char *orientationString; + switch (m_orientation) { + case LockLandscape: + orientationString = "LockLandscape"; + break; + case LockPortrait: + orientationString = "LockPortrait"; + break; + case Auto: + orientationString = "Auto"; + break; + } + line = insertParameter(line, QLatin1String("MainWindow::") + + QLatin1String(orientationString)); + } + const int commentIndex = line.indexOf(QLatin1String(" //")); + if (commentIndex != -1) + line.truncate(commentIndex); + out << line << endl; + }; + + return mainCppContent; +} + +QByteArray MobileApp::generateProFile(const QString *errorMessage) const +{ + Q_UNUSED(errorMessage) + + const QChar comment = QLatin1Char('#'); + QFile proFile(path(AppProOrigin)); + proFile.open(QIODevice::ReadOnly); + Q_ASSERT(proFile.isOpen()); + QTextStream in(&proFile); + + QByteArray proFileContent; + QTextStream out(&proFileContent, QIODevice::WriteOnly); + + QString valueOnNextLine; + bool uncommentNextLine = false; + QString line; + while (!(line = in.readLine()).isNull()) { + if (line.contains(QLatin1String("# TARGETUID3"))) { + valueOnNextLine = symbianTargetUid(); + } else if (line.contains(QLatin1String("# ORIENTATIONLOCK")) && m_orientation == MobileApp::Auto) { + uncommentNextLine = true; + } else if (line.contains(QLatin1String("# NETWORKACCESS")) && !m_networkEnabled) { + uncommentNextLine = true; + } + + // Remove all marker comments + if (line.trimmed().startsWith(comment) + && line.trimmed().endsWith(comment)) + continue; + + if (!valueOnNextLine.isEmpty()) { + out << line.left(line.indexOf(QLatin1Char('=')) + 2) + << QDir::fromNativeSeparators(valueOnNextLine) << endl; + valueOnNextLine.clear(); + continue; + } + + if (uncommentNextLine) { + out << comment << line << endl; + uncommentNextLine = false; + continue; + } + out << line << endl; + }; + + return proFileContent.replace("include(app.pri)", "include(" + + m_projectName.toLocal8Bit() + ".pri)"); +} + +QByteArray MobileApp::generateDesktopFile(const QString *errorMessage) const +{ + Q_UNUSED(errorMessage); + + QFile desktopTemplate(path(DesktopOrigin)); + desktopTemplate.open(QIODevice::ReadOnly); + Q_ASSERT(desktopTemplate.isOpen()); + QByteArray desktopFileContent = desktopTemplate.readAll(); + return desktopFileContent.replace("thisApp", projectName().toUtf8()); +} + +QString MobileApp::templatesRoot() +{ + return Core::ICore::instance()->resourcePath() + QLatin1String("/templates/mobileapp/"); +} + +static Core::GeneratedFile file(const QByteArray &data, const QString &targetFile) +{ + Core::GeneratedFile generatedFile(targetFile); + generatedFile.setBinary(true); + generatedFile.setBinaryContents(data); + return generatedFile; +} + +Core::GeneratedFiles MobileApp::generateFiles(QString *errorMessage) const +{ + Core::GeneratedFiles files; + + files.append(file(generateFile(MobileAppGeneratedFileInfo::AppProFile, errorMessage), path(AppPro))); + files.last().setAttributes(Core::GeneratedFile::OpenProjectAttribute); + files.append(file(generateFile(MobileAppGeneratedFileInfo::MainCppFile, errorMessage), path(MainCpp))); + files.append(file(generateFile(MobileAppGeneratedFileInfo::SymbianSvgIconFile, errorMessage), path(SymbianSvgIcon))); + files.append(file(generateFile(MobileAppGeneratedFileInfo::MaemoPngIconFile, errorMessage), path(MaemoPngIcon))); + files.append(file(generateFile(MobileAppGeneratedFileInfo::DesktopFile, errorMessage), path(Desktop))); + files.append(file(generateFile(MobileAppGeneratedFileInfo::AppPriFile, errorMessage), path(AppPri))); + files.append(file(generateFile(MobileAppGeneratedFileInfo::MainWindowCppFile, errorMessage), path(MainWindowCpp))); + files.append(file(generateFile(MobileAppGeneratedFileInfo::MainWindowHFile, errorMessage), path(MainWindowH))); + files.append(file(generateFile(MobileAppGeneratedFileInfo::MainWindowUiFile, errorMessage), path(MainWindowUi))); + files.last().setAttributes(Core::GeneratedFile::OpenEditorAttribute); + + return files; +} + +QString MobileApp::error() const +{ + return m_error; +} + +static QByteArray readBlob(const QString &source) +{ + QFile sourceFile(source); + sourceFile.open(QIODevice::ReadOnly); + Q_ASSERT(sourceFile.isOpen()); + return sourceFile.readAll(); +} + +QByteArray MobileApp::generateFile(MobileAppGeneratedFileInfo::File file, + const QString *errorMessage) const +{ + QByteArray data; + const QString cFileComment = QLatin1String("//"); + const QString proFileComment = QLatin1String("#"); + QString comment = cFileComment; + bool versionAndChecksum = false; + switch (file) { + case MobileAppGeneratedFileInfo::MainCppFile: + data = generateMainCpp(errorMessage); + break; + case MobileAppGeneratedFileInfo::SymbianSvgIconFile: + data = readBlob(path(SymbianSvgIconOrigin)); + break; + case MobileAppGeneratedFileInfo::MaemoPngIconFile: + data = readBlob(path(MaemoPngIconOrigin)); + break; + case MobileAppGeneratedFileInfo::DesktopFile: + data = generateDesktopFile(errorMessage); + break; + case MobileAppGeneratedFileInfo::AppProFile: + data = generateProFile(errorMessage); + comment = proFileComment; + break; + case MobileAppGeneratedFileInfo::AppPriFile: + data = readBlob(path(AppPriOrigin)); + comment = proFileComment; + versionAndChecksum = true; + break; + case MobileAppGeneratedFileInfo::MainWindowCppFile: + data = readBlob(path(MainWindowCppOrigin)); + versionAndChecksum = true; + break; + case MobileAppGeneratedFileInfo::MainWindowHFile: + data = readBlob(path(MainWindowHOrigin)); + versionAndChecksum = true; + break; + case MobileAppGeneratedFileInfo::MainWindowUiFile: + data = readBlob(path(MainWindowUiOrigin)); + break; + default: + Q_ASSERT_X(false, Q_FUNC_INFO, "Whoops, case missing!"); + } + if (!versionAndChecksum) + return data; + QByteArray versioned = data; + versioned.replace('\x0D', ""); + versioned.replace('\x0A', ""); + const quint16 checkSum = qChecksum(versioned.constData(), versioned.length()); + const QString checkSumString = QString::number(checkSum, 16); + const QString versionString = QString::number(stubVersion()); + const QChar sep = QLatin1Char(' '); + const QString versionLine = + comment + sep + fileChecksum + sep + QLatin1String("0x") + checkSumString + + sep + fileStubVersion + sep + versionString + QLatin1Char('\x0A'); + return versionLine.toAscii() + data; +} + +int MobileApp::stubVersion() +{ + return 1; +} + +} // namespace Internal +} // namespace Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/wizards/mobileapp.h b/src/plugins/qt4projectmanager/wizards/mobileapp.h new file mode 100644 index 0000000000..9452bc361f --- /dev/null +++ b/src/plugins/qt4projectmanager/wizards/mobileapp.h @@ -0,0 +1,143 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** 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. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#ifndef MOBILEAPP_H +#define MOBILEAPP_H + +#include <coreplugin/basefilewizard.h> + +#include <QtCore/QStringList> +#include <QtCore/QFileInfo> +#include <QtCore/QHash> + +namespace Qt4ProjectManager { +namespace Internal { + +struct MobileAppGeneratedFileInfo +{ + enum File { + MainCppFile, + AppProFile, + AppPriFile, + MainWindowCppFile, + MainWindowHFile, + MainWindowUiFile, + SymbianSvgIconFile, + MaemoPngIconFile, + DesktopFile + }; + + MobileAppGeneratedFileInfo(); + + bool isUpToDate() const; + bool isOutdated() const; + bool wasModified() const; + + File file; + QFileInfo fileInfo; + int version; + quint16 dataChecksum; + quint16 statedChecksum; +}; + +class MobileApp: public QObject +{ +public: + enum Orientation { + LockLandscape, + LockPortrait, + Auto + }; + + enum Path { + MainCpp, + MainCppOrigin, + AppPro, + AppProOrigin, + AppProPath, + Desktop, + DesktopOrigin, + AppPri, + AppPriOrigin, + MainWindowCpp, + MainWindowCppOrigin, + MainWindowH, + MainWindowHOrigin, + MainWindowUi, + MainWindowUiOrigin, + SymbianSvgIcon, + SymbianSvgIconOrigin, + MaemoPngIcon, + MaemoPngIconOrigin, + }; + + MobileApp(); + ~MobileApp(); + + void setOrientation(Orientation orientation); + Orientation orientation() const; + void setProjectName(const QString &name); + QString projectName() const; + void setProjectPath(const QString &path); + void setSymbianSvgIcon(const QString &icon); + QString symbianSvgIcon() const; + void setMaemoPngIcon(const QString &icon); + QString maemoPngIcon() const; + void setSymbianTargetUid(const QString &uid); + QString symbianTargetUid() const; + void setNetworkEnabled(bool enabled); + bool networkEnabled() const; + + static QString symbianUidForPath(const QString &path); + Core::GeneratedFiles generateFiles(QString *errorMessage) const; + QString path(Path path) const; + QString error() const; + QByteArray generateFile(MobileAppGeneratedFileInfo::File file, + const QString *errorMessage) const; + static int stubVersion(); +private: + QByteArray generateMainCpp(const QString *errorMessage) const; + QByteArray generateProFile(const QString *errorMessage) const; + QByteArray generateDesktopFile(const QString *errorMessage) const; + static QString templatesRoot(); + + QString m_projectName; + QFileInfo m_projectPath; + QString m_symbianSvgIcon; + QString m_maemoPngIcon; + QString m_symbianTargetUid; + Orientation m_orientation; + bool m_networkEnabled; + QString m_error; +}; + +} // end of namespace Internal +} // end of namespace Qt4ProjectManager + +#endif // MOBILEAPP_H diff --git a/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp b/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp new file mode 100644 index 0000000000..5e06c1e451 --- /dev/null +++ b/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp @@ -0,0 +1,164 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** 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. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#include "mobileappwizard.h" +#include "mobileappwizardpages.h" +#include "mobileapp.h" + +#include "qt4projectmanagerconstants.h" + +#include <projectexplorer/baseprojectwizarddialog.h> +#include <projectexplorer/customwizard/customwizard.h> +#include <projectexplorer/projectexplorer.h> +#include <coreplugin/editormanager/editormanager.h> + +#include <QtGui/QIcon> + +#include <QtCore/QTextStream> +#include <QtCore/QCoreApplication> +#include <QtCore/QDir> +#include <QtCore/QFile> + +namespace Qt4ProjectManager { +namespace Internal { +namespace { +const QString DisplayName + = QCoreApplication::translate("MobileAppWizard", "Mobile Qt Application"); +const QString Description + = QCoreApplication::translate("MobileAppWizard", + "Creates a Qt application optimized for mobile devices " + "with a Qt Designer-based main window.\n\n" + "Preselects Qt for Simulator and mobile targets if available."); +} + +class MobileAppWizardDialog : public ProjectExplorer::BaseProjectWizardDialog +{ + Q_OBJECT + +public: + explicit MobileAppWizardDialog(QWidget *parent = 0); + +private: + class MobileAppWizardOptionsPage *m_optionsPage; + friend class MobileAppWizard; +}; + +MobileAppWizardDialog::MobileAppWizardDialog(QWidget *parent) + : ProjectExplorer::BaseProjectWizardDialog(parent) +{ + setWindowTitle(DisplayName); + setIntroDescription(Description); + m_optionsPage = new MobileAppWizardOptionsPage; + const int optionsPagePageId = addPage(m_optionsPage); + wizardProgress()->item(optionsPagePageId)->setTitle(tr("App options")); +} + +class MobileAppWizardPrivate +{ + class MobileApp *mobileApp; + class MobileAppWizardDialog *wizardDialog; + friend class MobileAppWizard; +}; + +MobileAppWizard::MobileAppWizard() + : Core::BaseFileWizard(parameters()) + , m_d(new MobileAppWizardPrivate) +{ + m_d->mobileApp = new MobileApp; + m_d->wizardDialog = 0; +} + +MobileAppWizard::~MobileAppWizard() +{ + delete m_d->mobileApp; +} + +Core::BaseFileWizardParameters MobileAppWizard::parameters() +{ + Core::BaseFileWizardParameters parameters(ProjectWizard); + parameters.setIcon(QIcon(QLatin1String(Constants::ICON_QT_PROJECT))); + parameters.setDisplayName(DisplayName); + parameters.setId(QLatin1String("C.Qt4GuiMobile")); + parameters.setDescription(Description); + parameters.setCategory(QLatin1String(Constants::QT_APP_WIZARD_CATEGORY)); + parameters.setDisplayCategory(QCoreApplication::translate(Constants::QT_APP_WIZARD_TR_SCOPE, + Constants::QT_APP_WIZARD_TR_CATEGORY)); + return parameters; +} + +QWizard *MobileAppWizard::createWizardDialog(QWidget *parent, + const QString &defaultPath, const WizardPageList &extensionPages) const +{ + m_d->wizardDialog = new MobileAppWizardDialog(parent); + + m_d->wizardDialog->setPath(defaultPath); + m_d->wizardDialog->setProjectName(MobileAppWizardDialog::uniqueProjectName(defaultPath)); + m_d->wizardDialog->m_optionsPage->setSymbianSvgIcon(m_d->mobileApp->symbianSvgIcon()); + m_d->wizardDialog->m_optionsPage->setMaemoPngIcon(m_d->mobileApp->maemoPngIcon()); + m_d->wizardDialog->m_optionsPage->setOrientation(m_d->mobileApp->orientation()); + m_d->wizardDialog->m_optionsPage->setNetworkEnabled(m_d->mobileApp->networkEnabled()); + connect(m_d->wizardDialog, SIGNAL(introPageLeft(QString, QString)), SLOT(useProjectPath(QString, QString))); + foreach (QWizardPage *p, extensionPages) + BaseFileWizard::applyExtensionPageShortTitle(m_d->wizardDialog, m_d->wizardDialog->addPage(p)); + + return m_d->wizardDialog; +} + +Core::GeneratedFiles MobileAppWizard::generateFiles(const QWizard *w, + QString *errorMessage) const +{ + Q_UNUSED(errorMessage) + + const MobileAppWizardDialog *wizard = qobject_cast<const MobileAppWizardDialog*>(w); + + m_d->mobileApp->setProjectName(wizard->projectName()); + m_d->mobileApp->setProjectPath(wizard->path()); + m_d->mobileApp->setSymbianTargetUid(wizard->m_optionsPage->symbianUid()); + m_d->mobileApp->setSymbianSvgIcon(wizard->m_optionsPage->symbianSvgIcon()); + m_d->mobileApp->setOrientation(wizard->m_optionsPage->orientation()); + m_d->mobileApp->setNetworkEnabled(wizard->m_optionsPage->networkEnabled()); + + return m_d->mobileApp->generateFiles(errorMessage); +} + +bool MobileAppWizard::postGenerateFiles(const QWizard *wizard, const Core::GeneratedFiles &l, QString *errorMessage) +{ + Q_UNUSED(wizard) + return ProjectExplorer::CustomProjectWizard::postGenerateOpen(l, errorMessage); +} + +void MobileAppWizard::useProjectPath(const QString &projectName, const QString &projectPath) +{ + m_d->wizardDialog->m_optionsPage->setSymbianUid(MobileApp::symbianUidForPath(projectPath + projectName)); +} + +} // namespace Internal +} // namespace Qt4ProjectManager + +#include "mobileappwizard.moc" diff --git a/src/plugins/qt4projectmanager/wizards/mobileappwizard.h b/src/plugins/qt4projectmanager/wizards/mobileappwizard.h new file mode 100644 index 0000000000..cfb2b4afd6 --- /dev/null +++ b/src/plugins/qt4projectmanager/wizards/mobileappwizard.h @@ -0,0 +1,65 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** 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. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#ifndef MOBILEAPPWIZARD_H +#define MOBILEAPPWIZARD_H + +#include <coreplugin/basefilewizard.h> + +namespace Qt4ProjectManager { +namespace Internal { + +class MobileAppWizard : public Core::BaseFileWizard +{ + Q_OBJECT + +public: + MobileAppWizard(); + virtual ~MobileAppWizard(); + static Core::BaseFileWizardParameters parameters(); + +protected: + QWizard *createWizardDialog(QWidget *parent, const QString &defaultPath, + const WizardPageList &extensionPages) const; + Core::GeneratedFiles generateFiles(const QWizard *wizard, + QString *errorMessage) const; + bool postGenerateFiles(const QWizard *w, const Core::GeneratedFiles &l, + QString *errorMessage); + +private slots: + void useProjectPath(const QString &projectName, const QString &projectPath); + +private: + class MobileAppWizardPrivate *m_d; +}; + +} // end of namespace Internal +} // end of namespace Qt4ProjectManager + +#endif // MOBILEAPPWIZARD_H diff --git a/src/plugins/qt4projectmanager/wizards/mobileappwizardoptionspage.ui b/src/plugins/qt4projectmanager/wizards/mobileappwizardoptionspage.ui new file mode 100644 index 0000000000..78878deca3 --- /dev/null +++ b/src/plugins/qt4projectmanager/wizards/mobileappwizardoptionspage.ui @@ -0,0 +1,233 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>MobileAppWizardOptionPage</class> + <widget class="QWizardPage" name="MobileAppWizardOptionPage"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>404</width> + <height>548</height> + </rect> + </property> + <property name="windowTitle"> + <string>WizardPage</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QGroupBox" name="groupBox_2"> + <property name="title"> + <string>General</string> + </property> + <layout class="QGridLayout" name="gridLayout_2"> + <property name="verticalSpacing"> + <number>12</number> + </property> + <item row="0" column="0"> + <widget class="QLabel" name="orientationBehaviorLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Orientation Behavior:</string> + </property> + <property name="buddy"> + <cstring>orientationBehaviorComboBox</cstring> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QComboBox" name="orientationBehaviorComboBox"/> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QTabWidget" name="platformsTabWidget"> + <property name="currentIndex"> + <number>0</number> + </property> + <widget class="QWidget" name="tab"> + <attribute name="title"> + <string>Symbian specific</string> + </attribute> + <layout class="QFormLayout" name="formLayout"> + <item row="0" column="0"> + <widget class="QLabel" name="symbianAppIconLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Application Icon (.svg):</string> + </property> + <property name="buddy"> + <cstring>symbianAppIconLoadToolButton</cstring> + </property> + </widget> + </item> + <item row="0" column="1"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QLabel" name="symbianAppIconPreview"> + <property name="minimumSize"> + <size> + <width>45</width> + <height>45</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>45</width> + <height>45</height> + </size> + </property> + <property name="frameShape"> + <enum>QFrame::Panel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Sunken</enum> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="symbianAppIconLoadToolButton"> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="symbianTargetUid3Label"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Target UID3:</string> + </property> + <property name="buddy"> + <cstring>symbianTargetUid3LineEdit</cstring> + </property> + </widget> + </item> + <item row="1" column="1"> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QLineEdit" name="symbianTargetUid3LineEdit"/> + </item> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item row="2" column="0" colspan="2"> + <widget class="QCheckBox" name="symbianEnableNetworkChackBox"> + <property name="text"> + <string>Enable network access</string> + </property> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="tab_2"> + <attribute name="title"> + <string>Maemo specific</string> + </attribute> + <widget class="QLabel" name="maemoAppIconLabel"> + <property name="geometry"> + <rect> + <x>9</x> + <y>9</y> + <width>155</width> + <height>16</height> + </rect> + </property> + <property name="text"> + <string>Application Icon (64x64):</string> + </property> + </widget> + <widget class="QToolButton" name="maemoPngIconButton"> + <property name="geometry"> + <rect> + <x>171</x> + <y>10</y> + <width>71</width> + <height>70</height> + </rect> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16777215</width> + <height>16777215</height> + </size> + </property> + <property name="text"> + <string/> + </property> + <property name="iconSize"> + <size> + <width>64</width> + <height>64</height> + </size> + </property> + </widget> + </widget> + </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/qt4projectmanager/wizards/mobileappwizardpages.cpp b/src/plugins/qt4projectmanager/wizards/mobileappwizardpages.cpp new file mode 100644 index 0000000000..a9684d94d6 --- /dev/null +++ b/src/plugins/qt4projectmanager/wizards/mobileappwizardpages.cpp @@ -0,0 +1,170 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** 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. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#include "mobileappwizardpages.h" +#include "ui_mobileappwizardoptionspage.h" +#include <coreplugin/coreconstants.h> + +#include <QtGui/QDesktopServices> +#include <QtGui/QFileDialog> +#include <QtGui/QFileDialog> +#include <QtGui/QMessageBox> + +namespace Qt4ProjectManager { +namespace Internal { + +class MobileAppWizardOptionsPagePrivate +{ + Ui::MobileAppWizardOptionPage ui; + QString symbianSvgIcon; + QString maemoPngIcon; + friend class MobileAppWizardOptionsPage; +}; + +MobileAppWizardOptionsPage::MobileAppWizardOptionsPage(QWidget *parent) + : QWizardPage(parent) + , m_d(new MobileAppWizardOptionsPagePrivate) +{ + m_d->ui.setupUi(this); + + const QIcon open = QApplication::style()->standardIcon(QStyle::SP_DirOpenIcon); + m_d->ui.symbianAppIconLoadToolButton->setIcon(open); + connect(m_d->ui.symbianAppIconLoadToolButton, SIGNAL(clicked()), SLOT(openSymbianSvgIcon())); + connect(m_d->ui.maemoPngIconButton, SIGNAL(clicked()), this, + SLOT(openMaemoPngIcon())); + + m_d->ui.orientationBehaviorComboBox->addItem(tr("Auto rotate orientation"), + MobileApp::Auto); + m_d->ui.orientationBehaviorComboBox->addItem(tr("Lock to landscape orientation"), + MobileApp::LockLandscape); + m_d->ui.orientationBehaviorComboBox->addItem(tr("Lock to portrait orientation"), + MobileApp::LockPortrait); +} + +MobileAppWizardOptionsPage::~MobileAppWizardOptionsPage() +{ + delete m_d; +} + +void MobileAppWizardOptionsPage::setOrientation(MobileApp::Orientation orientation) +{ + QComboBox *const comboBox = m_d->ui.orientationBehaviorComboBox; + for (int i = 0; i < comboBox->count(); ++i) + if (comboBox->itemData(i).toInt() == static_cast<int>(orientation)) { + comboBox->setCurrentIndex(i); + break; + } +} + +MobileApp::Orientation MobileAppWizardOptionsPage::orientation() const +{ + const int index = m_d->ui.orientationBehaviorComboBox->currentIndex(); + return static_cast<MobileApp::Orientation>(m_d->ui.orientationBehaviorComboBox->itemData(index).toInt()); +} + +QString MobileAppWizardOptionsPage::symbianSvgIcon() const +{ + return m_d->symbianSvgIcon; +} + +void MobileAppWizardOptionsPage::setSymbianSvgIcon(const QString &icon) +{ + QPixmap iconPixmap(icon); + if (!iconPixmap.isNull()) { + const int symbianIconSize = 44; + if (iconPixmap.height() > symbianIconSize || iconPixmap.width() > symbianIconSize) + iconPixmap = iconPixmap.scaledToHeight(symbianIconSize, Qt::SmoothTransformation); + m_d->ui.symbianAppIconPreview->setPixmap(iconPixmap); + m_d->symbianSvgIcon = icon; + } +} + +QString MobileAppWizardOptionsPage::maemoPngIcon() const +{ + return m_d->maemoPngIcon; +} + +void MobileAppWizardOptionsPage::setMaemoPngIcon(const QString &icon) +{ + QString error; + QPixmap iconPixmap(icon); + if (iconPixmap.isNull()) + error = tr("The file is not a valid image."); + else if (iconPixmap.size() != QSize(64, 64)) + error = tr("The icon has an invalid size."); + if (!error.isEmpty()) { + QMessageBox::warning(this, tr("Icon unusable"), error); + } else { + m_d->ui.maemoPngIconButton->setIcon(iconPixmap); + m_d->maemoPngIcon = icon; + } +} + +QString MobileAppWizardOptionsPage::symbianUid() const +{ + return m_d->ui.symbianTargetUid3LineEdit->text(); +} + +void MobileAppWizardOptionsPage::setSymbianUid(const QString &uid) +{ + m_d->ui.symbianTargetUid3LineEdit->setText(uid); +} + +void MobileAppWizardOptionsPage::setNetworkEnabled(bool enableIt) +{ + m_d->ui.symbianEnableNetworkChackBox->setChecked(enableIt); +} + +bool MobileAppWizardOptionsPage::networkEnabled() const +{ + return m_d->ui.symbianEnableNetworkChackBox->isChecked(); +} + +void MobileAppWizardOptionsPage::openSymbianSvgIcon() +{ + const QString svgIcon = QFileDialog::getOpenFileName( + this, + m_d->ui.symbianAppIconLabel->text(), + QDesktopServices::storageLocation(QDesktopServices::PicturesLocation), + QLatin1String("*.svg")); + if (!svgIcon.isEmpty()) + setSymbianSvgIcon(svgIcon); +} + +void MobileAppWizardOptionsPage::openMaemoPngIcon() +{ + const QString iconPath = QFileDialog::getOpenFileName(this, + m_d->ui.maemoAppIconLabel->text(), m_d->maemoPngIcon, + QLatin1String("*.png")); + if (!iconPath.isEmpty()) + setMaemoPngIcon(iconPath); +} + +} // namespace Internal +} // namespace Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/wizards/mobileappwizardpages.h b/src/plugins/qt4projectmanager/wizards/mobileappwizardpages.h new file mode 100644 index 0000000000..cbea2f7b35 --- /dev/null +++ b/src/plugins/qt4projectmanager/wizards/mobileappwizardpages.h @@ -0,0 +1,71 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** 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. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#ifndef QMLSTANDALONEAPPWIZARDPAGES_H +#define QMLSTANDALONEAPPWIZARDPAGES_H + +#include "mobileapp.h" + +#include <QtGui/QWizardPage> + +namespace Qt4ProjectManager { +namespace Internal { + +class MobileAppWizardOptionsPage : public QWizardPage +{ + Q_OBJECT + Q_DISABLE_COPY(MobileAppWizardOptionsPage) + +public: + explicit MobileAppWizardOptionsPage(QWidget *parent = 0); + virtual ~MobileAppWizardOptionsPage(); + + void setOrientation(MobileApp::Orientation orientation); + MobileApp::Orientation orientation() const; + QString symbianSvgIcon() const; + void setSymbianSvgIcon(const QString &icon); + QString maemoPngIcon() const; + void setMaemoPngIcon(const QString &icon); + QString symbianUid() const; + void setNetworkEnabled(bool enableIt); + bool networkEnabled() const; + void setSymbianUid(const QString &uid); + +private slots: + void openSymbianSvgIcon(); // Via file open dialog + void openMaemoPngIcon(); + +private: + class MobileAppWizardOptionsPagePrivate *m_d; +}; + +} // end of namespace Internal +} // end of namespace Qt4ProjectManager + +#endif // QMLSTANDALONEAPPWIZARDPAGES_H diff --git a/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.cpp b/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.cpp index 6a63538199..12cfa12b1a 100644 --- a/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.cpp +++ b/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.cpp @@ -95,7 +95,7 @@ QmlCppPlugin::QmlCppPlugin(const QString &name, const QFileInfo &path, , proFile(proFile) {} -GeneratedFileInfo::GeneratedFileInfo() +QmlAppGeneratedFileInfo::QmlAppGeneratedFileInfo() : file(MainQmlFile) , version(-1) , dataChecksum(0) @@ -103,17 +103,17 @@ GeneratedFileInfo::GeneratedFileInfo() { } -bool GeneratedFileInfo::isUpToDate() const +bool QmlAppGeneratedFileInfo::isUpToDate() const { return !isOutdated() && !wasModified(); } -bool GeneratedFileInfo::isOutdated() const +bool QmlAppGeneratedFileInfo::isOutdated() const { return version < QmlStandaloneApp::stubVersion(); } -bool GeneratedFileInfo::wasModified() const +bool QmlAppGeneratedFileInfo::wasModified() const { return dataChecksum != statedChecksum; } @@ -551,20 +551,20 @@ Core::GeneratedFiles QmlStandaloneApp::generateFiles(QString *errorMessage) cons Core::GeneratedFiles files; if (!useExistingMainQml()) { - files.append(file(generateFile(GeneratedFileInfo::MainQmlFile, errorMessage), path(MainQml))); + files.append(file(generateFile(QmlAppGeneratedFileInfo::MainQmlFile, errorMessage), path(MainQml))); files.last().setAttributes(Core::GeneratedFile::OpenEditorAttribute); } - files.append(file(generateFile(GeneratedFileInfo::AppProFile, errorMessage), path(AppPro))); + files.append(file(generateFile(QmlAppGeneratedFileInfo::AppProFile, errorMessage), path(AppPro))); files.last().setAttributes(Core::GeneratedFile::OpenProjectAttribute); - files.append(file(generateFile(GeneratedFileInfo::MainCppFile, errorMessage), path(MainCpp))); - files.append(file(generateFile(GeneratedFileInfo::SymbianSvgIconFile, errorMessage), path(SymbianSvgIcon))); - files.append(file(generateFile(GeneratedFileInfo::MaemoPngIconFile, errorMessage), path(MaemoPngIcon))); - files.append(file(generateFile(GeneratedFileInfo::DesktopFile, errorMessage), path(Desktop))); + files.append(file(generateFile(QmlAppGeneratedFileInfo::MainCppFile, errorMessage), path(MainCpp))); + files.append(file(generateFile(QmlAppGeneratedFileInfo::SymbianSvgIconFile, errorMessage), path(SymbianSvgIcon))); + files.append(file(generateFile(QmlAppGeneratedFileInfo::MaemoPngIconFile, errorMessage), path(MaemoPngIcon))); + files.append(file(generateFile(QmlAppGeneratedFileInfo::DesktopFile, errorMessage), path(Desktop))); - files.append(file(generateFile(GeneratedFileInfo::AppViewerPriFile, errorMessage), path(AppViewerPri))); - files.append(file(generateFile(GeneratedFileInfo::AppViewerCppFile, errorMessage), path(AppViewerCpp))); - files.append(file(generateFile(GeneratedFileInfo::AppViewerHFile, errorMessage), path(AppViewerH))); + files.append(file(generateFile(QmlAppGeneratedFileInfo::AppViewerPriFile, errorMessage), path(AppViewerPri))); + files.append(file(generateFile(QmlAppGeneratedFileInfo::AppViewerCppFile, errorMessage), path(AppViewerCpp))); + files.append(file(generateFile(QmlAppGeneratedFileInfo::AppViewerHFile, errorMessage), path(AppViewerH))); return files; } @@ -593,7 +593,7 @@ static QByteArray readBlob(const QString &source) return sourceFile.readAll(); } -QByteArray QmlStandaloneApp::generateFile(GeneratedFileInfo::File file, +QByteArray QmlStandaloneApp::generateFile(QmlAppGeneratedFileInfo::File file, const QString *errorMessage) const { QByteArray data; @@ -602,35 +602,35 @@ QByteArray QmlStandaloneApp::generateFile(GeneratedFileInfo::File file, QString comment = cFileComment; bool versionAndChecksum = false; switch (file) { - case GeneratedFileInfo::MainQmlFile: + case QmlAppGeneratedFileInfo::MainQmlFile: data = readBlob(path(MainQmlOrigin)); break; - case GeneratedFileInfo::MainCppFile: + case QmlAppGeneratedFileInfo::MainCppFile: data = generateMainCpp(errorMessage); break; - case GeneratedFileInfo::SymbianSvgIconFile: + case QmlAppGeneratedFileInfo::SymbianSvgIconFile: data = readBlob(path(SymbianSvgIconOrigin)); break; - case GeneratedFileInfo::MaemoPngIconFile: + case QmlAppGeneratedFileInfo::MaemoPngIconFile: data = readBlob(path(MaemoPngIconOrigin)); break; - case GeneratedFileInfo::DesktopFile: + case QmlAppGeneratedFileInfo::DesktopFile: data = generateDesktopFile(errorMessage); break; - case GeneratedFileInfo::AppProFile: + case QmlAppGeneratedFileInfo::AppProFile: data = generateProFile(errorMessage); comment = proFileComment; break; - case GeneratedFileInfo::AppViewerPriFile: + case QmlAppGeneratedFileInfo::AppViewerPriFile: data = readBlob(path(AppViewerPriOrigin)); comment = proFileComment; versionAndChecksum = true; break; - case GeneratedFileInfo::AppViewerCppFile: + case QmlAppGeneratedFileInfo::AppViewerCppFile: data = readBlob(path(AppViewerCppOrigin)); versionAndChecksum = true; break; - case GeneratedFileInfo::AppViewerHFile: + case QmlAppGeneratedFileInfo::AppViewerHFile: default: data = readBlob(path(AppViewerHOrigin)); versionAndChecksum = true; @@ -656,16 +656,16 @@ int QmlStandaloneApp::stubVersion() return 3; } -static QList<GeneratedFileInfo> updateableFiles(const QString &mainProFile) +static QList<QmlAppGeneratedFileInfo> updateableFiles(const QString &mainProFile) { - QList<GeneratedFileInfo> result; + QList<QmlAppGeneratedFileInfo> result; static const struct { - GeneratedFileInfo::File file; + QmlAppGeneratedFileInfo::File file; QString fileName; } files[] = { - {GeneratedFileInfo::AppViewerPriFile, appViewerPriFileName}, - {GeneratedFileInfo::AppViewerHFile, appViewerHFileName}, - {GeneratedFileInfo::AppViewerCppFile, appViewerCppFileName} + {QmlAppGeneratedFileInfo::AppViewerPriFile, appViewerPriFileName}, + {QmlAppGeneratedFileInfo::AppViewerHFile, appViewerHFileName}, + {QmlAppGeneratedFileInfo::AppViewerCppFile, appViewerCppFileName} }; const QFileInfo mainProFileInfo(mainProFile); const int size = sizeof(files) / sizeof(files[0]); @@ -674,7 +674,7 @@ static QList<GeneratedFileInfo> updateableFiles(const QString &mainProFile) + QLatin1Char('/') + appViewerOriginsSubDir + files[i].fileName; if (!QFile::exists(fileName)) continue; - GeneratedFileInfo file; + QmlAppGeneratedFileInfo file; file.file = files[i].file; file.fileInfo = QFileInfo(fileName); result.append(file); @@ -682,11 +682,11 @@ static QList<GeneratedFileInfo> updateableFiles(const QString &mainProFile) return result; } -QList<GeneratedFileInfo> QmlStandaloneApp::fileUpdates(const QString &mainProFile) +QList<QmlAppGeneratedFileInfo> QmlStandaloneApp::fileUpdates(const QString &mainProFile) { - QList<GeneratedFileInfo> result; - foreach (const GeneratedFileInfo &file, updateableFiles(mainProFile)) { - GeneratedFileInfo newFile = file; + QList<QmlAppGeneratedFileInfo> result; + foreach (const QmlAppGeneratedFileInfo &file, updateableFiles(mainProFile)) { + QmlAppGeneratedFileInfo newFile = file; QFile readFile(newFile.fileInfo.absoluteFilePath()); if (!readFile.open(QIODevice::ReadOnly)) continue; @@ -707,11 +707,11 @@ QList<GeneratedFileInfo> QmlStandaloneApp::fileUpdates(const QString &mainProFil return result; } -bool QmlStandaloneApp::updateFiles(const QList<GeneratedFileInfo> &list, QString &error) +bool QmlStandaloneApp::updateFiles(const QList<QmlAppGeneratedFileInfo> &list, QString &error) { error.clear(); const QmlStandaloneApp app; - foreach (const GeneratedFileInfo &info, list) { + foreach (const QmlAppGeneratedFileInfo &info, list) { const QByteArray data = app.generateFile(info.file, &error); if (!error.isEmpty()) return false; diff --git a/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.h b/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.h index c3501708d9..03deb386c2 100644 --- a/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.h +++ b/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.h @@ -76,7 +76,7 @@ struct QmlCppPlugin const QFileInfo proFile; // .pro file for the plugin }; -struct GeneratedFileInfo +struct QmlAppGeneratedFileInfo { enum File { MainQmlFile, @@ -90,7 +90,7 @@ struct GeneratedFileInfo DesktopFile }; - GeneratedFileInfo(); + QmlAppGeneratedFileInfo(); bool isUpToDate() const; bool isOutdated() const; @@ -170,10 +170,10 @@ public: bool useExistingMainQml() const; QString error() const; const QList<QmlModule*> modules() const; - QByteArray generateFile(GeneratedFileInfo::File file, const QString *errorMessage) const; + QByteArray generateFile(QmlAppGeneratedFileInfo::File file, const QString *errorMessage) const; static int stubVersion(); - static QList<GeneratedFileInfo> fileUpdates(const QString &mainProFile); - static bool updateFiles(const QList<GeneratedFileInfo> &list, QString &error); + static QList<QmlAppGeneratedFileInfo> fileUpdates(const QString &mainProFile); + static bool updateFiles(const QList<QmlAppGeneratedFileInfo> &list, QString &error); private: QByteArray generateMainCpp(const QString *errorMessage) const; |