diff --git a/share/qtcreator/templates/mobileapp/app.desktop b/share/qtcreator/templates/mobileapp/app.desktop new file mode 100644 index 0000000000000000000000000000000000000000..e9d9304f6becf8a56f31a332162349c5b362dee5 --- /dev/null +++ b/share/qtcreator/templates/mobileapp/app.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=thisApp +Exec=/opt/bin/thisApp +Icon=thisApp +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/share/qtcreator/templates/mobileapp/app.pri b/share/qtcreator/templates/mobileapp/app.pri new file mode 100644 index 0000000000000000000000000000000000000000..b46ce3227e38b6bd05706b664c2f4659d0c0f199 --- /dev/null +++ b/share/qtcreator/templates/mobileapp/app.pri @@ -0,0 +1,23 @@ +# This file should not be edited. +# Following versions of Qt Creator might offer new version. + +INCLUDEPATH += $$PWD + +symbian { + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -leiksrv -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:unix { + maemo5 { + installPrefix = /opt/usr + desktopfile.path = /usr/share/applications/hildon + } else { + installPrefix = /usr/local + desktopfile.path = /usr/share/applications + } + icon.files = $${TARGET}.png + icon.path = /usr/share/icons/hicolor/64x64 + desktopfile.files = $${TARGET}.desktop + target.path = $${installPrefix}/bin + INSTALLS += desktopfile icon target +} diff --git a/share/qtcreator/templates/mobileapp/app.pro b/share/qtcreator/templates/mobileapp/app.pro new file mode 100644 index 0000000000000000000000000000000000000000..cd05a35c68126520de5fbff6df0bcd5c755e6944 --- /dev/null +++ b/share/qtcreator/templates/mobileapp/app.pro @@ -0,0 +1,18 @@ +# Avoid auto screen rotation +# ORIENTATIONLOCK # +DEFINES += ORIENTATIONLOCK + +# Needs to be defined for Symbian +# NETWORKACCESS # +DEFINES += NETWORKACCESS + +# TARGETUID3 # +symbian:TARGET.UID3 = 0xE1111234 + +symbian:ICON = symbianicon.svg + +SOURCES += main.cpp mainwindow.cpp +HEADERS += mainwindow.h +FORMS += mainwindow.ui + +include(app.pri) diff --git a/share/qtcreator/templates/mobileapp/maemoicon.png b/share/qtcreator/templates/mobileapp/maemoicon.png new file mode 100644 index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299 Binary files /dev/null and b/share/qtcreator/templates/mobileapp/maemoicon.png differ diff --git a/share/qtcreator/templates/mobileapp/main.cpp b/share/qtcreator/templates/mobileapp/main.cpp new file mode 100644 index 0000000000000000000000000000000000000000..59b739482aabe17303e9b74ee7e9340204b22eac --- /dev/null +++ b/share/qtcreator/templates/mobileapp/main.cpp @@ -0,0 +1,20 @@ +#include "mainwindow.h" + +#include <QtGui/QApplication> + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + MainWindow mainWindow; + mainWindow.setOrientation(MainWindow::Auto); // ORIENTATION + +#ifdef Q_OS_SYMBIAN + mainWindow.showFullScreen(); +#elif defined(Q_WS_MAEMO_5) + mainWindow.showMaximized(); +#else + mainWindow.show(); +#endif + return app.exec(); +} diff --git a/share/qtcreator/templates/mobileapp/mainwindow.cpp b/share/qtcreator/templates/mobileapp/mainwindow.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d08587ce9b266d289862bb5ba7bcc94adbbc4aab --- /dev/null +++ b/share/qtcreator/templates/mobileapp/mainwindow.cpp @@ -0,0 +1,59 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" + +#include <QtCore/QCoreApplication> + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include <eikenv.h> +#include <eikappui.h> +#include <aknenv.h> +#include <aknappui.h> +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent), ui(new Ui::MainWindow) +{ + ui->setupUi(this); +} + +MainWindow::~MainWindow() +{ + delete ui; +} + +void MainWindow::setOrientation(Orientation orientation) +{ +#ifdef Q_OS_SYMBIAN + if (orientation != Auto) { +#if defined(ORIENTATIONLOCK) + const CAknAppUiBase::TAppUiOrientation uiOrientation = + (orientation == LockPortrait) ? CAknAppUi::EAppUiOrientationPortrait + : CAknAppUi::EAppUiOrientationLandscape; + CAknAppUi* appUi = dynamic_cast<CAknAppUi*> (CEikonEnv::Static()->AppUi()); + TRAPD(error, + if (appUi) + appUi->SetOrientationL(uiOrientation); + ); +#else // ORIENTATIONLOCK + qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation."); +#endif // ORIENTATIONLOCK + } +#elif defined(Q_WS_MAEMO_5) + Qt::WidgetAttribute attribute; + switch (orientation) { + case LockPortrait: + attribute = Qt::WA_Maemo5PortraitOrientation; + break; + case LockLandscape: + attribute = Qt::WA_Maemo5LandscapeOrientation; + break; + case Auto: + default: + attribute = Qt::WA_Maemo5AutoOrientation; + break; + } + setAttribute(attribute, true); +#else // Q_OS_SYMBIAN + Q_UNUSED(orientation); +#endif // Q_OS_SYMBIAN +} diff --git a/share/qtcreator/templates/mobileapp/mainwindow.h b/share/qtcreator/templates/mobileapp/mainwindow.h new file mode 100644 index 0000000000000000000000000000000000000000..dc9813dbb775e5b6784f55a08a99db865c2c7394 --- /dev/null +++ b/share/qtcreator/templates/mobileapp/mainwindow.h @@ -0,0 +1,28 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include <QtGui/QMainWindow> + +namespace Ui { + class MainWindow; +} + +class MainWindow : public QMainWindow +{ +public: + enum Orientation { + LockPortrait, + LockLandscape, + Auto + }; + + MainWindow(QWidget *parent = 0); + ~MainWindow(); + + void setOrientation(Orientation orientation); + +private: + Ui::MainWindow *ui; +}; + +#endif // MAINWINDOW_H diff --git a/share/qtcreator/templates/mobileapp/mainwindow.ui b/share/qtcreator/templates/mobileapp/mainwindow.ui new file mode 100644 index 0000000000000000000000000000000000000000..d2ae706e129c1f599cf6fb8d0f115b3a82e2cc46 --- /dev/null +++ b/share/qtcreator/templates/mobileapp/mainwindow.ui @@ -0,0 +1,24 @@ +<ui version="4.0"> + <class>MainWindow</class> + <widget class="QMainWindow" name="MainWindow" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>200</width> + <height>320</height> + </rect> + </property> + <property name="windowTitle" > + <string>MainWindow</string> + </property> + <widget class="QMenuBar" name="menuBar" /> + <widget class="QToolBar" name="mainToolBar" /> + <widget class="QWidget" name="centralWidget" /> + <widget class="QStatusBar" name="statusBar" /> + </widget> + <layoutDefault spacing="6" margin="11" /> + <pixmapfunction></pixmapfunction> + <resources/> + <connections/> +</ui> diff --git a/share/qtcreator/templates/mobileapp/symbianicon.svg b/share/qtcreator/templates/mobileapp/symbianicon.svg new file mode 100644 index 0000000000000000000000000000000000000000..566acfada01cfe8ab7550dc4187ff76fe34d86ae --- /dev/null +++ b/share/qtcreator/templates/mobileapp/symbianicon.svg @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + height="44px" + version="1.1" + viewBox="0 0 44 44" + width="44px" + x="0px" + y="0px" + id="svg2" + inkscape:version="0.47 r22583" + sodipodi:docname="qt.svg"> + <metadata + id="metadata18"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs16"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 22 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="44 : 22 : 1" + inkscape:persp3d-origin="22 : 14.666667 : 1" + id="perspective2836" /> + </defs> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1020" + id="namedview14" + showgrid="false" + inkscape:zoom="21.454545" + inkscape:cx="49.412871" + inkscape:cy="21.894358" + inkscape:window-x="-4" + inkscape:window-y="-4" + inkscape:window-maximized="1" + inkscape:current-layer="g3" /> + <g + transform="matrix(0.18308778,0,0,0.18308778,6.6100946,3.2385199)" + id="g3"> + <path + d="M 43.09,0.3586 C 40.94,0.0036 38.84,-0.0824 36.81,0.0776 31.968136,0.39505671 27.122677,0.73638425 22.28,1.0696 9.62,2.0816 0,12.4996 0,26.8896 l 0,169.7 14.19,13.2 28.87,-209.42 0.03,-0.011 z" + style="fill:#006225" + id="path5" + sodipodi:nodetypes="cccccccc" /> + <path + d="m 174.4,160 c 0,12.5 -7.75,24.07 -17.57,25.77 L 14.23,209.73 V 25.93 C 14.23,9.21 27.57,-2.27 43.12,0.3 l 131.3,21.52 v 138.2 z" + style="fill:#80c342" + id="path7" /> + <path + d="m 154.9,80.96 -12.96,-0.598 0,0.278 6.945,0.32 6.016,0 z" + style="fill:#006225" + id="path11" /> + <path + d="m 144.6,135.6 c 0.66,0.328 1.43,0.476 2.351,0.476 0.161,0 0.329,-0.004 0.497,-0.016 2.55,-0.148 5.32,-0.933 8.343,-2.308 h -6.015 c -1.821,0.832 -3.532,1.457 -5.176,1.848 z" + style="fill:#006225" + id="path13" /> + <path + id="path17" + style="fill:#ffffff" + d="m 91.15,132.4 c 2.351,-6.051 3.511,-17.91 3.511,-35.62 0,-15.89 -1.148,-26.82 -3.484,-32.81 -2.336,-6.027 -5.832,-9.281 -10.52,-9.691 -0.359,-0.031 -0.714,-0.051 -1.058,-0.051 -4.34,0 -7.68,2.535 -10.01,7.625 -2.52,5.543 -3.793,17.04 -3.793,34.44 0,16.82 1.238,28.75 3.734,35.75 2.356,6.672 5.879,9.976 10.5,9.976 0.207,0 0.41,-0.008 0.621,-0.019 4.633,-0.293 8.121,-3.496 10.49,-9.602 m 17.98,3.75 c -4.117,9.707 -10.39,16.06 -18.99,19 0.867,4.449 2.176,7.441 3.922,9.019 1.351,1.211 3.433,1.821 6.222,1.821 0.805,0 1.668,-0.055 2.59,-0.157 v 13.12 l -5.961,0.782 c -1.758,0.23 -3.426,0.343 -5.004,0.343 -5.218,0 -9.445,-1.265 -12.62,-3.824 -4.207,-3.379 -7.308,-9.894 -9.297,-19.54 -9.136,-1.945 -16.26,-7.754 -21.19,-17.5 -5.004,-9.902 -7.551,-24.39 -7.551,-43.34 0,-20.43 3.484,-35.51 10.34,-45.07 5.789,-8.07 13.86,-12.04 24.02,-12.04 1.629,0 3.309,0.102 5.043,0.305 11.95,1.375 20.62,7.016 26.26,16.79 5.535,9.562 8.254,23.27 8.254,41.26 0,16.48 -2,29.45 -6.043,39.02 z M 130.4,45.91 l 11.52,1.238 0,20.21 12.96,0.914 0,12.68 -12.96,-0.598 0,46.33 c 0,4.032 0.445,6.625 1.34,7.789 0.8,1.067 2.046,1.594 3.71,1.594 0.161,0 0.329,-0.004 0.497,-0.016 2.55,-0.148 5.32,-0.933 8.343,-2.308 v 11.65 c -5.136,2.258 -10.18,3.598 -15.12,4.02 -0.718,0.055 -1.41,0.086 -2.078,0.086 -4.48,0 -7.906,-1.301 -10.25,-3.934 -2.73,-3.051 -4.09,-7.949 -4.09,-14.67 V 79.535 L 118.046,79.25 V 65.66 l 7.586,0.547 4.773,-20.3 z" /> + <path + d="m 100.3,166 c 0.809,0 1.672,-0.055 2.59,-0.157 H 98.054 C 98.73,165.949 99.507,166 100.3,166 z" + style="fill:#006225" + id="path19" /> + <path + id="path21" + style="fill:#006225" + d="m 84.85,63.98 c 2.336,5.997 3.484,16.92 3.484,32.81 0,17.7 -1.16,29.57 -3.512,35.62 -1.894,4.879 -4.527,7.902 -7.863,9.07 0.965,0.368 1.992,0.551 3.078,0.551 0.207,0 0.41,-0.008 0.621,-0.019 4.633,-0.293 8.121,-3.496 10.49,-9.602 2.351,-6.051 3.511,-17.91 3.511,-35.62 0,-15.89 -1.148,-26.82 -3.484,-32.81 -2.336,-6.027 -5.832,-9.281 -10.52,-9.691 -0.359,-0.031 -0.714,-0.051 -1.058,-0.051 -1.09,0 -2.117,0.16 -3.082,0.481 h -0.004 c 3.601,1.121 6.379,4.215 8.336,9.261 z m -2.344,114.3 c -0.113,-0.05 -0.227,-0.105 -0.336,-0.16 -0.012,-0.004 -0.023,-0.012 -0.035,-0.015 -0.102,-0.051 -0.207,-0.106 -0.309,-0.157 -0.019,-0.011 -0.039,-0.019 -0.058,-0.031 -0.09,-0.051 -0.184,-0.098 -0.278,-0.148 -0.027,-0.016 -0.054,-0.036 -0.086,-0.051 -0.082,-0.043 -0.164,-0.09 -0.242,-0.137 -0.039,-0.023 -0.078,-0.047 -0.113,-0.07 -0.07,-0.039 -0.145,-0.082 -0.215,-0.125 -0.047,-0.031 -0.094,-0.059 -0.14,-0.09 -0.059,-0.039 -0.118,-0.074 -0.176,-0.113 -0.059,-0.039 -0.114,-0.075 -0.168,-0.114 -0.051,-0.031 -0.102,-0.066 -0.149,-0.097 -0.066,-0.047 -0.132,-0.094 -0.195,-0.137 -0.039,-0.027 -0.078,-0.055 -0.113,-0.082 -0.078,-0.055 -0.153,-0.113 -0.231,-0.172 -0.023,-0.016 -0.05,-0.035 -0.078,-0.055 -0.098,-0.078 -0.199,-0.156 -0.297,-0.234 -4.207,-3.379 -7.308,-9.894 -9.297,-19.54 -9.136,-1.945 -16.26,-7.754 -21.19,-17.5 -5.004,-9.902 -7.551,-24.39 -7.551,-43.34 0,-20.43 3.484,-35.51 10.34,-45.07 5.789,-8.07 13.86,-12.04 24.02,-12.04 h -6.351 c -10.15,0.008 -18.22,3.977 -24,12.04 -6.855,9.563 -10.34,24.64 -10.34,45.07 0,18.95 2.547,33.44 7.551,43.34 4.934,9.75 12.05,15.56 21.19,17.5 1.989,9.641 5.09,16.16 9.297,19.54 3.176,2.559 7.403,3.824 12.62,3.824 0.098,0 0.199,0 0.297,-0.004 h 5.539 c -3.406,-0.05 -6.383,-0.66 -8.906,-1.828 L 82.498,178.28 z M 128.4,145.6 c -2.73,-3.051 -4.09,-7.949 -4.09,-14.67 V 79.57 l -6.226,-0.285 v -13.59 h -6.016 v 3.035 c 0.871,3.273 1.555,6.82 2.063,10.64 l 4.164,0.192 v 51.36 c 0,6.723 1.367,11.62 4.09,14.67 2.343,2.633 5.765,3.934 10.25,3.934 h 6.015 c -4.48,0 -7.906,-1.301 -10.25,-3.934 z m 2.043,-99.66 -6.016,0 -4.668,19.88 5.911,0.422 4.773,-20.3 z" /> + </g> +</svg> diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.cpp b/src/plugins/qt4projectmanager/qt4projectmanager.cpp index 6454625d721c72c5a5f15e6cd030a7f97d265523..b708ebd901ed2fe64ff967685472e6e6bdfec0b7 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 9308625298315eaa50579d8f46400c04dc7e6b8f..18136288610bfa9a6bec14ae76a97c06a290df38 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 8d69eb703f6f27f83b47615939e03f1718ff08fe..0ed226159594f1734907fc6bdb426d89ccdbd9ab 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 0000000000000000000000000000000000000000..1634e1384d0c8e9f2e926b3bbee224278e7f3e76 --- /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 0000000000000000000000000000000000000000..9452bc361f732d397910f671c40f395c5e04a934 --- /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 0000000000000000000000000000000000000000..5e06c1e451da67f5223904d1b0500f21aad11c34 --- /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 0000000000000000000000000000000000000000..cfb2b4afd6e62e64b273ff365d5adc56856c106f --- /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 0000000000000000000000000000000000000000..78878deca39ff7efce5a3f1fd077719428536a81 --- /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 0000000000000000000000000000000000000000..a9684d94d6b31e109f32e78f244233fd6ac1ae0f --- /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 0000000000000000000000000000000000000000..cbea2f7b359523414b2201ab81a596302b69b34a --- /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 6a63538199aee29df675945dfd2c95ea2556a8cd..12cfa12b1a2163f580986b50df6d5dcbdd5cf4ea 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 c3501708d9c7c32614233e824517e2c7fd77f56c..03deb386c215523ae88127b3cc2208d4571c6156 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;