diff --git a/src/plugins/qmlprojectmanager/qmlproject.qrc b/src/plugins/qmlprojectmanager/qmlproject.qrc index 21338b6a545c42dd2363d51089465b4af45129ca..c50f05276eba06d7b5d6f2ba2bbb0fd9dadeb6c8 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.qrc +++ b/src/plugins/qmlprojectmanager/qmlproject.qrc @@ -4,5 +4,11 @@ <file>images/qmlfolder.png</file> <file>images/qmlproject.png</file> <file>images/qml_wizard.png</file> + <file>wizards/templates/app.pro</file> + <file>wizards/templates/qml/app.qml</file> + <file>wizards/templates/cpp/qmlapplicationview.h</file> + <file>wizards/templates/cpp/symbianicon.svg</file> + <file>wizards/templates/cpp/main.cpp</file> + <file>wizards/templates/cpp/qmlapplicationview.cpp</file> </qresource> </RCC> diff --git a/src/plugins/qmlprojectmanager/qmlprojectmanager.pro b/src/plugins/qmlprojectmanager/qmlprojectmanager.pro index d97c600458e6471ffd53e496b51a770d005d627a..97158b12ca2ce07e081edb8735536820121b694b 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectmanager.pro +++ b/src/plugins/qmlprojectmanager/qmlprojectmanager.pro @@ -21,7 +21,11 @@ HEADERS += qmlproject.h \ qmlprojectapplicationwizard.h \ qmlprojectmanager_global.h \ qmlprojectmanagerconstants.h \ - qmlprojecttarget.h + qmlprojecttarget.h \ + wizards/qmlstandaloneappwizard.h \ + wizards/qmlstandaloneappwizardoptionspage.h \ + wizards/qmlstandaloneapp.h + SOURCES += qmlproject.cpp \ qmlprojectplugin.cpp \ qmlprojectmanager.cpp \ @@ -32,8 +36,19 @@ SOURCES += qmlproject.cpp \ qmlprojectrunconfiguration.cpp \ qmlprojectrunconfigurationfactory.cpp \ qmlprojectapplicationwizard.cpp \ - qmlprojecttarget.cpp + qmlprojecttarget.cpp \ + wizards/qmlstandaloneappwizard.cpp \ + wizards/qmlstandaloneappwizardoptionspage.cpp \ + wizards/qmlstandaloneapp.cpp + RESOURCES += qmlproject.qrc +INCLUDEPATH += \ + . \ + wizards + +FORMS += \ + wizards/qmlstandaloneappwizardoptionspage.ui + OTHER_FILES += QmlProjectManager.pluginspec \ QmlProject.mimetypes.xml diff --git a/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp b/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp index 622f594079cc38adba3721079cc95b7577cc77e0..2bbacd7d264e8c3e202e31a6ceb84a36e5166d84 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp @@ -31,6 +31,7 @@ #include "qmlprojectmanager.h" #include "qmlprojectimportwizard.h" #include "qmlprojectapplicationwizard.h" +#include "qmlstandaloneappwizard.h" #include "qmlprojectconstants.h" #include "qmlproject.h" #include "qmlprojectrunconfigurationfactory.h" @@ -76,6 +77,7 @@ bool QmlProjectPlugin::initialize(const QStringList &, QString *errorMessage) addAutoReleasedObject(manager); addAutoReleasedObject(new Internal::QmlProjectRunConfigurationFactory); addAutoReleasedObject(new Internal::QmlRunControlFactory); + addAutoReleasedObject(new QmlNewStandaloneAppWizard); addAutoReleasedObject(new QmlProjectApplicationWizard); addAutoReleasedObject(new QmlProjectImportWizard); diff --git a/src/plugins/qmlprojectmanager/wizards/qmlstandaloneapp.cpp b/src/plugins/qmlprojectmanager/wizards/qmlstandaloneapp.cpp new file mode 100644 index 0000000000000000000000000000000000000000..1ec01439aba9ada4f2e6612f86a96e38d96379cd --- /dev/null +++ b/src/plugins/qmlprojectmanager/wizards/qmlstandaloneapp.cpp @@ -0,0 +1,328 @@ +/************************************************************************** +** +** 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 "qmlstandaloneapp.h" + +#include <QtCore/QDir> +#include <QtCore/QFile> +#include <QtCore/QRegExp> +#include <QtCore/QTextStream> + +namespace QmlProjectManager { +namespace Internal { + +QmlStandaloneApp::QmlStandaloneApp() + : m_loadDummyData(false) + , m_orientation(Auto) + , m_networkEnabled(false) +{ +} + +QString QmlStandaloneApp::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 QmlStandaloneApp::setOrientation(Orientation orientation) +{ + m_orientation = orientation; +} + +QmlStandaloneApp::Orientation QmlStandaloneApp::orientation() const +{ + return m_orientation; +} + +void QmlStandaloneApp::setProjectName(const QString &name) +{ + m_projectName = name; +} + +QString QmlStandaloneApp::projectName() const +{ + return m_projectName; +} + +void QmlStandaloneApp::setProjectPath(const QString &path) +{ + m_projectPath = path; + if (!(m_projectPath.endsWith(QLatin1Char('\\')) + || m_projectPath.endsWith(QLatin1Char('/')))) + m_projectPath.append(QDir::separator()); +} + +void QmlStandaloneApp::setSymbianSvgIcon(const QString &icon) +{ + m_symbianSvgIcon = icon; +} + +QString QmlStandaloneApp::symbianSvgIcon() const +{ + return path(SymbianSvgIcon, Source); +} + +void QmlStandaloneApp::setSymbianTargetUid(const QString &uid) +{ + m_symbianTargetUid = uid; +} + +QString QmlStandaloneApp::symbianTargetUid() const +{ + return !m_symbianTargetUid.isEmpty() ? m_symbianTargetUid + : symbianUidForPath(m_projectPath + m_projectName); +} + +void QmlStandaloneApp::setLoadDummyData(bool loadIt) +{ + m_loadDummyData = loadIt; +} + +bool QmlStandaloneApp::loadDummyData() const +{ + return m_loadDummyData; +} + +void QmlStandaloneApp::setNetworkEnabled(bool enabled) +{ + m_networkEnabled = enabled; +} + +bool QmlStandaloneApp::networkEnabled() const +{ + return m_networkEnabled; +} + +QString QmlStandaloneApp::path(Path path, Location location) const +{ + const QString sourceRoot = QLatin1String(":/qmlproject/wizards/templates/"); + const QString cppSourceSubDir = QLatin1String("cpp/"); + const QString qmlSourceSubDir = QLatin1String("qml/"); + const QString cppTargetSubDir = cppSourceSubDir; + const QString qmlTargetSubDir = qmlSourceSubDir; + const QString qmlExtension = QLatin1String(".qml"); + const QString mainCpp = QLatin1String("main.cpp"); + const QString appViewCpp = QLatin1String("qmlapplicationview.cpp"); + const QString appViewH = QLatin1String("qmlapplicationview.h"); + const QString symbianIcon = QLatin1String("symbianicon.svg"); + const char* const errorMessage = "QmlStandaloneApp::path() needs more work"; + + switch (location) { + case Source: { + switch (path) { + case MainQml: return sourceRoot + qmlSourceSubDir + QLatin1String("app.qml"); + case AppProfile: return sourceRoot + QLatin1String("app.pro"); + case MainCpp: return sourceRoot + cppSourceSubDir + mainCpp; + case AppViewerCpp: return sourceRoot + cppSourceSubDir + appViewCpp; + case AppViewerH: return sourceRoot + cppSourceSubDir + appViewH; + case SymbianSvgIcon: return !m_symbianSvgIcon.isEmpty() ? m_symbianSvgIcon + :sourceRoot + cppSourceSubDir + symbianIcon; + default: qFatal(errorMessage); + } + } + case Target: { + const QString pathBase = m_projectPath + m_projectName + QDir::separator(); + switch (path) { + case MainQml: return pathBase + qmlTargetSubDir + m_projectName + qmlExtension; + case AppProfile: return pathBase + m_projectName + QLatin1String(".pro"); + case MainCpp: return pathBase + cppTargetSubDir + mainCpp; + case AppViewerCpp: return pathBase + cppTargetSubDir + appViewCpp; + case AppViewerH: return pathBase + cppTargetSubDir + appViewH; + case SymbianSvgIcon: return pathBase + cppTargetSubDir + symbianIcon; + default: qFatal(errorMessage); + } + } + case AppProfileRelative: { + switch (path) { + case MainQml: return qmlTargetSubDir + m_projectName + qmlExtension; + case MainCpp: return cppTargetSubDir + mainCpp; + case AppViewerCpp: return cppTargetSubDir + appViewCpp; + case AppViewerH: return cppTargetSubDir + appViewH; + case SymbianSvgIcon: return cppTargetSubDir + symbianIcon; + case QmlDir: return QString(qmlTargetSubDir).remove(qmlTargetSubDir.length() - 1, 1); + default: qFatal(errorMessage); + } + } + default: { /* case MainCppRelative: */ + switch (path) { + case MainQml: return qmlTargetSubDir + m_projectName + qmlExtension; + default: qFatal(errorMessage); + } + } + } + return QString(); +} + + +static QString insertParameter(const QString &line, const QString ¶meter) +{ + return QString(line).replace(QRegExp(QLatin1String("\\([^()]+\\)")), + QLatin1Char('(') + parameter + QLatin1Char(')')); +} + +QByteArray QmlStandaloneApp::generateMainCpp(const QString *errorMessage) const +{ + Q_UNUSED(errorMessage) + + QFile sourceFile(path(MainCpp, Source)); + sourceFile.open(QIODevice::ReadOnly); + Q_ASSERT(sourceFile.isOpen()); + QTextStream in(&sourceFile); + + QByteArray mainCppContent; + QTextStream out(&mainCppContent, QIODevice::WriteOnly); + + QString line; + do { + line = in.readLine(); + if (line.contains(QLatin1String("// MAINQML"))) { + line = insertParameter(line, QLatin1Char('"') + + path(MainQml, MainCppRelative) + QLatin1Char('"')); + } else if (line.contains(QLatin1String("// IMPORTPATHSLIST"))) { + continue; + } else if (line.contains(QLatin1String("// SETIMPORTPATHLIST"))) { + continue; + } else if (line.contains(QLatin1String("// ORIENTATION"))) { + if (m_orientation == Auto) + continue; + else + line = insertParameter(line, QLatin1String("QmlApplicationView::") + + QLatin1String(m_orientation == LockLandscape ? + "LockLandscape" : "LockPortrait")); + } else if (line.contains(QLatin1String("// LOADDUMMYDATA"))) { + continue; + } + const int commentIndex = line.indexOf(QLatin1String(" //")); + if (commentIndex != -1) + line.truncate(commentIndex); + out << line << endl; + } while (!line.isNull()); + + return mainCppContent; +} + +QByteArray QmlStandaloneApp::generateProFile(const QString *errorMessage) const +{ + Q_UNUSED(errorMessage) + + QFile proFile(path(AppProfile, Source)); + proFile.open(QIODevice::ReadOnly); + Q_ASSERT(proFile.isOpen()); + QTextStream in(&proFile); + + QByteArray proFileContent; + QTextStream out(&proFileContent, QIODevice::WriteOnly); + + QString line; + QString valueOnNextLine; + bool uncommentNextLine = false; + do { + line = in.readLine(); + + if (line.contains(QLatin1String("# MAINQML"))) { + valueOnNextLine = path(MainQml, AppProfileRelative); + } else if (line.contains(QLatin1String("# TARGETUID3"))) { + valueOnNextLine = symbianTargetUid(); + } else if (line.contains(QLatin1String("# DEPLOYMENTFOLDERS"))) { + valueOnNextLine = path(QmlDir, AppProfileRelative); + } else if (line.contains(QLatin1String("# ORIENTATIONLOCK")) && m_orientation == QmlStandaloneApp::Auto) { + uncommentNextLine = true; + } else if (line.contains(QLatin1String("# NETWORKACCESS")) && !m_networkEnabled) { + uncommentNextLine = true; + } + + // Remove all marker comments + if (line.trimmed().startsWith(QLatin1Char('#')) + && line.trimmed().endsWith(QLatin1Char('#'))) + continue; + + if (!valueOnNextLine.isEmpty()) { + out << line.left(line.indexOf(QLatin1Char('=')) + 2) + << QDir::fromNativeSeparators(valueOnNextLine) << endl; + valueOnNextLine.clear(); + continue; + } + + if (uncommentNextLine) { + out << QLatin1String("#") << line << endl; + uncommentNextLine = false; + continue; + } + out << line << endl; + } while (!line.isNull()); + + return proFileContent; +} + +#ifndef CREATORLESSTEST +static Core::GeneratedFile generateFileCopy(const QString &source, + const QString &target, + bool openEditor = false) +{ + QFile sourceFile(source); + sourceFile.open(QIODevice::ReadOnly); + Q_ASSERT(sourceFile.isOpen()); + Core::GeneratedFile generatedFile(target); + generatedFile.setBinary(true); + generatedFile.setBinaryContents(sourceFile.readAll()); + if (openEditor) + generatedFile.setAttributes(Core::GeneratedFile::OpenEditorAttribute); + return generatedFile; +} + +Core::GeneratedFiles QmlStandaloneApp::generateFiles(QString *errorMessage) const +{ + Core::GeneratedFiles files; + + Core::GeneratedFile generatedProFile(path(AppProfile, Target)); + generatedProFile.setContents(generateProFile(errorMessage)); + generatedProFile.setAttributes(Core::GeneratedFile::OpenProjectAttribute); + files.append(generatedProFile); + + files.append(generateFileCopy(path(MainQml, Source), path(MainQml, Target), true)); + + Core::GeneratedFile generatedMainCppFile(path(MainCpp, Target)); + generatedMainCppFile.setContents(generateMainCpp(errorMessage)); + files.append(generatedMainCppFile); + + files.append(generateFileCopy(path(AppViewerCpp, Source), path(AppViewerCpp, Target))); + files.append(generateFileCopy(path(AppViewerH, Source), path(AppViewerH, Target))); + files.append(generateFileCopy(path(SymbianSvgIcon, Source), path(SymbianSvgIcon, Target))); + + return files; +} +#endif // CREATORLESSTEST + +} // namespace Internal +} // namespace QmlProjectManager diff --git a/src/plugins/qmlprojectmanager/wizards/qmlstandaloneapp.h b/src/plugins/qmlprojectmanager/wizards/qmlstandaloneapp.h new file mode 100644 index 0000000000000000000000000000000000000000..b1d79e966ff771c39627088d9c402cc093b617e0 --- /dev/null +++ b/src/plugins/qmlprojectmanager/wizards/qmlstandaloneapp.h @@ -0,0 +1,107 @@ +/************************************************************************** +** +** 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 QMLSTANDALONEAPP_H +#define QMLSTANDALONEAPP_H + +#include <QtCore/QString> +#ifndef CREATORLESSTEST +#include <coreplugin/basefilewizard.h> +#endif // CREATORLESSTEST + +namespace QmlProjectManager { +namespace Internal { + +class QmlStandaloneApp +{ +public: + enum Orientation { + LockLandscape, + LockPortrait, + Auto + }; + + enum Path { + MainQml, + MainCpp, + AppProfile, + AppViewerCpp, + AppViewerH, + SymbianSvgIcon, + QmlDir + }; + + enum Location { + Source, + Target, + AppProfileRelative, + MainCppRelative + }; + + QmlStandaloneApp(); + + 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 setSymbianTargetUid(const QString &uid); + QString symbianTargetUid() const; + void setLoadDummyData(bool loadIt); + bool loadDummyData() const; + void setNetworkEnabled(bool enabled); + bool networkEnabled() const; + + static QString symbianUidForPath(const QString &path); +#ifndef CREATORLESSTEST + Core::GeneratedFiles generateFiles(QString *errorMessage) const; +#else + bool generateFiles(QString *errorMessage) const; +#endif // CREATORLESSTEST + +private: + QString path(Path path, Location location) const; + QByteArray generateMainCpp(const QString *errorMessage) const; + QByteArray generateProFile(const QString *errorMessage) const; + + QString m_projectName; + QString m_projectPath; + QString m_symbianSvgIcon; + QString m_symbianTargetUid; + bool m_loadDummyData; + Orientation m_orientation; + bool m_networkEnabled; +}; + +} // end of namespace Internal +} // end of namespace QmlProjectManager + +#endif // QMLSTANDALONEAPP_H diff --git a/src/plugins/qmlprojectmanager/wizards/qmlstandaloneappwizard.cpp b/src/plugins/qmlprojectmanager/wizards/qmlstandaloneappwizard.cpp new file mode 100644 index 0000000000000000000000000000000000000000..977f4c1d2583337d1c241c4a9e5ec87e40a89861 --- /dev/null +++ b/src/plugins/qmlprojectmanager/wizards/qmlstandaloneappwizard.cpp @@ -0,0 +1,153 @@ +/************************************************************************** +** +** 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 "qmlstandaloneappwizard.h" +#include "qmlstandaloneappwizardoptionspage.h" +#include "qmlstandaloneapp.h" + +#include "qmlprojectconstants.h" + +#include <projectexplorer/customwizard/customwizard.h> + +#include <QtGui/QIcon> + +#include <QtGui/QPainter> +#include <QtGui/QPixmap> + +#include <QtCore/QTextStream> +#include <QtCore/QCoreApplication> +#include <QtCore/QDir> +#include <QtCore/QFile> + +namespace QmlProjectManager { +namespace Internal { + +class QmlNewStandaloneAppWizardDialog : public ProjectExplorer::BaseProjectWizardDialog +{ + Q_OBJECT + +public: + explicit QmlNewStandaloneAppWizardDialog(QWidget *parent = 0); + +private: + class QmlStandaloneAppWizardOptionPage *m_qmlOptionsPage; + friend class QmlNewStandaloneAppWizard; +}; + +QmlNewStandaloneAppWizardDialog::QmlNewStandaloneAppWizardDialog(QWidget *parent) + : ProjectExplorer::BaseProjectWizardDialog(parent) +{ + setWindowTitle(tr("New Standalone QML Project")); + setIntroDescription(tr("This wizard generates a Standalone QML application project.")); + + m_qmlOptionsPage = new QmlStandaloneAppWizardOptionPage; + + const int qmlOptionsPagePageId = addPage(m_qmlOptionsPage); + wizardProgress()->item(qmlOptionsPagePageId)->setTitle(tr("Qml App options")); +} + +QmlNewStandaloneAppWizard::QmlNewStandaloneAppWizard() + : Core::BaseFileWizard(parameters()) + , m_standaloneApp(new QmlStandaloneApp) + , m_wizardDialog(0) +{ +} + +QmlNewStandaloneAppWizard::~QmlNewStandaloneAppWizard() +{ + delete m_standaloneApp; +} + +Core::BaseFileWizardParameters QmlNewStandaloneAppWizard::parameters() +{ + Core::BaseFileWizardParameters parameters(ProjectWizard); + parameters.setIcon(QIcon(QLatin1String(Constants::QML_WIZARD_ICON))); + parameters.setDisplayName(tr("Qt QML Standalone Application")); + parameters.setId(QLatin1String("QA.QML Standalone Application")); + parameters.setDescription(tr("Creates a standalone, mobile-deployable Qt QML application " + "project. A lightweight Qt/C++ application with a QDeclarativeView " + "and a single QML file will be created.")); + parameters.setCategory(QLatin1String(Constants::QML_WIZARD_CATEGORY)); + parameters.setDisplayCategory(QCoreApplication::translate(Constants::QML_WIZARD_TR_SCOPE, + Constants::QML_WIZARD_TR_CATEGORY)); + return parameters; +} + +QWizard *QmlNewStandaloneAppWizard::createWizardDialog(QWidget *parent, + const QString &defaultPath, + const WizardPageList &extensionPages) const +{ + m_wizardDialog = new QmlNewStandaloneAppWizardDialog(parent); + + m_wizardDialog->setPath(defaultPath); + m_wizardDialog->setProjectName(QmlNewStandaloneAppWizardDialog::uniqueProjectName(defaultPath)); + m_wizardDialog->m_qmlOptionsPage->setSymbianSvgIcon(m_standaloneApp->symbianSvgIcon()); + m_wizardDialog->m_qmlOptionsPage->setOrientation(m_standaloneApp->orientation()); + m_wizardDialog->m_qmlOptionsPage->setNetworkEnabled(m_standaloneApp->networkEnabled()); + m_wizardDialog->m_qmlOptionsPage->setLoadDummyData(m_standaloneApp->loadDummyData()); + connect(m_wizardDialog, SIGNAL(introPageLeft(QString, QString)), SLOT(useProjectPath(QString, QString))); + + foreach (QWizardPage *p, extensionPages) + BaseFileWizard::applyExtensionPageShortTitle(m_wizardDialog, m_wizardDialog->addPage(p)); + + return m_wizardDialog; +} + +Core::GeneratedFiles QmlNewStandaloneAppWizard::generateFiles(const QWizard *w, + QString *errorMessage) const +{ + Q_UNUSED(errorMessage) + + const QmlNewStandaloneAppWizardDialog *wizard = qobject_cast<const QmlNewStandaloneAppWizardDialog*>(w); + + m_standaloneApp->setProjectName(wizard->projectName()); + m_standaloneApp->setProjectPath(wizard->path()); + m_standaloneApp->setSymbianTargetUid(wizard->m_qmlOptionsPage->symbianUid()); + m_standaloneApp->setSymbianSvgIcon(wizard->m_qmlOptionsPage->symbianSvgIcon()); + m_standaloneApp->setOrientation(wizard->m_qmlOptionsPage->orientation()); + m_standaloneApp->setNetworkEnabled(wizard->m_qmlOptionsPage->networkEnabled()); + + return m_standaloneApp->generateFiles(errorMessage); +} + +bool QmlNewStandaloneAppWizard::postGenerateFiles(const QWizard *wizard, const Core::GeneratedFiles &l, QString *errorMessage) +{ + Q_UNUSED(wizard) + return ProjectExplorer::CustomProjectWizard::postGenerateOpen(l, errorMessage); +} + +void QmlNewStandaloneAppWizard::useProjectPath(const QString &projectName, const QString &projectPath) +{ + m_wizardDialog->m_qmlOptionsPage->setSymbianUid(QmlStandaloneApp::symbianUidForPath(projectPath + projectName)); +} + +} // namespace Internal +} // namespace QmlProjectManager + +#include "qmlstandaloneappwizard.moc" diff --git a/src/plugins/qmlprojectmanager/wizards/qmlstandaloneappwizard.h b/src/plugins/qmlprojectmanager/wizards/qmlstandaloneappwizard.h new file mode 100644 index 0000000000000000000000000000000000000000..6c34812d5d07b3605481f22383ba86ccf856a27a --- /dev/null +++ b/src/plugins/qmlprojectmanager/wizards/qmlstandaloneappwizard.h @@ -0,0 +1,67 @@ +/************************************************************************** +** +** 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 QMLSTANDALONEAPPWIZARD_H +#define QMLSTANDALONEAPPWIZARD_H + +#include <coreplugin/basefilewizard.h> +#include <projectexplorer/baseprojectwizarddialog.h> + +namespace QmlProjectManager { +namespace Internal { + +class QmlNewStandaloneAppWizard : public Core::BaseFileWizard +{ + Q_OBJECT + +public: + QmlNewStandaloneAppWizard(); + virtual ~QmlNewStandaloneAppWizard(); + 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); + +protected slots: + void useProjectPath(const QString &projectName, const QString &projectPath); + +private: + class QmlStandaloneApp *m_standaloneApp; + mutable class QmlNewStandaloneAppWizardDialog *m_wizardDialog; +}; + +} // end of namespace Internal +} // end of namespace QmlProjectManager + +#endif // QMLSTANDALONEAPPWIZARD_H diff --git a/src/plugins/qmlprojectmanager/wizards/qmlstandaloneappwizardoptionspage.cpp b/src/plugins/qmlprojectmanager/wizards/qmlstandaloneappwizardoptionspage.cpp new file mode 100644 index 0000000000000000000000000000000000000000..6f18893f7d6382b97b13966fd908821e1096159e --- /dev/null +++ b/src/plugins/qmlprojectmanager/wizards/qmlstandaloneappwizardoptionspage.cpp @@ -0,0 +1,149 @@ +/************************************************************************** +** +** 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 "qmlstandaloneappwizardoptionspage.h" +#include "ui_qmlstandaloneappwizardoptionspage.h" + +#include <QtGui/QDesktopServices> +#include <QtGui/QFileDialog> + +namespace QmlProjectManager { +namespace Internal { + +class QmlStandaloneAppWizardOptionPagePrivate +{ + Ui::QmlStandaloneAppWizardOptionPage m_ui; + QString symbianSvgIcon; + friend class QmlStandaloneAppWizardOptionPage; +}; + +QmlStandaloneAppWizardOptionPage::QmlStandaloneAppWizardOptionPage(QWidget *parent) : + QWizardPage(parent), + m_d(new QmlStandaloneAppWizardOptionPagePrivate) +{ + m_d->m_ui.setupUi(this); + + const QIcon open = QApplication::style()->standardIcon(QStyle::SP_DirOpenIcon); + m_d->m_ui.symbianAppIconLoadToolButton->setIcon(open); + connect(m_d->m_ui.symbianAppIconLoadToolButton, SIGNAL(clicked()), SLOT(openSymbianSvgIcon())); + + m_d->m_ui.orientationBehaviorComboBox->addItem(tr("Auto rotate orientation"), + QmlStandaloneApp::Auto); + m_d->m_ui.orientationBehaviorComboBox->addItem(tr("Lock to landscape orientation"), + QmlStandaloneApp::LockLandscape); + m_d->m_ui.orientationBehaviorComboBox->addItem(tr("Lock to portrait orientation"), + QmlStandaloneApp::LockPortrait); +} + +QmlStandaloneAppWizardOptionPage::~QmlStandaloneAppWizardOptionPage() +{ + delete m_d; +} + +bool QmlStandaloneAppWizardOptionPage::isComplete() const +{ + return true; +} + +void QmlStandaloneAppWizardOptionPage::setOrientation(QmlStandaloneApp::Orientation orientation) +{ + QComboBox *const comboBox = m_d->m_ui.orientationBehaviorComboBox; + for (int i = 0; i < comboBox->count(); ++i) + if (comboBox->itemData(i).toInt() == static_cast<int>(orientation)) { + comboBox->setCurrentIndex(i); + break; + } +} + +QmlStandaloneApp::Orientation QmlStandaloneAppWizardOptionPage::orientation() const +{ + const int index = m_d->m_ui.orientationBehaviorComboBox->currentIndex(); + return static_cast<QmlStandaloneApp::Orientation>(m_d->m_ui.orientationBehaviorComboBox->itemData(index).toInt()); +} + +QString QmlStandaloneAppWizardOptionPage::symbianSvgIcon() const +{ + return m_d->symbianSvgIcon; +} + +void QmlStandaloneAppWizardOptionPage::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->m_ui.symbianAppIconPreview->setPixmap(iconPixmap); + m_d->symbianSvgIcon = icon; + } +} + +QString QmlStandaloneAppWizardOptionPage::symbianUid() const +{ + return m_d->m_ui.symbianTargetUid3LineEdit->text(); +} + +void QmlStandaloneAppWizardOptionPage::setSymbianUid(const QString &uid) +{ + m_d->m_ui.symbianTargetUid3LineEdit->setText(uid); +} + +void QmlStandaloneAppWizardOptionPage::setLoadDummyData(bool loadIt) +{ + m_d->m_ui.loadDummyDataCheckBox->setChecked(loadIt); +} + +bool QmlStandaloneAppWizardOptionPage::loadDummyData() const +{ + return m_d->m_ui.loadDummyDataCheckBox->isChecked(); +} + +void QmlStandaloneAppWizardOptionPage::setNetworkEnabled(bool enableIt) +{ + m_d->m_ui.symbianEnableNetworkChackBox->setChecked(enableIt); +} + +bool QmlStandaloneAppWizardOptionPage::networkEnabled() const +{ + return m_d->m_ui.symbianEnableNetworkChackBox->isChecked(); +} + +void QmlStandaloneAppWizardOptionPage::openSymbianSvgIcon() +{ + const QString svgIcon = QFileDialog::getOpenFileName( + this, + m_d->m_ui.symbianAppIconLabel->text(), + QDesktopServices::storageLocation(QDesktopServices::PicturesLocation), + QLatin1String("*.svg")); + if (!svgIcon.isEmpty()) + setSymbianSvgIcon(svgIcon); +} + +} // namespace Internal +} // namespace QmlProjectManager diff --git a/src/plugins/qmlprojectmanager/wizards/qmlstandaloneappwizardoptionspage.h b/src/plugins/qmlprojectmanager/wizards/qmlstandaloneappwizardoptionspage.h new file mode 100644 index 0000000000000000000000000000000000000000..4714dd35b64687b69b6cb3d261ba8c7a25ee2245 --- /dev/null +++ b/src/plugins/qmlprojectmanager/wizards/qmlstandaloneappwizardoptionspage.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 QMLSTANDALONEAPPWIZARDOPTIONPAGE_H +#define QMLSTANDALONEAPPWIZARDOPTIONPAGE_H + +#include <QtGui/QWizardPage> +#include "qmlstandaloneapp.h" + +namespace QmlProjectManager { +namespace Internal { + +class QmlStandaloneAppWizardOptionPage : public QWizardPage +{ + Q_OBJECT + Q_DISABLE_COPY(QmlStandaloneAppWizardOptionPage) + +public: + explicit QmlStandaloneAppWizardOptionPage(QWidget *parent = 0); + virtual ~QmlStandaloneAppWizardOptionPage(); + + virtual bool isComplete() const; + + void setOrientation(QmlStandaloneApp::Orientation orientation); + QmlStandaloneApp::Orientation orientation() const; + QString symbianSvgIcon() const; + void setSymbianSvgIcon(const QString &icon); + QString symbianUid() const; + void setLoadDummyData(bool loadIt); + bool loadDummyData() const; + void setNetworkEnabled(bool enableIt); + bool networkEnabled() const; + void setSymbianUid(const QString &uid); + +private slots: + void openSymbianSvgIcon(); // Via file open dialog + +private: + class QmlStandaloneAppWizardOptionPagePrivate *m_d; +}; + +} // end of namespace Internal +} // end of namespace QmlProjectManager + +#endif // QMLSTANDALONEAPPWIZARDOPTIONPAGE_H diff --git a/src/plugins/qmlprojectmanager/wizards/qmlstandaloneappwizardoptionspage.ui b/src/plugins/qmlprojectmanager/wizards/qmlstandaloneappwizardoptionspage.ui new file mode 100644 index 0000000000000000000000000000000000000000..4e7621e3ee5097ffd7d393b6b55486e4975496c7 --- /dev/null +++ b/src/plugins/qmlprojectmanager/wizards/qmlstandaloneappwizardoptionspage.ui @@ -0,0 +1,152 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>QmlStandaloneAppWizardOptionPage</class> + <widget class="QWizardPage" name="QmlStandaloneAppWizardOptionPage"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>382</width> + <height>285</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> + <item row="1" column="1"> + <widget class="QCheckBox" name="loadDummyDataCheckBox"> + <property name="text"> + <string>Load dummy data</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="groupBox"> + <property name="title"> + <string>Symbian specific</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <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="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" colspan="3"> + <widget class="QLineEdit" name="symbianTargetUid3LineEdit"/> + </item> + <item row="2" column="1" colspan="3"> + <widget class="QCheckBox" name="symbianEnableNetworkChackBox"> + <property name="text"> + <string>Enable network access</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <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 row="0" column="2"> + <widget class="QToolButton" name="symbianAppIconLoadToolButton"> + <property name="text"> + <string/> + </property> + </widget> + </item> + </layout> + </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/qmlprojectmanager/wizards/templates/app.pro b/src/plugins/qmlprojectmanager/wizards/templates/app.pro new file mode 100644 index 0000000000000000000000000000000000000000..ce18ae6363147786595ad387519302a5488aff1b --- /dev/null +++ b/src/plugins/qmlprojectmanager/wizards/templates/app.pro @@ -0,0 +1,42 @@ +QT += declarative + +# MAINQML # +OTHER_FILES = qml/app.qml +SOURCES = cpp/main.cpp cpp/qmlapplicationview.cpp +HEADERS = cpp/qmlapplicationview.h +INCLUDEPATH += cpp + +# DEPLOYMENTFOLDERS # +DEPLOYMENTFOLDERS = qml + +# Avoid auto screen rotation +# ORIENTATIONLOCK # +DEFINES += ORIENTATIONLOCK + +# Needs to be defined for Symbian +# NETWORKACCESS # +DEFINES += NETWORKACCESS + +symbian { + # TARGETUID3 # + TARGET.UID3 = 0xE1111234 + ICON = cpp/symbianicon.svg + for(deploymentfolder, DEPLOYMENTFOLDERS) { + eval(item$${deploymentfolder}.sources = $${deploymentfolder}) + eval(DEPLOYMENT += item$${deploymentfolder}) + } + contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -leiksrv -lcone + contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices +} else:win32 { + # Ossi will want to kill me when he reads this + # TODO: let Ossi create a (post link step) deployment for windows + !contains(CONFIG, build_pass):for(deploymentfolder, DEPLOYMENTFOLDERS) { + system($$QMAKE_COPY_DIR $$deploymentfolder $${OUTDIR} $$replace(OUT_PWD, /, \\)\\$$deploymentfolder\\) + } +} else { + # TODO: make this work + for(deploymentfolder, DEPLOYMENTFOLDERS) { + eval(item$${deploymentfolder}.files = $${deploymentfolder}) + eval(INSTALLS += item$${deploymentfolder}) + } +} diff --git a/src/plugins/qmlprojectmanager/wizards/templates/cpp/main.cpp b/src/plugins/qmlprojectmanager/wizards/templates/cpp/main.cpp new file mode 100644 index 0000000000000000000000000000000000000000..3ac84b1cfbe5258a8e3d62699563d915d474f31a --- /dev/null +++ b/src/plugins/qmlprojectmanager/wizards/templates/cpp/main.cpp @@ -0,0 +1,21 @@ +#include <QtGui/QApplication> +#include "qmlapplicationview.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QmlApplicationView qmlApp(QLatin1String("app.qml")); // MAINQML + QStringList importPaths; // IMPORTPATHSLIST + qmlApp.setImportPathList(importPaths); // SETIMPORTPATHLIST + qmlApp.setOrientation(QmlApplicationView::Auto); // ORIENTATION + qmlApp.setLoadDummyData(false); // LOADDUMMYDATA + +#ifdef Q_OS_SYMBIAN + qmlApp.showFullScreen(); +#else + qmlApp.setGeometry(QRect(100, 100, 360, 640)); + qmlApp.show(); +#endif + return app.exec(); +} diff --git a/src/plugins/qmlprojectmanager/wizards/templates/cpp/qmlapplicationview.cpp b/src/plugins/qmlprojectmanager/wizards/templates/cpp/qmlapplicationview.cpp new file mode 100644 index 0000000000000000000000000000000000000000..cff33e560bbdde7aed78b21da74e776a6e45ef2e --- /dev/null +++ b/src/plugins/qmlprojectmanager/wizards/templates/cpp/qmlapplicationview.cpp @@ -0,0 +1,81 @@ +#include "qmlapplicationview.h" + +#include <QtCore/QDir> +#include <QtCore/QFileInfo> +#include <QtDeclarative/QDeclarativeComponent> +#include <QtDeclarative/QDeclarativeEngine> +#include <QtDeclarative/QDeclarativeContext> + +#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK) +#include <eikenv.h> +#include <eikappui.h> +#include <aknenv.h> +#include <aknappui.h> +#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK + +class QmlApplicationViewPrivate +{ + QString mainQmlFile; + friend class QmlApplicationView; +}; + +QmlApplicationView::QmlApplicationView(const QString &mainQmlFile, QWidget *parent) + : QDeclarativeView(parent) + , m_d(new QmlApplicationViewPrivate) +{ + m_d->mainQmlFile = mainQmlFile; + setSource(QUrl(m_d->mainQmlFile)); + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +} + +QmlApplicationView::~QmlApplicationView() +{ + delete m_d; +} + +void QmlApplicationView::setImportPathList(const QStringList &importPaths) +{ + engine()->setImportPathList(importPaths); +} + +void QmlApplicationView::setOrientation(Orientation orientation) +{ + if (orientation != Auto) { +#if defined(Q_OS_SYMBIAN) +#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 +#endif // Q_OS_SYMBIAN + } +} + +void QmlApplicationView::setLoadDummyData(bool loadDummyData) +{ + if (loadDummyData) { + const QFileInfo mainQmlFileInfo(m_d->mainQmlFile); + const QDir dir(mainQmlFileInfo.absolutePath() + QLatin1String("/dummydata"), + QLatin1String("*.qml")); + foreach (const QFileInfo &qmlFile, dir.entryInfoList()) { + QFile f(qmlFile.absoluteFilePath()); + if (f.open(QIODevice::ReadOnly)) { + QDeclarativeComponent comp(engine()); + comp.setData(f.readAll(), QUrl()); + QObject *dummyData = comp.create(); + if (dummyData) { + rootContext()->setContextProperty(qmlFile.baseName(), dummyData); + dummyData->setParent(this); + } + } + } + } +} diff --git a/src/plugins/qmlprojectmanager/wizards/templates/cpp/qmlapplicationview.h b/src/plugins/qmlprojectmanager/wizards/templates/cpp/qmlapplicationview.h new file mode 100644 index 0000000000000000000000000000000000000000..0b8b998f975ec498efcc9f25d5d444f03bf05627 --- /dev/null +++ b/src/plugins/qmlprojectmanager/wizards/templates/cpp/qmlapplicationview.h @@ -0,0 +1,26 @@ +#ifndef QMLAPPLICATIONVIEW_H +#define QMLAPPLICATIONVIEW_H + +#include <QtDeclarative/QDeclarativeView> + +class QmlApplicationView : public QDeclarativeView +{ +public: + enum Orientation { + LockPortrait, + LockLandscape, + Auto + }; + + QmlApplicationView(const QString &mainQmlFile, QWidget *parent = 0); + virtual ~QmlApplicationView(); + + void setImportPathList(const QStringList &importPaths); + void setOrientation(Orientation orientation); + void setLoadDummyData(bool loadDummyData); + +private: + class QmlApplicationViewPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEW_H diff --git a/src/plugins/qmlprojectmanager/wizards/templates/cpp/symbianicon.svg b/src/plugins/qmlprojectmanager/wizards/templates/cpp/symbianicon.svg new file mode 100644 index 0000000000000000000000000000000000000000..566acfada01cfe8ab7550dc4187ff76fe34d86ae --- /dev/null +++ b/src/plugins/qmlprojectmanager/wizards/templates/cpp/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/qmlprojectmanager/wizards/templates/qml/app.qml b/src/plugins/qmlprojectmanager/wizards/templates/qml/app.qml new file mode 100644 index 0000000000000000000000000000000000000000..baa3db352c2c7dbb011786e74cac2d1c45b453df --- /dev/null +++ b/src/plugins/qmlprojectmanager/wizards/templates/qml/app.qml @@ -0,0 +1,8 @@ +import Qt 4.7 + +Rectangle { + Text { + text: "Hello World" + anchors.centerIn: parent + } +}