Merge remote-tracking branch 'origin/2.3'
Conflicts: qtcreator.pri share/qtcreator/dumper/dumper.py share/qtcreator/qml/qmlpuppet/instances/objectnodeinstance.h src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp src/plugins/valgrind/valgrind.pro tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp Change-Id: Ic2d347012d89d697e6382f156e64f9619da88300
56
dist/changes-2.3.0
vendored
@@ -8,8 +8,9 @@ git clone git://gitorious.org/qt-creator/qt-creator.git
|
|||||||
git log --cherry-pick --pretty=oneline v2.2.1...origin/2.3
|
git log --cherry-pick --pretty=oneline v2.2.1...origin/2.3
|
||||||
|
|
||||||
General
|
General
|
||||||
* Welcome page redesign allows searching through examples with descriptions
|
* Redesigned the Welcome page to allow searching through examples with
|
||||||
* Restore previous size when unmaximizing output panes
|
descriptions
|
||||||
|
* Fixed Output panes so that they are minimized to their previous size
|
||||||
* Added support for building with the Clang compiler
|
* Added support for building with the Clang compiler
|
||||||
|
|
||||||
Editing
|
Editing
|
||||||
@@ -22,9 +23,34 @@ Debugging
|
|||||||
* Color memory display highlighting the variables in stack layout
|
* Color memory display highlighting the variables in stack layout
|
||||||
* Correct source location for breakpoints in CDB using code model
|
* Correct source location for breakpoints in CDB using code model
|
||||||
(QTCREATORBUG-2317)
|
(QTCREATORBUG-2317)
|
||||||
|
* Added support for multiple breakpoints from one location
|
||||||
|
(covering constructors, destructors, template functions, and so on)
|
||||||
|
* Added a custom dumper for QXmlAttributes, Eigen::Matrix
|
||||||
|
* Added the option to set data breakpoints on either an address or expression
|
||||||
|
* Added a framework to modify strings, vectors, and so on, during debugging
|
||||||
|
* Added an option to stop on qWarning
|
||||||
|
* Renamed "Locals and Watchers" as "Locals and Expressions"
|
||||||
|
* Renamed "Watchpoint" as "Data Breakpoints"
|
||||||
|
* Made original values of automatically dereferenced pointers accessible
|
||||||
|
* Improved the "Add Breakpoint" dialog
|
||||||
|
* Improved the displaying of enums (included numeric value)
|
||||||
|
* Improved the speed of the QVariant dumper
|
||||||
|
* Improved the handling of shadowed local variables
|
||||||
|
* Fixed object expansion in tooltip
|
||||||
|
* Fixed std::deque dumper (QTCREATORBUG-4936)
|
||||||
|
* Fixed the handling of watched expressions with unusual characters
|
||||||
|
* Fixed "Run To Line" on Mac (QTCREATORBUG-4619)
|
||||||
|
* Fixed output parsing for data breakpoints on Mac (QTCREATORBUG-4797)
|
||||||
|
* Fixed auto-continue on SIGTRAP (QTCREATORBUG-4968)
|
||||||
|
* Fixed the dumper for gcc 4.4's std::map
|
||||||
|
|
||||||
Debugging QML/JS
|
Debugging QML/JS
|
||||||
|
|
||||||
|
Analyzing Code
|
||||||
|
* Redesigned the framework code
|
||||||
|
* Added support for QML profiling
|
||||||
|
* Added support for the Valgrind Callgrind tool on Linux and Mac
|
||||||
|
|
||||||
C++ Support
|
C++ Support
|
||||||
* Made C++ coding style configurable (QTCREATORBUG-2670, QTCREATORBUG-4310,
|
* Made C++ coding style configurable (QTCREATORBUG-2670, QTCREATORBUG-4310,
|
||||||
QTCREATORBUG-2763, QTCREATORBUG-3623, QTCREATORBUG-567)
|
QTCREATORBUG-2763, QTCREATORBUG-3623, QTCREATORBUG-567)
|
||||||
@@ -47,6 +73,26 @@ QML/JS Support
|
|||||||
* Fixed scanning and indentation of regular expression literals (QTCREATORBUG-4566)
|
* Fixed scanning and indentation of regular expression literals (QTCREATORBUG-4566)
|
||||||
* Fixed indentation of object literals
|
* Fixed indentation of object literals
|
||||||
|
|
||||||
|
Qt Quick Designer
|
||||||
|
* Added tool buttons to the navigator for reordering and reparenting of items
|
||||||
|
* Added support for import as (QTCREATORBUG-4087)
|
||||||
|
* Added editing and navigation for inline components
|
||||||
|
* Added support for models and delegates in the current file (QTCREATORBUG-4528)
|
||||||
|
* Added support for repeaters (QTCREATORBUG-4852)
|
||||||
|
* Added context menu for resetting postion and size
|
||||||
|
* Added context menu for improved selection (QTCREATORBUG-4611)
|
||||||
|
* Added translation support for text items
|
||||||
|
* Added context menu for z-order (QTCREATORBUG-2522)
|
||||||
|
* Fixed z-order in the form editor (QTCREATORBUG-5226)
|
||||||
|
* Improved usability of the form editor (QTCREATORBUG-4820 QTCREATORBUG-4819)
|
||||||
|
* Do not enforce clipping of items in the form editor anymore
|
||||||
|
* Improved property editor for mouse area (QTCREATORBUG-4927)
|
||||||
|
* Use the qmlpuppet from current Qt if availabe (QTCREATORBUG-4824)
|
||||||
|
* Added project for qmlpuppet in share of Qt Creator
|
||||||
|
* Fixed copy and paste bug (QTCREATORBUG-4581)
|
||||||
|
* Fixed scoping of root item properties (QTCREATORBUG-4574)
|
||||||
|
* Improved property editor for ListView, GridView and PathView
|
||||||
|
|
||||||
Help
|
Help
|
||||||
|
|
||||||
Platform Specific
|
Platform Specific
|
||||||
@@ -72,6 +118,12 @@ Remote Linux Support
|
|||||||
|
|
||||||
Qt Designer
|
Qt Designer
|
||||||
|
|
||||||
|
FakeVim:
|
||||||
|
* Made FakeVim functionality available for shortcuts in normal text editor
|
||||||
|
* Added snippet support
|
||||||
|
* Fixed behaviour of Ctrl keys on Mac
|
||||||
|
* Fixed searching for expressions containing '|' (QTCREATORBUG-4752)
|
||||||
|
|
||||||
Version control plugins
|
Version control plugins
|
||||||
* Git: Manage remote repositories
|
* Git: Manage remote repositories
|
||||||
* Git: Improved branch dialog
|
* Git: Improved branch dialog
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ include(macros.qdocconf)
|
|||||||
include(qt-cpp-ignore.qdocconf)
|
include(qt-cpp-ignore.qdocconf)
|
||||||
include(qt-defines.qdocconf)
|
include(qt-defines.qdocconf)
|
||||||
|
|
||||||
sources.fileextensions = "qtcreator.qdoc maemodev.qdoc symbiandev.qdoc addressbook-sdk.qdoc qtcreator-faq.qdoc"
|
sources.fileextensions = "qtcreator.qdoc maemodev.qdoc symbiandev.qdoc addressbook-sdk.qdoc qtcreator-faq.qdoc linuxdev.qdoc"
|
||||||
|
|
||||||
|
|
||||||
qhp.projects = QtCreator
|
qhp.projects = QtCreator
|
||||||
|
|||||||
@@ -83,5 +83,5 @@ OTHER_FILES = $$HELP_DEP_FILES $$DEV_HELP_DEP_FILES
|
|||||||
fixnavi.commands = \
|
fixnavi.commands = \
|
||||||
cd $$targetPath($$PWD) && \
|
cd $$targetPath($$PWD) && \
|
||||||
perl fixnavi.pl -Dqcmanual -Dqtquick \
|
perl fixnavi.pl -Dqcmanual -Dqtquick \
|
||||||
qtcreator.qdoc maemodev.qdoc symbiandev.qdoc qtcreator-faq.qdoc
|
qtcreator.qdoc maemodev.qdoc symbiandev.qdoc qtcreator-faq.qdoc linuxdev.qdoc
|
||||||
QMAKE_EXTRA_TARGETS += fixnavi
|
QMAKE_EXTRA_TARGETS += fixnavi
|
||||||
|
|||||||
BIN
doc/images/qml-observer-buttons.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 21 KiB |
BIN
doc/images/qml-translate.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 19 KiB |
BIN
doc/images/qmldesigner-navigator-arrows.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 34 KiB |
BIN
doc/images/qmldesigner-text-property-tr.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 203 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 955 B After Width: | Height: | Size: 920 B |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 897 B After Width: | Height: | Size: 847 B |
BIN
doc/images/qtcreator-linux-device-configurations.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 32 KiB |
BIN
doc/images/qtcreator-run-settings-linux-devices.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
doc/images/qtcreator-screenshot-devconf-linux.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 5.6 KiB |
BIN
doc/images/qtcreator-valgrind-remote-settings.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
134
doc/linuxdev.qdoc
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
**
|
||||||
|
** Contact: Nokia Corporation (info@qt.nokia.com)
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** GNU Free Documentation License
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Free
|
||||||
|
** Documentation License version 1.3 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file included in the packaging of this
|
||||||
|
** file.
|
||||||
|
**
|
||||||
|
** If you have questions regarding the use of this file, please contact
|
||||||
|
** Nokia at info@qt.nokia.com.
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
|
||||||
|
\contentspage index.html
|
||||||
|
\previouspage creator-developing-maemo.html
|
||||||
|
\page creator-developing-generic-linux.html
|
||||||
|
\nextpage creator-developing-symbian.html
|
||||||
|
|
||||||
|
\title Connecting Generic Linux Devices
|
||||||
|
|
||||||
|
You can connect generic Linux devices to the development PC to build, run,
|
||||||
|
debug, and analyze applications on them from Qt Creator.
|
||||||
|
|
||||||
|
If you have the tool chain for building applications for generic Linux
|
||||||
|
devices (with no MADDE support) installed on the development PC, you can add
|
||||||
|
it to Qt Creator.
|
||||||
|
|
||||||
|
To be able to run and debug applications on generic Linux devices, you must
|
||||||
|
create device configurations and select them in the Qt Creator run
|
||||||
|
settings.
|
||||||
|
|
||||||
|
You use a wizard to create the connections. You can edit the settings later
|
||||||
|
in \gui {Tools > Options... > Linux Devices > Device Configurations}.
|
||||||
|
|
||||||
|
\image qtcreator-linux-device-configurations.png "Device Configurations dialog"
|
||||||
|
|
||||||
|
You can protect the connections between Qt Creator and a device by using
|
||||||
|
either a password or an SSH key. If you do not have an SSH key, you can
|
||||||
|
create it in Qt Creator. For more information, see \l {Generating SSH Keys}.
|
||||||
|
|
||||||
|
To configure connections between Qt Creator and generic Linux devices:
|
||||||
|
|
||||||
|
\list 1
|
||||||
|
|
||||||
|
\o Make sure that your device can be reached via an IP address.
|
||||||
|
|
||||||
|
\o Select \gui {Tools > Options... > Qt4 > Add} to add the Qt version
|
||||||
|
for the generic Linux.
|
||||||
|
|
||||||
|
\o Select \gui {Tools > Options... > Tool Chains > Add} to add the tool
|
||||||
|
chain for building the applications.
|
||||||
|
|
||||||
|
\o To deploy applications and run them remotely on devices, specify
|
||||||
|
parameters for accessing the devices:
|
||||||
|
|
||||||
|
\list 1
|
||||||
|
|
||||||
|
\o Select \gui {Tools > Options... > Linux Devices > Device
|
||||||
|
Configurations > Add > Generic Linux Device}.
|
||||||
|
|
||||||
|
\image qtcreator-screenshot-devconf-linux.png "Connection Data wizard"
|
||||||
|
|
||||||
|
\o In the \gui {The name to identify this configuration} field,
|
||||||
|
enter a name for the connection.
|
||||||
|
|
||||||
|
\o In the \gui {The device's host name or IP address} field,
|
||||||
|
enter the host name or IP address of the device.
|
||||||
|
|
||||||
|
\o In the \gui {The user name to log into the device} field,
|
||||||
|
enter the user name to log into the device and run the
|
||||||
|
application as.
|
||||||
|
|
||||||
|
\o In the \gui {The authentication type} field, select whether
|
||||||
|
to use \gui Password or \gui Key authentication, and enter
|
||||||
|
the user's password or the file that contains the user's
|
||||||
|
private key.
|
||||||
|
|
||||||
|
\o Click \gui {Next} to create the connection.
|
||||||
|
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
\o To specify build settings:
|
||||||
|
|
||||||
|
\list 1
|
||||||
|
|
||||||
|
\o Open a project for an application you want to develop for the
|
||||||
|
device.
|
||||||
|
|
||||||
|
\o Select \gui {Projects > Desktop > Build}.
|
||||||
|
|
||||||
|
\o Select the Qt version and tool chain for the generic Linux
|
||||||
|
device.
|
||||||
|
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
\o To specify run settings:
|
||||||
|
|
||||||
|
\list 1
|
||||||
|
|
||||||
|
\o Select \gui {Run > Add > Build Tarball and Deploy to Linux Host}
|
||||||
|
to add a new deploy configuration.
|
||||||
|
|
||||||
|
\image qtcreator-run-settings-linux-devices.png "Run settings for generic Linux devices"
|
||||||
|
|
||||||
|
\o In the \gui {Device configuration} field, select the device
|
||||||
|
connection.
|
||||||
|
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
When you run the project, Qt Creator creates an installation package in
|
||||||
|
the build directory. The name of the directory is displayed in the
|
||||||
|
\gui {Create tarball} step.
|
||||||
|
|
||||||
|
The \gui {Deploy tarball via SFTP upload using device} step specifies
|
||||||
|
that Qt Creator uploads the tarball to the device and extracts it.
|
||||||
|
You can add custom deploy steps and remove the default step if
|
||||||
|
it is incompatible with your steps.
|
||||||
|
To only create a tarball and not copy the files to the device,
|
||||||
|
remove all deploy steps.
|
||||||
|
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
\endif
|
\endif
|
||||||
\page creator-developing-maemo.html
|
\page creator-developing-maemo.html
|
||||||
\if defined(qcmanual)
|
\if defined(qcmanual)
|
||||||
\nextpage creator-developing-symbian.html
|
\nextpage creator-developing-generic-linux.html
|
||||||
\else
|
\else
|
||||||
\nextpage smartinstaller.html
|
\nextpage smartinstaller.html
|
||||||
\endif
|
\endif
|
||||||
@@ -279,7 +279,7 @@
|
|||||||
only need to configure a connection to the device.
|
only need to configure a connection to the device.
|
||||||
|
|
||||||
You use a wizard to create the connections. You can edit the settings later
|
You use a wizard to create the connections. You can edit the settings later
|
||||||
in \gui {Tools > Options... > Maemo > Maemo Device Configurations}.
|
in \gui {Tools > Options... > Linux Devices > Device Configurations}.
|
||||||
|
|
||||||
\image qtcreator-maemo-device-configurations.png "Maemo Device Configurations dialog"
|
\image qtcreator-maemo-device-configurations.png "Maemo Device Configurations dialog"
|
||||||
|
|
||||||
@@ -327,8 +327,8 @@
|
|||||||
\note If you experience connection problems due to a USB port issue,
|
\note If you experience connection problems due to a USB port issue,
|
||||||
switch to a different port or use WLAN to connect to the device.
|
switch to a different port or use WLAN to connect to the device.
|
||||||
|
|
||||||
\o Select \gui Tools > \gui Options... > \gui Maemo >
|
\o Select \gui {Tools > Options... > Linux Devices > Device
|
||||||
\gui{Maemo Device Configurations > Add}, and add a new configuration for a
|
Configurations > Add}, and add a new configuration for a
|
||||||
hardware device.
|
hardware device.
|
||||||
|
|
||||||
\image qtcreator-screenshot-devconf.png
|
\image qtcreator-screenshot-devconf.png
|
||||||
@@ -345,6 +345,9 @@
|
|||||||
\o In the \gui {The device's host name or IP address} field, enter
|
\o In the \gui {The device's host name or IP address} field, enter
|
||||||
the IP address from the connectivity tool on the device.
|
the IP address from the connectivity tool on the device.
|
||||||
|
|
||||||
|
\o In the \gui {The SSH server port} field, enter the port number to
|
||||||
|
use for SSH connections.
|
||||||
|
|
||||||
\o Click \gui Next.
|
\o Click \gui Next.
|
||||||
|
|
||||||
\o Follow the instructions of the wizard to create the connection.
|
\o Follow the instructions of the wizard to create the connection.
|
||||||
@@ -360,8 +363,9 @@
|
|||||||
|
|
||||||
\list a
|
\list a
|
||||||
|
|
||||||
\o In Qt Creator, select \gui {Tools > Options... > Maemo >
|
\o In Qt Creator, select \gui {Tools > Options... > Linux
|
||||||
Maemo Device Configurations > Add} to add a new configuration.
|
Devices > Device Configurations > Add} to add a new
|
||||||
|
configuration.
|
||||||
|
|
||||||
\image qtcreator-maemo-emulator-connection.png
|
\image qtcreator-maemo-emulator-connection.png
|
||||||
|
|
||||||
@@ -428,8 +432,8 @@
|
|||||||
\o To specify the password, enter the following command:
|
\o To specify the password, enter the following command:
|
||||||
\c{/usr/lib/mad-developer/devrootsh passwd user}
|
\c{/usr/lib/mad-developer/devrootsh passwd user}
|
||||||
|
|
||||||
\o In Qt Creator, Select \gui Tools > \gui Options... > \gui Maemo >
|
\o In Qt Creator, select \gui {Tools > Options... Linux Devices >
|
||||||
\gui{Maemo Device Configurations}.
|
Device Configurations}.
|
||||||
|
|
||||||
\o Specify the username \c user and the password in the device configuration.
|
\o Specify the username \c user and the password in the device configuration.
|
||||||
|
|
||||||
@@ -444,7 +448,8 @@
|
|||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
|
|
||||||
\o Select \gui {Tools > Options... > Maemo > Maemo Device Configurations
|
\o Select \gui {Tools > Options... > Linux Devices > Device
|
||||||
|
Configurations
|
||||||
> Generate SSH Key...}.
|
> Generate SSH Key...}.
|
||||||
|
|
||||||
\o Click \gui {Generate SSH Key}.
|
\o Click \gui {Generate SSH Key}.
|
||||||
@@ -465,7 +470,7 @@
|
|||||||
|
|
||||||
You can view processes running on the Maemo or MeeGo Harmattan device and
|
You can view processes running on the Maemo or MeeGo Harmattan device and
|
||||||
kill them.
|
kill them.
|
||||||
Select \gui {Tools > Options... > Maemo > Maemo Device Configurations >
|
Select \gui {Tools > Options... > Linux Devices > Device Configurations >
|
||||||
Remote Processes...}.
|
Remote Processes...}.
|
||||||
|
|
||||||
You can filter the processes by name in the \gui {List of Remote Processes}
|
You can filter the processes by name in the \gui {List of Remote Processes}
|
||||||
|
|||||||
@@ -66,6 +66,7 @@
|
|||||||
\o \l{Opening a Project}
|
\o \l{Opening a Project}
|
||||||
\o \l{Adding Libraries to Projects}
|
\o \l{Adding Libraries to Projects}
|
||||||
\o \l{Connecting Maemo and MeeGo Harmattan Devices}
|
\o \l{Connecting Maemo and MeeGo Harmattan Devices}
|
||||||
|
\o \l{Connecting Generic Linux Devices}
|
||||||
\o \l{Connecting Symbian Devices}
|
\o \l{Connecting Symbian Devices}
|
||||||
\o \l{Managing Sessions}
|
\o \l{Managing Sessions}
|
||||||
\endlist
|
\endlist
|
||||||
@@ -133,6 +134,7 @@
|
|||||||
\o \l{Profiling QML Applications}
|
\o \l{Profiling QML Applications}
|
||||||
\o \l{Detecting Memory Leaks}
|
\o \l{Detecting Memory Leaks}
|
||||||
\o \l{Profiling Function Execution}
|
\o \l{Profiling Function Execution}
|
||||||
|
\o \l{Running Valgrind Tools Remotely}
|
||||||
\endlist
|
\endlist
|
||||||
\o \l{Deploying Applications to Mobile Devices}
|
\o \l{Deploying Applications to Mobile Devices}
|
||||||
\list
|
\list
|
||||||
@@ -372,7 +374,8 @@
|
|||||||
and profile Qt Quick applications.
|
and profile Qt Quick applications.
|
||||||
|
|
||||||
You can test applications that are intended for mobile devices in the Qt
|
You can test applications that are intended for mobile devices in the Qt
|
||||||
Simulator and Maemo Emulator, but you also need to test the applications
|
Simulator and Maemo or MeeGo Harmattan emulator, but you also need to test
|
||||||
|
the applications
|
||||||
on real devices.
|
on real devices.
|
||||||
|
|
||||||
\section2 Debuggers
|
\section2 Debuggers
|
||||||
@@ -435,11 +438,11 @@
|
|||||||
If you change property values or add properties in the code editor, the
|
If you change property values or add properties in the code editor, the
|
||||||
changes are updated in the running application when they are saved.
|
changes are updated in the running application when they are saved.
|
||||||
|
|
||||||
\section3 QML Observer
|
\section3 QML Inspector
|
||||||
|
|
||||||
While the application is running, you can use the \gui {QML Observer} view to
|
While the application is running, you can use the \gui {QML Inspector} view to
|
||||||
explore the object structure, debug animations, and inspect colors. When debugging
|
explore the object structure, debug animations, and inspect colors. When debugging
|
||||||
complex applications, you can use the observe mode to jump to the position in code
|
complex applications, you can use the inspection mode to jump to the position in code
|
||||||
where an element is defined.
|
where an element is defined.
|
||||||
|
|
||||||
\section2 Code Analysis Tools
|
\section2 Code Analysis Tools
|
||||||
@@ -447,8 +450,8 @@
|
|||||||
The memory available on devices is limited and you should use it carefully.
|
The memory available on devices is limited and you should use it carefully.
|
||||||
Qt Creator integrates Valgrind code analysis tools for detecting memory
|
Qt Creator integrates Valgrind code analysis tools for detecting memory
|
||||||
leaks and profiling function execution. These tools are only supported on
|
leaks and profiling function execution. These tools are only supported on
|
||||||
Linux and
|
Linux and Mac OS, but you can run them remotely from Windows. You must
|
||||||
Mac OS. You must download and install them separately to use them from Qt
|
download and install them separately to use them from Qt
|
||||||
Creator.
|
Creator.
|
||||||
|
|
||||||
The QML Profiler is installed as part of Qt Creator. It allows you
|
The QML Profiler is installed as part of Qt Creator. It allows you
|
||||||
@@ -556,6 +559,8 @@
|
|||||||
|
|
||||||
\o MeeGo Harmattan
|
\o MeeGo Harmattan
|
||||||
|
|
||||||
|
\o Generic remote Linux
|
||||||
|
|
||||||
\o Symbian
|
\o Symbian
|
||||||
|
|
||||||
\endlist
|
\endlist
|
||||||
@@ -565,13 +570,14 @@
|
|||||||
|
|
||||||
\table
|
\table
|
||||||
\header
|
\header
|
||||||
\o {1,5} Operating system
|
\o {1,6} Operating system
|
||||||
\o {5,1} Platform
|
\o {6,1} Platform
|
||||||
\header
|
\header
|
||||||
\o Desktop
|
\o Desktop
|
||||||
\o Qt Simulator
|
\o Qt Simulator
|
||||||
\o Maemo 5
|
\o Maemo 5
|
||||||
\o MeeGo Harmattan
|
\o MeeGo Harmattan
|
||||||
|
\o Generic Remote Linux
|
||||||
\o Symbian
|
\o Symbian
|
||||||
|
|
||||||
\row
|
\row
|
||||||
@@ -581,12 +587,14 @@
|
|||||||
\o Yes
|
\o Yes
|
||||||
\o Yes
|
\o Yes
|
||||||
\o Yes
|
\o Yes
|
||||||
|
\o Yes
|
||||||
\row
|
\row
|
||||||
\o Linux
|
\o Linux
|
||||||
\o Yes
|
\o Yes
|
||||||
\o Yes
|
\o Yes
|
||||||
\o Yes
|
\o Yes
|
||||||
\o Yes
|
\o Yes
|
||||||
|
\o Yes
|
||||||
\o Yes (by using Remote Compiler for building)
|
\o Yes (by using Remote Compiler for building)
|
||||||
\row
|
\row
|
||||||
\o Mac OS X
|
\o Mac OS X
|
||||||
@@ -594,6 +602,7 @@
|
|||||||
\o Yes
|
\o Yes
|
||||||
\o Yes
|
\o Yes
|
||||||
\o Yes
|
\o Yes
|
||||||
|
\o Yes
|
||||||
\o Yes (by using Remote Compiler for building)
|
\o Yes (by using Remote Compiler for building)
|
||||||
\endtable
|
\endtable
|
||||||
*/
|
*/
|
||||||
@@ -776,7 +785,6 @@
|
|||||||
\o \gui{Application Output}
|
\o \gui{Application Output}
|
||||||
\o \gui{Compile Output}
|
\o \gui{Compile Output}
|
||||||
\o \gui{General Messages}
|
\o \gui{General Messages}
|
||||||
\o \gui{Analysis}
|
|
||||||
\o \gui{Version Control}
|
\o \gui{Version Control}
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
@@ -790,7 +798,7 @@
|
|||||||
criteria in the \gui Find field and click the left and right arrows to
|
criteria in the \gui Find field and click the left and right arrows to
|
||||||
search down and up in the pane.
|
search down and up in the pane.
|
||||||
|
|
||||||
To open the \gui{General Messages}, \gui{Analysis}, and \gui{Version Control}
|
To open the \gui{General Messages} and \gui{Version Control}
|
||||||
panes, select \gui {Window > Output Panes}.
|
panes, select \gui {Window > Output Panes}.
|
||||||
|
|
||||||
|
|
||||||
@@ -1181,14 +1189,15 @@
|
|||||||
as tree structure.
|
as tree structure.
|
||||||
|
|
||||||
\o \gui {Library} pane displays the building blocks that you can use to design
|
\o \gui {Library} pane displays the building blocks that you can use to design
|
||||||
applications: predefined QML elements, your own QML components, and other
|
applications: predefined QML elements, your own QML components, Qt Quick
|
||||||
|
components for Symbian or MeeGo that you import to the project, and other
|
||||||
resources.
|
resources.
|
||||||
|
|
||||||
\o \gui Canvas is the working area where you create QML components and
|
\o \gui Canvas is the working area where you create QML components and
|
||||||
design applications.
|
design applications.
|
||||||
|
|
||||||
\o \gui {Properties} pane organizes the properties of the selected QML element
|
\o \gui {Properties} pane organizes the properties of the selected QML element
|
||||||
or QML component. You can also change the properties in the code editor.
|
or QML component. You can change the properties also in the code editor.
|
||||||
|
|
||||||
\o \gui {State} pane displays the different states of the component. QML
|
\o \gui {State} pane displays the different states of the component. QML
|
||||||
states typically describe user interface configurations, such as the UI
|
states typically describe user interface configurations, such as the UI
|
||||||
@@ -1207,7 +1216,8 @@
|
|||||||
|
|
||||||
You can select elements in the \gui Navigator to edit their properties
|
You can select elements in the \gui Navigator to edit their properties
|
||||||
in the \gui Properties pane. Elements can access the properties of their
|
in the \gui Properties pane. Elements can access the properties of their
|
||||||
parent element.
|
parent element. To select elements on the canvas, right-click an element,
|
||||||
|
and select another element in the context menu.
|
||||||
|
|
||||||
Typically, child elements are located within the parent element on the
|
Typically, child elements are located within the parent element on the
|
||||||
canvas. However, they do not necessarily have to fit inside the parent element.
|
canvas. However, they do not necessarily have to fit inside the parent element.
|
||||||
@@ -1238,6 +1248,20 @@
|
|||||||
\inlineimage qtcreator-splitbar.png
|
\inlineimage qtcreator-splitbar.png
|
||||||
.
|
.
|
||||||
|
|
||||||
|
\section2 Setting the Stacking Order
|
||||||
|
|
||||||
|
The \l{http://doc.qt.nokia.com/4.7/qml-item.html#z-prop}{z property} of an
|
||||||
|
element determines its position in relation to its sibling elements in the
|
||||||
|
element hierarchy. By default, elements with a higher stacking value are
|
||||||
|
drawn on top of siblings with a lower stacking value. Elements with the same
|
||||||
|
stacking value are drawn in the order they are listed, from the last item
|
||||||
|
up.
|
||||||
|
|
||||||
|
To change the stacking order of an item, right-click it on the canvas and
|
||||||
|
select \gui {Stack (z)}. You can raise or lower the stack value of an item
|
||||||
|
or move the item to the front or back of all its siblings. To remove the
|
||||||
|
\c z property, select \gui Reset.
|
||||||
|
|
||||||
\section2 Switching Parent Elements
|
\section2 Switching Parent Elements
|
||||||
|
|
||||||
When you drag and drop QML elements to the canvas, Qt Quick Designer
|
When you drag and drop QML elements to the canvas, Qt Quick Designer
|
||||||
@@ -1250,21 +1274,32 @@
|
|||||||
element under the cursor becomes the new parent of the element.
|
element under the cursor becomes the new parent of the element.
|
||||||
|
|
||||||
You can change the parent of an element also in the \gui Navigator pane.
|
You can change the parent of an element also in the \gui Navigator pane.
|
||||||
Drag and drop the element to another position in the tree.
|
Drag and drop the element to another position in the tree or use the arrow
|
||||||
|
buttons to move the element in the tree.
|
||||||
|
|
||||||
|
\image qmldesigner-navigator-arrows.png "Navigator arrow buttons"
|
||||||
|
|
||||||
\section1 Element Library
|
\section1 Element Library
|
||||||
|
|
||||||
The \gui {Library} pane contains two tabs: \gui {Items} and \gui {Resources}.
|
The \gui {Library} pane contains two tabs: \gui {Items} and \gui {Resources}.
|
||||||
The \gui Items pane displays the QML elements grouped by type: your own QML
|
The \gui Items pane displays the QML elements grouped by type: your own QML
|
||||||
components, basic elements, interaction elements, views, and widgets.
|
components, basic elements, positioner elements, and views.
|
||||||
|
|
||||||
\omit
|
|
||||||
Sets of UI components with the MeeGo and Symbian look and feel have been
|
Sets of UI components with the MeeGo and Symbian look and feel have been
|
||||||
defined for Qt Quick. They are based on standard QML elements. To view the
|
defined for Qt Quick. They are based on standard QML elements. To view the
|
||||||
UI components in \gui {QML Components}, click
|
UI components in the \gui {Library} pane, add import statements to the .pro
|
||||||
\inlineimage qtcreator-filter.png
|
file of your project:
|
||||||
and select \gui {MeeGo Components} or \gui {Symbian Components}.
|
|
||||||
\endomit
|
\list
|
||||||
|
|
||||||
|
\o \c {import com.nokia.symbian 1.0} for Symbian
|
||||||
|
|
||||||
|
\o \c {import com.meego 1.0} for MeeGo
|
||||||
|
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
The Qt Quick Application wizard adds the import statements automatically
|
||||||
|
when you select the component set to use for your project.
|
||||||
|
|
||||||
\image qmldesigner-qml-components.png "QML Components pane"
|
\image qmldesigner-qml-components.png "QML Components pane"
|
||||||
|
|
||||||
@@ -1288,6 +1323,11 @@
|
|||||||
that you specify explicitly are highlighted with blue color. In addition, property
|
that you specify explicitly are highlighted with blue color. In addition, property
|
||||||
changes in states are highlighted with blue.
|
changes in states are highlighted with blue.
|
||||||
|
|
||||||
|
You can use a context-menu to reset some element properties. To reset the
|
||||||
|
position or size property of an element, right-click the element and select
|
||||||
|
\gui {Edit > Reset Position} or \gui {Reset Size} in the context menu. To
|
||||||
|
set the visibility of the component, select \gui {Edit > Visibility}.
|
||||||
|
|
||||||
For more information on the properties available for an element, press \key {F1}.
|
For more information on the properties available for an element, press \key {F1}.
|
||||||
|
|
||||||
\section2 Setting Expressions
|
\section2 Setting Expressions
|
||||||
@@ -1311,6 +1351,17 @@
|
|||||||
For more information on the JavaScript environment provided by QML, see
|
For more information on the JavaScript environment provided by QML, see
|
||||||
\l{http://doc.qt.nokia.com/4.7/qdeclarativejavascript.html}{Integrating JavaScript}.
|
\l{http://doc.qt.nokia.com/4.7/qdeclarativejavascript.html}{Integrating JavaScript}.
|
||||||
|
|
||||||
|
\section2 Marking Text Elements for Translation
|
||||||
|
|
||||||
|
To support translators, mark each text element that should be translated.
|
||||||
|
In the \gui Properties pane, \gui Text field, select \gui tr.
|
||||||
|
|
||||||
|
\image qmldesigner-text-property-tr.png "Text properties"
|
||||||
|
|
||||||
|
The text string is enclosed in a \c qsTr call.
|
||||||
|
|
||||||
|
\image qml-translate.png "Text marked for translation"
|
||||||
|
|
||||||
\section2 Loading Placeholder Data
|
\section2 Loading Placeholder Data
|
||||||
|
|
||||||
Often, QML applications are prototyped with fake data that is later
|
Often, QML applications are prototyped with fake data that is later
|
||||||
@@ -1420,7 +1471,8 @@
|
|||||||
|
|
||||||
\section2 Building Transformations on Items
|
\section2 Building Transformations on Items
|
||||||
|
|
||||||
The \gui Advanced pane allows you configure advanced transformations, such as
|
The \gui Advanced pane allows you to configure advanced transformations,
|
||||||
|
such as
|
||||||
rotation, scale, and translation. You can assign any number of transformations
|
rotation, scale, and translation. You can assign any number of transformations
|
||||||
to an item. Each transformation is applied in order, one at a time.
|
to an item. Each transformation is applied in order, one at a time.
|
||||||
|
|
||||||
@@ -3185,6 +3237,7 @@
|
|||||||
\o \l{Opening a Project}
|
\o \l{Opening a Project}
|
||||||
\o \l{Adding Libraries to Projects}
|
\o \l{Adding Libraries to Projects}
|
||||||
\o \l{Connecting Maemo and MeeGo Harmattan Devices}
|
\o \l{Connecting Maemo and MeeGo Harmattan Devices}
|
||||||
|
\o \l{Connecting Generic Linux Devices}
|
||||||
\o \l{Connecting Symbian Devices}
|
\o \l{Connecting Symbian Devices}
|
||||||
\o \l{Managing Sessions}
|
\o \l{Managing Sessions}
|
||||||
\endlist
|
\endlist
|
||||||
@@ -4479,6 +4532,42 @@
|
|||||||
|
|
||||||
Debugging also works transparently.
|
Debugging also works transparently.
|
||||||
|
|
||||||
|
\section1 Running on Generic Linux Devices
|
||||||
|
|
||||||
|
\list 1
|
||||||
|
|
||||||
|
\o Build and run the application for \l{Running on Qt Simulator}
|
||||||
|
{Qt Simulator}.
|
||||||
|
|
||||||
|
\o Build and run the application for a device:
|
||||||
|
|
||||||
|
\list 1
|
||||||
|
|
||||||
|
\o Specify a connection to the device. For more information, see
|
||||||
|
\l{Connecting Generic Linux Devices}.
|
||||||
|
|
||||||
|
\o Click the \gui Run button.
|
||||||
|
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
Qt Creator uses the compiler specified in the project build settings
|
||||||
|
(tool chain) to build the application.
|
||||||
|
|
||||||
|
Qt Creator generates an installation package, installs it on the
|
||||||
|
device, and executes the selected application. The application views are
|
||||||
|
displayed on the device. Command-line output is visible in the Qt
|
||||||
|
Creator \gui {Application Output} view.
|
||||||
|
|
||||||
|
Choose \gui {Projects > Desktop > Run} to view the settings for deploying
|
||||||
|
the application on the connected device and creating the installation
|
||||||
|
package. For more information, see
|
||||||
|
\l{Specifying Run Settings for Generic Linux Devices}.
|
||||||
|
|
||||||
|
Debugging works transparently if GDB server is installed on the device and
|
||||||
|
it is compatible with the GDB on the host.
|
||||||
|
|
||||||
\section1 Running on Symbian
|
\section1 Running on Symbian
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
@@ -4903,6 +4992,24 @@
|
|||||||
information, see
|
information, see
|
||||||
\l{Deploying Applications to Maemo or MeeGo Harmattan Devices}.
|
\l{Deploying Applications to Maemo or MeeGo Harmattan Devices}.
|
||||||
|
|
||||||
|
\section2 Specifying Run Settings for Generic Linux Devices
|
||||||
|
|
||||||
|
To run an application on a generic Linux device (without MADDE support),
|
||||||
|
create and select a device configuration in the Desktop run settings for
|
||||||
|
your project. You can also pass command line arguments to your application.
|
||||||
|
|
||||||
|
\image qtcreator-run-settings-linux-devices.png "Run settings for Generic Linux devices"
|
||||||
|
|
||||||
|
In addition, you must create a connection from the development PC to the
|
||||||
|
device. Click \gui {Manage device configurations} to create connections.
|
||||||
|
For more information, see \l {Connecting Generic Linux Devices}.
|
||||||
|
|
||||||
|
When you run the application on the \gui Desktop target, Qt Creator
|
||||||
|
generates an installation package in the build directory. The name of the
|
||||||
|
directory is displayed in the \gui {Create tarball} step. Qt Creator copies
|
||||||
|
the tarball to devices by using the SSH file transfer protocol (SFTP) and
|
||||||
|
extracts it.
|
||||||
|
|
||||||
\section1 Specifying a Custom Executable to Run
|
\section1 Specifying a Custom Executable to Run
|
||||||
|
|
||||||
If you use CMake or the generic project type in Qt Creator, or want
|
If you use CMake or the generic project type in Qt Creator, or want
|
||||||
@@ -5092,7 +5199,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage creator-cache-profiler.html
|
\previouspage creator-running-valgrind-remotely.html
|
||||||
\page creator-deployment.html
|
\page creator-deployment.html
|
||||||
\nextpage creator-deployment-symbian.html
|
\nextpage creator-deployment-symbian.html
|
||||||
|
|
||||||
@@ -7804,7 +7911,7 @@
|
|||||||
The on-device mode is a special mode available for run configurations
|
The on-device mode is a special mode available for run configurations
|
||||||
targeting mobile devices. It debugs processes running on mobile
|
targeting mobile devices. It debugs processes running on mobile
|
||||||
devices using on-device debugging agents, such as CODA on Symbian and
|
devices using on-device debugging agents, such as CODA on Symbian and
|
||||||
gdbserver on Maemo and MeeGo Harmattan.
|
gdbserver on Linux-based devices.
|
||||||
|
|
||||||
To launch the debugger in the on-device mode, open the project, select a
|
To launch the debugger in the on-device mode, open the project, select a
|
||||||
run configuration that targets a mobile device, and click the
|
run configuration that targets a mobile device, and click the
|
||||||
@@ -8072,7 +8179,9 @@
|
|||||||
By default, the views are locked into place in the workspace. Select
|
By default, the views are locked into place in the workspace. Select
|
||||||
\gui {Window > Views > Locked} to unlock the views. Drag and drop the
|
\gui {Window > Views > Locked} to unlock the views. Drag and drop the
|
||||||
views into new positions on the screen. Drag view borders to resize the
|
views into new positions on the screen. Drag view borders to resize the
|
||||||
views. The size and position of views are saved for future sessions.
|
views. The size and position of views are saved for future sessions. Select
|
||||||
|
\gui {Window > Views > Reset to Default Layout} to reset the views to
|
||||||
|
their original sizes and positions.
|
||||||
|
|
||||||
\section1 Using the Debugger
|
\section1 Using the Debugger
|
||||||
|
|
||||||
@@ -8823,10 +8932,11 @@
|
|||||||
The debugging helpers for QML provide you with code completion for custom modules
|
The debugging helpers for QML provide you with code completion for custom modules
|
||||||
(\c qmldump) and debugging Qt Quick UI projects (\c qmlobserver).
|
(\c qmldump) and debugging Qt Quick UI projects (\c qmlobserver).
|
||||||
|
|
||||||
You have to build the QML Observer once for each Qt version that you want to debug
|
You have to build the QML Inspector once for each Qt version that you want
|
||||||
|
to debug
|
||||||
with. Select \gui{Tools > Options... > Qt4 > Qt Versions}.
|
with. Select \gui{Tools > Options... > Qt4 > Qt Versions}.
|
||||||
|
|
||||||
\note QML Observer requires Qt 4.7.1 or later.
|
\note QML Inspector requires Qt 4.7.1 or later.
|
||||||
|
|
||||||
\section1 Enabling Debugging Helpers for Qt's Bootstrapped Applications
|
\section1 Enabling Debugging Helpers for Qt's Bootstrapped Applications
|
||||||
|
|
||||||
@@ -8972,7 +9082,7 @@
|
|||||||
\o Select \gui Projects, and then select the \gui QML check box in the
|
\o Select \gui Projects, and then select the \gui QML check box in the
|
||||||
\gui {Run Settings}, to enable QML debugging.
|
\gui {Run Settings}, to enable QML debugging.
|
||||||
|
|
||||||
\o Compile the QML Observer debugging helper. For more information, see
|
\o Compile the QML Inspector debugging helper. For more information, see
|
||||||
\l{Debugging Helpers for QML}.
|
\l{Debugging Helpers for QML}.
|
||||||
|
|
||||||
\endlist
|
\endlist
|
||||||
@@ -9048,7 +9158,7 @@
|
|||||||
|
|
||||||
You can see the current value of a property by hovering over it in the code editor.
|
You can see the current value of a property by hovering over it in the code editor.
|
||||||
|
|
||||||
\section1 Previewing QML Changes at Runtime
|
\section1 Applying QML Changes at Runtime
|
||||||
|
|
||||||
If you change property values or add properties in the code editor, the changes
|
If you change property values or add properties in the code editor, the changes
|
||||||
are updated in the running application when you save them. If live preview is not supported
|
are updated in the running application when you save them. If live preview is not supported
|
||||||
@@ -9060,37 +9170,46 @@
|
|||||||
|
|
||||||
\section1 Inspecting QML at Runtime
|
\section1 Inspecting QML at Runtime
|
||||||
|
|
||||||
While the application is running, you can use the \gui {QML Observer} view to
|
While the application is running, you can use the \gui {QML Inspector} view to
|
||||||
explore the object structure, debug animations, and inspect colors.
|
explore the object structure, debug animations, and inspect colors.
|
||||||
To open the \gui {QML Observer} view, choose \gui {Window > View > QML Observer}.
|
To open the \gui {QML Inspector} view, choose \gui {Window > View >
|
||||||
|
QML Inspector}.
|
||||||
The view shows the properties of the currently selected QML element.
|
The view shows the properties of the currently selected QML element.
|
||||||
|
|
||||||
\image qml-observer-view.png "QML Observer view"
|
\image qml-observer-view.png "QML Inspector view"
|
||||||
|
|
||||||
When you debug complex applications, you can use the observe
|
When you debug complex applications, you can use the inspection
|
||||||
mode to jump to the position in code where an element is defined. To switch to
|
mode to jump to the position in code where an element is defined. You are
|
||||||
the observe mode, click
|
switched to the inspection mode, when you click the \gui Select, \gui Zoom,
|
||||||
\inlineimage qml-observer-bar-observe.png
|
or \gui {Color Picker} button
|
||||||
on the toolbar.
|
on the toolbar.
|
||||||
|
|
||||||
Click elements in the running application to jump to their definitions in the code.
|
\image qml-observer-buttons.png "QML Inspector toolbar"
|
||||||
Double-click elements to browse the element hierarchy. The hierarchy is displayed
|
|
||||||
as bread crumbs in the \gui {QML Observer} view.
|
|
||||||
|
|
||||||
To move the application running in \QQV to the front, select the
|
When the \gui Select tool is enabled, you can click elements in the running
|
||||||
\gui {Show Application on Top} button.
|
application to jump to their definitions in the code. The properties of the
|
||||||
|
selected element are displayed in the \gui {QML Inspector} view. The element
|
||||||
|
hierarchy is displayed as a bread crumb path.
|
||||||
|
|
||||||
You can also right-click an element in the running application to view the element
|
You can also right-click an element in the running application to view the element
|
||||||
hierarchy as a context menu. Select an element to jump to its definition in code.
|
hierarchy as a context menu.
|
||||||
|
|
||||||
\image qml-observer-context-menu.png "QML Observer"
|
\image qml-observer-context-menu.png "QML Inspector"
|
||||||
|
|
||||||
To zoom in and out of the application, click the \gui Zoom button.
|
To switch to the zoom mode, click the \gui Zoom button. Click in the
|
||||||
|
running application to zoom in. Right-click to open a context menu that
|
||||||
|
contains zoom controls.
|
||||||
|
|
||||||
To inspect colors, click the \gui {Color Picker} button. You can also click
|
To inspect colors, click the \gui {Color Picker} button. You can also click
|
||||||
\inlineimage qml-observer-bar-copy-color.png "Copy Color button"
|
\inlineimage qml-observer-bar-copy-color.png "Copy Color button"
|
||||||
to copy the color definition to the clipboard.
|
to copy the color definition to the clipboard.
|
||||||
|
|
||||||
|
To switch out of the inspection mode, deselect the \gui Select, \gui Zoom,
|
||||||
|
and \gui {Color Picker} button.
|
||||||
|
|
||||||
|
To move the application running in \QQV to the front, select the
|
||||||
|
\gui {Show Application on Top} button.
|
||||||
|
|
||||||
\section1 Debugging Animations
|
\section1 Debugging Animations
|
||||||
|
|
||||||
\image qml-observer.png
|
\image qml-observer.png
|
||||||
@@ -9845,7 +9964,12 @@
|
|||||||
|
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
In the code editor, write the code to use the data models.
|
When you add a Grid View, List View, or Path View element, the
|
||||||
|
\l{http://doc.qt.nokia.com/4.7/qml-listmodel.html}{ListModel} and the
|
||||||
|
delegate component that creates an instance for each item in the model are
|
||||||
|
added automatically. You can edit element properties in the \gui Properties
|
||||||
|
pane or in the code editor. You can also replace the default model and
|
||||||
|
delegate with other, more complex models and delegates in the code editor.
|
||||||
|
|
||||||
\section1 Positioning Items on Screens
|
\section1 Positioning Items on Screens
|
||||||
|
|
||||||
@@ -10014,6 +10138,18 @@
|
|||||||
Note: GIMP does not support grouping, and therefore, each layer is exported as
|
Note: GIMP does not support grouping, and therefore, each layer is exported as
|
||||||
an item in GIMP.
|
an item in GIMP.
|
||||||
|
|
||||||
|
You can open the QML file in Qt Creator for editing. If you edit the file in Adobe
|
||||||
|
Photoshop and export it to the same directory again, any changes you made in Qt
|
||||||
|
Creator are overwritten. However, you can re-export graphical assets without
|
||||||
|
recreating the QML code.
|
||||||
|
|
||||||
|
If you create vector graphics with other tools that have an Adobe Photoshop export
|
||||||
|
option, such as Adobe Illustrator, you can export them first to Photoshop
|
||||||
|
and then
|
||||||
|
to QML.
|
||||||
|
|
||||||
|
\section1 Conversion Rules
|
||||||
|
|
||||||
The following rules apply to the conversions:
|
The following rules apply to the conversions:
|
||||||
|
|
||||||
\list
|
\list
|
||||||
@@ -10034,14 +10170,38 @@
|
|||||||
|
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
You can open the QML file in Qt Creator for editing. If you edit the file in Adobe
|
\section1 Preparing Files for Conversion
|
||||||
Photoshop and export it to the same directory again, any changes you made in Qt
|
|
||||||
Creator are overwritten. However, you can re-export graphical assets without
|
|
||||||
recreating the QML code.
|
|
||||||
|
|
||||||
If you create vector graphics with other tools that have an Adobe Photoshop export
|
To create QML files that are easy to use, prepare the Adobe Photoshop or
|
||||||
option,such as Adobe Illustrator, you can export them first to Photoshop and then
|
GIMP designs for exporting, as follows:
|
||||||
to QML.
|
|
||||||
|
\list
|
||||||
|
|
||||||
|
\o To minimize the number of elements, minimize the number of layers or
|
||||||
|
use top-level layer groups, because each layer or layer group is
|
||||||
|
exported as a Text or Image element.
|
||||||
|
|
||||||
|
\o To make sure that all related elements are exported to the same
|
||||||
|
element, use top-level layer groups.
|
||||||
|
|
||||||
|
\o To determine that some layers are not exported, hide them, and
|
||||||
|
deselect the \gui {Export hidden} check box during exporting.
|
||||||
|
|
||||||
|
\o To make it easier to find the layers and layer groups after
|
||||||
|
exporting them, use descriptive names for them.
|
||||||
|
|
||||||
|
\o To make sure that image dimensions are preserved during export,
|
||||||
|
create at least one fully filled layer (which can be hidden), such
|
||||||
|
as a background layer. If the export script does not find a fully
|
||||||
|
filled layer, it resizes all images to the size of the canvas.
|
||||||
|
|
||||||
|
\o To prevent errors during export, make sure that the layers are not
|
||||||
|
locked. Locked layers cannot be exported.
|
||||||
|
|
||||||
|
\o To avoid unexpected results, do not use Blending Mode effects. They
|
||||||
|
are not exported.
|
||||||
|
|
||||||
|
\endlist
|
||||||
|
|
||||||
\section1 Exporting from Adobe Photoshop to QML
|
\section1 Exporting from Adobe Photoshop to QML
|
||||||
|
|
||||||
@@ -10329,16 +10489,16 @@
|
|||||||
|
|
||||||
\section1 Starting the Emulator
|
\section1 Starting the Emulator
|
||||||
|
|
||||||
The \gui {Start Maemo Emulator} button is visible if you have a project
|
The \gui {Start MeeGo Emulator} button is visible if you have a project
|
||||||
open in Qt Creator for which you have added the Maemo or MeeGo Harmattan
|
open in Qt Creator for which you have added the Maemo or MeeGo Harmattan
|
||||||
build target. It starts the Maemo or MeeGo Harmattan emulator, depending
|
build target. It starts the Maemo or MeeGo Harmattan emulator, depending
|
||||||
on the selected target.
|
on the selected target.
|
||||||
|
|
||||||
To start the emulator, click
|
To start the emulator, click
|
||||||
\inlineimage qtcreator-maemo-emulator-button.png "Start Maemo Emulator button"
|
\inlineimage qtcreator-maemo-emulator-button.png "Start MeeGo Emulator button"
|
||||||
.
|
.
|
||||||
|
|
||||||
Test your application on the Maemo emulator as on a device. For a list of
|
Test your application on the emulator as on a device. For a list of
|
||||||
keyboard shortcuts that you can use to emulate keys and functions, see
|
keyboard shortcuts that you can use to emulate keys and functions, see
|
||||||
\l {Emulating Device Keys}.
|
\l {Emulating Device Keys}.
|
||||||
|
|
||||||
@@ -10355,7 +10515,8 @@
|
|||||||
If the emulator crashes, you are asked whether you want to try software
|
If the emulator crashes, you are asked whether you want to try software
|
||||||
rendering, instead.
|
rendering, instead.
|
||||||
|
|
||||||
To specify the OpenGL mode, select \gui {Tools > Options... > Maemo > Qemu
|
To specify the OpenGL mode, select \gui {Tools > Options... > Linux Devices
|
||||||
|
> Maemo Qemu
|
||||||
Settings}.
|
Settings}.
|
||||||
|
|
||||||
\section1 Emulating Device Keys
|
\section1 Emulating Device Keys
|
||||||
@@ -10453,7 +10614,7 @@
|
|||||||
and displays the text \e {Shutting down} in the emulator window title pane.
|
and displays the text \e {Shutting down} in the emulator window title pane.
|
||||||
The emulator closes shortly after this.
|
The emulator closes shortly after this.
|
||||||
|
|
||||||
You can also select the \gui {Start Maemo Emulator} button to close the
|
You can also select the \gui {Start MeeGo Emulator} button to close the
|
||||||
emulator. This is a faster way to close the emulator, because it does not
|
emulator. This is a faster way to close the emulator, because it does not
|
||||||
wait for the operating system running on the emulated machine to shut down,
|
wait for the operating system running on the emulated machine to shut down,
|
||||||
but this also means that it is less safe.
|
but this also means that it is less safe.
|
||||||
@@ -12060,7 +12221,8 @@
|
|||||||
\l{http://valgrind.org/info/tools.html}{Valgrind tool suite} to detect
|
\l{http://valgrind.org/info/tools.html}{Valgrind tool suite} to detect
|
||||||
problems that are related to memory management in applications.
|
problems that are related to memory management in applications.
|
||||||
|
|
||||||
\note Memcheck is supported on Linux and Mac OS.
|
\note Memcheck is supported locally on Linux and Mac OS. You can run it on
|
||||||
|
a remote host from Windows.
|
||||||
|
|
||||||
After you download and install Valgrind tools, you can use Memcheck from Qt
|
After you download and install Valgrind tools, you can use Memcheck from Qt
|
||||||
Creator.
|
Creator.
|
||||||
@@ -12090,7 +12252,7 @@
|
|||||||
While the application is running, Memcheck checks all reads and writes of
|
While the application is running, Memcheck checks all reads and writes of
|
||||||
memory and intercepts calls that allocate or free memory or create or
|
memory and intercepts calls that allocate or free memory or create or
|
||||||
delete memory blocks. When you stop Memcheck, it displays the results in
|
delete memory blocks. When you stop Memcheck, it displays the results in
|
||||||
the \gui Analysis output pane. Click a line to view where a memory leak
|
the \gui Analysis view. Click a line to view where a memory leak
|
||||||
occurred and a stack trace that shows what caused it.
|
occurred and a stack trace that shows what caused it.
|
||||||
|
|
||||||
\image analyzer-issues.png "Analysis view"
|
\image analyzer-issues.png "Analysis view"
|
||||||
@@ -12105,16 +12267,17 @@
|
|||||||
|
|
||||||
Stack traces can get quite large and confusing, and therefore, reading them
|
Stack traces can get quite large and confusing, and therefore, reading them
|
||||||
from the bottom up can help. If the stack trace is not big enough or it is
|
from the bottom up can help. If the stack trace is not big enough or it is
|
||||||
too big, select \gui {Tools > Options... > Analyzer > Memory Analysis}.
|
too big, select \gui {Tools > Options... > Analyzer}.
|
||||||
Define the length of the stack trace in the \gui {Backtrace frame count}
|
Define the length of the stack trace in the \gui {Backtrace frame count}
|
||||||
field.
|
field.
|
||||||
|
|
||||||
|
\image qtcreator-valgrind-memcheck-options.png "Memory Analysis options"
|
||||||
|
|
||||||
Memcheck also reports uses of uninitialised values, most commonly with the
|
Memcheck also reports uses of uninitialised values, most commonly with the
|
||||||
message \gui {Conditional jump or move depends on uninitialised value(s).}
|
message \gui {Conditional jump or move depends on uninitialised value(s).}
|
||||||
To determine the root cause of these errors, the \gui {Track origins of
|
To determine the root cause of these errors, the \gui {Track origins of
|
||||||
uninitialized memory} check box is selected by default. This makes Memcheck
|
uninitialized memory} check box is selected by default. You can deselect it
|
||||||
run slower, but the extra information you get often saves a lot of time
|
to make Memcheck run faster.
|
||||||
figuring out where the uninitialised values are coming from.
|
|
||||||
|
|
||||||
Memcheck detects numerous problems in the system libraries, such as the C
|
Memcheck detects numerous problems in the system libraries, such as the C
|
||||||
library, which come pre-installed with your OS. As you cannot easily fix
|
library, which come pre-installed with your OS. As you cannot easily fix
|
||||||
@@ -12129,26 +12292,26 @@
|
|||||||
\l{http://valgrind.org/docs/manual/manual-core.html#manual-core.suppress}
|
\l{http://valgrind.org/docs/manual/manual-core.html#manual-core.suppress}
|
||||||
{Suppressing Errors} in the Valgrind documentation.
|
{Suppressing Errors} in the Valgrind documentation.
|
||||||
|
|
||||||
\image qtcreator-valgrind-memcheck-options.png "Memory Analysis options"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage creator-analyzer.html
|
\previouspage creator-analyzer.html
|
||||||
\page creator-cache-profiler.html
|
\page creator-cache-profiler.html
|
||||||
\nextpage creator-deployment.html
|
\nextpage creator-running-valgrind-remotely.html
|
||||||
|
|
||||||
\title Profiling Function Execution
|
\title Profiling Function Execution
|
||||||
|
|
||||||
You can use the Callgrind tool included in the
|
You can use the Callgrind tool included in the
|
||||||
\l{http://valgrind.org/info/tools.html}{Valgrind tool suite} to detect
|
\l{http://valgrind.org/info/tools.html}{Valgrind tool suite} to detect
|
||||||
problems that are related to cache usage.
|
problems that are related to executing functions.
|
||||||
|
|
||||||
After you download and install Valgrind tools, you can use Callgrind from Qt
|
After you download and install Valgrind tools, you can use Callgrind from Qt
|
||||||
Creator.
|
Creator.
|
||||||
|
|
||||||
|
\note Callgrind is supported locally on Linux and Mac OS. You can run it on
|
||||||
|
a remote host from Windows.
|
||||||
|
|
||||||
To analyze applications:
|
To analyze applications:
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
@@ -12187,12 +12350,12 @@
|
|||||||
|
|
||||||
\section1 Selecting Profiling Options
|
\section1 Selecting Profiling Options
|
||||||
|
|
||||||
To specify settings for Callgrind, select \gui {Tools > Options... >
|
To specify settings for Valgrind, select \gui {Tools > Options... >
|
||||||
Analyzer > Profiling}.
|
Analyzer}. The \gui {Profiling Options} group contains Callgrind options.
|
||||||
|
|
||||||
\image qtcreator-valgrind-callgrind-options.png "Profiling options"
|
\image qtcreator-valgrind-callgrind-options.png "Valgrind options"
|
||||||
|
|
||||||
In the \gui {Result view: Show events with inclusive costs higher than}
|
In the \gui {Result view: Minimum event cost}
|
||||||
field, limit the amount of results the profiler gives you to increase
|
field, limit the amount of results the profiler gives you to increase
|
||||||
profiler performance.
|
profiler performance.
|
||||||
|
|
||||||
@@ -12336,24 +12499,35 @@
|
|||||||
|
|
||||||
In addition, Qt Creator integrates Valgrind code analysis tools for
|
In addition, Qt Creator integrates Valgrind code analysis tools for
|
||||||
detecting memory leaks and profiling function execution. These tools are
|
detecting memory leaks and profiling function execution. These tools are
|
||||||
only
|
supported locally only on Linux and Mac OS. You can run them on a remote
|
||||||
supported on Linux and Mac OS. You have to download and install them
|
host from Windows. You have to download and install them
|
||||||
separately to use them from Qt Creator.
|
separately to use them from Qt Creator.
|
||||||
|
|
||||||
You can use the code analysis tools in the \gui Analyze mode or from the
|
You can use the code analysis tools in the \gui Analyze mode. To switch to
|
||||||
\gui {Debug > Start Analyzer} menu. In \gui Analyze mode, you can switch
|
\gui Analyze mode, select \gui Analyze in the mode selector, or select the
|
||||||
|
\gui {Analyze} menu and then select a tool. When you are in the
|
||||||
|
\gui Analyze mode, you can switch
|
||||||
between tools by selecting them in the menu on the toolbar.
|
between tools by selecting them in the menu on the toolbar.
|
||||||
|
|
||||||
\image qtcreator-analyze-menu "Analyze mode menu"
|
\image qtcreator-analyze-menu "Analyze mode menu"
|
||||||
|
|
||||||
To run the Valgrind tools on a remote device over SSH, select \gui {Debug >
|
By default, the views in the \gui Analyze mode are locked into place in the
|
||||||
Start Analyzer > Start Remote}.
|
workspace. Select \gui {Window > Views > Locked} to unlock the views. Drag
|
||||||
|
and drop the views into new positions on the screen. Drag view borders to
|
||||||
|
resize the views. The size and position of views are saved for future
|
||||||
|
sessions. Select \gui {Window > Views > Reset to Default Layout} to reset
|
||||||
|
the views to their original sizes and positions.
|
||||||
|
|
||||||
To stop the currently running analyzer, select \gui {Debug > Start Analyzer
|
To run the Valgrind tools on a remote host over SSH, select \gui {Analyze
|
||||||
|
> Valgrind Analyze Memory (Remote)} or \gui {Valgrind Function Profile
|
||||||
|
(Remote)}.
|
||||||
|
|
||||||
|
To stop the currently running analyzer, select \gui {Analyze
|
||||||
> Stop}.
|
> Stop}.
|
||||||
|
|
||||||
To select options for the Valgrind tools, select \gui {Tools > Options... >
|
To select options for the Valgrind tools, select \gui {Tools > Options... >
|
||||||
Analyzer}.
|
Analyzer}. You can override the general settings for each project in the
|
||||||
|
\gui {Run Settings} for the project.
|
||||||
|
|
||||||
The following sections describe how to use the code analysis tools:
|
The following sections describe how to use the code analysis tools:
|
||||||
|
|
||||||
@@ -12369,6 +12543,9 @@
|
|||||||
\o \l{Profiling Function Execution} describes how to use the Valgrind Callgrind
|
\o \l{Profiling Function Execution} describes how to use the Valgrind Callgrind
|
||||||
tool to find cache misses in the code.
|
tool to find cache misses in the code.
|
||||||
|
|
||||||
|
\o \l{Running Valgrind Tools Remotely} describes how to run the
|
||||||
|
Valgrind tools on a remote host.
|
||||||
|
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
*/
|
*/
|
||||||
@@ -12386,18 +12563,28 @@
|
|||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
|
|
||||||
|
\o To be able to profile an application, you must set up QML debugging
|
||||||
|
for the project. For more information, see
|
||||||
|
\l{Setting Up QML Debugging}.
|
||||||
|
|
||||||
\o In the \gui Projects mode, select Qt 4.7.4 in the \gui {Qt version}
|
\o In the \gui Projects mode, select Qt 4.7.4 in the \gui {Qt version}
|
||||||
field.
|
field.
|
||||||
|
|
||||||
\o Select \gui Analyze to open the \gui Analyze mode.
|
\note To profile applications on devices, you must install Qt 4.7.4
|
||||||
|
or later libraries on them.
|
||||||
|
|
||||||
|
\o Select \gui {Analyze > QML Profiler} to profile the current
|
||||||
|
application.
|
||||||
|
|
||||||
|
\image qtcreator-qml-performance-monitor-toolbar.png "QML Profiler toolbar"
|
||||||
|
|
||||||
\o Select the
|
\o Select the
|
||||||
\inlineimage qtcreator-analyze-start-button.png "Start button"
|
\inlineimage qtcreator-analyze-start-button.png "Start button"
|
||||||
button to start the application from the QML Profiler.
|
button to start the application from the QML Profiler.
|
||||||
|
|
||||||
\note: If data collection does not start automatically, select the
|
\note If data collection does not start automatically, select the
|
||||||
\inlineimage qtcreator-analyzer-button.png "Analyzer button"
|
\inlineimage qtcreator-analyzer-button.png "Analyzer button"
|
||||||
.
|
button.
|
||||||
|
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
@@ -12410,8 +12597,6 @@
|
|||||||
button. Data collection takes time, and therefore, there might be a delay
|
button. Data collection takes time, and therefore, there might be a delay
|
||||||
before the data is displayed.
|
before the data is displayed.
|
||||||
|
|
||||||
\image qtcreator-qml-performance-monitor-toolbar.png "QML Profiler toolbar"
|
|
||||||
|
|
||||||
Do not use application commands to exit the application, because data is
|
Do not use application commands to exit the application, because data is
|
||||||
sent to the QML Profiler when you select the \gui Stop button.
|
sent to the QML Profiler when you select the \gui Stop button.
|
||||||
The application continues to run for some seconds, after which it is stopped
|
The application continues to run for some seconds, after which it is stopped
|
||||||
@@ -12422,23 +12607,6 @@
|
|||||||
application is launched. Data collection starts when you select the button
|
application is launched. Data collection starts when you select the button
|
||||||
again.
|
again.
|
||||||
|
|
||||||
To monitor applications running on devices:
|
|
||||||
|
|
||||||
\list 1
|
|
||||||
|
|
||||||
\o On the command line, enter the following command to launch the Qt
|
|
||||||
Quick application with parameters:
|
|
||||||
|
|
||||||
\c {<application> -qmljsdebugger=port:33456}
|
|
||||||
|
|
||||||
The port number is specified in the run settings of the project in
|
|
||||||
the \gui {Debug port} field.
|
|
||||||
|
|
||||||
\o Select \gui {Debug > Start Analyzer > Attach...} to attach the QML
|
|
||||||
Profiler to the running application.
|
|
||||||
|
|
||||||
\endlist
|
|
||||||
|
|
||||||
\section1 Analyzing Collected Data
|
\section1 Analyzing Collected Data
|
||||||
|
|
||||||
The \gui Timeline view displays graphical representations of:
|
The \gui Timeline view displays graphical representations of:
|
||||||
@@ -12462,8 +12630,16 @@
|
|||||||
\image qtcreator-qml-performance-monitor.png "QML Profiler"
|
\image qtcreator-qml-performance-monitor.png "QML Profiler"
|
||||||
|
|
||||||
The outline summarizes the period for which data was collected. Drag the
|
The outline summarizes the period for which data was collected. Drag the
|
||||||
range bar or click the outline to move on the outline. Drag the borders of
|
zoom range or click the outline to move on the outline. You can also move
|
||||||
the range bar to zoom in and out.
|
between events by clicking the \gui Previous and \gui Next buttons.
|
||||||
|
|
||||||
|
Click the zoom buttons or drag the zoom handles to zoom in and out.
|
||||||
|
|
||||||
|
You can define an event range to view the frame rate of events and to
|
||||||
|
compare it with the frame rate of similar events. Click on the timeline to
|
||||||
|
specify the beginning of the event range. Drag the cursor to define the end
|
||||||
|
of the range. The length of the range indicates the frame rate of the event.
|
||||||
|
You can drag the timeline below the event range to compare events.
|
||||||
|
|
||||||
Additional information is displayed on the rows above the outline.
|
Additional information is displayed on the rows above the outline.
|
||||||
Each row in the timeline describes a type of QML events that were recorded.
|
Each row in the timeline describes a type of QML events that were recorded.
|
||||||
@@ -12481,19 +12657,19 @@
|
|||||||
The time bar at the top of the \gui Timeline view displays the time in
|
The time bar at the top of the \gui Timeline view displays the time in
|
||||||
seconds. To see the time in milliseconds, move the mouse on the time bar.
|
seconds. To see the time in milliseconds, move the mouse on the time bar.
|
||||||
|
|
||||||
\section1 Viewing Bindings
|
\section1 Viewing Events
|
||||||
|
|
||||||
The \gui Bindings view displays the number of times each binding is called
|
The \gui Events view displays the number of times each binding is called
|
||||||
and the time the calls take. This allows you to examine which bindings you
|
and the time the calls take. This allows you to examine which events you
|
||||||
need to optimize. A high number of calls might indicate that a binding is
|
need to optimize. A high number of calls might indicate that a binding is
|
||||||
called unnecessarily. Click on a binding to move to it in the source code
|
called unnecessarily. Click on a binding to move to it in the source code
|
||||||
in the code editor.
|
in the code editor.
|
||||||
|
|
||||||
\image qtcreator-analyzer-bindings.png "Bindings view"
|
\image qtcreator-analyzer-bindings.png "Events view"
|
||||||
|
|
||||||
\section1 Viewing Calling and Called Bindings
|
\section1 Viewing Calling and Called Events
|
||||||
|
|
||||||
The \gui Callees and \gui Callers views show dependencies between bindings.
|
The \gui Callees and \gui Callers views show dependencies between events.
|
||||||
They allow you to examine the internal functions of the application.
|
They allow you to examine the internal functions of the application.
|
||||||
|
|
||||||
The \gui Callees view summarizes the QML events that a binding triggers.
|
The \gui Callees view summarizes the QML events that a binding triggers.
|
||||||
@@ -12520,7 +12696,7 @@
|
|||||||
environment variable QML_DISABLE_OPTIMIZER to 1. To set the environment
|
environment variable QML_DISABLE_OPTIMIZER to 1. To set the environment
|
||||||
variable for the current project in the project settings:
|
variable for the current project in the project settings:
|
||||||
|
|
||||||
\list
|
\list 1
|
||||||
|
|
||||||
\o Select \gui {Projects > Run}.
|
\o Select \gui {Projects > Run}.
|
||||||
|
|
||||||
@@ -12531,3 +12707,35 @@
|
|||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\contentspage index.html
|
||||||
|
\previouspage creator-cache-profiler.html
|
||||||
|
\page creator-running-valgrind-remotely.html
|
||||||
|
\nextpage creator-deployment.html
|
||||||
|
|
||||||
|
\title Running Valgrind Tools Remotely
|
||||||
|
|
||||||
|
Qt Creator integrates Valgrind code analysis tools for detecting memory
|
||||||
|
leaks and profiling function execution. These tools are supported locally
|
||||||
|
only on Linux and Mac OS, but you can run them on a remote host from
|
||||||
|
Windows.
|
||||||
|
|
||||||
|
To run the Valgrind tools on a remote host over SSH:
|
||||||
|
|
||||||
|
\list 1
|
||||||
|
|
||||||
|
\o Select \gui {Analyze > Valgrind Analyze Memory (Remote)} or
|
||||||
|
\gui {Valgrind Function Profile (Remote)}.
|
||||||
|
|
||||||
|
\image qtcreator-valgrind-remote-settings.png "Start Debugger dialog"
|
||||||
|
|
||||||
|
\o In the \gui Remote group, specify the connection to the remote host.
|
||||||
|
|
||||||
|
\o In the \gui Target group, specify the application to run and analyze
|
||||||
|
on the remote host.
|
||||||
|
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
*/
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\if defined(qcmanual)
|
\if defined(qcmanual)
|
||||||
\previouspage creator-developing-maemo.html
|
\previouspage creator-developing-generic-linux.html
|
||||||
\else
|
\else
|
||||||
\previouspage sdk-gs.html
|
\previouspage sdk-gs.html
|
||||||
\endif
|
\endif
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
|
include(qtcreator.pri)
|
||||||
|
|
||||||
#version check qt
|
#version check qt
|
||||||
contains(QT_VERSION, ^4\\.[0-6]\\..*) {
|
!minQtVersion(4, 7, 4) {
|
||||||
message("Cannot build Qt Creator with Qt version $${QT_VERSION}.")
|
message("Cannot build Qt Creator with Qt version $${QT_VERSION}.")
|
||||||
error("Use at least Qt 4.7.")
|
error("Use at least Qt 4.7.4.")
|
||||||
}
|
}
|
||||||
|
|
||||||
include(qtcreator.pri)
|
|
||||||
include(doc/doc.pri)
|
include(doc/doc.pri)
|
||||||
|
|
||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
|
|||||||
@@ -107,58 +107,58 @@ typeInfoCache = {}
|
|||||||
def lookupType(typestring):
|
def lookupType(typestring):
|
||||||
type = typeCache.get(typestring)
|
type = typeCache.get(typestring)
|
||||||
#warn("LOOKUP 1: %s -> %s" % (typestring, type))
|
#warn("LOOKUP 1: %s -> %s" % (typestring, type))
|
||||||
if type is None:
|
if not type is None:
|
||||||
ts = typestring
|
return type
|
||||||
while True:
|
|
||||||
#WARN("ts: '%s'" % ts)
|
ts = typestring
|
||||||
if ts.startswith("class "):
|
while True:
|
||||||
ts = ts[6:]
|
#WARN("ts: '%s'" % ts)
|
||||||
elif ts.startswith("struct "):
|
if ts.startswith("class "):
|
||||||
ts = ts[7:]
|
ts = ts[6:]
|
||||||
elif ts.startswith("const "):
|
elif ts.startswith("struct "):
|
||||||
ts = ts[6:]
|
ts = ts[7:]
|
||||||
elif ts.startswith("volatile "):
|
elif ts.startswith("const "):
|
||||||
ts = ts[9:]
|
ts = ts[6:]
|
||||||
elif ts.startswith("enum "):
|
elif ts.startswith("volatile "):
|
||||||
ts = ts[5:]
|
ts = ts[9:]
|
||||||
elif ts.endswith(" const"):
|
elif ts.startswith("enum "):
|
||||||
ts = ts[:-6]
|
ts = ts[5:]
|
||||||
elif ts.endswith(" volatile"):
|
elif ts.endswith(" const"):
|
||||||
ts = ts[:-9]
|
ts = ts[:-6]
|
||||||
elif ts.endswith("*const"):
|
elif ts.endswith(" volatile"):
|
||||||
ts = ts[:-5]
|
ts = ts[:-9]
|
||||||
elif ts.endswith("*volatile"):
|
elif ts.endswith("*const"):
|
||||||
ts = ts[:-8]
|
ts = ts[:-5]
|
||||||
else:
|
elif ts.endswith("*volatile"):
|
||||||
break
|
ts = ts[:-8]
|
||||||
try:
|
else:
|
||||||
#warn("LOOKING UP '%s'" % ts)
|
break
|
||||||
type = gdb.lookup_type(ts)
|
|
||||||
except RuntimeError, error:
|
if ts.endswith('*'):
|
||||||
#warn("LOOKING UP '%s': %s" % (ts, error))
|
type = lookupType(ts[0:-1])
|
||||||
# See http://sourceware.org/bugzilla/show_bug.cgi?id=11912
|
|
||||||
exp = "(class '%s'*)0" % ts
|
|
||||||
try:
|
|
||||||
type = parseAndEvaluate(exp).type.target()
|
|
||||||
except:
|
|
||||||
# Can throw "RuntimeError: No type named class Foo."
|
|
||||||
pass
|
|
||||||
except:
|
|
||||||
#warn("LOOKING UP '%s' FAILED" % ts)
|
|
||||||
pass
|
|
||||||
#warn(" RESULT: '%s'" % type)
|
|
||||||
#if not type is None:
|
|
||||||
# warn(" FIELDS: '%s'" % type.fields())
|
|
||||||
typeCache[typestring] = type
|
|
||||||
if type is None and typestring.endswith('*'):
|
|
||||||
type = lookupType(typestring[0:-1])
|
|
||||||
if not type is None:
|
if not type is None:
|
||||||
type = type.pointer()
|
type = type.pointer()
|
||||||
typeCache[typestring] = type
|
typeCache[typestring] = type
|
||||||
if type is None:
|
return type
|
||||||
# could be gdb.lookup_type("char[3]") generating
|
|
||||||
# "RuntimeError: No type named char[3]"
|
try:
|
||||||
|
#warn("LOOKING UP '%s'" % ts)
|
||||||
|
type = gdb.lookup_type(ts)
|
||||||
|
except RuntimeError, error:
|
||||||
|
#warn("LOOKING UP '%s': %s" % (ts, error))
|
||||||
|
# See http://sourceware.org/bugzilla/show_bug.cgi?id=11912
|
||||||
|
exp = "(class '%s'*)0" % ts
|
||||||
|
try:
|
||||||
|
type = parseAndEvaluate(exp).type.target()
|
||||||
|
except:
|
||||||
|
# Can throw "RuntimeError: No type named class Foo."
|
||||||
|
pass
|
||||||
|
except:
|
||||||
|
#warn("LOOKING UP '%s' FAILED" % ts)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
# This could still be None as gdb.lookup_type("char[3]") generates
|
||||||
|
# "RuntimeError: No type named char[3]"
|
||||||
return type
|
return type
|
||||||
|
|
||||||
def cleanAddress(addr):
|
def cleanAddress(addr):
|
||||||
@@ -167,7 +167,8 @@ def cleanAddress(addr):
|
|||||||
# We cannot use str(addr) as it yields rubbish for char pointers
|
# We cannot use str(addr) as it yields rubbish for char pointers
|
||||||
# that might trigger Unicode encoding errors.
|
# that might trigger Unicode encoding errors.
|
||||||
#return addr.cast(lookupType("void").pointer())
|
#return addr.cast(lookupType("void").pointer())
|
||||||
return hex(long(addr))
|
# We do not use "hex(...)" as it (sometimes?) adds a "L" suffix.
|
||||||
|
return "0x%x" % long(addr)
|
||||||
|
|
||||||
def extractTemplateArgument(type, position):
|
def extractTemplateArgument(type, position):
|
||||||
level = 0
|
level = 0
|
||||||
@@ -291,7 +292,7 @@ class SubItem:
|
|||||||
|
|
||||||
if len(type) > 0 and type != self.d.currentChildType:
|
if len(type) > 0 and type != self.d.currentChildType:
|
||||||
self.d.put('type="%s",' % type) # str(type.unqualified()) ?
|
self.d.put('type="%s",' % type) # str(type.unqualified()) ?
|
||||||
if not type in typeInfoCache:
|
if not type in typeInfoCache and type != " ": # FIXME: Move to lookupType
|
||||||
typeObj = lookupType(type)
|
typeObj = lookupType(type)
|
||||||
if not typeObj is None:
|
if not typeObj is None:
|
||||||
typeInfoCache[type] = TypeInfo(typeObj)
|
typeInfoCache[type] = TypeInfo(typeObj)
|
||||||
@@ -1081,7 +1082,7 @@ class Dumper:
|
|||||||
try:
|
try:
|
||||||
list = eval(exp)
|
list = eval(exp)
|
||||||
self.putValue("")
|
self.putValue("")
|
||||||
self.putType(" ")
|
self.putNoType()
|
||||||
self.putNumChild(len(list))
|
self.putNumChild(len(list))
|
||||||
# This is a list of expressions to evaluate
|
# This is a list of expressions to evaluate
|
||||||
with Children(self, len(list)):
|
with Children(self, len(list)):
|
||||||
@@ -1092,7 +1093,7 @@ class Dumper:
|
|||||||
except RuntimeError, error:
|
except RuntimeError, error:
|
||||||
warn("EVAL: ERROR CAUGHT %s" % error)
|
warn("EVAL: ERROR CAUGHT %s" % error)
|
||||||
self.putValue("<syntax error>")
|
self.putValue("<syntax error>")
|
||||||
self.putType(" ")
|
self.putNoType()
|
||||||
self.putNumChild(0)
|
self.putNumChild(0)
|
||||||
with Children(self, 0):
|
with Children(self, 0):
|
||||||
pass
|
pass
|
||||||
@@ -1104,7 +1105,7 @@ class Dumper:
|
|||||||
handled = False
|
handled = False
|
||||||
if len(exp) == 0: # The <Edit> case
|
if len(exp) == 0: # The <Edit> case
|
||||||
self.putValue(" ")
|
self.putValue(" ")
|
||||||
self.putType(" ")
|
self.putNoType()
|
||||||
self.putNumChild(0)
|
self.putNumChild(0)
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
@@ -1147,6 +1148,11 @@ class Dumper:
|
|||||||
self.currentType = type
|
self.currentType = type
|
||||||
self.currentTypePriority = priority
|
self.currentTypePriority = priority
|
||||||
|
|
||||||
|
def putNoType(self):
|
||||||
|
# FIXME: replace with something that does not need special handling
|
||||||
|
# in SubItem.__exit__().
|
||||||
|
self.putBetterType(" ")
|
||||||
|
|
||||||
def putBetterType(self, type, priority = 0):
|
def putBetterType(self, type, priority = 0):
|
||||||
self.currentType = type
|
self.currentType = type
|
||||||
self.currentTypePriority = self.currentTypePriority + 1
|
self.currentTypePriority = self.currentTypePriority + 1
|
||||||
@@ -1364,26 +1370,25 @@ class Dumper:
|
|||||||
return
|
return
|
||||||
|
|
||||||
if value.type.code == gdb.TYPE_CODE_ARRAY:
|
if value.type.code == gdb.TYPE_CODE_ARRAY:
|
||||||
baseptr = value.cast(realtype.pointer())
|
targettype = realtype.target()
|
||||||
if format == 0 or format == 1 or format == 2:
|
self.putAddress(value.address)
|
||||||
# Explicityly requested Latin1 or UTF-8 formatting.
|
self.putType(realtype)
|
||||||
f = [Hex2EncodedLatin1, Hex2EncodedUtf8, Hex2EncodedLocal8Bit][format]
|
self.putNumChild(1)
|
||||||
self.putAddress(value.address)
|
if format == 0:
|
||||||
self.putType(realtype)
|
# Explicitly requested Latin1 formatting.
|
||||||
self.putValue(encodeCharArray(value, 100), f)
|
self.putValue(encodeCharArray(value, 100), Hex2EncodedLatin1)
|
||||||
self.putNumChild(1)
|
elif format == 1:
|
||||||
|
# Explicitly requested UTF-8 formatting.
|
||||||
|
self.putValue(encodeCharArray(value, 100), Hex2EncodedUtf8)
|
||||||
|
elif format == 2:
|
||||||
|
# Explicitly requested Local 8-bit formatting.
|
||||||
|
self.putValue(encodeCharArray(value, 100), Hex2EncodedLocal8Bit)
|
||||||
else:
|
else:
|
||||||
self.putType(realtype)
|
self.putValue("@0x%x" % long(value.cast(targettype.pointer())))
|
||||||
self.putAddress(value.address)
|
|
||||||
self.putValue("%s" % baseptr)
|
|
||||||
self.putNumChild(1)
|
|
||||||
if self.isExpanded(item):
|
if self.isExpanded(item):
|
||||||
charptr = lookupType("unsigned char").pointer()
|
self.put('addrbase="0x%x",' % long(value.cast(targettype.pointer())))
|
||||||
addr1 = (baseptr+1).cast(charptr)
|
self.put('addrstep="%s",' % targettype.sizeof)
|
||||||
addr0 = baseptr.cast(charptr)
|
with Children(self, 1, targettype):
|
||||||
self.put('addrbase="%s",' % cleanAddress(addr0))
|
|
||||||
self.put('addrstep="%s",' % (addr1 - addr0))
|
|
||||||
with Children(self, 1, realtype.target()):
|
|
||||||
child = Item(value, item.iname, None, item.name)
|
child = Item(value, item.iname, None, item.name)
|
||||||
self.putFields(child)
|
self.putFields(child)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -509,7 +509,7 @@ def qdump__QImage(d, item):
|
|||||||
with Children(d):
|
with Children(d):
|
||||||
with SubItem(d):
|
with SubItem(d):
|
||||||
d.putName("data")
|
d.putName("data")
|
||||||
d.putType(" ");
|
d.putNoType()
|
||||||
d.putNumChild(0)
|
d.putNumChild(0)
|
||||||
d.putValue("size: %s bytes" % nbytes);
|
d.putValue("size: %s bytes" % nbytes);
|
||||||
format = d.itemFormat(item)
|
format = d.itemFormat(item)
|
||||||
@@ -669,11 +669,8 @@ def extractCString(table, offset):
|
|||||||
def qdump__QObject(d, item):
|
def qdump__QObject(d, item):
|
||||||
#warn("OBJECT: %s " % item.value)
|
#warn("OBJECT: %s " % item.value)
|
||||||
try:
|
try:
|
||||||
privateTypeName = str(item.value.type) + "Private"
|
privateTypeName = d.ns + "QObjectPrivate"
|
||||||
privateType = lookupType(privateTypeName)
|
privateType = lookupType(privateTypeName)
|
||||||
if privateType is None:
|
|
||||||
privateTypeName = d.ns + "QObjectPrivate"
|
|
||||||
privateType = lookupType(privateTypeName)
|
|
||||||
staticMetaObject = item.value["staticMetaObject"]
|
staticMetaObject = item.value["staticMetaObject"]
|
||||||
d_ptr = item.value["d_ptr"]["d"].cast(privateType.pointer()).dereference()
|
d_ptr = item.value["d_ptr"]["d"].cast(privateType.pointer()).dereference()
|
||||||
#warn("D_PTR: %s " % d_ptr)
|
#warn("D_PTR: %s " % d_ptr)
|
||||||
@@ -724,7 +721,7 @@ def qdump__QObject(d, item):
|
|||||||
with SubItem(d):
|
with SubItem(d):
|
||||||
d.putName("data")
|
d.putName("data")
|
||||||
d.putValue(" ")
|
d.putValue(" ")
|
||||||
d.putType(" ")
|
d.putNoType()
|
||||||
d.putNumChild(1)
|
d.putNumChild(1)
|
||||||
iname = item.iname + ".data"
|
iname = item.iname + ".data"
|
||||||
if d.isExpandedIName(iname):
|
if d.isExpandedIName(iname):
|
||||||
@@ -764,7 +761,7 @@ def qdump__QObject(d, item):
|
|||||||
propertyCount = staticPropertyCount + dynamicPropertyCount
|
propertyCount = staticPropertyCount + dynamicPropertyCount
|
||||||
|
|
||||||
d.putName("properties")
|
d.putName("properties")
|
||||||
d.putType(" ")
|
d.putNoType()
|
||||||
d.putItemCount(propertyCount)
|
d.putItemCount(propertyCount)
|
||||||
d.putNumChild(propertyCount)
|
d.putNumChild(propertyCount)
|
||||||
|
|
||||||
@@ -877,7 +874,7 @@ def qdump__QObject(d, item):
|
|||||||
# Connections.
|
# Connections.
|
||||||
with SubItem(d):
|
with SubItem(d):
|
||||||
d.putName("connections")
|
d.putName("connections")
|
||||||
d.putType(" ")
|
d.putNoType()
|
||||||
connections = d_ptr["connectionLists"]
|
connections = d_ptr["connectionLists"]
|
||||||
connectionListCount = 0
|
connectionListCount = 0
|
||||||
if not isNull(connections):
|
if not isNull(connections):
|
||||||
@@ -909,7 +906,7 @@ def qdump__QObject(d, item):
|
|||||||
with SubItem(d):
|
with SubItem(d):
|
||||||
d.putName("signals")
|
d.putName("signals")
|
||||||
d.putItemCount(signalCount)
|
d.putItemCount(signalCount)
|
||||||
d.putType(" ")
|
d.putNoType()
|
||||||
d.putNumChild(signalCount)
|
d.putNumChild(signalCount)
|
||||||
if signalCount:
|
if signalCount:
|
||||||
# FIXME: empty type does not work for childtype
|
# FIXME: empty type does not work for childtype
|
||||||
@@ -923,7 +920,7 @@ def qdump__QObject(d, item):
|
|||||||
d.putField("iname", "%s.signals.%d"
|
d.putField("iname", "%s.signals.%d"
|
||||||
% (item.iname, signal))
|
% (item.iname, signal))
|
||||||
d.putName("signal %d" % signal)
|
d.putName("signal %d" % signal)
|
||||||
d.putType(" ")
|
d.putNoType()
|
||||||
d.putValue(extractCString(metaStringData, offset))
|
d.putValue(extractCString(metaStringData, offset))
|
||||||
d.putNumChild(0) # FIXME: List the connections here.
|
d.putNumChild(0) # FIXME: List the connections here.
|
||||||
|
|
||||||
@@ -932,7 +929,7 @@ def qdump__QObject(d, item):
|
|||||||
slotCount = metaData[4] - signalCount
|
slotCount = metaData[4] - signalCount
|
||||||
d.putName("slots")
|
d.putName("slots")
|
||||||
d.putItemCount(slotCount)
|
d.putItemCount(slotCount)
|
||||||
d.putType(" ")
|
d.putNoType()
|
||||||
d.putNumChild(slotCount)
|
d.putNumChild(slotCount)
|
||||||
if slotCount:
|
if slotCount:
|
||||||
#d.putField("childtype", ".")
|
#d.putField("childtype", ".")
|
||||||
@@ -944,14 +941,14 @@ def qdump__QObject(d, item):
|
|||||||
offset = metaData[14 + 5 * (signalCount + slot)]
|
offset = metaData[14 + 5 * (signalCount + slot)]
|
||||||
d.putField("iname", "%s.slots.%d" % (item.iname, slot))
|
d.putField("iname", "%s.slots.%d" % (item.iname, slot))
|
||||||
d.putName("slot %d" % slot)
|
d.putName("slot %d" % slot)
|
||||||
d.putType(" ")
|
d.putNoType()
|
||||||
d.putValue(extractCString(metaStringData, offset))
|
d.putValue(extractCString(metaStringData, offset))
|
||||||
d.putNumChild(0) # FIXME: List the connections here.
|
d.putNumChild(0) # FIXME: List the connections here.
|
||||||
|
|
||||||
# Active connection
|
# Active connection
|
||||||
with SubItem(d):
|
with SubItem(d):
|
||||||
d.putName("currentSender")
|
d.putName("currentSender")
|
||||||
d.putType(" ")
|
d.putNoType()
|
||||||
sender = d_ptr["currentSender"]
|
sender = d_ptr["currentSender"]
|
||||||
d.putValue(cleanAddress(sender))
|
d.putValue(cleanAddress(sender))
|
||||||
if isNull(sender):
|
if isNull(sender):
|
||||||
@@ -967,7 +964,7 @@ def qdump__QObject(d, item):
|
|||||||
with SubItem(d):
|
with SubItem(d):
|
||||||
d.putName("signal")
|
d.putName("signal")
|
||||||
d.putValue(sender["signal"])
|
d.putValue(sender["signal"])
|
||||||
d.putType(" ");
|
d.putNoType()
|
||||||
d.putNumChild(0)
|
d.putNumChild(0)
|
||||||
|
|
||||||
# QObject
|
# QObject
|
||||||
@@ -2203,7 +2200,7 @@ def qdump__QTJSC__JSValue(d, item):
|
|||||||
with SubItem(d):
|
with SubItem(d):
|
||||||
d.putName("tag")
|
d.putName("tag")
|
||||||
d.putValue(jstagAsString(long(tag)))
|
d.putValue(jstagAsString(long(tag)))
|
||||||
d.putType(" ")
|
d.putNoType()
|
||||||
d.putNumChild(0)
|
d.putNumChild(0)
|
||||||
|
|
||||||
d.putIntItem("payload", long(payload))
|
d.putIntItem("payload", long(payload))
|
||||||
@@ -2438,7 +2435,7 @@ if False:
|
|||||||
d.putField("iname", iname)
|
d.putField("iname", iname)
|
||||||
d.putName("tree")
|
d.putName("tree")
|
||||||
d.putValue(" ")
|
d.putValue(" ")
|
||||||
d.putType(" ")
|
d.putNoType()
|
||||||
d.putNumChild(1)
|
d.putNumChild(1)
|
||||||
if d.isExpandedIName(iname):
|
if d.isExpandedIName(iname):
|
||||||
with Children(d):
|
with Children(d):
|
||||||
@@ -2449,7 +2446,7 @@ if False:
|
|||||||
d.putField("iname", iname)
|
d.putField("iname", iname)
|
||||||
d.putName("data")
|
d.putName("data")
|
||||||
d.putValue(" ")
|
d.putValue(" ")
|
||||||
d.putType(" ")
|
d.putNoType()
|
||||||
d.putNumChild(1)
|
d.putNumChild(1)
|
||||||
if d.isExpandedIName(iname):
|
if d.isExpandedIName(iname):
|
||||||
with Children(d):
|
with Children(d):
|
||||||
@@ -2507,7 +2504,7 @@ if False:
|
|||||||
else:
|
else:
|
||||||
d.putName("type")
|
d.putName("type")
|
||||||
d.putValue(item.value["type"])
|
d.putValue(item.value["type"])
|
||||||
d.putType(" ")
|
d.putNoType()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -2515,5 +2512,5 @@ if False:
|
|||||||
def qdump__bug5106__A5106(d, item):
|
def qdump__bug5106__A5106(d, item):
|
||||||
d.putName("a")
|
d.putName("a")
|
||||||
d.putValue("This is the value: %s" % item.value["m_a"])
|
d.putValue("This is the value: %s" % item.value["m_a"])
|
||||||
d.putType(" ")
|
d.putNoType()
|
||||||
d.putNumChild(0)
|
d.putNumChild(0)
|
||||||
|
|||||||
@@ -3144,6 +3144,57 @@ Module {
|
|||||||
Property { name: "target"; type: "QSGItem"; isPointer: true }
|
Property { name: "target"; type: "QSGItem"; isPointer: true }
|
||||||
Property { name: "anchors"; type: "QSGAnchorSet"; isReadonly: true; isPointer: true }
|
Property { name: "anchors"; type: "QSGAnchorSet"; isReadonly: true; isPointer: true }
|
||||||
}
|
}
|
||||||
|
Component {
|
||||||
|
name: "QSGAnchorSet"
|
||||||
|
prototype: "QObject"
|
||||||
|
Property { name: "left"; type: "QDeclarativeScriptString" }
|
||||||
|
Property { name: "right"; type: "QDeclarativeScriptString" }
|
||||||
|
Property { name: "horizontalCenter"; type: "QDeclarativeScriptString" }
|
||||||
|
Property { name: "top"; type: "QDeclarativeScriptString" }
|
||||||
|
Property { name: "bottom"; type: "QDeclarativeScriptString" }
|
||||||
|
Property { name: "verticalCenter"; type: "QDeclarativeScriptString" }
|
||||||
|
Property { name: "baseline"; type: "QDeclarativeScriptString" }
|
||||||
|
}
|
||||||
|
Component {
|
||||||
|
name: "QSGAnchors"
|
||||||
|
prototype: "QObject"
|
||||||
|
Property { name: "left"; type: "QSGAnchorLine" }
|
||||||
|
Property { name: "right"; type: "QSGAnchorLine" }
|
||||||
|
Property { name: "horizontalCenter"; type: "QSGAnchorLine" }
|
||||||
|
Property { name: "top"; type: "QSGAnchorLine" }
|
||||||
|
Property { name: "bottom"; type: "QSGAnchorLine" }
|
||||||
|
Property { name: "verticalCenter"; type: "QSGAnchorLine" }
|
||||||
|
Property { name: "baseline"; type: "QSGAnchorLine" }
|
||||||
|
Property { name: "margins"; type: "qreal" }
|
||||||
|
Property { name: "leftMargin"; type: "qreal" }
|
||||||
|
Property { name: "rightMargin"; type: "qreal" }
|
||||||
|
Property { name: "horizontalCenterOffset"; type: "qreal" }
|
||||||
|
Property { name: "topMargin"; type: "qreal" }
|
||||||
|
Property { name: "bottomMargin"; type: "qreal" }
|
||||||
|
Property { name: "verticalCenterOffset"; type: "qreal" }
|
||||||
|
Property { name: "baselineOffset"; type: "qreal" }
|
||||||
|
Property { name: "fill"; type: "QSGItem"; isPointer: true }
|
||||||
|
Property { name: "centerIn"; type: "QSGItem"; isPointer: true }
|
||||||
|
Property { name: "mirrored"; type: "bool"; isReadonly: true }
|
||||||
|
Signal { name: "leftChanged" }
|
||||||
|
Signal { name: "rightChanged" }
|
||||||
|
Signal { name: "topChanged" }
|
||||||
|
Signal { name: "bottomChanged" }
|
||||||
|
Signal { name: "verticalCenterChanged" }
|
||||||
|
Signal { name: "horizontalCenterChanged" }
|
||||||
|
Signal { name: "baselineChanged" }
|
||||||
|
Signal { name: "fillChanged" }
|
||||||
|
Signal { name: "centerInChanged" }
|
||||||
|
Signal { name: "leftMarginChanged" }
|
||||||
|
Signal { name: "rightMarginChanged" }
|
||||||
|
Signal { name: "topMarginChanged" }
|
||||||
|
Signal { name: "bottomMarginChanged" }
|
||||||
|
Signal { name: "marginsChanged" }
|
||||||
|
Signal { name: "verticalCenterOffsetChanged" }
|
||||||
|
Signal { name: "horizontalCenterOffsetChanged" }
|
||||||
|
Signal { name: "baselineOffsetChanged" }
|
||||||
|
Signal { name: "mirroredChanged" }
|
||||||
|
}
|
||||||
Component {
|
Component {
|
||||||
name: "QSGAngledDirection"
|
name: "QSGAngledDirection"
|
||||||
prototype: "QSGStochasticDirection"
|
prototype: "QSGStochasticDirection"
|
||||||
@@ -3483,6 +3534,30 @@ Module {
|
|||||||
}
|
}
|
||||||
Method { name: "returnToBounds" }
|
Method { name: "returnToBounds" }
|
||||||
}
|
}
|
||||||
|
Component {
|
||||||
|
name: "QSGFlickableVisibleArea"
|
||||||
|
prototype: "QObject"
|
||||||
|
Property { name: "xPosition"; type: "qreal"; isReadonly: true }
|
||||||
|
Property { name: "yPosition"; type: "qreal"; isReadonly: true }
|
||||||
|
Property { name: "widthRatio"; type: "qreal"; isReadonly: true }
|
||||||
|
Property { name: "heightRatio"; type: "qreal"; isReadonly: true }
|
||||||
|
Signal {
|
||||||
|
name: "xPositionChanged"
|
||||||
|
Parameter { name: "xPosition"; type: "qreal" }
|
||||||
|
}
|
||||||
|
Signal {
|
||||||
|
name: "yPositionChanged"
|
||||||
|
Parameter { name: "yPosition"; type: "qreal" }
|
||||||
|
}
|
||||||
|
Signal {
|
||||||
|
name: "widthRatioChanged"
|
||||||
|
Parameter { name: "widthRatio"; type: "qreal" }
|
||||||
|
}
|
||||||
|
Signal {
|
||||||
|
name: "heightRatioChanged"
|
||||||
|
Parameter { name: "heightRatio"; type: "qreal" }
|
||||||
|
}
|
||||||
|
}
|
||||||
Component {
|
Component {
|
||||||
name: "QSGFlipable"
|
name: "QSGFlipable"
|
||||||
defaultProperty: "data"
|
defaultProperty: "data"
|
||||||
@@ -5119,6 +5194,14 @@ Module {
|
|||||||
Signal { name: "currentItemChanged" }
|
Signal { name: "currentItemChanged" }
|
||||||
Signal { name: "pathChanged" }
|
Signal { name: "pathChanged" }
|
||||||
}
|
}
|
||||||
|
Component {
|
||||||
|
name: "QSGPen"
|
||||||
|
prototype: "QObject"
|
||||||
|
Property { name: "width"; type: "qreal" }
|
||||||
|
Property { name: "color"; type: "QColor" }
|
||||||
|
Property { name: "aligned"; type: "bool" }
|
||||||
|
Signal { name: "penChanged" }
|
||||||
|
}
|
||||||
Component {
|
Component {
|
||||||
name: "QSGPinch"
|
name: "QSGPinch"
|
||||||
prototype: "QObject"
|
prototype: "QObject"
|
||||||
@@ -5375,6 +5458,15 @@ Module {
|
|||||||
Signal { name: "zScaleChanged" }
|
Signal { name: "zScaleChanged" }
|
||||||
Signal { name: "scaleChanged" }
|
Signal { name: "scaleChanged" }
|
||||||
}
|
}
|
||||||
|
Component {
|
||||||
|
name: "QSGScaleGrid"
|
||||||
|
prototype: "QObject"
|
||||||
|
Property { name: "left"; type: "int" }
|
||||||
|
Property { name: "top"; type: "int" }
|
||||||
|
Property { name: "right"; type: "int" }
|
||||||
|
Property { name: "bottom"; type: "int" }
|
||||||
|
Signal { name: "borderChanged" }
|
||||||
|
}
|
||||||
Component {
|
Component {
|
||||||
name: "QSGShaderEffectItem"
|
name: "QSGShaderEffectItem"
|
||||||
defaultProperty: "data"
|
defaultProperty: "data"
|
||||||
@@ -6273,6 +6365,7 @@ Module {
|
|||||||
}
|
}
|
||||||
Method { name: "parentModelIndex"; type: "QVariant" }
|
Method { name: "parentModelIndex"; type: "QVariant" }
|
||||||
}
|
}
|
||||||
|
Component { name: "QSGVisualDataModelParts"; prototype: "QObject" }
|
||||||
Component {
|
Component {
|
||||||
name: "QSGVisualItemModel"
|
name: "QSGVisualItemModel"
|
||||||
defaultProperty: "children"
|
defaultProperty: "children"
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ QByteArray convertToId(const QByteArray &cppName)
|
|||||||
return cppToId.value(cppName, cppName);
|
return cppToId.value(cppName, cppName);
|
||||||
}
|
}
|
||||||
|
|
||||||
QSet<const QMetaObject *> collectReachableMetaObjects(const QString &importCode, QDeclarativeEngine *engine)
|
QSet<const QMetaObject *> collectReachableMetaObjects(const QList<QDeclarativeType *> &skip = QList<QDeclarativeType *>())
|
||||||
{
|
{
|
||||||
QSet<const QMetaObject *> metas;
|
QSet<const QMetaObject *> metas;
|
||||||
metas.insert(FriendlyQObject::qtMeta());
|
metas.insert(FriendlyQObject::qtMeta());
|
||||||
@@ -189,7 +189,9 @@ QSet<const QMetaObject *> collectReachableMetaObjects(const QString &importCode,
|
|||||||
|
|
||||||
// find even more QMetaObjects by instantiating QML types and running
|
// find even more QMetaObjects by instantiating QML types and running
|
||||||
// over the instances
|
// over the instances
|
||||||
foreach (const QDeclarativeType *ty, QDeclarativeMetaType::qmlTypes()) {
|
foreach (QDeclarativeType *ty, QDeclarativeMetaType::qmlTypes()) {
|
||||||
|
if (skip.contains(ty))
|
||||||
|
continue;
|
||||||
if (ty->isExtendedType())
|
if (ty->isExtendedType())
|
||||||
continue;
|
continue;
|
||||||
if (!ty->isCreatable())
|
if (!ty->isCreatable())
|
||||||
@@ -202,21 +204,14 @@ QSet<const QMetaObject *> collectReachableMetaObjects(const QString &importCode,
|
|||||||
if (tyName.isEmpty())
|
if (tyName.isEmpty())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
QByteArray code = importCode.toUtf8();
|
|
||||||
code += tyName;
|
|
||||||
code += " {}\n";
|
|
||||||
|
|
||||||
QDeclarativeComponent c(engine);
|
|
||||||
c.setData(code, QUrl::fromLocalFile(pluginImportPath + "/typeinstance.qml"));
|
|
||||||
|
|
||||||
inObjectInstantiation = tyName;
|
inObjectInstantiation = tyName;
|
||||||
QObject *object = c.create();
|
QObject *object = ty->create();
|
||||||
inObjectInstantiation.clear();
|
inObjectInstantiation.clear();
|
||||||
|
|
||||||
if (object)
|
if (object)
|
||||||
collectReachableMetaObjects(object, &metas);
|
collectReachableMetaObjects(object, &metas);
|
||||||
else
|
else
|
||||||
qWarning() << "Could not create" << tyName << ":" << c.errorString();
|
qWarning() << "Could not create" << tyName;
|
||||||
}
|
}
|
||||||
|
|
||||||
return metas;
|
return metas;
|
||||||
@@ -542,8 +537,8 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
// find all QMetaObjects reachable from the builtin module
|
// find all QMetaObjects reachable from the builtin module
|
||||||
QByteArray importCode("import QtQuick 1.0\n");
|
QSet<const QMetaObject *> defaultReachable = collectReachableMetaObjects();
|
||||||
QSet<const QMetaObject *> defaultReachable = collectReachableMetaObjects(importCode, engine);
|
QList<QDeclarativeType *> defaultTypes = QDeclarativeMetaType::qmlTypes();
|
||||||
|
|
||||||
// this will hold the meta objects we want to dump information of
|
// this will hold the meta objects we want to dump information of
|
||||||
QSet<const QMetaObject *> metas;
|
QSet<const QMetaObject *> metas;
|
||||||
@@ -551,6 +546,20 @@ int main(int argc, char *argv[])
|
|||||||
if (action == Builtins) {
|
if (action == Builtins) {
|
||||||
metas = defaultReachable;
|
metas = defaultReachable;
|
||||||
} else {
|
} else {
|
||||||
|
// find a valid QtQuick import
|
||||||
|
QByteArray importCode;
|
||||||
|
QDeclarativeType *qtObjectType = QDeclarativeMetaType::qmlType(&QObject::staticMetaObject);
|
||||||
|
if (!qtObjectType) {
|
||||||
|
qWarning() << "Could not find QtObject type";
|
||||||
|
importCode = QByteArray("import QtQuick 1.0\n");
|
||||||
|
} else {
|
||||||
|
QByteArray module = qtObjectType->qmlTypeName();
|
||||||
|
module = module.mid(0, module.lastIndexOf('/'));
|
||||||
|
importCode = QString("import %1 %2.%3\n").arg(module,
|
||||||
|
QString::number(qtObjectType->majorVersion()),
|
||||||
|
QString::number(qtObjectType->minorVersion())).toUtf8();
|
||||||
|
}
|
||||||
|
|
||||||
// find all QMetaObjects reachable when the specified module is imported
|
// find all QMetaObjects reachable when the specified module is imported
|
||||||
if (action != Path) {
|
if (action != Path) {
|
||||||
importCode += QString("import %0 %1\n").arg(pluginImportUri, pluginImportVersion).toAscii();
|
importCode += QString("import %0 %1\n").arg(pluginImportUri, pluginImportVersion).toAscii();
|
||||||
@@ -575,7 +584,7 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QSet<const QMetaObject *> candidates = collectReachableMetaObjects(importCode, engine);
|
QSet<const QMetaObject *> candidates = collectReachableMetaObjects(defaultTypes);
|
||||||
candidates.subtract(defaultReachable);
|
candidates.subtract(defaultReachable);
|
||||||
|
|
||||||
// Also eliminate meta objects with the same classname.
|
// Also eliminate meta objects with the same classname.
|
||||||
|
|||||||
@@ -30,32 +30,58 @@
|
|||||||
**
|
**
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
#ifndef ANALYZER_INTERNAL_CALLGRINDCONFIGWIDGET_H
|
|
||||||
#define ANALYZER_INTERNAL_CALLGRINDCONFIGWIDGET_H
|
|
||||||
|
|
||||||
#include <QtGui/QWidget>
|
|
||||||
|
|
||||||
namespace Valgrind {
|
#include "anchorchangesnodeinstance.h"
|
||||||
|
|
||||||
|
namespace QmlDesigner {
|
||||||
|
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
namespace Ui {
|
AnchorChangesNodeInstance::AnchorChangesNodeInstance(QObject *object) :
|
||||||
class CallgrindConfigWidget;
|
ObjectNodeInstance(object)
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
class AbstractCallgrindSettings;
|
AnchorChangesNodeInstance::Pointer AnchorChangesNodeInstance::create(QObject *object)
|
||||||
|
|
||||||
class CallgrindConfigWidget : public QWidget
|
|
||||||
{
|
{
|
||||||
public:
|
Q_ASSERT(object);
|
||||||
CallgrindConfigWidget(AbstractCallgrindSettings *settings, QWidget *parent);
|
|
||||||
virtual ~CallgrindConfigWidget();
|
|
||||||
|
|
||||||
private:
|
Pointer instance(new AnchorChangesNodeInstance(object));
|
||||||
Ui::CallgrindConfigWidget *m_ui;
|
|
||||||
AbstractCallgrindSettings *m_settings;
|
return instance;
|
||||||
};
|
}
|
||||||
|
|
||||||
|
void AnchorChangesNodeInstance::setPropertyVariant(const QString &/*name*/, const QVariant &/*value*/)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void AnchorChangesNodeInstance::setPropertyBinding(const QString &/*name*/, const QString &/*expression*/)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant AnchorChangesNodeInstance::property(const QString &/*name*/) const
|
||||||
|
{
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AnchorChangesNodeInstance::resetProperty(const QString &/*name*/)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void AnchorChangesNodeInstance::reparent(const ServerNodeInstance &/*oldParentInstance*/,
|
||||||
|
const QString &/*oldParentProperty*/,
|
||||||
|
const ServerNodeInstance &/*newParentInstance*/,
|
||||||
|
const QString &/*newParentProperty*/)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QObject *AnchorChangesNodeInstance::changesObject() const
|
||||||
|
{
|
||||||
|
return object();
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
} // namespace Valgrind
|
|
||||||
|
|
||||||
#endif // ANALYZER_INTERNAL_CALLGRINDCONFIGWIDGET_H
|
} // namespace QmlDesigner
|
||||||
@@ -1,11 +1,9 @@
|
|||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
**
|
**
|
||||||
** This file is part of Qt Creator Instrumentation Tools
|
** This file is part of Qt Creator
|
||||||
**
|
**
|
||||||
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
**
|
**
|
||||||
** Author: Milian Wolff, KDAB (milian.wolff@kdab.com)
|
|
||||||
**
|
|
||||||
** Contact: Nokia Corporation (info@qt.nokia.com)
|
** Contact: Nokia Corporation (info@qt.nokia.com)
|
||||||
**
|
**
|
||||||
**
|
**
|
||||||
@@ -32,49 +30,49 @@
|
|||||||
**
|
**
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
#ifndef ANALYZER_INTERNAL_MEMCHECKCONFIGWIDGET_H
|
|
||||||
#define ANALYZER_INTERNAL_MEMCHECKCONFIGWIDGET_H
|
|
||||||
|
|
||||||
#include <QtGui/QWidget>
|
|
||||||
|
#ifndef QMLDESIGNER_ANCHORCHANGESNODEINSTANCE_H
|
||||||
|
#define QMLDESIGNER_ANCHORCHANGESNODEINSTANCE_H
|
||||||
|
|
||||||
|
#include "objectnodeinstance.h"
|
||||||
|
|
||||||
|
#include <QPair>
|
||||||
|
#include <QWeakPointer>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
class QStandardItemModel;
|
class QDeclarativeProperty;
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
namespace Valgrind {
|
namespace QmlDesigner {
|
||||||
|
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
namespace Ui {
|
class AnchorChangesNodeInstance : public ObjectNodeInstance
|
||||||
class MemcheckConfigWidget;
|
|
||||||
}
|
|
||||||
|
|
||||||
class AbstractMemcheckSettings;
|
|
||||||
|
|
||||||
class MemcheckConfigWidget : public QWidget
|
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MemcheckConfigWidget(AbstractMemcheckSettings *settings, QWidget *parent);
|
typedef QSharedPointer<AnchorChangesNodeInstance> Pointer;
|
||||||
virtual ~MemcheckConfigWidget();
|
typedef QWeakPointer<AnchorChangesNodeInstance> WeakPointer;
|
||||||
|
|
||||||
void setSuppressions(const QStringList &files);
|
static Pointer create(QObject *objectToBeWrapped);
|
||||||
QStringList suppressions() const;
|
|
||||||
|
|
||||||
public Q_SLOTS:
|
virtual void setPropertyVariant(const QString &name, const QVariant &value);
|
||||||
void slotAddSuppression();
|
virtual void setPropertyBinding(const QString &name, const QString &expression);
|
||||||
void slotRemoveSuppression();
|
virtual QVariant property(const QString &name) const;
|
||||||
void slotSuppressionsRemoved(const QStringList &files);
|
virtual void resetProperty(const QString &name);
|
||||||
void slotSuppressionsAdded(const QStringList &files);
|
|
||||||
void slotSuppressionSelectionChanged();
|
|
||||||
|
|
||||||
private:
|
using ObjectNodeInstance::reparent; // keep the virtual reparent(...) method around
|
||||||
AbstractMemcheckSettings *m_settings;
|
void reparent(const ServerNodeInstance &oldParentInstance,
|
||||||
QStandardItemModel *m_model;
|
const QString &oldParentProperty,
|
||||||
Ui::MemcheckConfigWidget *m_ui;
|
const ServerNodeInstance &newParentInstance,
|
||||||
|
const QString &newParentProperty);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
AnchorChangesNodeInstance(QObject *object);
|
||||||
|
QObject *changesObject() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
} // namespace Valgrind
|
} // namespace QmlDesigner
|
||||||
|
|
||||||
#endif // ANALYZER_INTERNAL_MEMCHECKCONFIGWIDGET_H
|
#endif // QMLDESIGNER_ANCHORCHANGESNODEINSTANCE_H
|
||||||
@@ -51,7 +51,7 @@ BehaviorNodeInstance::Pointer BehaviorNodeInstance::create(QObject *object)
|
|||||||
|
|
||||||
Pointer instance(new BehaviorNodeInstance(behavior));
|
Pointer instance(new BehaviorNodeInstance(behavior));
|
||||||
|
|
||||||
instance->populateResetValueHash();
|
instance->populateResetHashes();
|
||||||
|
|
||||||
behavior->setEnabled(false);
|
behavior->setEnabled(false);
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ ComponentNodeInstance::Pointer ComponentNodeInstance::create(QObject *object)
|
|||||||
|
|
||||||
Pointer instance(new ComponentNodeInstance(component));
|
Pointer instance(new ComponentNodeInstance(component));
|
||||||
|
|
||||||
instance->populateResetValueHash();
|
instance->populateResetHashes();
|
||||||
|
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ HEADERS += $$PWD/qmlpropertychangesnodeinstance.h
|
|||||||
HEADERS += $$PWD/qmlstatenodeinstance.h
|
HEADERS += $$PWD/qmlstatenodeinstance.h
|
||||||
HEADERS += $$PWD/qmltransitionnodeinstance.h
|
HEADERS += $$PWD/qmltransitionnodeinstance.h
|
||||||
HEADERS += $$PWD/servernodeinstance.h
|
HEADERS += $$PWD/servernodeinstance.h
|
||||||
|
HEADERS += $$PWD/anchorchangesnodeinstance.h
|
||||||
|
|
||||||
SOURCES += $$PWD/behaviornodeinstance.cpp
|
SOURCES += $$PWD/behaviornodeinstance.cpp
|
||||||
SOURCES += $$PWD/dummycontextobject.cpp
|
SOURCES += $$PWD/dummycontextobject.cpp
|
||||||
@@ -32,3 +32,4 @@ SOURCES += $$PWD/qmlpropertychangesnodeinstance.cpp
|
|||||||
SOURCES += $$PWD/qmlstatenodeinstance.cpp
|
SOURCES += $$PWD/qmlstatenodeinstance.cpp
|
||||||
SOURCES += $$PWD/qmltransitionnodeinstance.cpp
|
SOURCES += $$PWD/qmltransitionnodeinstance.cpp
|
||||||
SOURCES += $$PWD/servernodeinstance.cpp
|
SOURCES += $$PWD/servernodeinstance.cpp
|
||||||
|
SOURCES += $$PWD/anchorchangesnodeinstance.cpp
|
||||||
|
|||||||
@@ -390,6 +390,9 @@ void ObjectNodeInstance::setPropertyVariant(const QString &name, const QVariant
|
|||||||
nodeInstanceServer()->removeFilePropertyFromFileSystemWatcher(object(), name, path);
|
nodeInstanceServer()->removeFilePropertyFromFileSystemWatcher(object(), name, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hasValidResetBinding(name)) {
|
||||||
|
QDeclarativePropertyPrivate::setBinding(property, 0, QDeclarativePropertyPrivate::BypassInterceptor | QDeclarativePropertyPrivate::DontRemoveBinding);
|
||||||
|
}
|
||||||
|
|
||||||
bool isWritten = property.write(value);
|
bool isWritten = property.write(value);
|
||||||
|
|
||||||
@@ -417,7 +420,7 @@ void ObjectNodeInstance::setPropertyBinding(const QString &name, const QString &
|
|||||||
binding->setTarget(property);
|
binding->setTarget(property);
|
||||||
binding->setNotifyOnValueChanged(true);
|
binding->setNotifyOnValueChanged(true);
|
||||||
QDeclarativeAbstractBinding *oldBinding = QDeclarativePropertyPrivate::setBinding(property, binding);
|
QDeclarativeAbstractBinding *oldBinding = QDeclarativePropertyPrivate::setBinding(property, binding);
|
||||||
if (oldBinding)
|
if (oldBinding && !hasValidResetBinding(name))
|
||||||
oldBinding->destroy();
|
oldBinding->destroy();
|
||||||
binding->update();
|
binding->update();
|
||||||
if (binding->hasError())
|
if (binding->hasError())
|
||||||
@@ -512,12 +515,17 @@ void ObjectNodeInstance::doResetProperty(const QString &propertyName)
|
|||||||
|
|
||||||
|
|
||||||
QDeclarativeAbstractBinding *binding = QDeclarativePropertyPrivate::binding(property);
|
QDeclarativeAbstractBinding *binding = QDeclarativePropertyPrivate::binding(property);
|
||||||
if (binding) {
|
if (binding && !(hasValidResetBinding(propertyName) && resetBinding(propertyName) == binding)) {
|
||||||
binding->setEnabled(false, 0);
|
binding->setEnabled(false, 0);
|
||||||
binding->destroy();
|
binding->destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (property.isResettable()) {
|
|
||||||
|
if (hasValidResetBinding(propertyName)) {
|
||||||
|
QDeclarativeAbstractBinding *binding = resetBinding(propertyName);
|
||||||
|
QDeclarativePropertyPrivate::setBinding(property, binding, QDeclarativePropertyPrivate::DontRemoveBinding);
|
||||||
|
binding->update();
|
||||||
|
} else if (property.isResettable()) {
|
||||||
property.reset();
|
property.reset();
|
||||||
} else if (property.propertyTypeCategory() == QDeclarativeProperty::List) {
|
} else if (property.propertyTypeCategory() == QDeclarativeProperty::List) {
|
||||||
QDeclarativeListReference list = qvariant_cast<QDeclarativeListReference>(property.read());
|
QDeclarativeListReference list = qvariant_cast<QDeclarativeListReference>(property.read());
|
||||||
@@ -639,7 +647,7 @@ ObjectNodeInstance::Pointer ObjectNodeInstance::create(QObject *object)
|
|||||||
{
|
{
|
||||||
Pointer instance(new ObjectNodeInstance(object));
|
Pointer instance(new ObjectNodeInstance(object));
|
||||||
|
|
||||||
instance->populateResetValueHash();
|
instance->populateResetHashes();
|
||||||
|
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
@@ -769,24 +777,32 @@ QObject *ObjectNodeInstance::createComponentWrap(const QString &nodeSource, cons
|
|||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//The component might also be shipped with Creator.
|
//The component might also be shipped with Creator.
|
||||||
//To avoid trouble with import "." we use the component shipped with Creator.
|
//To avoid trouble with import "." we use the component shipped with Creator.
|
||||||
static inline QString fixComponentPathForIncompatibleQt(const QString &componentPath)
|
static inline QString fixComponentPathForIncompatibleQt(const QString &componentPath)
|
||||||
{
|
{
|
||||||
QString result = componentPath;
|
QString result = componentPath;
|
||||||
const QLatin1String importString("import");
|
const QLatin1String importString("/imports/");
|
||||||
|
|
||||||
if (componentPath.contains(importString)) {
|
if (componentPath.contains(importString)) {
|
||||||
int index = componentPath.indexOf(importString) + 7;
|
int index = componentPath.indexOf(importString) + 8;
|
||||||
const QString relativeImportPath = componentPath.right(componentPath.length() - index);
|
const QString relativeImportPath = componentPath.right(componentPath.length() - index);
|
||||||
QString fixedComponentPath = QLibraryInfo::location(QLibraryInfo::ImportsPath) + relativeImportPath;
|
QString fixedComponentPath = QLibraryInfo::location(QLibraryInfo::ImportsPath) + relativeImportPath;
|
||||||
fixedComponentPath.replace(QLatin1Char('\\'), QLatin1Char('/'));
|
fixedComponentPath.replace(QLatin1Char('\\'), QLatin1Char('/'));
|
||||||
if (QFileInfo(fixedComponentPath).exists())
|
if (QFileInfo(fixedComponentPath).exists())
|
||||||
return fixedComponentPath;
|
return fixedComponentPath;
|
||||||
|
QString fixedPath = QFileInfo(fixedComponentPath).path();
|
||||||
|
if (fixedPath.endsWith(QLatin1String(".1.0"))) {
|
||||||
|
//plugin directories might contain the version number
|
||||||
|
fixedPath.chop(4);
|
||||||
|
fixedPath += QLatin1Char('/') + QFileInfo(componentPath).fileName();
|
||||||
|
if (QFileInfo(fixedPath).exists())
|
||||||
|
return fixedPath;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QObject *ObjectNodeInstance::createComponent(const QString &componentPath, QDeclarativeContext *context)
|
QObject *ObjectNodeInstance::createComponent(const QString &componentPath, QDeclarativeContext *context)
|
||||||
@@ -951,22 +967,42 @@ QStringList propertyNameForWritableProperties(QObject *object, const QString &ba
|
|||||||
return propertyNameList;
|
return propertyNameList;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjectNodeInstance::populateResetValueHash()
|
void ObjectNodeInstance::populateResetHashes()
|
||||||
{
|
{
|
||||||
QStringList propertyNameList = propertyNameForWritableProperties(object());
|
QStringList propertyNameList = propertyNameForWritableProperties(object());
|
||||||
|
|
||||||
foreach(const QString &propertyName, propertyNameList) {
|
foreach(const QString &propertyName, propertyNameList) {
|
||||||
QDeclarativeProperty property(object(), propertyName, QDeclarativeEngine::contextForObject(object()));
|
QDeclarativeProperty property(object(), propertyName, QDeclarativeEngine::contextForObject(object()));
|
||||||
if (property.isWritable())
|
|
||||||
|
QDeclarativeAbstractBinding::Pointer binding = QDeclarativeAbstractBinding::getPointer(QDeclarativePropertyPrivate::binding(property));
|
||||||
|
if (binding) {
|
||||||
|
m_resetBindingHash.insert(propertyName, binding);
|
||||||
|
} else if (property.isWritable()) {
|
||||||
m_resetValueHash.insert(propertyName, property.read());
|
m_resetValueHash.insert(propertyName, property.read());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QDeclarativeAbstractBinding *ObjectNodeInstance::resetBinding(const QString &propertyName) const
|
||||||
|
{
|
||||||
|
return m_resetBindingHash.value(propertyName).data();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectNodeInstance::hasValidResetBinding(const QString &propertyName) const
|
||||||
|
{
|
||||||
|
return m_resetBindingHash.contains(propertyName) && m_resetBindingHash.value(propertyName).data();
|
||||||
|
}
|
||||||
|
|
||||||
QVariant ObjectNodeInstance::resetValue(const QString &propertyName) const
|
QVariant ObjectNodeInstance::resetValue(const QString &propertyName) const
|
||||||
{
|
{
|
||||||
return m_resetValueHash.value(propertyName);
|
return m_resetValueHash.value(propertyName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ObjectNodeInstance::setResetValue(const QString &propertyName, const QVariant &value)
|
||||||
|
{
|
||||||
|
m_resetValueHash.insert(propertyName, value);
|
||||||
|
}
|
||||||
|
|
||||||
void ObjectNodeInstance::paint(QPainter * /*painter*/)
|
void ObjectNodeInstance::paint(QPainter * /*painter*/)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ class QGraphicsItem;
|
|||||||
class QDeclarativeContext;
|
class QDeclarativeContext;
|
||||||
class QDeclarativeEngine;
|
class QDeclarativeEngine;
|
||||||
class QDeclarativeProperty;
|
class QDeclarativeProperty;
|
||||||
|
class QDeclarativeAbstractBinding;
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
namespace QmlDesigner {
|
namespace QmlDesigner {
|
||||||
@@ -147,8 +148,11 @@ public:
|
|||||||
virtual void activateState();
|
virtual void activateState();
|
||||||
virtual void deactivateState();
|
virtual void deactivateState();
|
||||||
|
|
||||||
void populateResetValueHash();
|
void populateResetHashes();
|
||||||
|
bool hasValidResetBinding(const QString &propertyName) const;
|
||||||
|
QDeclarativeAbstractBinding *resetBinding(const QString &propertyName) const;
|
||||||
QVariant resetValue(const QString &propertyName) const;
|
QVariant resetValue(const QString &propertyName) const;
|
||||||
|
void setResetValue(const QString &propertyName, const QVariant &value);
|
||||||
|
|
||||||
QObject *object() const;
|
QObject *object() const;
|
||||||
|
|
||||||
@@ -185,6 +189,7 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QHash<QString, QVariant> m_resetValueHash;
|
QHash<QString, QVariant> m_resetValueHash;
|
||||||
|
QHash<QString, QWeakPointer<QDeclarativeAbstractBinding> > m_resetBindingHash;
|
||||||
QHash<QString, ServerNodeInstance> m_modelAbstractPropertyHash;
|
QHash<QString, ServerNodeInstance> m_modelAbstractPropertyHash;
|
||||||
mutable QHash<QString, bool> m_hasBindingHash;
|
mutable QHash<QString, bool> m_hasBindingHash;
|
||||||
qint32 m_instanceId;
|
qint32 m_instanceId;
|
||||||
|
|||||||
@@ -46,134 +46,6 @@
|
|||||||
namespace QmlDesigner {
|
namespace QmlDesigner {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
//QmlPropertyChangesObject::QmlPropertyChangesObject() :
|
|
||||||
// QDeclarativeStateOperation(),
|
|
||||||
// m_restoreEntryValues(true),
|
|
||||||
// m_isExplicit(false)
|
|
||||||
//{
|
|
||||||
//}
|
|
||||||
|
|
||||||
//QDeclarativeStateOperation::ActionList QmlPropertyChangesObject::actions()
|
|
||||||
//{
|
|
||||||
// QMutableListIterator<QDeclarativeAction> actionIterator(m_qmlActionList);
|
|
||||||
|
|
||||||
// while (actionIterator.hasNext()) {
|
|
||||||
// QDeclarativeAction &action = actionIterator.next();
|
|
||||||
// action.fromBinding = QDeclarativePropertyPrivate::binding(action.property);
|
|
||||||
// action.fromValue = action.property.read();
|
|
||||||
// if (m_expressionHash.contains(action.specifiedProperty)) {
|
|
||||||
// if(m_expressionHash[action.specifiedProperty].second.isNull()) {
|
|
||||||
// if (targetObject()) {
|
|
||||||
// QDeclarativeBinding *binding = new QDeclarativeBinding(m_expressionHash[action.specifiedProperty].first, targetObject(), QDeclarativeEngine::contextForObject(targetObject()), this);
|
|
||||||
// binding->setTarget(action.property);
|
|
||||||
// binding->setNotifyOnValueChanged(true);
|
|
||||||
// action.toBinding = binding;
|
|
||||||
// action.toValue = binding->evaluate();
|
|
||||||
// m_expressionHash.insert(action.specifiedProperty, ExpressionPair(m_expressionHash[action.specifiedProperty].first, binding));
|
|
||||||
// } else {
|
|
||||||
// action.toBinding = 0;
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// action.toBinding = m_expressionHash[action.specifiedProperty].second.data();
|
|
||||||
// action.toValue = m_expressionHash[action.specifiedProperty].second->evaluate();
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// action.toBinding = 0;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return m_qmlActionList;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//QObject *QmlPropertyChangesObject::targetObject() const
|
|
||||||
//{
|
|
||||||
// return m_targetObject.data();
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void QmlPropertyChangesObject::setTargetObject(QObject *object)
|
|
||||||
//{
|
|
||||||
// if (m_targetObject.data() == object)
|
|
||||||
// return;
|
|
||||||
|
|
||||||
// QMutableListIterator<QDeclarativeAction> actionIterator(m_qmlActionList);
|
|
||||||
// while (actionIterator.hasNext()) {
|
|
||||||
// QDeclarativeAction &qmlAction = actionIterator.next();
|
|
||||||
// if (m_expressionHash.contains(qmlAction.specifiedProperty) && m_expressionHash[qmlAction.specifiedProperty].second) {
|
|
||||||
// if (isActive()) {
|
|
||||||
// QDeclarativePropertyPrivate::setBinding(qmlAction.property, 0, QDeclarativePropertyPrivate::DontRemoveBinding| QDeclarativePropertyPrivate::BypassInterceptor);
|
|
||||||
// qmlAction.property.write(qmlAction.fromValue);
|
|
||||||
// m_expressionHash[qmlAction.specifiedProperty].second.data()->destroy();
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
// qmlAction.toBinding = 0;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (isActive() && targetObject()) {
|
|
||||||
// updateRevertValueAndBinding(qmlAction.specifiedProperty);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// m_targetObject = object;
|
|
||||||
|
|
||||||
// actionIterator.toFront();
|
|
||||||
// while (actionIterator.hasNext()) {
|
|
||||||
// QDeclarativeAction &qmlAction = actionIterator.next();
|
|
||||||
// qmlAction.specifiedObject = object;
|
|
||||||
// qmlAction.property = createMetaProperty(qmlAction.specifiedProperty);
|
|
||||||
// qmlAction.fromValue = qmlAction.property.read();
|
|
||||||
// qmlAction.fromBinding = QDeclarativePropertyPrivate::binding(qmlAction.property);
|
|
||||||
|
|
||||||
// if (m_expressionHash.contains(qmlAction.specifiedProperty) && targetObject()) {
|
|
||||||
// QDeclarativeBinding *binding = new QDeclarativeBinding(m_expressionHash[qmlAction.specifiedProperty].first ,targetObject(), QDeclarativeEngine::contextForObject(targetObject()));
|
|
||||||
// binding->setTarget(qmlAction.property);
|
|
||||||
// binding->setNotifyOnValueChanged(true);
|
|
||||||
// qmlAction.toBinding = binding;
|
|
||||||
// m_expressionHash.insert(qmlAction.specifiedProperty, ExpressionPair(m_expressionHash[qmlAction.specifiedProperty].first, binding));
|
|
||||||
// if (isActive()) {
|
|
||||||
// QDeclarativePropertyPrivate::setBinding(qmlAction.property, qmlAction.toBinding, QDeclarativePropertyPrivate::DontRemoveBinding| QDeclarativePropertyPrivate::BypassInterceptor);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (isActive() && targetObject()) {
|
|
||||||
// updateRevertValueAndBinding(qmlAction.specifiedProperty);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//bool QmlPropertyChangesObject::restoreEntryValues() const
|
|
||||||
//{
|
|
||||||
// return m_restoreEntryValues;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void QmlPropertyChangesObject::setRestoreEntryValues(bool restore)
|
|
||||||
//{
|
|
||||||
// m_restoreEntryValues = restore;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//bool QmlPropertyChangesObject::isExplicit() const
|
|
||||||
//{
|
|
||||||
// return m_isExplicit;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void QmlPropertyChangesObject::setIsExplicit(bool isExplicit)
|
|
||||||
//{
|
|
||||||
// m_isExplicit = isExplicit;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//QDeclarativeProperty QmlPropertyChangesObject::createMetaProperty(const QString &property)
|
|
||||||
//{
|
|
||||||
// QDeclarativeProperty prop(m_targetObject.data(), property, QDeclarativeEngine::contextForObject(m_targetObject.data()));
|
|
||||||
// if (!prop.isValid()) {
|
|
||||||
// qWarning() << "Cannot assign to non-existent property" << property;
|
|
||||||
// return QDeclarativeProperty();
|
|
||||||
// } else if (!prop.isWritable()) {
|
|
||||||
// qWarning() << "Cannot assign to read-only property" << property;
|
|
||||||
// return QDeclarativeProperty();
|
|
||||||
// }
|
|
||||||
// return prop;
|
|
||||||
//}
|
|
||||||
|
|
||||||
QmlPropertyChangesNodeInstance::QmlPropertyChangesNodeInstance(QDeclarativePropertyChanges *propertyChangesObject) :
|
QmlPropertyChangesNodeInstance::QmlPropertyChangesNodeInstance(QDeclarativePropertyChanges *propertyChangesObject) :
|
||||||
ObjectNodeInstance(propertyChangesObject)
|
ObjectNodeInstance(propertyChangesObject)
|
||||||
{
|
{
|
||||||
@@ -187,7 +59,7 @@ QmlPropertyChangesNodeInstance::Pointer QmlPropertyChangesNodeInstance::create(Q
|
|||||||
|
|
||||||
Pointer instance(new QmlPropertyChangesNodeInstance(propertyChange));
|
Pointer instance(new QmlPropertyChangesNodeInstance(propertyChange));
|
||||||
|
|
||||||
instance->populateResetValueHash();
|
instance->populateResetHashes();
|
||||||
|
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
@@ -239,409 +111,11 @@ void QmlPropertyChangesNodeInstance::reparent(const ServerNodeInstance &oldParen
|
|||||||
changesObject()->attachToState();
|
changesObject()->attachToState();
|
||||||
}
|
}
|
||||||
|
|
||||||
//QDeclarativeState *QmlPropertyChangesObject::state() const
|
|
||||||
//{
|
|
||||||
// if (!parent())
|
|
||||||
// return 0;
|
|
||||||
|
|
||||||
// Q_ASSERT(qobject_cast<QDeclarativeState*>(parent()));
|
|
||||||
// return static_cast<QDeclarativeState*>(parent());
|
|
||||||
//}
|
|
||||||
|
|
||||||
//QDeclarativeStateGroup *QmlPropertyChangesObject::stateGroup() const
|
|
||||||
//{
|
|
||||||
// if (!state())
|
|
||||||
// return 0;
|
|
||||||
|
|
||||||
// return state()->stateGroup();
|
|
||||||
//}
|
|
||||||
|
|
||||||
//QDeclarativeStatePrivate *QmlPropertyChangesObject::statePrivate() const
|
|
||||||
//{
|
|
||||||
// if (!parent() || QObjectPrivate::get(parent())->wasDeleted)
|
|
||||||
// return 0;
|
|
||||||
|
|
||||||
// Q_ASSERT(qobject_cast<QDeclarativeState*>(parent()));
|
|
||||||
// return static_cast<QDeclarativeStatePrivate*>(QObjectPrivate::get(parent()));
|
|
||||||
//}
|
|
||||||
|
|
||||||
QDeclarativePropertyChanges *QmlPropertyChangesNodeInstance::changesObject() const
|
QDeclarativePropertyChanges *QmlPropertyChangesNodeInstance::changesObject() const
|
||||||
{
|
{
|
||||||
Q_ASSERT(qobject_cast<QDeclarativePropertyChanges*>(object()));
|
Q_ASSERT(qobject_cast<QDeclarativePropertyChanges*>(object()));
|
||||||
return static_cast<QDeclarativePropertyChanges*>(object());
|
return static_cast<QDeclarativePropertyChanges*>(object());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//QDeclarativeAction QmlPropertyChangesObject::createQDeclarativeAction(const QString &propertyName)
|
|
||||||
//{
|
|
||||||
// QDeclarativeProperty qmlMetaProperty = createMetaProperty(propertyName);
|
|
||||||
|
|
||||||
// QDeclarativeAction qmlAction;
|
|
||||||
// qmlAction.restore = true;
|
|
||||||
// qmlAction.property = qmlMetaProperty;
|
|
||||||
// qmlAction.fromValue = qmlMetaProperty.read();
|
|
||||||
// qmlAction.fromBinding = QDeclarativePropertyPrivate::binding(qmlMetaProperty);
|
|
||||||
// qmlAction.specifiedObject = m_targetObject.data();
|
|
||||||
// qmlAction.specifiedProperty = propertyName;
|
|
||||||
// qmlAction.event = 0;
|
|
||||||
|
|
||||||
// return qmlAction;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//bool QmlPropertyChangesObject::hasActionForProperty(const QString &propertyName) const
|
|
||||||
//{
|
|
||||||
// for(ActionList::iterator actionIterator = m_qmlActionList.begin();
|
|
||||||
// actionIterator != m_qmlActionList.end();
|
|
||||||
// ++actionIterator) {
|
|
||||||
// QDeclarativeAction &qmlAction = *actionIterator;
|
|
||||||
// if (qmlAction.specifiedProperty == propertyName) {
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return false;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//QDeclarativeAction &QmlPropertyChangesObject::qmlActionForProperty(const QString &propertyName) const
|
|
||||||
//{
|
|
||||||
// for(ActionList::iterator actionIterator = m_qmlActionList.begin();
|
|
||||||
// actionIterator != m_qmlActionList.end();
|
|
||||||
// ++actionIterator) {
|
|
||||||
// QDeclarativeAction &qmlAction = *actionIterator;
|
|
||||||
// if (qmlAction.specifiedProperty == propertyName)
|
|
||||||
// return qmlAction;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Q_ASSERT(false);
|
|
||||||
|
|
||||||
// return m_qmlActionList[0];
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void QmlPropertyChangesObject::removeActionForProperty(const QString &propertyName)
|
|
||||||
//{
|
|
||||||
// QMutableListIterator<QDeclarativeAction> actionIterator(m_qmlActionList);
|
|
||||||
// while (actionIterator.hasNext()) {
|
|
||||||
// QDeclarativeAction &qmlAction = actionIterator.next();
|
|
||||||
// if (qmlAction.specifiedProperty == propertyName)
|
|
||||||
// actionIterator.remove();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (statePrivate()) {
|
|
||||||
// QMutableListIterator<QDeclarativeSimpleAction> simpleActionIterator(statePrivate()->revertList);
|
|
||||||
// while (simpleActionIterator.hasNext()) {
|
|
||||||
// QDeclarativeSimpleAction &qmlSimpleAction = simpleActionIterator.next();
|
|
||||||
// if (qmlSimpleAction.specifiedProperty == propertyName && qmlSimpleAction.specifiedObject == targetObject()) {
|
|
||||||
// simpleActionIterator.remove();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//bool QmlPropertyChangesObject::isActive() const
|
|
||||||
//{
|
|
||||||
// if (state() && stateGroup())
|
|
||||||
// return state()->name() == stateGroup()->state();
|
|
||||||
|
|
||||||
// return false;
|
|
||||||
//}
|
|
||||||
//QmlPropertyChangesObject::~QmlPropertyChangesObject()
|
|
||||||
//{
|
|
||||||
// removeFromStateRevertList();
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void QmlPropertyChangesObject::removeFromStateRevertList()
|
|
||||||
//{
|
|
||||||
// if (statePrivate()) {
|
|
||||||
// QMutableListIterator<QDeclarativeSimpleAction> simpleActionIterator(statePrivate()->revertList);
|
|
||||||
// while(simpleActionIterator.hasNext()) {
|
|
||||||
// QDeclarativeSimpleAction &simpleAction = simpleActionIterator.next();
|
|
||||||
// if (simpleAction.specifiedObject == targetObject()) {
|
|
||||||
// if (simpleAction.property.isValid()) {
|
|
||||||
// if (simpleAction.binding) {
|
|
||||||
// QDeclarativePropertyPrivate::setBinding(simpleAction.property, simpleAction.binding);
|
|
||||||
// } else if (simpleAction.value.isValid()) {
|
|
||||||
// QDeclarativePropertyPrivate::setBinding(simpleAction.property, 0);
|
|
||||||
// simpleAction.property.write(simpleAction.value);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// simpleActionIterator.remove();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void QmlPropertyChangesObject::addToStateRevertList()
|
|
||||||
//{
|
|
||||||
// if (isActive() && statePrivate()) {
|
|
||||||
// QListIterator<QDeclarativeAction> actionIterator(m_qmlActionList);
|
|
||||||
// while (actionIterator.hasNext()) {
|
|
||||||
// const QDeclarativeAction &qmlAction = actionIterator.next();
|
|
||||||
// QDeclarativeSimpleAction simpleAction(qmlAction);
|
|
||||||
// simpleAction.binding = qmlAction.fromBinding;
|
|
||||||
// simpleAction.value = qmlAction.fromValue;
|
|
||||||
// statePrivate()->revertList.append(simpleAction);
|
|
||||||
// if (qmlAction.toBinding)
|
|
||||||
// QDeclarativePropertyPrivate::setBinding(qmlAction.property, qmlAction.toBinding);
|
|
||||||
// else
|
|
||||||
// qmlAction.property.write(qmlAction.toValue);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void QmlPropertyChangesObject::updateRevertValueAndBinding(const QString &name)
|
|
||||||
//{
|
|
||||||
// if (isActive() && statePrivate()) {
|
|
||||||
// typedef QList<QDeclarativeSimpleAction> SimpleActionList;
|
|
||||||
// if (!statePrivate()->revertList.isEmpty()) {
|
|
||||||
// for(SimpleActionList::iterator actionIterator = statePrivate()->revertList.begin();
|
|
||||||
// actionIterator != statePrivate()->revertList.end();
|
|
||||||
// ++actionIterator) {
|
|
||||||
// //simple action defines values and bindings to revert current state
|
|
||||||
// QDeclarativeSimpleAction &simpleAction = *actionIterator;
|
|
||||||
// if (simpleAction.specifiedObject == targetObject()
|
|
||||||
// && simpleAction.specifiedProperty == name) {
|
|
||||||
// const QDeclarativeAction &qmlAction = qmlActionForProperty(name);
|
|
||||||
// simpleAction.value = qmlAction.fromValue;
|
|
||||||
// simpleAction.binding = qmlAction.fromBinding;
|
|
||||||
// simpleAction.specifiedObject = qmlAction.specifiedObject;
|
|
||||||
// simpleAction.specifiedProperty = qmlAction.specifiedProperty;
|
|
||||||
// simpleAction.property = qmlAction.property;
|
|
||||||
// return; //return since we just had to update exisisting simple action
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //simple action does not exist, yet
|
|
||||||
|
|
||||||
// const QDeclarativeAction &qmlAction = qmlActionForProperty(name);
|
|
||||||
// QDeclarativeSimpleAction simpleAction(qmlAction);
|
|
||||||
// simpleAction.binding = qmlAction.fromBinding;
|
|
||||||
// simpleAction.value = qmlAction.fromValue;
|
|
||||||
// statePrivate()->revertList.append(simpleAction);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void QmlPropertyChangesObject::setVariantValue(const QString &name, const QVariant & value)
|
|
||||||
//{
|
|
||||||
// if (!hasActionForProperty(name)) {
|
|
||||||
// m_qmlActionList.append(createQDeclarativeAction(name));
|
|
||||||
// }
|
|
||||||
|
|
||||||
// QDeclarativeAction &qmlAction = qmlActionForProperty(name);
|
|
||||||
// if (qmlAction.fromBinding)
|
|
||||||
// qmlAction.fromBinding->setEnabled(false, QDeclarativePropertyPrivate::BypassInterceptor | QDeclarativePropertyPrivate::DontRemoveBinding);
|
|
||||||
|
|
||||||
// qmlAction.toValue = value;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void QmlPropertyChangesObject::setExpression(const QString &name, const QString &expression)
|
|
||||||
//{
|
|
||||||
// if (!hasActionForProperty(name)) {
|
|
||||||
// m_qmlActionList.append(createQDeclarativeAction(name));
|
|
||||||
// }
|
|
||||||
|
|
||||||
// QDeclarativeContext *context = QDeclarativeEngine::contextForObject(targetObject());
|
|
||||||
// QDeclarativeBinding *binding = 0;
|
|
||||||
// QDeclarativeProperty metaProperty(targetObject(), name, context);
|
|
||||||
|
|
||||||
// QDeclarativeAction &qmlAction = qmlActionForProperty(name);
|
|
||||||
// if (m_expressionHash.contains(name) && m_expressionHash[name].second) {
|
|
||||||
// if (QDeclarativePropertyPrivate::binding(metaProperty) == m_expressionHash[name].second.data())
|
|
||||||
// QDeclarativePropertyPrivate::setBinding(metaProperty, 0, QDeclarativePropertyPrivate::BypassInterceptor | QDeclarativePropertyPrivate::DontRemoveBinding);
|
|
||||||
// m_expressionHash.take(name).second->destroy();
|
|
||||||
// qmlAction.toBinding = 0;
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
// if (metaProperty.isValid() && metaProperty.isProperty()) {
|
|
||||||
// binding = new QDeclarativeBinding(expression, targetObject(), context, this);
|
|
||||||
// binding->setTarget(metaProperty);
|
|
||||||
// binding->setNotifyOnValueChanged(true);
|
|
||||||
// qmlAction.toBinding = binding;
|
|
||||||
// m_expressionHash.insert(name, ExpressionPair(expression, binding));
|
|
||||||
// } else {
|
|
||||||
// m_expressionHash.insert(name, ExpressionPair(expression, static_cast<QDeclarativeBinding*>(0)));
|
|
||||||
// }
|
|
||||||
|
|
||||||
// updateRevertValueAndBinding(name);
|
|
||||||
// if (isActive() && binding)
|
|
||||||
// QDeclarativePropertyPrivate::setBinding(metaProperty, binding, QDeclarativePropertyPrivate::BypassInterceptor | QDeclarativePropertyPrivate::DontRemoveBinding);
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void QmlPropertyChangesObject::removeVariantValue(const QString &name)
|
|
||||||
//{
|
|
||||||
// if (hasActionForProperty(name)) {
|
|
||||||
// QDeclarativeAction &qmlAction = qmlActionForProperty(name);
|
|
||||||
// if (hasExpression(name)) {
|
|
||||||
// qmlAction.toValue = QVariant();
|
|
||||||
// updateRevertValueAndBinding(name);
|
|
||||||
// } else {
|
|
||||||
// if (qmlAction.fromBinding)
|
|
||||||
// QDeclarativePropertyPrivate::setBinding(qmlAction.property, qmlAction.fromBinding);
|
|
||||||
// else
|
|
||||||
// qmlAction.property.write(qmlAction.fromValue);
|
|
||||||
// removeActionForProperty(name);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void QmlPropertyChangesObject::removeExpression(const QString &name)
|
|
||||||
//{
|
|
||||||
// if (hasActionForProperty(name)) {
|
|
||||||
// QDeclarativeAction &qmlAction = qmlActionForProperty(name);
|
|
||||||
// if (hasVariantValue(name)) {
|
|
||||||
// ExpressionPair expr = m_expressionHash.take(name);
|
|
||||||
// if (expr.second)
|
|
||||||
// expr.second.data()->destroy();
|
|
||||||
// qmlAction.toBinding = 0;
|
|
||||||
// updateRevertValueAndBinding(name);
|
|
||||||
// qmlAction.property.write(qmlAction.toValue);
|
|
||||||
// } else {
|
|
||||||
// if (qmlAction.fromBinding)
|
|
||||||
// QDeclarativePropertyPrivate::setBinding(qmlAction.property, qmlAction.fromBinding);
|
|
||||||
// else
|
|
||||||
// qmlAction.property.write(qmlAction.fromValue);
|
|
||||||
// removeActionForProperty(name);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void QmlPropertyChangesObject::resetProperty(const QString &name)
|
|
||||||
//{
|
|
||||||
// if (statePrivate()) {
|
|
||||||
// QMutableListIterator<QDeclarativeSimpleAction> simpleActionIterator(statePrivate()->revertList);
|
|
||||||
// while (simpleActionIterator.hasNext()) {
|
|
||||||
// QDeclarativeSimpleAction &qmlSimpleAction = simpleActionIterator.next();
|
|
||||||
// if (qmlSimpleAction.specifiedProperty == name && qmlSimpleAction.specifiedObject == targetObject()) {
|
|
||||||
// if (qmlSimpleAction.binding) {
|
|
||||||
// qDebug() << qmlSimpleAction.binding->expression();
|
|
||||||
// QDeclarativePropertyPrivate::setBinding(qmlSimpleAction.property, qmlSimpleAction.binding);
|
|
||||||
// } else {
|
|
||||||
// QDeclarativePropertyPrivate::setBinding(qmlSimpleAction.property, 0);
|
|
||||||
// qmlSimpleAction.property.write(qmlSimpleAction.value);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (m_expressionHash.contains(name)) {
|
|
||||||
// if (m_expressionHash[name].second) {
|
|
||||||
// QDeclarativeProperty metaProperty(targetObject(), name, QDeclarativeEngine::contextForObject(targetObject()));
|
|
||||||
// if (metaProperty.isValid() && QDeclarativePropertyPrivate::binding(metaProperty) == m_expressionHash[name].second.data())
|
|
||||||
// QDeclarativePropertyPrivate::setBinding(metaProperty, 0, QDeclarativePropertyPrivate::BypassInterceptor | QDeclarativePropertyPrivate::DontRemoveBinding);
|
|
||||||
// m_expressionHash[name].second.data()->destroy();
|
|
||||||
// }
|
|
||||||
// m_expressionHash.remove(name);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (hasActionForProperty(name)) {
|
|
||||||
// removeActionForProperty(name);
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
//}
|
|
||||||
|
|
||||||
//QVariant QmlPropertyChangesObject::variantValue(const QString &name) const
|
|
||||||
//{
|
|
||||||
// if (hasActionForProperty(name)) {
|
|
||||||
// QDeclarativeAction &qmlAction = qmlActionForProperty(name);
|
|
||||||
// return qmlAction.toValue;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return QVariant();
|
|
||||||
//}
|
|
||||||
|
|
||||||
//QString QmlPropertyChangesObject::expression(const QString &name) const
|
|
||||||
//{
|
|
||||||
// if (hasActionForProperty(name)) {
|
|
||||||
// QDeclarativeAction &qmlAction = qmlActionForProperty(name);
|
|
||||||
// if (qmlAction.toBinding)
|
|
||||||
// return qmlAction.toBinding->expression();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return QString();
|
|
||||||
//}
|
|
||||||
|
|
||||||
//bool QmlPropertyChangesObject::hasVariantValue(const QString &name) const
|
|
||||||
//{
|
|
||||||
// if (hasActionForProperty(name))
|
|
||||||
// return qmlActionForProperty(name).toValue.isValid();
|
|
||||||
|
|
||||||
// return false;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//bool QmlPropertyChangesObject::hasExpression(const QString &name) const
|
|
||||||
//{
|
|
||||||
// return m_expressionHash.contains(name);
|
|
||||||
//}
|
|
||||||
|
|
||||||
//bool QmlPropertyChangesObject::updateStateVariant(const QString &name, const QVariant &value)
|
|
||||||
//{
|
|
||||||
// if (hasActionForProperty(name)) {
|
|
||||||
// QDeclarativeAction &qmlAction = qmlActionForProperty(name);
|
|
||||||
// if (qmlAction.fromValue.isValid()) {
|
|
||||||
// qmlAction.fromValue = value;
|
|
||||||
// updateRevertValueAndBinding(name);
|
|
||||||
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return false;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//bool QmlPropertyChangesObject::updateStateBinding(const QString &name, const QString &expression)
|
|
||||||
//{
|
|
||||||
// if (hasActionForProperty(name)) {
|
|
||||||
// QDeclarativeContext *context = QDeclarativeEngine::contextForObject(targetObject());
|
|
||||||
// QDeclarativeProperty metaProperty(targetObject(), name, context);
|
|
||||||
// QDeclarativeAction &qmlAction = qmlActionForProperty(name);
|
|
||||||
|
|
||||||
// if (qmlAction.fromBinding) {
|
|
||||||
// if (QDeclarativePropertyPrivate::binding(qmlAction.property) == qmlAction.fromBinding)
|
|
||||||
// QDeclarativePropertyPrivate::setBinding(qmlAction.property, 0);
|
|
||||||
// qmlAction.fromBinding->destroy();
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
// QDeclarativeBinding *binding = new QDeclarativeBinding(expression, targetObject(), context, this);
|
|
||||||
// binding->setTarget(metaProperty);
|
|
||||||
// binding->setNotifyOnValueChanged(true);
|
|
||||||
// qmlAction.fromBinding = binding;
|
|
||||||
|
|
||||||
// if (m_expressionHash.contains(name))
|
|
||||||
// QDeclarativePropertyPrivate::setBinding(qmlAction.property, binding);
|
|
||||||
|
|
||||||
// updateRevertValueAndBinding(name);
|
|
||||||
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return false;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//bool QmlPropertyChangesObject::resetStateProperty(const QString &name, const QVariant &resetValue)
|
|
||||||
//{
|
|
||||||
// if (hasActionForProperty(name)) {
|
|
||||||
// QDeclarativeContext *context = QDeclarativeEngine::contextForObject(targetObject());
|
|
||||||
// QDeclarativeProperty metaProperty(targetObject(), name, context);
|
|
||||||
// QDeclarativeAction &qmlAction = qmlActionForProperty(name);
|
|
||||||
// if (m_expressionHash.contains(name) && m_expressionHash[name].second) {
|
|
||||||
// m_expressionHash[name].second.data()->destroy();
|
|
||||||
// qmlAction.toBinding = 0;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// qmlAction.fromValue = resetValue;
|
|
||||||
|
|
||||||
// updateRevertValueAndBinding(name);
|
|
||||||
|
|
||||||
// removeActionForProperty(name);
|
|
||||||
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return false;
|
|
||||||
//}
|
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
} // namespace QmlDesigner
|
} // namespace QmlDesigner
|
||||||
|
|||||||
@@ -50,77 +50,6 @@ namespace Internal {
|
|||||||
|
|
||||||
class QmlPropertyChangesNodeInstance;
|
class QmlPropertyChangesNodeInstance;
|
||||||
|
|
||||||
// Original QmlPropertyChanges class requires a custom parser
|
|
||||||
// work around this by writing a replacement class
|
|
||||||
//class QmlPropertyChangesObject : public QDeclarativeStateOperation
|
|
||||||
//{
|
|
||||||
// Q_OBJECT
|
|
||||||
// Q_PROPERTY(QObject *target READ targetObject WRITE setTargetObject)
|
|
||||||
// Q_PROPERTY(bool restoreEntryValues READ restoreEntryValues WRITE setRestoreEntryValues)
|
|
||||||
// Q_PROPERTY(bool explicit READ isExplicit WRITE setIsExplicit)
|
|
||||||
|
|
||||||
// typedef QPair<QString, QWeakPointer<QDeclarativeBinding> > ExpressionPair;
|
|
||||||
//public:
|
|
||||||
// ~QmlPropertyChangesObject();
|
|
||||||
// QObject *targetObject() const;
|
|
||||||
// void setTargetObject(QObject *object);
|
|
||||||
|
|
||||||
// bool restoreEntryValues() const;
|
|
||||||
// void setRestoreEntryValues(bool restore);
|
|
||||||
|
|
||||||
// bool isExplicit() const;
|
|
||||||
// void setIsExplicit(bool isExplicit);
|
|
||||||
|
|
||||||
// virtual ActionList actions();
|
|
||||||
|
|
||||||
// void setVariantValue(const QString &name, const QVariant & value);
|
|
||||||
// void setExpression(const QString &name, const QString &expression);
|
|
||||||
// void removeVariantValue(const QString &name);
|
|
||||||
// void removeExpression(const QString &name);
|
|
||||||
|
|
||||||
// void resetProperty(const QString &name);
|
|
||||||
|
|
||||||
// QVariant variantValue(const QString &name) const;
|
|
||||||
// QString expression(const QString &name) const;
|
|
||||||
|
|
||||||
// bool hasVariantValue(const QString &name) const;
|
|
||||||
// bool hasExpression(const QString &name) const;
|
|
||||||
|
|
||||||
// QmlPropertyChangesObject();
|
|
||||||
|
|
||||||
// bool updateStateVariant(const QString &propertyName, const QVariant &value);
|
|
||||||
// bool updateStateBinding(const QString &propertyName, const QString &expression);
|
|
||||||
// bool resetStateProperty(const QString &propertyName, const QVariant &resetValue);
|
|
||||||
|
|
||||||
// QDeclarativeState *state() const;
|
|
||||||
// void updateRevertValueAndBinding(const QString &name);
|
|
||||||
|
|
||||||
// void removeFromStateRevertList();
|
|
||||||
// void addToStateRevertList();
|
|
||||||
|
|
||||||
//private: // functions
|
|
||||||
// bool isActive() const;
|
|
||||||
|
|
||||||
// QDeclarativeStatePrivate *statePrivate() const;
|
|
||||||
|
|
||||||
// QDeclarativeStateGroup *stateGroup() const;
|
|
||||||
// QDeclarativeProperty createMetaProperty(const QString &property);
|
|
||||||
|
|
||||||
// QDeclarativeAction &qmlActionForProperty(const QString &propertyName) const;
|
|
||||||
// bool hasActionForProperty(const QString &propertyName) const;
|
|
||||||
// void removeActionForProperty(const QString &propertyName);
|
|
||||||
|
|
||||||
// QDeclarativeAction createQDeclarativeAction(const QString &propertyName);
|
|
||||||
|
|
||||||
//private: // variables
|
|
||||||
// QWeakPointer<QObject> m_targetObject;
|
|
||||||
// bool m_restoreEntryValues;
|
|
||||||
// bool m_isExplicit;
|
|
||||||
|
|
||||||
// mutable ActionList m_qmlActionList;
|
|
||||||
// QHash<QString, ExpressionPair> m_expressionHash;
|
|
||||||
//};
|
|
||||||
|
|
||||||
class QmlPropertyChangesNodeInstance : public ObjectNodeInstance
|
class QmlPropertyChangesNodeInstance : public ObjectNodeInstance
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ QmlStateNodeInstance::Pointer
|
|||||||
|
|
||||||
Pointer instance(new QmlStateNodeInstance(stateObject));
|
Pointer instance(new QmlStateNodeInstance(stateObject));
|
||||||
|
|
||||||
instance->populateResetValueHash();
|
instance->populateResetHashes();
|
||||||
|
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ QmlTransitionNodeInstance::Pointer QmlTransitionNodeInstance::create(QObject *ob
|
|||||||
|
|
||||||
Pointer instance(new QmlTransitionNodeInstance(transition));
|
Pointer instance(new QmlTransitionNodeInstance(transition));
|
||||||
|
|
||||||
instance->populateResetValueHash();
|
instance->populateResetHashes();
|
||||||
|
|
||||||
transition->setToState("invalidState");
|
transition->setToState("invalidState");
|
||||||
transition->setFromState("invalidState");
|
transition->setFromState("invalidState");
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
#include "qmlpropertychangesnodeinstance.h"
|
#include "qmlpropertychangesnodeinstance.h"
|
||||||
#include "behaviornodeinstance.h"
|
#include "behaviornodeinstance.h"
|
||||||
#include "qmlstatenodeinstance.h"
|
#include "qmlstatenodeinstance.h"
|
||||||
|
#include "anchorchangesnodeinstance.h"
|
||||||
|
|
||||||
#if QT_VERSION >= 0x050000
|
#if QT_VERSION >= 0x050000
|
||||||
#include "sgitemnodeinstance.h"
|
#include "sgitemnodeinstance.h"
|
||||||
@@ -185,6 +186,8 @@ Internal::ObjectNodeInstance::Pointer ServerNodeInstance::createInstance(QObject
|
|||||||
#endif
|
#endif
|
||||||
else if (isSubclassOf(objectToBeWrapped, "QDeclarativeComponent"))
|
else if (isSubclassOf(objectToBeWrapped, "QDeclarativeComponent"))
|
||||||
instance = Internal::ComponentNodeInstance::create(objectToBeWrapped);
|
instance = Internal::ComponentNodeInstance::create(objectToBeWrapped);
|
||||||
|
else if (objectToBeWrapped->inherits("QDeclarativeAnchorChanges"))
|
||||||
|
instance = Internal::AnchorChangesNodeInstance::create(objectToBeWrapped);
|
||||||
else if (isSubclassOf(objectToBeWrapped, "QDeclarativePropertyChanges"))
|
else if (isSubclassOf(objectToBeWrapped, "QDeclarativePropertyChanges"))
|
||||||
instance = Internal::QmlPropertyChangesNodeInstance::create(objectToBeWrapped);
|
instance = Internal::QmlPropertyChangesNodeInstance::create(objectToBeWrapped);
|
||||||
else if (isSubclassOf(objectToBeWrapped, "QDeclarativeState"))
|
else if (isSubclassOf(objectToBeWrapped, "QDeclarativeState"))
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ GraphicsObjectNodeInstance::GraphicsObjectNodeInstance(QGraphicsObject *graphics
|
|||||||
: ObjectNodeInstance(graphicsObject),
|
: ObjectNodeInstance(graphicsObject),
|
||||||
m_isMovable(true)
|
m_isMovable(true)
|
||||||
{
|
{
|
||||||
|
QGraphicsItemPrivate::get(graphicsObject)->sendParentChangeNotification = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
QGraphicsObject *GraphicsObjectNodeInstance::graphicsObject() const
|
QGraphicsObject *GraphicsObjectNodeInstance::graphicsObject() const
|
||||||
@@ -179,6 +180,11 @@ QObject *GraphicsObjectNodeInstance::parent() const
|
|||||||
return graphicsObject()->parentItem()->toGraphicsObject();
|
return graphicsObject()->parentItem()->toGraphicsObject();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool isRectangleSane(const QRectF &rect)
|
||||||
|
{
|
||||||
|
return rect.isValid() && (rect.width() < 10000) && (rect.height() < 10000);
|
||||||
|
}
|
||||||
|
|
||||||
QRectF GraphicsObjectNodeInstance::boundingRectWithStepChilds(QGraphicsItem *parentItem) const
|
QRectF GraphicsObjectNodeInstance::boundingRectWithStepChilds(QGraphicsItem *parentItem) const
|
||||||
{
|
{
|
||||||
QRectF boundingRect = parentItem->boundingRect();
|
QRectF boundingRect = parentItem->boundingRect();
|
||||||
@@ -187,7 +193,8 @@ QRectF GraphicsObjectNodeInstance::boundingRectWithStepChilds(QGraphicsItem *par
|
|||||||
QGraphicsObject *childObject = childItem->toGraphicsObject();
|
QGraphicsObject *childObject = childItem->toGraphicsObject();
|
||||||
if (!(childObject && nodeInstanceServer()->hasInstanceForObject(childObject))) {
|
if (!(childObject && nodeInstanceServer()->hasInstanceForObject(childObject))) {
|
||||||
QRectF transformedRect = childItem->mapRectToParent(boundingRectWithStepChilds(childItem));
|
QRectF transformedRect = childItem->mapRectToParent(boundingRectWithStepChilds(childItem));
|
||||||
boundingRect = boundingRect.united(transformedRect);
|
if (isRectangleSane(transformedRect))
|
||||||
|
boundingRect = boundingRect.united(transformedRect);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ PositionerNodeInstance::Pointer PositionerNodeInstance::create(QObject *object)
|
|||||||
|
|
||||||
static_cast<QDeclarativeParserStatus*>(positioner)->classBegin();
|
static_cast<QDeclarativeParserStatus*>(positioner)->classBegin();
|
||||||
|
|
||||||
instance->populateResetValueHash();
|
instance->populateResetHashes();
|
||||||
|
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ QmlGraphicsItemNodeInstance::Pointer QmlGraphicsItemNodeInstance::create(QObject
|
|||||||
|
|
||||||
static_cast<QDeclarativeParserStatus*>(qmlGraphicsItem)->classBegin();
|
static_cast<QDeclarativeParserStatus*>(qmlGraphicsItem)->classBegin();
|
||||||
|
|
||||||
instance->populateResetValueHash();
|
instance->populateResetHashes();
|
||||||
|
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
@@ -207,13 +207,26 @@ void QmlGraphicsItemNodeInstance::refresh()
|
|||||||
repositioning(qmlGraphicsItem());
|
repositioning(qmlGraphicsItem());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QmlGraphicsItemNodeInstance::recursiveDoComponentComplete(QDeclarativeItem *declarativeItem)
|
||||||
|
{
|
||||||
|
if (declarativeItem) {
|
||||||
|
if (QDeclarativeItemPrivate::get(declarativeItem)->componentComplete)
|
||||||
|
return;
|
||||||
|
static_cast<QDeclarativeParserStatus*>(declarativeItem)->componentComplete();
|
||||||
|
|
||||||
|
foreach (QGraphicsItem *childItem, declarativeItem->childItems()) {
|
||||||
|
QGraphicsObject *childGraphicsObject = childItem->toGraphicsObject();
|
||||||
|
QDeclarativeItem *childDeclarativeItem = qobject_cast<QDeclarativeItem*>(childGraphicsObject);
|
||||||
|
if (childDeclarativeItem && !nodeInstanceServer()->hasInstanceForObject(childDeclarativeItem))
|
||||||
|
recursiveDoComponentComplete(childDeclarativeItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void QmlGraphicsItemNodeInstance::doComponentComplete()
|
void QmlGraphicsItemNodeInstance::doComponentComplete()
|
||||||
{
|
{
|
||||||
if (qmlGraphicsItem()) {
|
if (qmlGraphicsItem()) {
|
||||||
if (static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(qmlGraphicsItem()))->componentComplete)
|
recursiveDoComponentComplete(qmlGraphicsItem());
|
||||||
return;
|
|
||||||
static_cast<QDeclarativeParserStatus*>(qmlGraphicsItem())->componentComplete();
|
|
||||||
QGraphicsItemPrivate::get(qmlGraphicsItem())->sendParentChangeNotification = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
graphicsObject()->update();
|
graphicsObject()->update();
|
||||||
@@ -241,6 +254,26 @@ int QmlGraphicsItemNodeInstance::penWidth() const
|
|||||||
return GraphicsObjectNodeInstance::penWidth();
|
return GraphicsObjectNodeInstance::penWidth();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QmlGraphicsItemNodeInstance::initialize(const ObjectNodeInstance::Pointer &objectNodeInstance)
|
||||||
|
{
|
||||||
|
GraphicsObjectNodeInstance::initialize(objectNodeInstance);
|
||||||
|
|
||||||
|
if (objectNodeInstance->instanceId() == 0 && objectNodeInstance->isQmlGraphicsItem()) { // is root item
|
||||||
|
objectNodeInstance.staticCast<QmlGraphicsItemNodeInstance>()->setVisible(true);
|
||||||
|
objectNodeInstance->setResetValue("visible", true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void QmlGraphicsItemNodeInstance::setVisible(bool isVisible)
|
||||||
|
{
|
||||||
|
qmlGraphicsItem()->setVisible(isVisible);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QmlGraphicsItemNodeInstance::isVisible() const
|
||||||
|
{
|
||||||
|
return qmlGraphicsItem()->isVisible();
|
||||||
|
}
|
||||||
|
|
||||||
void QmlGraphicsItemNodeInstance::resetProperty(const QString &name)
|
void QmlGraphicsItemNodeInstance::resetProperty(const QString &name)
|
||||||
{
|
{
|
||||||
if (name == "height") {
|
if (name == "height") {
|
||||||
@@ -301,7 +334,10 @@ void QmlGraphicsItemNodeInstance::reparent(const ObjectNodeInstance::Pointer &ol
|
|||||||
setMovable(true);
|
setMovable(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool componentComplete = QDeclarativeItemPrivate::get(qmlGraphicsItem())->componentComplete;
|
||||||
|
QDeclarativeItemPrivate::get(qmlGraphicsItem())->componentComplete = 1;
|
||||||
GraphicsObjectNodeInstance::reparent(oldParentInstance, oldParentProperty, newParentInstance, newParentProperty);
|
GraphicsObjectNodeInstance::reparent(oldParentInstance, oldParentProperty, newParentInstance, newParentProperty);
|
||||||
|
QDeclarativeItemPrivate::get(qmlGraphicsItem())->componentComplete = componentComplete;
|
||||||
|
|
||||||
if (newParentInstance && newParentInstance->isPositioner()) {
|
if (newParentInstance && newParentInstance->isPositioner()) {
|
||||||
setInPositioner(true);
|
setInPositioner(true);
|
||||||
|
|||||||
@@ -75,8 +75,12 @@ public:
|
|||||||
bool isResizable() const;
|
bool isResizable() const;
|
||||||
void setResizable(bool resizeable);
|
void setResizable(bool resizeable);
|
||||||
|
|
||||||
|
void setVisible(bool isVisible);
|
||||||
|
bool isVisible() const;
|
||||||
|
|
||||||
QList<ServerNodeInstance> stateInstances() const;
|
void initialize(const ObjectNodeInstance::Pointer &objectNodeInstance);
|
||||||
|
|
||||||
|
QList<ServerNodeInstance> stateInstances() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QmlGraphicsItemNodeInstance(QDeclarativeItem *item);
|
QmlGraphicsItemNodeInstance(QDeclarativeItem *item);
|
||||||
@@ -85,6 +89,7 @@ protected:
|
|||||||
void resetHorizontal();
|
void resetHorizontal();
|
||||||
void resetVertical();
|
void resetVertical();
|
||||||
void refresh();
|
void refresh();
|
||||||
|
void recursiveDoComponentComplete(QDeclarativeItem *declarativeItem);
|
||||||
|
|
||||||
private: //variables
|
private: //variables
|
||||||
bool m_hasHeight;
|
bool m_hasHeight;
|
||||||
|
|||||||
@@ -164,14 +164,14 @@ void Qt4InformationNodeInstanceServer::collectItemChangesAndSendChangeCommands()
|
|||||||
if (!informationChangedInstanceSet.isEmpty())
|
if (!informationChangedInstanceSet.isEmpty())
|
||||||
nodeInstanceClient()->informationChanged(createAllInformationChangedCommand(informationChangedInstanceSet.toList()));
|
nodeInstanceClient()->informationChanged(createAllInformationChangedCommand(informationChangedInstanceSet.toList()));
|
||||||
|
|
||||||
if (!propertyChangedList.isEmpty())
|
|
||||||
nodeInstanceClient()->valuesChanged(createValuesChangedCommand(propertyChangedList));
|
|
||||||
|
|
||||||
if (!m_parentChangedSet.isEmpty()) {
|
if (!m_parentChangedSet.isEmpty()) {
|
||||||
sendChildrenChangedCommand(m_parentChangedSet.toList());
|
sendChildrenChangedCommand(m_parentChangedSet.toList());
|
||||||
m_parentChangedSet.clear();
|
m_parentChangedSet.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!propertyChangedList.isEmpty())
|
||||||
|
nodeInstanceClient()->valuesChanged(createValuesChangedCommand(propertyChangedList));
|
||||||
|
|
||||||
if (adjustSceneRect) {
|
if (adjustSceneRect) {
|
||||||
QRectF boundingRect = rootNodeInstance().boundingRect();
|
QRectF boundingRect = rootNodeInstance().boundingRect();
|
||||||
if (boundingRect.isValid()) {
|
if (boundingRect.isValid()) {
|
||||||
|
|||||||
@@ -187,5 +187,13 @@ void Qt4RenderNodeInstanceServer::completeComponent(const CompleteComponentComma
|
|||||||
|
|
||||||
nodeInstanceClient()->pixmapChanged(createPixmapChangedCommand(instanceList));
|
nodeInstanceClient()->pixmapChanged(createPixmapChangedCommand(instanceList));
|
||||||
}
|
}
|
||||||
|
void Qt4RenderNodeInstanceServer::changeState(const ChangeStateCommand &command)
|
||||||
|
{
|
||||||
|
Qt4NodeInstanceServer::changeState(command);
|
||||||
|
|
||||||
|
foreach (QGraphicsItem *item, declarativeView()->items()) {
|
||||||
|
item->update();
|
||||||
|
QGraphicsItemPrivate::get(item)->notifyBoundingRectChanged = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
} // namespace QmlDesigner
|
} // namespace QmlDesigner
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ public:
|
|||||||
void createScene(const CreateSceneCommand &command);
|
void createScene(const CreateSceneCommand &command);
|
||||||
void clearScene(const ClearSceneCommand &command);
|
void clearScene(const ClearSceneCommand &command);
|
||||||
void completeComponent(const CompleteComponentCommand &command);
|
void completeComponent(const CompleteComponentCommand &command);
|
||||||
|
void changeState(const ChangeStateCommand &command);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void collectItemChangesAndSendChangeCommands();
|
void collectItemChangesAndSendChangeCommands();
|
||||||
|
|||||||
@@ -34,6 +34,9 @@
|
|||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
#ifdef QT_SIMULATOR
|
||||||
|
#include <QtGui/private/qsimulatorconnection_p.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <qt4nodeinstanceclientproxy.h>
|
#include <qt4nodeinstanceclientproxy.h>
|
||||||
|
|
||||||
@@ -47,6 +50,10 @@
|
|||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
#ifdef QT_SIMULATOR
|
||||||
|
QtSimulatorPrivate::SimulatorConnection::createStubInstance();
|
||||||
|
#endif
|
||||||
|
|
||||||
QApplication application(argc, argv);
|
QApplication application(argc, argv);
|
||||||
|
|
||||||
if (application.arguments().count() != 4)
|
if (application.arguments().count() != 4)
|
||||||
|
|||||||
@@ -17,10 +17,10 @@ RESOURCES += $$PWD/../qmlpuppet.qrc
|
|||||||
|
|
||||||
OTHER_FILES += Info.plist.in
|
OTHER_FILES += Info.plist.in
|
||||||
macx {
|
macx {
|
||||||
info.input = Info.plist.in
|
info.input = $$PWD/Info.plist.in
|
||||||
info.output = $$DESTDIR/$${TARGET}.app/Contents/Info.plist
|
info.output = $$DESTDIR/$${TARGET}.app/Contents/Info.plist
|
||||||
QMAKE_SUBSTITUTES += info
|
QMAKE_SUBSTITUTES += info
|
||||||
} else {
|
} else {
|
||||||
target.path = /bin
|
target.path = /bin
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -176,6 +176,7 @@ QExtGroupBox {
|
|||||||
spacing: 6
|
spacing: 6
|
||||||
|
|
||||||
LineEdit {
|
LineEdit {
|
||||||
|
inputMask: "\\#HHHHHH"
|
||||||
visible: gradientEditing == false
|
visible: gradientEditing == false
|
||||||
backendValue: colorGroupBox.backendColor
|
backendValue: colorGroupBox.backendColor
|
||||||
baseStateFlag: isBaseState
|
baseStateFlag: isBaseState
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ QWidget { //This is a special doubleSpinBox that does color coding for states
|
|||||||
property alias text: label.text
|
property alias text: label.text
|
||||||
property bool alignRight: true
|
property bool alignRight: true
|
||||||
property bool enabled: true
|
property bool enabled: true
|
||||||
|
property alias decimals: box.decimals
|
||||||
|
|
||||||
minimumHeight: 22;
|
minimumHeight: 22;
|
||||||
|
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ QWidget {
|
|||||||
id: label
|
id: label
|
||||||
text: caption
|
text: caption
|
||||||
toolTip: caption
|
toolTip: caption
|
||||||
|
visible: caption != ""
|
||||||
}
|
}
|
||||||
|
|
||||||
SpinBox {
|
SpinBox {
|
||||||
|
|||||||
@@ -43,9 +43,8 @@ GroupBox {
|
|||||||
|
|
||||||
property bool isInBaseState: isBaseState
|
property bool isInBaseState: isBaseState
|
||||||
|
|
||||||
property variant targetLabelWidth: 90 - 20 - 26
|
property variant targetLabelWidth: 60
|
||||||
property int leftMarginMargin: 16
|
property int leftMarginMargin: 16 + 10 + 10
|
||||||
|
|
||||||
layout: VerticalLayout {
|
layout: VerticalLayout {
|
||||||
Label {
|
Label {
|
||||||
text: qsTr("Anchors")
|
text: qsTr("Anchors")
|
||||||
@@ -91,17 +90,20 @@ GroupBox {
|
|||||||
selectedItemNode: anchorBackend.topTarget
|
selectedItemNode: anchorBackend.topTarget
|
||||||
onSelectedItemNodeChanged: { anchorBackend.topTarget = selectedItemNode; }
|
onSelectedItemNodeChanged: { anchorBackend.topTarget = selectedItemNode; }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QWidget {
|
QWidget {
|
||||||
layout : HorizontalLayout {
|
layout : HorizontalLayout {
|
||||||
leftMargin: leftMarginMargin
|
leftMargin: leftMarginMargin
|
||||||
|
Label {
|
||||||
|
text: qsTr("Margin")
|
||||||
|
fixedWidth: targetLabelWidth
|
||||||
|
}
|
||||||
IntEditor {
|
IntEditor {
|
||||||
id:topbox
|
id:topbox
|
||||||
slider: false
|
slider: false
|
||||||
caption: qsTr("Margin")
|
caption: ""
|
||||||
backendValue: backendValues.anchors_topMargin
|
backendValue: backendValues.anchors_topMargin
|
||||||
baseStateFlag: isInBaseState;
|
baseStateFlag: isInBaseState;
|
||||||
maximumValue: 999
|
maximumValue: 999
|
||||||
@@ -149,9 +151,13 @@ GroupBox {
|
|||||||
QWidget {
|
QWidget {
|
||||||
layout : HorizontalLayout {
|
layout : HorizontalLayout {
|
||||||
leftMargin: leftMarginMargin
|
leftMargin: leftMarginMargin
|
||||||
|
Label {
|
||||||
|
text: qsTr("Margin")
|
||||||
|
fixedWidth: targetLabelWidth
|
||||||
|
}
|
||||||
IntEditor {
|
IntEditor {
|
||||||
slider: false
|
slider: false
|
||||||
caption: qsTr("Margin")
|
caption: ""
|
||||||
backendValue: backendValues.anchors_bottomMargin
|
backendValue: backendValues.anchors_bottomMargin
|
||||||
baseStateFlag: isInBaseState;
|
baseStateFlag: isInBaseState;
|
||||||
maximumValue: 999
|
maximumValue: 999
|
||||||
@@ -198,9 +204,13 @@ GroupBox {
|
|||||||
QWidget {
|
QWidget {
|
||||||
layout : HorizontalLayout {
|
layout : HorizontalLayout {
|
||||||
leftMargin: leftMarginMargin
|
leftMargin: leftMarginMargin
|
||||||
|
Label {
|
||||||
|
text: qsTr("Margin")
|
||||||
|
fixedWidth: targetLabelWidth
|
||||||
|
}
|
||||||
IntEditor {
|
IntEditor {
|
||||||
slider: false
|
slider: false
|
||||||
caption: qsTr("Margin")
|
caption: ""
|
||||||
backendValue: backendValues.anchors_leftMargin
|
backendValue: backendValues.anchors_leftMargin
|
||||||
baseStateFlag: isInBaseState;
|
baseStateFlag: isInBaseState;
|
||||||
maximumValue: 999
|
maximumValue: 999
|
||||||
@@ -247,9 +257,13 @@ GroupBox {
|
|||||||
QWidget {
|
QWidget {
|
||||||
layout : HorizontalLayout {
|
layout : HorizontalLayout {
|
||||||
leftMargin: leftMarginMargin
|
leftMargin: leftMarginMargin
|
||||||
|
Label {
|
||||||
|
text: qsTr("Margin")
|
||||||
|
fixedWidth: targetLabelWidth
|
||||||
|
}
|
||||||
IntEditor {
|
IntEditor {
|
||||||
slider: false
|
slider: false
|
||||||
caption: qsTr("Margin")
|
caption: ""
|
||||||
backendValue: backendValues.anchors_rightMargin
|
backendValue: backendValues.anchors_rightMargin
|
||||||
baseStateFlag: isInBaseState;
|
baseStateFlag: isInBaseState;
|
||||||
maximumValue: 999
|
maximumValue: 999
|
||||||
@@ -296,9 +310,13 @@ GroupBox {
|
|||||||
QWidget {
|
QWidget {
|
||||||
layout : HorizontalLayout {
|
layout : HorizontalLayout {
|
||||||
leftMargin: leftMarginMargin
|
leftMargin: leftMarginMargin
|
||||||
|
Label {
|
||||||
|
text: qsTr("Margin")
|
||||||
|
fixedWidth: targetLabelWidth
|
||||||
|
}
|
||||||
IntEditor {
|
IntEditor {
|
||||||
slider: false
|
slider: false
|
||||||
caption: qsTr("Margin")
|
caption: ""
|
||||||
baseStateFlag: isInBaseState;
|
baseStateFlag: isInBaseState;
|
||||||
backendValue: backendValues.anchors_horizontalCenterOffset
|
backendValue: backendValues.anchors_horizontalCenterOffset
|
||||||
maximumValue: 999
|
maximumValue: 999
|
||||||
@@ -345,9 +363,13 @@ GroupBox {
|
|||||||
QWidget {
|
QWidget {
|
||||||
layout : HorizontalLayout {
|
layout : HorizontalLayout {
|
||||||
leftMargin: leftMarginMargin
|
leftMargin: leftMarginMargin
|
||||||
|
Label {
|
||||||
|
text: qsTr("Margin")
|
||||||
|
fixedWidth: targetLabelWidth
|
||||||
|
}
|
||||||
IntEditor {
|
IntEditor {
|
||||||
slider: false
|
slider: false
|
||||||
caption: qsTr("Margin")
|
caption: ""
|
||||||
backendValue: backendValues.anchors_verticalCenterOffset
|
backendValue: backendValues.anchors_verticalCenterOffset
|
||||||
baseStateFlag: isInBaseState;
|
baseStateFlag: isInBaseState;
|
||||||
maximumValue: 999
|
maximumValue: 999
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ QWidget {
|
|||||||
property alias text: lineEditWidget.text
|
property alias text: lineEditWidget.text
|
||||||
property alias readOnly: lineEditWidget.readOnly
|
property alias readOnly: lineEditWidget.readOnly
|
||||||
property alias translation: trCheckbox.visible
|
property alias translation: trCheckbox.visible
|
||||||
|
property alias inputMask: lineEditWidget.inputMask
|
||||||
|
|
||||||
minimumHeight: 24;
|
minimumHeight: 24;
|
||||||
|
|
||||||
|
|||||||
@@ -56,39 +56,6 @@ QWidget {
|
|||||||
minimumValue: 0;
|
minimumValue: 0;
|
||||||
maximumValue: 1000;
|
maximumValue: 1000;
|
||||||
}
|
}
|
||||||
IntEditor {
|
|
||||||
backendValue: backendValues.cellHeight
|
|
||||||
caption: qsTr("Cell height")
|
|
||||||
baseStateFlag: isBaseState;
|
|
||||||
step: 1;
|
|
||||||
minimumValue: 0;
|
|
||||||
maximumValue: 200;
|
|
||||||
}
|
|
||||||
IntEditor {
|
|
||||||
backendValue: backendValues.cellWidth
|
|
||||||
caption: qsTr("Cell width")
|
|
||||||
baseStateFlag: isBaseState;
|
|
||||||
step: 1;
|
|
||||||
minimumValue: 0;
|
|
||||||
maximumValue: 1000;
|
|
||||||
}
|
|
||||||
QWidget {
|
|
||||||
layout: HorizontalLayout {
|
|
||||||
Label {
|
|
||||||
text: qsTr("Flow")
|
|
||||||
}
|
|
||||||
|
|
||||||
ComboBox {
|
|
||||||
baseStateFlag: isBaseState
|
|
||||||
items : { ["LeftToRight", "TopToBottom"] }
|
|
||||||
currentText: backendValues.flow.value;
|
|
||||||
onItemsChanged: {
|
|
||||||
currentText = backendValues.flow.value;
|
|
||||||
}
|
|
||||||
backendValue: backendValues.flow
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} //QWidget
|
|
||||||
IntEditor {
|
IntEditor {
|
||||||
backendValue: backendValues.keyNavigationWraps
|
backendValue: backendValues.keyNavigationWraps
|
||||||
caption: qsTr("Navigation wraps")
|
caption: qsTr("Navigation wraps")
|
||||||
@@ -127,11 +94,11 @@ QWidget {
|
|||||||
ComboBox {
|
ComboBox {
|
||||||
baseStateFlag: isBaseState
|
baseStateFlag: isBaseState
|
||||||
items : { ["Horizontal", "Vertical"] }
|
items : { ["Horizontal", "Vertical"] }
|
||||||
currentText: backendValues.snapMode.value;
|
currentText: backendValues.orientation.value;
|
||||||
onItemsChanged: {
|
onItemsChanged: {
|
||||||
currentText = backendValues.snapMode.value;
|
currentText = backendValues.orientation.value;
|
||||||
}
|
}
|
||||||
backendValue: backendValues.snapMode
|
backendValue: backendValues.orientation
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} //QWidget
|
} //QWidget
|
||||||
@@ -144,7 +111,7 @@ QWidget {
|
|||||||
|
|
||||||
ComboBox {
|
ComboBox {
|
||||||
baseStateFlag: isBaseState
|
baseStateFlag: isBaseState
|
||||||
items : { ["NoSnap", "SnapToRow", "SnapOneRow"] }
|
items : { ["NoSnap", "SnapToItem", "SnapOneItem"] }
|
||||||
currentText: backendValues.snapMode.value;
|
currentText: backendValues.snapMode.value;
|
||||||
onItemsChanged: {
|
onItemsChanged: {
|
||||||
currentText = backendValues.snapMode.value;
|
currentText = backendValues.snapMode.value;
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ GroupBox {
|
|||||||
|
|
||||||
DoubleSpinBox {
|
DoubleSpinBox {
|
||||||
text: ""
|
text: ""
|
||||||
|
decimals: 2
|
||||||
id: opacitySpinBox;
|
id: opacitySpinBox;
|
||||||
backendValue: backendValues.opacity
|
backendValue: backendValues.opacity
|
||||||
property variant backendValueValue: backendValues.opacity.value;
|
property variant backendValueValue: backendValues.opacity.value;
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
|
||||||
<rss version="2.0">
|
|
||||||
<channel>
|
|
||||||
<title>Featured</title>
|
|
||||||
<link>http://qt.nokia.com/</link>
|
|
||||||
<description>Offline content of featured articles</description>
|
|
||||||
<lastBuildDate>Fri, 17 Sep 2010 10:30:00 GMT</lastBuildDate>
|
|
||||||
<language>en-us</language>
|
|
||||||
<item>
|
|
||||||
<title>How to create a Qt Quick application</title>
|
|
||||||
<category>Tutorial</category>
|
|
||||||
<link>qthelp://com.nokia.qtcreator/doc/creator-qml-application.html</link>
|
|
||||||
<guid>qthelp://com.nokia.qtcreator/doc/creator-qml-application.html</guid>
|
|
||||||
<pubDate>Mon, 12 Sep 2005 18:37:00 GMT</pubDate>
|
|
||||||
<description><![CDATA[ This tutorial describes how to use the Qt Creator to implement the states and transitions example application. ]]></description>
|
|
||||||
<image>
|
|
||||||
<link>images/qtquick.png</link>
|
|
||||||
</image>
|
|
||||||
</item>
|
|
||||||
</channel>
|
|
||||||
</rss>
|
|
||||||
|
Before Width: | Height: | Size: 6.7 KiB |
@@ -183,7 +183,7 @@ void Html5ApplicationViewer::setOrientation(ScreenOrientation orientation)
|
|||||||
|
|
||||||
void Html5ApplicationViewer::showExpanded()
|
void Html5ApplicationViewer::showExpanded()
|
||||||
{
|
{
|
||||||
#ifdef Q_OS_SYMBIAN
|
#if defined(Q_OS_SYMBIAN) || defined(Q_WS_SIMULATOR)
|
||||||
showFullScreen();
|
showFullScreen();
|
||||||
#elif defined(Q_WS_MAEMO_5)
|
#elif defined(Q_WS_MAEMO_5)
|
||||||
showMaximized();
|
showMaximized();
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ void MainWindow::setOrientation(ScreenOrientation orientation)
|
|||||||
|
|
||||||
void MainWindow::showExpanded()
|
void MainWindow::showExpanded()
|
||||||
{
|
{
|
||||||
#ifdef Q_OS_SYMBIAN
|
#if defined(Q_OS_SYMBIAN) || defined(Q_WS_SIMULATOR)
|
||||||
showFullScreen();
|
showFullScreen();
|
||||||
#elif defined(Q_WS_MAEMO_5)
|
#elif defined(Q_WS_MAEMO_5)
|
||||||
showMaximized();
|
showMaximized();
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ void QmlApplicationViewer::setOrientation(ScreenOrientation orientation)
|
|||||||
|
|
||||||
void QmlApplicationViewer::showExpanded()
|
void QmlApplicationViewer::showExpanded()
|
||||||
{
|
{
|
||||||
#if defined(Q_OS_SYMBIAN) || defined(MEEGO_EDITION_HARMATTAN)
|
#if defined(Q_OS_SYMBIAN) || defined(MEEGO_EDITION_HARMATTAN) || defined(Q_WS_SIMULATOR)
|
||||||
showFullScreen();
|
showFullScreen();
|
||||||
#elif defined(Q_WS_MAEMO_5)
|
#elif defined(Q_WS_MAEMO_5)
|
||||||
showMaximized();
|
showMaximized();
|
||||||
|
|||||||
@@ -55,11 +55,12 @@ symbian {
|
|||||||
desktopfile.path = /usr/share/applications/hildon
|
desktopfile.path = /usr/share/applications/hildon
|
||||||
icon.files = $${TARGET}64.png
|
icon.files = $${TARGET}64.png
|
||||||
icon.path = /usr/share/icons/hicolor/64x64/apps
|
icon.path = /usr/share/icons/hicolor/64x64/apps
|
||||||
} else {
|
} else:!isEmpty(MEEGO_VERSION_MAJOR) {
|
||||||
desktopfile.files = $${TARGET}_harmattan.desktop
|
desktopfile.files = $${TARGET}_harmattan.desktop
|
||||||
desktopfile.path = /usr/share/applications
|
desktopfile.path = /usr/share/applications
|
||||||
icon.files = $${TARGET}80.png
|
icon.files = $${TARGET}80.png
|
||||||
icon.path = /usr/share/icons/hicolor/80x80/apps
|
icon.path = /usr/share/icons/hicolor/80x80/apps
|
||||||
|
} else { # Assumed to be a Desktop Unix
|
||||||
copyCommand =
|
copyCommand =
|
||||||
for(deploymentfolder, DEPLOYMENTFOLDERS) {
|
for(deploymentfolder, DEPLOYMENTFOLDERS) {
|
||||||
source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)
|
source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)
|
||||||
@@ -98,13 +99,18 @@ symbian {
|
|||||||
export($$itempath)
|
export($$itempath)
|
||||||
INSTALLS += $$item
|
INSTALLS += $$item
|
||||||
}
|
}
|
||||||
|
|
||||||
|
!isEmpty(desktopfile.path) {
|
||||||
|
export(icon.files)
|
||||||
|
export(icon.path)
|
||||||
|
export(desktopfile.files)
|
||||||
|
export(desktopfile.path)
|
||||||
|
INSTALLS += icon desktopfile
|
||||||
|
}
|
||||||
|
|
||||||
target.path = $${installPrefix}/bin
|
target.path = $${installPrefix}/bin
|
||||||
export(icon.files)
|
|
||||||
export(icon.path)
|
|
||||||
export(desktopfile.files)
|
|
||||||
export(desktopfile.path)
|
|
||||||
export(target.path)
|
export(target.path)
|
||||||
INSTALLS += desktopfile icon target
|
INSTALLS += target
|
||||||
}
|
}
|
||||||
|
|
||||||
export (ICON)
|
export (ICON)
|
||||||
|
|||||||
@@ -1,28 +1,34 @@
|
|||||||
/****************************************************************************
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
**
|
**
|
||||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
|
||||||
** All rights reserved.
|
|
||||||
** Contact: Nokia Corporation (info@qt.nokia.com)
|
** Contact: Nokia Corporation (info@qt.nokia.com)
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Components project on Qt Labs.
|
|
||||||
**
|
|
||||||
** No Commercial Usage
|
|
||||||
** This file contains pre-release code and may not be distributed.
|
|
||||||
** You may use this file in accordance with the terms and conditions contained
|
|
||||||
** in the Technology Preview License Agreement accompanying this package.
|
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
**
|
||||||
** General Public License version 2.1 as published by the Free Software
|
** This file may be used under the terms of the GNU Lesser General Public
|
||||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
** License version 2.1 as published by the Free Software Foundation and
|
||||||
** packaging of this file. Please review the following information to
|
** appearing in the file LICENSE.LGPL included in the packaging of this file.
|
||||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
** Please review the following information to ensure the GNU Lesser General
|
||||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
** Public License version 2.1 requirements will be met:
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** In addition, as a special exception, Nokia gives you certain additional
|
||||||
|
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** Other Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used in accordance with the terms and
|
||||||
|
** conditions contained in a signed written agreement between you and Nokia.
|
||||||
**
|
**
|
||||||
** If you have questions regarding the use of this file, please contact
|
** If you have questions regarding the use of this file, please contact
|
||||||
** Nokia at info@qt.nokia.com.
|
** Nokia at info@qt.nokia.com.
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
import QtQuick 1.0
|
import QtQuick 1.0
|
||||||
import "../"
|
import "../"
|
||||||
|
|||||||
@@ -1,43 +1,34 @@
|
|||||||
/****************************************************************************
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
**
|
**
|
||||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
|
||||||
** All rights reserved.
|
|
||||||
** Contact: Nokia Corporation (info@qt.nokia.com)
|
** Contact: Nokia Corporation (info@qt.nokia.com)
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:LGPL$
|
|
||||||
** No Commercial Usage
|
|
||||||
** This file contains pre-release code and may not be distributed.
|
|
||||||
** You may use this file in accordance with the terms and conditions
|
|
||||||
** contained in the Technology Preview License Agreement accompanying
|
|
||||||
** this package.
|
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
**
|
||||||
** General Public License version 2.1 as published by the Free Software
|
** This file may be used under the terms of the GNU Lesser General Public
|
||||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
** License version 2.1 as published by the Free Software Foundation and
|
||||||
** packaging of this file. Please review the following information to
|
** appearing in the file LICENSE.LGPL included in the packaging of this file.
|
||||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
** Please review the following information to ensure the GNU Lesser General
|
||||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
** Public License version 2.1 requirements will be met:
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
**
|
**
|
||||||
** In addition, as a special exception, Nokia gives you certain additional
|
** In addition, as a special exception, Nokia gives you certain additional
|
||||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
**
|
**
|
||||||
|
** Other Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used in accordance with the terms and
|
||||||
|
** conditions contained in a signed written agreement between you and Nokia.
|
||||||
|
**
|
||||||
** If you have questions regarding the use of this file, please contact
|
** If you have questions regarding the use of this file, please contact
|
||||||
** Nokia at info@qt.nokia.com.
|
** Nokia at info@qt.nokia.com.
|
||||||
**
|
**
|
||||||
**
|
**************************************************************************/
|
||||||
**
|
|
||||||
**
|
|
||||||
**
|
|
||||||
**
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
//![code]
|
//![code]
|
||||||
#include "qdeclarativefolderlistmodel.h"
|
#include "qdeclarativefolderlistmodel.h"
|
||||||
|
|||||||
@@ -1,43 +1,34 @@
|
|||||||
/****************************************************************************
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
**
|
**
|
||||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
|
||||||
** All rights reserved.
|
|
||||||
** Contact: Nokia Corporation (info@qt.nokia.com)
|
** Contact: Nokia Corporation (info@qt.nokia.com)
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:LGPL$
|
|
||||||
** No Commercial Usage
|
|
||||||
** This file contains pre-release code and may not be distributed.
|
|
||||||
** You may use this file in accordance with the terms and conditions
|
|
||||||
** contained in the Technology Preview License Agreement accompanying
|
|
||||||
** this package.
|
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
**
|
||||||
** General Public License version 2.1 as published by the Free Software
|
** This file may be used under the terms of the GNU Lesser General Public
|
||||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
** License version 2.1 as published by the Free Software Foundation and
|
||||||
** packaging of this file. Please review the following information to
|
** appearing in the file LICENSE.LGPL included in the packaging of this file.
|
||||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
** Please review the following information to ensure the GNU Lesser General
|
||||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
** Public License version 2.1 requirements will be met:
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
**
|
**
|
||||||
** In addition, as a special exception, Nokia gives you certain additional
|
** In addition, as a special exception, Nokia gives you certain additional
|
||||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
**
|
**
|
||||||
|
** Other Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used in accordance with the terms and
|
||||||
|
** conditions contained in a signed written agreement between you and Nokia.
|
||||||
|
**
|
||||||
** If you have questions regarding the use of this file, please contact
|
** If you have questions regarding the use of this file, please contact
|
||||||
** Nokia at info@qt.nokia.com.
|
** Nokia at info@qt.nokia.com.
|
||||||
**
|
**
|
||||||
**
|
**************************************************************************/
|
||||||
**
|
|
||||||
**
|
|
||||||
**
|
|
||||||
**
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#ifndef QDECLARATIVEFOLDERLISTMODEL_H
|
#ifndef QDECLARATIVEFOLDERLISTMODEL_H
|
||||||
#define QDECLARATIVEFOLDERLISTMODEL_H
|
#define QDECLARATIVEFOLDERLISTMODEL_H
|
||||||
|
|||||||
@@ -1,28 +1,34 @@
|
|||||||
/****************************************************************************
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
**
|
**
|
||||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
|
||||||
** All rights reserved.
|
|
||||||
** Contact: Nokia Corporation (info@qt.nokia.com)
|
** Contact: Nokia Corporation (info@qt.nokia.com)
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Components project on Qt Labs.
|
|
||||||
**
|
|
||||||
** No Commercial Usage
|
|
||||||
** This file contains pre-release code and may not be distributed.
|
|
||||||
** You may use this file in accordance with the terms and conditions contained
|
|
||||||
** in the Technology Preview License Agreement accompanying this package.
|
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
**
|
||||||
** General Public License version 2.1 as published by the Free Software
|
** This file may be used under the terms of the GNU Lesser General Public
|
||||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
** License version 2.1 as published by the Free Software Foundation and
|
||||||
** packaging of this file. Please review the following information to
|
** appearing in the file LICENSE.LGPL included in the packaging of this file.
|
||||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
** Please review the following information to ensure the GNU Lesser General
|
||||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
** Public License version 2.1 requirements will be met:
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** In addition, as a special exception, Nokia gives you certain additional
|
||||||
|
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** Other Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used in accordance with the terms and
|
||||||
|
** conditions contained in a signed written agreement between you and Nokia.
|
||||||
**
|
**
|
||||||
** If you have questions regarding the use of this file, please contact
|
** If you have questions regarding the use of this file, please contact
|
||||||
** Nokia at info@qt.nokia.com.
|
** Nokia at info@qt.nokia.com.
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\class QRangeModel
|
\class QRangeModel
|
||||||
|
|||||||
@@ -1,28 +1,34 @@
|
|||||||
/****************************************************************************
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
**
|
**
|
||||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
|
||||||
** All rights reserved.
|
|
||||||
** Contact: Nokia Corporation (info@qt.nokia.com)
|
** Contact: Nokia Corporation (info@qt.nokia.com)
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Components project on Qt Labs.
|
|
||||||
**
|
|
||||||
** No Commercial Usage
|
|
||||||
** This file contains pre-release code and may not be distributed.
|
|
||||||
** You may use this file in accordance with the terms and conditions contained
|
|
||||||
** in the Technology Preview License Agreement accompanying this package.
|
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
**
|
||||||
** General Public License version 2.1 as published by the Free Software
|
** This file may be used under the terms of the GNU Lesser General Public
|
||||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
** License version 2.1 as published by the Free Software Foundation and
|
||||||
** packaging of this file. Please review the following information to
|
** appearing in the file LICENSE.LGPL included in the packaging of this file.
|
||||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
** Please review the following information to ensure the GNU Lesser General
|
||||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
** Public License version 2.1 requirements will be met:
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** In addition, as a special exception, Nokia gives you certain additional
|
||||||
|
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** Other Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used in accordance with the terms and
|
||||||
|
** conditions contained in a signed written agreement between you and Nokia.
|
||||||
**
|
**
|
||||||
** If you have questions regarding the use of this file, please contact
|
** If you have questions regarding the use of this file, please contact
|
||||||
** Nokia at info@qt.nokia.com.
|
** Nokia at info@qt.nokia.com.
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
#ifndef QRANGEMODEL_H
|
#ifndef QRANGEMODEL_H
|
||||||
#define QRANGEMODEL_H
|
#define QRANGEMODEL_H
|
||||||
|
|||||||
@@ -1,28 +1,34 @@
|
|||||||
/****************************************************************************
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
**
|
**
|
||||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
|
||||||
** All rights reserved.
|
|
||||||
** Contact: Nokia Corporation (info@qt.nokia.com)
|
** Contact: Nokia Corporation (info@qt.nokia.com)
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Components project on Qt Labs.
|
|
||||||
**
|
|
||||||
** No Commercial Usage
|
|
||||||
** This file contains pre-release code and may not be distributed.
|
|
||||||
** You may use this file in accordance with the terms and conditions contained
|
|
||||||
** in the Technology Preview License Agreement accompanying this package.
|
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
**
|
||||||
** General Public License version 2.1 as published by the Free Software
|
** This file may be used under the terms of the GNU Lesser General Public
|
||||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
** License version 2.1 as published by the Free Software Foundation and
|
||||||
** packaging of this file. Please review the following information to
|
** appearing in the file LICENSE.LGPL included in the packaging of this file.
|
||||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
** Please review the following information to ensure the GNU Lesser General
|
||||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
** Public License version 2.1 requirements will be met:
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** In addition, as a special exception, Nokia gives you certain additional
|
||||||
|
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** Other Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used in accordance with the terms and
|
||||||
|
** conditions contained in a signed written agreement between you and Nokia.
|
||||||
**
|
**
|
||||||
** If you have questions regarding the use of this file, please contact
|
** If you have questions regarding the use of this file, please contact
|
||||||
** Nokia at info@qt.nokia.com.
|
** Nokia at info@qt.nokia.com.
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
#ifndef QRANGEMODEL_P_H
|
#ifndef QRANGEMODEL_P_H
|
||||||
#define QRANGEMODEL_P_H
|
#define QRANGEMODEL_P_H
|
||||||
|
|||||||
@@ -1,28 +1,34 @@
|
|||||||
/****************************************************************************
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
**
|
**
|
||||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
|
||||||
** All rights reserved.
|
|
||||||
** Contact: Nokia Corporation (info@qt.nokia.com)
|
** Contact: Nokia Corporation (info@qt.nokia.com)
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Components project on Qt Labs.
|
|
||||||
**
|
|
||||||
** No Commercial Usage
|
|
||||||
** This file contains pre-release code and may not be distributed.
|
|
||||||
** You may use this file in accordance with the terms and conditions contained
|
|
||||||
** in the Technology Preview License Agreement accompanying this package.
|
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
**
|
||||||
** General Public License version 2.1 as published by the Free Software
|
** This file may be used under the terms of the GNU Lesser General Public
|
||||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
** License version 2.1 as published by the Free Software Foundation and
|
||||||
** packaging of this file. Please review the following information to
|
** appearing in the file LICENSE.LGPL included in the packaging of this file.
|
||||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
** Please review the following information to ensure the GNU Lesser General
|
||||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
** Public License version 2.1 requirements will be met:
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** In addition, as a special exception, Nokia gives you certain additional
|
||||||
|
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** Other Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used in accordance with the terms and
|
||||||
|
** conditions contained in a signed written agreement between you and Nokia.
|
||||||
**
|
**
|
||||||
** If you have questions regarding the use of this file, please contact
|
** If you have questions regarding the use of this file, please contact
|
||||||
** Nokia at info@qt.nokia.com.
|
** Nokia at info@qt.nokia.com.
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
#include "qtmenu.h"
|
#include "qtmenu.h"
|
||||||
#include "qdebug.h"
|
#include "qdebug.h"
|
||||||
|
|||||||
@@ -1,28 +1,34 @@
|
|||||||
/****************************************************************************
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
**
|
**
|
||||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
|
||||||
** All rights reserved.
|
|
||||||
** Contact: Nokia Corporation (info@qt.nokia.com)
|
** Contact: Nokia Corporation (info@qt.nokia.com)
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Components project on Qt Labs.
|
|
||||||
**
|
|
||||||
** No Commercial Usage
|
|
||||||
** This file contains pre-release code and may not be distributed.
|
|
||||||
** You may use this file in accordance with the terms and conditions contained
|
|
||||||
** in the Technology Preview License Agreement accompanying this package.
|
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
**
|
||||||
** General Public License version 2.1 as published by the Free Software
|
** This file may be used under the terms of the GNU Lesser General Public
|
||||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
** License version 2.1 as published by the Free Software Foundation and
|
||||||
** packaging of this file. Please review the following information to
|
** appearing in the file LICENSE.LGPL included in the packaging of this file.
|
||||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
** Please review the following information to ensure the GNU Lesser General
|
||||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
** Public License version 2.1 requirements will be met:
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** In addition, as a special exception, Nokia gives you certain additional
|
||||||
|
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** Other Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used in accordance with the terms and
|
||||||
|
** conditions contained in a signed written agreement between you and Nokia.
|
||||||
**
|
**
|
||||||
** If you have questions regarding the use of this file, please contact
|
** If you have questions regarding the use of this file, please contact
|
||||||
** Nokia at info@qt.nokia.com.
|
** Nokia at info@qt.nokia.com.
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
#ifndef QTMLMENU_H
|
#ifndef QTMLMENU_H
|
||||||
#define QTMLMENU_H
|
#define QTMLMENU_H
|
||||||
|
|||||||
@@ -1,28 +1,34 @@
|
|||||||
/****************************************************************************
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
**
|
**
|
||||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
|
||||||
** All rights reserved.
|
|
||||||
** Contact: Nokia Corporation (info@qt.nokia.com)
|
** Contact: Nokia Corporation (info@qt.nokia.com)
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Components project on Qt Labs.
|
|
||||||
**
|
|
||||||
** No Commercial Usage
|
|
||||||
** This file contains pre-release code and may not be distributed.
|
|
||||||
** You may use this file in accordance with the terms and conditions contained
|
|
||||||
** in the Technology Preview License Agreement accompanying this package.
|
|
||||||
**
|
**
|
||||||
** GNU Lesser General Public License Usage
|
** GNU Lesser General Public License Usage
|
||||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
**
|
||||||
** General Public License version 2.1 as published by the Free Software
|
** This file may be used under the terms of the GNU Lesser General Public
|
||||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
** License version 2.1 as published by the Free Software Foundation and
|
||||||
** packaging of this file. Please review the following information to
|
** appearing in the file LICENSE.LGPL included in the packaging of this file.
|
||||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
** Please review the following information to ensure the GNU Lesser General
|
||||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
** Public License version 2.1 requirements will be met:
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** In addition, as a special exception, Nokia gives you certain additional
|
||||||
|
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** Other Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used in accordance with the terms and
|
||||||
|
** conditions contained in a signed written agreement between you and Nokia.
|
||||||
**
|
**
|
||||||
** If you have questions regarding the use of this file, please contact
|
** If you have questions regarding the use of this file, please contact
|
||||||
** Nokia at info@qt.nokia.com.
|
** Nokia at info@qt.nokia.com.
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
#ifndef QWHEELAREA_H
|
#ifndef QWHEELAREA_H
|
||||||
#define QWHEELAREA_H
|
#define QWHEELAREA_H
|
||||||
|
|||||||
@@ -36,21 +36,33 @@ import components 1.0 as Components
|
|||||||
|
|
||||||
Item {
|
Item {
|
||||||
id: root
|
id: root
|
||||||
|
property int margin: 10
|
||||||
|
|
||||||
Components.ScrollArea {
|
Components.ScrollArea {
|
||||||
id: scrollArea
|
id: scrollArea
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
frame: false
|
frame: false
|
||||||
Item {
|
Item {
|
||||||
height: Math.max(recentSessions.height, recentProjects.height)
|
height: Math.max(recentSessions.height + manageSessionsButton.height + margin,
|
||||||
width: root.width-20
|
recentProjects.height)
|
||||||
|
width: root.width
|
||||||
Widgets.RecentSessions {
|
Widgets.RecentSessions {
|
||||||
id: recentSessions
|
id: recentSessions
|
||||||
width: parent.width / 2
|
width: parent.width / 3 - margin
|
||||||
}
|
}
|
||||||
|
Widgets.Button {
|
||||||
|
id: manageSessionsButton
|
||||||
|
anchors.top: recentSessions.bottom
|
||||||
|
anchors.topMargin: margin
|
||||||
|
anchors.left: recentSessions.left
|
||||||
|
text: qsTr("Manage Sessions...")
|
||||||
|
onClicked: projectWelcomePage.manageSessions()
|
||||||
|
}
|
||||||
|
|
||||||
Widgets.RecentProjects {
|
Widgets.RecentProjects {
|
||||||
id: recentProjects
|
id: recentProjects
|
||||||
x: parent.width / 2
|
x: parent.width / 3 + margin
|
||||||
width: parent.width / 2
|
width: parent.width - x
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -404,10 +404,12 @@
|
|||||||
<tags>example,recentfiles,mainwindows</tags>
|
<tags>example,recentfiles,mainwindows</tags>
|
||||||
</example>
|
</example>
|
||||||
<example imageUrl="qthelp://com.trolltech.qt/qdoc/images/qml-dialcontrol-example.png" difficulty="?" docUrl="qthelp://com.trolltech.qt/qdoc/declarative-ui-components-dialcontrol.html" projectPath="declarative/ui-components/dialcontrol/dialcontrol.qmlproject" name="Dial">
|
<example imageUrl="qthelp://com.trolltech.qt/qdoc/images/qml-dialcontrol-example.png" difficulty="?" docUrl="qthelp://com.trolltech.qt/qdoc/declarative-ui-components-dialcontrol.html" projectPath="declarative/ui-components/dialcontrol/dialcontrol.qmlproject" name="Dial">
|
||||||
|
<fileToOpen>declarative/ui-components/dialcontrol/dialcontrol.qml</fileToOpen>
|
||||||
<description><![CDATA[This example shows how to create a dial-type control. It combines <tt>Image</tt> elements with <tt>Rotation</tt> transforms and <tt>SpringAnimation</tt> behaviors to produce an interactive speedometer-type dial.]]></description>
|
<description><![CDATA[This example shows how to create a dial-type control. It combines <tt>Image</tt> elements with <tt>Rotation</tt> transforms and <tt>SpringAnimation</tt> behaviors to produce an interactive speedometer-type dial.]]></description>
|
||||||
<tags>example,dialcontrol,declarative,ui-components,qml,qt quick,image,rotation,springanimation</tags>
|
<tags>example,dialcontrol,declarative,ui-components,qml,qt quick,image,rotation,springanimation</tags>
|
||||||
</example>
|
</example>
|
||||||
<example imageUrl="qthelp://com.trolltech.qt/qdoc/images/qml-flipable-example.png" difficulty="?" docUrl="qthelp://com.trolltech.qt/qdoc/declarative-ui-components-flipable.html" projectPath="declarative/ui-components/flipable/flipable.qmlproject" name="Flipable">
|
<example imageUrl="qthelp://com.trolltech.qt/qdoc/images/qml-flipable-example.png" difficulty="?" docUrl="qthelp://com.trolltech.qt/qdoc/declarative-ui-components-flipable.html" projectPath="declarative/ui-components/flipable/flipable.qmlproject" name="Flipable">
|
||||||
|
<fileToOpen>declarative/ui-components/flipable/flipable.qml</fileToOpen>
|
||||||
<description><![CDATA[This example shows how to use the <tt>Flipable</tt> element.]]></description>
|
<description><![CDATA[This example shows how to use the <tt>Flipable</tt> element.]]></description>
|
||||||
<tags>example,flipable,declarative,ui-components,qml,qt quick,flipable</tags>
|
<tags>example,flipable,declarative,ui-components,qml,qt quick,flipable</tags>
|
||||||
</example>
|
</example>
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ OTHER_FILES = develop.qml \
|
|||||||
newssupport.qml \
|
newssupport.qml \
|
||||||
welcomescreen.qml \
|
welcomescreen.qml \
|
||||||
widgets/Button.qml \
|
widgets/Button.qml \
|
||||||
|
widgets/CheckBox.qml \
|
||||||
widgets/Feedback.qml \
|
widgets/Feedback.qml \
|
||||||
widgets/RatingBar.qml \
|
widgets/RatingBar.qml \
|
||||||
widgets/ExampleBrowser.qml \
|
widgets/ExampleBrowser.qml \
|
||||||
|
|||||||
@@ -33,75 +33,86 @@
|
|||||||
import QtQuick 1.0
|
import QtQuick 1.0
|
||||||
import "widgets"
|
import "widgets"
|
||||||
|
|
||||||
Image {
|
Rectangle {
|
||||||
id: root
|
id: root
|
||||||
source: "qrc:welcome/images/welcomebg.png"
|
color: "#F2F2F2"
|
||||||
smooth: true
|
|
||||||
|
|
||||||
// work around the fact that we can't use
|
// work around the fact that we can't use
|
||||||
// a property alias to welcomeMode.activePlugin
|
// a property alias to welcomeMode.activePlugin
|
||||||
property int current: 0
|
property int current: 0
|
||||||
onCurrentChanged: welcomeMode.activePlugin = current
|
onCurrentChanged: welcomeMode.activePlugin = current
|
||||||
Component.onCompleted: current = welcomeMode.activePlugin
|
Component.onCompleted: current = welcomeMode.activePlugin
|
||||||
|
Item {
|
||||||
BorderImage {
|
anchors.top: parent.top
|
||||||
id: inner_background
|
|
||||||
Image {
|
|
||||||
id: header;
|
|
||||||
source: "qrc:welcome/images/center_frame_header.png";
|
|
||||||
anchors.verticalCenter: parent.verticalCenter;
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter;
|
|
||||||
anchors.topMargin: 2
|
|
||||||
}
|
|
||||||
anchors.top: root.top
|
|
||||||
source: "qrc:welcome/images/background_center_frame_v2.png"
|
|
||||||
width: parent.width
|
|
||||||
height: 60
|
|
||||||
border.right: 2
|
|
||||||
border.left: 2
|
|
||||||
border.top: 2
|
|
||||||
border.bottom: 10
|
|
||||||
}
|
|
||||||
|
|
||||||
LinksBar {
|
|
||||||
id: navigationAndDevLinks
|
|
||||||
property alias current: root.current
|
|
||||||
anchors.top: inner_background.bottom
|
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.bottomMargin: 4
|
|
||||||
anchors.topMargin: -2
|
|
||||||
width: parent.width
|
|
||||||
model: tabs.model
|
|
||||||
tabBarWidth: width
|
|
||||||
}
|
|
||||||
|
|
||||||
BorderImage {
|
|
||||||
id: news
|
|
||||||
opacity: 0.7
|
|
||||||
source: "qrc:welcome/images/rc_combined.png"
|
|
||||||
border.left: 5; border.top: 5
|
|
||||||
border.right: 5; border.bottom: 5
|
|
||||||
anchors.top: navigationAndDevLinks.bottom
|
|
||||||
anchors.bottom: feedback.top
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.margins: 5
|
|
||||||
width: 270
|
|
||||||
FeaturedAndNewsListing {
|
|
||||||
anchors.fill: parent
|
|
||||||
anchors.margins: 4
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TabWidget {
|
|
||||||
id: tabs
|
|
||||||
property int current: root.current
|
|
||||||
model: pagesModel
|
|
||||||
anchors.top: navigationAndDevLinks.bottom
|
|
||||||
anchors.bottom: feedback.top
|
|
||||||
anchors.left: news.right
|
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
anchors.leftMargin: 0
|
anchors.bottom: feedback.top
|
||||||
anchors.margins: 4
|
anchors.margins: 10
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: news
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.rightMargin: 5
|
||||||
|
width: 270
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
border.color: "#36295B7F"
|
||||||
|
border.width: 1
|
||||||
|
color: "#B3FFFFFF"
|
||||||
|
}
|
||||||
|
FeaturedAndNewsListing {
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.margins: 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Image {
|
||||||
|
id: tabFrame
|
||||||
|
source: "qrc:welcome/images/welcomebg.png"
|
||||||
|
smooth: true
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
border.color: "#36295B7F"
|
||||||
|
border.width: 1
|
||||||
|
color: "#20FFFFFF"
|
||||||
|
}
|
||||||
|
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.left: news.right
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.leftMargin: 5
|
||||||
|
|
||||||
|
LinksBar {
|
||||||
|
id: linksBar
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
property alias current: root.current
|
||||||
|
model: tabs.model
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: linksBar
|
||||||
|
anchors.bottomMargin: 1
|
||||||
|
opacity: 1
|
||||||
|
border.color: "#4D295B7F"
|
||||||
|
border.width: 1
|
||||||
|
color: "#00000000"
|
||||||
|
}
|
||||||
|
|
||||||
|
TabWidget {
|
||||||
|
id: tabs
|
||||||
|
property int current: root.current
|
||||||
|
model: pagesModel
|
||||||
|
anchors.top: linksBar.bottom
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.margins: 10
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Feedback {
|
Feedback {
|
||||||
|
|||||||
@@ -31,47 +31,50 @@
|
|||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
import Qt 4.7
|
import Qt 4.7
|
||||||
|
import "../components/custom" as Custom
|
||||||
|
|
||||||
BorderImage {
|
Custom.Button {
|
||||||
property string text
|
id: button
|
||||||
property string image
|
|
||||||
property int iconSize : innerImg.sourceSize.height
|
|
||||||
signal clicked;
|
|
||||||
id: root
|
|
||||||
source: "qrc:/welcome/images/btn_26.png"
|
|
||||||
height: innerImg.height + 16
|
|
||||||
|
|
||||||
border.left: 5; border.top: 5
|
width: Math.max(100, labelItem.contentsWidth+20)
|
||||||
border.right: 5; border.bottom: 5
|
height: 32
|
||||||
|
|
||||||
Image{
|
background: BorderImage {
|
||||||
id: innerImg
|
source: {
|
||||||
height: root.iconSize
|
if (pressed)
|
||||||
width: root.iconSize
|
return "qrc:/welcome/images/btn_26_pressed.png"
|
||||||
anchors.verticalCenter: label.verticalCenter
|
else
|
||||||
anchors.right: label.left
|
if (containsMouse)
|
||||||
anchors.rightMargin: 4
|
return "qrc:/welcome/images/btn_26_hover.png"
|
||||||
visible: root.image != ""
|
else
|
||||||
source: root.image
|
return "qrc:/welcome/images/btn_26.png"
|
||||||
}
|
|
||||||
|
|
||||||
Text {
|
|
||||||
id: label;
|
|
||||||
anchors.left: innerImg.right
|
|
||||||
anchors.right: parent.right
|
|
||||||
text: root.text
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea { id: mouseArea; anchors.fill: parent; hoverEnabled: true; onClicked: root.clicked() }
|
|
||||||
|
|
||||||
states: [
|
|
||||||
State {
|
|
||||||
id: pressedState; when: mouseArea.pressed;
|
|
||||||
PropertyChanges { target: root; source: "qrc:/welcome/images/btn_26_pressed.png" }
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
id: hoverState; when: mouseArea.containsMouse
|
|
||||||
PropertyChanges { target: root; source: "qrc:/welcome/images/btn_26_hover.png" }
|
|
||||||
}
|
}
|
||||||
]
|
|
||||||
|
border { left: 5; right: 5; top: 5; bottom: 5 }
|
||||||
|
}
|
||||||
|
|
||||||
|
label: Item {
|
||||||
|
property int contentsWidth : row.width
|
||||||
|
Row {
|
||||||
|
id: row
|
||||||
|
spacing: 4
|
||||||
|
anchors.centerIn: parent
|
||||||
|
property int contentsWidth : row.width
|
||||||
|
Image {
|
||||||
|
id: image
|
||||||
|
source: iconSource
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
fillMode: Image.Stretch //mm Image should shrink if button is too small, depends on QTBUG-14957
|
||||||
|
}
|
||||||
|
Text {
|
||||||
|
id:text
|
||||||
|
color: textColor
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
text: button.text
|
||||||
|
horizontalAlignment: Text.Center
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Keys.onSpacePressed:clicked()
|
||||||
}
|
}
|
||||||
|
|||||||
39
share/qtcreator/welcomescreen/widgets/CheckBox.qml
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
import QtQuick 1.0
|
||||||
|
import "../components/custom" as Custom
|
||||||
|
|
||||||
|
Custom.CheckBox{
|
||||||
|
id:checkbox
|
||||||
|
property string text
|
||||||
|
property string hint
|
||||||
|
height:20
|
||||||
|
width: Math.max(110, backgroundItem.rowWidth)
|
||||||
|
|
||||||
|
background: Item {
|
||||||
|
property int rowWidth: row.width
|
||||||
|
Row {
|
||||||
|
id: row
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
spacing: 4
|
||||||
|
BorderImage {
|
||||||
|
source: "qrc:welcome/images/lineedit.png";
|
||||||
|
width: 16;
|
||||||
|
height: 16;
|
||||||
|
border.left: 4;
|
||||||
|
border.right: 4;
|
||||||
|
border.top: 4;
|
||||||
|
border.bottom: 4
|
||||||
|
Image {
|
||||||
|
source: "qrc:welcome/images/checked.png";
|
||||||
|
width: 10; height: 10
|
||||||
|
anchors.centerIn: parent
|
||||||
|
visible: checkbox.checked
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Text {
|
||||||
|
text: checkbox.text
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Keys.onSpacePressed:checked = !checked
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -40,7 +40,7 @@ Item {
|
|||||||
width: parent.width
|
width: parent.width
|
||||||
height: lineEdit.height
|
height: lineEdit.height
|
||||||
|
|
||||||
Components.TextField {
|
LineEdit {
|
||||||
Behavior on width { NumberAnimation{} }
|
Behavior on width { NumberAnimation{} }
|
||||||
placeholderText: !checkBox.checked ? qsTr("Search in Tutorials") : qsTr("Search in Tutorials, Examples and Demos")
|
placeholderText: !checkBox.checked ? qsTr("Search in Tutorials") : qsTr("Search in Tutorials, Examples and Demos")
|
||||||
focus: true
|
focus: true
|
||||||
@@ -49,7 +49,7 @@ Item {
|
|||||||
onTextChanged: examplesModel.filterRegExp = RegExp('.*'+text, "im")
|
onTextChanged: examplesModel.filterRegExp = RegExp('.*'+text, "im")
|
||||||
}
|
}
|
||||||
|
|
||||||
Components.CheckBox {
|
CheckBox {
|
||||||
id: checkBox
|
id: checkBox
|
||||||
text: qsTr("Show Examples and Demos")
|
text: qsTr("Show Examples and Demos")
|
||||||
checked: false
|
checked: false
|
||||||
@@ -60,7 +60,7 @@ Item {
|
|||||||
onCheckedChanged: examplesModel.showTutorialsOnly = !checked;
|
onCheckedChanged: examplesModel.showTutorialsOnly = !checked;
|
||||||
}
|
}
|
||||||
|
|
||||||
Components.Button {
|
Button {
|
||||||
id: tagFilterButton
|
id: tagFilterButton
|
||||||
property string tag
|
property string tag
|
||||||
Behavior on width { NumberAnimation{} }
|
Behavior on width { NumberAnimation{} }
|
||||||
@@ -78,7 +78,7 @@ Item {
|
|||||||
}
|
}
|
||||||
Components.ScrollArea {
|
Components.ScrollArea {
|
||||||
id: scrollArea
|
id: scrollArea
|
||||||
anchors.topMargin: lineEditRoot.height
|
anchors.topMargin: lineEditRoot.height+12
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
clip: true
|
clip: true
|
||||||
frame: false
|
frame: false
|
||||||
@@ -86,7 +86,10 @@ Item {
|
|||||||
Repeater {
|
Repeater {
|
||||||
id: repeater
|
id: repeater
|
||||||
model: examplesModel
|
model: examplesModel
|
||||||
delegate: ExampleDelegate { width: scrollArea.width-20 }
|
delegate: ExampleDelegate {
|
||||||
|
width: scrollArea.width-20;
|
||||||
|
property int count: repeater.count
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,12 +31,16 @@
|
|||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
import QtQuick 1.0
|
import QtQuick 1.0
|
||||||
|
import components 1.0 as Components
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: root
|
id: root
|
||||||
height: 110
|
height: 130
|
||||||
color: "#00ffffff"
|
color: "#00ffffff"
|
||||||
radius: 6
|
radius: 6
|
||||||
|
clip: true
|
||||||
|
|
||||||
|
Components.QStyleItem { id: styleItem; cursor: "pointinghandcursor"; anchors.fill: parent }
|
||||||
|
|
||||||
Text {
|
Text {
|
||||||
id: title
|
id: title
|
||||||
@@ -46,8 +50,7 @@ Rectangle {
|
|||||||
anchors.topMargin: 10
|
anchors.topMargin: 10
|
||||||
text: model.name
|
text: model.name
|
||||||
font.bold: true
|
font.bold: true
|
||||||
font.pixelSize: 16;
|
font.pixelSize: 16
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RatingBar { id: rating; anchors.top: parent.top; anchors.topMargin: 10; anchors.right: parent.right; anchors.rightMargin: 10; rating: model.difficulty; visible: model.difficulty !== 0 }
|
RatingBar { id: rating; anchors.top: parent.top; anchors.topMargin: 10; anchors.right: parent.right; anchors.rightMargin: 10; rating: model.difficulty; visible: model.difficulty !== 0 }
|
||||||
@@ -66,20 +69,44 @@ Rectangle {
|
|||||||
source: model.imageUrl !== "" ? "image://helpimage/" + encodeURI(model.imageUrl) : ""
|
source: model.imageUrl !== "" ? "image://helpimage/" + encodeURI(model.imageUrl) : ""
|
||||||
}
|
}
|
||||||
|
|
||||||
Text {
|
Item {
|
||||||
id: description
|
id: description
|
||||||
clip: true
|
|
||||||
anchors.left: image.right
|
anchors.left: image.right
|
||||||
anchors.leftMargin: 10
|
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
anchors.rightMargin: 10
|
anchors.rightMargin: 10
|
||||||
|
anchors.leftMargin: image.hideImage ? 0 : 10
|
||||||
anchors.top: rating.bottom
|
anchors.top: rating.bottom
|
||||||
anchors.topMargin: 6
|
anchors.topMargin: 6
|
||||||
wrapMode: Text.WordWrap
|
anchors.bottom: bottomRow.top
|
||||||
text: model.description
|
anchors.bottomMargin: 6
|
||||||
|
clip: true
|
||||||
|
Text {
|
||||||
|
clip: true
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.left: parent.left
|
||||||
|
wrapMode: Text.WordWrap
|
||||||
|
text: model.description
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Row {
|
||||||
|
id: bottomRow
|
||||||
|
anchors.left: image.right;
|
||||||
|
anchors.leftMargin: image.hideImage ? 0 : 10
|
||||||
|
anchors.topMargin: 10
|
||||||
|
anchors.bottomMargin: 10
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
spacing: 4
|
||||||
|
Text { text: qsTr("Tags:"); font.bold: true; }
|
||||||
|
Text { text: model.tags.join(", "); color: "grey" }
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
visible: count-1 !== index
|
||||||
|
height: 1
|
||||||
|
anchors {left: parent.left; bottom: parent.bottom; right: parent.right }
|
||||||
|
color: "darkgrey"
|
||||||
}
|
}
|
||||||
Text { id: labelText; anchors.top: description.bottom; anchors.topMargin: 10; anchors.left: image.right; text: "Tags: "; font.bold: true; }
|
|
||||||
Row { id: tagLine; anchors.top: description.bottom; anchors.topMargin: 10; anchors.left: labelText.right; Text { text: model.tags.join(", "); color: "grey" } }
|
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
id: mouseArea
|
id: mouseArea
|
||||||
@@ -95,7 +122,7 @@ Rectangle {
|
|||||||
onExited: parent.state = ""
|
onExited: parent.state = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
states: [ State { name: "hover"; PropertyChanges { target: root; color: "#eeeeeeee" } } ]
|
states: [ State { name: "hover"; PropertyChanges { target: root; color: "#5effffff" } } ]
|
||||||
|
|
||||||
transitions:
|
transitions:
|
||||||
Transition {
|
Transition {
|
||||||
|
|||||||
@@ -40,43 +40,20 @@ BorderImage {
|
|||||||
border.left: 2
|
border.left: 2
|
||||||
border.right: 2
|
border.right: 2
|
||||||
|
|
||||||
Rectangle { color: "black"; width: parent.width; height: 1; anchors.top: parent.top; anchors.left: parent.left }
|
Rectangle { color: "#4D295B7F"; width: parent.width; height: 1; anchors.top: parent.top; anchors.left: parent.left }
|
||||||
|
|
||||||
Components.QStyleItem { id: styleItem; visible: false }
|
Components.QStyleItem { id: styleItem; visible: false }
|
||||||
|
|
||||||
// whitelist
|
// whitelist
|
||||||
property bool _hasDesktopTheme: welcomeMode.platform() === "linux"
|
property bool _hasDesktopTheme: welcomeMode.platform() === "linux"
|
||||||
|
|
||||||
Components.Button {
|
Button {
|
||||||
id: openProjectButton
|
|
||||||
text: qsTr("Open Project...")
|
|
||||||
iconSource: _hasDesktopTheme ? "image://desktoptheme/document-open" : ""
|
|
||||||
onClicked: welcomeMode.openProject();
|
|
||||||
height: 32
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.margins: 5
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
}
|
|
||||||
|
|
||||||
Components.Button {
|
|
||||||
id: createProjectButton
|
|
||||||
text: qsTr("Create Project...")
|
|
||||||
iconSource: _hasDesktopTheme ? "image://desktoptheme/document-new" : ""
|
|
||||||
onClicked: welcomeMode.newProject();
|
|
||||||
height: 32
|
|
||||||
anchors.left: openProjectButton.right
|
|
||||||
anchors.margins: 5
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Components.Button {
|
|
||||||
id: feedbackButton
|
id: feedbackButton
|
||||||
text: qsTr("Feedback")
|
text: qsTr("Feedback")
|
||||||
iconSource: "qrc:welcome/images/feedback_arrow.png"
|
iconSource: "qrc:welcome/images/feedback_arrow.png"
|
||||||
height: 32
|
height: 32
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
anchors.right: feedbackText.left
|
anchors.left: parent.left
|
||||||
anchors.margins: 5
|
anchors.margins: 5
|
||||||
onClicked: welcomeMode.sendFeedback()
|
onClicked: welcomeMode.sendFeedback()
|
||||||
}
|
}
|
||||||
@@ -84,9 +61,32 @@ BorderImage {
|
|||||||
Text {
|
Text {
|
||||||
id: feedbackText
|
id: feedbackText
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.leftMargin: 10
|
|
||||||
anchors.margins: 5
|
anchors.margins: 5
|
||||||
|
anchors.leftMargin: 10
|
||||||
|
anchors.left: feedbackButton.right
|
||||||
text: qsTr("Help us make Qt Creator even better")
|
text: qsTr("Help us make Qt Creator even better")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Button {
|
||||||
|
id: openProjectButton
|
||||||
|
text: qsTr("Open Project...")
|
||||||
|
iconSource: _hasDesktopTheme ? "image://desktoptheme/document-open" : ""
|
||||||
|
onClicked: welcomeMode.openProject();
|
||||||
|
anchors.right: createProjectButton.left
|
||||||
|
anchors.margins: 5
|
||||||
|
height: 32
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
Button {
|
||||||
|
id: createProjectButton
|
||||||
|
text: qsTr("Create Project...")
|
||||||
|
iconSource: _hasDesktopTheme ? "image://desktoptheme/document-new" : ""
|
||||||
|
onClicked: welcomeMode.newProject();
|
||||||
|
height: 32
|
||||||
|
anchors.margins: 5
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ Item {
|
|||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
|
|
||||||
Repeater {
|
Repeater {
|
||||||
|
width: parent.width
|
||||||
model: root.model
|
model: root.model
|
||||||
delegate: root.delegate
|
delegate: root.delegate
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,32 +31,21 @@
|
|||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
import QtQuick 1.0
|
import QtQuick 1.0
|
||||||
|
import "../components/custom" as Custom
|
||||||
|
|
||||||
FocusScope {
|
|
||||||
|
Custom.TextField {
|
||||||
id: root
|
id: root
|
||||||
signal textChanged
|
leftMargin: 6
|
||||||
property alias text : input.text
|
rightMargin: 6
|
||||||
height:input.font.pixelSize*1.8
|
topMargin: 6
|
||||||
BorderImage {
|
bottomMargin: 6
|
||||||
|
|
||||||
|
background: BorderImage {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
source: "img/lineedit.png"
|
source: "qrc:welcome/images/lineedit.png"
|
||||||
border.left: 5; border.top: 5
|
border.left: 5; border.top: 5
|
||||||
border.right: 5; border.bottom: 5
|
border.right: 5; border.bottom: 5
|
||||||
TextInput {
|
|
||||||
id: input
|
|
||||||
property string defaultText
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.leftMargin: 4
|
|
||||||
anchors.rightMargin: 4
|
|
||||||
color: "grey"
|
|
||||||
text: defaultText
|
|
||||||
font.pointSize: 12
|
|
||||||
clip: true
|
|
||||||
onActiveFocusChanged: activeFocus ? state = 'active' : state = ''
|
|
||||||
onTextChanged: if (text != defaultText) root.textChanged();
|
|
||||||
states: [ State { name: "active"; PropertyChanges { target: input; color: "black"; text: "" } } ]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,32 +31,24 @@
|
|||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
import QtQuick 1.0
|
import QtQuick 1.0
|
||||||
|
import components 1.0 as Components
|
||||||
|
|
||||||
Row {
|
Row {
|
||||||
id: tabBar
|
id: tabBar
|
||||||
height: 25
|
height: 25
|
||||||
|
|
||||||
property alias model: tabs.model
|
property alias model: tabs.model
|
||||||
property int tabBarWidth
|
property int tabWidth: Math.floor(tabBar.width/tabs.count)
|
||||||
|
|
||||||
Repeater {
|
Repeater {
|
||||||
id: tabs
|
id: tabs
|
||||||
height: tabBar.height
|
|
||||||
model: parent.model
|
model: parent.model
|
||||||
delegate:
|
delegate: Item {
|
||||||
Item {
|
Components.QStyleItem { id: styleItem; cursor: "pointinghandcursor"; anchors.fill: parent }
|
||||||
width: tabBarWidth / tabs.count
|
|
||||||
height: tabBar.height
|
height: tabBar.height
|
||||||
|
width: index === 1 ? tabWidth : (tabWidth + tabBar.width % tabs.count + 1)
|
||||||
Rectangle {
|
Image {
|
||||||
width: parent.width; height: 1
|
|
||||||
anchors { bottom: parent.bottom; bottomMargin: 1 }
|
|
||||||
color: "#acb2c2"
|
|
||||||
}
|
|
||||||
BorderImage {
|
|
||||||
id: tabBackground
|
id: tabBackground
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
border { top: 1; bottom: 1}
|
|
||||||
source: "qrc:welcome/images/tab_inactive.png"
|
source: "qrc:welcome/images/tab_inactive.png"
|
||||||
}
|
}
|
||||||
Text {
|
Text {
|
||||||
@@ -65,7 +57,7 @@ Row {
|
|||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
text: model.modelData.title
|
text: model.modelData.title
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
color: "white"
|
color: "black"
|
||||||
}
|
}
|
||||||
MouseArea {
|
MouseArea {
|
||||||
id: mouseArea
|
id: mouseArea
|
||||||
@@ -77,7 +69,7 @@ Row {
|
|||||||
State {
|
State {
|
||||||
id: activeState; when: tabBar.current == index
|
id: activeState; when: tabBar.current == index
|
||||||
PropertyChanges { target: tabBackground; source:"qrc:welcome/images/tab_active.png" }
|
PropertyChanges { target: tabBackground; source:"qrc:welcome/images/tab_active.png" }
|
||||||
PropertyChanges { target: text; color: "black" }
|
PropertyChanges { target: text; color: "white" }
|
||||||
},
|
},
|
||||||
State {
|
State {
|
||||||
id: hoverState; when: mouseArea.containsMouse
|
id: hoverState; when: mouseArea.containsMouse
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ Item {
|
|||||||
property alias itemCount: repeater.count
|
property alias itemCount: repeater.count
|
||||||
|
|
||||||
Timer {
|
Timer {
|
||||||
id: timer
|
id: nextItemTimer
|
||||||
repeat: true
|
repeat: true
|
||||||
interval: 30*1000
|
interval: 30*1000
|
||||||
onTriggered: repeater.incrementIndex()
|
onTriggered: repeater.incrementIndex()
|
||||||
@@ -63,7 +63,7 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function handleModelUpdate() {
|
function handleModelUpdate() {
|
||||||
timer.stop();
|
nextItemTimer.stop();
|
||||||
currentItem = 0;
|
currentItem = 0;
|
||||||
for (var i = 0; i < count; ++i) {
|
for (var i = 0; i < count; ++i) {
|
||||||
if (i != currentItem)
|
if (i != currentItem)
|
||||||
@@ -71,7 +71,7 @@ Item {
|
|||||||
else
|
else
|
||||||
repeater.itemAt(i).active = true;
|
repeater.itemAt(i).active = true;
|
||||||
}
|
}
|
||||||
timer.start();
|
nextItemTimer.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleModelChanged() {
|
function handleModelChanged() {
|
||||||
@@ -95,7 +95,7 @@ Item {
|
|||||||
id: delegateItem
|
id: delegateItem
|
||||||
opacity: 0
|
opacity: 0
|
||||||
height: root.height
|
height: root.height
|
||||||
width: 270
|
width: root.width
|
||||||
Column {
|
Column {
|
||||||
spacing: 10
|
spacing: 10
|
||||||
width: parent.width
|
width: parent.width
|
||||||
@@ -145,12 +145,18 @@ Item {
|
|||||||
cursor: "pointinghandcursor";
|
cursor: "pointinghandcursor";
|
||||||
anchors.fill: column
|
anchors.fill: column
|
||||||
}
|
}
|
||||||
|
Timer {
|
||||||
|
id: toolTipTimer
|
||||||
|
interval: 500
|
||||||
|
onTriggered: styleItem.showToolTip(link)
|
||||||
|
}
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
anchors.fill: column;
|
anchors.fill: column;
|
||||||
onClicked: Qt.openUrlExternally(link);
|
onClicked: Qt.openUrlExternally(link);
|
||||||
hoverEnabled: true;
|
hoverEnabled: true;
|
||||||
onEntered: timer.stop()
|
onEntered: { nextItemTimer.stop(); toolTipTimer.start(); }
|
||||||
onExited: timer.restart()
|
onExited: { nextItemTimer.restart(); toolTipTimer.stop(); }
|
||||||
id: mouseArea
|
id: mouseArea
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,6 @@ Row {
|
|||||||
property int rating : 2
|
property int rating : 2
|
||||||
property int totalRating: 3
|
property int totalRating: 3
|
||||||
|
|
||||||
Repeater { id: rep1; model: rating; Image { source: "img/face-star.png"; width: 22 } }
|
Repeater { id: rep1; model: rating; Image { source: "qrc:welcome/images/face-star.png"; width: 22 } }
|
||||||
Repeater { id: rep2; model: totalRating-rating; Image { source: "img/draw-star.png"; width: 22 } }
|
Repeater { id: rep2; model: totalRating-rating; Image { source: "qrc:welcome/images/draw-star.png"; width: 22 } }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ HeaderItemView {
|
|||||||
id: nameText
|
id: nameText
|
||||||
text: displayName
|
text: displayName
|
||||||
font.bold: true
|
font.bold: true
|
||||||
width: parent.width
|
anchors.right: parent.right
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
anchors.left: arrowImage.right
|
anchors.left: arrowImage.right
|
||||||
anchors.leftMargin: 10
|
anchors.leftMargin: 10
|
||||||
@@ -61,7 +61,7 @@ HeaderItemView {
|
|||||||
text: prettyFilePath
|
text: prettyFilePath
|
||||||
elide: Text.ElideMiddle
|
elide: Text.ElideMiddle
|
||||||
color: "grey"
|
color: "grey"
|
||||||
width: parent.width
|
anchors.right: parent.right
|
||||||
anchors.top: nameText.bottom
|
anchors.top: nameText.bottom
|
||||||
anchors.left: arrowImage.right
|
anchors.left: arrowImage.right
|
||||||
anchors.leftMargin: 10
|
anchors.leftMargin: 10
|
||||||
|
|||||||
@@ -44,8 +44,10 @@ HeaderItemView {
|
|||||||
function fullSessionName()
|
function fullSessionName()
|
||||||
{
|
{
|
||||||
var newSessionName = sessionName
|
var newSessionName = sessionName
|
||||||
if (model.currentSession)
|
if (model.lastSession && sessionList.isDefaultVirgin())
|
||||||
newSessionName = qsTr("%1 (current session)").arg(newSessionName);
|
newSessionName = qsTr("%1 (last session)").arg(sessionName);
|
||||||
|
else if (model.activeSession && !sessionList.isDefaultVirgin())
|
||||||
|
newSessionName = qsTr("%1 (current session)").arg(sessionName);
|
||||||
return newSessionName;
|
return newSessionName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,7 +62,6 @@ HeaderItemView {
|
|||||||
Components.QStyleItem { id: styleItem; cursor: "pointinghandcursor"; anchors.fill: parent }
|
Components.QStyleItem { id: styleItem; cursor: "pointinghandcursor"; anchors.fill: parent }
|
||||||
id: fileNameText
|
id: fileNameText
|
||||||
text: parent.fullSessionName()
|
text: parent.fullSessionName()
|
||||||
font.italic: model.defaultSession
|
|
||||||
elide: Text.ElideMiddle
|
elide: Text.ElideMiddle
|
||||||
anchors.left: arrowImage.right
|
anchors.left: arrowImage.right
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
|||||||