1 /**************************************************************************
3 ** This file is part of Qt Creator
5 ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
7 ** Contact: Nokia Corporation (qt-info@nokia.com)
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
16 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25 ** In addition, as a special exception, Nokia gives you certain additional
26 ** rights. These rights are described in the Nokia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29 ** If you have questions regarding the use of this file, please contact
30 ** Nokia at qt-info@nokia.com.
32 **************************************************************************/
36 #include <QtCore/QDir>
37 #include <QtCore/QFile>
38 #include <QtCore/QRegExp>
39 #include <QtCore/QTextStream>
40 #include <QtCore/QCoreApplication>
42 #ifndef CREATORLESSTEST
43 #include <coreplugin/icore.h>
44 #endif // CREATORLESSTEST
46 namespace Qt4ProjectManager {
49 const QString appViewerBaseName(QLatin1String("html5applicationviewer"));
50 const QString appViewerPriFileName(appViewerBaseName + QLatin1String(".pri"));
51 const QString appViewerCppFileName(appViewerBaseName + QLatin1String(".cpp"));
52 const QString appViewerHFileName(appViewerBaseName + QLatin1String(".h"));
53 const QString appViewerOriginsSubDir(appViewerBaseName + QLatin1Char('/'));
57 , m_mainHtmlMode(ModeGenerate)
58 , m_touchOptimizedNavigationEnabled(false)
66 void Html5App::setMainHtml(Mode mode, const QString &data)
68 Q_ASSERT(mode != ModeGenerate || data.isEmpty());
69 m_mainHtmlMode = mode;
70 m_mainHtmlData = data;
73 Html5App::Mode Html5App::mainHtmlMode() const
75 return m_mainHtmlMode;
78 void Html5App::setTouchOptimizedNavigationEnabled(bool enabled)
80 m_touchOptimizedNavigationEnabled = enabled;
83 bool Html5App::touchOptimizedNavigationEnabled() const
85 return m_touchOptimizedNavigationEnabled;
88 QString Html5App::pathExtended(int fileType) const
90 const QString appViewerTargetSubDir = appViewerOriginsSubDir;
91 const QString indexHtml = QLatin1String("index.html");
92 const QString pathBase = outputPathBase();
93 const QDir appProFilePath(pathBase);
94 const bool generateHtml = m_mainHtmlMode == ModeGenerate;
95 const bool importHtml = m_mainHtmlMode == ModeImport;
96 const QFileInfo importedHtmlFile(m_mainHtmlData);
97 const QString htmlSubDir = importHtml ? importedHtmlFile.canonicalPath().split(QLatin1Char('/')).last() + QLatin1Char('/')
98 : QString::fromLatin1("html/");
101 case MainHtml: return generateHtml ? pathBase + htmlSubDir + indexHtml
102 : importedHtmlFile.canonicalFilePath();
103 case MainHtmlDeployed: return generateHtml ? QString(htmlSubDir + indexHtml)
104 : htmlSubDir + importedHtmlFile.fileName();
105 case MainHtmlOrigin: return originsRoot() + QLatin1String("html/") + indexHtml;
106 case AppViewerPri: return pathBase + appViewerTargetSubDir + appViewerPriFileName;
107 case AppViewerPriOrigin: return originsRoot() + appViewerOriginsSubDir + appViewerPriFileName;
108 case AppViewerCpp: return pathBase + appViewerTargetSubDir + appViewerCppFileName;
109 case AppViewerCppOrigin: return originsRoot() + appViewerOriginsSubDir + appViewerCppFileName;
110 case AppViewerH: return pathBase + appViewerTargetSubDir + appViewerHFileName;
111 case AppViewerHOrigin: return originsRoot() + appViewerOriginsSubDir + appViewerHFileName;
112 case HtmlDir: return pathBase + htmlSubDir;
113 case HtmlDirProFileRelative: return generateHtml ? QString(htmlSubDir).remove(htmlSubDir.length() - 1, 1)
114 : appProFilePath.relativeFilePath(importedHtmlFile.canonicalPath());
115 default: qFatal("Html5App::pathExtended() needs more work");
120 QString Html5App::originsRoot() const
122 return templatesRoot() + QLatin1String("html5app/");
125 QString Html5App::mainWindowClassName() const
127 return QLatin1String("Html5ApplicationViewer");
130 bool Html5App::adaptCurrentMainCppTemplateLine(QString &line) const
132 const QLatin1Char quote('"');
133 bool adaptLine = true;
134 if (line.contains(QLatin1String("// MAINHTMLFILE"))) {
135 if (m_mainHtmlMode != ModeUrl)
136 insertParameter(line, quote + path(MainHtmlDeployed) + quote);
139 } else if (line.contains(QLatin1String("// MAINHTMLURL"))) {
140 if (m_mainHtmlMode == ModeUrl)
141 insertParameter(line, quote + m_mainHtmlData + quote);
148 void Html5App::handleCurrentProFileTemplateLine(const QString &line,
149 QTextStream &proFileTemplate, QTextStream &proFile,
150 bool &commentOutNextLine) const
152 Q_UNUSED(proFileTemplate)
154 if (line.contains(QLatin1String("# TOUCH_OPTIMIZED_NAVIGATION")))
155 commentOutNextLine = !m_touchOptimizedNavigationEnabled;
158 #ifndef CREATORLESSTEST
159 Core::GeneratedFiles Html5App::generateFiles(QString *errorMessage) const
161 Core::GeneratedFiles files = AbstractMobileApp::generateFiles(errorMessage);
162 if (m_mainHtmlMode == ModeGenerate) {
163 files.append(file(generateFile(Html5AppGeneratedFileInfo::MainHtmlFile, errorMessage), path(MainHtml)));
164 files.last().setAttributes(Core::GeneratedFile::OpenEditorAttribute);
167 files.append(file(generateFile(Html5AppGeneratedFileInfo::AppViewerPriFile, errorMessage), path(AppViewerPri)));
168 files.append(file(generateFile(Html5AppGeneratedFileInfo::AppViewerCppFile, errorMessage), path(AppViewerCpp)));
169 files.append(file(generateFile(Html5AppGeneratedFileInfo::AppViewerHFile, errorMessage), path(AppViewerH)));
173 #endif // CREATORLESSTEST
175 QByteArray Html5App::generateFileExtended(int fileType,
176 bool *versionAndCheckSum, QString *comment, QString *errorMessage) const
180 case Html5AppGeneratedFileInfo::MainHtmlFile:
181 data = readBlob(path(MainHtmlOrigin), errorMessage);
183 case Html5AppGeneratedFileInfo::AppViewerPriFile:
184 data = readBlob(path(AppViewerPriOrigin), errorMessage);
185 data.append(readBlob(path(DeploymentPriOrigin), errorMessage));
186 *comment = ProFileComment;
187 *versionAndCheckSum = true;
189 case Html5AppGeneratedFileInfo::AppViewerCppFile:
190 data = readBlob(path(AppViewerCppOrigin), errorMessage);
191 *versionAndCheckSum = true;
193 case Html5AppGeneratedFileInfo::AppViewerHFile:
195 data = readBlob(path(AppViewerHOrigin), errorMessage);
196 *versionAndCheckSum = true;
202 int Html5App::stubVersionMinor() const
207 QList<AbstractGeneratedFileInfo> Html5App::updateableFiles(const QString &mainProFile) const
209 QList<AbstractGeneratedFileInfo> result;
210 static const struct {
214 {Html5AppGeneratedFileInfo::AppViewerPriFile, appViewerPriFileName},
215 {Html5AppGeneratedFileInfo::AppViewerHFile, appViewerHFileName},
216 {Html5AppGeneratedFileInfo::AppViewerCppFile, appViewerCppFileName}
218 const QFileInfo mainProFileInfo(mainProFile);
219 const int size = sizeof(files) / sizeof(files[0]);
220 for (int i = 0; i < size; ++i) {
221 const QString fileName = mainProFileInfo.dir().absolutePath()
222 + QLatin1Char('/') + appViewerOriginsSubDir + files[i].fileName;
223 if (!QFile::exists(fileName))
225 Html5AppGeneratedFileInfo file;
226 file.fileType = files[i].fileType;
227 file.fileInfo = QFileInfo(fileName);
228 file.currentVersion = AbstractMobileApp::makeStubVersion(Html5App::StubVersion);
231 if (result.count() != size)
232 result.clear(); // All files must be found. No wrong/partial updates, please.
236 QList<DeploymentFolder> Html5App::deploymentFolders() const
238 QList<DeploymentFolder> result;
239 if (m_mainHtmlMode != ModeUrl)
240 result.append(DeploymentFolder(path(HtmlDirProFileRelative), QLatin1String(".")));
244 const int Html5App::StubVersion = 10;
246 } // namespace Internal
247 } // namespace Qt4ProjectManager