Merge lp:~zeller-benjamin/qtcreator-plugin-remotelinux/qt53migrate into lp:qtcreator-plugin-remotelinux

Proposed by Benjamin Zeller
Status: Merged
Merged at revision: 12
Proposed branch: lp:~zeller-benjamin/qtcreator-plugin-remotelinux/qt53migrate
Merge into: lp:qtcreator-plugin-remotelinux
Diff against target: 18661 lines (+8335/-5585)
217 files modified
debian/changelog (+6/-0)
debian/control (+5/-5)
share/qtcreator/templates/wizards/bb-bardescriptor/bar-descriptor.xml (+2/-4)
share/qtcreator/templates/wizards/bb-cascades-app/bar-descriptor.xml (+0/-2)
share/qtcreator/templates/wizards/bb-cascades-app/wizard.xml (+1/-1)
share/qtcreator/templates/wizards/bb-qt5-bardescriptor/bar-descriptor.xml (+0/-22)
src/qnx/bardescriptordocument.cpp (+559/-127)
src/qnx/bardescriptordocument.h (+76/-13)
src/qnx/bardescriptordocumentnodehandlers.cpp (+0/-708)
src/qnx/bardescriptordocumentnodehandlers.h (+0/-302)
src/qnx/bardescriptoreditor.cpp (+48/-34)
src/qnx/bardescriptoreditor.h (+6/-2)
src/qnx/bardescriptoreditorabstractpanelwidget.cpp (+84/-36)
src/qnx/bardescriptoreditorabstractpanelwidget.h (+21/-10)
src/qnx/bardescriptoreditorassetswidget.cpp (+42/-42)
src/qnx/bardescriptoreditorassetswidget.h (+7/-12)
src/qnx/bardescriptoreditorauthorinformationwidget.cpp (+11/-26)
src/qnx/bardescriptoreditorauthorinformationwidget.h (+3/-10)
src/qnx/bardescriptoreditorentrypointwidget.cpp (+46/-67)
src/qnx/bardescriptoreditorentrypointwidget.h (+5/-17)
src/qnx/bardescriptoreditorenvironmentwidget.cpp (+21/-20)
src/qnx/bardescriptoreditorenvironmentwidget.h (+4/-7)
src/qnx/bardescriptoreditorfactory.cpp (+10/-14)
src/qnx/bardescriptoreditorfactory.h (+2/-10)
src/qnx/bardescriptoreditorgeneralwidget.cpp (+41/-62)
src/qnx/bardescriptoreditorgeneralwidget.h (+4/-16)
src/qnx/bardescriptoreditorpackageinformationwidget.cpp (+3/-46)
src/qnx/bardescriptoreditorpackageinformationwidget.h (+1/-14)
src/qnx/bardescriptoreditorpermissionswidget.cpp (+26/-10)
src/qnx/bardescriptoreditorpermissionswidget.h (+5/-5)
src/qnx/bardescriptoreditorwidget.cpp (+61/-112)
src/qnx/bardescriptoreditorwidget.h (+10/-34)
src/qnx/blackberryabstractdeploystep.h (+1/-3)
src/qnx/blackberryapilevelconfiguration.cpp (+504/-0)
src/qnx/blackberryapilevelconfiguration.h (+125/-0)
src/qnx/blackberryapplicationrunner.cpp (+186/-8)
src/qnx/blackberryapplicationrunner.h (+29/-7)
src/qnx/blackberrycertificate.cpp (+2/-2)
src/qnx/blackberrycheckdevicestatusstep.cpp (+278/-0)
src/qnx/blackberrycheckdevicestatusstep.h (+93/-0)
src/qnx/blackberrycheckdevicestatusstepconfigwidget.cpp (+73/-0)
src/qnx/blackberrycheckdevicestatusstepconfigwidget.h (+63/-0)
src/qnx/blackberrycheckdevicestatusstepconfigwidget.ui (+35/-0)
src/qnx/blackberrycheckdevicestatusstepfactory.cpp (+110/-0)
src/qnx/blackberrycheckdevicestatusstepfactory.h (+64/-0)
src/qnx/blackberrycheckdevmodestep.cpp (+0/-110)
src/qnx/blackberrycheckdevmodestep.h (+0/-63)
src/qnx/blackberrycheckdevmodestepconfigwidget.cpp (+0/-55)
src/qnx/blackberrycheckdevmodestepconfigwidget.h (+0/-55)
src/qnx/blackberrycheckdevmodestepfactory.cpp (+0/-108)
src/qnx/blackberrycheckdevmodestepfactory.h (+0/-64)
src/qnx/blackberryconfiguration.cpp (+0/-389)
src/qnx/blackberryconfiguration.h (+0/-111)
src/qnx/blackberryconfigurationmanager.cpp (+304/-176)
src/qnx/blackberryconfigurationmanager.h (+46/-19)
src/qnx/blackberrycreatecertificatedialog.cpp (+1/-1)
src/qnx/blackberrycreatepackagestep.cpp (+164/-65)
src/qnx/blackberrycreatepackagestep.h (+15/-0)
src/qnx/blackberrycreatepackagestepconfigwidget.cpp (+82/-7)
src/qnx/blackberrycreatepackagestepconfigwidget.h (+6/-3)
src/qnx/blackberrycreatepackagestepconfigwidget.ui (+161/-4)
src/qnx/blackberrydebugsupport.cpp (+6/-1)
src/qnx/blackberrydebugtokenpinsdialog.cpp (+173/-0)
src/qnx/blackberrydebugtokenpinsdialog.h (+79/-0)
src/qnx/blackberrydebugtokenpinsdialog.ui (+144/-0)
src/qnx/blackberrydebugtokenreader.cpp (+24/-0)
src/qnx/blackberrydebugtokenreader.h (+2/-0)
src/qnx/blackberrydebugtokenrequestdialog.cpp (+22/-3)
src/qnx/blackberrydebugtokenrequester.cpp (+10/-6)
src/qnx/blackberrydeployconfiguration.cpp (+6/-5)
src/qnx/blackberrydeployconfiguration.h (+1/-3)
src/qnx/blackberrydeployconfigurationfactory.cpp (+2/-2)
src/qnx/blackberrydeployconfigurationfactory.h (+1/-3)
src/qnx/blackberrydeployconfigurationwidget.cpp (+2/-0)
src/qnx/blackberrydeployconfigurationwidget.h (+1/-3)
src/qnx/blackberrydeployinformation.h (+1/-3)
src/qnx/blackberrydeployqtlibrariesdialog.cpp (+298/-0)
src/qnx/blackberrydeployqtlibrariesdialog.h (+109/-0)
src/qnx/blackberrydeployqtlibrariesdialog.ui (+117/-0)
src/qnx/blackberrydeviceconfiguration.cpp (+13/-4)
src/qnx/blackberrydeviceconfiguration.h (+1/-3)
src/qnx/blackberrydeviceconfigurationwidget.cpp (+52/-19)
src/qnx/blackberrydeviceconfigurationwidget.h (+6/-3)
src/qnx/blackberrydeviceconfigurationwidget.ui (+16/-17)
src/qnx/blackberrydeviceconfigurationwizardconfigpage.ui (+13/-15)
src/qnx/blackberrydeviceconfigurationwizardpages.cpp (+39/-17)
src/qnx/blackberrydeviceconfigurationwizardpages.h (+4/-3)
src/qnx/blackberrydeviceconnection.cpp (+1/-2)
src/qnx/blackberrydeviceconnectionmanager.cpp (+5/-5)
src/qnx/blackberrydeviceinformation.cpp (+11/-2)
src/qnx/blackberrydeviceinformation.h (+2/-0)
src/qnx/blackberrydevicelistdetector.cpp (+1/-1)
src/qnx/blackberryimportcertificatedialog.cpp (+1/-0)
src/qnx/blackberryinstallwizard.cpp (+3/-0)
src/qnx/blackberryinstallwizard.h (+11/-3)
src/qnx/blackberryinstallwizardoptionpage.ui (+97/-0)
src/qnx/blackberryinstallwizardpages.cpp (+88/-39)
src/qnx/blackberryinstallwizardpages.h (+9/-7)
src/qnx/blackberryinstallwizardtargetpage.ui (+1/-1)
src/qnx/blackberrykeyspage.cpp (+5/-2)
src/qnx/blackberrykeyspage.h (+4/-2)
src/qnx/blackberrykeyswidget.cpp (+213/-35)
src/qnx/blackberrykeyswidget.h (+19/-2)
src/qnx/blackberrykeyswidget.ui (+68/-13)
src/qnx/blackberrylogprocessrunner.h (+1/-3)
src/qnx/blackberryndkprocess.cpp (+4/-3)
src/qnx/blackberryndkprocess.h (+1/-0)
src/qnx/blackberryndksettingspage.cpp (+11/-6)
src/qnx/blackberryndksettingspage.h (+4/-2)
src/qnx/blackberryndksettingswidget.cpp (+342/-213)
src/qnx/blackberryndksettingswidget.h (+27/-18)
src/qnx/blackberryndksettingswidget.ui (+188/-346)
src/qnx/blackberrypotentialkit.cpp (+119/-0)
src/qnx/blackberrypotentialkit.h (+62/-0)
src/qnx/blackberryqtversionfactory.cpp (+2/-1)
src/qnx/blackberryrunconfiguration.h (+1/-3)
src/qnx/blackberryrunconfigurationwidget.h (+1/-3)
src/qnx/blackberryruncontrol.cpp (+1/-1)
src/qnx/blackberryruncontrol.h (+1/-3)
src/qnx/blackberryruncontrolfactory.cpp (+53/-1)
src/qnx/blackberryruncontrolfactory.h (+1/-3)
src/qnx/blackberryruntimeconfiguration.cpp (+95/-0)
src/qnx/blackberryruntimeconfiguration.h (+62/-0)
src/qnx/blackberrysetuppage.cpp (+67/-0)
src/qnx/blackberrysetuppage.h (+59/-0)
src/qnx/blackberrysetupwidget.cpp (+333/-0)
src/qnx/blackberrysetupwidget.h (+143/-0)
src/qnx/blackberrysetupwizard.cpp (+0/-503)
src/qnx/blackberrysetupwizard.h (+0/-146)
src/qnx/blackberrysetupwizardcertificatepage.ui (+0/-108)
src/qnx/blackberrysetupwizarddevicepage.ui (+0/-134)
src/qnx/blackberrysetupwizardfinishpage.ui (+0/-64)
src/qnx/blackberrysetupwizardkeyspage.ui (+0/-310)
src/qnx/blackberrysetupwizardpages.cpp (+3/-2)
src/qnx/blackberrysetupwizardpages.h (+0/-167)
src/qnx/blackberrysigningpasswordsdialog.h (+1/-3)
src/qnx/blackberrysigningutils.cpp (+148/-38)
src/qnx/blackberrysigningutils.h (+25/-4)
src/qnx/blackberrysshkeysgenerator.h (+1/-3)
src/qnx/blackberryversionnumber.cpp (+125/-0)
src/qnx/blackberryversionnumber.h (+64/-0)
src/qnx/cascadesimport/cascadesimport.pri (+2/-0)
src/qnx/cascadesimport/cascadesimportwizard.cpp (+2/-7)
src/qnx/cascadesimport/cascadesimportwizard.h (+4/-7)
src/qnx/cascadesimport/fileconverter.h (+1/-3)
src/qnx/cascadesimport/srcprojectpathchooser.cpp (+77/-0)
src/qnx/cascadesimport/srcprojectpathchooser.h (+53/-0)
src/qnx/cascadesimport/srcprojectwizardpage.ui (+5/-5)
src/qnx/pathchooserdelegate.cpp (+6/-0)
src/qnx/pathchooserdelegate.h (+3/-0)
src/qnx/qnx.pro (+33/-22)
src/qnx/qnx.qbs (+39/-22)
src/qnx/qnx.qrc (+4/-0)
src/qnx/qnx_dependencies.pri (+6/-0)
src/qnx/qnxanalyzesupport.cpp (+27/-2)
src/qnx/qnxanalyzesupport.h (+6/-1)
src/qnx/qnxattachdebugdialog.cpp (+71/-0)
src/qnx/qnxattachdebugdialog.h (+59/-0)
src/qnx/qnxattachdebugsupport.cpp (+174/-0)
src/qnx/qnxattachdebugsupport.h (+89/-0)
src/qnx/qnxbaseqtconfigwidget.cpp (+1/-0)
src/qnx/qnxbaseqtconfigwidget.h (+1/-3)
src/qnx/qnxconstants.h (+23/-1)
src/qnx/qnxdevicetester.h (+1/-3)
src/qnx/qnxplugin.cpp (+405/-15)
src/qnx/qnxplugin.h (+24/-3)
src/qnx/qnxrunconfiguration.cpp (+10/-1)
src/qnx/qnxruncontrolfactory.cpp (+8/-7)
src/qnx/qnxtoolchain.cpp (+11/-6)
src/qnx/qnxutils.cpp (+5/-3)
src/qnx/qnxutils.h (+6/-1)
src/qnx/slog2inforunner.cpp (+2/-2)
src/qnx/slog2inforunner.h (+1/-3)
src/remotelinux/abstractremotelinuxdeployservice.cpp (+8/-2)
src/remotelinux/abstractremotelinuxdeployservice.h (+2/-0)
src/remotelinux/abstractremotelinuxdeploystep.h (+1/-3)
src/remotelinux/abstractuploadandinstallpackageservice.h (+1/-3)
src/remotelinux/genericdirectuploadservice.cpp (+3/-3)
src/remotelinux/genericdirectuploadservice.h (+1/-1)
src/remotelinux/genericdirectuploadstep.h (+1/-3)
src/remotelinux/genericlinuxdeviceconfigurationwidget.cpp (+1/-0)
src/remotelinux/genericlinuxdeviceconfigurationwidget.h (+1/-3)
src/remotelinux/genericlinuxdeviceconfigurationwidget.ui (+1/-1)
src/remotelinux/genericlinuxdeviceconfigurationwizard.h (+1/-3)
src/remotelinux/genericlinuxdeviceconfigurationwizardpages.cpp (+1/-0)
src/remotelinux/linuxdeviceprocess.cpp (+1/-1)
src/remotelinux/linuxdevicetester.h (+1/-3)
src/remotelinux/packageuploader.cpp (+3/-3)
src/remotelinux/packageuploader.h (+1/-1)
src/remotelinux/publickeydeploymentdialog.h (+1/-3)
src/remotelinux/remotelinux.qbs (+5/-3)
src/remotelinux/remotelinux_dependencies.pri (+5/-0)
src/remotelinux/remotelinuxanalyzesupport.cpp (+1/-1)
src/remotelinux/remotelinuxcustomcommanddeployservice.h (+1/-3)
src/remotelinux/remotelinuxdebugsupport.cpp (+0/-4)
src/remotelinux/remotelinuxdeployconfigurationwidget.h (+1/-3)
src/remotelinux/remotelinuxenvironmentreader.cpp (+1/-1)
src/remotelinux/remotelinuxpackageinstaller.h (+1/-3)
src/remotelinux/remotelinuxrunconfiguration.cpp (+1/-14)
src/remotelinux/remotelinuxrunconfiguration.h (+0/-2)
src/remotelinux/remotelinuxrunconfigurationwidget.h (+1/-3)
src/remotelinux/sshkeydeployer.h (+2/-6)
src/remotelinux/uploadandinstalltarpackagestep.h (+1/-3)
src/valgrind/callgrindtextmark.h (+1/-3)
src/valgrind/callgrindtool.cpp (+4/-4)
src/valgrind/callgrindvisualisation.h (+1/-3)
src/valgrind/memcheckerrorview.cpp (+2/-0)
src/valgrind/memchecktool.cpp (+6/-0)
src/valgrind/suppressiondialog.cpp (+1/-0)
src/valgrind/valgrind.qbs (+5/-3)
src/valgrind/valgrind_dependencies.pri (+2/-0)
src/valgrind/valgrindconfigwidget.cpp (+1/-0)
src/valgrind/valgrindconfigwidget.h (+1/-3)
src/valgrind/valgrindconfigwidget.ui (+7/-10)
src/valgrind/valgrindplugin.cpp (+16/-4)
src/valgrind/valgrindprocess.cpp (+1/-6)
src/valgrind/xmlprotocol/errorlistmodel.cpp (+1/-1)
To merge this branch: bzr merge lp:~zeller-benjamin/qtcreator-plugin-remotelinux/qt53migrate
Reviewer Review Type Date Requested Status
Zoltan Balogh Pending
Review via email: mp+223197@code.launchpad.net

Commit message

Migrating to Qt5.3 and QtC 3.1

Description of the change

Migrating to Qt5.3 and QtC 3.1

To post a comment you must log in.
11. By Benjamin Zeller

Update package versions

12. By Benjamin Zeller

Merge

13. By Benjamin Zeller

