1
/**************************************************************************
3
** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
5
** Contact: BlackBerry (qt@blackberry.com)
6
** Contact: KDAB (info@kdab.com)
8
** This file is part of Qt Creator.
10
** Commercial License Usage
11
** Licensees holding valid commercial Qt licenses may use this file in
12
** accordance with the commercial license agreement provided with the
13
** Software or, alternatively, in accordance with the terms contained in
14
** a written agreement between you and Digia. For licensing terms and
15
** conditions see http://qt.digia.com/licensing. For further information
16
** use the contact form at http://qt.digia.com/contact-us.
18
** GNU Lesser General Public License Usage
19
** Alternatively, this file may be used under the terms of the GNU Lesser
20
** General Public License version 2.1 as published by the Free Software
21
** Foundation and appearing in the file LICENSE.LGPL included in the
22
** packaging of this file. Please review the following information to
23
** ensure the GNU Lesser General Public License version 2.1 requirements
24
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
26
** In addition, as a special exception, Digia gives you certain additional
27
** rights. These rights are described in the Digia Qt LGPL Exception
28
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
30
****************************************************************************/
32
#include "bardescriptordocumentnodehandlers.h"
33
#include "bardescriptoreditorwidget.h"
34
#include "bardescriptoreditorassetswidget.h"
35
#include "bardescriptoreditorauthorinformationwidget.h"
36
#include "bardescriptoreditorentrypointwidget.h"
37
#include "bardescriptoreditorenvironmentwidget.h"
38
#include "bardescriptoreditorgeneralwidget.h"
39
#include "bardescriptoreditorpackageinformationwidget.h"
40
#include "bardescriptoreditorpermissionswidget.h"
42
#include <utils/environment.h>
43
#include <utils/qtcassert.h>
48
using namespace Qnx::Internal;
50
BarDescriptorDocumentAbstractNodeHandler::BarDescriptorDocumentAbstractNodeHandler(BarDescriptorEditorWidget *editorWidget)
51
: m_editorWidget(editorWidget)
56
BarDescriptorDocumentAbstractNodeHandler::~BarDescriptorDocumentAbstractNodeHandler()
60
bool BarDescriptorDocumentAbstractNodeHandler::handle(const QDomNode &node)
62
if (m_order == 0xFFFF)
63
m_order = node.lineNumber();
65
return fromNode(node);
68
void BarDescriptorDocumentAbstractNodeHandler::clear()
73
int BarDescriptorDocumentAbstractNodeHandler::order() const
78
BarDescriptorEditorPackageInformationWidget *BarDescriptorDocumentAbstractNodeHandler::packageInformationWidget() const
80
return m_editorWidget->packageInformationWidget();
83
BarDescriptorEditorAuthorInformationWidget *BarDescriptorDocumentAbstractNodeHandler::authorInformationWidget() const
85
return m_editorWidget->authorInformationWidget();
88
BarDescriptorEditorEntryPointWidget *BarDescriptorDocumentAbstractNodeHandler::entryPointWidget() const
90
return m_editorWidget->entryPointWidget();
93
BarDescriptorEditorGeneralWidget *BarDescriptorDocumentAbstractNodeHandler::generalWidget() const
95
return m_editorWidget->generalWidget();
98
BarDescriptorEditorPermissionsWidget *BarDescriptorDocumentAbstractNodeHandler::permissionsWidget() const
100
return m_editorWidget->permissionsWidget();
103
BarDescriptorEditorEnvironmentWidget *BarDescriptorDocumentAbstractNodeHandler::environmentWidget() const
105
return m_editorWidget->environmentWidget();
108
BarDescriptorEditorAssetsWidget *BarDescriptorDocumentAbstractNodeHandler::assetsWidget() const
110
return m_editorWidget->assetsWidget();
113
bool BarDescriptorDocumentAbstractNodeHandler::canHandleSimpleTextElement(const QDomNode &node, const QString &tagName) const
115
QDomElement element = node.toElement();
116
if (element.isNull())
119
if (element.tagName().toLower() != tagName.toLower())
122
QDomText textNode = element.firstChild().toText();
123
if (textNode.isNull())
129
QString BarDescriptorDocumentAbstractNodeHandler::loadSimpleTextElement(const QDomNode &node)
131
QDomElement element = node.toElement();
132
QDomText textNode = element.firstChild().toText();
133
return textNode.data();
136
QDomElement BarDescriptorDocumentAbstractNodeHandler::createSimpleTextElement(QDomDocument &doc, const QString &tagName, const QString &textValue) const
138
if (textValue.isEmpty())
139
return QDomElement();
141
QDomElement elem = doc.createElement(tagName);
142
elem.appendChild(doc.createTextNode(textValue));
146
// ----------------------------------------------------------------------------
148
BarDescriptorDocumentIdNodeHandler::BarDescriptorDocumentIdNodeHandler(BarDescriptorEditorWidget *editorWidget)
149
: BarDescriptorDocumentAbstractNodeHandler(editorWidget)
153
bool BarDescriptorDocumentIdNodeHandler::canHandle(const QDomNode &node) const
155
return canHandleSimpleTextElement(node, QLatin1String("id"));
158
bool BarDescriptorDocumentIdNodeHandler::fromNode(const QDomNode &node)
160
if (!canHandle(node))
163
packageInformationWidget()->setPackageId(loadSimpleTextElement(node));
167
QDomNode BarDescriptorDocumentIdNodeHandler::toNode(QDomDocument &doc) const
169
return createSimpleTextElement(doc, QLatin1String("id"), packageInformationWidget()->packageId());
172
// ----------------------------------------------------------------------------
174
BarDescriptorDocumentVersionNumberNodeHandler::BarDescriptorDocumentVersionNumberNodeHandler(BarDescriptorEditorWidget *editorWidget)
175
: BarDescriptorDocumentAbstractNodeHandler(editorWidget)
179
bool BarDescriptorDocumentVersionNumberNodeHandler::canHandle(const QDomNode &node) const
181
return canHandleSimpleTextElement(node, QLatin1String("versionNumber"));
184
bool BarDescriptorDocumentVersionNumberNodeHandler::fromNode(const QDomNode &node)
186
if (!canHandle(node))
189
packageInformationWidget()->setPackageVersion(loadSimpleTextElement(node));
193
QDomNode BarDescriptorDocumentVersionNumberNodeHandler::toNode(QDomDocument &doc) const
195
return createSimpleTextElement(doc, QLatin1String("versionNumber"), packageInformationWidget()->packageVersion());
198
// ----------------------------------------------------------------------------
200
BarDescriptorDocumentBuildIdNodeHandler::BarDescriptorDocumentBuildIdNodeHandler(BarDescriptorEditorWidget *editorWidget)
201
: BarDescriptorDocumentAbstractNodeHandler(editorWidget)
205
bool BarDescriptorDocumentBuildIdNodeHandler::canHandle(const QDomNode &node) const
207
return canHandleSimpleTextElement(node, QLatin1String("buildId"));
210
bool BarDescriptorDocumentBuildIdNodeHandler::fromNode(const QDomNode &node)
212
if (!canHandle(node))
215
packageInformationWidget()->setPackageBuildId(loadSimpleTextElement(node));
219
QDomNode BarDescriptorDocumentBuildIdNodeHandler::toNode(QDomDocument &doc) const
221
return createSimpleTextElement(doc, QLatin1String("buildId"), packageInformationWidget()->packageBuildId());
224
// ----------------------------------------------------------------------------
226
BarDescriptorDocumentApplicationNameNodeHandler::BarDescriptorDocumentApplicationNameNodeHandler(BarDescriptorEditorWidget *editorWidget)
227
: BarDescriptorDocumentAbstractNodeHandler(editorWidget)
231
bool BarDescriptorDocumentApplicationNameNodeHandler::canHandle(const QDomNode &node) const
233
return canHandleSimpleTextElement(node, QLatin1String("name"));
236
bool BarDescriptorDocumentApplicationNameNodeHandler::fromNode(const QDomNode &node)
238
// TODO: Add support for localization
240
if (!canHandle(node))
243
entryPointWidget()->setApplicationName(loadSimpleTextElement(node));
247
QDomNode BarDescriptorDocumentApplicationNameNodeHandler::toNode(QDomDocument &doc) const
249
// TODO: Add support for localization
251
return createSimpleTextElement(doc, QLatin1String("name"), entryPointWidget()->applicationName());
254
// ----------------------------------------------------------------------------
256
BarDescriptorDocumentApplicationDescriptionNodeHandler::BarDescriptorDocumentApplicationDescriptionNodeHandler(BarDescriptorEditorWidget *editorWidget)
257
: BarDescriptorDocumentAbstractNodeHandler(editorWidget)
261
bool BarDescriptorDocumentApplicationDescriptionNodeHandler::canHandle(const QDomNode &node) const
263
return canHandleSimpleTextElement(node, QLatin1String("description"));
266
bool BarDescriptorDocumentApplicationDescriptionNodeHandler::fromNode(const QDomNode &node)
268
// TODO: Add support for localization
270
if (!canHandle(node))
273
entryPointWidget()->setApplicationDescription(loadSimpleTextElement(node));
277
QDomNode BarDescriptorDocumentApplicationDescriptionNodeHandler::toNode(QDomDocument &doc) const
279
return createSimpleTextElement(doc, QLatin1String("description"), entryPointWidget()->applicationDescription());
282
// ----------------------------------------------------------------------------
284
BarDescriptorDocumentApplicationIconNodeHandler::BarDescriptorDocumentApplicationIconNodeHandler(BarDescriptorEditorWidget *editorWidget)
285
: BarDescriptorDocumentAbstractNodeHandler(editorWidget)
289
bool BarDescriptorDocumentApplicationIconNodeHandler::canHandle(const QDomNode &node) const
291
QDomElement element = node.toElement();
292
if (element.isNull())
295
if (element.tagName() != QLatin1String("icon"))
298
QDomElement imageElement = element.firstChild().toElement();
299
if (imageElement.isNull())
302
if (imageElement.tagName() != QLatin1String("image"))
305
QDomText imageTextNode = imageElement.firstChild().toText();
306
if (imageTextNode.isNull())
312
bool BarDescriptorDocumentApplicationIconNodeHandler::fromNode(const QDomNode &node)
314
// TODO: Add support for localization
316
if (!canHandle(node))
319
QDomNode imageNode = node.firstChild();
320
QDomText imageTextNode = imageNode.firstChild().toText();
321
entryPointWidget()->setApplicationIcon(imageTextNode.data());
325
QDomNode BarDescriptorDocumentApplicationIconNodeHandler::toNode(QDomDocument &doc) const
327
// TODO: Add support for localization
328
const QString iconFileName = entryPointWidget()->applicationIconFileName();
329
if (iconFileName.isEmpty())
330
return QDomElement();
332
QDomElement iconElement = doc.createElement(QLatin1String("icon"));
333
iconElement.appendChild(createSimpleTextElement(doc, QLatin1String("image"), iconFileName));
337
// ----------------------------------------------------------------------------
339
BarDescriptorDocumentSplashScreenNodeHandler::BarDescriptorDocumentSplashScreenNodeHandler(BarDescriptorEditorWidget *editorWidget)
340
: BarDescriptorDocumentAbstractNodeHandler(editorWidget)
344
bool BarDescriptorDocumentSplashScreenNodeHandler::canHandle(const QDomNode &node) const
346
QDomElement element = node.toElement();
347
if (element.isNull())
350
if (element.tagName().toLower() != QLatin1String("splashscreens"))
353
QDomElement imageElement = element.firstChild().toElement();
354
if (imageElement.isNull())
357
if (imageElement.tagName().toLower() != QLatin1String("image"))
360
QDomText imageTextNode = imageElement.firstChild().toText();
361
if (imageTextNode.isNull())
367
bool BarDescriptorDocumentSplashScreenNodeHandler::fromNode(const QDomNode &node)
369
if (!canHandle(node))
372
QDomElement imageNode = node.firstChildElement();
373
while (!imageNode.isNull()) {
374
if (imageNode.tagName().toLower() == QLatin1String("image")) {
375
QDomText imageTextNode = imageNode.firstChild().toText();
376
entryPointWidget()->appendSplashScreen(imageTextNode.data());
378
imageNode = imageNode.nextSiblingElement();
383
QDomNode BarDescriptorDocumentSplashScreenNodeHandler::toNode(QDomDocument &doc) const
385
QStringList splashScreens = entryPointWidget()->splashScreens();
386
if (splashScreens.isEmpty())
387
return QDomElement();
389
QDomElement splashScreenElement = doc.createElement(QLatin1String("splashScreens"));
390
foreach (const QString &splashScreen, splashScreens)
391
splashScreenElement.appendChild(createSimpleTextElement(doc, QLatin1String("image"), splashScreen));
393
return splashScreenElement;
396
// ----------------------------------------------------------------------------
398
BarDescriptorDocumentAssetNodeHandler::BarDescriptorDocumentAssetNodeHandler(BarDescriptorEditorWidget *editorWidget)
399
: BarDescriptorDocumentAbstractNodeHandler(editorWidget)
403
bool BarDescriptorDocumentAssetNodeHandler::canHandle(const QDomNode &node) const
405
return canHandleSimpleTextElement(node, QLatin1String("asset"));
408
bool BarDescriptorDocumentAssetNodeHandler::fromNode(const QDomNode &node)
410
if (!canHandle(node))
413
QDomElement element = node.toElement();
415
QString path = element.attribute(QLatin1String("path"));
416
QString entry = element.attribute(QLatin1String("entry"));
417
QDomText destNode = element.firstChild().toText();
418
QString dest = destNode.data();
420
BarDescriptorAsset asset;
422
asset.destination = dest;
423
asset.entry = entry == QLatin1String("true");
425
assetsWidget()->addAsset(asset);
429
QDomNode BarDescriptorDocumentAssetNodeHandler::toNode(QDomDocument &doc) const
431
QDomDocumentFragment fragment = doc.createDocumentFragment();
433
QList<BarDescriptorAsset> assets = assetsWidget()->assets();
434
foreach (const BarDescriptorAsset &asset, assets) {
435
QDomElement assetElem = doc.createElement(QLatin1String("asset"));
436
assetElem.setAttribute(QLatin1String("path"), asset.source);
438
assetElem.setAttribute(QLatin1String("type"), QLatin1String("Qnx/Elf"));
439
assetElem.setAttribute(QLatin1String("entry"), QLatin1String("true"));
441
assetElem.appendChild(doc.createTextNode(asset.destination));
442
fragment.appendChild(assetElem);
448
// ----------------------------------------------------------------------------
450
BarDescriptorDocumentInitialWindowNodeHandler::BarDescriptorDocumentInitialWindowNodeHandler(BarDescriptorEditorWidget *editorWidget)
451
: BarDescriptorDocumentAbstractNodeHandler(editorWidget)
455
bool BarDescriptorDocumentInitialWindowNodeHandler::canHandle(const QDomNode &node) const
457
QDomElement element = node.toElement();
458
if (element.isNull())
461
if (element.tagName() != QLatin1String("initialWindow"))
467
bool BarDescriptorDocumentInitialWindowNodeHandler::fromNode(const QDomNode &node)
469
if (!canHandle(node))
472
QDomElement child = node.firstChildElement();
473
while (!child.isNull()) {
474
if (child.tagName() == QLatin1String("aspectRatio")) {
475
generalWidget()->setOrientation(loadSimpleTextElement(child));
476
} else if (child.tagName() == QLatin1String("autoOrients")) {
477
if (loadSimpleTextElement(child) == QLatin1String("true"))
478
generalWidget()->setOrientation(QLatin1String("auto-orient"));
479
} else if (child.tagName() == QLatin1String("systemChrome")) {
480
generalWidget()->setChrome(loadSimpleTextElement(child));
481
} else if (child.tagName() == QLatin1String("transparent")) {
482
const QString transparent = loadSimpleTextElement(child);
483
generalWidget()->setTransparent(transparent == QLatin1String("true"));
485
child = child.nextSiblingElement();
491
QDomNode BarDescriptorDocumentInitialWindowNodeHandler::toNode(QDomDocument &doc) const
493
QDomElement element = doc.createElement(QLatin1String("initialWindow"));
495
if (generalWidget()->orientation() == QLatin1String("auto-orient")) {
496
element.appendChild(createSimpleTextElement(doc, QLatin1String("autoOrients"), QLatin1String("true")));
497
} else if (!generalWidget()->orientation().isEmpty()) {
498
element.appendChild(createSimpleTextElement(doc, QLatin1String("aspectRatio"), generalWidget()->orientation()));
499
element.appendChild(createSimpleTextElement(doc, QLatin1String("autoOrients"), QLatin1String("false")));
501
element.appendChild(createSimpleTextElement(doc, QLatin1String("systemChrome"), generalWidget()->chrome()));
502
element.appendChild(createSimpleTextElement(doc, QLatin1String("transparent"), generalWidget()->transparent() ? QLatin1String("true") : QLatin1String("false")));
507
// ----------------------------------------------------------------------------
510
BarDescriptorDocumentActionNodeHandler::BarDescriptorDocumentActionNodeHandler(BarDescriptorEditorWidget *editorWidget)
511
: BarDescriptorDocumentAbstractNodeHandler(editorWidget)
515
bool BarDescriptorDocumentActionNodeHandler::canHandle(const QDomNode &node) const
517
return canHandleSimpleTextElement(node, QLatin1String("action"));
520
bool BarDescriptorDocumentActionNodeHandler::fromNode(const QDomNode &node)
522
if (!canHandle(node))
525
QString value = loadSimpleTextElement(node);
526
if (value != QLatin1String("run_native")) // This has no representation in the GUI, and is always added
527
permissionsWidget()->checkPermission(value);
532
QDomNode BarDescriptorDocumentActionNodeHandler::toNode(QDomDocument &doc) const
534
QDomDocumentFragment frag = doc.createDocumentFragment();
536
QDomElement runNativeElement = doc.createElement(QLatin1String("action"));
537
runNativeElement.setAttribute(QLatin1String("system"), QLatin1String("true"));
538
runNativeElement.appendChild(doc.createTextNode(QLatin1String("run_native")));
539
frag.appendChild(runNativeElement);
541
QStringList checkedIdentifiers = permissionsWidget()->checkedPermissions();
542
foreach (const QString &identifier, checkedIdentifiers)
543
frag.appendChild(createSimpleTextElement(doc, QLatin1String("action"), identifier));
548
// ----------------------------------------------------------------------------
550
BarDescriptorDocumentArgNodeHandler::BarDescriptorDocumentArgNodeHandler(BarDescriptorEditorWidget *editorWidget)
551
: BarDescriptorDocumentAbstractNodeHandler(editorWidget)
555
bool BarDescriptorDocumentArgNodeHandler::canHandle(const QDomNode &node) const
557
return canHandleSimpleTextElement(node, QLatin1String("arg"));
560
bool BarDescriptorDocumentArgNodeHandler::fromNode(const QDomNode &node)
562
if (!canHandle(node))
565
generalWidget()->appendApplicationArgument(loadSimpleTextElement(node));
569
QDomNode BarDescriptorDocumentArgNodeHandler::toNode(QDomDocument &doc) const
571
QDomDocumentFragment frag = doc.createDocumentFragment();
573
QStringList arguments = generalWidget()->applicationArguments();
574
foreach (const QString &argument, arguments)
575
frag.appendChild(createSimpleTextElement(doc, QLatin1String("arg"), argument));
580
// ----------------------------------------------------------------------------
582
BarDescriptorDocumentEnvNodeHandler::BarDescriptorDocumentEnvNodeHandler(BarDescriptorEditorWidget *editorWidget)
583
: BarDescriptorDocumentAbstractNodeHandler(editorWidget)
587
bool BarDescriptorDocumentEnvNodeHandler::canHandle(const QDomNode &node) const
589
QDomElement element = node.toElement();
590
if (element.isNull())
593
if (element.tagName() != QLatin1String("env"))
596
if (!element.hasAttribute(QLatin1String("var")) || !element.hasAttribute(QLatin1String("value")))
602
bool BarDescriptorDocumentEnvNodeHandler::fromNode(const QDomNode &node)
604
if (!canHandle(node))
607
QDomElement element = node.toElement();
609
QString var = element.attribute(QLatin1String("var"));
610
QString value = element.attribute(QLatin1String("value"));
612
Utils::EnvironmentItem item(var, value);
613
environmentWidget()->appendEnvironmentItem(item);
617
QDomNode BarDescriptorDocumentEnvNodeHandler::toNode(QDomDocument &doc) const
619
QDomDocumentFragment frag = doc.createDocumentFragment();
620
QList<Utils::EnvironmentItem> environmentItems = environmentWidget()->environment();
622
foreach (const Utils::EnvironmentItem &item, environmentItems) {
623
QDomElement element = doc.createElement(QLatin1String("env"));
624
element.setAttribute(QLatin1String("var"), item.name);
625
element.setAttribute(QLatin1String("value"), item.value);
626
frag.appendChild(element);
632
// ----------------------------------------------------------------------------
634
BarDescriptorDocumentAuthorNodeHandler::BarDescriptorDocumentAuthorNodeHandler(BarDescriptorEditorWidget *editorWidget)
635
: BarDescriptorDocumentAbstractNodeHandler(editorWidget)
639
bool BarDescriptorDocumentAuthorNodeHandler::canHandle(const QDomNode &node) const
641
return canHandleSimpleTextElement(node, QLatin1String("author"))
642
|| canHandleSimpleTextElement(node, QLatin1String("publisher"));
645
bool BarDescriptorDocumentAuthorNodeHandler::fromNode(const QDomNode &node)
647
if (!canHandle(node))
650
authorInformationWidget()->setAuthor(loadSimpleTextElement(node));
654
QDomNode BarDescriptorDocumentAuthorNodeHandler::toNode(QDomDocument &doc) const
656
return createSimpleTextElement(doc, QLatin1String("author"), authorInformationWidget()->author());
659
// ----------------------------------------------------------------------------
661
BarDescriptorDocumentAuthorIdNodeHandler::BarDescriptorDocumentAuthorIdNodeHandler(BarDescriptorEditorWidget *editorWidget)
662
: BarDescriptorDocumentAbstractNodeHandler(editorWidget)
666
bool BarDescriptorDocumentAuthorIdNodeHandler::canHandle(const QDomNode &node) const
668
return canHandleSimpleTextElement(node, QLatin1String("authorId"));
671
bool BarDescriptorDocumentAuthorIdNodeHandler::fromNode(const QDomNode &node)
673
if (!canHandle(node))
676
authorInformationWidget()->setAuthorId(loadSimpleTextElement(node));
680
QDomNode BarDescriptorDocumentAuthorIdNodeHandler::toNode(QDomDocument &doc) const
682
return createSimpleTextElement(doc, QLatin1String("authorId"), authorInformationWidget()->authorId());
685
// ----------------------------------------------------------------------------
687
BarDescriptorDocumentUnknownNodeHandler::BarDescriptorDocumentUnknownNodeHandler(BarDescriptorEditorWidget *editorWidget)
688
: BarDescriptorDocumentAbstractNodeHandler(editorWidget)
692
bool BarDescriptorDocumentUnknownNodeHandler::canHandle(const QDomNode &node) const
698
bool BarDescriptorDocumentUnknownNodeHandler::fromNode(const QDomNode &node)
700
m_node = node.cloneNode();
704
QDomNode BarDescriptorDocumentUnknownNodeHandler::toNode(QDomDocument &doc) const