summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@nokia.com>2010-09-13 11:20:13 +0200
committerChristian Kandeler <christian.kandeler@nokia.com>2010-09-13 11:22:38 +0200
commite83ba4d4ece9dd2206ca67e399d5dfeb881472f7 (patch)
tree83cac7e5894fdc0594f6a54c4693c2bf9eac629b /src
parent342ab57db29cad5692a7e5919a413dd44f082993 (diff)
downloadqt-creator-e83ba4d4ece9dd2206ca67e399d5dfeb881472f7.tar.gz
Mobile wizard: Model after QML wizard.
Nodded-at-by: dt
Diffstat (limited to 'src')
-rw-r--r--src/plugins/qt4projectmanager/qt4projectmanager.cpp4
-rw-r--r--src/plugins/qt4projectmanager/qt4projectmanager.pro9
-rw-r--r--src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp6
-rw-r--r--src/plugins/qt4projectmanager/wizards/mobileapp.cpp410
-rw-r--r--src/plugins/qt4projectmanager/wizards/mobileapp.h143
-rw-r--r--src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp164
-rw-r--r--src/plugins/qt4projectmanager/wizards/mobileappwizard.h65
-rw-r--r--src/plugins/qt4projectmanager/wizards/mobileappwizardoptionspage.ui233
-rw-r--r--src/plugins/qt4projectmanager/wizards/mobileappwizardpages.cpp170
-rw-r--r--src/plugins/qt4projectmanager/wizards/mobileappwizardpages.h71
-rw-r--r--src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.cpp72
-rw-r--r--src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.h10
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 &parameter)
+{
+ 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;