Qt Quick App Wizards: Remove dead code

Initially, the wizard was able to make complex QML apps
with custom QML plugins deployable. That was then removed
from the UI. Let's now also remove the remainders.

Change-Id: If470d553c79d0e47bc8e4f0e814a0da2ef31bab6
Reviewed-by: Alessandro Portale <alessandro.portale@nokia.com>
This commit is contained in:
Alessandro Portale
2012-08-30 18:03:47 +02:00
parent 93e329e1eb
commit e6270852a3
11 changed files with 3 additions and 453 deletions

View File

@@ -43,58 +43,12 @@
namespace Qt4ProjectManager {
namespace Internal {
const QString qmldir(QLatin1String("qmldir"));
const QString qmldir_plugin(QLatin1String("plugin"));
const QString appViewerBaseName(QLatin1String("qmlapplicationviewer"));
const QString appViewerPriFileName(appViewerBaseName + QLatin1String(".pri"));
const QString appViewerCppFileName(appViewerBaseName + QLatin1String(".cpp"));
const QString appViewerHFileName(appViewerBaseName + QLatin1String(".h"));
const QString appViewerOriginsSubDir(appViewerBaseName + QLatin1Char('/'));
QmlModule::QmlModule(const QString &uri, const QFileInfo &rootDir, const QFileInfo &qmldir,
bool isExternal, QtQuickApp *qtQuickApp)
: uri(uri)
, rootDir(rootDir)
, qmldir(qmldir)
, isExternal(isExternal)
, qtQuickApp(qtQuickApp)
{}
QString QmlModule::path(Path path) const
{
switch (path) {
case Root: {
return rootDir.canonicalFilePath();
}
case ContentDir: {
const QDir proFile(qtQuickApp->path(QtQuickApp::AppProPath));
return proFile.relativeFilePath(qmldir.canonicalPath());
}
case ContentBase: {
const QString localRoot = rootDir.canonicalFilePath() + QLatin1Char('/');
QDir contentDir = qmldir.dir();
contentDir.cdUp();
const QString localContentDir = contentDir.canonicalPath();
return localContentDir.right(localContentDir.length() - localRoot.length());
}
case DeployedContentBase: {
const QString modulesDir = qtQuickApp->path(QtQuickApp::ModulesDir);
return modulesDir + QLatin1Char('/') + this->path(ContentBase);
}
default: qFatal("QmlModule::path() needs more work");
}
return QString();
}
QmlCppPlugin::QmlCppPlugin(const QString &name, const QFileInfo &path,
const QmlModule *module, const QFileInfo &proFile)
: name(name)
, path(path)
, module(module)
, proFile(proFile)
{
}
QtQuickApp::QtQuickApp()
: AbstractMobileApp()
, m_mainQmlMode(ModeGenerate)
@@ -103,11 +57,6 @@ QtQuickApp::QtQuickApp()
m_canSupportMeegoBooster = true;
}
QtQuickApp::~QtQuickApp()
{
clearModulesAndPlugins();
}
void QtQuickApp::setComponentSet(ComponentSet componentSet)
{
m_componentSet = componentSet;
@@ -130,47 +79,6 @@ QtQuickApp::Mode QtQuickApp::mainQmlMode() const
return m_mainQmlMode;
}
bool QtQuickApp::setExternalModules(const QStringList &uris,
const QStringList &importPaths)
{
clearModulesAndPlugins();
m_importPaths.clear();
foreach (const QFileInfo &importPath, importPaths) {
if (!importPath.exists()) {
m_error = QCoreApplication::translate(
"Qt4ProjectManager::Internal::QtQuickApp",
"The QML import path '%1' cannot be found.")
.arg(QDir::toNativeSeparators(importPath.filePath()));
return false;
} else {
m_importPaths.append(importPath.canonicalFilePath());
}
}
foreach (const QString &uri, uris) {
QString uriPath = uri;
uriPath.replace(QLatin1Char('.'), QLatin1Char('/'));
const int modulesCount = m_modules.count();
foreach (const QFileInfo &importPath, m_importPaths) {
const QFileInfo qmlDirFile(
importPath.absoluteFilePath() + QLatin1Char('/')
+ uriPath + QLatin1Char('/') + qmldir);
if (qmlDirFile.exists()) {
if (!addExternalModule(uri, importPath, qmlDirFile))
return false;
break;
}
}
if (modulesCount == m_modules.count()) { // no module was added
m_error = QCoreApplication::translate(
"Qt4ProjectManager::Internal::QtQuickApp",
"The QML module '%1' cannot be found.").arg(uri);
return false;
}
}
m_error.clear();
return true;
}
QString QtQuickApp::pathExtended(int fileType) const
{
const bool importQmlFile = m_mainQmlMode == ModeImport;
@@ -205,7 +113,6 @@ QString QtQuickApp::pathExtended(int fileType) const
case QmlDir: return pathBase + qmlSubDir;
case QmlDirProFileRelative: return importQmlFile ? appProFilePath.relativeFilePath(m_mainQmlFile.canonicalPath())
: QString(qmlSubDir).remove(qmlSubDir.length() - 1, 1);
case ModulesDir: return QLatin1String("modules");
default: qFatal("QtQuickApp::pathExtended() needs more work");
}
return QString();
@@ -225,14 +132,9 @@ bool QtQuickApp::adaptCurrentMainCppTemplateLine(QString &line) const
{
const QLatin1Char quote('"');
if (line.contains(QLatin1String("// MAINQML"))) {
if (line.contains(QLatin1String("// MAINQML")))
insertParameter(line, quote + path(MainQmlDeployed) + quote);
} else if (line.contains(QLatin1String("// ADDIMPORTPATH"))) {
if (m_modules.isEmpty())
return false;
else
insertParameter(line, quote + path(ModulesDir) + quote);
}
return true;
}
@@ -245,17 +147,7 @@ void QtQuickApp::handleCurrentProFileTemplateLine(const QString &line,
QString nextLine = proFileTemplate.readLine(); // eats 'QML_IMPORT_PATH ='
if (!nextLine.startsWith(QLatin1String("QML_IMPORT_PATH =")))
return;
proFile << nextLine;
const QLatin1String separator(" \\\n ");
const QDir proPath(path(AppProPath));
foreach (const QString &importPath, m_importPaths) {
const QString relativePath = proPath.relativeFilePath(importPath);
proFile << separator << relativePath;
}
proFile << endl;
proFile << nextLine << endl;
} else if (line.contains(QLatin1String("# HARMATTAN_BOOSTABLE"))) {
QString nextLine = proFileTemplate.readLine(); // eats '# CONFIG += qdeclarative-boostable'
if (supportsMeegoBooster())
@@ -264,83 +156,6 @@ void QtQuickApp::handleCurrentProFileTemplateLine(const QString &line,
}
}
void QtQuickApp::clearModulesAndPlugins()
{
qDeleteAll(m_modules);
m_modules.clear();
qDeleteAll(m_cppPlugins);
m_cppPlugins.clear();
}
bool QtQuickApp::addCppPlugin(const QString &qmldirLine, QmlModule *module)
{
const QStringList qmldirLineElements =
qmldirLine.split(QLatin1Char(' '), QString::SkipEmptyParts);
if (qmldirLineElements.count() < 2) {
m_error = QCoreApplication::translate(
"Qt4ProjectManager::Internal::QtQuickApp",
"Invalid '%1' entry in '%2' of module '%3'.")
.arg(qmldir_plugin).arg(qmldir).arg(module->uri);
return false;
}
const QString name = qmldirLineElements.at(1);
const QFileInfo path(module->qmldir.dir(), qmldirLineElements.value(2, QString()));
// TODO: Add more magic to find a good .pro file..
const QString proFileName = name + QLatin1String(".pro");
const QFileInfo proFile_guess1(module->qmldir.dir(), proFileName);
const QFileInfo proFile_guess2(QString(module->qmldir.dir().absolutePath() + QLatin1String("/../")),
proFileName);
const QFileInfo proFile_guess3(module->qmldir.dir(),
QFileInfo(module->qmldir.path()).fileName() + QLatin1String(".pro"));
const QFileInfo proFile_guess4(proFile_guess3.absolutePath() + QLatin1String("/../")
+ proFile_guess3.fileName());
QFileInfo foundProFile;
if (proFile_guess1.exists()) {
foundProFile = proFile_guess1.canonicalFilePath();
} else if (proFile_guess2.exists()) {
foundProFile = proFile_guess2.canonicalFilePath();
} else if (proFile_guess3.exists()) {
foundProFile = proFile_guess3.canonicalFilePath();
} else if (proFile_guess4.exists()) {
foundProFile = proFile_guess4.canonicalFilePath();
} else {
m_error = QCoreApplication::translate(
"Qt4ProjectManager::Internal::QtQuickApp",
"No .pro file for plugin '%1' can be found.").arg(name);
return false;
}
QmlCppPlugin *plugin =
new QmlCppPlugin(name, path, module, foundProFile);
m_cppPlugins.append(plugin);
module->cppPlugins.insert(name, plugin);
return true;
}
bool QtQuickApp::addCppPlugins(QmlModule *module)
{
QFile qmlDirFile(module->qmldir.absoluteFilePath());
if (qmlDirFile.open(QIODevice::ReadOnly)) {
QTextStream in(&qmlDirFile);
QString line;
while (!(line = in.readLine()).isNull()) {
line = line.trimmed();
if (line.startsWith(qmldir_plugin) && !addCppPlugin(line, module))
return false;
};
}
return true;
}
bool QtQuickApp::addExternalModule(const QString &name, const QFileInfo &dir,
const QFileInfo &contentDir)
{
QmlModule *module = new QmlModule(name, dir, contentDir, true, this);
m_modules.append(module);
return addCppPlugins(module);
}
#ifndef CREATORLESSTEST
Core::GeneratedFiles QtQuickApp::generateFiles(QString *errorMessage) const
{
@@ -365,11 +180,6 @@ bool QtQuickApp::useExistingMainQml() const
return !m_mainQmlFile.filePath().isEmpty();
}
const QList<QmlModule*> QtQuickApp::modules() const
{
return m_modules;
}
QByteArray QtQuickApp::generateFileExtended(int fileType,
bool *versionAndCheckSum, QString *comment, QString *errorMessage) const
{
@@ -438,9 +248,6 @@ QList<DeploymentFolder> QtQuickApp::deploymentFolders() const
{
QList<DeploymentFolder> result;
result.append(DeploymentFolder(path(QmlDirProFileRelative), QLatin1String("qml")));
foreach (const QmlModule *module, m_modules)
if (module->isExternal)
result.append(DeploymentFolder(module->path(QmlModule::ContentDir), module->path(QmlModule::DeployedContentBase)));
return result;
}

View File

@@ -39,42 +39,6 @@
namespace Qt4ProjectManager {
namespace Internal {
class QtQuickApp;
struct QmlCppPlugin;
struct QmlModule
{
enum Path {
// Example: Module "com.foo.bar" in "c:/modules/".
// "qmldir" file is in "c:/modules/com/foo/bar/".
// Application .pro file is "c:/app/app.pro".
Root, // "c:/modules/" (absolute)
ContentDir, // "../modules/com/foo/bar" (relative form .pro file)
ContentBase, // "com/foo/"
DeployedContentBase // "<qmlmodules>/com/foo" (on deploy target)
};
QmlModule(const QString &name, const QFileInfo &rootDir, const QFileInfo &qmldir,
bool isExternal, QtQuickApp *qtQuickApp);
QString path(Path path) const;
const QString uri; // "com.foo.bar"
const QFileInfo rootDir; // Location of "com/"
const QFileInfo qmldir; // 'qmldir' file.
const bool isExternal; // Either external or inside a source paths
const QtQuickApp *qtQuickApp;
QHash<QString, QmlCppPlugin *> cppPlugins; // Just as info. No ownership.
};
struct QmlCppPlugin
{
QmlCppPlugin(const QString &name, const QFileInfo &path,
const QmlModule *module, const QFileInfo &proFile);
const QString name; // Original name
const QFileInfo path; // Plugin path where qmldir points to
const QmlModule *module;
const QFileInfo proFile; // .pro file for the plugin
};
struct QtQuickAppGeneratedFileInfo : public AbstractGeneratedFileInfo
{
enum ExtendedFileType {
@@ -103,7 +67,6 @@ public:
AppViewerHOrigin,
QmlDir,
QmlDirProFileRelative,
ModulesDir,
MainPageQml,
MainPageQmlOrigin
};
@@ -119,14 +82,12 @@ public:
};
QtQuickApp();
virtual ~QtQuickApp();
void setComponentSet(ComponentSet componentSet);
ComponentSet componentSet() const;
void setMainQml(Mode mode, const QString &file = QString());
Mode mainQmlMode() const;
bool setExternalModules(const QStringList &uris, const QStringList &importPaths);
#ifndef CREATORLESSTEST
virtual Core::GeneratedFiles generateFiles(QString *errorMessage) const;
@@ -134,7 +95,6 @@ public:
bool generateFiles(QString *errorMessage) const;
#endif // CREATORLESSTEST
bool useExistingMainQml() const;
const QList<QmlModule*> modules() const;
static const int StubVersion;
@@ -152,18 +112,10 @@ private:
QList<AbstractGeneratedFileInfo> updateableFiles(const QString &mainProFile) const;
QList<DeploymentFolder> deploymentFolders() const;
bool addExternalModule(const QString &uri, const QFileInfo &dir,
const QFileInfo &contentDir);
bool addCppPlugins(QmlModule *module);
bool addCppPlugin(const QString &qmldirLine, QmlModule *module);
void clearModulesAndPlugins();
QString componentSetDir(ComponentSet componentSet) const;
QFileInfo m_mainQmlFile;
Mode m_mainQmlMode;
QStringList m_importPaths;
QList<QmlModule *> m_modules;
QList<QmlCppPlugin *> m_cppPlugins;
ComponentSet m_componentSet;
};

View File

@@ -59,26 +59,6 @@ int main(int argc, char *argv[])
return 1;
}
{
const QString rootPath = QLatin1String("../appwizards/qmlimportscenario_02/");
QtQuickApp sAppImport02;
sAppImport02.setProjectPath(projectPath);
sAppImport02.setProjectName(QLatin1String("qml_imported_scenario_02"));
sAppImport02.setMainQml(QtQuickApp::ModeImport, rootPath + QLatin1String("subfolder1/myqmlapp.qml"));
QStringList moduleNames;
moduleNames.append(QLatin1String("no.trolltech.QmlModule01"));
moduleNames.append(QLatin1String("com.nokia.QmlModule02"));
QStringList importPaths;
importPaths.append(rootPath + QLatin1String("subfolder2/"));
importPaths.append(rootPath + QLatin1String("subfolder3/"));
if (!sAppImport02.setExternalModules(moduleNames, importPaths)) {
qDebug() << sAppImport02.error();
return 2;
}
if (!sAppImport02.generateFiles(&errorMessage))
return 1;
}
{
Html5App sAppNew;
sAppNew.setProjectPath(projectPath);

View File

@@ -1,17 +0,0 @@
import QmlProject 1.0
Project {
QmlFiles {
directory: "subfolder1"
}
JavaScriptFiles {
directory: "."
}
ImageFiles {
directory: "."
}
importPaths: [
"subfolder2",
"subfolder3"
]
}

View File

@@ -1,46 +0,0 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: http://www.qt-project.org/
**
**
** GNU Lesser General Public License Usage
**
** 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.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** Other Usage
**
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
**
**************************************************************************/
import QtQuick 1.0
Rectangle {
width: 360
height: 360
Text {
text: "Hello World"
anchors.centerIn: parent
}
MouseArea {
anchors.fill: parent
onClicked: {
Qt.quit();
}
}
}

View File

@@ -1,46 +0,0 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: http://www.qt-project.org/
**
**
** GNU Lesser General Public License Usage
**
** 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.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** Other Usage
**
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
**
**************************************************************************/
import Qt 4.7
Rectangle {
color: "#ddffdd"
Image {
source: "apple.svg"
anchors.right: parent.right
anchors.bottom: parent.bottom
}
Text {
text: "QmlComponent01"
font.pointSize: 14
}
}

View File

@@ -1,16 +0,0 @@
<svg height="100%" version="1.1" viewBox="0 0 50 50" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg">
<defs>
</defs>
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<path d="m22.7,3.84c-1.06,3.24-1.17,7.42-0.191,12.7" fill="none" stroke="#830" stroke-width="2.5"/>
<path d="m36.8,12.9c6.24,3.02,11.1,9.74,10.3,16.9-0.548,5.22-3.35,10.1-7.3,13.5-3.99,2.83-7.36-0.79-11.9-0.037-4.75,0.587-8.68,3.8-13.3,1.88-8.57-3.18-12.1-6.91-12.2-16.4,0.0813-6.01,2.05-12,7.75-14.6,2.95-1.03,8.83-0.118,12,0.363,4.83-3.24,9.26-3.55,14.6-1.61z" fill="#3A0"/>
<path d="m14,16.1c0.683,1.19-1.08,1.56-2.56,3.1-1.48,1.53-2.28,4.13-3.78,3.92-1.5-0.21-0.485-4.18,1.47-5.74,1.95-1.56,4.19-2.47,4.87-1.28z" fill="#FFF" opacity="0.5"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1 +0,0 @@
QmlComponent01 1.0 QmlComponent01.qml

View File

@@ -1,46 +0,0 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: http://www.qt-project.org/
**
**
** GNU Lesser General Public License Usage
**
** 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.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** Other Usage
**
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
**
**************************************************************************/
import Qt 4.7
Rectangle {
color: "#ffdddd"
Image {
source: "tomato.svg"
anchors.right: parent.right
anchors.bottom: parent.bottom
}
Text {
text: "QmlComponent02"
font.pointSize: 14
}
}

View File

@@ -1 +0,0 @@
QmlComponent02 1.0 QmlComponent02.qml

View File

@@ -1,16 +0,0 @@
<svg height="100%" id="svg2" version="1.1" viewBox="0 0 50 50" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg">
<defs id="defs14">
</defs>
<metadata id="metadata4">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<path d="M24.7,5.65c-2.7,2.23-3.2,5.65-2.2,10.8" fill="none" stroke="#080" stroke-width="2.5"/>
<path d="m41.6,16.9c6.71,7.89,3.30,18.5-2.42,23.6-5.73,5.11-16.2,6.50-26.6,1.84-10.4-4.7-13.1-21.3-3.65-27,9.45-5.68,26-6.29,32.6,1.6z" fill="#F00"/>
<path d="m15.6,15.3c0.683,1.19-1.88,1.16-4.97,4.10-2.95,2.8-2.64,6.7-4.14,6.5-1.50-0.2,0.72-7,2.67-8.5,1.95-1.56,5.80-3.27,6.48-2.08z" fill="#FFF" opacity="0.5"/>
</svg>

Before

Width:  |  Height:  |  Size: 1000 B