Merge remote-tracking branch 'origin/4.12'
Change-Id: I296a61fe43aea134de9e7a6ee8042af3f45f5e99
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 13 KiB |
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2019 The Qt Company Ltd.
|
** Copyright (C) 2020 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Creator documentation.
|
** This file is part of the Qt Creator documentation.
|
||||||
@@ -124,6 +124,15 @@
|
|||||||
To switch between Windows line endings (CRLF) and Unix line endings (LF),
|
To switch between Windows line endings (CRLF) and Unix line endings (LF),
|
||||||
select the ending style on the editor toolbar (6).
|
select the ending style on the editor toolbar (6).
|
||||||
|
|
||||||
|
To set the line endings to use for all projects by default, select
|
||||||
|
\uicontrol Tools > \uicontrol Options > \uicontrol {Text Editor} >
|
||||||
|
\uicontrol Behavior, and then select the ending style in the
|
||||||
|
\uicontrol {Default line endings} field.
|
||||||
|
|
||||||
|
To set the line endings to use for a project, select \uicontrol Projects >
|
||||||
|
\uicontrol {Project Settings} > \uicontrol Editor. For more information,
|
||||||
|
see \l {Specifying Editor Settings}.
|
||||||
|
|
||||||
\section1 Splitting the Editor View
|
\section1 Splitting the Editor View
|
||||||
|
|
||||||
Split the editor view or open the editor in a new window when you want to
|
Split the editor view or open the editor in a new window when you want to
|
||||||
|
@@ -213,7 +213,7 @@
|
|||||||
|
|
||||||
\b {How can I make use of my multi-core CPU with \QC?}
|
\b {How can I make use of my multi-core CPU with \QC?}
|
||||||
|
|
||||||
On Linux and \macos, go to \uicontrol Project mode, select your configuration
|
On Linux and \macos, go to \uicontrol Projects mode, select your configuration
|
||||||
in the \uicontrol {Build Settings}, locate the \uicontrol {Build Steps}, and add the
|
in the \uicontrol {Build Settings}, locate the \uicontrol {Build Steps}, and add the
|
||||||
following value, where \c{<num>} is the amount of cores in your CPU:
|
following value, where \c{<num>} is the amount of cores in your CPU:
|
||||||
\c{-j <num>}
|
\c{-j <num>}
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2018 The Qt Company Ltd.
|
** Copyright (C) 2020 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Creator documentation.
|
** This file is part of the Qt Creator documentation.
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
\title Deploying to Devices
|
\title Deploying to Devices
|
||||||
|
|
||||||
Deploy configurations in the \uicontrol Project mode
|
Deploy configurations in the \uicontrol Projects mode
|
||||||
\uicontrol {Run Settings} handle the packaging of the application as an
|
\uicontrol {Run Settings} handle the packaging of the application as an
|
||||||
executable and copying it to a location you want to run the executable at.
|
executable and copying it to a location you want to run the executable at.
|
||||||
The files can be copied to a location in the file system of the development
|
The files can be copied to a location in the file system of the development
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2018 The Qt Company Ltd.
|
** Copyright (C) 2020 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Creator documentation.
|
** This file is part of the Qt Creator documentation.
|
||||||
@@ -71,6 +71,8 @@
|
|||||||
|
|
||||||
\li \l{File Encoding}
|
\li \l{File Encoding}
|
||||||
|
|
||||||
|
\li \l{Selecting Line Ending Style}
|
||||||
|
|
||||||
\li \l{Moving to Symbol Definition or Declaration}
|
\li \l{Moving to Symbol Definition or Declaration}
|
||||||
|
|
||||||
\li \l{Configuring Fonts}
|
\li \l{Configuring Fonts}
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2019 The Qt Company Ltd.
|
** Copyright (C) 2020 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Creator documentation.
|
** This file is part of the Qt Creator documentation.
|
||||||
@@ -48,8 +48,9 @@
|
|||||||
|
|
||||||
To run executable files without deploying them first, select \uicontrol Build >
|
To run executable files without deploying them first, select \uicontrol Build >
|
||||||
\uicontrol {Run Without Deployment}. To make this the default option, deselect the
|
\uicontrol {Run Without Deployment}. To make this the default option, deselect the
|
||||||
\uicontrol Tools > \uicontrol Options > \uicontrol Project >
|
\uicontrol Tools > \uicontrol Options > \uicontrol {Build & Run} >
|
||||||
\uicontrol {Always deploy project before running it} option.
|
\uicontrol General > \uicontrol {Always deploy project before running it}
|
||||||
|
check box.
|
||||||
|
|
||||||
To run applications:
|
To run applications:
|
||||||
|
|
||||||
|
@@ -91,10 +91,12 @@
|
|||||||
\list
|
\list
|
||||||
\li \l {Creating Qt Quick Projects}
|
\li \l {Creating Qt Quick Projects}
|
||||||
\li \l {Editing QML Files in Design Mode}
|
\li \l {Editing QML Files in Design Mode}
|
||||||
|
|
||||||
\li \l {Creating UIs}
|
\li \l {Creating UIs}
|
||||||
\list
|
\list
|
||||||
\li \l {Creating Components}
|
\li \l {Creating Components}
|
||||||
\list
|
\list
|
||||||
|
\li \l{Editing 2D Content}
|
||||||
\li \l{Creating Buttons}
|
\li \l{Creating Buttons}
|
||||||
\li \l{Creating Scalable Buttons and Borders}
|
\li \l{Creating Scalable Buttons and Borders}
|
||||||
\endlist
|
\endlist
|
||||||
|
@@ -46,9 +46,8 @@
|
|||||||
|
|
||||||
\li \l {Editing QML Files in Design Mode}
|
\li \l {Editing QML Files in Design Mode}
|
||||||
|
|
||||||
You can use the \uicontrol {Form Editor} or the
|
You can use several different editors and views in the
|
||||||
\uicontrol {Text Editor} in the Design mode to
|
Design mode to develop Qt Quick applications.
|
||||||
develop Qt Quick applications.
|
|
||||||
|
|
||||||
\li \l {Creating UIs}
|
\li \l {Creating UIs}
|
||||||
|
|
||||||
|
@@ -37,7 +37,7 @@
|
|||||||
name and one or several comments. The comments have a title, author, and
|
name and one or several comments. The comments have a title, author, and
|
||||||
comment text.
|
comment text.
|
||||||
|
|
||||||
\image qtquick-annotations.png "Annotations displayed in the Form Editor tab"
|
\image qtquick-annotations.png "Annotations displayed in the Form Editor view"
|
||||||
|
|
||||||
Annotations are saved in the end of QML files when you save the file. They
|
Annotations are saved in the end of QML files when you save the file. They
|
||||||
do not affect the QML performance in any way.
|
do not affect the QML performance in any way.
|
||||||
|
@@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\contentspage index.html
|
\contentspage index.html
|
||||||
\previouspage quick-components.html
|
\previouspage qtquick-form-editor.html
|
||||||
\page quick-buttons.html
|
\page quick-buttons.html
|
||||||
\nextpage quick-scalable-image.html
|
\nextpage quick-scalable-image.html
|
||||||
|
|
||||||
|
@@ -37,7 +37,7 @@
|
|||||||
\else
|
\else
|
||||||
\previouspage creator-using-qt-quick-designer.html
|
\previouspage creator-using-qt-quick-designer.html
|
||||||
\endif
|
\endif
|
||||||
\nextpage quick-buttons.html
|
\nextpage qtquick-form-editor.html
|
||||||
|
|
||||||
\title Creating Components
|
\title Creating Components
|
||||||
|
|
||||||
@@ -64,14 +64,14 @@
|
|||||||
|
|
||||||
The \uicontrol {Qt Quick Application} wizards for a particular platform add
|
The \uicontrol {Qt Quick Application} wizards for a particular platform add
|
||||||
the import statements automatically. You can remove import statements in
|
the import statements automatically. You can remove import statements in
|
||||||
\uicontrol {QML Imports}
|
\uicontrol {QML Imports}.
|
||||||
|
|
||||||
\uicontrol {Assets} displays the images and other files that you copy
|
\uicontrol {Assets} displays the images and other files that you copy
|
||||||
to the project folder (to the same subfolder as the QML files).
|
to the project folder (to the same subfolder as the QML files).
|
||||||
|
|
||||||
\section1 Adding Components to Designs
|
\section1 Adding Components to Designs
|
||||||
|
|
||||||
\image qmldesigner-visual-editor.png "Design mode"
|
\image studio-design-mode.png "Design mode"
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
\li Drag and drop components from the \uicontrol Library (2) to the
|
\li Drag and drop components from the \uicontrol Library (2) to the
|
||||||
@@ -85,6 +85,8 @@
|
|||||||
\li Add states to apply sets of changes to the properties of one or
|
\li Add states to apply sets of changes to the properties of one or
|
||||||
several components in the \uicontrol States view (6). For more
|
several components in the \uicontrol States view (6). For more
|
||||||
information, see \l{Adding States}.
|
information, see \l{Adding States}.
|
||||||
|
\li Animate component properties in the \uicontrol Timeline view (7).
|
||||||
|
For more information, see \l{Creating Animations}.
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
\section1 Using Basic QML Types
|
\section1 Using Basic QML Types
|
||||||
@@ -564,11 +566,14 @@
|
|||||||
|
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
The following sections contain examples of how to create some common
|
The following sections contain more information about how to use the
|
||||||
components:
|
\uicontrol {Form Editor} to edit 2D content, as well as examples of
|
||||||
|
how to create some common components using basic QML types:
|
||||||
|
|
||||||
\list
|
\list
|
||||||
|
|
||||||
|
\li \l{Editing 2D Content}
|
||||||
|
|
||||||
\li \l{Creating Buttons}
|
\li \l{Creating Buttons}
|
||||||
|
|
||||||
\li \l{Creating Scalable Buttons and Borders}
|
\li \l{Creating Scalable Buttons and Borders}
|
||||||
|
@@ -43,150 +43,68 @@
|
|||||||
\title Editing QML Files in Design Mode
|
\title Editing QML Files in Design Mode
|
||||||
|
|
||||||
\QC opens \l{Qt Quick UI Forms}{UI forms} (ui.qml files) in the
|
\QC opens \l{Qt Quick UI Forms}{UI forms} (ui.qml files) in the
|
||||||
\uicontrol {Form Editor} tab in the Design mode. It is
|
\uicontrol {Form Editor} view in the Design mode. It is
|
||||||
recommended that you use UI forms for components that you want to
|
recommended that you use UI forms for components that you want to
|
||||||
edit in the Design mode.
|
edit in the Design mode.
|
||||||
|
|
||||||
\if defined(qtcreator)
|
|
||||||
\image qmldesigner-visual-editor.png "Visual editor"
|
|
||||||
\else
|
|
||||||
\image studio-design-mode.png "Design mode"
|
\image studio-design-mode.png "Design mode"
|
||||||
\endif
|
|
||||||
|
|
||||||
To manage your project in the Design mode:
|
The Design mode contains different views for designing UIs. To open the
|
||||||
|
following views, select \uicontrol Window > \uicontrol Views:
|
||||||
|
|
||||||
\list
|
\list
|
||||||
|
\li \uicontrol {Form Editor} (1) provides a canvas for designing 2D UIs.
|
||||||
|
For more information, see \l {Editing 2D Content}.
|
||||||
|
|
||||||
\li \uicontrol Canvas (1) is the working area where you create QML
|
\li \uicontrol {3D Editor} provides an editor for files you created
|
||||||
components and design applications. In the \uicontrol {Form Editor}
|
using 3D graphics applications and stored in one of the supported
|
||||||
tab, you can use a visual editor to design UIs, and in the
|
formats. For more information, see \l{Editing 3D Scenes}.
|
||||||
\uicontrol {Text Editor} tab, you can use a code editor to edit the
|
|
||||||
QML code generated by the visual editor.
|
|
||||||
|
|
||||||
\li Use the sidebars to select QML types to use in the project, to
|
\li \uicontrol {Text Editor} provides a code editor for editing the QML
|
||||||
specify properties for them, and to
|
code generated by the visual editors. For more information, see
|
||||||
view them in a tree structure, as well as to create connections
|
\l {Working in Edit Mode}.
|
||||||
and browse projects and files. You can select the content of the
|
|
||||||
sidebars in the sidebar menu:
|
|
||||||
|
|
||||||
\list
|
\li \uicontrol {Library} (2) displays the building blocks that you
|
||||||
|
can use to design applications: predefined QML types, your own
|
||||||
|
QML components, or Qt Quick Controls that you import to the
|
||||||
|
project, and other resources. For more information, see
|
||||||
|
\l {Creating Components}.
|
||||||
|
|
||||||
\li \uicontrol {Library} (2) displays the building blocks that you
|
\li \uicontrol {Navigator} (3) displays the items in the current QML
|
||||||
can use to design applications: predefined QML types, your own
|
file as a tree structure. For more information, see
|
||||||
QML components, or Qt Quick Controls that you import to the
|
\l {Managing Item Hierarchy}.
|
||||||
project, and other resources. For more information, see
|
|
||||||
\l {Creating Components}.
|
|
||||||
|
|
||||||
\li \uicontrol {Navigator} (3) displays the items in the current QML
|
\li \uicontrol {Properties} (4) organizes the properties of the
|
||||||
file as a tree structure. For more information, see
|
selected component. You can change the properties also in the
|
||||||
\l {Managing Item Hierarchy}.
|
\uicontrol {Text Editor}. For more information, see
|
||||||
|
\l {Specifying Item Properties}.
|
||||||
|
|
||||||
\li \uicontrol {Properties} (4) organizes the properties of the
|
\li \uicontrol Connections (5) enables you to create connections
|
||||||
selected item. You can change the properties also in the
|
between objects, signals, and object properties. For more
|
||||||
\uicontrol {Text Editor}. For more information, see
|
information, see \l{Adding Connections}.
|
||||||
\l {Specifying Item Properties}.
|
|
||||||
|
|
||||||
\li \uicontrol Connections (5) enables you to create connections
|
\li \uicontrol {File System} shows all files in the currently
|
||||||
between objects, signals, and object properties. For more
|
selected directory. For more information, see
|
||||||
information, see \l{Adding Connections}.
|
\l{Viewing the File System}.
|
||||||
|
|
||||||
\li \uicontrol {File System} shows all files in the currently
|
\li \uicontrol {Open Documents} shows currently open files.
|
||||||
selected directory. For more information, see
|
|
||||||
\l{Viewing the File System}.
|
|
||||||
|
|
||||||
\li \uicontrol {Open Documents} shows currently open files.
|
\li \uicontrol {Projects} shows a list of projects open in the
|
||||||
|
current session. For more information, see
|
||||||
|
\l{Viewing Project Files}.
|
||||||
|
|
||||||
\li \uicontrol {Projects} shows a list of projects open in the
|
\li \uicontrol {States} (6) displays the different states of the item.
|
||||||
current session. For more information, see
|
|
||||||
\l{Viewing Project Files}.
|
|
||||||
|
|
||||||
\endlist
|
|
||||||
|
|
||||||
\li \uicontrol {States} view (6) displays the different states of the item.
|
|
||||||
QML states typically describe user interface configurations, such as
|
QML states typically describe user interface configurations, such as
|
||||||
the UI controls, their properties and behavior and the available
|
the UI controls, their properties and behavior and the available
|
||||||
actions. For more information, see \l{Adding States}.
|
actions. For more information, see \l{Adding States}.
|
||||||
|
|
||||||
\if defined(qtdesignstudio)
|
\li \uicontrol Timeline (7) provides a timeline and keyframe based
|
||||||
\li \uicontrol Timeline view (7) provides a timeline and keyframe based
|
|
||||||
editor that enables you to animate the properties of UI components.
|
editor that enables you to animate the properties of UI components.
|
||||||
\endif
|
For more information, see \l{Creating Animations}.
|
||||||
|
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
\section1 Snapping to Parent and Sibling Items
|
You can move the views anywhere on the screen and save them as
|
||||||
|
\e workspaces, as instructed in \l {Managing Workspaces}.
|
||||||
You design applications on the canvas by placing items on it.
|
|
||||||
|
|
||||||
When you are working on a design, you can use snapping to align
|
|
||||||
items on the canvas. Click the \inlineimage snapping.png
|
|
||||||
button to have the items snap to their parent or sibling items. Snapping
|
|
||||||
lines automatically appear to help you position the items.
|
|
||||||
Click the \inlineimage snapping_and_anchoring.png
|
|
||||||
button to anchor the item to the items that you snap to.
|
|
||||||
|
|
||||||
Choose \uicontrol Tools > \uicontrol Options > \uicontrol {Qt Quick} >
|
|
||||||
\uicontrol {\QMLD} to specify settings for snapping. In the
|
|
||||||
\uicontrol {Parent item padding} field, specify the
|
|
||||||
distance in pixels between the parent item and the snapping lines. In the
|
|
||||||
\uicontrol {Sibling item spacing} field, specify the distance in pixels between
|
|
||||||
sibling items and the snapping lines.
|
|
||||||
|
|
||||||
The following image shows the snapping lines (1) when
|
|
||||||
\uicontrol {Parent item padding} is set to 5 pixels.
|
|
||||||
|
|
||||||
\image qmldesigner-snap-margins.png "Snapping lines on canvas"
|
|
||||||
|
|
||||||
\section1 Hiding Item Boundaries
|
|
||||||
|
|
||||||
The Design mode displays the boundaries of items on the canvas. To hide
|
|
||||||
the boundaries, click the \inlineimage boundingrect.png
|
|
||||||
button.
|
|
||||||
|
|
||||||
\section1 Selecting Items
|
|
||||||
|
|
||||||
When you point the mouse to overlapping items, the frontmost item is
|
|
||||||
selected by default. However, items that do not have any content, such as
|
|
||||||
the mouse area, are typically located in front of items that do have
|
|
||||||
content, such as rectangles or border images. To select items with content
|
|
||||||
by default, click the
|
|
||||||
\inlineimage qmldesigner-only-select-items-with-content.png
|
|
||||||
button.
|
|
||||||
|
|
||||||
\section1 Previewing Component Size
|
|
||||||
|
|
||||||
The width and height of the root item in a QML file determine the size of
|
|
||||||
the component. You can reuse components, such as buttons, in different
|
|
||||||
sizes in other QML files and design UIs for use with different device
|
|
||||||
profiles, screen resolution, or screen orientation. The component size
|
|
||||||
might also be zero (0,0) if its final size is determined by property
|
|
||||||
bindings.
|
|
||||||
|
|
||||||
To experiment with different component sizes, enter values in the
|
|
||||||
\uicontrol {Override Width} and \uicontrol {Override Height} fields (1) on
|
|
||||||
the canvas toolbar. The changes are displayed on the canvas (2)
|
|
||||||
and in the \uicontrol States view (3), but the property
|
|
||||||
values are not changed permanently in the QML file. You can permanently
|
|
||||||
change the property values in the \uicontrol Properties view (4).
|
|
||||||
|
|
||||||
\image qmldesigner-preview-size.png "Canvas width and height"
|
|
||||||
|
|
||||||
\section1 Specifying Canvas Size
|
|
||||||
|
|
||||||
To change the canvas size, select \uicontrol Tools > \uicontrol Options >
|
|
||||||
\uicontrol {Qt Quick} > \uicontrol {\QMLD} and
|
|
||||||
specify the canvas width and height in the \uicontrol Canvas group.
|
|
||||||
|
|
||||||
\section1 Refreshing the Canvas
|
|
||||||
|
|
||||||
When you open QML files in the Design mode, the items in the file are drawn
|
|
||||||
on the canvas. When you edit the item properties, the QML file and
|
|
||||||
the image on the canvas might get out of sync. For example, when you change
|
|
||||||
the position of an item within a column or a row, the new position might
|
|
||||||
not be displayed correctly on the canvas.
|
|
||||||
|
|
||||||
To refresh the image on the canvas, press \key R or select the
|
|
||||||
\inlineimage reset.png
|
|
||||||
(\uicontrol {Reset View}) button.
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
110
doc/qtcreator/src/qtquick/qtquick-form-editor.qdoc
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2020 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the Qt Creator documentation.
|
||||||
|
**
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU Free Documentation License Usage
|
||||||
|
** 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. Please review the following information to ensure
|
||||||
|
** the GNU Free Documentation License version 1.3 requirements
|
||||||
|
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\contentspage index.html
|
||||||
|
\page qtquick-form-editor.html
|
||||||
|
\previouspage quick-components.html
|
||||||
|
\nextpage quick-buttons.html
|
||||||
|
|
||||||
|
\title Editing 2D Content
|
||||||
|
|
||||||
|
You design applications in the \uicontrol {Form Editor} by placing items
|
||||||
|
into it.
|
||||||
|
|
||||||
|
\section1 Snapping to Parent and Sibling Items
|
||||||
|
|
||||||
|
When you are working on a design, you can use snapping to align
|
||||||
|
items in the \uicontrol {Form Editor}. Click the \inlineimage snapping.png
|
||||||
|
button to have the items snap to their parent or sibling items. Snapping
|
||||||
|
lines automatically appear to help you position the items.
|
||||||
|
Click the \inlineimage snapping_and_anchoring.png
|
||||||
|
button to anchor the item to the items that you snap to.
|
||||||
|
|
||||||
|
Choose \uicontrol Tools > \uicontrol Options > \uicontrol {Qt Quick} >
|
||||||
|
\uicontrol {\QMLD} to specify settings for snapping. In the
|
||||||
|
\uicontrol {Parent item padding} field, specify the
|
||||||
|
distance in pixels between the parent item and the snapping lines. In the
|
||||||
|
\uicontrol {Sibling item spacing} field, specify the distance in pixels between
|
||||||
|
sibling items and the snapping lines.
|
||||||
|
|
||||||
|
The following image shows the snapping lines (1) when
|
||||||
|
\uicontrol {Parent item padding} is set to 5 pixels.
|
||||||
|
|
||||||
|
\image qmldesigner-snap-margins.png "Snapping lines on canvas"
|
||||||
|
|
||||||
|
\section1 Hiding Item Boundaries
|
||||||
|
|
||||||
|
The \uicontrol {Form Editor} displays the boundaries of items.
|
||||||
|
To hide them, select the \inlineimage boundingrect.png
|
||||||
|
button.
|
||||||
|
|
||||||
|
\section1 Selecting Items
|
||||||
|
|
||||||
|
When you point the mouse to overlapping items, the frontmost item is
|
||||||
|
selected by default. However, items that do not have any content, such as
|
||||||
|
the mouse area, are typically located in front of items that do have
|
||||||
|
content, such as rectangles or border images. To select items with content
|
||||||
|
by default, click the
|
||||||
|
\inlineimage qmldesigner-only-select-items-with-content.png
|
||||||
|
button.
|
||||||
|
|
||||||
|
\section1 Previewing Component Size
|
||||||
|
|
||||||
|
The width and height of the root item in a QML file determine the size of
|
||||||
|
the component. You can reuse components, such as buttons, in different
|
||||||
|
sizes in other QML files and design UIs for use with different device
|
||||||
|
profiles, screen resolution, or screen orientation. The component size
|
||||||
|
might also be zero (0,0) if its final size is determined by property
|
||||||
|
bindings.
|
||||||
|
|
||||||
|
To experiment with different component sizes, enter values in the
|
||||||
|
\uicontrol {Override Width} and \uicontrol {Override Height} fields (1) on
|
||||||
|
the canvas toolbar. The changes are displayed in the \uicontrol {Form Editor}
|
||||||
|
(2) and in the \uicontrol States view (3), but the property
|
||||||
|
values are not changed permanently in the QML file. You can permanently
|
||||||
|
change the property values in the \uicontrol Properties view (4).
|
||||||
|
|
||||||
|
\image qmldesigner-preview-size.png "Canvas width and height"
|
||||||
|
|
||||||
|
\section1 Specifying Canvas Size
|
||||||
|
|
||||||
|
To change the canvas size, select \uicontrol Tools > \uicontrol Options >
|
||||||
|
\uicontrol {Qt Quick} > \uicontrol {\QMLD} and
|
||||||
|
specify the canvas width and height in the \uicontrol Canvas group.
|
||||||
|
|
||||||
|
\section1 Refreshing the Form Editor Contents
|
||||||
|
|
||||||
|
When you open QML files in the Design mode, the items in the file are drawn
|
||||||
|
in the \uicontrol {Form Editor}. When you edit the item properties, the QML
|
||||||
|
file and the contents of the editor might get out of sync. For example, when
|
||||||
|
you change the position of an item within a column or a row, the new
|
||||||
|
position might not be displayed correctly in the \uicontrol {Form Editor}.
|
||||||
|
|
||||||
|
To refresh the contents of the \uicontrol {Form Editor}, press \key R or
|
||||||
|
select the \inlineimage reset.png
|
||||||
|
(\uicontrol {Reset View}) button.
|
||||||
|
|
||||||
|
*/
|
@@ -47,8 +47,7 @@
|
|||||||
\endif
|
\endif
|
||||||
|
|
||||||
To preview any QML file that belongs to the project, right-click the project
|
To preview any QML file that belongs to the project, right-click the project
|
||||||
name in the \uicontrol Project tab in the \uicontrol Navigator, and select
|
name in the \uicontrol Projects view, and select \uicontrol {Preview file}.
|
||||||
\uicontrol {Preview file}.
|
|
||||||
|
|
||||||
To preview the whole UI, select \uicontrol {Show Live Preview}
|
To preview the whole UI, select \uicontrol {Show Live Preview}
|
||||||
when viewing the main QML UI file of the project.
|
when viewing the main QML UI file of the project.
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2019 The Qt Company Ltd.
|
** Copyright (C) 2020 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Creator documentation.
|
** This file is part of the Qt Creator documentation.
|
||||||
@@ -52,17 +52,9 @@
|
|||||||
{here}.
|
{here}.
|
||||||
|
|
||||||
\if defined(qtcreator)
|
\if defined(qtcreator)
|
||||||
\section1 Enabling the Timeline Editor
|
|
||||||
|
|
||||||
The \uicontrol Timeline view is not visible in \QC by default. To enable
|
|
||||||
it, select \uicontrol Tools > \uicontrol Options > \uicontrol {Qt Quick} >
|
|
||||||
\uicontrol {Qt Quick Designer} > \uicontrol {Enable Timeline editor}.
|
|
||||||
Select \uicontrol {Restart Now} to restart \QC with the \uicontrol Timeline
|
|
||||||
view visible.
|
|
||||||
|
|
||||||
To be able to create timelines, you also need the \l {Qt Quick Timeline}
|
To be able to create timelines, you also need the \l {Qt Quick Timeline}
|
||||||
module, which is delivered with Qt 5.14, and later. For more
|
add-on module, which you can install with Qt 5.14, and later. For more
|
||||||
information about adding the module to an older Qt version, see
|
information about adding the module to an older Qt version, see
|
||||||
\l{Adding Qt Quick Timeline Module to Qt Installations}.
|
\l{Adding Qt Quick Timeline Module to Qt Installations}.
|
||||||
\endif
|
\endif
|
||||||
|
|
||||||
@@ -77,9 +69,7 @@
|
|||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
\li In the \uicontrol Navigator, select the item to animate.
|
\li In the \uicontrol Navigator, select the item to animate.
|
||||||
\li Select the \uicontrol Timeline tab to open the \uicontrol Timeline
|
\li In the \uicontrol Timeline view, select the \inlineimage plus.png
|
||||||
view.
|
|
||||||
\li Select the \inlineimage plus.png
|
|
||||||
(\uicontrol {Add Timeline (A)}) button, or press \key {A} to
|
(\uicontrol {Add Timeline (A)}) button, or press \key {A} to
|
||||||
specify settings for the timeline and running the animation
|
specify settings for the timeline and running the animation
|
||||||
in the \uicontrol {Timeline Settings} dialog.
|
in the \uicontrol {Timeline Settings} dialog.
|
||||||
@@ -144,7 +134,7 @@
|
|||||||
\section1 Managing Keyframes
|
\section1 Managing Keyframes
|
||||||
|
|
||||||
To animate components in the \uicontrol Timeline view, move to a frame
|
To animate components in the \uicontrol Timeline view, move to a frame
|
||||||
on the timeline and specify changes in the values of a property. \QDS
|
on the timeline and specify changes in the values of a property. \QC
|
||||||
automatically adds keyframes between two keyframes, and sets their values
|
automatically adds keyframes between two keyframes, and sets their values
|
||||||
evenly to create an appearance of movement or transformation.
|
evenly to create an appearance of movement or transformation.
|
||||||
|
|
||||||
@@ -160,7 +150,8 @@
|
|||||||
\li Select the \uicontrol {To Start (Home)}, \uicontrol {Previous (,)},
|
\li Select the \uicontrol {To Start (Home)}, \uicontrol {Previous (,)},
|
||||||
or \uicontrol {Next (.)} buttons (3), or use the keyboard shortcuts
|
or \uicontrol {Next (.)} buttons (3), or use the keyboard shortcuts
|
||||||
to move to the first, previous, or next frame on the timeline.
|
to move to the first, previous, or next frame on the timeline.
|
||||||
\li Enter the number of a frame in the field (4) to move to that frame.
|
\li Enter the number of a frame in the current keyframe field (4) to
|
||||||
|
move to that frame.
|
||||||
\li Select the \uicontrol Previous and \uicontrol Next buttons next to
|
\li Select the \uicontrol Previous and \uicontrol Next buttons next to
|
||||||
a property name on the timeline (5) to move to the previous or next
|
a property name on the timeline (5) to move to the previous or next
|
||||||
keyframe for that property.
|
keyframe for that property.
|
||||||
@@ -231,13 +222,11 @@
|
|||||||
You can view the animation on the canvas by moving the playhead along the
|
You can view the animation on the canvas by moving the playhead along the
|
||||||
timeline.
|
timeline.
|
||||||
|
|
||||||
\if defined(qtdesignstudio)
|
|
||||||
To preview the animation, select the \uicontrol {Play (Space)}
|
To preview the animation, select the \uicontrol {Play (Space)}
|
||||||
button or press \key Space. To preview the whole UI, select the
|
button or press \key Space. To preview the whole UI, select the
|
||||||
\inlineimage live_preview.png
|
\inlineimage live_preview.png
|
||||||
(\uicontrol {Show Live Preview}) button on the canvas toolbar
|
(\uicontrol {Show Live Preview}) button on the canvas toolbar
|
||||||
or press \key {Alt+P}.
|
or press \key {Alt+P}.
|
||||||
\endif
|
|
||||||
|
|
||||||
\section1 Editing Easing Curves
|
\section1 Editing Easing Curves
|
||||||
|
|
||||||
@@ -247,7 +236,7 @@
|
|||||||
timeline are \e linear, which means that they move from the beginning to
|
timeline are \e linear, which means that they move from the beginning to
|
||||||
the end at a constant speed. You can use the \uicontrol {Easing Curve Editor}
|
the end at a constant speed. You can use the \uicontrol {Easing Curve Editor}
|
||||||
to edit the easing curve between two keyframes. You can also use the more
|
to edit the easing curve between two keyframes. You can also use the more
|
||||||
advanced \uicontrol {Curve Editor (C)} to edit the curves for the whole
|
advanced \uicontrol {Animation Curve Editor} to edit the curves for the whole
|
||||||
animation.
|
animation.
|
||||||
|
|
||||||
\section2 Attaching Easing Curves to Keyframes
|
\section2 Attaching Easing Curves to Keyframes
|
||||||
@@ -306,23 +295,24 @@
|
|||||||
|
|
||||||
\section1 Editing Animation Curves
|
\section1 Editing Animation Curves
|
||||||
|
|
||||||
In the curve editor, you can view and modify the whole animation curve. You
|
In the animation curve editor, you can view and modify the whole animation
|
||||||
|
curve. You
|
||||||
can insert keyframes to the curve and drag them and the point handlers to
|
can insert keyframes to the curve and drag them and the point handlers to
|
||||||
modify the curve. You can modify the appearance of the curve in the style
|
modify the curve. You can modify the appearance of the curve in the style
|
||||||
editor.
|
editor.
|
||||||
|
|
||||||
You can also edit easing curves that you added with the easing curve editor.
|
You can also edit easing curves that you added with the easing curve editor.
|
||||||
|
|
||||||
\image studio-curve-editor.png "Curve Editor"
|
\image studio-curve-editor.png "Animation Curve Editor"
|
||||||
|
|
||||||
To edit animation curves:
|
To edit animation curves:
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
\li In the \uicontrol Timeline view, insert at least one keyframe.
|
\li In the \uicontrol Timeline view, insert at least one keyframe.
|
||||||
\li Select \inlineimage curveGraphIcon.png
|
\li Select \inlineimage curveGraphIcon.png
|
||||||
(\uicontrol {Curve Editor (C)} on the toolbar or press \key C
|
(\uicontrol {Animation Curve Editor}) on the toolbar or press \key C
|
||||||
to open the curve editor.
|
to open the animation curve editor.
|
||||||
\li Right-click in the curve editor, and select
|
\li Right-click in the animation curve editor, and select
|
||||||
\uicontrol {Insert Keyframe} to add a keyframe.
|
\uicontrol {Insert Keyframe} to add a keyframe.
|
||||||
\li Select keyframes to display the easing curves attached to them.
|
\li Select keyframes to display the easing curves attached to them.
|
||||||
To select multiple keyframes, press and hold \key Ctrl.
|
To select multiple keyframes, press and hold \key Ctrl.
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2019 The Qt Company Ltd.
|
** Copyright (C) 2020 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Design Studio documentation.
|
** This file is part of the Qt Design Studio documentation.
|
||||||
@@ -70,6 +70,7 @@
|
|||||||
\list
|
\list
|
||||||
\li \l{Creating Components}
|
\li \l{Creating Components}
|
||||||
\list
|
\list
|
||||||
|
\li \l{Editing 2D Content}
|
||||||
\li \l{Creating Buttons}
|
\li \l{Creating Buttons}
|
||||||
\li \l{Creating Scalable Buttons and Borders}
|
\li \l{Creating Scalable Buttons and Borders}
|
||||||
\endlist
|
\endlist
|
||||||
|
@@ -800,7 +800,10 @@ def qdump__std____1__shared_ptr(d, value):
|
|||||||
|
|
||||||
|
|
||||||
def qdump__std__unique_ptr(d, value):
|
def qdump__std__unique_ptr(d, value):
|
||||||
p = d.extractPointer(value)
|
if value.type.size() == d.ptrSize():
|
||||||
|
p = d.extractPointer(value)
|
||||||
|
else:
|
||||||
|
_, p = value.split("pp"); # For custom deleters.
|
||||||
if p == 0:
|
if p == 0:
|
||||||
d.putValue("(null)")
|
d.putValue("(null)")
|
||||||
d.putNumChild(0)
|
d.putNumChild(0)
|
||||||
|
@@ -34,6 +34,7 @@ enum InformationName
|
|||||||
{
|
{
|
||||||
NoName,
|
NoName,
|
||||||
NoInformationChange = NoName,
|
NoInformationChange = NoName,
|
||||||
|
AllStates,
|
||||||
Size,
|
Size,
|
||||||
BoundingRect,
|
BoundingRect,
|
||||||
Transform,
|
Transform,
|
||||||
|
@@ -1061,6 +1061,7 @@ static QVector<InformationContainer> createInformationVector(const QList<ServerN
|
|||||||
informationVector.append(InformationContainer(instance.instanceId(), PenWidth, instance.penWidth()));
|
informationVector.append(InformationContainer(instance.instanceId(), PenWidth, instance.penWidth()));
|
||||||
informationVector.append(InformationContainer(instance.instanceId(), IsAnchoredByChildren, instance.isAnchoredByChildren()));
|
informationVector.append(InformationContainer(instance.instanceId(), IsAnchoredByChildren, instance.isAnchoredByChildren()));
|
||||||
informationVector.append(InformationContainer(instance.instanceId(), IsAnchoredBySibling, instance.isAnchoredBySibling()));
|
informationVector.append(InformationContainer(instance.instanceId(), IsAnchoredBySibling, instance.isAnchoredBySibling()));
|
||||||
|
informationVector.append(InformationContainer(instance.instanceId(), AllStates, instance.allStates()));
|
||||||
|
|
||||||
informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.fill"), instance.hasAnchor("anchors.fill")));
|
informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.fill"), instance.hasAnchor("anchors.fill")));
|
||||||
informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.centerIn"), instance.hasAnchor("anchors.centerIn")));
|
informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.centerIn"), instance.hasAnchor("anchors.centerIn")));
|
||||||
|
@@ -871,6 +871,11 @@ void ObjectNodeInstance::deactivateState()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList ObjectNodeInstance::allStates() const
|
||||||
|
{
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
void ObjectNodeInstance::populateResetHashes()
|
void ObjectNodeInstance::populateResetHashes()
|
||||||
{
|
{
|
||||||
QmlPrivateGate::registerCustomData(object());
|
QmlPrivateGate::registerCustomData(object());
|
||||||
|
@@ -148,6 +148,7 @@ public:
|
|||||||
|
|
||||||
virtual void activateState();
|
virtual void activateState();
|
||||||
virtual void deactivateState();
|
virtual void deactivateState();
|
||||||
|
virtual QStringList allStates() const;
|
||||||
|
|
||||||
void populateResetHashes();
|
void populateResetHashes();
|
||||||
bool hasValidResetBinding(const PropertyName &propertyName) const;
|
bool hasValidResetBinding(const PropertyName &propertyName) const;
|
||||||
|
@@ -232,6 +232,20 @@ QList<QQuickItem *> QuickItemNodeInstance::allItemsRecursive() const
|
|||||||
return itemList;
|
return itemList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList QuickItemNodeInstance::allStates() const
|
||||||
|
{
|
||||||
|
QStringList list;
|
||||||
|
|
||||||
|
QList<QObject*> stateList = DesignerSupport::statesForItem(quickItem());
|
||||||
|
for (QObject *state : stateList) {
|
||||||
|
QQmlProperty property(state, "name");
|
||||||
|
if (property.isValid())
|
||||||
|
list.append(property.read().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
QRectF QuickItemNodeInstance::contentItemBoundingBox() const
|
QRectF QuickItemNodeInstance::contentItemBoundingBox() const
|
||||||
{
|
{
|
||||||
if (contentItem()) {
|
if (contentItem()) {
|
||||||
@@ -611,8 +625,8 @@ void QuickItemNodeInstance::setPropertyVariant(const PropertyName &name, const Q
|
|||||||
if (ignoredProperties().contains(name))
|
if (ignoredProperties().contains(name))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (name == "state")
|
if (name == "state" && isRootNodeInstance())
|
||||||
return; // states are only set by us
|
return; // states on the root item are only set by us
|
||||||
|
|
||||||
if (name == "height") {
|
if (name == "height") {
|
||||||
m_height = value.toDouble();
|
m_height = value.toDouble();
|
||||||
@@ -649,8 +663,8 @@ void QuickItemNodeInstance::setPropertyBinding(const PropertyName &name, const Q
|
|||||||
if (ignoredProperties().contains(name))
|
if (ignoredProperties().contains(name))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (name == "state")
|
if (name == "state" && isRootNodeInstance())
|
||||||
return; // states are only set by us
|
return; // states on the root item are only set by us
|
||||||
|
|
||||||
if (name.startsWith("anchors.") && isRootNodeInstance())
|
if (name.startsWith("anchors.") && isRootNodeInstance())
|
||||||
return;
|
return;
|
||||||
|
@@ -96,6 +96,7 @@ public:
|
|||||||
void doComponentComplete() override;
|
void doComponentComplete() override;
|
||||||
|
|
||||||
QList<QQuickItem*> allItemsRecursive() const override;
|
QList<QQuickItem*> allItemsRecursive() const override;
|
||||||
|
QStringList allStates() const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
explicit QuickItemNodeInstance(QQuickItem*);
|
explicit QuickItemNodeInstance(QQuickItem*);
|
||||||
|
@@ -199,6 +199,18 @@ Internal::ObjectNodeInstance::Pointer ServerNodeInstance::createInstance(QObject
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString static getErrorString(QQmlEngine *engine, const QString &componentPath)
|
||||||
|
{
|
||||||
|
QQmlComponent component(engine, componentPath);
|
||||||
|
|
||||||
|
QObject *o = component.create(nullptr);
|
||||||
|
delete o;
|
||||||
|
QString s;
|
||||||
|
for (const QQmlError &error : component.errors())
|
||||||
|
s.append(error.toString());
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
ServerNodeInstance ServerNodeInstance::create(NodeInstanceServer *nodeInstanceServer,
|
ServerNodeInstance ServerNodeInstance::create(NodeInstanceServer *nodeInstanceServer,
|
||||||
const InstanceContainer &instanceContainer,
|
const InstanceContainer &instanceContainer,
|
||||||
ComponentWrap componentWrap)
|
ComponentWrap componentWrap)
|
||||||
@@ -215,8 +227,11 @@ ServerNodeInstance ServerNodeInstance::create(NodeInstanceServer *nodeInstanceSe
|
|||||||
nodeInstanceServer->sendDebugOutput(DebugOutputCommand::ErrorType, QLatin1String("Custom parser object could not be created."), instanceContainer.instanceId());
|
nodeInstanceServer->sendDebugOutput(DebugOutputCommand::ErrorType, QLatin1String("Custom parser object could not be created."), instanceContainer.instanceId());
|
||||||
} else if (!instanceContainer.componentPath().isEmpty()) {
|
} else if (!instanceContainer.componentPath().isEmpty()) {
|
||||||
object = Internal::ObjectNodeInstance::createComponent(instanceContainer.componentPath(), nodeInstanceServer->context());
|
object = Internal::ObjectNodeInstance::createComponent(instanceContainer.componentPath(), nodeInstanceServer->context());
|
||||||
if (object == nullptr)
|
if (object == nullptr) {
|
||||||
nodeInstanceServer->sendDebugOutput(DebugOutputCommand::ErrorType, QString("Component with path %1 could not be created.").arg(instanceContainer.componentPath()), instanceContainer.instanceId());
|
const QString errors = getErrorString(nodeInstanceServer->engine(), instanceContainer.componentPath());
|
||||||
|
const QString message = QString("Component with path %1 could not be created.\n\n").arg(instanceContainer.componentPath());
|
||||||
|
nodeInstanceServer->sendDebugOutput(DebugOutputCommand::ErrorType, message + errors, instanceContainer.instanceId());
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
object = Internal::ObjectNodeInstance::createPrimitive(QString::fromUtf8(instanceContainer.type()), instanceContainer.majorNumber(), instanceContainer.minorNumber(), nodeInstanceServer->context());
|
object = Internal::ObjectNodeInstance::createPrimitive(QString::fromUtf8(instanceContainer.type()), instanceContainer.majorNumber(), instanceContainer.minorNumber(), nodeInstanceServer->context());
|
||||||
if (object == nullptr)
|
if (object == nullptr)
|
||||||
@@ -646,6 +661,14 @@ QList<ServerNodeInstance> ServerNodeInstance::stateInstances() const
|
|||||||
return m_nodeInstance->stateInstances();
|
return m_nodeInstance->stateInstances();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList ServerNodeInstance::allStates() const
|
||||||
|
{
|
||||||
|
if (isValid())
|
||||||
|
return m_nodeInstance->allStates();
|
||||||
|
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
Internal::ObjectNodeInstance::Pointer ServerNodeInstance::internalInstance() const
|
Internal::ObjectNodeInstance::Pointer ServerNodeInstance::internalInstance() const
|
||||||
{
|
{
|
||||||
return m_nodeInstance;
|
return m_nodeInstance;
|
||||||
|
@@ -164,6 +164,7 @@ public:
|
|||||||
QSharedPointer<Internal::ObjectNodeInstance> internalInstance() const;
|
QSharedPointer<Internal::ObjectNodeInstance> internalInstance() const;
|
||||||
|
|
||||||
QList<ServerNodeInstance> stateInstances() const;
|
QList<ServerNodeInstance> stateInstances() const;
|
||||||
|
QStringList allStates() const;
|
||||||
|
|
||||||
static bool isSubclassOf(QObject *object, const QByteArray &superTypeName);
|
static bool isSubclassOf(QObject *object, const QByteArray &superTypeName);
|
||||||
|
|
||||||
|
@@ -52,5 +52,8 @@ Column {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PaddingSection {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -83,4 +83,7 @@ Column {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PaddingSection {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -115,4 +115,7 @@ Column {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PaddingSection {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -67,4 +67,7 @@ Column {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PaddingSection {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -805,6 +805,7 @@ namespace ADS
|
|||||||
d->m_workspaces.insert(1, clone);
|
d->m_workspaces.insert(1, clone);
|
||||||
d->m_workspaceDateTimes
|
d->m_workspaceDateTimes
|
||||||
.insert(clone, workspaceNameToFileName(clone).toFileInfo().lastModified());
|
.insert(clone, workspaceNameToFileName(clone).toFileInfo().lastModified());
|
||||||
|
emit workspaceListChanged();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@@ -107,6 +107,7 @@ void ToolTip::show(const QPoint &pos,
|
|||||||
layout->setContentsMargins(0, 0, 0, 0);
|
layout->setContentsMargins(0, 0, 0, 0);
|
||||||
tooltipWidget->setLayout(layout);
|
tooltipWidget->setLayout(layout);
|
||||||
auto label = new QLabel;
|
auto label = new QLabel;
|
||||||
|
label->setObjectName("qcWidgetTipTopLabel");
|
||||||
label->setTextFormat(format);
|
label->setTextFormat(format);
|
||||||
label->setText(content);
|
label->setText(content);
|
||||||
layout->addWidget(label);
|
layout->addWidget(label);
|
||||||
|
@@ -170,7 +170,7 @@ static FilePath jsonObjectFilename(const QJsonObject &object)
|
|||||||
const QString workingDir = QDir::fromNativeSeparators(object["directory"].toString());
|
const QString workingDir = QDir::fromNativeSeparators(object["directory"].toString());
|
||||||
FilePath fileName = FilePath::fromString(QDir::fromNativeSeparators(object["file"].toString()));
|
FilePath fileName = FilePath::fromString(QDir::fromNativeSeparators(object["file"].toString()));
|
||||||
if (fileName.toFileInfo().isRelative())
|
if (fileName.toFileInfo().isRelative())
|
||||||
fileName = FilePath::fromString(workingDir + "/" + fileName.toString()).canonicalPath();
|
fileName = FilePath::fromString(QDir::cleanPath(workingDir + "/" + fileName.toString()));
|
||||||
return fileName;
|
return fileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -354,8 +354,12 @@ bool isFlowTransitionItem(const SelectionContext &context)
|
|||||||
|
|
||||||
bool isFlowActionItemItem(const SelectionContext &context)
|
bool isFlowActionItemItem(const SelectionContext &context)
|
||||||
{
|
{
|
||||||
|
const ModelNode selectedNode = context.currentSingleSelectedNode();
|
||||||
|
|
||||||
return context.singleNodeIsSelected()
|
return context.singleNodeIsSelected()
|
||||||
&& QmlFlowActionAreaNode::isValidQmlFlowActionAreaNode(context.currentSingleSelectedNode());
|
&& (QmlFlowActionAreaNode::isValidQmlFlowActionAreaNode(selectedNode)
|
||||||
|
|| QmlVisualNode::isFlowDecision(selectedNode)
|
||||||
|
|| QmlVisualNode::isFlowWildcard(selectedNode));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isFlowItemOrTransition(const SelectionContext &context)
|
bool isFlowItemOrTransition(const SelectionContext &context)
|
||||||
|
@@ -1052,16 +1052,17 @@ void addTransition(const SelectionContext &selectionContext)
|
|||||||
{
|
{
|
||||||
if (selectionContext.view()) {
|
if (selectionContext.view()) {
|
||||||
AbstractView *view = selectionContext.view();
|
AbstractView *view = selectionContext.view();
|
||||||
QmlFlowItemNode targetItem = selectionContext.targetNode();
|
QmlFlowTargetNode targetNode = selectionContext.targetNode();
|
||||||
QmlFlowActionAreaNode actionArea = selectionContext.currentSingleSelectedNode();
|
QmlFlowTargetNode sourceNode = selectionContext.currentSingleSelectedNode();
|
||||||
|
|
||||||
|
QTC_ASSERT(targetNode.isValid(), return);
|
||||||
|
QTC_ASSERT(sourceNode.isValid(), return);
|
||||||
|
|
||||||
QTC_ASSERT(targetItem.isValid(), return);
|
|
||||||
QTC_ASSERT(actionArea.isValid(), return);
|
|
||||||
|
|
||||||
|
|
||||||
view->executeInTransaction("DesignerActionManager:addTransition",
|
view->executeInTransaction("DesignerActionManager:addTransition",
|
||||||
[view, targetItem, &actionArea](){
|
[view, targetNode, &sourceNode](){
|
||||||
actionArea.assignTargetFlowItem(targetItem);
|
sourceNode.assignTargetItem(targetNode);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -545,10 +545,13 @@ void FormEditorView::auxiliaryDataChanged(const ModelNode &node, const PropertyN
|
|||||||
if (isInvisible)
|
if (isInvisible)
|
||||||
newNode.deselectNode();
|
newNode.deselectNode();
|
||||||
}
|
}
|
||||||
} else if (item.isFlowTransition() || item.isFlowItem() || item.isFlowActionArea()) {
|
} else if (item.isFlowTransition() || item.isFlowActionArea()
|
||||||
|
|| item.isFlowDecision() || item.isFlowWildcard()) {
|
||||||
FormEditorItem *editorItem = m_scene->itemForQmlItemNode(item);
|
FormEditorItem *editorItem = m_scene->itemForQmlItemNode(item);
|
||||||
if (editorItem)
|
if (editorItem)
|
||||||
editorItem->update();
|
editorItem->update();
|
||||||
|
} else if (item.isFlowView() || item.isFlowItem()) {
|
||||||
|
scene()->update();
|
||||||
} else if (name == "annotation" || name == "customId") {
|
} else if (name == "annotation" || name == "customId") {
|
||||||
if (FormEditorItem *editorItem = scene()->itemForQmlItemNode(item)) {
|
if (FormEditorItem *editorItem = scene()->itemForQmlItemNode(item)) {
|
||||||
editorItem->update();
|
editorItem->update();
|
||||||
|
@@ -347,6 +347,15 @@ void PropertyEditorContextObject::setStateName(const QString &newStateName)
|
|||||||
emit stateNameChanged();
|
emit stateNameChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PropertyEditorContextObject::setAllStateNames(const QStringList &allStates)
|
||||||
|
{
|
||||||
|
if (allStates == m_allStateNames)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_allStateNames = allStates;
|
||||||
|
emit allStateNamesChanged();
|
||||||
|
}
|
||||||
|
|
||||||
void PropertyEditorContextObject::setIsBaseState(bool newIsBaseState)
|
void PropertyEditorContextObject::setIsBaseState(bool newIsBaseState)
|
||||||
{
|
{
|
||||||
if (newIsBaseState == m_isBaseState)
|
if (newIsBaseState == m_isBaseState)
|
||||||
|
@@ -46,6 +46,7 @@ class PropertyEditorContextObject : public QObject
|
|||||||
|
|
||||||
Q_PROPERTY(QString specificQmlData READ specificQmlData WRITE setSpecificQmlData NOTIFY specificQmlDataChanged)
|
Q_PROPERTY(QString specificQmlData READ specificQmlData WRITE setSpecificQmlData NOTIFY specificQmlDataChanged)
|
||||||
Q_PROPERTY(QString stateName READ stateName WRITE setStateName NOTIFY stateNameChanged)
|
Q_PROPERTY(QString stateName READ stateName WRITE setStateName NOTIFY stateNameChanged)
|
||||||
|
Q_PROPERTY(QStringList allStateNames READ allStateNames WRITE setAllStateNames NOTIFY allStateNamesChanged)
|
||||||
|
|
||||||
Q_PROPERTY(bool isBaseState READ isBaseState WRITE setIsBaseState NOTIFY isBaseStateChanged)
|
Q_PROPERTY(bool isBaseState READ isBaseState WRITE setIsBaseState NOTIFY isBaseStateChanged)
|
||||||
Q_PROPERTY(bool selectionChanged READ selectionChanged WRITE setSelectionChanged NOTIFY selectionChangedChanged)
|
Q_PROPERTY(bool selectionChanged READ selectionChanged WRITE setSelectionChanged NOTIFY selectionChangedChanged)
|
||||||
@@ -70,6 +71,7 @@ public:
|
|||||||
QUrl specificsUrl() const {return m_specificsUrl; }
|
QUrl specificsUrl() const {return m_specificsUrl; }
|
||||||
QString specificQmlData() const {return m_specificQmlData; }
|
QString specificQmlData() const {return m_specificQmlData; }
|
||||||
QString stateName() const {return m_stateName; }
|
QString stateName() const {return m_stateName; }
|
||||||
|
QStringList allStateNames() const { return m_allStateNames; }
|
||||||
|
|
||||||
bool isBaseState() const { return m_isBaseState; }
|
bool isBaseState() const { return m_isBaseState; }
|
||||||
bool selectionChanged() const { return m_selectionChanged; }
|
bool selectionChanged() const { return m_selectionChanged; }
|
||||||
@@ -114,6 +116,7 @@ signals:
|
|||||||
void specificsUrlChanged();
|
void specificsUrlChanged();
|
||||||
void specificQmlDataChanged();
|
void specificQmlDataChanged();
|
||||||
void stateNameChanged();
|
void stateNameChanged();
|
||||||
|
void allStateNamesChanged();
|
||||||
void isBaseStateChanged();
|
void isBaseStateChanged();
|
||||||
void selectionChangedChanged();
|
void selectionChangedChanged();
|
||||||
void backendValuesChanged();
|
void backendValuesChanged();
|
||||||
@@ -134,6 +137,8 @@ public slots:
|
|||||||
|
|
||||||
void setStateName(const QString &newStateName);
|
void setStateName(const QString &newStateName);
|
||||||
|
|
||||||
|
void setAllStateNames(const QStringList &allStates);
|
||||||
|
|
||||||
void setIsBaseState(bool newIsBaseState);
|
void setIsBaseState(bool newIsBaseState);
|
||||||
|
|
||||||
void setSelectionChanged(bool newSelectionChanged);
|
void setSelectionChanged(bool newSelectionChanged);
|
||||||
@@ -151,6 +156,7 @@ private:
|
|||||||
|
|
||||||
QString m_specificQmlData;
|
QString m_specificQmlData;
|
||||||
QString m_stateName;
|
QString m_stateName;
|
||||||
|
QStringList m_allStateNames;
|
||||||
|
|
||||||
bool m_isBaseState;
|
bool m_isBaseState;
|
||||||
bool m_selectionChanged;
|
bool m_selectionChanged;
|
||||||
|
@@ -394,8 +394,13 @@ void PropertyEditorQmlBackend::setup(const QmlObjectNode &qmlObjectNode, const Q
|
|||||||
contextObject()->setStateName(stateName);
|
contextObject()->setStateName(stateName);
|
||||||
if (!qmlObjectNode.isValid())
|
if (!qmlObjectNode.isValid())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
context()->setContextProperty(QLatin1String("propertyCount"), QVariant(qmlObjectNode.modelNode().properties().count()));
|
context()->setContextProperty(QLatin1String("propertyCount"), QVariant(qmlObjectNode.modelNode().properties().count()));
|
||||||
|
|
||||||
|
QStringList stateNames = qmlObjectNode.allStateNames();
|
||||||
|
stateNames.prepend("base state");
|
||||||
|
contextObject()->setAllStateNames(stateNames);
|
||||||
|
|
||||||
contextObject()->setIsBaseState(qmlObjectNode.isInBaseState());
|
contextObject()->setIsBaseState(qmlObjectNode.isInBaseState());
|
||||||
|
|
||||||
contextObject()->setHasAliasExport(qmlObjectNode.isAliasExported());
|
contextObject()->setHasAliasExport(qmlObjectNode.isAliasExported());
|
||||||
|
@@ -212,6 +212,10 @@ void PropertyEditorView::changeValue(const QString &name)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool forceReset = false;
|
||||||
|
if (name == "state" && castedValue.toString() == "base state")
|
||||||
|
castedValue = "";
|
||||||
|
|
||||||
if (castedValue.type() == QVariant::Color) {
|
if (castedValue.type() == QVariant::Color) {
|
||||||
QColor color = castedValue.value<QColor>();
|
QColor color = castedValue.value<QColor>();
|
||||||
QColor newColor = QColor(color.name());
|
QColor newColor = QColor(color.name());
|
||||||
|
@@ -134,13 +134,17 @@ TimelineWidget::TimelineWidget(TimelineView *view)
|
|||||||
sizePolicy1.setHeightForWidth(m_graphicsView->sizePolicy().hasHeightForWidth());
|
sizePolicy1.setHeightForWidth(m_graphicsView->sizePolicy().hasHeightForWidth());
|
||||||
|
|
||||||
m_rulerView->setObjectName("RulerView");
|
m_rulerView->setObjectName("RulerView");
|
||||||
m_rulerView->setScene(graphicsScene());
|
|
||||||
m_rulerView->setFixedHeight(TimelineConstants::rulerHeight);
|
m_rulerView->setFixedHeight(TimelineConstants::rulerHeight);
|
||||||
m_rulerView->setAlignment(Qt::AlignLeft | Qt::AlignTop);
|
m_rulerView->setAlignment(Qt::AlignLeft | Qt::AlignTop);
|
||||||
m_rulerView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
|
||||||
m_rulerView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
|
||||||
m_rulerView->viewport()->installEventFilter(new Eventfilter(this));
|
m_rulerView->viewport()->installEventFilter(new Eventfilter(this));
|
||||||
m_rulerView->viewport()->setFocusPolicy(Qt::NoFocus);
|
m_rulerView->viewport()->setFocusPolicy(Qt::NoFocus);
|
||||||
|
m_rulerView->setStyleSheet(css);
|
||||||
|
m_rulerView->setFrameShape(QFrame::NoFrame);
|
||||||
|
m_rulerView->setFrameShadow(QFrame::Plain);
|
||||||
|
m_rulerView->setLineWidth(0);
|
||||||
|
m_rulerView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||||
|
m_rulerView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||||
|
m_rulerView->setScene(graphicsScene());
|
||||||
|
|
||||||
m_graphicsView->setStyleSheet(css);
|
m_graphicsView->setStyleSheet(css);
|
||||||
m_graphicsView->setObjectName("SceneView");
|
m_graphicsView->setObjectName("SceneView");
|
||||||
|
@@ -50,6 +50,11 @@ public:
|
|||||||
bool isList() const;
|
bool isList() const;
|
||||||
QList<ModelNode> resolveToModelNodeList() const;
|
QList<ModelNode> resolveToModelNodeList() const;
|
||||||
void addModelNodeToArray(const ModelNode &modelNode);
|
void addModelNodeToArray(const ModelNode &modelNode);
|
||||||
|
void removeModelNodeFromArray(const ModelNode &modelNode);
|
||||||
|
|
||||||
|
static QList<BindingProperty> findAllReferencesTo(const ModelNode &modelNode);
|
||||||
|
static void deleteAllReferencesTo(const ModelNode &modelNode);
|
||||||
|
|
||||||
|
|
||||||
bool isAliasExport() const;
|
bool isAliasExport() const;
|
||||||
|
|
||||||
|
@@ -90,6 +90,7 @@ public:
|
|||||||
bool hasAnchors() const;
|
bool hasAnchors() const;
|
||||||
QString error() const;
|
QString error() const;
|
||||||
bool hasError() const;
|
bool hasError() const;
|
||||||
|
QStringList allStateNames() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void setProperty(const PropertyName &name, const QVariant &value);
|
void setProperty(const PropertyName &name, const QVariant &value);
|
||||||
@@ -117,6 +118,7 @@ protected:
|
|||||||
InformationName setInformationAnchor(const PropertyName &sourceAnchorLine, const PropertyName &targetAnchorLine, qint32 targetInstanceId);
|
InformationName setInformationAnchor(const PropertyName &sourceAnchorLine, const PropertyName &targetAnchorLine, qint32 targetInstanceId);
|
||||||
InformationName setInformationInstanceTypeForProperty(const PropertyName &property, const TypeName &type);
|
InformationName setInformationInstanceTypeForProperty(const PropertyName &property, const TypeName &type);
|
||||||
InformationName setInformationHasBindingForProperty(const PropertyName &property, bool hasProperty);
|
InformationName setInformationHasBindingForProperty(const PropertyName &property, bool hasProperty);
|
||||||
|
InformationName setAllStates(const QStringList &states);
|
||||||
|
|
||||||
void setParentId(qint32 instanceId);
|
void setParentId(qint32 instanceId);
|
||||||
void setRenderPixmap(const QImage &image);
|
void setRenderPixmap(const QImage &image);
|
||||||
|
@@ -132,6 +132,21 @@ public:
|
|||||||
class QmlFlowItemNode;
|
class QmlFlowItemNode;
|
||||||
class QmlFlowViewNode;
|
class QmlFlowViewNode;
|
||||||
|
|
||||||
|
class QMLDESIGNERCORE_EXPORT QmlFlowTargetNode : public QmlItemNode
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
QmlFlowTargetNode(const ModelNode &modelNode) : QmlItemNode(modelNode) {}
|
||||||
|
bool isValid() const override;
|
||||||
|
|
||||||
|
void assignTargetItem(const QmlFlowTargetNode &node);
|
||||||
|
void destroyTargets();
|
||||||
|
ModelNode targetTransition() const;
|
||||||
|
QmlFlowViewNode flowView() const;
|
||||||
|
ModelNode findSourceForDecisionNode() const;
|
||||||
|
static bool isFlowEditorTarget(const ModelNode &modelNode);
|
||||||
|
void removeTransitions();
|
||||||
|
};
|
||||||
|
|
||||||
class QMLDESIGNERCORE_EXPORT QmlFlowActionAreaNode : public QmlItemNode
|
class QMLDESIGNERCORE_EXPORT QmlFlowActionAreaNode : public QmlItemNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -139,7 +154,7 @@ public:
|
|||||||
bool isValid() const override;
|
bool isValid() const override;
|
||||||
static bool isValidQmlFlowActionAreaNode(const ModelNode &modelNode);
|
static bool isValidQmlFlowActionAreaNode(const ModelNode &modelNode);
|
||||||
ModelNode targetTransition() const;
|
ModelNode targetTransition() const;
|
||||||
void assignTargetFlowItem(const QmlFlowItemNode &flowItem);
|
void assignTargetFlowItem(const QmlFlowTargetNode &flowItem);
|
||||||
QmlFlowItemNode flowItemParent() const;
|
QmlFlowItemNode flowItemParent() const;
|
||||||
void destroyTarget();
|
void destroyTarget();
|
||||||
ModelNode decisionNodeForTransition(const ModelNode &transition) const;
|
ModelNode decisionNodeForTransition(const ModelNode &transition) const;
|
||||||
@@ -162,9 +177,13 @@ public:
|
|||||||
bool isValid() const override;
|
bool isValid() const override;
|
||||||
static bool isValidQmlFlowViewNode(const ModelNode &modelNode);
|
static bool isValidQmlFlowViewNode(const ModelNode &modelNode);
|
||||||
QList<QmlFlowItemNode> flowItems() const;
|
QList<QmlFlowItemNode> flowItems() const;
|
||||||
ModelNode addTransition(const QmlFlowItemNode &from, const QmlFlowItemNode &to);
|
ModelNode addTransition(const QmlFlowTargetNode &from, const QmlFlowTargetNode &to);
|
||||||
const QList<ModelNode> transitions() const;
|
const QList<ModelNode> transitions() const;
|
||||||
const QList<ModelNode> wildcards() const;
|
const QList<ModelNode> wildcards() const;
|
||||||
|
const QList<ModelNode> decicions() const;
|
||||||
|
QList<ModelNode> transitionsForTarget(const ModelNode &modelNode);
|
||||||
|
void removeDanglingTransitions();
|
||||||
|
void removeAllTransitions();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -120,6 +120,8 @@ public:
|
|||||||
static QString generateTranslatableText(const QString& text);
|
static QString generateTranslatableText(const QString& text);
|
||||||
QString simplifiedTypeName() const;
|
QString simplifiedTypeName() const;
|
||||||
|
|
||||||
|
QStringList allStateNames() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
NodeInstance nodeInstance() const;
|
NodeInstance nodeInstance() const;
|
||||||
QmlObjectNode nodeForInstance(const NodeInstance &instance) const;
|
QmlObjectNode nodeForInstance(const NodeInstance &instance) const;
|
||||||
|
@@ -76,6 +76,7 @@ public:
|
|||||||
QString errorMessage;
|
QString errorMessage;
|
||||||
|
|
||||||
QHash<PropertyName, QPair<PropertyName, qint32> > anchors;
|
QHash<PropertyName, QPair<PropertyName, qint32> > anchors;
|
||||||
|
QStringList allStates;
|
||||||
};
|
};
|
||||||
|
|
||||||
NodeInstance::NodeInstance() = default;
|
NodeInstance::NodeInstance() = default;
|
||||||
@@ -169,6 +170,10 @@ bool NodeInstance::hasError() const
|
|||||||
return !d->errorMessage.isEmpty();
|
return !d->errorMessage.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList NodeInstance::allStateNames() const
|
||||||
|
{
|
||||||
|
return d->allStates;
|
||||||
|
}
|
||||||
|
|
||||||
bool NodeInstance::isValid() const
|
bool NodeInstance::isValid() const
|
||||||
{
|
{
|
||||||
@@ -592,6 +597,16 @@ InformationName NodeInstance::setInformationHasBindingForProperty(const Property
|
|||||||
return NoInformationChange;
|
return NoInformationChange;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
InformationName NodeInstance::setAllStates(const QStringList &states)
|
||||||
|
{
|
||||||
|
if (d->allStates != states) {
|
||||||
|
d->allStates = states;
|
||||||
|
return AllStates;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NoInformationChange;
|
||||||
|
}
|
||||||
|
|
||||||
InformationName NodeInstance::setInformation(InformationName name, const QVariant &information, const QVariant &secondInformation, const QVariant &thirdInformation)
|
InformationName NodeInstance::setInformation(InformationName name, const QVariant &information, const QVariant &secondInformation, const QVariant &thirdInformation)
|
||||||
{
|
{
|
||||||
switch (name) {
|
switch (name) {
|
||||||
@@ -614,6 +629,7 @@ InformationName NodeInstance::setInformation(InformationName name, const QVarian
|
|||||||
case Anchor: return setInformationAnchor(information.toByteArray(), secondInformation.toByteArray(), thirdInformation.value<qint32>());
|
case Anchor: return setInformationAnchor(information.toByteArray(), secondInformation.toByteArray(), thirdInformation.value<qint32>());
|
||||||
case InstanceTypeForProperty: return setInformationInstanceTypeForProperty(information.toByteArray(), secondInformation.toByteArray());
|
case InstanceTypeForProperty: return setInformationInstanceTypeForProperty(information.toByteArray(), secondInformation.toByteArray());
|
||||||
case HasBindingForProperty: return setInformationHasBindingForProperty(information.toByteArray(), secondInformation.toBool());
|
case HasBindingForProperty: return setInformationHasBindingForProperty(information.toByteArray(), secondInformation.toBool());
|
||||||
|
case AllStates: return setAllStates(information.toStringList());
|
||||||
case NoName:
|
case NoName:
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
@@ -210,10 +210,7 @@ void BindingProperty::addModelNodeToArray(const ModelNode &modelNode)
|
|||||||
QString string = expression();
|
QString string = expression();
|
||||||
string.chop(1);
|
string.chop(1);
|
||||||
string.remove(0, 1);
|
string.remove(0, 1);
|
||||||
QStringList simplifiedList = commaSeparatedSimplifiedStringList(string);
|
simplifiedList = commaSeparatedSimplifiedStringList(string);
|
||||||
ModelNode node = modelNode;
|
|
||||||
simplifiedList.append(node.validId());
|
|
||||||
setExpression('[' + simplifiedList.join(',') + ']');
|
|
||||||
} else {
|
} else {
|
||||||
ModelNode currentNode = resolveToModelNode();
|
ModelNode currentNode = resolveToModelNode();
|
||||||
if (currentNode.isValid())
|
if (currentNode.isValid())
|
||||||
@@ -231,6 +228,55 @@ void BindingProperty::addModelNodeToArray(const ModelNode &modelNode)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BindingProperty::removeModelNodeFromArray(const ModelNode &modelNode)
|
||||||
|
{
|
||||||
|
if (!isValid())
|
||||||
|
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
|
||||||
|
|
||||||
|
if (!isBindingProperty())
|
||||||
|
throw InvalidArgumentException(__LINE__, __FUNCTION__, __FILE__, name());
|
||||||
|
|
||||||
|
if (isList() && modelNode.hasId()) {
|
||||||
|
QString string = expression();
|
||||||
|
string.chop(1);
|
||||||
|
string.remove(0, 1);
|
||||||
|
QStringList simplifiedList = commaSeparatedSimplifiedStringList(string);
|
||||||
|
if (simplifiedList.contains(modelNode.id())) {
|
||||||
|
simplifiedList.removeAll(modelNode.id());
|
||||||
|
if (simplifiedList.isEmpty())
|
||||||
|
parentModelNode().removeProperty(name());
|
||||||
|
else
|
||||||
|
setExpression('[' + simplifiedList.join(',') + ']');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<BindingProperty> BindingProperty::findAllReferencesTo(const ModelNode &modelNode)
|
||||||
|
{
|
||||||
|
if (!modelNode.isValid())
|
||||||
|
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
|
||||||
|
|
||||||
|
QList<BindingProperty> list;
|
||||||
|
for (const ModelNode &bindingNode : modelNode.view()->allModelNodes()) {
|
||||||
|
for (const BindingProperty &bindingProperty : bindingNode.bindingProperties())
|
||||||
|
if (bindingProperty.resolveToModelNode() == modelNode)
|
||||||
|
list.append(bindingProperty);
|
||||||
|
else if (bindingProperty.resolveToModelNodeList().contains(modelNode))
|
||||||
|
list.append(bindingProperty);
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BindingProperty::deleteAllReferencesTo(const ModelNode &modelNode)
|
||||||
|
{
|
||||||
|
for (BindingProperty &bindingProperty : findAllReferencesTo(modelNode)) {
|
||||||
|
if (bindingProperty.isList())
|
||||||
|
bindingProperty.removeModelNodeFromArray(modelNode);
|
||||||
|
else
|
||||||
|
bindingProperty.parentModelNode().removeProperty(bindingProperty.name());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool BindingProperty::isAliasExport() const
|
bool BindingProperty::isAliasExport() const
|
||||||
{
|
{
|
||||||
if (!isValid())
|
if (!isValid())
|
||||||
|
@@ -577,7 +577,7 @@ ModelNode QmlFlowActionAreaNode::targetTransition() const
|
|||||||
return modelNode().bindingProperty("target").resolveToModelNode();
|
return modelNode().bindingProperty("target").resolveToModelNode();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmlFlowActionAreaNode::assignTargetFlowItem(const QmlFlowItemNode &flowItem)
|
void QmlFlowActionAreaNode::assignTargetFlowItem(const QmlFlowTargetNode &flowItem)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(isValid(), return);
|
QTC_ASSERT(isValid(), return);
|
||||||
QTC_ASSERT(flowItem.isValid(), return);
|
QTC_ASSERT(flowItem.isValid(), return);
|
||||||
@@ -592,7 +592,8 @@ void QmlFlowActionAreaNode::assignTargetFlowItem(const QmlFlowItemNode &flowItem
|
|||||||
|
|
||||||
destroyTarget();
|
destroyTarget();
|
||||||
|
|
||||||
ModelNode transition = flowView.addTransition(flowParent, flowItem);
|
ModelNode transition = flowView.addTransition(flowParent.modelNode(),
|
||||||
|
flowItem.modelNode());
|
||||||
|
|
||||||
modelNode().bindingProperty("target").setExpression(transition.validId());
|
modelNode().bindingProperty("target").setExpression(transition.validId());
|
||||||
}
|
}
|
||||||
@@ -625,6 +626,14 @@ ModelNode QmlFlowActionAreaNode::decisionNodeForTransition(const ModelNode &tran
|
|||||||
&& finalTarget.bindingProperty("targets").resolveToModelNodeList().contains(transition))
|
&& finalTarget.bindingProperty("targets").resolveToModelNodeList().contains(transition))
|
||||||
return finalTarget;
|
return finalTarget;
|
||||||
}
|
}
|
||||||
|
QmlFlowViewNode flowView(view()->rootModelNode());
|
||||||
|
if (flowView.isValid()) {
|
||||||
|
for (const ModelNode target : flowView.decicions()) {
|
||||||
|
if (target.hasBindingProperty("targets")
|
||||||
|
&& target.bindingProperty("targets").resolveToModelNodeList().contains(transition))
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
@@ -645,22 +654,25 @@ QList<QmlFlowItemNode> QmlFlowViewNode::flowItems() const
|
|||||||
{
|
{
|
||||||
QList<QmlFlowItemNode> list;
|
QList<QmlFlowItemNode> list;
|
||||||
for (const ModelNode &node : allDirectSubModelNodes())
|
for (const ModelNode &node : allDirectSubModelNodes())
|
||||||
if (QmlFlowItemNode::isValidQmlFlowItemNode(node))
|
if (QmlFlowItemNode::isValidQmlFlowItemNode(node)
|
||||||
|
|| QmlVisualNode::isFlowDecision(node)
|
||||||
|
|| QmlVisualNode::isFlowWildcard(node))
|
||||||
list.append(node);
|
list.append(node);
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
ModelNode QmlFlowViewNode::addTransition(const QmlFlowItemNode &from, const QmlFlowItemNode &to)
|
ModelNode QmlFlowViewNode::addTransition(const QmlFlowTargetNode &from, const QmlFlowTargetNode &to)
|
||||||
{
|
{
|
||||||
ModelNode transition = from.view()->createModelNode("FlowView.FlowTransition", 1, 0);
|
ModelNode transition = view()->createModelNode("FlowView.FlowTransition", 1, 0);
|
||||||
|
|
||||||
from.flowView().modelNode().nodeListProperty("flowTransitions").reparentHere(transition);
|
nodeListProperty("flowTransitions").reparentHere(transition);
|
||||||
|
|
||||||
QmlFlowItemNode f = from;
|
QmlFlowTargetNode f = from;
|
||||||
QmlFlowItemNode t = to;
|
QmlFlowTargetNode t = to;
|
||||||
|
|
||||||
transition.bindingProperty("from").setExpression(f.validId());
|
if (f.isValid())
|
||||||
|
transition.bindingProperty("from").setExpression(f.validId());
|
||||||
transition.bindingProperty("to").setExpression(t.validId());
|
transition.bindingProperty("to").setExpression(t.validId());
|
||||||
|
|
||||||
return transition;
|
return transition;
|
||||||
@@ -684,4 +696,138 @@ const QList<ModelNode> QmlFlowViewNode::wildcards() const
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const QList<ModelNode> QmlFlowViewNode::decicions() const
|
||||||
|
{
|
||||||
|
if (modelNode().nodeListProperty("flowDecisions").isValid())
|
||||||
|
return modelNode().nodeListProperty("flowDecisions").toModelNodeList();
|
||||||
|
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<ModelNode> QmlFlowViewNode::transitionsForTarget(const ModelNode &modelNode)
|
||||||
|
{
|
||||||
|
QList<ModelNode> list;
|
||||||
|
for (const ModelNode &transition : transitions()) {
|
||||||
|
if (transition.hasBindingProperty("to")
|
||||||
|
&& transition.bindingProperty("to").resolveToModelNode() == modelNode)
|
||||||
|
list.append(transition);
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QmlFlowViewNode::removeDanglingTransitions()
|
||||||
|
{
|
||||||
|
for (const ModelNode &transition : transitions()) {
|
||||||
|
if (!transition.hasBindingProperty("to"))
|
||||||
|
QmlObjectNode(transition).destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QmlFlowTargetNode::isValid() const
|
||||||
|
{
|
||||||
|
return isFlowEditorTarget(modelNode());
|
||||||
|
}
|
||||||
|
|
||||||
|
void QmlFlowTargetNode::assignTargetItem(const QmlFlowTargetNode &node)
|
||||||
|
{
|
||||||
|
if (QmlFlowActionAreaNode::isValidQmlFlowActionAreaNode(modelNode())) {
|
||||||
|
QmlFlowActionAreaNode(modelNode()).assignTargetFlowItem(node);
|
||||||
|
} else if (isFlowWildcard()) {
|
||||||
|
destroyTargets();
|
||||||
|
ModelNode transition = flowView().addTransition(ModelNode(),
|
||||||
|
node);
|
||||||
|
modelNode().bindingProperty("target").setExpression(transition.validId());
|
||||||
|
} else if (isFlowDecision()) {
|
||||||
|
ModelNode sourceNode = modelNode();
|
||||||
|
|
||||||
|
if (QmlVisualNode::isFlowDecision(sourceNode))
|
||||||
|
sourceNode = findSourceForDecisionNode();
|
||||||
|
|
||||||
|
if (sourceNode.isValid()) {
|
||||||
|
ModelNode transition = flowView().addTransition(sourceNode,
|
||||||
|
node);
|
||||||
|
modelNode().bindingProperty("targets").addModelNodeToArray(transition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void QmlFlowTargetNode::destroyTargets()
|
||||||
|
{
|
||||||
|
QTC_ASSERT(isValid(), return);
|
||||||
|
|
||||||
|
if (targetTransition().isValid()) {
|
||||||
|
QmlObjectNode(targetTransition()).destroy();
|
||||||
|
modelNode().removeProperty("target");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasBindingProperty("targets")) {
|
||||||
|
for (ModelNode &node : modelNode().bindingProperty("targets").resolveToModelNodeList()) {
|
||||||
|
QmlObjectNode(node).destroy();
|
||||||
|
}
|
||||||
|
modelNode().removeProperty("targets");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ModelNode QmlFlowTargetNode::targetTransition() const
|
||||||
|
{
|
||||||
|
if (!modelNode().hasBindingProperty("target"))
|
||||||
|
return {};
|
||||||
|
|
||||||
|
return modelNode().bindingProperty("target").resolveToModelNode();
|
||||||
|
}
|
||||||
|
|
||||||
|
QmlFlowViewNode QmlFlowTargetNode::flowView() const
|
||||||
|
{
|
||||||
|
return view()->rootModelNode();
|
||||||
|
}
|
||||||
|
|
||||||
|
ModelNode QmlFlowTargetNode::findSourceForDecisionNode() const
|
||||||
|
{
|
||||||
|
if (!isFlowDecision())
|
||||||
|
return {};
|
||||||
|
|
||||||
|
for (const ModelNode transition : flowView().transitionsForTarget(modelNode())) {
|
||||||
|
if (transition.hasBindingProperty("from")) {
|
||||||
|
const ModelNode source = transition.bindingProperty("from").resolveToModelNode();
|
||||||
|
if (source.isValid()) {
|
||||||
|
if (QmlVisualNode::isFlowDecision(source))
|
||||||
|
return QmlFlowTargetNode(source).findSourceForDecisionNode();
|
||||||
|
else if (QmlItemNode(source).isFlowItem())
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QmlFlowTargetNode::isFlowEditorTarget(const ModelNode &modelNode)
|
||||||
|
{
|
||||||
|
return QmlItemNode(modelNode).isFlowItem()
|
||||||
|
|| QmlItemNode(modelNode).isFlowActionArea()
|
||||||
|
|| QmlVisualNode::isFlowDecision(modelNode)
|
||||||
|
|| QmlVisualNode::isFlowWildcard(modelNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void QmlFlowTargetNode::removeTransitions()
|
||||||
|
{
|
||||||
|
if (!modelNode().hasId())
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (const BindingProperty &property : BindingProperty::findAllReferencesTo(modelNode())) {
|
||||||
|
if (property.isValid() && QmlVisualNode::isFlowTransition(property.parentModelNode()))
|
||||||
|
QmlObjectNode(property.parentModelNode()).destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void QmlFlowViewNode::removeAllTransitions()
|
||||||
|
{
|
||||||
|
if (!isValid())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (hasProperty("flowTransitions"))
|
||||||
|
removeProperty("flowTransitions");
|
||||||
|
}
|
||||||
|
|
||||||
} //QmlDesigner
|
} //QmlDesigner
|
||||||
|
@@ -719,4 +719,9 @@ QString QmlObjectNode::simplifiedTypeName() const
|
|||||||
return modelNode().simplifiedTypeName();
|
return modelNode().simplifiedTypeName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList QmlObjectNode::allStateNames() const
|
||||||
|
{
|
||||||
|
return nodeInstance().allStateNames();
|
||||||
|
}
|
||||||
|
|
||||||
} //QmlDesigner
|
} //QmlDesigner
|
||||||
|
@@ -2033,6 +2033,9 @@ FilePaths BaseQtVersionPrivate::qtCorePaths()
|
|||||||
else if (file.endsWith(".dll")
|
else if (file.endsWith(".dll")
|
||||||
|| file.endsWith(QString::fromLatin1(".so.") + versionString)
|
|| file.endsWith(QString::fromLatin1(".so.") + versionString)
|
||||||
|| file.endsWith(".so")
|
|| file.endsWith(".so")
|
||||||
|
#if defined(Q_OS_OPENBSD)
|
||||||
|
|| file.contains(QRegularExpression("\\.so\\.[0-9]+\\.[0-9]+$")) // QTCREATORBUG-23818
|
||||||
|
#endif
|
||||||
|| file.endsWith(QLatin1Char('.') + versionString + ".dylib"))
|
|| file.endsWith(QLatin1Char('.') + versionString + ".dylib"))
|
||||||
dynamicLibs.append(FilePath::fromFileInfo(info));
|
dynamicLibs.append(FilePath::fromFileInfo(info));
|
||||||
}
|
}
|
||||||
|
@@ -163,10 +163,13 @@ void BaseHoverHandler::operateTooltip(TextEditorWidget *editorWidget, const QPoi
|
|||||||
auto layout = new QVBoxLayout;
|
auto layout = new QVBoxLayout;
|
||||||
layout->setContentsMargins(0, 0, 0, 0);
|
layout->setContentsMargins(0, 0, 0, 0);
|
||||||
auto label = new QLabel;
|
auto label = new QLabel;
|
||||||
|
label->setObjectName("qcWidgetTipTopLabel");
|
||||||
label->setTextFormat(m_textFormat);
|
label->setTextFormat(m_textFormat);
|
||||||
label->setText(m_toolTip);
|
label->setText(m_toolTip);
|
||||||
layout->addWidget(label);
|
layout->addWidget(label);
|
||||||
layout->addWidget(new QLabel("<hr/>" + helpContents));
|
auto helpContentLabel = new QLabel("<hr/>" + helpContents);
|
||||||
|
helpContentLabel->setObjectName("qcWidgetTipHelpLabel");
|
||||||
|
layout->addWidget(helpContentLabel);
|
||||||
Utils::ToolTip::show(point, layout, editorWidget, helpItem);
|
Utils::ToolTip::show(point, layout, editorWidget, helpItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -4715,14 +4715,19 @@ void tst_Dumpers::dumper_data()
|
|||||||
|
|
||||||
QTest::newRow("StdUniquePtr")
|
QTest::newRow("StdUniquePtr")
|
||||||
<< Data("#include <memory>\n"
|
<< Data("#include <memory>\n"
|
||||||
"#include <string>\n" + fooData,
|
"#include <string>\n" + fooData +
|
||||||
|
|
||||||
|
"static Foo *alloc_foo() { return new Foo; }\n"
|
||||||
|
"static void free_foo(Foo *f) { delete f; }\n",
|
||||||
|
|
||||||
"std::unique_ptr<int> p0;\n\n"
|
"std::unique_ptr<int> p0;\n\n"
|
||||||
"std::unique_ptr<int> p1(new int(32));\n\n"
|
"std::unique_ptr<int> p1(new int(32));\n\n"
|
||||||
"std::unique_ptr<Foo> p2(new Foo);\n\n"
|
"std::unique_ptr<Foo> p2(new Foo);\n\n"
|
||||||
"std::unique_ptr<std::string> p3(new std::string(\"ABC\"));",
|
"std::unique_ptr<std::string> p3(new std::string(\"ABC\"));\n"
|
||||||
|
|
||||||
"&p0, &p1, &p2, &p3")
|
"std::unique_ptr<Foo, void(*)(Foo*)> p4{alloc_foo(), free_foo};",
|
||||||
|
|
||||||
|
"&p0, &p1, &p2, &p3, &p4")
|
||||||
|
|
||||||
+ CoreProfile()
|
+ CoreProfile()
|
||||||
+ Cxx11Profile()
|
+ Cxx11Profile()
|
||||||
@@ -4731,7 +4736,8 @@ void tst_Dumpers::dumper_data()
|
|||||||
+ Check("p0", "(null)", "std::unique_ptr<int, std::default_delete<int> >")
|
+ Check("p0", "(null)", "std::unique_ptr<int, std::default_delete<int> >")
|
||||||
+ Check("p1", "32", "std::unique_ptr<int, std::default_delete<int> >")
|
+ Check("p1", "32", "std::unique_ptr<int, std::default_delete<int> >")
|
||||||
+ Check("p2", Pointer(), "std::unique_ptr<Foo, std::default_delete<Foo> >")
|
+ Check("p2", Pointer(), "std::unique_ptr<Foo, std::default_delete<Foo> >")
|
||||||
+ Check("p3", "\"ABC\"", "std::unique_ptr<std::string, std::default_delete<std::string> >");
|
+ Check("p3", "\"ABC\"", "std::unique_ptr<std::string, std::default_delete<std::string> >")
|
||||||
|
+ Check("p4.b", "2", "int");
|
||||||
|
|
||||||
|
|
||||||
QTest::newRow("StdOnce")
|
QTest::newRow("StdOnce")
|
||||||
|
@@ -159,8 +159,8 @@ def verifyHoveringOnEditor(editor, lines, additionalKeyPresses, expectedTypes, e
|
|||||||
elif expectedType == "TextTip":
|
elif expectedType == "TextTip":
|
||||||
__handleTextTips__(tip, expectedVals, altVal)
|
__handleTextTips__(tip, expectedVals, altVal)
|
||||||
elif expectedType == "WidgetTip":
|
elif expectedType == "WidgetTip":
|
||||||
test.warning("Sorry - WidgetTip checks aren't implemented yet.")
|
__handleWidgetTips__(tip, expectedVals)
|
||||||
sendEvent("QMouseEvent", editor, QEvent.MouseMove, 0, -50, Qt.NoButton, 0)
|
sendEvent("QMouseEvent", editor, QEvent.MouseMove, 0, 0, Qt.NoButton, 0)
|
||||||
waitFor("isNull(tip)", 10000)
|
waitFor("isNull(tip)", 10000)
|
||||||
|
|
||||||
# helper function that handles verification of TextTip hoverings
|
# helper function that handles verification of TextTip hoverings
|
||||||
@@ -228,6 +228,19 @@ def __handleColorTips__(colTip, expectedColor, alternativeColor):
|
|||||||
test.fail("ColorTip does not match - expected color '%X'%s got '%X'"
|
test.fail("ColorTip does not match - expected color '%X'%s got '%X'"
|
||||||
% (uint(cmp.rgb()), altColorText, uint(rgb.rgb())))
|
% (uint(cmp.rgb()), altColorText, uint(rgb.rgb())))
|
||||||
|
|
||||||
|
# helper function that handles verification of WidgetTip hoverings
|
||||||
|
# param widgetTip the WidgetTip object
|
||||||
|
# param expectedVals a dict holding property value pairs that must match
|
||||||
|
def __handleWidgetTips__(widgetTip, expectedVals):
|
||||||
|
toplabel = waitForObject("{type='QLabel' objectName='qcWidgetTipTopLabel' visible='1'}")
|
||||||
|
foundText = str(toplabel.text)
|
||||||
|
try:
|
||||||
|
helplabel = waitForObject("{type='QLabel' objectName='qcWidgetTipHelpLabel' visible='1'}", 1000)
|
||||||
|
foundText += str(helplabel.text)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
test.compare(foundText, expectedVals["text"])
|
||||||
|
|
||||||
# function that checks whether all expected properties (including their values)
|
# function that checks whether all expected properties (including their values)
|
||||||
# match the given properties
|
# match the given properties
|
||||||
# param properties a dict holding the properties to check
|
# param properties a dict holding the properties to check
|
||||||
|
@@ -122,35 +122,26 @@ def testHovering():
|
|||||||
else:
|
else:
|
||||||
home = "<Home>"
|
home = "<Home>"
|
||||||
additionalKeyPresses = [home, "<Right>"]
|
additionalKeyPresses = [home, "<Right>"]
|
||||||
expectedTypes = ["TextTip", "TextTip"]
|
expectedTypes = ["WidgetTip", "WidgetTip"]
|
||||||
expectedValues = [
|
expectedValues = [
|
||||||
{'text':'<table><tr><td valign=middle><p>FocusScope</p><hr/><p>\n<p>Explicitly '
|
{'text':'FocusScope<hr/>\n<p>Explicitly creates a focus scope.</p>'},
|
||||||
'creates a focus scope </p></p></td><td> <img src=":/utils/tooltip/images/f1.png"></td></tr></table>'},
|
{'text':'Rectangle<hr/>\n<p>Paints a filled rectangle with an optional border.</p>'}
|
||||||
{'text':'<table><tr><td valign=middle><p>Rectangle</p><hr/><p>\n<p>Paints a filled rectangle with an '
|
|
||||||
'optional border </p></p></td><td> <img src=":/utils/tooltip/images/f1.png"></td></tr></table>'}
|
|
||||||
]
|
]
|
||||||
alternativeValues = [{"text":"<p>FocusScope</p>"}, {"text":"<p>Rectangle</p>"}]
|
verifyHoveringOnEditor(editor, lines, additionalKeyPresses, expectedTypes, expectedValues)
|
||||||
verifyHoveringOnEditor(editor, lines, additionalKeyPresses, expectedTypes, expectedValues, alternativeValues)
|
|
||||||
test.log("Testing hovering properties")
|
test.log("Testing hovering properties")
|
||||||
openDocument(focusDocumentPath % "focus\\.qml")
|
openDocument(focusDocumentPath % "focus\\.qml")
|
||||||
editor = waitForObject(":Qt Creator_QmlJSEditor::QmlJSTextEditorWidget")
|
editor = waitForObject(":Qt Creator_QmlJSEditor::QmlJSTextEditorWidget")
|
||||||
lines = ['focus:\s*true', 'color:\s*"black"', 'states:\s*State\s*\{', 'transitions:\s*Transition\s*\{']
|
lines = ['focus:\s*true', 'color:\s*"black"', 'states:\s*State\s*\{', 'transitions:\s*Transition\s*\{']
|
||||||
expectedTypes = ["TextTip", "TextTip", "TextTip", "TextTip"]
|
expectedTypes = ["TextTip", "WidgetTip", "WidgetTip", "WidgetTip"]
|
||||||
expectedValues = [
|
expectedValues = [
|
||||||
{'text':'<table><tr><td valign=middle><p>boolean</p><hr/><p><p>This property indicates whether the item has focus '
|
{'text':'<table><tr><td valign=middle><p>boolean</p><hr/><p><p>This property indicates whether the item has focus '
|
||||||
'within the enclosing focus scope. If true, this item will gain active focus when the enclosing '
|
'within the enclosing focus scope. If true, this item will gain active focus when the enclosing '
|
||||||
'focus scope gains active focus. In the following example, <tt>input</tt> will be given active focus '
|
'focus scope gains active focus. In the following example, <tt>input</tt> will be given active focus '
|
||||||
'when <tt>scope</tt> gains active focus.</p></p></td><td> <img src=":/utils/tooltip/images/f1.png"'
|
'when <tt>scope</tt> gains active focus.</p></p></td><td> <img src=":/utils/tooltip/images/f1.png"'
|
||||||
'></td></tr></table>'},
|
'></td></tr></table>'},
|
||||||
{'text':'<table><tr><td valign=middle><p>string</p><hr/><p><p>This property holds the color used to fill the rectangle.'
|
{'text':'string'},
|
||||||
'</p></p></td><td> <img src=":/utils/tooltip/images/f1.png"></td></tr></table>'},
|
{'text':'State'},
|
||||||
{'text':'<table><tr><td valign=middle><p>State</p><hr/><p><p>This property holds the list of possible states for this item. '
|
{'text':'Transition'}
|
||||||
'To change the state of this item, set the state property to one of these states, or set the state property '
|
|
||||||
'to an empty string to revert the item to its default state.'
|
|
||||||
'</p></p></td><td> <img src=":/utils/tooltip/images/f1.png"></td></tr></table>'},
|
|
||||||
{'text':'<table><tr><td valign=middle><p>Transition</p><hr/><p><p>This property holds the list of transitions for this item. '
|
|
||||||
'These define the transitions to be applied to the item whenever it changes its state.'
|
|
||||||
'</p></p></td><td> <img src=":/utils/tooltip/images/f1.png"></td></tr></table>'}
|
|
||||||
]
|
]
|
||||||
alternativeValues = [{"text":"<p>boolean</p>"}, {"text":"<p>string</p>"},
|
alternativeValues = [{"text":"<p>boolean</p>"}, {"text":"<p>string</p>"},
|
||||||
{"text":"<p>State</p>"}, {"text":"<p>Transition</p>"}]
|
{"text":"<p>State</p>"}, {"text":"<p>Transition</p>"}]
|
||||||
|