Version bump

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'debian/changelog'
--- debian/changelog 2014-06-09 08:00:41 +0000
+++ debian/changelog 2014-06-16 09:46:37 +0000
@@ -1,3 +1,9 @@
1qtcreator-plugin-remotelinux (3.1.1-0ubuntu1) UNRELEASED; urgency=medium
2
3 * Migrating to Qt5.3 and QtC 3.1
4
5 -- Benjamin Zeller <benjamin.zeller@canonical.com> Mon, 16 Jun 2014 11:45:02 +0200
6
1qtcreator-plugin-remotelinux (3.0.1+14.10.20140609-0ubuntu1) utopic; urgency=low7qtcreator-plugin-remotelinux (3.0.1+14.10.20140609-0ubuntu1) utopic; urgency=low
28
3 [ Benjamin Zeller ]9 [ Benjamin Zeller ]
410
=== modified file 'debian/control'
--- debian/control 2014-04-09 11:27:44 +0000
+++ debian/control 2014-06-16 09:46:37 +0000
@@ -4,12 +4,12 @@
4Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>4Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
5Build-Depends: debhelper (>= 9),5Build-Depends: debhelper (>= 9),
6 libqt5webkit5-dev,6 libqt5webkit5-dev,
7 libqt5widgets5 (>= 5.0.2~),7 libqt5widgets5 (>= 5.3.0~),
8 libsqlite3-dev,8 libsqlite3-dev,
9 qt5-qmake (>= 5.2.1~),9 qt5-qmake (>= 5.3.0~),
10 qtcreator-dev (>= 3.0.1-0ubuntu3),10 qtcreator-dev (>= 3.1.0),
11 qttools5-dev-tools (>= 5.2.1~),11 qttools5-dev-tools (>= 5.3.0~),
12 qtbase5-private-dev (>= 5.2.1~),12 qtbase5-private-dev (>= 5.3.0~),
13 qtxmlpatterns5-dev-tools,13 qtxmlpatterns5-dev-tools,
14Standards-Version: 3.9.514Standards-Version: 3.9.5
15Homepage: https://launchpad.net/qtcreator-plugin-remotelinux15Homepage: https://launchpad.net/qtcreator-plugin-remotelinux
1616
=== modified file 'share/qtcreator/templates/wizards/bb-bardescriptor/bar-descriptor.xml'
--- share/qtcreator/templates/wizards/bb-bardescriptor/bar-descriptor.xml 2014-03-20 10:59:28 +0000
+++ share/qtcreator/templates/wizards/bb-bardescriptor/bar-descriptor.xml 2014-06-16 09:46:37 +0000
@@ -13,11 +13,9 @@
13 </initialWindow>13 </initialWindow>
14 <publisher>PUBLISHER</publisher>14 <publisher>PUBLISHER</publisher>
15 <copyright>COPYRIGHT</copyright>15 <copyright>COPYRIGHT</copyright>
16 <env var="QML_IMPORT_PATH" value="app/native/imports:/usr/lib/qt4/imports"/>
17 <env var="QT_PLUGIN_PATH" value="app/native/plugins:/usr/lib/qt4/plugins"/>
18 <env var="LD_LIBRARY_PATH" value="app/native/lib:/usr/lib/qt4/lib/"/>
19 <arg>-style</arg>16 <arg>-style</arg>
20 <arg>qnxlight</arg>17 <!-- available styles are bb10dark and bb10bright -->
18 <arg>bb10dark</arg>
2119
22 <action system="true">run_native</action>20 <action system="true">run_native</action>
2321
2422
=== modified file 'share/qtcreator/templates/wizards/bb-cascades-app/bar-descriptor.xml'
--- share/qtcreator/templates/wizards/bb-cascades-app/bar-descriptor.xml 2014-03-20 10:59:28 +0000
+++ share/qtcreator/templates/wizards/bb-cascades-app/bar-descriptor.xml 2014-06-16 09:46:37 +0000
@@ -17,8 +17,6 @@
17 <image>icon.png</image>17 <image>icon.png</image>
18 </icon>18 </icon>
1919
20 <env value="app/native/lib:/usr/lib/qt4/lib/" var="LD_LIBRARY_PATH"/>
21
22 <action system="true">run_native</action>20 <action system="true">run_native</action>
2321
24 <!-- Application assets -->22 <!-- Application assets -->
2523
=== modified file 'share/qtcreator/templates/wizards/bb-cascades-app/wizard.xml'
--- share/qtcreator/templates/wizards/bb-cascades-app/wizard.xml 2014-03-20 10:59:28 +0000
+++ share/qtcreator/templates/wizards/bb-cascades-app/wizard.xml 2014-06-16 09:46:37 +0000
@@ -31,7 +31,7 @@
31**************************************************************************/31**************************************************************************/
32-->32-->
33<wizard version="1" kind="project"33<wizard version="1" kind="project"
34 class="qt4project" firstpage="10"34 class="qmakeproject" firstpage="10"
35 id="Q.QnxBlackBerryCascadesApp" category="F.QtApplications"35 id="Q.QnxBlackBerryCascadesApp" category="F.QtApplications"
36 featuresRequired="QtSupport.Wizards.FeatureBlackBerry">36 featuresRequired="QtSupport.Wizards.FeatureBlackBerry">
37 <icon>icon.png</icon>37 <icon>icon.png</icon>
3838
=== modified file 'share/qtcreator/templates/wizards/bb-qt5-bardescriptor/bar-descriptor.xml'
--- share/qtcreator/templates/wizards/bb-qt5-bardescriptor/bar-descriptor.xml 2014-03-20 10:59:28 +0000
+++ share/qtcreator/templates/wizards/bb-qt5-bardescriptor/bar-descriptor.xml 2014-06-16 09:46:37 +0000
@@ -14,29 +14,7 @@
14 <aspectRatio>landscape</aspectRatio>14 <aspectRatio>landscape</aspectRatio>
15 </initialWindow>15 </initialWindow>
1616
17 <env var="QML2_IMPORT_PATH" value="app/native/imports"/>
18 <env var="QT_PLUGIN_PATH" value="app/native/plugins"/>
19 <env var="LD_LIBRARY_PATH" value="app/native/lib"/>
20
21 <arg>-platform</arg>
22 <arg>qnx</arg>
23
24 <action system="true">run_native</action>17 <action system="true">run_native</action>
2518
26 <asset entry="true" path="PROJECTPATH" type="Qnx/Elf">PROJECTNAME</asset>19 <asset entry="true" path="PROJECTPATH" type="Qnx/Elf">PROJECTNAME</asset>
27
28 <!--
29 %QT_INSTALL_LIBS%, %QT_INSTALL_PLUGINS, %QT_INSTALL_QML% and %SRC_DIR%
30 tags are replaced on-the-fly when deploying the app. in Qt Creator.
31 -->
32 <asset path="%QT_INSTALL_LIBS%">lib</asset>
33 <asset path="%QT_INSTALL_PLUGINS%">plugins</asset>
34 <asset path="%QT_INSTALL_QML%">imports</asset>
35
36 <!--
37 By default this bar-descriptor.xml embeds Qt5 runtime
38 into the application itself. See the following document
39 for various deployments of Qt runtime to a device:
40 http://qt-project.org/wiki/Qt-on-BlackBerry-devices
41 -->
42</qnx>20</qnx>
4321
=== modified file 'src/qnx/bardescriptordocument.cpp'
--- src/qnx/bardescriptordocument.cpp 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptordocument.cpp 2014-06-16 09:46:37 +0000
@@ -32,47 +32,22 @@
32#include "bardescriptordocument.h"32#include "bardescriptordocument.h"
3333
34#include "qnxconstants.h"34#include "qnxconstants.h"
35#include "bardescriptoreditor.h"
36#include "bardescriptoreditorwidget.h"
37#include "bardescriptordocumentnodehandlers.h"
3835
39#include <coreplugin/editormanager/ieditor.h>
40#include <coreplugin/editormanager/editormanager.h>36#include <coreplugin/editormanager/editormanager.h>
41#include <utils/qtcassert.h>37#include <utils/qtcassert.h>
4238
43#include <QFile>39#include <QDir>
44#include <QFileInfo>40#include <QFileInfo>
45#include <QDir>41#include <QMetaEnum>
46#include <QTextCodec>42#include <QTextCodec>
43#include <QSet>
4744
48using namespace Qnx;45using namespace Qnx;
49using namespace Qnx::Internal;46using namespace Qnx::Internal;
5047
51BarDescriptorDocument::BarDescriptorDocument(BarDescriptorEditorWidget *editorWidget)48BarDescriptorDocument::BarDescriptorDocument(QObject *parent)
52 : Core::TextDocument(editorWidget)49 : Core::TextDocument(parent)
53 , m_nodeHandlers(QList<BarDescriptorDocumentAbstractNodeHandler *>())
54 , m_editorWidget(editorWidget)
55{50{
56 // General
57 registerNodeHandler(new BarDescriptorDocumentIdNodeHandler(m_editorWidget));
58 registerNodeHandler(new BarDescriptorDocumentVersionNumberNodeHandler(m_editorWidget));
59 registerNodeHandler(new BarDescriptorDocumentBuildIdNodeHandler(m_editorWidget));
60 registerNodeHandler(new BarDescriptorDocumentAuthorNodeHandler(m_editorWidget));
61 registerNodeHandler(new BarDescriptorDocumentAuthorIdNodeHandler(m_editorWidget));
62
63 // Application
64 registerNodeHandler(new BarDescriptorDocumentApplicationNameNodeHandler(m_editorWidget));
65 registerNodeHandler(new BarDescriptorDocumentApplicationDescriptionNodeHandler(m_editorWidget));
66 registerNodeHandler(new BarDescriptorDocumentApplicationIconNodeHandler(m_editorWidget));
67 registerNodeHandler(new BarDescriptorDocumentSplashScreenNodeHandler(m_editorWidget));
68 registerNodeHandler(new BarDescriptorDocumentInitialWindowNodeHandler(m_editorWidget));
69 registerNodeHandler(new BarDescriptorDocumentArgNodeHandler(m_editorWidget));
70 registerNodeHandler(new BarDescriptorDocumentActionNodeHandler(m_editorWidget));
71 registerNodeHandler(new BarDescriptorDocumentEnvNodeHandler(m_editorWidget));
72
73 // Assets
74 registerNodeHandler(new BarDescriptorDocumentAssetNodeHandler(m_editorWidget));
75
76 // blackberry-nativepackager requires the XML file to be in UTF-8 encoding,51 // blackberry-nativepackager requires the XML file to be in UTF-8 encoding,
77 // force if possible52 // force if possible
78 if (QTextCodec *defaultUTF8 = QTextCodec::codecForName("UTF-8"))53 if (QTextCodec *defaultUTF8 = QTextCodec::codecForName("UTF-8"))
@@ -83,10 +58,6 @@
8358
84BarDescriptorDocument::~BarDescriptorDocument()59BarDescriptorDocument::~BarDescriptorDocument()
85{60{
86 while (!m_nodeHandlers.isEmpty()) {
87 BarDescriptorDocumentAbstractNodeHandler *nodeHandler = m_nodeHandlers.takeFirst();
88 delete nodeHandler;
89 }
90}61}
9162
92bool BarDescriptorDocument::open(QString *errorString, const QString &fileName) {63bool BarDescriptorDocument::open(QString *errorString, const QString &fileName) {
@@ -95,9 +66,8 @@
95 return false;66 return false;
9667
97 setFilePath(fileName);68 setFilePath(fileName);
98 m_editorWidget->setFilePath(fileName);
9969
100 bool result = loadContent(contents);70 const bool result = loadContent(contents, false);
10171
102 if (!result)72 if (!result)
103 *errorString = tr("%1 does not appear to be a valid application descriptor file").arg(QDir::toNativeSeparators(fileName));73 *errorString = tr("%1 does not appear to be a valid application descriptor file").arg(QDir::toNativeSeparators(fileName));
@@ -110,12 +80,12 @@
110 QTC_ASSERT(!autoSave, return false);80 QTC_ASSERT(!autoSave, return false);
111 QTC_ASSERT(fn.isEmpty(), return false);81 QTC_ASSERT(fn.isEmpty(), return false);
11282
113 bool result = write(filePath(), xmlSource(), errorString);83 const bool result = write(filePath(), xmlSource(), errorString);
114 if (!result)84 if (!result)
115 return false;85 return false;
11686
117 m_editorWidget->setDirty(false);87 m_dirty = false;
118 emit changed();88 emit Core::IDocument::changed();
119 return true;89 return true;
120}90}
12191
@@ -143,7 +113,7 @@
143113
144bool BarDescriptorDocument::isModified() const114bool BarDescriptorDocument::isModified() const
145{115{
146 return m_editorWidget->isDirty();116 return m_dirty;
147}117}
148118
149bool BarDescriptorDocument::isSaveAsAllowed() const119bool BarDescriptorDocument::isSaveAsAllowed() const
@@ -172,91 +142,553 @@
172142
173QString BarDescriptorDocument::xmlSource() const143QString BarDescriptorDocument::xmlSource() const
174{144{
175 BarDescriptorEditor *editor = qobject_cast<BarDescriptorEditor*>(m_editorWidget->editor());145 const int indent = 4;
176 QTC_ASSERT(editor, return QString());146 return m_barDocument.toString(indent);
177147}
178 if (editor->activePage() == BarDescriptorEditor::Source) {148
179 return m_editorWidget->xmlSource();149bool BarDescriptorDocument::loadContent(const QString &xmlCode, bool setDirty, QString *errorMessage, int *errorLine)
180 } else {150{
181 QDomDocument doc;151 if (xmlCode == xmlSource())
182 doc.appendChild(doc.createProcessingInstruction(QLatin1String("xml"), QLatin1String("version='1.0' encoding='") + QLatin1String(codec()->name()) + QLatin1String("' standalone='no'")));152 return true;
183153
184 // QNX154 bool result = m_barDocument.setContent(xmlCode, errorMessage, errorLine);
185 QDomElement rootElem = doc.createElement(QLatin1String("qnx"));155
186 rootElem.setAttribute(QLatin1String("xmlns"), QLatin1String("http://www.qnx.com/schemas/application/1.0"));156 m_dirty = setDirty;
187157
188 QMap<int, BarDescriptorDocumentAbstractNodeHandler*> nodeHandlerMap;158 emitAllChanged();
189 foreach (BarDescriptorDocumentAbstractNodeHandler *nodeHandler, m_nodeHandlers)159 emit Core::IDocument::changed();
190 nodeHandlerMap.insertMulti(nodeHandler->order(), nodeHandler);160 return result;
191161}
192 QList<BarDescriptorDocumentAbstractNodeHandler*> nodeHandlers = nodeHandlerMap.values();162
193 foreach (BarDescriptorDocumentAbstractNodeHandler *nodeHandler, nodeHandlers)163QVariant BarDescriptorDocument::value(BarDescriptorDocument::Tag tag) const
194 rootElem.appendChild(nodeHandler->toNode(doc));164{
195165 const QString tagName = QString::fromLatin1(metaObject()->enumerator(metaObject()->enumeratorOffset()).valueToKey(tag));
196 doc.appendChild(rootElem);166
197167 switch (tag) {
198 return doc.toString(4);168 case id:
199 }169 case versionNumber:
200}170 case buildId:
201171 case name:
202bool BarDescriptorDocument::loadContent(const QString &xmlSource, QString *errorMessage, int *errorLine)172 case description:
203{173 case author:
204 QDomDocument doc;174 case publisher:
205 bool result = doc.setContent(xmlSource, errorMessage, errorLine);175 case authorId:
206 if (!result)176 return stringValue(tagName);
207 return false;177 case icon:
208178 return childStringListValue(tagName, QLatin1String("image")).value(0);
209 QDomElement docElem = doc.documentElement();179 case splashScreens:
210 if (docElem.tagName() != QLatin1String("qnx"))180 return childStringListValue(tagName, QLatin1String("image"));
211 return false;181 case asset: {
212182 QVariant var;
213 m_editorWidget->clear();183 var.setValue(assets());
214184 return var;
215 removeUnknownNodeHandlers();185 }
216 foreach (BarDescriptorDocumentAbstractNodeHandler *nodeHandler, m_nodeHandlers)186 case aspectRatio:
217 nodeHandler->clear();187 case autoOrients:
218188 case systemChrome:
219 QDomNode node = docElem.firstChildElement();189 return childStringListValue(QLatin1String("initialWindow"), tagName).value(0);
220 while (!node.isNull()) {190 case transparent:
221 BarDescriptorDocumentAbstractNodeHandler *nodeHandler = nodeHandlerForDomNode(node);191 return childStringListValue(QLatin1String("initialWindow"), tagName).value(0) == QLatin1String("true");
222 if (!nodeHandler) {192 case arg:
223 nodeHandler = new BarDescriptorDocumentUnknownNodeHandler(m_editorWidget);193 case action:
224 registerNodeHandler(nodeHandler);194 return stringListValue(tagName);
225 }195 case env:
226196 QVariant var;
227 if (!nodeHandler->handle(node))197 var.setValue(environment());
228 return false;198 return var;
229199 }
230 node = node.nextSibling();200
231 }201 return QVariant();
232202}
233 m_editorWidget->setXmlSource(xmlSource);203
234204void BarDescriptorDocument::setValue(BarDescriptorDocument::Tag tag, const QVariant &value)
235 return true;205{
236}206 const QMetaEnum tagEnum = metaObject()->enumerator(metaObject()->enumeratorOffset());
237207 const QString tagName = QString::fromLatin1(tagEnum.valueToKey(tag));
238void BarDescriptorDocument::registerNodeHandler(BarDescriptorDocumentAbstractNodeHandler *nodeHandler)208
239{209 switch (tag) {
240 m_nodeHandlers << nodeHandler;210 case id:
241}211 case versionNumber:
242212 case buildId:
243BarDescriptorDocumentAbstractNodeHandler *BarDescriptorDocument::nodeHandlerForDomNode(const QDomNode &node)213 case name:
244{214 case description:
245 foreach (BarDescriptorDocumentAbstractNodeHandler *handler, m_nodeHandlers) {215 case authorId:
246 if (handler->canHandle(node) && !dynamic_cast<BarDescriptorDocumentUnknownNodeHandler*>(handler))216 setStringValue(tagName, value.toString());
247 return handler;217 break;
248 }218 case icon:
249219 case splashScreens:
250 return 0;220 setChildStringListValue(tagName, QLatin1String("image"), value.toStringList());
251}221 break;
252222 case asset:
253void BarDescriptorDocument::removeUnknownNodeHandlers()223 setAssets(value.value<BarDescriptorAssetList>());
254{224 break;
255 for (int i = m_nodeHandlers.size() - 1; i >= 0; --i) {225 case aspectRatio:
256 BarDescriptorDocumentUnknownNodeHandler *nodeHandler = dynamic_cast<BarDescriptorDocumentUnknownNodeHandler*>(m_nodeHandlers[i]);226 case autoOrients:
257 if (nodeHandler) {227 case systemChrome:
258 m_nodeHandlers.removeAt(i);228 setChildStringListValue(QLatin1String("initialWindow"), tagName, value.toStringList());
259 delete nodeHandler;229 break;
260 }230 case transparent:
261 }231 setChildStringListValue(QLatin1String("initialWindow"), tagName, QStringList() << (value.toBool() ? QLatin1String("true") : QLatin1String("false")));
232 break;
233 case arg:
234 case action:
235 setStringListValue(tagName, value.toStringList());
236 break;
237 case env:
238 setEnvironment(value.value<QList<Utils::EnvironmentItem> >());
239 break;
240 case author:
241 case publisher:
242 // Unset <publisher> when setting <author> as only one should be used
243 setStringValue(QString::fromLatin1(tagEnum.valueToKey(author)), value.toString());
244 setStringValue(QString::fromLatin1(tagEnum.valueToKey(publisher)), QLatin1String(""));
245 break;
246 }
247
248 m_dirty = true;
249 emit changed(tag, value);
250 emit Core::IDocument::changed();
251}
252
253QString BarDescriptorDocument::stringValue(const QString &tagName) const
254{
255 QDomNodeList nodes = m_barDocument.elementsByTagName(tagName);
256 if (nodes.isEmpty() || nodes.size() > 1)
257 return QString();
258
259 QDomNode node = nodes.item(0);
260 QDomText textNode = node.firstChild().toText();
261 if (textNode.isNull())
262 return QString();
263
264 return textNode.data();
265}
266
267void BarDescriptorDocument::setStringValue(const QString &tagName, const QString &value)
268{
269 QDomNodeList nodes = m_barDocument.elementsByTagName(tagName);
270
271 if (nodes.size() > 1)
272 return;
273
274 QDomNode existingNode = nodes.item(0);
275 if (existingNode.isNull() && value.isEmpty())
276 return;
277
278 if (!existingNode.isNull() && value.isEmpty()) {
279 m_barDocument.documentElement().removeChild(existingNode);
280 } else if (existingNode.isNull()) {
281 QDomElement newNode = m_barDocument.createElement(tagName);
282 newNode.appendChild(m_barDocument.createTextNode(value));
283 m_barDocument.documentElement().appendChild(newNode);
284 } else {
285 QDomText textNode = existingNode.firstChild().toText();
286 if (textNode.isNull())
287 return;
288 textNode.setData(value);
289 }
290}
291
292QStringList BarDescriptorDocument::childStringListValue(const QString &tagName, const QString &childTagName) const
293{
294 QDomNodeList nodes = m_barDocument.elementsByTagName(tagName);
295 if (nodes.isEmpty() || nodes.size() > 1)
296 return QStringList();
297
298 QDomNode parentNode = nodes.item(0);
299 QDomElement childElm = parentNode.firstChildElement(childTagName);
300 if (childElm.isNull())
301 return QStringList();
302
303 QStringList result;
304 while (!childElm.isNull()) {
305 QDomText textNode = childElm.firstChild().toText();
306 if (textNode.isNull())
307 return QStringList();
308
309 result.append(textNode.data());
310
311 childElm = childElm.nextSiblingElement(childTagName);
312 }
313
314 return result;
315}
316
317void BarDescriptorDocument::setChildStringListValue(const QString &tagName, const QString &childTagName, const QStringList &stringList)
318{
319 QDomNodeList nodes = m_barDocument.elementsByTagName(tagName);
320
321 if (nodes.size() > 1)
322 return;
323
324 QDomNode existingNode = nodes.item(0);
325
326 if (existingNode.isNull()) {
327 QDomElement newParentNode = m_barDocument.createElement(tagName);
328
329 foreach (const QString &value, stringList) {
330 QDomElement newChildNode = m_barDocument.createElement(childTagName);
331 QDomText newTextNode = m_barDocument.createTextNode(value);
332 newChildNode.appendChild(newTextNode);
333 newParentNode.appendChild(newChildNode);
334 }
335 m_barDocument.documentElement().appendChild(newParentNode);
336 } else {
337 QStringList values = stringList;
338 QDomElement childElm = existingNode.firstChildElement(childTagName);
339 if (!childElm.isNull()) {
340 // Loop through existing elements, remove the existing nodes
341 // that no longer are in "values", and remove from "values"
342 // the existing nodes that don't need re-creation
343 while (!childElm.isNull()) {
344 QDomText textNode = childElm.firstChild().toText();
345 if (textNode.isNull())
346 continue;
347
348 QDomElement toRemove;
349 if (!values.contains(textNode.data()))
350 toRemove = childElm;
351 else
352 values.removeAll(textNode.data());
353
354 childElm = childElm.nextSiblingElement(childTagName);
355
356 if (!toRemove.isNull())
357 existingNode.removeChild(toRemove);
358 }
359 }
360
361 // Add the new elements
362 int newElementCount = 0;
363 foreach (const QString &value, values) {
364 if (value.isEmpty())
365 continue;
366 QDomElement newChildNode = m_barDocument.createElement(childTagName);
367 newChildNode.appendChild(m_barDocument.createTextNode(value));
368 existingNode.appendChild(newChildNode);
369 ++newElementCount;
370 }
371
372 if (newElementCount == 0)
373 m_barDocument.documentElement().removeChild(existingNode);
374 }
375}
376
377QStringList BarDescriptorDocument::stringListValue(const QString &tagName) const
378{
379 QStringList result;
380
381 QDomElement childElm = m_barDocument.documentElement().firstChildElement(tagName);
382 while (!childElm.isNull()) {
383 QDomText textNode = childElm.firstChild().toText();
384 if (textNode.isNull())
385 continue;
386
387 result.append(textNode.data());
388
389 childElm = childElm.nextSiblingElement(tagName);
390 }
391
392 return result;
393}
394
395void BarDescriptorDocument::setStringListValue(const QString &tagName, const QStringList &stringList)
396{
397 QStringList values = stringList;
398 QDomElement childElm = m_barDocument.documentElement().firstChildElement(tagName);
399 if (!childElm.isNull()) {
400 // Loop through existing elements, remove the existing nodes
401 // that no longer are in "values", and remove from "values"
402 // the existing nodes that don't need re-creation
403 while (!childElm.isNull()) {
404 QDomText textNode = childElm.firstChild().toText();
405 if (textNode.isNull())
406 continue;
407
408 QDomElement toRemove;
409 if (!values.contains(textNode.data()))
410 toRemove = childElm;
411 else
412 values.removeAll(textNode.data());
413
414 childElm = childElm.nextSiblingElement(tagName);
415
416 if (!toRemove.isNull())
417 m_barDocument.documentElement().removeChild(toRemove);
418 }
419 }
420
421 // Add the new elements
422 foreach (const QString &value, values) {
423 if (value.isEmpty())
424 continue;
425 QDomElement newChildNode = m_barDocument.createElement(tagName);
426 newChildNode.appendChild(m_barDocument.createTextNode(value));
427 m_barDocument.documentElement().appendChild(newChildNode);
428 }
429}
430
431BarDescriptorAssetList BarDescriptorDocument::assets() const
432{
433 BarDescriptorAssetList result;
434 QDomNodeList nodes = m_barDocument.elementsByTagName(QLatin1String("asset"));
435 if (nodes.isEmpty())
436 return result;
437
438 for (int i = 0; i < nodes.size(); ++i) {
439 QDomElement assetElm = nodes.item(i).toElement();
440 if (assetElm.isNull())
441 continue;
442
443 QDomText textNode = assetElm.firstChild().toText();
444 if (textNode.isNull())
445 continue;
446
447 QString path = assetElm.attribute(QLatin1String("path"));
448 QString entry = assetElm.attribute(QLatin1String("entry"));
449 QString dest = textNode.data();
450
451 BarDescriptorAsset asset;
452 asset.source = path;
453 asset.destination = dest;
454 asset.entry = entry == QLatin1String("true");
455 result.append(asset);
456 }
457
458 return result;
459}
460
461void BarDescriptorDocument::setAssets(const BarDescriptorAssetList &assets)
462{
463 QDomNodeList nodes = m_barDocument.elementsByTagName(QLatin1String("asset"));
464
465 BarDescriptorAssetList newAssets = assets;
466 QList<QDomNode> toRemove;
467
468 for (int i = 0; i < nodes.size(); ++i) {
469 QDomElement assetElm = nodes.at(i).toElement();
470 if (assetElm.isNull())
471 continue;
472
473 QDomText textNode = assetElm.firstChild().toText();
474 if (textNode.isNull())
475 continue;
476
477 QString source = assetElm.attribute(QLatin1String("path"));
478 bool found = false;
479 foreach (const BarDescriptorAsset &asset, newAssets) {
480 if (asset.source == source) {
481 found = true;
482 if (asset.entry) {
483 assetElm.setAttribute(QLatin1String("type"), QLatin1String("Qnx/Elf"));
484 assetElm.setAttribute(QLatin1String("entry"), QLatin1String("true"));
485 } else {
486 assetElm.removeAttribute(QLatin1String("type"));
487 assetElm.removeAttribute(QLatin1String("entry"));
488 }
489 textNode.setData(asset.destination);
490
491 newAssets.removeAll(asset);
492 break;
493 }
494 }
495
496 if (!found)
497 toRemove.append(assetElm);
498 }
499
500 foreach (const QDomNode &node, toRemove)
501 m_barDocument.documentElement().removeChild(node);
502
503 foreach (const BarDescriptorAsset &asset, newAssets) {
504 QDomElement assetElm = m_barDocument.createElement(QLatin1String("asset"));
505 assetElm.setAttribute(QLatin1String("path"), asset.source);
506 if (asset.entry) {
507 assetElm.setAttribute(QLatin1String("type"), QLatin1String("Qnx/Elf"));
508 assetElm.setAttribute(QLatin1String("entry"), QLatin1String("true"));
509 }
510 assetElm.appendChild(m_barDocument.createTextNode(asset.destination));
511 m_barDocument.documentElement().appendChild(assetElm);
512 }
513}
514
515QList<Utils::EnvironmentItem> BarDescriptorDocument::environment() const
516{
517 QList<Utils::EnvironmentItem> result;
518
519 QDomElement envElm = m_barDocument.documentElement().firstChildElement(QLatin1String("env"));
520 while (!envElm.isNull()) {
521 QString var = envElm.attribute(QLatin1String("var"));
522 QString value = envElm.attribute(QLatin1String("value"));
523
524 Utils::EnvironmentItem item(var, value);
525 result.append(item);
526
527 envElm = envElm.nextSiblingElement(QLatin1String("env"));
528 }
529 return result;
530}
531
532void BarDescriptorDocument::setEnvironment(const QList<Utils::EnvironmentItem> &environment)
533{
534 QDomNodeList envNodes = m_barDocument.elementsByTagName(QLatin1String("env"));
535
536 QList<Utils::EnvironmentItem> newEnvironment = environment;
537 QList<QDomElement> toRemove;
538 for (int i = 0; i < envNodes.size(); ++i) {
539 QDomElement elm = envNodes.at(i).toElement();
540 if (elm.isNull())
541 continue;
542
543 QString var = elm.attribute(QLatin1String("var"));
544 bool found = false;
545 foreach (const Utils::EnvironmentItem item, newEnvironment) {
546 if (item.name == var) {
547 found = true;
548 elm.setAttribute(QLatin1String("value"), item.value);
549 newEnvironment.removeAll(item);
550 break;
551 }
552 }
553
554 if (!found)
555 toRemove.append(elm);
556 }
557
558 foreach (const QDomNode &node, toRemove)
559 m_barDocument.documentElement().removeChild(node);
560
561 foreach (const Utils::EnvironmentItem item, newEnvironment) {
562 QDomElement elm = m_barDocument.createElement(QLatin1String("env"));
563 elm.setAttribute(QLatin1String("var"), item.name);
564 elm.setAttribute(QLatin1String("value"), item.value);
565 m_barDocument.documentElement().appendChild(elm);
566 }
567}
568
569void BarDescriptorDocument::emitAllChanged()
570{
571 QMetaEnum tags = metaObject()->enumerator(metaObject()->enumeratorOffset());
572 for (int i = 0; i < tags.keyCount(); ++i) {
573 Tag tag = static_cast<Tag>(tags.value(i));
574 emit changed(tag, value(tag));
575 }
576}
577
578QString BarDescriptorDocument::bannerComment() const
579{
580 QDomNode nd = m_barDocument.firstChild();
581 QDomProcessingInstruction pi = nd.toProcessingInstruction();
582 if (!pi.isNull())
583 nd = pi.nextSibling();
584
585 return nd.toComment().data();
586}
587
588void BarDescriptorDocument::setBannerComment(const QString &commentText)
589{
590 QDomNode nd = m_barDocument.firstChild();
591 QDomProcessingInstruction pi = nd.toProcessingInstruction();
592 if (!pi.isNull())
593 nd = pi.nextSibling();
594
595 bool oldDirty = m_dirty;
596 QDomComment cnd = nd.toComment();
597 if (cnd.isNull()) {
598 if (!commentText.isEmpty()) {
599 cnd = m_barDocument.createComment(commentText);
600 m_barDocument.insertBefore(cnd, nd);
601 m_dirty = true;
602 }
603 } else {
604 if (commentText.isEmpty()) {
605 m_barDocument.removeChild(cnd);
606 m_dirty = true;
607 } else {
608 if (cnd.data() != commentText) {
609 cnd.setData(commentText);
610 m_dirty = true;
611 }
612 }
613 }
614 if (m_dirty != oldDirty)
615 emit Core::IDocument::changed();
616}
617
618int BarDescriptorDocument::tagForElement(const QDomElement &element)
619{
620 QMetaEnum tags = metaObject()->enumerator(metaObject()->enumeratorOffset());
621 QDomElement el = element;
622 while (!el.isNull()) {
623 const int n = tags.keyToValue(el.tagName().toLatin1().constData());
624 if (n > -1)
625 return n;
626 el = el.parentNode().toElement();
627 }
628 return -1;
629}
630
631bool BarDescriptorDocument::expandPlaceHolder_helper(const QDomElement &el,
632 const QString &placeholderKey,
633 const QString &placeholderText,
634 QSet<BarDescriptorDocument::Tag> &changedTags)
635{
636 // replace attributes
637 bool elementChanged = false;
638 QDomNamedNodeMap attrs = el.attributes();
639 for (int i = 0; i < attrs.count(); ++i) {
640 QDomAttr attr = attrs.item(i).toAttr();
641 if (!attr.isNull()) {
642 QString s = attr.value();
643 s.replace(placeholderKey, placeholderText);
644 if (s != attr.value()) {
645 attr.setValue(s);
646 elementChanged = true;
647 }
648 }
649 }
650
651 bool documentChanged = false;
652 // replace text
653 for (QDomNode nd = el.firstChild(); !nd.isNull(); nd = nd.nextSibling()) {
654 QDomText txtnd = nd.toText();
655 if (!txtnd.isNull()) {
656 QString s = txtnd.data();
657 s.replace(placeholderKey, placeholderText);
658 if (s != txtnd.data()) {
659 txtnd.setData(s);
660 elementChanged = true;
661 }
662 }
663 QDomElement child = nd.toElement();
664 if (!child.isNull()) {
665 bool hit = expandPlaceHolder_helper(child, placeholderKey, placeholderText, changedTags);
666 documentChanged = documentChanged || hit;
667 }
668 }
669 if (elementChanged) {
670 int n = tagForElement(el);
671 if (n >= 0)
672 changedTags << static_cast<Tag>(n);
673 }
674 documentChanged = documentChanged || elementChanged;
675 return documentChanged;
676}
677
678void BarDescriptorDocument::expandPlaceHolders(const QHash<QString, QString> &placeholdersKeyVals)
679{
680 QSet<Tag> changedTags;
681 QHashIterator<QString, QString> it(placeholdersKeyVals);
682 bool docChanged = false;
683 while (it.hasNext()) {
684 it.next();
685 bool expanded = expandPlaceHolder_helper(m_barDocument.documentElement(),
686 it.key(), it.value(), changedTags);
687 docChanged = docChanged || expanded;
688 }
689 m_dirty = m_dirty || docChanged;
690 foreach (Tag tag, changedTags)
691 emit changed(tag, value(tag));
692 if (docChanged)
693 emit Core::IDocument::changed();
262}694}
263695
=== modified file 'src/qnx/bardescriptordocument.h'
--- src/qnx/bardescriptordocument.h 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptordocument.h 2014-06-16 09:46:37 +0000
@@ -33,8 +33,10 @@
33#define QNX_INTERNAL_BARDESCRIPTORDOCUMENT_H33#define QNX_INTERNAL_BARDESCRIPTORDOCUMENT_H
3434
35#include <coreplugin/textdocument.h>35#include <coreplugin/textdocument.h>
36#include <utils/environment.h>
3637
37#include <QDomNode>38#include <QDomDocument>
39#include <QMetaType>
3840
39namespace Qnx {41namespace Qnx {
40namespace Internal {42namespace Internal {
@@ -44,16 +46,44 @@
44 QString source;46 QString source;
45 QString destination;47 QString destination;
46 bool entry;48 bool entry;
49
50 bool operator==(const BarDescriptorAsset &asset) const
51 {
52 return source == asset.source && destination == asset.destination;
53 }
47};54};
4855
49class BarDescriptorEditorWidget;56typedef QList<BarDescriptorAsset> BarDescriptorAssetList;
50class BarDescriptorDocumentAbstractNodeHandler;
5157
52class BarDescriptorDocument : public Core::TextDocument58class BarDescriptorDocument : public Core::TextDocument
53{59{
54 Q_OBJECT60 Q_OBJECT
61
62 Q_ENUMS(Tag)
63
55public:64public:
56 explicit BarDescriptorDocument(BarDescriptorEditorWidget *editorWidget);65 enum Tag {
66 id = 0,
67 versionNumber,
68 buildId,
69 name,
70 description,
71 icon,
72 splashScreens,
73 asset,
74 aspectRatio,
75 autoOrients,
76 systemChrome,
77 transparent,
78 arg,
79 action,
80 env,
81 author,
82 publisher,
83 authorId
84 };
85
86 explicit BarDescriptorDocument(QObject *parent = 0);
57 ~BarDescriptorDocument();87 ~BarDescriptorDocument();
5888
59 bool open(QString *errorString, const QString &fileName);89 bool open(QString *errorString, const QString &fileName);
@@ -71,19 +101,52 @@
71 bool reload(QString *errorString, ReloadFlag flag, ChangeType type);101 bool reload(QString *errorString, ReloadFlag flag, ChangeType type);
72102
73 QString xmlSource() const;103 QString xmlSource() const;
74 bool loadContent(const QString &xmlSource, QString *errorMessage = 0, int *errorLine = 0);104 bool loadContent(const QString &xmlCode, bool setDirty, QString *errorMessage = 0, int *errorLine = 0);
75105
106 QVariant value(Tag tag) const;
107
108 void expandPlaceHolders(const QHash<QString, QString> &placeholdersKeyVals);
109
110 QString bannerComment() const;
111 void setBannerComment(const QString &commentText);
112
113signals:
114 void changed(BarDescriptorDocument::Tag tag, const QVariant &value);
115
116public slots:
117 void setValue(BarDescriptorDocument::Tag tag, const QVariant &value);
76private:118private:
77 void registerNodeHandler(BarDescriptorDocumentAbstractNodeHandler *nodeHandler);119 QString stringValue(const QString &tagName) const;
78 BarDescriptorDocumentAbstractNodeHandler *nodeHandlerForDomNode(const QDomNode &node);120 void setStringValue(const QString &tagName, const QString &value);
79 void removeUnknownNodeHandlers();121
80122 QStringList childStringListValue(const QString &tagName, const QString &childTagName) const;
81 QList<BarDescriptorDocumentAbstractNodeHandler *> m_nodeHandlers;123 void setChildStringListValue(const QString &tagName, const QString &childTagName, const QStringList &stringList);
82124
83 BarDescriptorEditorWidget *m_editorWidget;125 QStringList stringListValue(const QString &tagName) const;
126 void setStringListValue(const QString &tagName, const QStringList &stringList);
127
128 BarDescriptorAssetList assets() const;
129 void setAssets(const BarDescriptorAssetList &assets);
130
131 QList<Utils::EnvironmentItem> environment() const;
132 void setEnvironment(const QList<Utils::EnvironmentItem> &environment);
133
134 int tagForElement(const QDomElement &element);
135 bool expandPlaceHolder_helper(const QDomElement &el, const QString &placeholderKey,
136 const QString &placeholderText,
137 QSet<BarDescriptorDocument::Tag> &changedTags);
138
139 void emitAllChanged();
140
141 bool m_dirty;
142 QDomDocument m_barDocument;
84};143};
85144
86} // namespace Internal145} // namespace Internal
87} // namespace Qnx146} // namespace Qnx
88147
148Q_DECLARE_METATYPE(Qnx::Internal::BarDescriptorAssetList)
149Q_DECLARE_METATYPE(QList<Utils::EnvironmentItem>)
150Q_DECLARE_METATYPE(Qnx::Internal::BarDescriptorDocument::Tag)
151
89#endif // QNX_INTERNAL_BARDESCRIPTORDOCUMENT_H152#endif // QNX_INTERNAL_BARDESCRIPTORDOCUMENT_H
90153
=== removed file 'src/qnx/bardescriptordocumentnodehandlers.cpp'
--- src/qnx/bardescriptordocumentnodehandlers.cpp 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptordocumentnodehandlers.cpp 1970-01-01 00:00:00 +0000
@@ -1,708 +0,0 @@
1/**************************************************************************
2**
3** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
4**
5** Contact: BlackBerry (qt@blackberry.com)
6** Contact: KDAB (info@kdab.com)
7**
8** This file is part of Qt Creator.
9**
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.
17**
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.
25**
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.
29**
30****************************************************************************/
31
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"
41
42#include <utils/environment.h>
43#include <utils/qtcassert.h>
44
45#include <QDomNode>
46
47using namespace Qnx;
48using namespace Qnx::Internal;
49
50BarDescriptorDocumentAbstractNodeHandler::BarDescriptorDocumentAbstractNodeHandler(BarDescriptorEditorWidget *editorWidget)
51 : m_editorWidget(editorWidget)
52 , m_order(0xFFFF)
53{
54}
55
56BarDescriptorDocumentAbstractNodeHandler::~BarDescriptorDocumentAbstractNodeHandler()
57{
58}
59
60bool BarDescriptorDocumentAbstractNodeHandler::handle(const QDomNode &node)
61{
62 if (m_order == 0xFFFF)
63 m_order = node.lineNumber();
64
65 return fromNode(node);
66}
67
68void BarDescriptorDocumentAbstractNodeHandler::clear()
69{
70 m_order = 0xFFFF;
71}
72
73int BarDescriptorDocumentAbstractNodeHandler::order() const
74{
75 return m_order;
76}
77
78BarDescriptorEditorPackageInformationWidget *BarDescriptorDocumentAbstractNodeHandler::packageInformationWidget() const
79{
80 return m_editorWidget->packageInformationWidget();
81}
82
83BarDescriptorEditorAuthorInformationWidget *BarDescriptorDocumentAbstractNodeHandler::authorInformationWidget() const
84{
85 return m_editorWidget->authorInformationWidget();
86}
87
88BarDescriptorEditorEntryPointWidget *BarDescriptorDocumentAbstractNodeHandler::entryPointWidget() const
89{
90 return m_editorWidget->entryPointWidget();
91}
92
93BarDescriptorEditorGeneralWidget *BarDescriptorDocumentAbstractNodeHandler::generalWidget() const
94{
95 return m_editorWidget->generalWidget();
96}
97
98BarDescriptorEditorPermissionsWidget *BarDescriptorDocumentAbstractNodeHandler::permissionsWidget() const
99{
100 return m_editorWidget->permissionsWidget();
101}
102
103BarDescriptorEditorEnvironmentWidget *BarDescriptorDocumentAbstractNodeHandler::environmentWidget() const
104{
105 return m_editorWidget->environmentWidget();
106}
107
108BarDescriptorEditorAssetsWidget *BarDescriptorDocumentAbstractNodeHandler::assetsWidget() const
109{
110 return m_editorWidget->assetsWidget();
111}
112
113bool BarDescriptorDocumentAbstractNodeHandler::canHandleSimpleTextElement(const QDomNode &node, const QString &tagName) const
114{
115 QDomElement element = node.toElement();
116 if (element.isNull())
117 return false;
118
119 if (element.tagName().toLower() != tagName.toLower())
120 return false;
121
122 QDomText textNode = element.firstChild().toText();
123 if (textNode.isNull())
124 return false;
125
126 return true;
127}
128
129QString BarDescriptorDocumentAbstractNodeHandler::loadSimpleTextElement(const QDomNode &node)
130{
131 QDomElement element = node.toElement();
132 QDomText textNode = element.firstChild().toText();
133 return textNode.data();
134}
135
136QDomElement BarDescriptorDocumentAbstractNodeHandler::createSimpleTextElement(QDomDocument &doc, const QString &tagName, const QString &textValue) const
137{
138 if (textValue.isEmpty())
139 return QDomElement();
140
141 QDomElement elem = doc.createElement(tagName);
142 elem.appendChild(doc.createTextNode(textValue));
143 return elem;
144}
145
146// ----------------------------------------------------------------------------
147
148BarDescriptorDocumentIdNodeHandler::BarDescriptorDocumentIdNodeHandler(BarDescriptorEditorWidget *editorWidget)
149 : BarDescriptorDocumentAbstractNodeHandler(editorWidget)
150{
151}
152
153bool BarDescriptorDocumentIdNodeHandler::canHandle(const QDomNode &node) const
154{
155 return canHandleSimpleTextElement(node, QLatin1String("id"));
156}
157
158bool BarDescriptorDocumentIdNodeHandler::fromNode(const QDomNode &node)
159{
160 if (!canHandle(node))
161 return false;
162
163 packageInformationWidget()->setPackageId(loadSimpleTextElement(node));
164 return true;
165}
166
167QDomNode BarDescriptorDocumentIdNodeHandler::toNode(QDomDocument &doc) const
168{
169 return createSimpleTextElement(doc, QLatin1String("id"), packageInformationWidget()->packageId());
170}
171
172// ----------------------------------------------------------------------------
173
174BarDescriptorDocumentVersionNumberNodeHandler::BarDescriptorDocumentVersionNumberNodeHandler(BarDescriptorEditorWidget *editorWidget)
175 : BarDescriptorDocumentAbstractNodeHandler(editorWidget)
176{
177}
178
179bool BarDescriptorDocumentVersionNumberNodeHandler::canHandle(const QDomNode &node) const
180{
181 return canHandleSimpleTextElement(node, QLatin1String("versionNumber"));
182}
183
184bool BarDescriptorDocumentVersionNumberNodeHandler::fromNode(const QDomNode &node)
185{
186 if (!canHandle(node))
187 return false;
188
189 packageInformationWidget()->setPackageVersion(loadSimpleTextElement(node));
190 return true;
191}
192
193QDomNode BarDescriptorDocumentVersionNumberNodeHandler::toNode(QDomDocument &doc) const
194{
195 return createSimpleTextElement(doc, QLatin1String("versionNumber"), packageInformationWidget()->packageVersion());
196}
197
198// ----------------------------------------------------------------------------
199
200BarDescriptorDocumentBuildIdNodeHandler::BarDescriptorDocumentBuildIdNodeHandler(BarDescriptorEditorWidget *editorWidget)
201 : BarDescriptorDocumentAbstractNodeHandler(editorWidget)
202{
203}
204
205bool BarDescriptorDocumentBuildIdNodeHandler::canHandle(const QDomNode &node) const
206{
207 return canHandleSimpleTextElement(node, QLatin1String("buildId"));
208}
209
210bool BarDescriptorDocumentBuildIdNodeHandler::fromNode(const QDomNode &node)
211{
212 if (!canHandle(node))
213 return false;
214
215 packageInformationWidget()->setPackageBuildId(loadSimpleTextElement(node));
216 return true;
217}
218
219QDomNode BarDescriptorDocumentBuildIdNodeHandler::toNode(QDomDocument &doc) const
220{
221 return createSimpleTextElement(doc, QLatin1String("buildId"), packageInformationWidget()->packageBuildId());
222}
223
224// ----------------------------------------------------------------------------
225
226BarDescriptorDocumentApplicationNameNodeHandler::BarDescriptorDocumentApplicationNameNodeHandler(BarDescriptorEditorWidget *editorWidget)
227 : BarDescriptorDocumentAbstractNodeHandler(editorWidget)
228{
229}
230
231bool BarDescriptorDocumentApplicationNameNodeHandler::canHandle(const QDomNode &node) const
232{
233 return canHandleSimpleTextElement(node, QLatin1String("name"));
234}
235
236bool BarDescriptorDocumentApplicationNameNodeHandler::fromNode(const QDomNode &node)
237{
238 // TODO: Add support for localization
239
240 if (!canHandle(node))
241 return false;
242
243 entryPointWidget()->setApplicationName(loadSimpleTextElement(node));
244 return true;
245}
246
247QDomNode BarDescriptorDocumentApplicationNameNodeHandler::toNode(QDomDocument &doc) const
248{
249 // TODO: Add support for localization
250
251 return createSimpleTextElement(doc, QLatin1String("name"), entryPointWidget()->applicationName());
252}
253
254// ----------------------------------------------------------------------------
255
256BarDescriptorDocumentApplicationDescriptionNodeHandler::BarDescriptorDocumentApplicationDescriptionNodeHandler(BarDescriptorEditorWidget *editorWidget)
257 : BarDescriptorDocumentAbstractNodeHandler(editorWidget)
258{
259}
260
261bool BarDescriptorDocumentApplicationDescriptionNodeHandler::canHandle(const QDomNode &node) const
262{
263 return canHandleSimpleTextElement(node, QLatin1String("description"));
264}
265
266bool BarDescriptorDocumentApplicationDescriptionNodeHandler::fromNode(const QDomNode &node)
267{
268 // TODO: Add support for localization
269
270 if (!canHandle(node))
271 return false;
272
273 entryPointWidget()->setApplicationDescription(loadSimpleTextElement(node));
274 return true;
275}
276
277QDomNode BarDescriptorDocumentApplicationDescriptionNodeHandler::toNode(QDomDocument &doc) const
278{
279 return createSimpleTextElement(doc, QLatin1String("description"), entryPointWidget()->applicationDescription());
280}
281
282// ----------------------------------------------------------------------------
283
284BarDescriptorDocumentApplicationIconNodeHandler::BarDescriptorDocumentApplicationIconNodeHandler(BarDescriptorEditorWidget *editorWidget)
285 : BarDescriptorDocumentAbstractNodeHandler(editorWidget)
286{
287}
288
289bool BarDescriptorDocumentApplicationIconNodeHandler::canHandle(const QDomNode &node) const
290{
291 QDomElement element = node.toElement();
292 if (element.isNull())
293 return false;
294
295 if (element.tagName() != QLatin1String("icon"))
296 return false;
297
298 QDomElement imageElement = element.firstChild().toElement();
299 if (imageElement.isNull())
300 return false;
301
302 if (imageElement.tagName() != QLatin1String("image"))
303 return false;
304
305 QDomText imageTextNode = imageElement.firstChild().toText();
306 if (imageTextNode.isNull())
307 return false;
308
309 return true;
310}
311
312bool BarDescriptorDocumentApplicationIconNodeHandler::fromNode(const QDomNode &node)
313{
314 // TODO: Add support for localization
315
316 if (!canHandle(node))
317 return false;
318
319 QDomNode imageNode = node.firstChild();
320 QDomText imageTextNode = imageNode.firstChild().toText();
321 entryPointWidget()->setApplicationIcon(imageTextNode.data());
322 return true;
323}
324
325QDomNode BarDescriptorDocumentApplicationIconNodeHandler::toNode(QDomDocument &doc) const
326{
327 // TODO: Add support for localization
328 const QString iconFileName = entryPointWidget()->applicationIconFileName();
329 if (iconFileName.isEmpty())
330 return QDomElement();
331
332 QDomElement iconElement = doc.createElement(QLatin1String("icon"));
333 iconElement.appendChild(createSimpleTextElement(doc, QLatin1String("image"), iconFileName));
334 return iconElement;
335}
336
337// ----------------------------------------------------------------------------
338
339BarDescriptorDocumentSplashScreenNodeHandler::BarDescriptorDocumentSplashScreenNodeHandler(BarDescriptorEditorWidget *editorWidget)
340 : BarDescriptorDocumentAbstractNodeHandler(editorWidget)
341{
342}
343
344bool BarDescriptorDocumentSplashScreenNodeHandler::canHandle(const QDomNode &node) const
345{
346 QDomElement element = node.toElement();
347 if (element.isNull())
348 return false;
349
350 if (element.tagName().toLower() != QLatin1String("splashscreens"))
351 return false;
352
353 QDomElement imageElement = element.firstChild().toElement();
354 if (imageElement.isNull())
355 return false;
356
357 if (imageElement.tagName().toLower() != QLatin1String("image"))
358 return false;
359
360 QDomText imageTextNode = imageElement.firstChild().toText();
361 if (imageTextNode.isNull())
362 return false;
363
364 return true;
365}
366
367bool BarDescriptorDocumentSplashScreenNodeHandler::fromNode(const QDomNode &node)
368{
369 if (!canHandle(node))
370 return false;
371
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());
377 }
378 imageNode = imageNode.nextSiblingElement();
379 }
380 return true;
381}
382
383QDomNode BarDescriptorDocumentSplashScreenNodeHandler::toNode(QDomDocument &doc) const
384{
385 QStringList splashScreens = entryPointWidget()->splashScreens();
386 if (splashScreens.isEmpty())
387 return QDomElement();
388
389 QDomElement splashScreenElement = doc.createElement(QLatin1String("splashScreens"));
390 foreach (const QString &splashScreen, splashScreens)
391 splashScreenElement.appendChild(createSimpleTextElement(doc, QLatin1String("image"), splashScreen));
392
393 return splashScreenElement;
394}
395
396// ----------------------------------------------------------------------------
397
398BarDescriptorDocumentAssetNodeHandler::BarDescriptorDocumentAssetNodeHandler(BarDescriptorEditorWidget *editorWidget)
399 : BarDescriptorDocumentAbstractNodeHandler(editorWidget)
400{
401}
402
403bool BarDescriptorDocumentAssetNodeHandler::canHandle(const QDomNode &node) const
404{
405 return canHandleSimpleTextElement(node, QLatin1String("asset"));
406}
407
408bool BarDescriptorDocumentAssetNodeHandler::fromNode(const QDomNode &node)
409{
410 if (!canHandle(node))
411 return false;
412
413 QDomElement element = node.toElement();
414
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();
419
420 BarDescriptorAsset asset;
421 asset.source = path;
422 asset.destination = dest;
423 asset.entry = entry == QLatin1String("true");
424
425 assetsWidget()->addAsset(asset);
426 return true;
427}
428
429QDomNode BarDescriptorDocumentAssetNodeHandler::toNode(QDomDocument &doc) const
430{
431 QDomDocumentFragment fragment = doc.createDocumentFragment();
432
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);
437 if (asset.entry) {
438 assetElem.setAttribute(QLatin1String("type"), QLatin1String("Qnx/Elf"));
439 assetElem.setAttribute(QLatin1String("entry"), QLatin1String("true"));
440 }
441 assetElem.appendChild(doc.createTextNode(asset.destination));
442 fragment.appendChild(assetElem);
443 }
444
445 return fragment;
446}
447
448// ----------------------------------------------------------------------------
449
450BarDescriptorDocumentInitialWindowNodeHandler::BarDescriptorDocumentInitialWindowNodeHandler(BarDescriptorEditorWidget *editorWidget)
451 : BarDescriptorDocumentAbstractNodeHandler(editorWidget)
452{
453}
454
455bool BarDescriptorDocumentInitialWindowNodeHandler::canHandle(const QDomNode &node) const
456{
457 QDomElement element = node.toElement();
458 if (element.isNull())
459 return false;
460
461 if (element.tagName() != QLatin1String("initialWindow"))
462 return false;
463
464 return true;
465}
466
467bool BarDescriptorDocumentInitialWindowNodeHandler::fromNode(const QDomNode &node)
468{
469 if (!canHandle(node))
470 return false;
471
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"));
484 }
485 child = child.nextSiblingElement();
486 }
487
488 return true;
489}
490
491QDomNode BarDescriptorDocumentInitialWindowNodeHandler::toNode(QDomDocument &doc) const
492{
493 QDomElement element = doc.createElement(QLatin1String("initialWindow"));
494
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")));
500 }
501 element.appendChild(createSimpleTextElement(doc, QLatin1String("systemChrome"), generalWidget()->chrome()));
502 element.appendChild(createSimpleTextElement(doc, QLatin1String("transparent"), generalWidget()->transparent() ? QLatin1String("true") : QLatin1String("false")));
503
504 return element;
505}
506
507// ----------------------------------------------------------------------------
508
509
510BarDescriptorDocumentActionNodeHandler::BarDescriptorDocumentActionNodeHandler(BarDescriptorEditorWidget *editorWidget)
511 : BarDescriptorDocumentAbstractNodeHandler(editorWidget)
512{
513}
514
515bool BarDescriptorDocumentActionNodeHandler::canHandle(const QDomNode &node) const
516{
517 return canHandleSimpleTextElement(node, QLatin1String("action"));
518}
519
520bool BarDescriptorDocumentActionNodeHandler::fromNode(const QDomNode &node)
521{
522 if (!canHandle(node))
523 return false;
524
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);
528
529 return true;
530}
531
532QDomNode BarDescriptorDocumentActionNodeHandler::toNode(QDomDocument &doc) const
533{
534 QDomDocumentFragment frag = doc.createDocumentFragment();
535
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);
540
541 QStringList checkedIdentifiers = permissionsWidget()->checkedPermissions();
542 foreach (const QString &identifier, checkedIdentifiers)
543 frag.appendChild(createSimpleTextElement(doc, QLatin1String("action"), identifier));
544
545 return frag;
546}
547
548// ----------------------------------------------------------------------------
549
550BarDescriptorDocumentArgNodeHandler::BarDescriptorDocumentArgNodeHandler(BarDescriptorEditorWidget *editorWidget)
551 : BarDescriptorDocumentAbstractNodeHandler(editorWidget)
552{
553}
554
555bool BarDescriptorDocumentArgNodeHandler::canHandle(const QDomNode &node) const
556{
557 return canHandleSimpleTextElement(node, QLatin1String("arg"));
558}
559
560bool BarDescriptorDocumentArgNodeHandler::fromNode(const QDomNode &node)
561{
562 if (!canHandle(node))
563 return false;
564
565 generalWidget()->appendApplicationArgument(loadSimpleTextElement(node));
566 return true;
567}
568
569QDomNode BarDescriptorDocumentArgNodeHandler::toNode(QDomDocument &doc) const
570{
571 QDomDocumentFragment frag = doc.createDocumentFragment();
572
573 QStringList arguments = generalWidget()->applicationArguments();
574 foreach (const QString &argument, arguments)
575 frag.appendChild(createSimpleTextElement(doc, QLatin1String("arg"), argument));
576
577 return frag;
578}
579
580// ----------------------------------------------------------------------------
581
582BarDescriptorDocumentEnvNodeHandler::BarDescriptorDocumentEnvNodeHandler(BarDescriptorEditorWidget *editorWidget)
583 : BarDescriptorDocumentAbstractNodeHandler(editorWidget)
584{
585}
586
587bool BarDescriptorDocumentEnvNodeHandler::canHandle(const QDomNode &node) const
588{
589 QDomElement element = node.toElement();
590 if (element.isNull())
591 return false;
592
593 if (element.tagName() != QLatin1String("env"))
594 return false;
595
596 if (!element.hasAttribute(QLatin1String("var")) || !element.hasAttribute(QLatin1String("value")))
597 return false;
598
599 return true;
600}
601
602bool BarDescriptorDocumentEnvNodeHandler::fromNode(const QDomNode &node)
603{
604 if (!canHandle(node))
605 return false;
606
607 QDomElement element = node.toElement();
608
609 QString var = element.attribute(QLatin1String("var"));
610 QString value = element.attribute(QLatin1String("value"));
611
612 Utils::EnvironmentItem item(var, value);
613 environmentWidget()->appendEnvironmentItem(item);
614 return true;
615}
616
617QDomNode BarDescriptorDocumentEnvNodeHandler::toNode(QDomDocument &doc) const
618{
619 QDomDocumentFragment frag = doc.createDocumentFragment();
620 QList<Utils::EnvironmentItem> environmentItems = environmentWidget()->environment();
621
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);
627 }
628
629 return frag;
630}
631
632// ----------------------------------------------------------------------------
633
634BarDescriptorDocumentAuthorNodeHandler::BarDescriptorDocumentAuthorNodeHandler(BarDescriptorEditorWidget *editorWidget)
635 : BarDescriptorDocumentAbstractNodeHandler(editorWidget)
636{
637}
638
639bool BarDescriptorDocumentAuthorNodeHandler::canHandle(const QDomNode &node) const
640{
641 return canHandleSimpleTextElement(node, QLatin1String("author"))
642 || canHandleSimpleTextElement(node, QLatin1String("publisher"));
643}
644
645bool BarDescriptorDocumentAuthorNodeHandler::fromNode(const QDomNode &node)
646{
647 if (!canHandle(node))
648 return false;
649
650 authorInformationWidget()->setAuthor(loadSimpleTextElement(node));
651 return true;
652}
653
654QDomNode BarDescriptorDocumentAuthorNodeHandler::toNode(QDomDocument &doc) const
655{
656 return createSimpleTextElement(doc, QLatin1String("author"), authorInformationWidget()->author());
657}
658
659// ----------------------------------------------------------------------------
660
661BarDescriptorDocumentAuthorIdNodeHandler::BarDescriptorDocumentAuthorIdNodeHandler(BarDescriptorEditorWidget *editorWidget)
662 : BarDescriptorDocumentAbstractNodeHandler(editorWidget)
663{
664}
665
666bool BarDescriptorDocumentAuthorIdNodeHandler::canHandle(const QDomNode &node) const
667{
668 return canHandleSimpleTextElement(node, QLatin1String("authorId"));
669}
670
671bool BarDescriptorDocumentAuthorIdNodeHandler::fromNode(const QDomNode &node)
672{
673 if (!canHandle(node))
674 return false;
675
676 authorInformationWidget()->setAuthorId(loadSimpleTextElement(node));
677 return true;
678}
679
680QDomNode BarDescriptorDocumentAuthorIdNodeHandler::toNode(QDomDocument &doc) const
681{
682 return createSimpleTextElement(doc, QLatin1String("authorId"), authorInformationWidget()->authorId());
683}
684
685// ----------------------------------------------------------------------------
686
687BarDescriptorDocumentUnknownNodeHandler::BarDescriptorDocumentUnknownNodeHandler(BarDescriptorEditorWidget *editorWidget)
688 : BarDescriptorDocumentAbstractNodeHandler(editorWidget)
689{
690}
691
692bool BarDescriptorDocumentUnknownNodeHandler::canHandle(const QDomNode &node) const
693{
694 Q_UNUSED(node);
695 return true;
696}
697
698bool BarDescriptorDocumentUnknownNodeHandler::fromNode(const QDomNode &node)
699{
700 m_node = node.cloneNode();
701 return true;
702}
703
704QDomNode BarDescriptorDocumentUnknownNodeHandler::toNode(QDomDocument &doc) const
705{
706 Q_UNUSED(doc);
707 return m_node;
708}
7090
=== removed file 'src/qnx/bardescriptordocumentnodehandlers.h'
--- src/qnx/bardescriptordocumentnodehandlers.h 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptordocumentnodehandlers.h 1970-01-01 00:00:00 +0000
@@ -1,302 +0,0 @@
1/**************************************************************************
2**
3** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
4**
5** Contact: BlackBerry (qt@blackberry.com)
6** Contact: KDAB (info@kdab.com)
7**
8** This file is part of Qt Creator.
9**
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.
17**
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.
25**
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.
29**
30****************************************************************************/
31
32#ifndef QNX_INTERNAL_BARDESCRIPTORDOCUMENTNODEHANDLERS_H
33#define QNX_INTERNAL_BARDESCRIPTORDOCUMENTNODEHANDLERS_H
34
35#include <QDomNode>
36#include <QSharedPointer>
37
38namespace Qnx {
39namespace Internal {
40
41class BarDescriptorEditorWidget;
42class BarDescriptorEditorAssetsWidget;
43class BarDescriptorEditorAuthorInformationWidget;
44class BarDescriptorEditorEntryPointWidget;
45class BarDescriptorEditorEnvironmentWidget;
46class BarDescriptorEditorGeneralWidget;
47class BarDescriptorEditorPackageInformationWidget;
48class BarDescriptorEditorPermissionsWidget;
49
50class BarDescriptorDocumentAbstractNodeHandler
51{
52public:
53 BarDescriptorDocumentAbstractNodeHandler(BarDescriptorEditorWidget *editorWidget);
54 virtual ~BarDescriptorDocumentAbstractNodeHandler();
55
56 virtual bool canHandle(const QDomNode &node) const = 0;
57 bool handle(const QDomNode &node);
58 virtual QDomNode toNode(QDomDocument &doc) const = 0;
59
60 void clear();
61 int order() const;
62
63protected:
64 BarDescriptorEditorPackageInformationWidget *packageInformationWidget() const;
65 BarDescriptorEditorAuthorInformationWidget *authorInformationWidget() const;
66
67 BarDescriptorEditorEntryPointWidget *entryPointWidget() const;
68 BarDescriptorEditorGeneralWidget *generalWidget() const;
69 BarDescriptorEditorPermissionsWidget *permissionsWidget() const;
70 BarDescriptorEditorEnvironmentWidget *environmentWidget() const;
71
72 BarDescriptorEditorAssetsWidget *assetsWidget() const;
73
74 virtual bool fromNode(const QDomNode &node) = 0;
75
76 bool canHandleSimpleTextElement(const QDomNode &node, const QString &tagName) const;
77 QString loadSimpleTextElement(const QDomNode &node);
78 QDomElement createSimpleTextElement(QDomDocument &doc, const QString &tagName, const QString &textValue) const;
79
80private:
81 BarDescriptorEditorWidget *m_editorWidget;
82
83 int m_order;
84};
85
86// ----------------------------------------------------------------------------
87
88class BarDescriptorDocumentIdNodeHandler : public BarDescriptorDocumentAbstractNodeHandler
89{
90public:
91 BarDescriptorDocumentIdNodeHandler(BarDescriptorEditorWidget *editorWidget);
92
93 bool canHandle(const QDomNode &node) const;
94 QDomNode toNode(QDomDocument &doc) const;
95
96protected:
97 bool fromNode(const QDomNode &node);
98};
99
100// ----------------------------------------------------------------------------
101
102class BarDescriptorDocumentVersionNumberNodeHandler : public BarDescriptorDocumentAbstractNodeHandler
103{
104public:
105 BarDescriptorDocumentVersionNumberNodeHandler(BarDescriptorEditorWidget *editorWidget);
106
107 bool canHandle(const QDomNode &node) const;
108 QDomNode toNode(QDomDocument &doc) const;
109
110protected:
111 bool fromNode(const QDomNode &node);
112};
113
114// ----------------------------------------------------------------------------
115
116class BarDescriptorDocumentBuildIdNodeHandler : public BarDescriptorDocumentAbstractNodeHandler
117{
118public:
119 BarDescriptorDocumentBuildIdNodeHandler(BarDescriptorEditorWidget *editorWidget);
120
121 bool canHandle(const QDomNode &node) const;
122 QDomNode toNode(QDomDocument &doc) const;
123
124protected:
125 bool fromNode(const QDomNode &node);
126};
127
128// ----------------------------------------------------------------------------
129
130class BarDescriptorDocumentApplicationNameNodeHandler : public BarDescriptorDocumentAbstractNodeHandler
131{
132public:
133 BarDescriptorDocumentApplicationNameNodeHandler(BarDescriptorEditorWidget *editorWidget);
134
135 bool canHandle(const QDomNode &node) const;
136 QDomNode toNode(QDomDocument &doc) const;
137
138protected:
139 bool fromNode(const QDomNode &node);
140};
141
142// ----------------------------------------------------------------------------
143
144class BarDescriptorDocumentApplicationDescriptionNodeHandler : public BarDescriptorDocumentAbstractNodeHandler
145{
146public:
147 BarDescriptorDocumentApplicationDescriptionNodeHandler(BarDescriptorEditorWidget *editorWidget);
148
149 bool canHandle(const QDomNode &node) const;
150 QDomNode toNode(QDomDocument &doc) const;
151
152protected:
153 bool fromNode(const QDomNode &node);
154};
155
156// ----------------------------------------------------------------------------
157
158class BarDescriptorDocumentApplicationIconNodeHandler : public BarDescriptorDocumentAbstractNodeHandler
159{
160public:
161 BarDescriptorDocumentApplicationIconNodeHandler(BarDescriptorEditorWidget *editorWidget);
162
163 bool canHandle(const QDomNode &node) const;
164 QDomNode toNode(QDomDocument &doc) const;
165
166protected:
167 bool fromNode(const QDomNode &node);
168};
169
170// ----------------------------------------------------------------------------
171
172class BarDescriptorDocumentSplashScreenNodeHandler : public BarDescriptorDocumentAbstractNodeHandler
173{
174public:
175 BarDescriptorDocumentSplashScreenNodeHandler(BarDescriptorEditorWidget *editorWidget);
176
177 bool canHandle(const QDomNode &node) const;
178 QDomNode toNode(QDomDocument &doc) const;
179
180protected:
181 bool fromNode(const QDomNode &node);
182};
183
184// ----------------------------------------------------------------------------
185
186class BarDescriptorDocumentAssetNodeHandler : public BarDescriptorDocumentAbstractNodeHandler
187{
188public:
189 BarDescriptorDocumentAssetNodeHandler(BarDescriptorEditorWidget *editorWidget);
190
191 bool canHandle(const QDomNode &node) const;
192 QDomNode toNode(QDomDocument &doc) const;
193
194protected:
195 bool fromNode(const QDomNode &node);
196};
197
198// ----------------------------------------------------------------------------
199
200class BarDescriptorDocumentInitialWindowNodeHandler : public BarDescriptorDocumentAbstractNodeHandler
201{
202public:
203 BarDescriptorDocumentInitialWindowNodeHandler(BarDescriptorEditorWidget *editorWidget);
204
205 bool canHandle(const QDomNode &node) const;
206 QDomNode toNode(QDomDocument &doc) const;
207
208protected:
209 bool fromNode(const QDomNode &node);
210};
211
212// ----------------------------------------------------------------------------
213
214class BarDescriptorDocumentActionNodeHandler : public BarDescriptorDocumentAbstractNodeHandler
215{
216public:
217 BarDescriptorDocumentActionNodeHandler(BarDescriptorEditorWidget *editorWidget);
218
219 bool canHandle(const QDomNode &node) const;
220 QDomNode toNode(QDomDocument &doc) const;
221
222protected:
223 bool fromNode(const QDomNode &node);
224};
225
226// ----------------------------------------------------------------------------
227
228class BarDescriptorDocumentArgNodeHandler : public BarDescriptorDocumentAbstractNodeHandler
229{
230public:
231 BarDescriptorDocumentArgNodeHandler(BarDescriptorEditorWidget *editorWidget);
232
233 bool canHandle(const QDomNode &node) const;
234 QDomNode toNode(QDomDocument &doc) const;
235
236protected:
237 bool fromNode(const QDomNode &node);
238};
239
240// ----------------------------------------------------------------------------
241
242class BarDescriptorDocumentEnvNodeHandler : public BarDescriptorDocumentAbstractNodeHandler
243{
244public:
245 BarDescriptorDocumentEnvNodeHandler(BarDescriptorEditorWidget *editorWidget);
246
247 bool canHandle(const QDomNode &node) const;
248 QDomNode toNode(QDomDocument &doc) const;
249
250protected:
251 bool fromNode(const QDomNode &node);
252};
253
254// ----------------------------------------------------------------------------
255
256class BarDescriptorDocumentAuthorNodeHandler : public BarDescriptorDocumentAbstractNodeHandler
257{
258public:
259 BarDescriptorDocumentAuthorNodeHandler(BarDescriptorEditorWidget *editorWidget);
260
261 bool canHandle(const QDomNode &node) const;
262 QDomNode toNode(QDomDocument &doc) const;
263
264protected:
265 bool fromNode(const QDomNode &node);
266};
267
268// ----------------------------------------------------------------------------
269
270class BarDescriptorDocumentAuthorIdNodeHandler : public BarDescriptorDocumentAbstractNodeHandler
271{
272public:
273 BarDescriptorDocumentAuthorIdNodeHandler(BarDescriptorEditorWidget *editorWidget);
274
275 bool canHandle(const QDomNode &node) const;
276 QDomNode toNode(QDomDocument &doc) const;
277
278protected:
279 bool fromNode(const QDomNode &node);
280};
281
282// ----------------------------------------------------------------------------
283
284class BarDescriptorDocumentUnknownNodeHandler : public BarDescriptorDocumentAbstractNodeHandler
285{
286public:
287 BarDescriptorDocumentUnknownNodeHandler(BarDescriptorEditorWidget *editorWidget);
288
289 bool canHandle(const QDomNode &node) const;
290 QDomNode toNode(QDomDocument &doc) const;
291
292protected:
293 bool fromNode(const QDomNode &node);
294
295private:
296 QDomNode m_node;
297};
298
299} // namespace Internal
300} // namespace Qnx
301
302#endif // QNX_INTERNAL_BARDESCRIPTORDOCUMENTNODEHANDLERS_H
3030
=== modified file 'src/qnx/bardescriptoreditor.cpp'
--- src/qnx/bardescriptoreditor.cpp 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditor.cpp 2014-06-16 09:46:37 +0000
@@ -38,11 +38,15 @@
38#include <projectexplorer/projectexplorerconstants.h>38#include <projectexplorer/projectexplorerconstants.h>
39#include <projectexplorer/task.h>39#include <projectexplorer/task.h>
40#include <projectexplorer/taskhub.h>40#include <projectexplorer/taskhub.h>
41#include <utils/qtcassert.h>
42#include <texteditor/texteditorconstants.h>41#include <texteditor/texteditorconstants.h>
43#include <texteditor/basetexteditor.h>42#include <texteditor/basetexteditor.h>
43#include <texteditor/tabsettings.h>
44#include <utils/linecolumnlabel.h>
45#include <utils/qtcassert.h>
4446
45#include <QAction>47#include <QAction>
48#include <QStyle>
49#include <QTextBlock>
46#include <QToolBar>50#include <QToolBar>
4751
48using namespace ProjectExplorer;52using namespace ProjectExplorer;
@@ -50,12 +54,14 @@
50namespace Qnx {54namespace Qnx {
51namespace Internal {55namespace Internal {
5256
53BarDescriptorEditor::BarDescriptorEditor(BarDescriptorEditorWidget *editorWidget)57BarDescriptorEditor::BarDescriptorEditor()
54{58{
59 setId(Constants::QNX_BAR_DESCRIPTOR_EDITOR_ID);
60 m_file = new BarDescriptorDocument(this);
61
62 BarDescriptorEditorWidget *editorWidget = new BarDescriptorEditorWidget(this);
55 setWidget(editorWidget);63 setWidget(editorWidget);
5664
57 m_file = new BarDescriptorDocument(editorWidget);
58
59 m_toolBar = new QToolBar(editorWidget);65 m_toolBar = new QToolBar(editorWidget);
6066
61 m_actionGroup = new QActionGroup(this);67 m_actionGroup = new QActionGroup(this);
@@ -83,6 +89,17 @@
8389
84 generalAction->setChecked(true);90 generalAction->setChecked(true);
8591
92 m_cursorPositionLabel = new Utils::LineColumnLabel;
93 const int spacing = editorWidget->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing) / 2;
94 m_cursorPositionLabel->setContentsMargins(spacing, 0, spacing, 0);
95
96 QWidget *spacer = new QWidget;
97 spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
98 m_toolBar->addWidget(spacer);
99
100 m_cursorPositionAction = m_toolBar->addWidget(m_cursorPositionLabel);
101 connect(editorWidget->sourceWidget(), SIGNAL(cursorPositionChanged()), this, SLOT(updateCursorPosition()));
102
86 setContext(Core::Context(Constants::QNX_BAR_DESCRIPTOR_EDITOR_CONTEXT,103 setContext(Core::Context(Constants::QNX_BAR_DESCRIPTOR_EDITOR_CONTEXT,
87 TextEditor::Constants::C_TEXTEDITOR));104 TextEditor::Constants::C_TEXTEDITOR));
88}105}
@@ -90,7 +107,15 @@
90bool BarDescriptorEditor::open(QString *errorString, const QString &fileName, const QString &realFileName)107bool BarDescriptorEditor::open(QString *errorString, const QString &fileName, const QString &realFileName)
91{108{
92 QTC_ASSERT(fileName == realFileName, return false);109 QTC_ASSERT(fileName == realFileName, return false);
93 return m_file->open(errorString, fileName);110
111 bool result = m_file->open(errorString, fileName);
112 if (result) {
113 BarDescriptorEditorWidget *editorWidget = qobject_cast<BarDescriptorEditorWidget *>(widget());
114 QTC_ASSERT(editorWidget, return false);
115 editorWidget->setFilePath(fileName);
116 }
117
118 return result;
94}119}
95120
96Core::IDocument *BarDescriptorEditor::document()121Core::IDocument *BarDescriptorEditor::document()
@@ -98,11 +123,6 @@
98 return m_file;123 return m_file;
99}124}
100125
101Core::Id BarDescriptorEditor::id() const
102{
103 return Constants::QNX_BAR_DESCRIPTOR_EDITOR_ID;
104}
105
106QWidget *BarDescriptorEditor::toolBar()126QWidget *BarDescriptorEditor::toolBar()
107{127{
108 return m_toolBar;128 return m_toolBar;
@@ -126,32 +146,26 @@
126 BarDescriptorEditorWidget *editorWidget = qobject_cast<BarDescriptorEditorWidget *>(widget());146 BarDescriptorEditorWidget *editorWidget = qobject_cast<BarDescriptorEditorWidget *>(widget());
127 QTC_ASSERT(editorWidget, return);147 QTC_ASSERT(editorWidget, return);
128148
129 int prevPage = editorWidget->currentIndex();149 m_cursorPositionAction->setVisible(page == Source);
130
131 if (prevPage == page)
132 return;
133
134 if (page == Source) {
135 editorWidget->setXmlSource(m_file->xmlSource());
136 } else if (prevPage == Source) {
137 TaskHub::clearTasks(Constants::QNX_TASK_CATEGORY_BARDESCRIPTOR);
138 QString errorMsg;
139 int errorLine;
140 if (!m_file->loadContent(editorWidget->xmlSource(), &errorMsg, &errorLine)) {
141 TaskHub::addTask(Task::Error, errorMsg, Constants::QNX_TASK_CATEGORY_BARDESCRIPTOR,
142 Utils::FileName::fromString(m_file->filePath()), errorLine);
143 TaskHub::requestPopup();
144
145 foreach (QAction *action, m_actionGroup->actions())
146 if (action->data().toInt() == Source)
147 action->setChecked(true);
148
149 return;
150 }
151 }
152
153 editorWidget->setCurrentIndex(page);150 editorWidget->setCurrentIndex(page);
154}151}
155152
153void BarDescriptorEditor::updateCursorPosition()
154{
155 BarDescriptorEditorWidget *editorWidget = qobject_cast<BarDescriptorEditorWidget *>(widget());
156 QTC_ASSERT(editorWidget, return);
157
158 const QTextCursor cursor = editorWidget->sourceWidget()->textCursor();
159 const QTextBlock block = cursor.block();
160 const int line = block.blockNumber() + 1;
161 const int column = cursor.position() - block.position();
162 m_cursorPositionLabel->setText(tr("Line: %1, Col: %2").arg(line)
163 .arg(editorWidget->sourceWidget()->baseTextDocument()
164 ->tabSettings().columnAt(block.text(), column)+1),
165 tr("Line: 9999, Col: 999"));
166 if (!block.isVisible())
167 editorWidget->sourceWidget()->ensureCursorVisible();
168}
169
156} // namespace Internal170} // namespace Internal
157} // namespace Qnx171} // namespace Qnx
158172
=== modified file 'src/qnx/bardescriptoreditor.h'
--- src/qnx/bardescriptoreditor.h 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditor.h 2014-06-16 09:46:37 +0000
@@ -39,6 +39,8 @@
39class QToolBar;39class QToolBar;
40QT_END_NAMESPACE40QT_END_NAMESPACE
4141
42namespace Utils { class LineColumnLabel; }
43
42namespace Qnx {44namespace Qnx {
43namespace Internal {45namespace Internal {
4446
@@ -56,17 +58,17 @@
56 Source58 Source
57 };59 };
5860
59 explicit BarDescriptorEditor(BarDescriptorEditorWidget *editorWidget);61 BarDescriptorEditor();
6062
61 bool open(QString *errorString, const QString &fileName, const QString &realFileName);63 bool open(QString *errorString, const QString &fileName, const QString &realFileName);
62 Core::IDocument *document();64 Core::IDocument *document();
63 Core::Id id() const;
64 QWidget *toolBar();65 QWidget *toolBar();
6566
66 EditorPage activePage() const;67 EditorPage activePage() const;
6768
68private slots:69private slots:
69 void changeEditorPage(QAction *action);70 void changeEditorPage(QAction *action);
71 void updateCursorPosition();
7072
71private:73private:
72 void setActivePage(EditorPage page);74 void setActivePage(EditorPage page);
@@ -75,6 +77,8 @@
7577
76 QToolBar *m_toolBar;78 QToolBar *m_toolBar;
77 QActionGroup *m_actionGroup;79 QActionGroup *m_actionGroup;
80 Utils::LineColumnLabel *m_cursorPositionLabel;
81 QAction *m_cursorPositionAction;
78};82};
7983
80} // namespace Internal84} // namespace Internal
8185
=== modified file 'src/qnx/bardescriptoreditorabstractpanelwidget.cpp'
--- src/qnx/bardescriptoreditorabstractpanelwidget.cpp 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditorabstractpanelwidget.cpp 2014-06-16 09:46:37 +0000
@@ -32,10 +32,12 @@
32#include "bardescriptoreditorabstractpanelwidget.h"32#include "bardescriptoreditorabstractpanelwidget.h"
3333
34#include <utils/pathchooser.h>34#include <utils/pathchooser.h>
35#include <utils/qtcassert.h>
3536
36#include <QCheckBox>37#include <QCheckBox>
37#include <QComboBox>38#include <QComboBox>
38#include <QLineEdit>39#include <QLineEdit>
40#include <QSignalMapper>
39#include <QTextEdit>41#include <QTextEdit>
4042
41using namespace Qnx;43using namespace Qnx;
@@ -44,40 +46,86 @@
44BarDescriptorEditorAbstractPanelWidget::BarDescriptorEditorAbstractPanelWidget(QWidget *parent) :46BarDescriptorEditorAbstractPanelWidget::BarDescriptorEditorAbstractPanelWidget(QWidget *parent) :
45 QWidget(parent)47 QWidget(parent)
46{48{
47}49 m_signalMapper = new QSignalMapper(this);
4850 connect(m_signalMapper, SIGNAL(mapped(int)), this, SLOT(handleSignalMapped(int)));
4951}
50void BarDescriptorEditorAbstractPanelWidget::setComboBoxBlocked(QComboBox *comboBox, int index)52
51{53void BarDescriptorEditorAbstractPanelWidget::setValue(BarDescriptorDocument::Tag tag, const QVariant &value)
52 bool blocked = comboBox->blockSignals(true);54{
53 comboBox->setCurrentIndex(index);55 if (m_blockedSignals.contains(tag))
54 comboBox->blockSignals(blocked);56 return;
55}57
5658 blockSignalMapping(tag);
57void BarDescriptorEditorAbstractPanelWidget::setCheckBoxBlocked(QCheckBox *checkBox, bool checked)59 updateWidgetValue(tag, value);
58{60 unblockSignalMapping(tag);
59 bool blocked = checkBox->blockSignals(true);61}
60 checkBox->setChecked(checked);62
61 checkBox->blockSignals(blocked);63void BarDescriptorEditorAbstractPanelWidget::addSignalMapping(BarDescriptorDocument::Tag tag, QObject *object, const char *signal)
62}64{
6365 m_signalMapper->setMapping(object, tag);
64void BarDescriptorEditorAbstractPanelWidget::setLineEditBlocked(QLineEdit *lineEdit, const QString &text)66 connect(object, signal, m_signalMapper, SLOT(map()));
65{67}
66 bool blocked = lineEdit->blockSignals(true);68
67 lineEdit->setText(text);69void BarDescriptorEditorAbstractPanelWidget::blockSignalMapping(BarDescriptorDocument::Tag tag)
68 lineEdit->blockSignals(blocked);70{
69}71 m_blockedSignals.prepend(tag);
7072}
71void BarDescriptorEditorAbstractPanelWidget::setTextEditBlocked(QTextEdit *textEdit, const QString &text)73
72{74void BarDescriptorEditorAbstractPanelWidget::unblockSignalMapping(BarDescriptorDocument::Tag tag)
73 bool blocked = textEdit->blockSignals(true);75{
74 textEdit->setPlainText(text);76 BarDescriptorDocument::Tag removedTag = m_blockedSignals.takeFirst();
75 textEdit->blockSignals(blocked);77 QTC_CHECK(removedTag == tag);
76}78}
7779
78void BarDescriptorEditorAbstractPanelWidget::setPathChooserBlocked(Utils::PathChooser *pathChooser, const QString &path)80void BarDescriptorEditorAbstractPanelWidget::updateWidgetValue(BarDescriptorDocument::Tag tag, const QVariant &value)
79{81{
80 bool blocked = pathChooser->blockSignals(true);82 QObject *object = m_signalMapper->mapping(static_cast<int>(tag));
81 pathChooser->setPath(path);83 if (!object)
82 pathChooser->blockSignals(blocked);84 return;
85
86 if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(object))
87 lineEdit->setText(value.toString());
88 else if (QTextEdit *textEdit = qobject_cast<QTextEdit *>(object))
89 textEdit->setPlainText(value.toString());
90 else if (Utils::PathChooser *pathChooser = qobject_cast<Utils::PathChooser *>(object))
91 pathChooser->setPath(value.toString());
92 else if (QComboBox *comboBox = qobject_cast<QComboBox *>(object))
93 comboBox->setCurrentIndex(comboBox->findData(value.toString()));
94 else if (QCheckBox *checkBox = qobject_cast<QCheckBox *>(object))
95 checkBox->setChecked(value.toBool());
96 else
97 QTC_CHECK(false);
98}
99
100void BarDescriptorEditorAbstractPanelWidget::emitChanged(BarDescriptorDocument::Tag tag)
101{
102 QObject *sender = m_signalMapper->mapping(tag);
103
104 if (!sender)
105 return;
106
107 if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(sender))
108 emit changed(tag, lineEdit->text());
109 else if (QTextEdit *textEdit = qobject_cast<QTextEdit *>(sender))
110 emit changed(tag, textEdit->toPlainText());
111 else if (Utils::PathChooser *pathChooser = qobject_cast<Utils::PathChooser *>(sender))
112 emit changed(tag, pathChooser->path());
113 else if (QComboBox *comboBox = qobject_cast<QComboBox *>(sender))
114 emit changed(tag, comboBox->itemData(comboBox->currentIndex()));
115 else if (QCheckBox *checkBox = qobject_cast<QCheckBox *>(sender))
116 emit changed(tag, checkBox->isChecked());
117 else
118 QTC_CHECK(false);
119}
120
121void BarDescriptorEditorAbstractPanelWidget::handleSignalMapped(int id)
122{
123 BarDescriptorDocument::Tag tag = static_cast<BarDescriptorDocument::Tag>(id);
124
125 if (m_blockedSignals.contains(tag))
126 return;
127
128 blockSignalMapping(tag);
129 emitChanged(tag);
130 unblockSignalMapping(tag);
83}131}
84132
=== modified file 'src/qnx/bardescriptoreditorabstractpanelwidget.h'
--- src/qnx/bardescriptoreditorabstractpanelwidget.h 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditorabstractpanelwidget.h 2014-06-16 09:46:37 +0000
@@ -34,14 +34,16 @@
3434
35#include <QWidget>35#include <QWidget>
3636
37namespace Utils {37#include "bardescriptordocument.h"
38class PathChooser;38
39}39namespace Utils { class PathChooser; }
4040
41QT_BEGIN_NAMESPACE41QT_BEGIN_NAMESPACE
42class QCheckBox;42class QCheckBox;
43class QComboBox;43class QComboBox;
44class QLineEdit;44class QLineEdit;
45class QSignalMapper;
46class QStringListModel;
45class QTextEdit;47class QTextEdit;
46QT_END_NAMESPACE48QT_END_NAMESPACE
4749
@@ -54,17 +56,26 @@
54public:56public:
55 explicit BarDescriptorEditorAbstractPanelWidget(QWidget *parent = 0);57 explicit BarDescriptorEditorAbstractPanelWidget(QWidget *parent = 0);
5658
57 virtual void clear() = 0;59public slots:
60 void setValue(BarDescriptorDocument::Tag tag, const QVariant &value);
5861
59signals:62signals:
60 void changed();63 void changed(BarDescriptorDocument::Tag tag, const QVariant &value);
6164
62protected:65protected:
63 void setComboBoxBlocked(QComboBox *comboBox, int index);66 virtual void updateWidgetValue(BarDescriptorDocument::Tag tag, const QVariant &value);
64 void setCheckBoxBlocked(QCheckBox *checkBox, bool checked);67 virtual void emitChanged(BarDescriptorDocument::Tag tag);
65 void setLineEditBlocked(QLineEdit *lineEdit, const QString &text);68
66 void setTextEditBlocked(QTextEdit *textEdit, const QString &text);69 void addSignalMapping(BarDescriptorDocument::Tag tag, QObject *object, const char *signal);
67 void setPathChooserBlocked(Utils::PathChooser *pathChooser, const QString &path);70 void blockSignalMapping(BarDescriptorDocument::Tag tag);
71 void unblockSignalMapping(BarDescriptorDocument::Tag tag);
72
73private slots:
74 void handleSignalMapped(int id);
75
76private:
77 QSignalMapper *m_signalMapper;
78 QList<BarDescriptorDocument::Tag> m_blockedSignals;
68};79};
6980
70} // namespace Internal81} // namespace Internal
7182
=== modified file 'src/qnx/bardescriptoreditorassetswidget.cpp'
--- src/qnx/bardescriptoreditorassetswidget.cpp 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditorassetswidget.cpp 2014-06-16 09:46:37 +0000
@@ -57,7 +57,10 @@
57 connect(m_ui->addAsset, SIGNAL(clicked()), this, SLOT(addNewAsset()));57 connect(m_ui->addAsset, SIGNAL(clicked()), this, SLOT(addNewAsset()));
58 connect(m_ui->removeAsset, SIGNAL(clicked()), this, SLOT(removeSelectedAsset()));58 connect(m_ui->removeAsset, SIGNAL(clicked()), this, SLOT(removeSelectedAsset()));
59 connect(m_assetsModel, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(updateEntryCheckState(QStandardItem*)));59 connect(m_assetsModel, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(updateEntryCheckState(QStandardItem*)));
60 connectAssetsModel();60
61 addSignalMapping(BarDescriptorDocument::asset, m_assetsModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)));
62 addSignalMapping(BarDescriptorDocument::asset, m_assetsModel, SIGNAL(rowsInserted(QModelIndex,int,int)));
63 addSignalMapping(BarDescriptorDocument::asset, m_assetsModel, SIGNAL(rowsRemoved(QModelIndex,int,int)));
61}64}
6265
63BarDescriptorEditorAssetsWidget::~BarDescriptorEditorAssetsWidget()66BarDescriptorEditorAssetsWidget::~BarDescriptorEditorAssetsWidget()
@@ -67,32 +70,9 @@
6770
68void BarDescriptorEditorAssetsWidget::clear()71void BarDescriptorEditorAssetsWidget::clear()
69{72{
70 // We can't just block signals, as the view depends on them73 blockSignalMapping(BarDescriptorDocument::asset);
71 disconnectAssetsModel();
72 m_assetsModel->removeRows(0, m_assetsModel->rowCount());74 m_assetsModel->removeRows(0, m_assetsModel->rowCount());
73 connectAssetsModel();75 unblockSignalMapping(BarDescriptorDocument::asset);
74}
75
76void BarDescriptorEditorAssetsWidget::addAsset(const BarDescriptorAsset &asset)
77{
78 disconnectAssetsModel();
79 addAssetInternal(asset);
80 connectAssetsModel();
81}
82
83QList<BarDescriptorAsset> BarDescriptorEditorAssetsWidget::assets() const
84{
85 QList<BarDescriptorAsset> result;
86
87 for (int i = 0; i < m_assetsModel->rowCount(); ++i) {
88 BarDescriptorAsset asset;
89 asset.source = m_assetsModel->item(i, 0)->text();
90 asset.destination = m_assetsModel->item(i, 1)->text();
91 asset.entry = m_assetsModel->item(i, 2)->checkState() == Qt::Checked;
92 result << asset;
93 }
94
95 return result;
96}76}
9777
98QStandardItemModel *BarDescriptorEditorAssetsWidget::assetsModel() const78QStandardItemModel *BarDescriptorEditorAssetsWidget::assetsModel() const
@@ -100,6 +80,19 @@
100 return m_assetsModel;80 return m_assetsModel;
101}81}
10282
83void BarDescriptorEditorAssetsWidget::updateWidgetValue(BarDescriptorDocument::Tag tag, const QVariant &value)
84{
85 if (tag != BarDescriptorDocument::asset) {
86 BarDescriptorEditorAbstractPanelWidget::updateWidgetValue(tag, value);
87 return;
88 }
89
90 clear();
91 BarDescriptorAssetList assets = value.value<BarDescriptorAssetList>();
92 foreach (const BarDescriptorAsset asset, assets)
93 addAsset(asset);
94}
95
103void BarDescriptorEditorAssetsWidget::addAsset(const QString &fullPath)96void BarDescriptorEditorAssetsWidget::addAsset(const QString &fullPath)
104{97{
105 if (fullPath.isEmpty())98 if (fullPath.isEmpty())
@@ -109,7 +102,7 @@
109 asset.source = fullPath;102 asset.source = fullPath;
110 asset.destination = QFileInfo(fullPath).fileName();103 asset.destination = QFileInfo(fullPath).fileName();
111 asset.entry = false;104 asset.entry = false;
112 addAssetInternal(asset);105 addAsset(asset);
113}106}
114107
115void BarDescriptorEditorAssetsWidget::removeAsset(const QString &fullPath)108void BarDescriptorEditorAssetsWidget::removeAsset(const QString &fullPath)
@@ -157,21 +150,28 @@
157 connect(m_assetsModel, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(updateEntryCheckState(QStandardItem*)));150 connect(m_assetsModel, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(updateEntryCheckState(QStandardItem*)));
158}151}
159152
160void BarDescriptorEditorAssetsWidget::connectAssetsModel()153void BarDescriptorEditorAssetsWidget::emitChanged(BarDescriptorDocument::Tag tag)
161{154{
162 connect(m_assetsModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SIGNAL(changed()));155 if (tag != BarDescriptorDocument::asset) {
163 connect(m_assetsModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SIGNAL(changed()));156 BarDescriptorEditorAbstractPanelWidget::emitChanged(tag);
164 connect(m_assetsModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SIGNAL(changed()));157 return;
165}158 }
166159
167void BarDescriptorEditorAssetsWidget::disconnectAssetsModel()160 BarDescriptorAssetList result;
168{161 for (int i = 0; i < m_assetsModel->rowCount(); ++i) {
169 disconnect(m_assetsModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SIGNAL(changed()));162 BarDescriptorAsset asset;
170 disconnect(m_assetsModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SIGNAL(changed()));163 asset.source = m_assetsModel->item(i, 0)->text();
171 disconnect(m_assetsModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SIGNAL(changed()));164 asset.destination = m_assetsModel->item(i, 1)->text();
172}165 asset.entry = m_assetsModel->item(i, 2)->checkState() == Qt::Checked;
173166 result.append(asset);
174void BarDescriptorEditorAssetsWidget::addAssetInternal(const BarDescriptorAsset &asset)167 }
168
169 QVariant var;
170 var.setValue(result);
171 emit changed(tag, var);
172}
173
174void BarDescriptorEditorAssetsWidget::addAsset(const BarDescriptorAsset &asset)
175{175{
176 const QString path = asset.source;176 const QString path = asset.source;
177 const QString dest = asset.destination;177 const QString dest = asset.destination;
178178
=== modified file 'src/qnx/bardescriptoreditorassetswidget.h'
--- src/qnx/bardescriptoreditorassetswidget.h 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditorassetswidget.h 2014-06-16 09:46:37 +0000
@@ -42,9 +42,7 @@
42namespace Qnx {42namespace Qnx {
43namespace Internal {43namespace Internal {
4444
45namespace Ui {45namespace Ui { class BarDescriptorEditorAssetsWidget; }
46class BarDescriptorEditorAssetsWidget;
47}
4846
49class BarDescriptorAsset;47class BarDescriptorAsset;
5048
@@ -56,27 +54,24 @@
56 explicit BarDescriptorEditorAssetsWidget(QWidget *parent = 0);54 explicit BarDescriptorEditorAssetsWidget(QWidget *parent = 0);
57 ~BarDescriptorEditorAssetsWidget();55 ~BarDescriptorEditorAssetsWidget();
5856
59 void clear();
60
61 void addAsset(const BarDescriptorAsset &asset);
62 QList<BarDescriptorAsset> assets() const;
63
64 QStandardItemModel *assetsModel() const;57 QStandardItemModel *assetsModel() const;
6558
66public slots:59public slots:
67 void addAsset(const QString &fullPath);60 void addAsset(const QString &fullPath);
68 void removeAsset(const QString &fullPath);61 void removeAsset(const QString &fullPath);
6962
63protected:
64 void updateWidgetValue(BarDescriptorDocument::Tag tag, const QVariant &value);
65 void emitChanged(BarDescriptorDocument::Tag tag);
66
70private slots:67private slots:
71 void addNewAsset();68 void addNewAsset();
72 void removeSelectedAsset();69 void removeSelectedAsset();
73 void updateEntryCheckState(QStandardItem *item);70 void updateEntryCheckState(QStandardItem *item);
7471
75private:72private:
76 void connectAssetsModel();73 void clear();
77 void disconnectAssetsModel();74 void addAsset(const BarDescriptorAsset &asset);
78
79 void addAssetInternal(const BarDescriptorAsset &asset);
80 bool hasAsset(const BarDescriptorAsset &asset);75 bool hasAsset(const BarDescriptorAsset &asset);
8176
82 Ui::BarDescriptorEditorAssetsWidget *m_ui;77 Ui::BarDescriptorEditorAssetsWidget *m_ui;
8378
=== modified file 'src/qnx/bardescriptoreditorauthorinformationwidget.cpp'
--- src/qnx/bardescriptoreditorauthorinformationwidget.cpp 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditorauthorinformationwidget.cpp 2014-06-16 09:46:37 +0000
@@ -34,6 +34,7 @@
3434
35#include "blackberrydebugtokenreader.h"35#include "blackberrydebugtokenreader.h"
36#include "blackberrydeviceconfiguration.h"36#include "blackberrydeviceconfiguration.h"
37#include "blackberrysigningutils.h"
37#include "qnxconstants.h"38#include "qnxconstants.h"
3839
39#include <projectexplorer/devicesupport/devicemanager.h>40#include <projectexplorer/devicesupport/devicemanager.h>
@@ -53,8 +54,8 @@
5354
54 m_ui->setFromDebugToken->setVisible(BlackBerryDebugTokenReader::isSupported());55 m_ui->setFromDebugToken->setVisible(BlackBerryDebugTokenReader::isSupported());
5556
56 connect(m_ui->author, SIGNAL(textChanged(QString)), this, SIGNAL(changed()));57 addSignalMapping(BarDescriptorDocument::author, m_ui->author, SIGNAL(textChanged(QString)));
57 connect(m_ui->authorId, SIGNAL(textChanged(QString)), this, SIGNAL(changed()));58 addSignalMapping(BarDescriptorDocument::authorId, m_ui->authorId, SIGNAL(textChanged(QString)));
58 connect(m_ui->setFromDebugToken, SIGNAL(clicked()), this, SLOT(setAuthorFromDebugToken()));59 connect(m_ui->setFromDebugToken, SIGNAL(clicked()), this, SLOT(setAuthorFromDebugToken()));
59}60}
6061
@@ -63,30 +64,13 @@
63 delete m_ui;64 delete m_ui;
64}65}
6566
66void BarDescriptorEditorAuthorInformationWidget::clear()67void BarDescriptorEditorAuthorInformationWidget::updateWidgetValue(BarDescriptorDocument::Tag tag, const QVariant &value)
67{68{
68 setLineEditBlocked(m_ui->author, QString());69 if (tag == BarDescriptorDocument::publisher && !value.toString().isEmpty())
69 setLineEditBlocked(m_ui->authorId, QString());70 // <publisher> is deprecated and hence not connected to the author field as we only want to read it from the XML
70}71 m_ui->author->setText(value.toString());
7172 else
72QString BarDescriptorEditorAuthorInformationWidget::author() const73 BarDescriptorEditorAbstractPanelWidget::updateWidgetValue(tag, value);
73{
74 return m_ui->author->text();
75}
76
77void BarDescriptorEditorAuthorInformationWidget::setAuthor(const QString &author)
78{
79 setLineEditBlocked(m_ui->author, author);
80}
81
82QString BarDescriptorEditorAuthorInformationWidget::authorId() const
83{
84 return m_ui->authorId->text();
85}
86
87void BarDescriptorEditorAuthorInformationWidget::setAuthorId(const QString &authorId)
88{
89 setLineEditBlocked(m_ui->authorId, authorId);
90}74}
9175
92void BarDescriptorEditorAuthorInformationWidget::setAuthorFromDebugToken()76void BarDescriptorEditorAuthorInformationWidget::setAuthorFromDebugToken()
@@ -104,6 +88,7 @@
104 debugTokens << bbDevice->debugToken();88 debugTokens << bbDevice->debugToken();
105 }89 }
106 }90 }
91 debugTokens << BlackBerrySigningUtils::instance().debugTokens();
107 debugTokens.removeDuplicates();92 debugTokens.removeDuplicates();
10893
109 bool ok;94 bool ok;
11095
=== modified file 'src/qnx/bardescriptoreditorauthorinformationwidget.h'
--- src/qnx/bardescriptoreditorauthorinformationwidget.h 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditorauthorinformationwidget.h 2014-06-16 09:46:37 +0000
@@ -37,9 +37,7 @@
37namespace Qnx {37namespace Qnx {
38namespace Internal {38namespace Internal {
3939
40namespace Ui {40namespace Ui { class BarDescriptorEditorAuthorInformationWidget; }
41class BarDescriptorEditorAuthorInformationWidget;
42}
4341
44class BarDescriptorEditorAuthorInformationWidget : public BarDescriptorEditorAbstractPanelWidget42class BarDescriptorEditorAuthorInformationWidget : public BarDescriptorEditorAbstractPanelWidget
45{43{
@@ -49,13 +47,8 @@
49 explicit BarDescriptorEditorAuthorInformationWidget(QWidget *parent = 0);47 explicit BarDescriptorEditorAuthorInformationWidget(QWidget *parent = 0);
50 ~BarDescriptorEditorAuthorInformationWidget();48 ~BarDescriptorEditorAuthorInformationWidget();
5149
52 void clear();50protected:
5351 void updateWidgetValue(BarDescriptorDocument::Tag tag, const QVariant &value);
54 QString author() const;
55 void setAuthor(const QString &author);
56
57 QString authorId() const;
58 void setAuthorId(const QString &authorId);
5952
60private slots:53private slots:
61 void setAuthorFromDebugToken();54 void setAuthorFromDebugToken();
6255
=== modified file 'src/qnx/bardescriptoreditorentrypointwidget.cpp'
--- src/qnx/bardescriptoreditorentrypointwidget.cpp 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditorentrypointwidget.cpp 2014-06-16 09:46:37 +0000
@@ -57,6 +57,7 @@
57 m_ui->setupUi(this);57 m_ui->setupUi(this);
5858
59 m_ui->iconFilePath->setExpectedKind(Utils::PathChooser::File);59 m_ui->iconFilePath->setExpectedKind(Utils::PathChooser::File);
60 m_ui->iconFilePath->setHistoryCompleter(QLatin1String("Qmake.Icon.History"));
60 m_ui->iconFilePath->setPromptDialogFilter(tr("Images (*.jpg *.png)"));61 m_ui->iconFilePath->setPromptDialogFilter(tr("Images (*.jpg *.png)"));
6162
62 m_ui->iconWarningLabel->setVisible(false);63 m_ui->iconWarningLabel->setVisible(false);
@@ -65,9 +66,6 @@
65 m_ui->splashScreenWarningLabel->setVisible(false);66 m_ui->splashScreenWarningLabel->setVisible(false);
66 m_ui->splashScreenWarningPixmap->setVisible(false);67 m_ui->splashScreenWarningPixmap->setVisible(false);
6768
68 connect(m_ui->applicationName, SIGNAL(textChanged(QString)), this, SIGNAL(changed()));
69 connect(m_ui->applicationDescription, SIGNAL(textChanged()), this, SIGNAL(changed()));
70
71 connect(m_ui->iconFilePath, SIGNAL(changed(QString)), this, SLOT(handleIconChanged(QString)));69 connect(m_ui->iconFilePath, SIGNAL(changed(QString)), this, SLOT(handleIconChanged(QString)));
72 connect(m_ui->iconClearButton, SIGNAL(clicked()), this, SLOT(clearIcon()));70 connect(m_ui->iconClearButton, SIGNAL(clicked()), this, SLOT(clearIcon()));
7371
@@ -75,8 +73,14 @@
75 m_ui->splashScreensView->setModel(m_splashScreenModel);73 m_ui->splashScreensView->setModel(m_splashScreenModel);
76 connect(m_ui->addSplashScreen, SIGNAL(clicked()), this, SLOT(browseForSplashScreen()));74 connect(m_ui->addSplashScreen, SIGNAL(clicked()), this, SLOT(browseForSplashScreen()));
77 connect(m_ui->removeSplashScreen, SIGNAL(clicked()), this, SLOT(removeSelectedSplashScreen()));75 connect(m_ui->removeSplashScreen, SIGNAL(clicked()), this, SLOT(removeSelectedSplashScreen()));
78 connect(m_splashScreenModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SIGNAL(changed()));
79 connect(m_ui->splashScreensView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(handleSplashScreenSelectionChanged(QItemSelection,QItemSelection)));76 connect(m_ui->splashScreensView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(handleSplashScreenSelectionChanged(QItemSelection,QItemSelection)));
77
78 addSignalMapping(BarDescriptorDocument::name, m_ui->applicationName, SIGNAL(textChanged(QString)));
79 addSignalMapping(BarDescriptorDocument::description, m_ui->applicationDescription, SIGNAL(textChanged()));
80 addSignalMapping(BarDescriptorDocument::icon, m_ui->iconFilePath, SIGNAL(changed(QString)));
81 addSignalMapping(BarDescriptorDocument::splashScreens, m_splashScreenModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)));
82 addSignalMapping(BarDescriptorDocument::splashScreens, m_splashScreenModel, SIGNAL(rowsRemoved(QModelIndex,int,int)));
83 addSignalMapping(BarDescriptorDocument::splashScreens, m_splashScreenModel, SIGNAL(rowsInserted(QModelIndex,int,int)));
80}84}
8185
82BarDescriptorEditorEntryPointWidget::~BarDescriptorEditorEntryPointWidget()86BarDescriptorEditorEntryPointWidget::~BarDescriptorEditorEntryPointWidget()
@@ -84,68 +88,40 @@
84 delete m_ui;88 delete m_ui;
85}89}
8690
87void BarDescriptorEditorEntryPointWidget::clear()
88{
89 setPathChooserBlocked(m_ui->iconFilePath, QString());
90 setApplicationIconPreview(QString());
91
92 disconnect(m_splashScreenModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SIGNAL(changed()));
93 m_splashScreenModel->setStringList(QStringList());
94 connect(m_splashScreenModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SIGNAL(changed()));
95 setImagePreview(m_ui->splashScreenPreviewLabel, QString());
96}
97
98QString BarDescriptorEditorEntryPointWidget::applicationName() const
99{
100 return m_ui->applicationName->text();
101}
102
103void BarDescriptorEditorEntryPointWidget::setApplicationName(const QString &applicationName)
104{
105 setLineEditBlocked(m_ui->applicationName, applicationName);
106}
107
108QString BarDescriptorEditorEntryPointWidget::applicationDescription() const
109{
110 return m_ui->applicationDescription->toPlainText();
111}
112
113void BarDescriptorEditorEntryPointWidget::setApplicationDescription(const QString &applicationDescription)
114{
115 setTextEditBlocked(m_ui->applicationDescription, applicationDescription);
116}
117
118QString BarDescriptorEditorEntryPointWidget::applicationIconFileName() const
119{
120 return QFileInfo(m_ui->iconFilePath->path()).fileName();
121}
122
123void BarDescriptorEditorEntryPointWidget::setApplicationIcon(const QString &iconPath)
124{
125 // During file loading, the assets might not have been read yet
126 QMetaObject::invokeMethod(this, "setApplicationIconDelayed", Qt::QueuedConnection, Q_ARG(QString, iconPath));
127}
128
129QStringList BarDescriptorEditorEntryPointWidget::splashScreens() const
130{
131 QStringList result;
132
133 foreach (const QString &splashScreen, m_splashScreenModel->stringList())
134 result << QFileInfo(splashScreen).fileName();
135
136 return result;
137}
138
139void BarDescriptorEditorEntryPointWidget::appendSplashScreen(const QString &splashScreenPath)
140{
141 QMetaObject::invokeMethod(this, "appendSplashScreenDelayed", Qt::QueuedConnection, Q_ARG(QString, splashScreenPath));
142}
143
144void BarDescriptorEditorEntryPointWidget::setAssetsModel(QStandardItemModel *assetsModel)91void BarDescriptorEditorEntryPointWidget::setAssetsModel(QStandardItemModel *assetsModel)
145{92{
146 m_assetsModel = QWeakPointer<QStandardItemModel>(assetsModel);93 m_assetsModel = QWeakPointer<QStandardItemModel>(assetsModel);
147}94}
14895
96void BarDescriptorEditorEntryPointWidget::updateWidgetValue(BarDescriptorDocument::Tag tag, const QVariant &value)
97{
98 // During file loading, the assets might not have been read yet
99 if (tag == BarDescriptorDocument::icon) {
100 QMetaObject::invokeMethod(this, "setApplicationIconDelayed", Qt::QueuedConnection, Q_ARG(QString, value.toString()));
101 } else if (tag == BarDescriptorDocument::splashScreens) {
102 QStringList splashScreens = value.toStringList();
103 foreach (const QString &splashScreen, splashScreens)
104 QMetaObject::invokeMethod(this, "appendSplashScreenDelayed", Qt::QueuedConnection, Q_ARG(QString, splashScreen));
105 } else {
106 BarDescriptorEditorAbstractPanelWidget::updateWidgetValue(tag, value);
107 }
108}
109
110void BarDescriptorEditorEntryPointWidget::emitChanged(BarDescriptorDocument::Tag tag)
111{
112 if (tag == BarDescriptorDocument::icon) {
113 emit changed(tag, QFileInfo(m_ui->iconFilePath->path()).fileName());
114 } else if (tag == BarDescriptorDocument::splashScreens) {
115 QStringList list;
116 foreach (const QString &splashScreen, m_splashScreenModel->stringList())
117 list << QFileInfo(splashScreen).fileName();
118
119 emit changed(tag, list);
120 } else {
121 BarDescriptorEditorAbstractPanelWidget::emitChanged(tag);
122 }
123}
124
149void BarDescriptorEditorEntryPointWidget::setApplicationIconPreview(const QString &path)125void BarDescriptorEditorEntryPointWidget::setApplicationIconPreview(const QString &path)
150{126{
151 setImagePreview(m_ui->iconPreviewLabel, path);127 setImagePreview(m_ui->iconPreviewLabel, path);
@@ -164,8 +140,8 @@
164 setApplicationIconPreview(path);140 setApplicationIconPreview(path);
165 validateIconSize(path);141 validateIconSize(path);
166142
167 emit changed();143 if (!m_splashScreenModel->stringList().contains(m_prevIconPath))
168 emit imageRemoved(m_prevIconPath);144 emit imageRemoved(m_prevIconPath);
169145
170 m_prevIconPath = path;146 m_prevIconPath = path;
171 if (QFileInfo(path).exists())147 if (QFileInfo(path).exists())
@@ -200,7 +176,8 @@
200176
201 foreach (const QModelIndex &index, selectedIndexes) {177 foreach (const QModelIndex &index, selectedIndexes) {
202 QString path = m_splashScreenModel->data(index, Qt::DisplayRole).toString();178 QString path = m_splashScreenModel->data(index, Qt::DisplayRole).toString();
203 emit imageRemoved(path);179 if (path != m_ui->iconFilePath->path())
180 emit imageRemoved(path);
204181
205 m_splashScreenModel->removeRow(index.row());182 m_splashScreenModel->removeRow(index.row());
206 }183 }
@@ -230,11 +207,11 @@
230 if (fullSplashScreenPath.isEmpty())207 if (fullSplashScreenPath.isEmpty())
231 return;208 return;
232209
233 disconnect(m_splashScreenModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SIGNAL(changed()));210 blockSignalMapping(BarDescriptorDocument::splashScreens);
234 int rowCount = m_splashScreenModel->rowCount();211 int rowCount = m_splashScreenModel->rowCount();
235 m_splashScreenModel->insertRow(rowCount);212 m_splashScreenModel->insertRow(rowCount);
236 m_splashScreenModel->setData(m_splashScreenModel->index(rowCount), fullSplashScreenPath);213 m_splashScreenModel->setData(m_splashScreenModel->index(rowCount), fullSplashScreenPath);
237 connect(m_splashScreenModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SIGNAL(changed()));214 unblockSignalMapping(BarDescriptorDocument::splashScreens);
238}215}
239216
240void BarDescriptorEditorEntryPointWidget::setImagePreview(QLabel *previewLabel, const QString &path)217void BarDescriptorEditorEntryPointWidget::setImagePreview(QLabel *previewLabel, const QString &path)
@@ -309,9 +286,11 @@
309 if (fullIconPath.isEmpty())286 if (fullIconPath.isEmpty())
310 return;287 return;
311288
312 setPathChooserBlocked(m_ui->iconFilePath, fullIconPath);289 blockSignalMapping(BarDescriptorDocument::icon);
290 m_ui->iconFilePath->setPath(fullIconPath);
313 setApplicationIconPreview(fullIconPath);291 setApplicationIconPreview(fullIconPath);
314 validateIconSize(fullIconPath);292 validateIconSize(fullIconPath);
293 unblockSignalMapping(BarDescriptorDocument::icon);
315}294}
316295
317QString BarDescriptorEditorEntryPointWidget::localAssetPathFromDestination(const QString &destination)296QString BarDescriptorEditorEntryPointWidget::localAssetPathFromDestination(const QString &destination)
318297
=== modified file 'src/qnx/bardescriptoreditorentrypointwidget.h'
--- src/qnx/bardescriptoreditorentrypointwidget.h 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditorentrypointwidget.h 2014-06-16 09:46:37 +0000
@@ -45,9 +45,7 @@
45namespace Qnx {45namespace Qnx {
46namespace Internal {46namespace Internal {
4747
48namespace Ui {48namespace Ui { class BarDescriptorEditorEntryPointWidget; }
49class BarDescriptorEditorEntryPointWidget;
50}
5149
52class BarDescriptorEditorEntryPointWidget : public BarDescriptorEditorAbstractPanelWidget50class BarDescriptorEditorEntryPointWidget : public BarDescriptorEditorAbstractPanelWidget
53{51{
@@ -57,26 +55,16 @@
57 explicit BarDescriptorEditorEntryPointWidget(QWidget *parent = 0);55 explicit BarDescriptorEditorEntryPointWidget(QWidget *parent = 0);
58 ~BarDescriptorEditorEntryPointWidget();56 ~BarDescriptorEditorEntryPointWidget();
5957
60 void clear();
61
62 QString applicationName() const;
63 void setApplicationName(const QString &applicationName);
64
65 QString applicationDescription() const;
66 void setApplicationDescription(const QString &applicationDescription);
67
68 QString applicationIconFileName() const;
69 void setApplicationIcon(const QString &iconPath);
70
71 QStringList splashScreens() const;
72 void appendSplashScreen(const QString &splashScreenPath);
73
74 void setAssetsModel(QStandardItemModel *assetsModel);58 void setAssetsModel(QStandardItemModel *assetsModel);
7559
76signals:60signals:
77 void imageAdded(const QString &path);61 void imageAdded(const QString &path);
78 void imageRemoved(const QString &path);62 void imageRemoved(const QString &path);
7963
64protected:
65 void updateWidgetValue(BarDescriptorDocument::Tag tag, const QVariant &value);
66 void emitChanged(BarDescriptorDocument::Tag tag);
67
80private slots:68private slots:
81 void setApplicationIconDelayed(const QString &iconPath);69 void setApplicationIconDelayed(const QString &iconPath);
82 void setApplicationIconPreview(const QString &path);70 void setApplicationIconPreview(const QString &path);
8371
=== modified file 'src/qnx/bardescriptoreditorenvironmentwidget.cpp'
--- src/qnx/bardescriptoreditorenvironmentwidget.cpp 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditorenvironmentwidget.cpp 2014-06-16 09:46:37 +0000
@@ -43,7 +43,7 @@
4343
44 m_ui->environmentWidget->setBaseEnvironmentText(tr("Device Environment"));44 m_ui->environmentWidget->setBaseEnvironmentText(tr("Device Environment"));
4545
46 connect(m_ui->environmentWidget, SIGNAL(userChangesChanged()), this, SIGNAL(changed()));46 addSignalMapping(BarDescriptorDocument::env, m_ui->environmentWidget, SIGNAL(userChangesChanged()));
47}47}
4848
49BarDescriptorEditorEnvironmentWidget::~BarDescriptorEditorEnvironmentWidget()49BarDescriptorEditorEnvironmentWidget::~BarDescriptorEditorEnvironmentWidget()
@@ -51,23 +51,24 @@
51 delete m_ui;51 delete m_ui;
52}52}
5353
54void BarDescriptorEditorEnvironmentWidget::clear()54void BarDescriptorEditorEnvironmentWidget::updateWidgetValue(BarDescriptorDocument::Tag tag, const QVariant &value)
55{55{
56 disconnect(m_ui->environmentWidget, SIGNAL(userChangesChanged()), this, SIGNAL(changed()));56 if (tag != BarDescriptorDocument::env) {
57 m_ui->environmentWidget->setUserChanges(QList<Utils::EnvironmentItem>());57 BarDescriptorEditorAbstractPanelWidget::updateWidgetValue(tag, value);
58 connect(m_ui->environmentWidget, SIGNAL(userChangesChanged()), this, SIGNAL(changed()));58 return;
59}59 }
6060
61QList<Utils::EnvironmentItem> BarDescriptorEditorEnvironmentWidget::environment() const61 m_ui->environmentWidget->setUserChanges(value.value<QList<Utils::EnvironmentItem> >());
62{62}
63 return m_ui->environmentWidget->userChanges();63
64}64void BarDescriptorEditorEnvironmentWidget::emitChanged(BarDescriptorDocument::Tag tag)
6565{
66void BarDescriptorEditorEnvironmentWidget::appendEnvironmentItem(const Utils::EnvironmentItem &envItem)66 if (tag != BarDescriptorDocument::env) {
67{67 BarDescriptorEditorAbstractPanelWidget::emitChanged(tag);
68 disconnect(m_ui->environmentWidget, SIGNAL(userChangesChanged()), this, SIGNAL(changed()));68 return;
69 QList<Utils::EnvironmentItem> items = m_ui->environmentWidget->userChanges();69 }
70 items.append(envItem);70
71 m_ui->environmentWidget->setUserChanges(items);71 QVariant var;
72 connect(m_ui->environmentWidget, SIGNAL(userChangesChanged()), this, SIGNAL(changed()));72 var.setValue(m_ui->environmentWidget->userChanges());
73 emit changed(tag, var);
73}74}
7475
=== modified file 'src/qnx/bardescriptoreditorenvironmentwidget.h'
--- src/qnx/bardescriptoreditorenvironmentwidget.h 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditorenvironmentwidget.h 2014-06-16 09:46:37 +0000
@@ -39,9 +39,7 @@
39namespace Qnx {39namespace Qnx {
40namespace Internal {40namespace Internal {
4141
42namespace Ui {42namespace Ui { class BarDescriptorEditorEnvironmentWidget; }
43class BarDescriptorEditorEnvironmentWidget;
44}
4543
46class BarDescriptorEditorEnvironmentWidget : public BarDescriptorEditorAbstractPanelWidget44class BarDescriptorEditorEnvironmentWidget : public BarDescriptorEditorAbstractPanelWidget
47{45{
@@ -51,10 +49,9 @@
51 explicit BarDescriptorEditorEnvironmentWidget(QWidget *parent = 0);49 explicit BarDescriptorEditorEnvironmentWidget(QWidget *parent = 0);
52 ~BarDescriptorEditorEnvironmentWidget();50 ~BarDescriptorEditorEnvironmentWidget();
5351
54 void clear();52protected:
5553 void updateWidgetValue(BarDescriptorDocument::Tag tag, const QVariant &value);
56 QList<Utils::EnvironmentItem> environment() const;54 void emitChanged(BarDescriptorDocument::Tag tag);
57 void appendEnvironmentItem(const Utils::EnvironmentItem &envItem);
5855
59private:56private:
60 Ui::BarDescriptorEditorEnvironmentWidget *m_ui;57 Ui::BarDescriptorEditorEnvironmentWidget *m_ui;
6158
=== modified file 'src/qnx/bardescriptoreditorfactory.cpp'
--- src/qnx/bardescriptoreditorfactory.cpp 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditorfactory.cpp 2014-06-16 09:46:37 +0000
@@ -32,6 +32,7 @@
32#include "bardescriptoreditorfactory.h"32#include "bardescriptoreditorfactory.h"
3333
34#include "qnxconstants.h"34#include "qnxconstants.h"
35#include "bardescriptoreditor.h"
35#include "bardescriptoreditorwidget.h"36#include "bardescriptoreditorwidget.h"
3637
37#include <coreplugin/editormanager/editormanager.h>38#include <coreplugin/editormanager/editormanager.h>
@@ -44,8 +45,8 @@
44class BarDescriptorActionHandler : public TextEditor::TextEditorActionHandler45class BarDescriptorActionHandler : public TextEditor::TextEditorActionHandler
45{46{
46public:47public:
47 BarDescriptorActionHandler()48 BarDescriptorActionHandler(QObject *parent)
48 : TextEditor::TextEditorActionHandler(Constants::QNX_BAR_DESCRIPTOR_EDITOR_CONTEXT)49 : TextEditor::TextEditorActionHandler(parent, Constants::QNX_BAR_DESCRIPTOR_EDITOR_CONTEXT)
49 {50 {
50 }51 }
51protected:52protected:
@@ -58,20 +59,15 @@
5859
59BarDescriptorEditorFactory::BarDescriptorEditorFactory(QObject *parent)60BarDescriptorEditorFactory::BarDescriptorEditorFactory(QObject *parent)
60 : Core::IEditorFactory(parent)61 : Core::IEditorFactory(parent)
61 , m_actionHandler(new BarDescriptorActionHandler)
62{62{
63 setId(Constants::QNX_BAR_DESCRIPTOR_EDITOR_ID);63 setId(Constants::QNX_BAR_DESCRIPTOR_EDITOR_ID);
64 setDisplayName(tr("Bar descriptor editor"));64 setDisplayName(tr("Bar descriptor editor"));
65 addMimeType(Constants::QNX_BAR_DESCRIPTOR_MIME_TYPE);65 addMimeType(Constants::QNX_BAR_DESCRIPTOR_MIME_TYPE);
66}66 new BarDescriptorActionHandler(this);
6767}
68BarDescriptorEditorFactory::~BarDescriptorEditorFactory()68
69{69Core::IEditor *BarDescriptorEditorFactory::createEditor()
70 delete m_actionHandler;70{
71}71 BarDescriptorEditor *editor = new BarDescriptorEditor();
7272 return editor;
73Core::IEditor *BarDescriptorEditorFactory::createEditor(QWidget *parent)
74{
75 BarDescriptorEditorWidget *editorWidget = new BarDescriptorEditorWidget(parent, m_actionHandler);
76 return editorWidget->editor();
77}73}
7874
=== modified file 'src/qnx/bardescriptoreditorfactory.h'
--- src/qnx/bardescriptoreditorfactory.h 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditorfactory.h 2014-06-16 09:46:37 +0000
@@ -34,10 +34,6 @@
3434
35#include <coreplugin/editormanager/ieditorfactory.h>35#include <coreplugin/editormanager/ieditorfactory.h>
3636
37namespace TextEditor {
38class TextEditorActionHandler;
39}
40
41namespace Qnx {37namespace Qnx {
42namespace Internal {38namespace Internal {
4339
@@ -47,12 +43,8 @@
4743
48public:44public:
49 explicit BarDescriptorEditorFactory(QObject *parent = 0);45 explicit BarDescriptorEditorFactory(QObject *parent = 0);
50 ~BarDescriptorEditorFactory();46
5147 Core::IEditor *createEditor();
52 Core::IEditor *createEditor(QWidget *parent);
53
54private:
55 TextEditor::TextEditorActionHandler *m_actionHandler;
56};48};
5749
58} // namespace Internal50} // namespace Internal
5951
=== modified file 'src/qnx/bardescriptoreditorgeneralwidget.cpp'
--- src/qnx/bardescriptoreditorgeneralwidget.cpp 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditorgeneralwidget.cpp 2014-06-16 09:46:37 +0000
@@ -51,10 +51,10 @@
51 m_ui->chrome->addItem(tr("Standard"), QLatin1String("standard"));51 m_ui->chrome->addItem(tr("Standard"), QLatin1String("standard"));
52 m_ui->chrome->addItem(tr("None"), QLatin1String("none"));52 m_ui->chrome->addItem(tr("None"), QLatin1String("none"));
5353
54 connect(m_ui->orientation, SIGNAL(currentIndexChanged(int)), this, SIGNAL(changed()));54 addSignalMapping(BarDescriptorDocument::aspectRatio, m_ui->orientation, SIGNAL(currentIndexChanged(int)));
55 connect(m_ui->chrome, SIGNAL(currentIndexChanged(int)), this, SIGNAL(changed()));55 addSignalMapping(BarDescriptorDocument::systemChrome, m_ui->chrome, SIGNAL(currentIndexChanged(int)));
56 connect(m_ui->transparentMainWindow, SIGNAL(toggled(bool)), this, SIGNAL(changed()));56 addSignalMapping(BarDescriptorDocument::transparent, m_ui->transparentMainWindow, SIGNAL(toggled(bool)));
57 connect(m_ui->applicationArguments, SIGNAL(textChanged(QString)), this, SIGNAL(changed()));57 addSignalMapping(BarDescriptorDocument::arg, m_ui->applicationArguments, SIGNAL(textChanged(QString)));
58}58}
5959
60BarDescriptorEditorGeneralWidget::~BarDescriptorEditorGeneralWidget()60BarDescriptorEditorGeneralWidget::~BarDescriptorEditorGeneralWidget()
@@ -62,62 +62,41 @@
62 delete m_ui;62 delete m_ui;
63}63}
6464
65void BarDescriptorEditorGeneralWidget::clear()65void BarDescriptorEditorGeneralWidget::updateWidgetValue(BarDescriptorDocument::Tag tag, const QVariant &value)
66{66{
67 setComboBoxBlocked(m_ui->orientation, m_ui->orientation->findData(QLatin1String("")));67 if (tag == BarDescriptorDocument::aspectRatio) {
68 setComboBoxBlocked(m_ui->chrome, m_ui->chrome->findData(QLatin1String("none")));68 m_ui->orientation->setCurrentIndex(m_ui->orientation->findData(value));
69 setCheckBoxBlocked(m_ui->transparentMainWindow, false);69 } else if (tag == BarDescriptorDocument::autoOrients) {
70 setLineEditBlocked(m_ui->applicationArguments, QString());70 if (value.toString() == QLatin1String("true")) {
71}71 blockSignalMapping(BarDescriptorDocument::aspectRatio);
7272 m_ui->orientation->setCurrentIndex(m_ui->orientation->findData(QLatin1String("auto-orient")));
73QString BarDescriptorEditorGeneralWidget::orientation() const73 unblockSignalMapping(BarDescriptorDocument::aspectRatio);
74{74 }
75 return m_ui->orientation->itemData(m_ui->orientation->currentIndex()).toString();75 } else if (tag == BarDescriptorDocument::arg) {
76}76 m_ui->applicationArguments->setText(value.toStringList().join(QLatin1String(" ")));
7777 } else {
78void BarDescriptorEditorGeneralWidget::setOrientation(const QString &orientation)78 BarDescriptorEditorAbstractPanelWidget::updateWidgetValue(tag, value);
79{79 }
80 int index = m_ui->orientation->findData(orientation);80}
81 QTC_ASSERT(index >= 0, return);81
8282void BarDescriptorEditorGeneralWidget::emitChanged(BarDescriptorDocument::Tag tag)
83 setComboBoxBlocked(m_ui->orientation, index);83{
84}84 if (tag == BarDescriptorDocument::aspectRatio) {
8585 QString value = m_ui->orientation->itemData(m_ui->orientation->currentIndex()).toString();
86QString BarDescriptorEditorGeneralWidget::chrome() const86 if (value == QLatin1String("auto-orient")) {
87{87 emit changed(BarDescriptorDocument::aspectRatio, QLatin1String(""));
88 return m_ui->chrome->itemData(m_ui->chrome->currentIndex()).toString();88 emit changed(BarDescriptorDocument::autoOrients, QLatin1String("true"));
89}89 return;
9090 } else if (!value.isEmpty()) {
91void BarDescriptorEditorGeneralWidget::setChrome(const QString &chrome)91 emit changed(BarDescriptorDocument::aspectRatio, value);
92{92 emit changed(BarDescriptorDocument::autoOrients, QLatin1String("false"));
93 int index = m_ui->chrome->findData(chrome);93 } else {
94 QTC_ASSERT(index >= 0, return);94 emit changed(BarDescriptorDocument::aspectRatio, value);
9595 emit changed(BarDescriptorDocument::autoOrients, QLatin1String(""));
96 setComboBoxBlocked(m_ui->chrome, index);96 }
97}97 } else if (tag == BarDescriptorDocument::arg) {
9898 emit changed(tag, m_ui->applicationArguments->text().split(QLatin1Char(' ')));
99bool BarDescriptorEditorGeneralWidget::transparent() const99 } else {
100{100 BarDescriptorEditorAbstractPanelWidget::emitChanged(tag);
101 return m_ui->transparentMainWindow->isChecked();101 }
102}
103
104void BarDescriptorEditorGeneralWidget::setTransparent(bool transparent)
105{
106 setCheckBoxBlocked(m_ui->transparentMainWindow, transparent);
107}
108
109void BarDescriptorEditorGeneralWidget::appendApplicationArgument(const QString &argument)
110{
111 QString completeArguments = m_ui->applicationArguments->text();
112 if (!completeArguments.isEmpty())
113 completeArguments.append(QLatin1Char(' '));
114 completeArguments.append(argument);
115
116 setLineEditBlocked(m_ui->applicationArguments, completeArguments);
117}
118
119QStringList BarDescriptorEditorGeneralWidget::applicationArguments() const
120{
121 // TODO: Should probably handle "argument with spaces within quotes"
122 return m_ui->applicationArguments->text().split(QLatin1Char(' '));
123}102}
124103
=== modified file 'src/qnx/bardescriptoreditorgeneralwidget.h'
--- src/qnx/bardescriptoreditorgeneralwidget.h 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditorgeneralwidget.h 2014-06-16 09:46:37 +0000
@@ -37,9 +37,7 @@
37namespace Qnx {37namespace Qnx {
38namespace Internal {38namespace Internal {
3939
40namespace Ui {40namespace Ui { class BarDescriptorEditorGeneralWidget; }
41class BarDescriptorEditorGeneralWidget;
42}
4341
44class BarDescriptorEditorGeneralWidget : public BarDescriptorEditorAbstractPanelWidget42class BarDescriptorEditorGeneralWidget : public BarDescriptorEditorAbstractPanelWidget
45{43{
@@ -49,19 +47,9 @@
49 explicit BarDescriptorEditorGeneralWidget(QWidget *parent = 0);47 explicit BarDescriptorEditorGeneralWidget(QWidget *parent = 0);
50 ~BarDescriptorEditorGeneralWidget();48 ~BarDescriptorEditorGeneralWidget();
5149
52 void clear();50protected:
5351 void updateWidgetValue(BarDescriptorDocument::Tag tag, const QVariant &value);
54 QString orientation() const;52 void emitChanged(BarDescriptorDocument::Tag tag);
55 void setOrientation(const QString &orientation);
56
57 QString chrome() const;
58 void setChrome(const QString &chrome);
59
60 bool transparent() const;
61 void setTransparent(bool transparent);
62
63 void appendApplicationArgument(const QString &argument);
64 QStringList applicationArguments() const;
6553
66private:54private:
67 Ui::BarDescriptorEditorGeneralWidget *m_ui;55 Ui::BarDescriptorEditorGeneralWidget *m_ui;
6856
=== modified file 'src/qnx/bardescriptoreditorpackageinformationwidget.cpp'
--- src/qnx/bardescriptoreditorpackageinformationwidget.cpp 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditorpackageinformationwidget.cpp 2014-06-16 09:46:37 +0000
@@ -45,55 +45,12 @@
45 QRegExpValidator *versionNumberValidator = new QRegExpValidator(versionNumberRegExp, this);45 QRegExpValidator *versionNumberValidator = new QRegExpValidator(versionNumberRegExp, this);
46 m_ui->packageVersion->setValidator(versionNumberValidator);46 m_ui->packageVersion->setValidator(versionNumberValidator);
4747
48 connect(m_ui->packageId, SIGNAL(textChanged(QString)), this, SIGNAL(changed()));48 addSignalMapping(BarDescriptorDocument::id, m_ui->packageId, SIGNAL(textChanged(QString)));
49 connect(m_ui->packageVersion, SIGNAL(textChanged(QString)), this, SIGNAL(changed()));49 addSignalMapping(BarDescriptorDocument::versionNumber, m_ui->packageVersion, SIGNAL(textChanged(QString)));
50 connect(m_ui->packageBuildId, SIGNAL(textChanged(QString)), this, SIGNAL(changed()));50 addSignalMapping(BarDescriptorDocument::buildId, m_ui->packageBuildId, SIGNAL(textChanged(QString)));
51}51}
5252
53BarDescriptorEditorPackageInformationWidget::~BarDescriptorEditorPackageInformationWidget()53BarDescriptorEditorPackageInformationWidget::~BarDescriptorEditorPackageInformationWidget()
54{54{
55 delete m_ui;55 delete m_ui;
56}56}
57
58void BarDescriptorEditorPackageInformationWidget::clear()
59{
60 setLineEditBlocked(m_ui->packageId, QString());
61 setLineEditBlocked(m_ui->packageVersion, QString());
62 setLineEditBlocked(m_ui->packageBuildId, QString());
63}
64
65QString BarDescriptorEditorPackageInformationWidget::packageId() const
66{
67 return m_ui->packageId->text();
68}
69
70void BarDescriptorEditorPackageInformationWidget::setPackageId(const QString &packageId)
71{
72 setLineEditBlocked(m_ui->packageId, packageId);
73}
74
75QString BarDescriptorEditorPackageInformationWidget::packageVersion() const
76{
77 QString version = m_ui->packageVersion->text();
78 int pos = 0;
79 if (m_ui->packageVersion->validator()->validate(version, pos) == QValidator::Intermediate) {
80 if (version.endsWith(QLatin1Char('.')))
81 version = version.left(version.size() - 1);
82 }
83 return version;
84}
85
86void BarDescriptorEditorPackageInformationWidget::setPackageVersion(const QString &packageVersion)
87{
88 setLineEditBlocked(m_ui->packageVersion, packageVersion);
89}
90
91QString BarDescriptorEditorPackageInformationWidget::packageBuildId() const
92{
93 return m_ui->packageBuildId->text();
94}
95
96void BarDescriptorEditorPackageInformationWidget::setPackageBuildId(const QString &packageBuildId)
97{
98 setLineEditBlocked(m_ui->packageBuildId, packageBuildId);
99}
10057
=== modified file 'src/qnx/bardescriptoreditorpackageinformationwidget.h'
--- src/qnx/bardescriptoreditorpackageinformationwidget.h 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditorpackageinformationwidget.h 2014-06-16 09:46:37 +0000
@@ -37,9 +37,7 @@
37namespace Qnx {37namespace Qnx {
38namespace Internal {38namespace Internal {
3939
40namespace Ui {40namespace Ui { class BarDescriptorEditorPackageInformationWidget; }
41class BarDescriptorEditorPackageInformationWidget;
42}
4341
44class BarDescriptorEditorPackageInformationWidget : public BarDescriptorEditorAbstractPanelWidget42class BarDescriptorEditorPackageInformationWidget : public BarDescriptorEditorAbstractPanelWidget
45{43{
@@ -49,17 +47,6 @@
49 explicit BarDescriptorEditorPackageInformationWidget(QWidget *parent = 0);47 explicit BarDescriptorEditorPackageInformationWidget(QWidget *parent = 0);
50 ~BarDescriptorEditorPackageInformationWidget();48 ~BarDescriptorEditorPackageInformationWidget();
5149
52 void clear();
53
54 QString packageId() const;
55 void setPackageId(const QString &packageId);
56
57 QString packageVersion() const;
58 void setPackageVersion(const QString &packageVersion);
59
60 QString packageBuildId() const;
61 void setPackageBuildId(const QString &packageBuildId);
62
63private:50private:
64 Ui::BarDescriptorEditorPackageInformationWidget *m_ui;51 Ui::BarDescriptorEditorPackageInformationWidget *m_ui;
65};52};
6653
=== modified file 'src/qnx/bardescriptoreditorpermissionswidget.cpp'
--- src/qnx/bardescriptoreditorpermissionswidget.cpp 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditorpermissionswidget.cpp 2014-06-16 09:46:37 +0000
@@ -48,7 +48,8 @@
4848
49 connect(m_ui->selectAllPermissions, SIGNAL(clicked()), m_permissionsModel, SLOT(checkAll()));49 connect(m_ui->selectAllPermissions, SIGNAL(clicked()), m_permissionsModel, SLOT(checkAll()));
50 connect(m_ui->deselectAllPermissions, SIGNAL(clicked()), m_permissionsModel, SLOT(uncheckAll()));50 connect(m_ui->deselectAllPermissions, SIGNAL(clicked()), m_permissionsModel, SLOT(uncheckAll()));
51 connect(m_permissionsModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SIGNAL(changed()));51
52 addSignalMapping(BarDescriptorDocument::action, m_permissionsModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)));
52}53}
5354
54BarDescriptorEditorPermissionsWidget::~BarDescriptorEditorPermissionsWidget()55BarDescriptorEditorPermissionsWidget::~BarDescriptorEditorPermissionsWidget()
@@ -56,13 +57,6 @@
56 delete m_ui;57 delete m_ui;
57}58}
5859
59void BarDescriptorEditorPermissionsWidget::clear()
60{
61 disconnect(m_permissionsModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SIGNAL(changed()));
62 m_permissionsModel->uncheckAll();
63 connect(m_permissionsModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SIGNAL(changed()));
64}
65
66QStringList BarDescriptorEditorPermissionsWidget::checkedPermissions() const60QStringList BarDescriptorEditorPermissionsWidget::checkedPermissions() const
67{61{
68 return m_permissionsModel->checkedIdentifiers();62 return m_permissionsModel->checkedIdentifiers();
@@ -70,7 +64,29 @@
7064
71void BarDescriptorEditorPermissionsWidget::checkPermission(const QString &identifier)65void BarDescriptorEditorPermissionsWidget::checkPermission(const QString &identifier)
72{66{
73 disconnect(m_permissionsModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SIGNAL(changed()));67 blockSignalMapping(BarDescriptorDocument::action);
74 m_permissionsModel->checkPermission(identifier);68 m_permissionsModel->checkPermission(identifier);
75 connect(m_permissionsModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SIGNAL(changed()));69 unblockSignalMapping(BarDescriptorDocument::action);
70}
71
72void BarDescriptorEditorPermissionsWidget::updateWidgetValue(BarDescriptorDocument::Tag tag, const QVariant &value)
73{
74 if (tag != BarDescriptorDocument::action) {
75 BarDescriptorEditorAbstractPanelWidget::updateWidgetValue(tag, value);
76 return;
77 }
78
79 QStringList permissions = value.toStringList();
80 Q_FOREACH (const QString &permission, permissions)
81 checkPermission(permission);
82}
83
84void BarDescriptorEditorPermissionsWidget::emitChanged(BarDescriptorDocument::Tag tag)
85{
86 if (tag != BarDescriptorDocument::action) {
87 BarDescriptorEditorAbstractPanelWidget::emitChanged(tag);
88 return;
89 }
90
91 emit changed(tag, checkedPermissions());
76}92}
7793
=== modified file 'src/qnx/bardescriptoreditorpermissionswidget.h'
--- src/qnx/bardescriptoreditorpermissionswidget.h 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditorpermissionswidget.h 2014-06-16 09:46:37 +0000
@@ -39,9 +39,7 @@
3939
40class BarDescriptorPermissionsModel;40class BarDescriptorPermissionsModel;
4141
42namespace Ui {42namespace Ui { class BarDescriptorEditorPermissionsWidget; }
43class BarDescriptorEditorPermissionsWidget;
44}
4543
46class BarDescriptorEditorPermissionsWidget : public BarDescriptorEditorAbstractPanelWidget44class BarDescriptorEditorPermissionsWidget : public BarDescriptorEditorAbstractPanelWidget
47{45{
@@ -51,12 +49,14 @@
51 explicit BarDescriptorEditorPermissionsWidget(QWidget *parent = 0);49 explicit BarDescriptorEditorPermissionsWidget(QWidget *parent = 0);
52 ~BarDescriptorEditorPermissionsWidget();50 ~BarDescriptorEditorPermissionsWidget();
5351
54 void clear();52protected:
53 void updateWidgetValue(BarDescriptorDocument::Tag tag, const QVariant &value);
54 void emitChanged(BarDescriptorDocument::Tag tag);
5555
56private:
56 QStringList checkedPermissions() const;57 QStringList checkedPermissions() const;
57 void checkPermission(const QString &identifier);58 void checkPermission(const QString &identifier);
5859
59private:
60 Ui::BarDescriptorEditorPermissionsWidget *m_ui;60 Ui::BarDescriptorEditorPermissionsWidget *m_ui;
6161
62 BarDescriptorPermissionsModel *m_permissionsModel;62 BarDescriptorPermissionsModel *m_permissionsModel;
6363
=== modified file 'src/qnx/bardescriptoreditorwidget.cpp'
--- src/qnx/bardescriptoreditorwidget.cpp 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditorwidget.cpp 2014-06-16 09:46:37 +0000
@@ -44,20 +44,19 @@
44#include <coreplugin/icore.h>44#include <coreplugin/icore.h>
45#include <projectexplorer/iprojectproperties.h>45#include <projectexplorer/iprojectproperties.h>
46#include <projectexplorer/projectwindow.h>46#include <projectexplorer/projectwindow.h>
47#include <projectexplorer/task.h>
48#include <projectexplorer/taskhub.h>
47#include <texteditor/plaintexteditor.h>49#include <texteditor/plaintexteditor.h>
48#include <texteditor/texteditoractionhandler.h>
49#include <texteditor/texteditorsettings.h>50#include <texteditor/texteditorsettings.h>
50#include <texteditor/texteditorconstants.h>51#include <texteditor/texteditorconstants.h>
52#include <utils/qtcassert.h>
5153
52using namespace Qnx;54using namespace Qnx;
53using namespace Qnx::Internal;55using namespace Qnx::Internal;
5456
55BarDescriptorEditorWidget::BarDescriptorEditorWidget(57BarDescriptorEditorWidget::BarDescriptorEditorWidget(BarDescriptorEditor *editor, QWidget *parent)
56 QWidget *parent, TextEditor::TextEditorActionHandler *handler)
57 : QStackedWidget(parent)58 : QStackedWidget(parent)
58 , m_editor(0)59 , m_editor(editor)
59 , m_handler(handler)
60 , m_dirty(false)
61{60{
62 Core::IContext *myContext = new Core::IContext(this);61 Core::IContext *myContext = new Core::IContext(this);
63 myContext->setWidget(this);62 myContext->setWidget(this);
@@ -70,6 +69,25 @@
70 initSourcePage();69 initSourcePage();
7170
72 setCurrentIndex(0);71 setCurrentIndex(0);
72
73 connect(m_entryPointWidget, SIGNAL(changed(BarDescriptorDocument::Tag,QVariant)), barDescriptorDocument(), SLOT(setValue(BarDescriptorDocument::Tag,QVariant)));
74 connect(m_packageInformationWidget, SIGNAL(changed(BarDescriptorDocument::Tag,QVariant)), barDescriptorDocument(), SLOT(setValue(BarDescriptorDocument::Tag,QVariant)));
75 connect(m_authorInformationWidget, SIGNAL(changed(BarDescriptorDocument::Tag,QVariant)), barDescriptorDocument(), SLOT(setValue(BarDescriptorDocument::Tag,QVariant)));
76 connect(m_generalWidget, SIGNAL(changed(BarDescriptorDocument::Tag,QVariant)), barDescriptorDocument(), SLOT(setValue(BarDescriptorDocument::Tag,QVariant)));
77 connect(m_permissionsWidget, SIGNAL(changed(BarDescriptorDocument::Tag,QVariant)), barDescriptorDocument(), SLOT(setValue(BarDescriptorDocument::Tag,QVariant)));
78 connect(m_environmentWidget, SIGNAL(changed(BarDescriptorDocument::Tag,QVariant)), barDescriptorDocument(), SLOT(setValue(BarDescriptorDocument::Tag,QVariant)));
79 connect(m_assetsWidget, SIGNAL(changed(BarDescriptorDocument::Tag,QVariant)), barDescriptorDocument(), SLOT(setValue(BarDescriptorDocument::Tag,QVariant)));
80
81 connect(barDescriptorDocument(), SIGNAL(changed(BarDescriptorDocument::Tag,QVariant)), m_entryPointWidget, SLOT(setValue(BarDescriptorDocument::Tag,QVariant)));
82 connect(barDescriptorDocument(), SIGNAL(changed(BarDescriptorDocument::Tag,QVariant)), m_packageInformationWidget, SLOT(setValue(BarDescriptorDocument::Tag,QVariant)));
83 connect(barDescriptorDocument(), SIGNAL(changed(BarDescriptorDocument::Tag,QVariant)), m_authorInformationWidget, SLOT(setValue(BarDescriptorDocument::Tag,QVariant)));
84 connect(barDescriptorDocument(), SIGNAL(changed(BarDescriptorDocument::Tag,QVariant)), m_generalWidget, SLOT(setValue(BarDescriptorDocument::Tag,QVariant)));
85 connect(barDescriptorDocument(), SIGNAL(changed(BarDescriptorDocument::Tag,QVariant)), m_permissionsWidget, SLOT(setValue(BarDescriptorDocument::Tag,QVariant)));
86 connect(barDescriptorDocument(), SIGNAL(changed(BarDescriptorDocument::Tag,QVariant)), m_environmentWidget, SLOT(setValue(BarDescriptorDocument::Tag,QVariant)));
87 connect(barDescriptorDocument(), SIGNAL(changed(BarDescriptorDocument::Tag,QVariant)), m_assetsWidget, SLOT(setValue(BarDescriptorDocument::Tag,QVariant)));
88
89 connect(m_xmlSourceWidget, SIGNAL(textChanged()), this, SLOT(updateDocumentContent()));
90 connect(barDescriptorDocument(), SIGNAL(changed()), this, SLOT(updateSourceView()));
73}91}
7492
75void BarDescriptorEditorWidget::initGeneralPage()93void BarDescriptorEditorWidget::initGeneralPage()
@@ -98,10 +116,6 @@
98 authorInformationPanel->setDisplayName(tr("Author Information"));116 authorInformationPanel->setDisplayName(tr("Author Information"));
99 authorInformationPanel->setWidget(m_authorInformationWidget);117 authorInformationPanel->setWidget(m_authorInformationWidget);
100 generalPanel->addPropertiesPanel(authorInformationPanel);118 generalPanel->addPropertiesPanel(authorInformationPanel);
101
102 connect(m_entryPointWidget, SIGNAL(changed()), this, SLOT(setDirty()));
103 connect(m_packageInformationWidget, SIGNAL(changed()), this, SLOT(setDirty()));
104 connect(m_authorInformationWidget, SIGNAL(changed()), this, SLOT(setDirty()));
105}119}
106120
107void BarDescriptorEditorWidget::initApplicationPage()121void BarDescriptorEditorWidget::initApplicationPage()
@@ -130,10 +144,6 @@
130 environmentPanel->setDisplayName(tr("Environment"));144 environmentPanel->setDisplayName(tr("Environment"));
131 environmentPanel->setWidget(m_environmentWidget);145 environmentPanel->setWidget(m_environmentWidget);
132 applicationPanel->addPropertiesPanel(environmentPanel);146 applicationPanel->addPropertiesPanel(environmentPanel);
133
134 connect(m_generalWidget, SIGNAL(changed()), this, SLOT(setDirty()));
135 connect(m_permissionsWidget, SIGNAL(changed()), this, SLOT(setDirty()));
136 connect(m_environmentWidget, SIGNAL(changed()), this, SLOT(setDirty()));
137}147}
138148
139void BarDescriptorEditorWidget::initAssetsPage()149void BarDescriptorEditorWidget::initAssetsPage()
@@ -148,8 +158,6 @@
148 assetsPropertiesPanel->setWidget(m_assetsWidget);158 assetsPropertiesPanel->setWidget(m_assetsWidget);
149 assetsPanel->addPropertiesPanel(assetsPropertiesPanel);159 assetsPanel->addPropertiesPanel(assetsPropertiesPanel);
150160
151 connect(m_assetsWidget, SIGNAL(changed()), this, SLOT(setDirty()));
152
153 m_entryPointWidget->setAssetsModel(m_assetsWidget->assetsModel());161 m_entryPointWidget->setAssetsModel(m_assetsWidget->assetsModel());
154 connect(m_entryPointWidget, SIGNAL(imageAdded(QString)), m_assetsWidget, SLOT(addAsset(QString)));162 connect(m_entryPointWidget, SIGNAL(imageAdded(QString)), m_assetsWidget, SLOT(addAsset(QString)));
155 connect(m_entryPointWidget, SIGNAL(imageRemoved(QString)), m_assetsWidget, SLOT(removeAsset(QString)));163 connect(m_entryPointWidget, SIGNAL(imageRemoved(QString)), m_assetsWidget, SLOT(removeAsset(QString)));
@@ -161,9 +169,7 @@
161 addWidget(m_xmlSourceWidget);169 addWidget(m_xmlSourceWidget);
162170
163 TextEditor::TextEditorSettings::initializeEditor(m_xmlSourceWidget);171 TextEditor::TextEditorSettings::initializeEditor(m_xmlSourceWidget);
164 m_handler->setupActions(m_xmlSourceWidget);
165 m_xmlSourceWidget->configure(QLatin1String(Constants::QNX_BAR_DESCRIPTOR_MIME_TYPE));172 m_xmlSourceWidget->configure(QLatin1String(Constants::QNX_BAR_DESCRIPTOR_MIME_TYPE));
166 connect(m_xmlSourceWidget, SIGNAL(textChanged()), this, SLOT(setDirty()));
167}173}
168174
169void BarDescriptorEditorWidget::initPanelSize(ProjectExplorer::PanelsWidget *panelsWidget)175void BarDescriptorEditorWidget::initPanelSize(ProjectExplorer::PanelsWidget *panelsWidget)
@@ -172,51 +178,6 @@
172 panelsWidget->widget()->setMinimumWidth(0);178 panelsWidget->widget()->setMinimumWidth(0);
173}179}
174180
175Core::IEditor *BarDescriptorEditorWidget::editor() const
176{
177 if (!m_editor) {
178 m_editor = const_cast<BarDescriptorEditorWidget *>(this)->createEditor();
179 connect(this, SIGNAL(changed()), m_editor->document(), SIGNAL(changed()));
180 }
181
182 return m_editor;
183}
184
185BarDescriptorEditorPackageInformationWidget *BarDescriptorEditorWidget::packageInformationWidget() const
186{
187 return m_packageInformationWidget;
188}
189
190BarDescriptorEditorAuthorInformationWidget *BarDescriptorEditorWidget::authorInformationWidget() const
191{
192 return m_authorInformationWidget;
193}
194
195BarDescriptorEditorEntryPointWidget *BarDescriptorEditorWidget::entryPointWidget() const
196{
197 return m_entryPointWidget;
198}
199
200BarDescriptorEditorGeneralWidget *BarDescriptorEditorWidget::generalWidget() const
201{
202 return m_generalWidget;
203}
204
205BarDescriptorEditorPermissionsWidget *BarDescriptorEditorWidget::permissionsWidget() const
206{
207 return m_permissionsWidget;
208}
209
210BarDescriptorEditorEnvironmentWidget *BarDescriptorEditorWidget::environmentWidget() const
211{
212 return m_environmentWidget;
213}
214
215BarDescriptorEditorAssetsWidget *BarDescriptorEditorWidget::assetsWidget() const
216{
217 return m_assetsWidget;
218}
219
220TextEditor::BaseTextEditorWidget *BarDescriptorEditorWidget::sourceWidget() const181TextEditor::BaseTextEditorWidget *BarDescriptorEditorWidget::sourceWidget() const
221{182{
222 return m_xmlSourceWidget;183 return m_xmlSourceWidget;
@@ -224,57 +185,45 @@
224185
225void BarDescriptorEditorWidget::setFilePath(const QString &filePath)186void BarDescriptorEditorWidget::setFilePath(const QString &filePath)
226{187{
227 Core::IDocument *doc = m_xmlSourceWidget->editorDocument();188 Core::IDocument *doc = m_xmlSourceWidget->baseTextDocument();
228 if (doc) {189 if (doc)
229 doc->setFilePath(filePath);190 doc->setFilePath(filePath);
230 // setFilePath() call leads to a textChanged() signal emitted191}
231 // and therefore having this editor-widget to become dirty192
232 // therefore we have to explicitly unset the dirty flag193void BarDescriptorEditorWidget::updateDocumentContent()
233 setDirty(false);194{
195 ProjectExplorer::TaskHub::clearTasks(Constants::QNX_TASK_CATEGORY_BARDESCRIPTOR);
196 QString errorMsg;
197 int errorLine;
198
199 disconnect(barDescriptorDocument(), SIGNAL(changed()), this, SLOT(updateSourceView()));
200 bool result = barDescriptorDocument()->loadContent(m_xmlSourceWidget->toPlainText(), true, &errorMsg, &errorLine);
201 connect(barDescriptorDocument(), SIGNAL(changed()), this, SLOT(updateSourceView()));
202
203 if (!result) {
204 ProjectExplorer::TaskHub::addTask(ProjectExplorer::Task::Error, errorMsg, Constants::QNX_TASK_CATEGORY_BARDESCRIPTOR,
205 Utils::FileName::fromString(barDescriptorDocument()->filePath()), errorLine);
206 ProjectExplorer::TaskHub::requestPopup();
234 }207 }
235}208}
236209
237QString BarDescriptorEditorWidget::xmlSource() const210void BarDescriptorEditorWidget::updateSourceView()
238{211{
239 return m_xmlSourceWidget->toPlainText();212 bool blocked = m_xmlSourceWidget->blockSignals(true);
240}213
241214 int line;
242void BarDescriptorEditorWidget::setXmlSource(const QString &xmlSource)215 int column;
243{216 int position = m_xmlSourceWidget->position();
244 bool blocked = m_xmlSourceWidget->blockSignals(true);217 m_xmlSourceWidget->convertPosition(position, &line, &column);
245 m_xmlSourceWidget->setPlainText(xmlSource);218
246 m_xmlSourceWidget->blockSignals(blocked);219 m_xmlSourceWidget->setPlainText(barDescriptorDocument()->xmlSource());
247}220
248221 m_xmlSourceWidget->gotoLine(line, column);
249bool BarDescriptorEditorWidget::isDirty() const222
250{223 m_xmlSourceWidget->blockSignals(blocked);
251 return m_dirty;224}
252}225
253226BarDescriptorDocument *BarDescriptorEditorWidget::barDescriptorDocument() const
254void BarDescriptorEditorWidget::clear()227{
255{228 return qobject_cast<BarDescriptorDocument*>(m_editor->document());
256 m_entryPointWidget->clear();
257 m_packageInformationWidget->clear();
258 m_authorInformationWidget->clear();
259
260 m_generalWidget->clear();
261 m_permissionsWidget->clear();
262 m_environmentWidget->clear();
263
264 m_assetsWidget->clear();
265
266 bool blocked = m_xmlSourceWidget->blockSignals(true);
267 m_xmlSourceWidget->clear();
268 m_xmlSourceWidget->blockSignals(blocked);
269}
270
271void BarDescriptorEditorWidget::setDirty(bool dirty)
272{
273 m_dirty = dirty;
274 emit changed();
275}
276
277BarDescriptorEditor *BarDescriptorEditorWidget::createEditor()
278{
279 return new BarDescriptorEditor(this);
280}229}
281230
=== modified file 'src/qnx/bardescriptoreditorwidget.h'
--- src/qnx/bardescriptoreditorwidget.h 2014-03-18 10:51:43 +0000
+++ src/qnx/bardescriptoreditorwidget.h 2014-06-16 09:46:37 +0000
@@ -36,17 +36,12 @@
3636
37#include <QStackedWidget>37#include <QStackedWidget>
3838
39namespace Core {39namespace Core { class IEditor; }
40class IEditor;
41}
4240
43namespace ProjectExplorer {41namespace ProjectExplorer { class PanelsWidget; }
44class PanelsWidget;
45}
4642
47namespace TextEditor {43namespace TextEditor {
48class PlainTextEditorWidget;44class PlainTextEditorWidget;
49class TextEditorActionHandler;
50class BaseTextEditorWidget;45class BaseTextEditorWidget;
51}46}
5247
@@ -67,37 +62,21 @@
67 Q_OBJECT62 Q_OBJECT
6863
69public:64public:
70 explicit BarDescriptorEditorWidget(QWidget *parent, TextEditor::TextEditorActionHandler *handler);65 explicit BarDescriptorEditorWidget(BarDescriptorEditor *editor, QWidget *parent = 0);
71
72 Core::IEditor *editor() const;
73
74 BarDescriptorEditorEntryPointWidget *entryPointWidget() const;
75 BarDescriptorEditorPackageInformationWidget *packageInformationWidget() const;
76 BarDescriptorEditorAuthorInformationWidget *authorInformationWidget() const;
77
78 BarDescriptorEditorGeneralWidget *generalWidget() const;
79 BarDescriptorEditorPermissionsWidget *permissionsWidget() const;
80 BarDescriptorEditorEnvironmentWidget *environmentWidget() const;
81
82 BarDescriptorEditorAssetsWidget *assetsWidget() const;
8366
84 TextEditor::BaseTextEditorWidget *sourceWidget() const;67 TextEditor::BaseTextEditorWidget *sourceWidget() const;
8568
86 void setFilePath(const QString &filePath);69 void setFilePath(const QString &filePath);
87 QString xmlSource() const;
88 void setXmlSource(const QString &xmlSource);
89
90 bool isDirty() const;
91 void clear();
92
93public slots:
94 void setDirty(bool dirty = true);
9570
96signals:71signals:
97 void changed();72 void changed(BarDescriptorDocument::Tag tag, const QVariant &value);
73
74private slots:
75 void updateDocumentContent();
76 void updateSourceView();
9877
99private:78private:
100 BarDescriptorEditor *createEditor();79 BarDescriptorDocument *barDescriptorDocument() const;
10180
102 void initGeneralPage();81 void initGeneralPage();
103 void initApplicationPage();82 void initApplicationPage();
@@ -105,10 +84,7 @@
105 void initSourcePage();84 void initSourcePage();
106 void initPanelSize(ProjectExplorer::PanelsWidget *panelsWidget);85 void initPanelSize(ProjectExplorer::PanelsWidget *panelsWidget);
10786
108 mutable Core::IEditor *m_editor;87 Core::IEditor *m_editor;
109
110 TextEditor::TextEditorActionHandler *m_handler;
111 bool m_dirty;
11288
113 // New UI89 // New UI
114 BarDescriptorEditorEntryPointWidget *m_entryPointWidget;90 BarDescriptorEditorEntryPointWidget *m_entryPointWidget;
11591
=== modified file 'src/qnx/blackberryabstractdeploystep.h'
--- src/qnx/blackberryabstractdeploystep.h 2014-03-18 10:51:43 +0000
+++ src/qnx/blackberryabstractdeploystep.h 2014-06-16 09:46:37 +0000
@@ -43,9 +43,7 @@
43class QEventLoop;43class QEventLoop;
44QT_END_NAMESPACE44QT_END_NAMESPACE
4545
46namespace Utils {46namespace Utils { class QtcProcess; }
47class QtcProcess;
48}
4947
50namespace Qnx {48namespace Qnx {
51namespace Internal {49namespace Internal {
5250
=== added file 'src/qnx/blackberryapilevelconfiguration.cpp'
--- src/qnx/blackberryapilevelconfiguration.cpp 1970-01-01 00:00:00 +0000
+++ src/qnx/blackberryapilevelconfiguration.cpp 2014-06-16 09:46:37 +0000
@@ -0,0 +1,504 @@
1/**************************************************************************
2**
3** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
4**
5** Contact: BlackBerry (qt@blackberry.com)
6** Contact: KDAB (info@kdab.com)
7**
8** This file is part of Qt Creator.
9**
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.
17**
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.
25**
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.
29**
30****************************************************************************/
31
32#include "blackberryapilevelconfiguration.h"
33#include "blackberryconfigurationmanager.h"
34#include "blackberryqtversion.h"
35
36#include "qnxtoolchain.h"
37#include "qnxconstants.h"
38
39#include <utils/qtcassert.h>
40
41#include <projectexplorer/projectexplorerconstants.h>
42#include <projectexplorer/kitmanager.h>
43#include <projectexplorer/kitinformation.h>
44#include <projectexplorer/toolchainmanager.h>
45#include <projectexplorer/gcctoolchain.h>
46
47#include <qtsupport/baseqtversion.h>
48#include <qtsupport/qtversionmanager.h>
49#include <qtsupport/qtkitinformation.h>
50
51#include <qmakeprojectmanager/qmakekitinformation.h>
52
53#include <debugger/debuggeritemmanager.h>
54#include <debugger/debuggerkitinformation.h>
55
56#include <coreplugin/icore.h>
57
58#include <QFileInfo>
59#include <QDir>
60#include <QMessageBox>
61
62using namespace ProjectExplorer;
63using namespace QtSupport;
64using namespace Utils;
65using namespace Debugger;
66
67namespace Qnx {
68namespace Internal {
69
70const QLatin1String NDKEnvFileKey("NDKEnvFile");
71const QLatin1String NDKPathKey("NDKPath");
72const QLatin1String NDKDisplayNameKey("NDKDisplayName");
73const QLatin1String NDKTargetKey("NDKTarget");
74const QLatin1String NDKHostKey("NDKHost");
75const QLatin1String NDKVersionKey("NDKVersion");
76const QLatin1String NDKAutoDetectionSourceKey("NDKAutoDetectionSource");
77const QLatin1String NDKAutoDetectedKey("NDKAutoDetectedKey");
78
79#ifdef WITH_TESTS
80bool BlackBerryApiLevelConfiguration::m_fakeConfig = false;
81#endif
82
83BlackBerryApiLevelConfiguration::BlackBerryApiLevelConfiguration(const NdkInstallInformation &ndkInstallInfo)
84{
85 QString envFilePath = QnxUtils::envFilePath(ndkInstallInfo.path, ndkInstallInfo.version);
86 QTC_ASSERT(!envFilePath.isEmpty(), return);
87 m_ndkEnvFile = Utils::FileName::fromString(envFilePath);
88 m_displayName = ndkInstallInfo.name;
89 m_qnxEnv = QnxUtils::qnxEnvironmentFromNdkFile(m_ndkEnvFile.toString());
90 QString sep = QString::fromLatin1("/qnx6");
91 // The QNX_TARGET value is using Unix-like separator on all platforms.
92 m_targetName = ndkInstallInfo.target.split(sep).first().split(QLatin1Char('/')).last();
93 m_qnxHost = ndkInstallInfo.host;
94 m_sysRoot = FileName::fromString(ndkInstallInfo.target);
95 m_version = BlackBerryVersionNumber(ndkInstallInfo.version);
96 m_autoDetectionSource = Utils::FileName::fromString(ndkInstallInfo.installationXmlFilePath);
97 ctor();
98}
99
100BlackBerryApiLevelConfiguration::BlackBerryApiLevelConfiguration(const FileName &ndkEnvFile)
101 : m_autoDetectionSource(Utils::FileName())
102{
103 QTC_ASSERT(!QFileInfo(ndkEnvFile.toString()).isDir(), return);
104 m_ndkEnvFile = ndkEnvFile;
105 QString ndkPath = m_ndkEnvFile.parentDir().toString();
106 m_displayName = ndkPath.split(QDir::separator()).last();
107 m_qnxEnv = QnxUtils::qnxEnvironmentFromNdkFile(m_ndkEnvFile.toString());
108
109 QString ndkTarget;
110 foreach (const Utils::EnvironmentItem &item, m_qnxEnv) {
111 if (item.name == QLatin1String("QNX_TARGET"))
112 ndkTarget = item.value;
113
114 else if (item.name == QLatin1String("QNX_HOST"))
115 m_qnxHost = item.value;
116
117 }
118
119 // The QNX_TARGET value is using Unix-like separator on all platforms.
120 QString sep = QString::fromLatin1("/qnx6");
121 m_targetName = ndkTarget.split(sep).first().split(QLatin1Char('/')).last();
122
123 if (QDir(ndkTarget).exists())
124 m_sysRoot = FileName::fromString(ndkTarget);
125
126 m_version = BlackBerryVersionNumber::fromNdkEnvFileName(QFileInfo(m_ndkEnvFile.toString()).baseName());
127 if (m_version.isEmpty())
128 m_version = BlackBerryVersionNumber::fromTargetName(m_targetName);
129
130 ctor();
131}
132
133BlackBerryApiLevelConfiguration::BlackBerryApiLevelConfiguration(const QVariantMap &data)
134{
135 QString envFilePath = data.value(NDKEnvFileKey).toString();
136 QTC_ASSERT(!envFilePath.isEmpty(), return);
137 m_ndkEnvFile = Utils::FileName::fromString(envFilePath);
138 m_displayName = data.value(NDKDisplayNameKey).toString();
139 m_qnxEnv = QnxUtils::qnxEnvironmentFromNdkFile(m_ndkEnvFile.toString());
140 QString sep = QString::fromLatin1("/qnx6");
141 // The QNX_TARGET value is using Unix-like separator on all platforms.
142 m_targetName = data.value(NDKTargetKey).toString().split(sep).first().split(QLatin1Char('/')).last();
143 m_qnxHost = data.value(NDKHostKey).toString();
144 m_sysRoot = FileName::fromString(data.value(NDKTargetKey).toString());
145 m_version = BlackBerryVersionNumber(data.value(NDKVersionKey).toString());
146 if (data.value(QLatin1String(NDKAutoDetectedKey)).toBool())
147 m_autoDetectionSource = Utils::FileName::fromString(data.value(NDKAutoDetectionSourceKey).toString());
148
149 ctor();
150}
151
152void BlackBerryApiLevelConfiguration::ctor()
153{
154 FileName qmake4Path = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/qmake")));
155 FileName qmake5Path = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/qt5/qmake")));
156 FileName gccPath = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/qcc")));
157 FileName deviceGdbPath = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/ntoarm-gdb")));
158 FileName simulatorGdbPath = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/ntox86-gdb")));
159
160 if (qmake4Path.toFileInfo().exists())
161 m_qmake4BinaryFile = qmake4Path;
162
163 if (qmake5Path.toFileInfo().exists())
164 m_qmake5BinaryFile = qmake5Path;
165
166 if (gccPath.toFileInfo().exists())
167 m_gccCompiler = gccPath;
168
169 if (deviceGdbPath.toFileInfo().exists())
170 m_deviceDebugger = deviceGdbPath;
171
172 if (simulatorGdbPath.toFileInfo().exists())
173 m_simulatorDebugger = simulatorGdbPath;
174}
175
176QString BlackBerryApiLevelConfiguration::ndkPath() const
177{
178 return m_ndkEnvFile.parentDir().toString();
179}
180
181QString BlackBerryApiLevelConfiguration::displayName() const
182{
183 return m_displayName;
184}
185
186QString BlackBerryApiLevelConfiguration::targetName() const
187{
188 return m_targetName;
189}
190
191QString BlackBerryApiLevelConfiguration::qnxHost() const
192{
193 return m_qnxHost;
194}
195
196BlackBerryVersionNumber BlackBerryApiLevelConfiguration::version() const
197{
198 return m_version;
199}
200
201bool BlackBerryApiLevelConfiguration::isAutoDetected() const
202{
203 return !m_autoDetectionSource.isEmpty();
204}
205
206Utils::FileName BlackBerryApiLevelConfiguration::autoDetectionSource() const
207{
208 return m_autoDetectionSource;
209}
210
211bool BlackBerryApiLevelConfiguration::isActive() const
212{
213 foreach (Kit *kit, KitManager::kits()) {
214 if (kit->isAutoDetected() &&
215 kit->autoDetectionSource() == m_ndkEnvFile.toString())
216 return true;
217 }
218
219 return false;
220}
221
222bool BlackBerryApiLevelConfiguration::isValid() const
223{
224#ifdef WITH_TESTS
225 if (BlackBerryApiLevelConfiguration::fakeConfig())
226 return true;
227#endif
228
229 return ((!m_qmake4BinaryFile.isEmpty() || !m_qmake5BinaryFile.isEmpty()) && !m_gccCompiler.isEmpty()
230 && !m_deviceDebugger.isEmpty() && !m_simulatorDebugger.isEmpty()
231 && m_ndkEnvFile.toFileInfo().exists() && (m_autoDetectionSource.isEmpty() ||
232 m_autoDetectionSource.toFileInfo().exists())
233 && m_sysRoot.toFileInfo().exists());
234}
235
236FileName BlackBerryApiLevelConfiguration::ndkEnvFile() const
237{
238 return m_ndkEnvFile;
239}
240
241FileName BlackBerryApiLevelConfiguration::qmake4BinaryFile() const
242{
243 return m_qmake4BinaryFile;
244}
245
246FileName BlackBerryApiLevelConfiguration::qmake5BinaryFile() const
247{
248 return m_qmake5BinaryFile;
249}
250
251FileName BlackBerryApiLevelConfiguration::gccCompiler() const
252{
253 return m_gccCompiler;
254}
255
256FileName BlackBerryApiLevelConfiguration::deviceDebuger() const
257{
258 return m_deviceDebugger;
259}
260
261FileName BlackBerryApiLevelConfiguration::simulatorDebuger() const
262{
263 return m_simulatorDebugger;
264}
265
266FileName BlackBerryApiLevelConfiguration::sysRoot() const
267{
268 return m_sysRoot;
269}
270
271QList<Utils::EnvironmentItem> BlackBerryApiLevelConfiguration::qnxEnv() const
272{
273 return m_qnxEnv;
274}
275
276QVariantMap BlackBerryApiLevelConfiguration::toMap() const
277{
278 QVariantMap data;
279 data.insert(QLatin1String(Qnx::Constants::QNX_BB_KEY_CONFIGURATION_TYPE),
280 QLatin1String(Qnx::Constants::QNX_BB_APILEVEL_TYPE));
281 data.insert(QLatin1String(NDKEnvFileKey), m_ndkEnvFile.toString());
282 data.insert(QLatin1String(NDKDisplayNameKey), m_displayName);
283 data.insert(QLatin1String(NDKPathKey), ndkPath());
284 data.insert(QLatin1String(NDKTargetKey), m_sysRoot.toString());
285 data.insert(QLatin1String(NDKHostKey), m_qnxHost);
286 data.insert(QLatin1String(NDKVersionKey), m_version.toString());
287 data.insert(QLatin1String(NDKAutoDetectionSourceKey), m_autoDetectionSource.toString());
288 data.insert(QLatin1String(NDKAutoDetectedKey), isAutoDetected());
289 return data;
290}
291
292QnxAbstractQtVersion *BlackBerryApiLevelConfiguration::createQtVersion(
293 const FileName &qmakePath, Qnx::QnxArchitecture arch, const QString &versionName)
294{
295 QnxAbstractQtVersion *version = new BlackBerryQtVersion(
296 arch, qmakePath, true, QString(), m_ndkEnvFile.toString());
297 version->setDisplayName(tr("Qt %1 for %2").arg(version->qtVersionString(), versionName));
298 QtVersionManager::addVersion(version);
299 return version;
300}
301
302QnxToolChain *BlackBerryApiLevelConfiguration::createToolChain(
303 ProjectExplorer::Abi abi, const QString &versionName)
304{
305 QnxToolChain* toolChain = new QnxToolChain(ToolChain::AutoDetection);
306 toolChain->setDisplayName(tr("QCC for %1").arg(versionName));
307 toolChain->setCompilerCommand(m_gccCompiler);
308 toolChain->setNdkPath(ndkPath());
309 if (abi.isValid())
310 toolChain->setTargetAbi(abi);
311 ToolChainManager::registerToolChain(toolChain);
312 return toolChain;
313}
314
315QVariant BlackBerryApiLevelConfiguration::createDebuggerItem(
316 QList<ProjectExplorer::Abi> abis, Qnx::QnxArchitecture arch, const QString &versionName)
317{
318 Utils::FileName command = arch == X86 ? m_simulatorDebugger : m_deviceDebugger;
319 DebuggerItem debugger;
320 debugger.setCommand(command);
321 debugger.setEngineType(GdbEngineType);
322 debugger.setAutoDetected(true);
323 debugger.setAbis(abis);
324 debugger.setDisplayName(tr("Debugger for %1").arg(versionName));
325 return DebuggerItemManager::registerDebugger(debugger);
326}
327
328Kit *BlackBerryApiLevelConfiguration::createKit(
329 QnxAbstractQtVersion *version, QnxToolChain *toolChain, const QVariant &debuggerItemId)
330{
331 Kit *kit = new Kit;
332 bool isSimulator = version->architecture() == X86;
333
334 QtKitInformation::setQtVersion(kit, version);
335 ToolChainKitInformation::setToolChain(kit, toolChain);
336
337 if (debuggerItemId.isValid())
338 DebuggerKitInformation::setDebugger(kit, debuggerItemId);
339
340 if (version->qtVersion().majorVersion == 4) {
341 if (isSimulator) {
342 QmakeProjectManager::QmakeKitInformation::setMkspec(
343 kit, FileName::fromLatin1("blackberry-x86-qcc"));
344 } else {
345 QmakeProjectManager::QmakeKitInformation::setMkspec(
346 kit, FileName::fromLatin1("blackberry-armv7le-qcc"));
347 }
348 }
349
350 DeviceTypeKitInformation::setDeviceTypeId(kit, Constants::QNX_BB_OS_TYPE);
351 SysRootKitInformation::setSysRoot(kit, m_sysRoot);
352
353 kit->setDisplayName(version->displayName());
354 kit->setIconPath(FileName::fromString(QLatin1String(Constants::QNX_BB_CATEGORY_ICON)));
355
356 kit->setAutoDetected(true);
357 kit->setAutoDetectionSource(m_ndkEnvFile.toString());
358 kit->setMutable(DeviceKitInformation::id(), true);
359
360 kit->setSticky(QtKitInformation::id(), true);
361 kit->setSticky(ToolChainKitInformation::id(), true);
362 kit->setSticky(DeviceTypeKitInformation::id(), true);
363 kit->setSticky(SysRootKitInformation::id(), true);
364 kit->setSticky(DebuggerKitInformation::id(), true);
365 kit->setSticky(QmakeProjectManager::QmakeKitInformation::id(), true);
366
367 KitManager::registerKit(kit);
368 return kit;
369}
370
371bool BlackBerryApiLevelConfiguration::activate()
372{
373 if (!isValid()) {
374 if (!m_autoDetectionSource.isEmpty())
375 return false;
376
377 QString errorMessage = tr("The following errors occurred while activating target: %1").arg(m_targetName);
378 if (m_qmake4BinaryFile.isEmpty() && m_qmake5BinaryFile.isEmpty())
379 errorMessage += QLatin1Char('\n') + tr("- No Qt version found.");
380
381 if (m_gccCompiler.isEmpty())
382 errorMessage += QLatin1Char('\n') + tr("- No GCC compiler found.");
383
384 if (m_deviceDebugger.isEmpty())
385 errorMessage += QLatin1Char('\n') + tr("- No GDB debugger found for BB10 Device.");
386
387 if (!m_simulatorDebugger.isEmpty())
388 errorMessage += QLatin1Char('\n') + tr("- No GDB debugger found for BB10 Simulator.");
389
390 QMessageBox::warning(Core::ICore::mainWindow(), tr("Cannot Set up BB10 Configuration"),
391 errorMessage, QMessageBox::Ok);
392 return false;
393 }
394
395 if (isActive())
396 return true;
397
398 deactivate(); // cleaning-up artifacts autodetected by old QtCreator versions
399
400 QString armVersionName = tr("BlackBerry %1 Device").arg(m_version.toString());
401 QString x86VersionName = tr("BlackBerry %1 Simulator").arg(m_version.toString());
402
403 // create versions
404 QnxAbstractQtVersion *qt4ArmVersion = 0;
405 QnxAbstractQtVersion *qt4X86Version = 0;
406 QnxAbstractQtVersion *qt5ArmVersion = 0;
407 QnxAbstractQtVersion *qt5X86Version = 0;
408 QList<Abi> armAbis;
409 QList<Abi> x86Abis;
410
411 if (!m_qmake4BinaryFile.isEmpty()) {
412 qt4ArmVersion = createQtVersion(m_qmake4BinaryFile, Qnx::ArmLeV7, armVersionName);
413 armAbis << qt4ArmVersion->qtAbis();
414 qt4X86Version = createQtVersion(m_qmake4BinaryFile, Qnx::X86, x86VersionName);
415 x86Abis << qt4X86Version->qtAbis();
416 }
417 if (!m_qmake5BinaryFile.isEmpty()) {
418 qt5ArmVersion = createQtVersion(m_qmake5BinaryFile, Qnx::ArmLeV7, armVersionName);
419 foreach (Abi abi, qt5ArmVersion->qtAbis())
420 if (!armAbis.contains(abi))
421 armAbis << abi;
422 qt5X86Version = createQtVersion(m_qmake5BinaryFile, Qnx::X86, x86VersionName);
423 foreach (Abi abi, qt5X86Version->qtAbis())
424 if (!x86Abis.contains(abi))
425 x86Abis << abi;
426 }
427
428 // create toolchains
429 QnxToolChain *armToolChain = createToolChain(
430 !armAbis.isEmpty() ? armAbis.first() : Abi(), armVersionName);
431 QnxToolChain *x86ToolChain = createToolChain(
432 !x86Abis.isEmpty() ? x86Abis.first() : Abi(), x86VersionName);
433
434 // create debuggers
435 QVariant armDebuggerItemId = createDebuggerItem(armAbis, Qnx::ArmLeV7, armVersionName);
436 QVariant x86DebuggerItemId = createDebuggerItem(x86Abis, Qnx::X86, x86VersionName);
437
438 // create kits
439 if (qt4ArmVersion)
440 createKit(qt4ArmVersion, armToolChain, armDebuggerItemId);
441 if (qt4X86Version)
442 createKit(qt4X86Version, x86ToolChain, x86DebuggerItemId);
443 if (qt5ArmVersion)
444 createKit(qt5ArmVersion, armToolChain, armDebuggerItemId);
445 if (qt5X86Version)
446 createKit(qt5X86Version, x86ToolChain, x86DebuggerItemId);
447
448 BlackBerryConfigurationManager::instance()->emitSettingsChanged();
449
450 return true;
451}
452
453void BlackBerryApiLevelConfiguration::deactivate()
454{
455 QList<BaseQtVersion *> qtvToRemove;
456 QList<ToolChain *> tcToRemove;
457 QList<const DebuggerItem *> dbgToRemove;
458
459 foreach (Kit *kit, KitManager::kits()) {
460 if (kit->isAutoDetected() &&
461 kit->autoDetectionSource() == ndkEnvFile().toString()) {
462 BaseQtVersion *version = QtKitInformation::qtVersion(kit);
463 ToolChain *toolChain = ToolChainKitInformation::toolChain(kit);
464 const DebuggerItem *debugger = DebuggerKitInformation::debugger(kit);
465 // Kit's Qt version, tool chain or debugger might be used by other BB kits
466 // generated for the same API level that are not yet unregistered. This triggers warning outputs.
467 // Let's unregistered/removed them later once all API level kits are unregistered.
468 if (version && !qtvToRemove.contains(version))
469 qtvToRemove << version;
470 if (toolChain && !tcToRemove.contains(toolChain))
471 tcToRemove << toolChain;
472 if (debugger && !dbgToRemove.contains(debugger))
473 dbgToRemove << debugger;
474
475 KitManager::deregisterKit(kit);
476 }
477 }
478
479 foreach (BaseQtVersion *qtv, qtvToRemove)
480 QtVersionManager::removeVersion(qtv);
481
482 foreach (ToolChain *tc, tcToRemove)
483 ToolChainManager::deregisterToolChain(tc);
484
485 foreach (const DebuggerItem *debugger, dbgToRemove)
486 DebuggerItemManager::deregisterDebugger(debugger->id());
487
488 BlackBerryConfigurationManager::instance()->emitSettingsChanged();
489}
490
491#ifdef WITH_TESTS
492void BlackBerryApiLevelConfiguration::setFakeConfig(bool fakeConfig)
493{
494 m_fakeConfig = fakeConfig;
495}
496
497bool BlackBerryApiLevelConfiguration::fakeConfig()
498{
499 return m_fakeConfig;
500}
501#endif
502
503} // namespace Internal
504} // namespace Qnx
0505
=== added file 'src/qnx/blackberryapilevelconfiguration.h'
--- src/qnx/blackberryapilevelconfiguration.h 1970-01-01 00:00:00 +0000
+++ src/qnx/blackberryapilevelconfiguration.h 2014-06-16 09:46:37 +0000
@@ -0,0 +1,125 @@
1/**************************************************************************
2**
3** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
4**
5** Contact: BlackBerry (qt@blackberry.com)
6** Contact: KDAB (info@kdab.com)
7**
8** This file is part of Qt Creator.
9**
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.
17**
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.
25**
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.
29**
30****************************************************************************/
31
32#ifndef BLACKBERRYCONFIGURATIONS_H
33#define BLACKBERRYCONFIGURATIONS_H
34
35#include "qnxutils.h"
36#include "blackberryversionnumber.h"
37#include "qnxconstants.h"
38
39#include <utils/environment.h>
40#include <utils/fileutils.h>
41
42#include <projectexplorer/abi.h>
43#include <projectexplorer/kit.h>
44
45#include <QObject>
46#include <QCoreApplication>
47
48namespace QtSupport { class BaseQtVersion; }
49namespace Debugger { class DebuggerItem; }
50
51namespace Qnx {
52namespace Internal {
53
54class QnxAbstractQtVersion;
55class QnxToolChain;
56
57class BlackBerryApiLevelConfiguration
58{
59 Q_DECLARE_TR_FUNCTIONS(Qnx::Internal::BlackBerryApiLevelConfiguration)
60public:
61 BlackBerryApiLevelConfiguration(const NdkInstallInformation &ndkInstallInfo);
62 BlackBerryApiLevelConfiguration(const Utils::FileName &ndkEnvFile);
63 BlackBerryApiLevelConfiguration(const QVariantMap &data);
64 bool activate();
65 void deactivate();
66 QString ndkPath() const;
67 QString displayName() const;
68 QString targetName() const;
69 QString qnxHost() const;
70 BlackBerryVersionNumber version() const;
71 bool isAutoDetected() const;
72 Utils::FileName autoDetectionSource() const;
73 bool isActive() const;
74 bool isValid() const;
75 Utils::FileName ndkEnvFile() const;
76 Utils::FileName qmake4BinaryFile() const;
77 Utils::FileName qmake5BinaryFile() const;
78 Utils::FileName gccCompiler() const;
79 Utils::FileName deviceDebuger() const;
80 Utils::FileName simulatorDebuger() const;
81 Utils::FileName sysRoot() const;
82 QList<Utils::EnvironmentItem> qnxEnv() const;
83 QVariantMap toMap() const;
84
85#ifdef WITH_TESTS
86 static void setFakeConfig(bool fakeConfig);
87 static bool fakeConfig();
88#endif
89
90private:
91 QString m_displayName;
92 QString m_targetName;
93 QString m_qnxHost;
94 BlackBerryVersionNumber m_version;
95 Utils::FileName m_autoDetectionSource;
96 Utils::FileName m_ndkEnvFile;
97 Utils::FileName m_qmake4BinaryFile;
98 Utils::FileName m_qmake5BinaryFile;
99 Utils::FileName m_gccCompiler;
100 Utils::FileName m_deviceDebugger;
101 Utils::FileName m_simulatorDebugger;
102 Utils::FileName m_sysRoot;
103 QList<Utils::EnvironmentItem> m_qnxEnv;
104
105 void ctor();
106
107 QnxAbstractQtVersion* createQtVersion(
108 const Utils::FileName &qmakePath, Qnx::QnxArchitecture arch, const QString &versionName);
109 QnxToolChain* createToolChain(
110 ProjectExplorer::Abi abi, const QString &versionName);
111 QVariant createDebuggerItem(
112 QList<ProjectExplorer::Abi> abis, Qnx::QnxArchitecture arch, const QString &versionName);
113 ProjectExplorer::Kit* createKit(
114 QnxAbstractQtVersion* version, QnxToolChain* toolChain,
115 const QVariant &debuggerItemId);
116
117#ifdef WITH_TESTS
118 static bool m_fakeConfig;
119#endif
120};
121
122} // namespace Internal
123} // namespace Qnx
124
125#endif // BLACKBERRYCONFIGURATIONS_H
0126
=== modified file 'src/qnx/blackberryapplicationrunner.cpp'
--- src/qnx/blackberryapplicationrunner.cpp 2014-03-18 10:51:43 +0000
+++ src/qnx/blackberryapplicationrunner.cpp 2014-06-16 09:46:37 +0000
@@ -35,17 +35,25 @@
35#include "blackberrydeviceconnectionmanager.h"35#include "blackberrydeviceconnectionmanager.h"
36#include "blackberryrunconfiguration.h"36#include "blackberryrunconfiguration.h"
37#include "blackberrylogprocessrunner.h"37#include "blackberrylogprocessrunner.h"
38#include "blackberrydeviceinformation.h"
38#include "qnxconstants.h"39#include "qnxconstants.h"
3940
41#include <coreplugin/icore.h>
42#include <projectexplorer/kit.h>
40#include <projectexplorer/target.h>43#include <projectexplorer/target.h>
41#include <qmakeprojectmanager/qmakebuildconfiguration.h>44#include <qmakeprojectmanager/qmakebuildconfiguration.h>
45#include <debugger/debuggerrunconfigurationaspect.h>
42#include <ssh/sshremoteprocessrunner.h>46#include <ssh/sshremoteprocessrunner.h>
43#include <utils/qtcassert.h>47#include <utils/qtcassert.h>
4448
49#include <QMessageBox>
45#include <QTimer>50#include <QTimer>
46#include <QDir>51#include <QDir>
52#include <QTemporaryFile>
4753
48namespace {54namespace {
55enum { debugCheckQmlJSArgs = 0 };
56
49bool parseRunningState(const QString &line)57bool parseRunningState(const QString &line)
50{58{
51 QTC_ASSERT(line.startsWith(QLatin1String("result::")), return false);59 QTC_ASSERT(line.startsWith(QLatin1String("result::")), return false);
@@ -57,18 +65,21 @@
57using namespace Qnx;65using namespace Qnx;
58using namespace Qnx::Internal;66using namespace Qnx::Internal;
5967
60BlackBerryApplicationRunner::BlackBerryApplicationRunner(bool debugMode, BlackBerryRunConfiguration *runConfiguration, QObject *parent)68BlackBerryApplicationRunner::BlackBerryApplicationRunner(const BlackBerryApplicationRunner::LaunchFlags &launchFlags, BlackBerryRunConfiguration *runConfiguration, QObject *parent)
61 : QObject(parent)69 : QObject(parent)
62 , m_debugMode(debugMode)70 , m_launchFlags(launchFlags)
63 , m_pid(-1)71 , m_pid(-1)
64 , m_appId(QString())72 , m_appId(QString())
65 , m_running(false)73 , m_running(false)
66 , m_stopping(false)74 , m_stopping(false)
67 , m_launchProcess(0)75 , m_launchProcess(0)
68 , m_stopProcess(0)76 , m_stopProcess(0)
77 , m_deviceInfo(0)
69 , m_logProcessRunner(0)78 , m_logProcessRunner(0)
70 , m_runningStateTimer(new QTimer(this))79 , m_runningStateTimer(new QTimer(this))
71 , m_runningStateProcess(0)80 , m_runningStateProcess(0)
81 , m_qmlDebugServerPort(0)
82 , m_checkQmlJsDebugArgumentsProcess(0)
72{83{
73 QTC_ASSERT(runConfiguration, return);84 QTC_ASSERT(runConfiguration, return);
7485
@@ -77,6 +88,9 @@
77 m_environment = buildConfig->environment();88 m_environment = buildConfig->environment();
78 m_deployCmd = m_environment.searchInPath(QLatin1String(Constants::QNX_BLACKBERRY_DEPLOY_CMD));89 m_deployCmd = m_environment.searchInPath(QLatin1String(Constants::QNX_BLACKBERRY_DEPLOY_CMD));
7990
91 QFileInfo fi(target->kit()->autoDetectionSource());
92 m_bbApiLevelVersion = BlackBerryVersionNumber::fromNdkEnvFileName(fi.baseName());
93
80 m_device = BlackBerryDeviceConfiguration::device(target->kit());94 m_device = BlackBerryDeviceConfiguration::device(target->kit());
81 m_barPackage = runConfiguration->barPackage();95 m_barPackage = runConfiguration->barPackage();
8296
@@ -84,6 +98,11 @@
84 m_sshParams = m_device->sshParameters();98 m_sshParams = m_device->sshParameters();
85 m_sshParams.authenticationType = QSsh::SshConnectionParameters::AuthenticationTypePublicKey;99 m_sshParams.authenticationType = QSsh::SshConnectionParameters::AuthenticationTypePublicKey;
86100
101 Debugger::DebuggerRunConfigurationAspect *aspect =
102 runConfiguration->extraAspect<Debugger::DebuggerRunConfigurationAspect>();
103 if (aspect)
104 m_qmlDebugServerPort = aspect->qmlDebugServerPort();
105
87 m_runningStateTimer->setInterval(3000);106 m_runningStateTimer->setInterval(3000);
88 m_runningStateTimer->setSingleShot(true);107 m_runningStateTimer->setSingleShot(true);
89 connect(m_runningStateTimer, SIGNAL(timeout()), this, SLOT(determineRunningState()));108 connect(m_runningStateTimer, SIGNAL(timeout()), this, SLOT(determineRunningState()));
@@ -97,14 +116,14 @@
97{116{
98 if (!BlackBerryDeviceConnectionManager::instance()->isConnected(m_device->id())) {117 if (!BlackBerryDeviceConnectionManager::instance()->isConnected(m_device->id())) {
99 connect(BlackBerryDeviceConnectionManager::instance(), SIGNAL(deviceConnected()),118 connect(BlackBerryDeviceConnectionManager::instance(), SIGNAL(deviceConnected()),
100 this, SLOT(launchApplication()));119 this, SLOT(checkDeployMode()));
101 connect(BlackBerryDeviceConnectionManager::instance(), SIGNAL(deviceDisconnected(Core::Id)),120 connect(BlackBerryDeviceConnectionManager::instance(), SIGNAL(deviceDisconnected(Core::Id)),
102 this, SLOT(disconnectFromDeviceSignals(Core::Id)));121 this, SLOT(disconnectFromDeviceSignals(Core::Id)));
103 connect(BlackBerryDeviceConnectionManager::instance(), SIGNAL(connectionOutput(Core::Id,QString)),122 connect(BlackBerryDeviceConnectionManager::instance(), SIGNAL(connectionOutput(Core::Id,QString)),
104 this, SLOT(displayConnectionOutput(Core::Id,QString)));123 this, SLOT(displayConnectionOutput(Core::Id,QString)));
105 BlackBerryDeviceConnectionManager::instance()->connectDevice(m_device->id());124 BlackBerryDeviceConnectionManager::instance()->connectDevice(m_device->id());
106 } else {125 } else {
107 launchApplication();126 checkDeployMode();
108 }127 }
109}128}
110129
@@ -131,6 +150,52 @@
131 emit output(msg, Utils::StdErrFormat);150 emit output(msg, Utils::StdErrFormat);
132}151}
133152
153void BlackBerryApplicationRunner::checkDeviceRuntimeVersion(int status)
154{
155 if (status != BlackBerryNdkProcess::Success) {
156 emit output(tr("Cannot determine device runtime version."), Utils::StdErrFormat);
157 return;
158 }
159
160 if (m_bbApiLevelVersion.isEmpty()) {
161 emit output(tr("Cannot determine API level version."), Utils::StdErrFormat);
162 checkQmlJsDebugArguments();
163 return;
164 }
165
166 const QString runtimeVersion = m_deviceInfo->scmBundle();
167 if (m_bbApiLevelVersion.toString() != runtimeVersion) {
168 const QMessageBox::StandardButton answer =
169 QMessageBox::question(Core::ICore::mainWindow(),
170 tr("Confirmation"),
171 tr("The device runtime version(%1) does not match "
172 "the API level version(%2).\n"
173 "This may cause unexpected behavior when debugging.\n"
174 "Do you want to continue anyway?")
175 .arg(runtimeVersion, m_bbApiLevelVersion.toString()),
176 QMessageBox::Yes | QMessageBox::No);
177
178 if (answer == QMessageBox::No) {
179 emit startFailed(tr("API level version does not match Runtime version."));
180 return;
181 }
182 }
183
184 checkQmlJsDebugArguments();
185}
186
187void BlackBerryApplicationRunner::queryDeviceInformation()
188{
189 if (!m_deviceInfo) {
190 m_deviceInfo = new BlackBerryDeviceInformation(this);
191 connect(m_deviceInfo, SIGNAL(finished(int)),
192 this, SLOT(checkDeviceRuntimeVersion(int)));
193 }
194
195 m_deviceInfo->setDeviceTarget(m_sshParams.host, m_sshParams.password);
196 emit output(tr("Querying device runtime version..."), Utils::StdOutFormat);
197}
198
134void BlackBerryApplicationRunner::startFinished(int exitCode, QProcess::ExitStatus exitStatus)199void BlackBerryApplicationRunner::startFinished(int exitCode, QProcess::ExitStatus exitStatus)
135{200{
136 if (exitCode == 0 && exitStatus == QProcess::NormalExit && m_pid > -1) {201 if (exitCode == 0 && exitStatus == QProcess::NormalExit && m_pid > -1) {
@@ -219,7 +284,7 @@
219{284{
220 if (m_device->id() == deviceId) {285 if (m_device->id() == deviceId) {
221 disconnect(BlackBerryDeviceConnectionManager::instance(), SIGNAL(deviceConnected()),286 disconnect(BlackBerryDeviceConnectionManager::instance(), SIGNAL(deviceConnected()),
222 this, SLOT(launchApplication()));287 this, SLOT(checkDeployMode()));
223 disconnect(BlackBerryDeviceConnectionManager::instance(), SIGNAL(deviceDisconnected(Core::Id)),288 disconnect(BlackBerryDeviceConnectionManager::instance(), SIGNAL(deviceDisconnected(Core::Id)),
224 this, SLOT(disconnectFromDeviceSignals(Core::Id)));289 this, SLOT(disconnectFromDeviceSignals(Core::Id)));
225 disconnect(BlackBerryDeviceConnectionManager::instance(), SIGNAL(connectionOutput(Core::Id,QString)),290 disconnect(BlackBerryDeviceConnectionManager::instance(), SIGNAL(connectionOutput(Core::Id,QString)),
@@ -237,6 +302,105 @@
237 m_appId = applicationId;302 m_appId = applicationId;
238}303}
239304
305void BlackBerryApplicationRunner::checkQmlJsDebugArguments()
306{
307 if (!m_launchFlags.testFlag(QmlDebugLaunch)) {
308 // no need to change anytning in app manifest for this kind of run
309 launchApplication();
310 }
311
312 emit output(tr("Checking qmljsdebugger command line argument."), Utils::StdOutFormat);
313 QString nativePackagerCmd = m_environment.searchInPath(QLatin1String("blackberry-nativepackager"));
314 if (nativePackagerCmd.isEmpty()) {
315 emit output(tr("Cannot find Native Packager executable."), Utils::StdErrFormat);
316 return;
317 }
318
319 m_checkQmlJsDebugArgumentsProcess = new QProcess(this);
320 connect(m_checkQmlJsDebugArgumentsProcess, SIGNAL(error(QProcess::ProcessError)), this, SLOT(checkQmlJsDebugArgumentsManifestLoaded()));
321 connect(m_checkQmlJsDebugArgumentsProcess, SIGNAL(finished(int)), this, SLOT(checkQmlJsDebugArgumentsManifestLoaded()));
322
323 QStringList args;
324 args << QLatin1String("-listManifest") << QDir::toNativeSeparators(m_barPackage);
325 if (debugCheckQmlJSArgs)
326 qDebug() << "get manifest:" << nativePackagerCmd << args.join(QLatin1String(" "));
327 m_checkQmlJsDebugArgumentsProcess->start(nativePackagerCmd, args);
328}
329
330void BlackBerryApplicationRunner::checkQmlJsDebugArgumentsManifestLoaded()
331{
332 m_checkQmlJsDebugArgumentsProcess->deleteLater();
333
334 if (m_checkQmlJsDebugArgumentsProcess->exitStatus() != QProcess::NormalExit) {
335 emit output(tr("Cannot read bar package manifest."), Utils::StdErrFormat);
336 qWarning() << "Cannot read bar package manifest:" << m_checkQmlJsDebugArgumentsProcess->errorString();
337 qWarning() << m_checkQmlJsDebugArgumentsProcess->readAllStandardError();
338 return;
339 }
340
341 QString manifestContent = QString::fromUtf8(m_checkQmlJsDebugArgumentsProcess->readAllStandardOutput());
342
343 QRegExp rxEoln(QLatin1String("(\\r\\n|\\n|\\r)"));
344 QStringList manifestLines = manifestContent.split(rxEoln);
345
346 QMutableListIterator<QString> it(manifestLines);
347 QLatin1String entryPoint("Entry-Point: ");
348 while (it.hasNext()) {
349 it.next();
350 if (it.value().startsWith(entryPoint)) {
351 while (it.hasNext() && it.peekNext().startsWith(QLatin1Char(' ')))
352 it.next();
353 QString qmljsdbgArg = QString::fromLatin1("-qmljsdebugger=port:%1%2")
354 .arg(m_qmlDebugServerPort)
355 .arg(m_launchFlags.testFlag(QmlDebugLaunchBlocking)? QLatin1String(",block"): QLatin1String(""));
356 it.insert(QLatin1String(" ") + qmljsdbgArg);
357 manifestContent = manifestLines.join(QLatin1String("\n"));
358 break;
359 }
360 }
361
362 m_checkQmlJsDebugArgumentsProcess = new QProcess(this);
363 connect(m_checkQmlJsDebugArgumentsProcess, SIGNAL(error(QProcess::ProcessError)), this, SLOT(checkQmlJsDebugArgumentsManifestSaved()));
364 connect(m_checkQmlJsDebugArgumentsProcess, SIGNAL(finished(int)), this, SLOT(checkQmlJsDebugArgumentsManifestSaved()));
365
366 QTemporaryFile *manifestFile = new QTemporaryFile(m_checkQmlJsDebugArgumentsProcess);
367 if (!manifestFile->open()) {
368 emit output(tr("Internal error: Cannot create temporary manifest file '%1'")
369 .arg(manifestFile->fileName()), Utils::StdErrFormat);
370 delete manifestFile;
371 return;
372 }
373
374 manifestFile->write(manifestContent.toUtf8());
375 manifestFile->flush();
376
377 QStringList args;
378 args << QLatin1String("-device") << m_sshParams.host;
379 if (!m_sshParams.password.isEmpty())
380 args << QLatin1String("-password") << m_sshParams.password;
381 args << QLatin1String("-package") << QDir::toNativeSeparators(m_barPackage);
382 args << QLatin1String("-putFile");
383 args << manifestFile->fileName();
384 args << QLatin1String("app/META-INF/MANIFEST.MF");
385 if (debugCheckQmlJSArgs)
386 qDebug() << "set manifest:" << m_deployCmd << args.join(QLatin1String(" "));
387 m_checkQmlJsDebugArgumentsProcess->start(m_deployCmd, args);
388}
389
390void BlackBerryApplicationRunner::checkQmlJsDebugArgumentsManifestSaved()
391{
392 m_checkQmlJsDebugArgumentsProcess->deleteLater();
393
394 if (m_checkQmlJsDebugArgumentsProcess->exitStatus() != QProcess::NormalExit) {
395 emit output(tr("Cannot set command line arguments."), Utils::StdErrFormat);
396 qWarning() << "Cannot set command line arguments:" << m_checkQmlJsDebugArgumentsProcess->errorString();
397 qWarning() << m_checkQmlJsDebugArgumentsProcess->readAllStandardError();
398 return;
399 }
400
401 launchApplication();
402}
403
240void BlackBerryApplicationRunner::launchApplication()404void BlackBerryApplicationRunner::launchApplication()
241{405{
242 // If original device connection fails before launching, this method maybe triggered406 // If original device connection fails before launching, this method maybe triggered
@@ -246,12 +410,12 @@
246410
247 QStringList args;411 QStringList args;
248 args << QLatin1String("-launchApp");412 args << QLatin1String("-launchApp");
249 if (m_debugMode)413 if (m_launchFlags.testFlag(CppDebugLaunch))
250 args << QLatin1String("-debugNative");414 args << QLatin1String("-debugNative");
251 args << QLatin1String("-device") << m_sshParams.host;415 args << QLatin1String("-device") << m_sshParams.host;
252 if (!m_sshParams.password.isEmpty())416 if (!m_sshParams.password.isEmpty())
253 args << QLatin1String("-password") << m_sshParams.password;417 args << QLatin1String("-password") << m_sshParams.password;
254 args << QDir::toNativeSeparators(m_barPackage);418 args << QLatin1String("-package") << QDir::toNativeSeparators(m_barPackage);
255419
256 if (!m_launchProcess) {420 if (!m_launchProcess) {
257 m_launchProcess = new QProcess(this);421 m_launchProcess = new QProcess(this);
@@ -262,12 +426,26 @@
262426
263 m_launchProcess->setEnvironment(m_environment.toStringList());427 m_launchProcess->setEnvironment(m_environment.toStringList());
264 }428 }
265429 if (debugCheckQmlJSArgs)
430 qDebug() << "launch:" << m_deployCmd << args.join(QLatin1String(" "));
266 m_launchProcess->start(m_deployCmd, args);431 m_launchProcess->start(m_deployCmd, args);
267 m_runningStateTimer->start();432 m_runningStateTimer->start();
268 m_running = true;433 m_running = true;
269}434}
270435
436void BlackBerryApplicationRunner::checkDeployMode()
437{
438 // If original device connection fails before launching, this method maybe triggered
439 // if any other device is connected
440 if (!BlackBerryDeviceConnectionManager::instance()->isConnected(m_device->id()))
441 return;
442
443 if (m_launchFlags.testFlag(CppDebugLaunch))
444 queryDeviceInformation(); // check API version vs Runtime version
445 else
446 checkQmlJsDebugArguments();
447}
448
271void BlackBerryApplicationRunner::startRunningStateTimer()449void BlackBerryApplicationRunner::startRunningStateTimer()
272{450{
273 if (m_running)451 if (m_running)
274452
=== modified file 'src/qnx/blackberryapplicationrunner.h'
--- src/qnx/blackberryapplicationrunner.h 2014-03-18 10:51:43 +0000
+++ src/qnx/blackberryapplicationrunner.h 2014-06-16 09:46:37 +0000
@@ -34,6 +34,7 @@
3434
35#include "blackberrydeviceconfiguration.h"35#include "blackberrydeviceconfiguration.h"
36#include "blackberryprocessparser.h"36#include "blackberryprocessparser.h"
37#include "blackberryversionnumber.h"
3738
38#include <projectexplorer/runconfiguration.h>39#include <projectexplorer/runconfiguration.h>
3940
@@ -44,29 +45,37 @@
44#include <QProcess>45#include <QProcess>
45#include <QDateTime>46#include <QDateTime>
4647
47namespace QSsh {48namespace QSsh { class SshRemoteProcessRunner; }
48class SshRemoteProcessRunner;
49}
5049
51namespace Qnx {50namespace Qnx {
52namespace Internal {51namespace Internal {
5352
54class BlackBerryRunConfiguration;53class BlackBerryRunConfiguration;
55class BlackBerryLogProcessRunner;54class BlackBerryLogProcessRunner;
55class BlackBerryDeviceInformation;
5656
57class BlackBerryApplicationRunner : public QObject57class BlackBerryApplicationRunner : public QObject
58{58{
59 Q_OBJECT59 Q_OBJECT
60public:60public:
61 explicit BlackBerryApplicationRunner(bool debugMode, BlackBerryRunConfiguration *runConfiguration, QObject *parent = 0);61 enum LaunchFlag
62 {
63 CppDebugLaunch = 0x1,
64 QmlDebugLaunch = 0x2,
65 QmlDebugLaunchBlocking = 0x4,
66 QmlProfilerLaunch = 0x8
67 };
68 Q_DECLARE_FLAGS(LaunchFlags, LaunchFlag)
69
70public:
71 explicit BlackBerryApplicationRunner(const LaunchFlags &launchFlags, BlackBerryRunConfiguration *runConfiguration, QObject *parent = 0);
6272
63 bool isRunning() const;73 bool isRunning() const;
64 qint64 pid() const;74 qint64 pid() const;
6575
66 ProjectExplorer::RunControl::StopResult stop();
67
68public slots:76public slots:
69 void start();77 void start();
78 ProjectExplorer::RunControl::StopResult stop();
7079
71signals:80signals:
72 void output(const QString &msg, Utils::OutputFormat format);81 void output(const QString &msg, Utils::OutputFormat format);
@@ -91,14 +100,21 @@
91 void setApplicationId(const QString &applicationId);100 void setApplicationId(const QString &applicationId);
92101
93 void launchApplication();102 void launchApplication();
103 void checkDeployMode();
94 void startLogProcessRunner();104 void startLogProcessRunner();
95105
96 void displayConnectionOutput(Core::Id deviceId, const QString &output);106 void displayConnectionOutput(Core::Id deviceId, const QString &output);
107 void checkDeviceRuntimeVersion(int status);
108
109 void checkQmlJsDebugArguments();
110 void checkQmlJsDebugArgumentsManifestLoaded();
111 void checkQmlJsDebugArgumentsManifestSaved();
97112
98private:113private:
99 void reset();114 void reset();
115 void queryDeviceInformation();
100116
101 bool m_debugMode;117 LaunchFlags m_launchFlags;
102118
103 qint64 m_pid;119 qint64 m_pid;
104 QString m_appId;120 QString m_appId;
@@ -115,11 +131,17 @@
115 QProcess *m_launchProcess;131 QProcess *m_launchProcess;
116 QProcess *m_stopProcess;132 QProcess *m_stopProcess;
117 BlackBerryProcessParser m_launchStopProcessParser;133 BlackBerryProcessParser m_launchStopProcessParser;
134 BlackBerryDeviceInformation *m_deviceInfo;
118135
119 BlackBerryLogProcessRunner *m_logProcessRunner;136 BlackBerryLogProcessRunner *m_logProcessRunner;
120137
121 QTimer *m_runningStateTimer;138 QTimer *m_runningStateTimer;
122 QProcess *m_runningStateProcess;139 QProcess *m_runningStateProcess;
140
141 BlackBerryVersionNumber m_bbApiLevelVersion;
142
143 int m_qmlDebugServerPort;
144 QProcess *m_checkQmlJsDebugArgumentsProcess;
123};145};
124146
125} // namespace Internal147} // namespace Internal
126148
=== modified file 'src/qnx/blackberrycertificate.cpp'
--- src/qnx/blackberrycertificate.cpp 2014-03-18 10:51:43 +0000
+++ src/qnx/blackberrycertificate.cpp 2014-06-16 09:46:37 +0000
@@ -30,7 +30,7 @@
30****************************************************************************/30****************************************************************************/
3131
32#include "blackberrycertificate.h"32#include "blackberrycertificate.h"
33#include "blackberryconfiguration.h"33#include "blackberryapilevelconfiguration.h"
34#include "blackberryconfigurationmanager.h"34#include "blackberryconfigurationmanager.h"
35#include "blackberryndkprocess.h"35#include "blackberryndkprocess.h"
3636
@@ -54,7 +54,7 @@
54{54{
55 m_process->setProcessChannelMode(QProcess::MergedChannels);55 m_process->setProcessChannelMode(QProcess::MergedChannels);
56 m_process->setEnvironment(Utils::EnvironmentItem::toStringList(56 m_process->setEnvironment(Utils::EnvironmentItem::toStringList(
57 BlackBerryConfigurationManager::instance().defaultQnxEnv()));57 BlackBerryConfigurationManager::instance()->defaultConfigurationEnv()));
58}58}
5959
60void BlackBerryCertificate::load()60void BlackBerryCertificate::load()
6161
=== added file 'src/qnx/blackberrycheckdevicestatusstep.cpp'
--- src/qnx/blackberrycheckdevicestatusstep.cpp 1970-01-01 00:00:00 +0000
+++ src/qnx/blackberrycheckdevicestatusstep.cpp 2014-06-16 09:46:37 +0000
@@ -0,0 +1,278 @@
1/**************************************************************************
2**
3** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
4**
5** Contact: BlackBerry (qt@blackberry.com)
6** Contact: KDAB (info@kdab.com)
7**
8** This file is part of Qt Creator.
9**
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.
17**
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.
25**
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.
29**
30****************************************************************************/
31
32#include "blackberrycheckdevicestatusstep.h"
33
34#include "blackberrycheckdevicestatusstepconfigwidget.h"
35#include "blackberrydeviceinformation.h"
36#include "blackberryversionnumber.h"
37#include "qnxconstants.h"
38
39#include <projectexplorer/buildconfiguration.h>
40#include <projectexplorer/projectexplorerconstants.h>
41#include <projectexplorer/target.h>
42#include <projectexplorer/kit.h>
43#include <projectexplorer/task.h>
44#include <ssh/sshconnection.h>
45
46#include <coreplugin/icore.h>
47
48#include <qfileinfo.h>
49
50#include <qmessagebox.h>
51
52#include <qeventloop.h>
53
54using namespace Qnx;
55using namespace Qnx::Internal;
56
57namespace {
58const char RUNTIME_CHECK_ENABLED[] =
59 "Qnx.Internal.BlackBerryCheckDeviceStatusStep.RuntimeCheckEnabled";
60const char DEBUG_TOKEN_CHECK_ENABLED[] =
61 "Qnx.Internal.BlackBerryCheckDeviceStatusStep.DebugTokenCheckEnabled";
62}
63
64BlackBerryCheckDeviceStatusStep::BlackBerryCheckDeviceStatusStep(ProjectExplorer::BuildStepList *bsl) :
65 ProjectExplorer::BuildStep(bsl, Core::Id(Constants::QNX_CHECK_DEVICE_STATUS_BS_ID))
66 , m_deviceInfo(0)
67 , m_eventLoop(0)
68 , m_runtimeCheckEnabled(true)
69 , m_debugTokenCheckEnabled(true)
70{
71 setDisplayName(tr("Check Device Status"));
72}
73
74BlackBerryCheckDeviceStatusStep::BlackBerryCheckDeviceStatusStep(ProjectExplorer::BuildStepList *bsl,
75 BlackBerryCheckDeviceStatusStep *bs) :
76 ProjectExplorer::BuildStep(bsl, bs)
77 , m_deviceInfo(0)
78 , m_eventLoop(0)
79 , m_runtimeCheckEnabled(true)
80 , m_debugTokenCheckEnabled(true)
81{
82 setDisplayName(tr("Check Device Status"));
83}
84
85void BlackBerryCheckDeviceStatusStep::checkDeviceInfo(int status)
86{
87 if (!m_runtimeCheckEnabled && m_debugTokenCheckEnabled) {
88 // Skip debug token check for internal non secure devices and simulators
89 if (!m_deviceInfo->isProductionDevice() || m_deviceInfo->isSimulator()) {
90 m_eventLoop->exit(true);
91 return;
92 }
93 }
94
95 if (status != BlackBerryDeviceInformation::Success) {
96 switch (status) {
97 case BlackBerryDeviceInformation::AuthenticationFailed:
98 raiseError(tr("Authentication failed."));
99 break;
100 case BlackBerryDeviceInformation::NoRouteToHost:
101 raiseError(tr("Cannot connect to device."));
102 break;
103 case BlackBerryDeviceInformation::DevelopmentModeDisabled:
104 raiseError(tr("Device is not in the development mode."));
105 break;
106 case BlackBerryDeviceInformation::InferiorProcessTimedOut:
107 raiseError(tr("Timeout querying device information."));
108 break;
109 case BlackBerryDeviceInformation::FailedToStartInferiorProcess:
110 raiseError(tr("Failed to query device information."));
111 break;
112 case BlackBerryDeviceInformation::InferiorProcessCrashed:
113 raiseError(tr("Process to query device information has crashed."));
114 break;
115 default:
116 raiseError(tr("Cannot query device information."));
117 break;
118 }
119 m_eventLoop->exit(false);
120 return;
121 }
122
123 if (m_debugTokenCheckEnabled && !m_deviceInfo->debugTokenValid()) {
124 //: %1: Error message from BlackBerryDeviceInformation
125 const QString errorMsg =
126 tr("%1. Upload a valid debug token into the device.")
127 .arg(m_deviceInfo->debugTokenValidationError());
128 raiseError(errorMsg);
129 m_eventLoop->exit(false);
130 return;
131 }
132
133 if (m_runtimeCheckEnabled) {
134 BlackBerryVersionNumber deviceRuntimeVersion(m_deviceInfo->scmBundle());
135 QFileInfo fi(target()->kit()->autoDetectionSource());
136
137 if (deviceRuntimeVersion.isEmpty()) {
138 // Skip the check if device runtime is not determined
139 m_eventLoop->exit(true);
140 raiseWarning(tr("Cannot determine device runtime version."));
141 return;
142 }
143
144 BlackBerryVersionNumber apiLevelVersion = BlackBerryVersionNumber::fromNdkEnvFileName(fi.baseName());
145 if (apiLevelVersion.isEmpty()) {
146 // Skip the check if device API level version is not determined
147 m_eventLoop->exit(true);
148 raiseWarning(tr("Cannot determine API level version."));
149 return;
150 }
151
152 bool ok = true;
153 if (apiLevelVersion > deviceRuntimeVersion) {
154 raiseError(tr("The device runtime version (%1) is inferior to the API level version (%2)")
155 .arg(deviceRuntimeVersion.toString(), apiLevelVersion.toString()));
156
157 QMetaObject::invokeMethod(this, "handleVersionMismatch", Qt::BlockingQueuedConnection,
158 Q_RETURN_ARG(bool, ok),
159 Q_ARG(QString, deviceRuntimeVersion.toString()),
160 Q_ARG(QString, apiLevelVersion.toString()));
161 }
162
163 m_eventLoop->exit(ok);
164 return;
165 }
166
167 m_eventLoop->exit(true);
168}
169
170void BlackBerryCheckDeviceStatusStep::emitOutputInfo()
171{
172 emit addOutput(tr("Checking device status..."), BuildStep::MessageOutput);
173}
174
175void BlackBerryCheckDeviceStatusStep::enableDebugTokenCheck(bool enable)
176{
177 m_debugTokenCheckEnabled = enable;
178}
179
180void BlackBerryCheckDeviceStatusStep::enableRuntimeCheck(bool enable)
181{
182 m_runtimeCheckEnabled = enable;
183}
184
185bool BlackBerryCheckDeviceStatusStep::handleVersionMismatch(const QString &runtimeVersion, const QString &apiLevelVersion)
186{
187 // TODO: Check if a matching API level exists in the user configurations,
188 // otherwise let the user download the matching device runtime.
189 const QMessageBox::StandardButton answer = QMessageBox::question(Core::ICore::mainWindow(), tr("Confirmation"),
190 tr("The device runtime version(%1) does not match the API level version(%2).\n"
191 "Do you want to continue anyway?").arg(runtimeVersion, apiLevelVersion),
192 QMessageBox::Yes | QMessageBox::No);
193 return answer == QMessageBox::Yes;
194}
195
196bool BlackBerryCheckDeviceStatusStep::init()
197{
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches