summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Portale <alessandro.portale@nokia.com>2011-02-03 19:46:41 +0100
committerAlessandro Portale <alessandro.portale@nokia.com>2011-02-03 19:48:12 +0100
commitefc596170cad15f56c18643508fc1ea0c83a5644 (patch)
treee5a9cd4976a3e2eb395f5441ae1c264bd2f5b6f1
parent07b52446897d6345bc26e5463aa64e5866da6c26 (diff)
downloadqt-creator-efc596170cad15f56c18643508fc1ea0c83a5644.tar.gz
Refactoring the template code updater. Reusable for html5
Less static functions, more ploymorphism.
-rw-r--r--src/plugins/qt4projectmanager/qt4projectmanager.cpp19
-rw-r--r--src/plugins/qt4projectmanager/wizards/abstractmobileapp.cpp60
-rw-r--r--src/plugins/qt4projectmanager/wizards/abstractmobileapp.h14
-rw-r--r--src/plugins/qt4projectmanager/wizards/mobileapp.cpp6
-rw-r--r--src/plugins/qt4projectmanager/wizards/mobileapp.h1
-rw-r--r--src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.cpp56
-rw-r--r--src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.h4
7 files changed, 75 insertions, 85 deletions
diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.cpp b/src/plugins/qt4projectmanager/qt4projectmanager.cpp
index 4a48134c1d..6b88843e3d 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanager.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectmanager.cpp
@@ -194,22 +194,19 @@ QString Qt4Manager::mimeType() const
return QLatin1String(Qt4ProjectManager::Constants::PROFILE_MIMETYPE);
}
-// Prototype Ui for update of QmlApplicationView files.
-// TODO implement a proper Ui for this. Maybe not as modal message box.
-// When removing this, also remove the inclusions of "wizards/qmlstandaloneapp.h" and QtGui/QMessageBox
-inline void updateQmlApplicationViewerFiles(const QString proFile)
+inline void updateBoilerPlateCodeFiles(const AbstractMobileApp &app, const QString proFile)
{
- const QList<QmlAppGeneratedFileInfo> updates =
- QmlStandaloneApp::fileUpdates(proFile);
+ const QList<AbstractGeneratedFileInfo> updates =
+ app.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 QmlAppGeneratedFileInfo &info, updates) {
+ foreach (const AbstractGeneratedFileInfo &info, updates) {
QStringList reasons;
- if (info.wasModified())
+ if (info.statedChecksum != info.dataChecksum)
reasons.append(QLatin1String("modified"));
- if (info.isOutdated())
+ if (info.version != info.currentVersion)
reasons.append(QLatin1String("outdated"));
message.append(QString::fromLatin1("<li><nobr>%1 (%2)</nobr></li>")
.arg(QDir::toNativeSeparators(info.fileInfo.canonicalFilePath()))
@@ -220,7 +217,7 @@ inline void updateQmlApplicationViewerFiles(const QString proFile)
const QString title = QLatin1String("Update of the QmlApplicationView files");
if (QMessageBox::question(0, title, message, QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
QString error;
- if (!QmlStandaloneApp::updateFiles(updates, error))
+ if (!app.updateFiles(updates, error))
QMessageBox::critical(0, title, error);
}
}
@@ -248,7 +245,7 @@ ProjectExplorer::Project *Qt4Manager::openProject(const QString &fileName)
}
}
- updateQmlApplicationViewerFiles(canonicalFilePath);
+ updateBoilerPlateCodeFiles(QmlStandaloneApp(), canonicalFilePath);
Qt4Project *pro = new Qt4Project(this, canonicalFilePath);
return pro;
diff --git a/src/plugins/qt4projectmanager/wizards/abstractmobileapp.cpp b/src/plugins/qt4projectmanager/wizards/abstractmobileapp.cpp
index bd7c8dfb58..f354d373e4 100644
--- a/src/plugins/qt4projectmanager/wizards/abstractmobileapp.cpp
+++ b/src/plugins/qt4projectmanager/wizards/abstractmobileapp.cpp
@@ -47,23 +47,13 @@ namespace Internal {
AbstractGeneratedFileInfo::AbstractGeneratedFileInfo()
: fileType(ExtendedFile)
+ , currentVersion(-1)
, version(-1)
, dataChecksum(0)
, statedChecksum(0)
{
}
-bool AbstractGeneratedFileInfo::isUpToDate() const
-{
- return !isOutdated() && !wasModified();
-}
-
-bool AbstractGeneratedFileInfo::wasModified() const
-{
- return dataChecksum != statedChecksum;
-}
-
-
const QString AbstractMobileApp::CFileComment(QLatin1String("//"));
const QString AbstractMobileApp::ProFileComment(QLatin1String("#"));
const QString AbstractMobileApp::DeploymentPriFileName(QLatin1String("deployment.pri"));
@@ -298,6 +288,54 @@ QByteArray AbstractMobileApp::generateProFile(QString *errorMessage) const
return proFileContent;
}
+QList<AbstractGeneratedFileInfo> AbstractMobileApp::fileUpdates(const QString &mainProFile) const
+{
+ QList<AbstractGeneratedFileInfo> result;
+ foreach (const AbstractGeneratedFileInfo &file, updateableFiles(mainProFile)) {
+ AbstractGeneratedFileInfo newFile = file;
+ QFile readFile(newFile.fileInfo.absoluteFilePath());
+ if (!readFile.open(QIODevice::ReadOnly))
+ continue;
+ const QString firstLine = readFile.readLine();
+ const QStringList elements = firstLine.split(QLatin1Char(' '));
+ if (elements.count() != 5 || elements.at(1) != FileChecksum
+ || elements.at(3) != FileStubVersion)
+ continue;
+ const QString versionString = elements.at(4);
+ newFile.version = versionString.startsWith(QLatin1String("0x"))
+ ? versionString.toInt(0, 16) : 0;
+ newFile.statedChecksum = elements.at(2).toUShort(0, 16);
+ QByteArray data = readFile.readAll();
+ data.replace('\x0D', "");
+ data.replace('\x0A', "");
+ newFile.dataChecksum = qChecksum(data.constData(), data.length());
+ if (newFile.dataChecksum != newFile.statedChecksum
+ || newFile.version < newFile.currentVersion)
+ result.append(newFile);
+ }
+ return result;
+}
+
+
+bool AbstractMobileApp::updateFiles(const QList<AbstractGeneratedFileInfo> &list, QString &error) const
+{
+ error.clear();
+ foreach (const AbstractGeneratedFileInfo &info, list) {
+ const QByteArray data = generateFile(info.fileType, &error);
+ if (!error.isEmpty())
+ return false;
+ QFile file(info.fileInfo.absoluteFilePath());
+ if (!file.open(QIODevice::WriteOnly) || file.write(data) == -1) {
+ error = QCoreApplication::translate(
+ "Qt4ProjectManager::Internal::QmlStandaloneApp",
+ "Could not write file '%1'.").
+ arg(QDir::toNativeSeparators(info.fileInfo.canonicalFilePath()));
+ return false;
+ }
+ }
+ return true;
+}
+
#ifndef CREATORLESSTEST
// The definition of QmlStandaloneApp::templatesRoot() for
// CREATORLESSTEST is in tests/manual/qmlstandalone/main.cpp
diff --git a/src/plugins/qt4projectmanager/wizards/abstractmobileapp.h b/src/plugins/qt4projectmanager/wizards/abstractmobileapp.h
index a3dfd25955..c4e5bd9402 100644
--- a/src/plugins/qt4projectmanager/wizards/abstractmobileapp.h
+++ b/src/plugins/qt4projectmanager/wizards/abstractmobileapp.h
@@ -60,15 +60,12 @@ struct AbstractGeneratedFileInfo
AbstractGeneratedFileInfo();
- bool isUpToDate() const;
- bool wasModified() const;
- virtual bool isOutdated() const=0;
-
int fileType;
QFileInfo fileInfo;
- int version;
- quint16 dataChecksum;
- quint16 statedChecksum;
+ int currentVersion; // Current version of the template file in Creator
+ int version; // The version in the file header
+ quint16 dataChecksum; // The calculated checksum
+ quint16 statedChecksum; // The checksum in the file header
};
class AbstractMobileApp : public QObject
@@ -125,6 +122,8 @@ public:
static QString symbianUidForPath(const QString &path);
static int makeStubVersion(int minor);
+ QList<AbstractGeneratedFileInfo> fileUpdates(const QString &mainProFile) const;
+ bool updateFiles(const QList<AbstractGeneratedFileInfo> &list, QString &error) const;
static const QString DeploymentPriFileName;
protected:
@@ -164,6 +163,7 @@ private:
virtual void handleCurrentProFileTemplateLine(const QString &line,
QTextStream &proFileTemplate, QTextStream &proFile,
bool &uncommentNextLine) const=0;
+ virtual QList<AbstractGeneratedFileInfo> updateableFiles(const QString &mainProFile) const = 0;
QString m_projectName;
QFileInfo m_projectPath;
diff --git a/src/plugins/qt4projectmanager/wizards/mobileapp.cpp b/src/plugins/qt4projectmanager/wizards/mobileapp.cpp
index f8a0916dcd..57ec6919db 100644
--- a/src/plugins/qt4projectmanager/wizards/mobileapp.cpp
+++ b/src/plugins/qt4projectmanager/wizards/mobileapp.cpp
@@ -142,6 +142,12 @@ QString MobileApp::mainWindowClassName() const
int MobileApp::stubVersionMinor() const { return StubVersion; }
+QList<AbstractGeneratedFileInfo> MobileApp::updateableFiles(const QString &mainProFile) const
+{
+ Q_UNUSED(mainProFile)
+ return QList<AbstractGeneratedFileInfo>(); // Nothing to update, here
+}
+
const int MobileApp::StubVersion = 2;
} // namespace Internal
diff --git a/src/plugins/qt4projectmanager/wizards/mobileapp.h b/src/plugins/qt4projectmanager/wizards/mobileapp.h
index 168fa4c1e1..7e41aebe96 100644
--- a/src/plugins/qt4projectmanager/wizards/mobileapp.h
+++ b/src/plugins/qt4projectmanager/wizards/mobileapp.h
@@ -80,6 +80,7 @@ private:
virtual void handleCurrentProFileTemplateLine(const QString &line,
QTextStream &proFileTemplate, QTextStream &proFile,
bool &uncommentNextLine) const;
+ QList<AbstractGeneratedFileInfo> updateableFiles(const QString &mainProFile) const;
};
} // end of namespace Internal
diff --git a/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.cpp b/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.cpp
index 5b4cd09234..a3265333f9 100644
--- a/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.cpp
+++ b/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.cpp
@@ -95,11 +95,7 @@ QmlCppPlugin::QmlCppPlugin(const QString &name, const QFileInfo &path,
, path(path)
, module(module)
, proFile(proFile)
-{}
-
-bool QmlAppGeneratedFileInfo::isOutdated() const
{
- return version < AbstractMobileApp::makeStubVersion(QmlStandaloneApp::StubVersion);
}
QmlStandaloneApp::QmlStandaloneApp() : AbstractMobileApp()
@@ -407,9 +403,9 @@ int QmlStandaloneApp::stubVersionMinor() const
return StubVersion;
}
-static QList<QmlAppGeneratedFileInfo> updateableFiles(const QString &mainProFile)
+QList<AbstractGeneratedFileInfo> QmlStandaloneApp::updateableFiles(const QString &mainProFile) const
{
- QList<QmlAppGeneratedFileInfo> result;
+ QList<AbstractGeneratedFileInfo> result;
static const struct {
int fileType;
QString fileName;
@@ -428,6 +424,7 @@ static QList<QmlAppGeneratedFileInfo> updateableFiles(const QString &mainProFile
QmlAppGeneratedFileInfo file;
file.fileType = files[i].fileType;
file.fileInfo = QFileInfo(fileName);
+ file.currentVersion = AbstractMobileApp::makeStubVersion(QmlStandaloneApp::StubVersion);
result.append(file);
}
if (result.count() != size)
@@ -435,53 +432,6 @@ static QList<QmlAppGeneratedFileInfo> updateableFiles(const QString &mainProFile
return result;
}
-QList<QmlAppGeneratedFileInfo> QmlStandaloneApp::fileUpdates(const QString &mainProFile)
-{
- QList<QmlAppGeneratedFileInfo> result;
- foreach (const QmlAppGeneratedFileInfo &file, updateableFiles(mainProFile)) {
- QmlAppGeneratedFileInfo newFile = file;
- QFile readFile(newFile.fileInfo.absoluteFilePath());
- if (!readFile.open(QIODevice::ReadOnly))
- continue;
- const QString firstLine = readFile.readLine();
- const QStringList elements = firstLine.split(QLatin1Char(' '));
- if (elements.count() != 5 || elements.at(1) != FileChecksum
- || elements.at(3) != FileStubVersion)
- continue;
- const QString versionString = elements.at(4);
- newFile.version = versionString.startsWith(QLatin1String("0x"))
- ? versionString.toInt(0, 16) : 0;
- newFile.statedChecksum = elements.at(2).toUShort(0, 16);
- QByteArray data = readFile.readAll();
- data.replace('\x0D', "");
- data.replace('\x0A', "");
- newFile.dataChecksum = qChecksum(data.constData(), data.length());
- if (!newFile.isUpToDate())
- result.append(newFile);
- }
- return result;
-}
-
-bool QmlStandaloneApp::updateFiles(const QList<QmlAppGeneratedFileInfo> &list, QString &error)
-{
- error.clear();
- const QmlStandaloneApp app;
- foreach (const QmlAppGeneratedFileInfo &info, list) {
- const QByteArray data = app.generateFile(info.fileType, &error);
- if (!error.isEmpty())
- return false;
- QFile file(info.fileInfo.absoluteFilePath());
- if (!file.open(QIODevice::WriteOnly) || file.write(data) == -1) {
- error = QCoreApplication::translate(
- "Qt4ProjectManager::Internal::QmlStandaloneApp",
- "Could not write file '%1'.").
- arg(QDir::toNativeSeparators(info.fileInfo.canonicalFilePath()));
- return false;
- }
- }
- return true;
-}
-
const int QmlStandaloneApp::StubVersion = 10;
} // namespace Internal
diff --git a/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.h b/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.h
index 9e26cc8071..626a5c9b38 100644
--- a/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.h
+++ b/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.h
@@ -87,7 +87,6 @@ struct QmlAppGeneratedFileInfo : public AbstractGeneratedFileInfo
};
QmlAppGeneratedFileInfo() : AbstractGeneratedFileInfo() {}
- virtual bool isOutdated() const;
};
class QmlStandaloneApp : public AbstractMobileApp
@@ -122,8 +121,6 @@ public:
#endif // CREATORLESSTEST
bool useExistingMainQml() const;
const QList<QmlModule*> modules() const;
- static QList<QmlAppGeneratedFileInfo> fileUpdates(const QString &mainProFile);
- static bool updateFiles(const QList<QmlAppGeneratedFileInfo> &list, QString &error);
static const int StubVersion;
@@ -138,6 +135,7 @@ private:
virtual void handleCurrentProFileTemplateLine(const QString &line,
QTextStream &proFileTemplate, QTextStream &proFile,
bool &uncommentNextLine) const;
+ QList<AbstractGeneratedFileInfo> updateableFiles(const QString &mainProFile) const;
bool addExternalModule(const QString &uri, const QFileInfo &dir,
const QFileInfo &contentDir);