Merge remote-tracking branch 'origin/6.0' into 7.0
Change-Id: Ie2b23daa457c2aed635a784963bc1e95740bd076
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 4.0 KiB |
@@ -41,6 +41,9 @@
|
|||||||
project and a button UI control, and how to modify the files generated by
|
project and a button UI control, and how to modify the files generated by
|
||||||
the wizard templates to wireframe the UI.
|
the wizard templates to wireframe the UI.
|
||||||
|
|
||||||
|
You can donwnload the completed project from
|
||||||
|
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/Loginui1}{here}.
|
||||||
|
|
||||||
The \e {Learn More} sections provide additional information about the
|
The \e {Learn More} sections provide additional information about the
|
||||||
tasks performed by the wizards and about other basic tasks and concepts.
|
tasks performed by the wizards and about other basic tasks and concepts.
|
||||||
|
|
||||||
@@ -54,24 +57,19 @@
|
|||||||
To create a project:
|
To create a project:
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
\li Select \uicontrol File > \uicontrol {New Project} >
|
\li Select \uicontrol File > \uicontrol {New Project}.
|
||||||
\uicontrol General > \uicontrol {Qt Quick Application - Empty} >
|
\li In the \uicontrol Presets tab, select \uicontrol General >
|
||||||
\uicontrol Choose.
|
\uicontrol {Empty}.
|
||||||
\li In the \uicontrol Name field, enter the project name: \e {loginui1}.
|
\li In the \uicontrol Details tab:
|
||||||
When naming your own projects, keep in mind that they cannot be
|
\list
|
||||||
easily renamed later.
|
\li Enter \e Loginui1 as the name for the project. Keep in mind
|
||||||
\li In the \uicontrol {Create in} field, enter the path to the folder
|
that projects cannot be easily renamed later.
|
||||||
where you want to store the project files. You can move project
|
\li Select the path for the project files. You can move project
|
||||||
folders later without problems.
|
folders later.
|
||||||
\li Select \uicontrol Next (or \uicontrol Continue on \macos) to
|
\li Set \uicontrol Width to 720 and \uicontrol Height to 1280.
|
||||||
continue to the \uicontrol {Define Project Details} page.
|
You can change the screen size later in \l Properties.
|
||||||
\li In the \uicontrol {Screen resolution} field, select the initial
|
\endlist
|
||||||
size of the UI. In this tutorial, we use the predefined size
|
\li Select \uicontrol Create to create the project.
|
||||||
\e {720 x 1280 (HD)} (portrait) instead of the default size
|
|
||||||
(landscape). You can easily change the screen size later in
|
|
||||||
\l Properties.
|
|
||||||
\li Select \uicontrol Finish (or \uicontrol Done on \macos) to create
|
|
||||||
the project.
|
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
Your project should now look something like this in the \uicontrol Design
|
Your project should now look something like this in the \uicontrol Design
|
||||||
@@ -92,7 +90,7 @@
|
|||||||
\section2 Learn More - Projects and Files
|
\section2 Learn More - Projects and Files
|
||||||
|
|
||||||
\QDS creates a set of boilerplate files and folders that you need to create
|
\QDS creates a set of boilerplate files and folders that you need to create
|
||||||
a UI. The files are listed in the \l Projects view.
|
a UI. The files are listed in the \l{File System} view.
|
||||||
|
|
||||||
\image loginui1-project-files.png
|
\image loginui1-project-files.png
|
||||||
|
|
||||||
@@ -112,6 +110,9 @@
|
|||||||
Specifically, if you export and import designs using \QB, your main
|
Specifically, if you export and import designs using \QB, your main
|
||||||
file is most likely called something else. For more information,
|
file is most likely called something else. For more information,
|
||||||
see \l {Exporting from Design Tools}.
|
see \l {Exporting from Design Tools}.
|
||||||
|
\li The \e CMakeLists.txt project configuration file allowing you to
|
||||||
|
share your project as a fully working C++ application with
|
||||||
|
developers.
|
||||||
\li The \e {qtquickcontrols2.conf} file specifies the selected
|
\li The \e {qtquickcontrols2.conf} file specifies the selected
|
||||||
\l {Styling Qt Quick Controls}{UI style} and some style-specific
|
\l {Styling Qt Quick Controls}{UI style} and some style-specific
|
||||||
arguments.
|
arguments.
|
||||||
@@ -230,7 +231,7 @@
|
|||||||
adds the following \e import statements to the UI files (.ui.qml) that it
|
adds the following \e import statements to the UI files (.ui.qml) that it
|
||||||
creates:
|
creates:
|
||||||
|
|
||||||
\quotefromfile loginui1/Screen01.ui.qml
|
\quotefromfile Loginui1/Content/Screen01.ui.qml
|
||||||
\skipto import
|
\skipto import
|
||||||
\printuntil Controls
|
\printuntil Controls
|
||||||
|
|
||||||
@@ -333,7 +334,7 @@
|
|||||||
To be able to use the functionality of the Button control, the wizard template
|
To be able to use the functionality of the Button control, the wizard template
|
||||||
adds the following \e import statements to the \e EntryField.ui.qml file:
|
adds the following \e import statements to the \e EntryField.ui.qml file:
|
||||||
|
|
||||||
\quotefromfile loginui1/EntryField.ui.qml
|
\quotefromfile Loginui1/Content/EntryField.ui.qml
|
||||||
\skipto import
|
\skipto import
|
||||||
\printuntil Controls
|
\printuntil Controls
|
||||||
|
|
||||||
@@ -364,7 +365,7 @@
|
|||||||
to \e 100, to match the width of the tag line.
|
to \e 100, to match the width of the tag line.
|
||||||
\li In the \uicontrol Control section, deselect the \uicontrol Hover
|
\li In the \uicontrol Control section, deselect the \uicontrol Hover
|
||||||
check box because we don't want the hover effect for the button.
|
check box because we don't want the hover effect for the button.
|
||||||
\li Select the button background in \uicontrol Navigator to display its
|
\li Select \e buttonBackground in \uicontrol Navigator to display its
|
||||||
properties in \uicontrol Properties.
|
properties in \uicontrol Properties.
|
||||||
\li In \uicontrol Rectangle > \uicontrol {Fill color}, set the color to
|
\li In \uicontrol Rectangle > \uicontrol {Fill color}, set the color to
|
||||||
transparent light gray (\e #28e7e7e7) in \uicontrol Hex. You can
|
transparent light gray (\e #28e7e7e7) in \uicontrol Hex. You can
|
||||||
@@ -372,7 +373,7 @@
|
|||||||
\li In \uicontrol {Border Color}, select white (\e #ffffff).
|
\li In \uicontrol {Border Color}, select white (\e #ffffff).
|
||||||
\li In \uicontrol Radius, enter \e 50 to give the button
|
\li In \uicontrol Radius, enter \e 50 to give the button
|
||||||
rounded corners.
|
rounded corners.
|
||||||
\li Select the text component in \uicontrol Navigator to display its
|
\li Select \e textItem in \uicontrol Navigator to display its
|
||||||
properties in \uicontrol Properties.
|
properties in \uicontrol Properties.
|
||||||
\li In \uicontrol Character > \uicontrol Font, select
|
\li In \uicontrol Character > \uicontrol Font, select
|
||||||
\e {Titillium Web ExtraLight}.
|
\e {Titillium Web ExtraLight}.
|
||||||
@@ -382,7 +383,7 @@
|
|||||||
(\e #ffffff).
|
(\e #ffffff).
|
||||||
\li In \uicontrol {Alignment H}, select the \uicontrol Left button to
|
\li In \uicontrol {Alignment H}, select the \uicontrol Left button to
|
||||||
align the text horizontally to the left.
|
align the text horizontally to the left.
|
||||||
\li In the \uicontrol Padding section > \uicontrol Horizontal >
|
\li In \uicontrol Padding > \uicontrol Horizontal >
|
||||||
\uicontrol Left, set the padding in the field between background
|
\uicontrol Left, set the padding in the field between background
|
||||||
border and text to \e 50.
|
border and text to \e 50.
|
||||||
\image loginui1-text-properties-button.png "Text properties"
|
\image loginui1-text-properties-button.png "Text properties"
|
||||||
@@ -450,13 +451,13 @@
|
|||||||
to \e 100.
|
to \e 100.
|
||||||
\li In the \uicontrol Control section, deselect the \uicontrol Hover
|
\li In the \uicontrol Control section, deselect the \uicontrol Hover
|
||||||
check box because we don't want the hover effect for the button.
|
check box because we don't want the hover effect for the button.
|
||||||
\li Select the button background in \uicontrol Navigator to display its
|
\li Select \e buttonBackground in \uicontrol Navigator to display its
|
||||||
properties in \uicontrol Properties.
|
properties in \uicontrol Properties.
|
||||||
\li In \uicontrol Rectangle > \uicontrol {Border color}, select the
|
\li In \uicontrol Rectangle > \uicontrol {Border color}, select the
|
||||||
green used in the logo (\e #41cd52).
|
green used in the logo (\e #41cd52).
|
||||||
\li In \uicontrol Radius, enter \e 50 to give the button rounded
|
\li In \uicontrol Radius, enter \e 50 to give the button rounded
|
||||||
corners.
|
corners.
|
||||||
\li Select the the text component in \uicontrol Navigator to display
|
\li Select \e textItem in \uicontrol Navigator to display
|
||||||
its properties in \uicontrol Properties.
|
its properties in \uicontrol Properties.
|
||||||
\li In \uicontrol Character > \uicontrol Font, select
|
\li In \uicontrol Character > \uicontrol Font, select
|
||||||
\e {Titillium Web ExtraLight}.
|
\e {Titillium Web ExtraLight}.
|
||||||
|
@@ -24,7 +24,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\example loginui2
|
\example Loginui2
|
||||||
\ingroup gstutorials
|
\ingroup gstutorials
|
||||||
\previouspage {Log In UI - Components}
|
\previouspage {Log In UI - Components}
|
||||||
\nextpage {Log In UI - States}
|
\nextpage {Log In UI - States}
|
||||||
@@ -45,7 +45,12 @@
|
|||||||
their proper places when you resize the UI on the desktop or on devices
|
their proper places when you resize the UI on the desktop or on devices
|
||||||
with different screen sizes, you will use anchors and positioners.
|
with different screen sizes, you will use anchors and positioners.
|
||||||
|
|
||||||
These instructions build on \l {Log In UI - Components}.
|
The starting point for this tutorial is the completed
|
||||||
|
\l{Log In UI - Components} project. You can download the project from
|
||||||
|
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/Loginui1}{here}.
|
||||||
|
|
||||||
|
Additionally, you can download the completed project of this tutorial from
|
||||||
|
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/Loginui2}{here}.
|
||||||
|
|
||||||
The \e {Learn More} sections provide additional information about the
|
The \e {Learn More} sections provide additional information about the
|
||||||
task at hand.
|
task at hand.
|
||||||
@@ -79,6 +84,9 @@
|
|||||||
anchor button to anchor \e adventurePage to its
|
anchor button to anchor \e adventurePage to its
|
||||||
parent in the \uicontrol Target field. This attaches the background
|
parent in the \uicontrol Target field. This attaches the background
|
||||||
image to the rectangle on all sides.
|
image to the rectangle on all sides.
|
||||||
|
Note: Selecting the anchor button should automatically select the
|
||||||
|
four buttons on the left side of it. If it doesn't, refresh
|
||||||
|
\uicontrol{Form Editor}.
|
||||||
\image loginui2-layout.png "Layout properties"
|
\image loginui2-layout.png "Layout properties"
|
||||||
\li Select \e qt_logo_green_128x128px in \l Navigator.
|
\li Select \e qt_logo_green_128x128px in \l Navigator.
|
||||||
\li In \uicontrol Properties > \uicontrol Layout, select the
|
\li In \uicontrol Properties > \uicontrol Layout, select the
|
||||||
|
@@ -46,12 +46,12 @@
|
|||||||
login page, you will use \e states to show and hide UI components as necessary
|
login page, you will use \e states to show and hide UI components as necessary
|
||||||
when a user selects the \e {Create Account} button.
|
when a user selects the \e {Create Account} button.
|
||||||
|
|
||||||
These instructions build on:
|
The starting point for this tutorial is the completed
|
||||||
|
\l{Log In UI - Positioning} project. You can download the project from
|
||||||
|
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/Loginui2}{here}.
|
||||||
|
|
||||||
\list
|
Additionally, you can download the completed project of this tutorial from
|
||||||
\li \l {Log In UI - Components}
|
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/Loginui3}{here}.
|
||||||
\li \l {Log In UI - Positioning}
|
|
||||||
\endlist
|
|
||||||
|
|
||||||
The \e {Learn More} sections provide additional information relevant to the
|
The \e {Learn More} sections provide additional information relevant to the
|
||||||
task at hand.
|
task at hand.
|
||||||
|
@@ -46,13 +46,13 @@
|
|||||||
\l{Creating Timeline Animations}{timeline animations} that you bind
|
\l{Creating Timeline Animations}{timeline animations} that you bind
|
||||||
to states.
|
to states.
|
||||||
|
|
||||||
These instructions build on:
|
The starting point for this tutorial is the completed
|
||||||
|
\l{Log In UI - States} project. You can download the project from
|
||||||
|
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/Loginui3}{here}.
|
||||||
|
|
||||||
|
Additionally, you can download the completed project of this tutorial from
|
||||||
|
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/Loginui4}{here}.
|
||||||
|
|
||||||
\list
|
|
||||||
\li \l {Log In UI - Components}
|
|
||||||
\li \l {Log In UI - Positioning}
|
|
||||||
\li \l {Log In UI - States}
|
|
||||||
\endlist
|
|
||||||
|
|
||||||
The \e {Learn More} sections provide additional information relevant to the
|
The \e {Learn More} sections provide additional information relevant to the
|
||||||
task at hand.
|
task at hand.
|
||||||
@@ -94,7 +94,7 @@
|
|||||||
\li Select \inlineimage icons/navigator-arrowup.png
|
\li Select \inlineimage icons/navigator-arrowup.png
|
||||||
to move \e username below \e tagLine in \uicontrol Navigator
|
to move \e username below \e tagLine in \uicontrol Navigator
|
||||||
to preserve the \l{Arranging Components}{component hierarchy}.
|
to preserve the \l{Arranging Components}{component hierarchy}.
|
||||||
\li Repeat for \e password and \e repeatPassword.
|
\li Repeat step 3 and 4 for \e password and \e repeatPassword.
|
||||||
\li Select \e fields in \uicontrol Navigator and press \key Delete to
|
\li Select \e fields in \uicontrol Navigator and press \key Delete to
|
||||||
delete it.
|
delete it.
|
||||||
\li Select \e username in \uicontrol Navigator to display its properties
|
\li Select \e username in \uicontrol Navigator to display its properties
|
||||||
@@ -196,8 +196,8 @@
|
|||||||
to save your changes.
|
to save your changes.
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
When you move the playhead along the timeline, you can see how the login
|
When you move the playhead along the timeline, you can see how the create
|
||||||
button fades out while the repeat password field fades in.
|
account button fades out while the repeat password field fades in.
|
||||||
|
|
||||||
You will now animate the top anchor margin of the repeat password field
|
You will now animate the top anchor margin of the repeat password field
|
||||||
to make it appear to slide down from the password field.
|
to make it appear to slide down from the password field.
|
||||||
@@ -219,7 +219,7 @@
|
|||||||
frame 0, and select the record button for the \e anchors.topMargin
|
frame 0, and select the record button for the \e anchors.topMargin
|
||||||
property of \e repeatPassword.
|
property of \e repeatPassword.
|
||||||
\li In the field next to the property, set a negative value for the
|
\li In the field next to the property, set a negative value for the
|
||||||
top anchor margin, -40, to place \e repeatPassword on top of
|
top anchor margin, -100, to place \e repeatPassword on top of
|
||||||
\e password.
|
\e password.
|
||||||
\li Move the playhead to frame 1000 and change the top anchor margin
|
\li Move the playhead to frame 1000 and change the top anchor margin
|
||||||
to 20, so that, combined with the change in the \uicontrol Opacity
|
to 20, so that, combined with the change in the \uicontrol Opacity
|
||||||
@@ -312,7 +312,7 @@
|
|||||||
the following \e import statement to the UI files where it uses the
|
the following \e import statement to the UI files where it uses the
|
||||||
components:
|
components:
|
||||||
|
|
||||||
\quotefromfile loginui4/Screen01.ui.qml
|
\quotefromfile Loginui4/Content/Screen01.ui.qml
|
||||||
\skipto QtQuick.Timeline
|
\skipto QtQuick.Timeline
|
||||||
\printuntil 1.0
|
\printuntil 1.0
|
||||||
|
|
||||||
|
@@ -39,8 +39,8 @@
|
|||||||
translations from a JSON file.
|
translations from a JSON file.
|
||||||
|
|
||||||
You need to download the starting project for this tutorial from
|
You need to download the starting project for this tutorial from
|
||||||
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/examples/
|
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/multi-language%20tutorial/Loginui2}{here}
|
||||||
loginui2}{here} before you start.
|
before you start.
|
||||||
|
|
||||||
Download the project and open the \e loginui2.qmlproject file in \QDS
|
Download the project and open the \e loginui2.qmlproject file in \QDS
|
||||||
to get started.
|
to get started.
|
||||||
@@ -48,8 +48,7 @@
|
|||||||
This project consists of a login page with a couple of text elements.
|
This project consists of a login page with a couple of text elements.
|
||||||
|
|
||||||
Additionally, you will use a JSON translation file in this tutorial.
|
Additionally, you will use a JSON translation file in this tutorial.
|
||||||
Download it from \l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/
|
Download it from \l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/multi-language}{here}.
|
||||||
master/tutorial%20projects/multi-language}{here}.
|
|
||||||
|
|
||||||
\section1 JSON Translation File
|
\section1 JSON Translation File
|
||||||
|
|
||||||
@@ -133,10 +132,11 @@
|
|||||||
First, you need to prepare your project for translation:
|
First, you need to prepare your project for translation:
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
|
\li In \uicontrol{Projects}, double-click \e{Screen01.ui.qml} to open it.
|
||||||
\li All text strings that you want to translate need to be of \c
|
\li All text strings that you want to translate need to be of \c
|
||||||
qsTrId type. In this project the text strings are of \c qsTr type so you
|
qsTrId type. In this project the text strings are of \c qsTr type so you
|
||||||
need to change them. Open \uicontrol{Text Editor}, find all five
|
need to change them. Open \uicontrol{Text Editor}, find all five
|
||||||
occurrences of \c QsTr and replace them with \c{QsTrId}. For example,
|
occurrences of \c qsTr and replace them with \c{qsTrId}. For example,
|
||||||
replace:
|
replace:
|
||||||
\code
|
\code
|
||||||
text: qsTr("Qt Account")
|
text: qsTr("Qt Account")
|
||||||
@@ -165,21 +165,14 @@
|
|||||||
\li Go to \uicontrol View > \uicontrol Views and select \uicontrol
|
\li Go to \uicontrol View > \uicontrol Views and select \uicontrol
|
||||||
Translations to open the \uicontrol Translations view. You can
|
Translations to open the \uicontrol Translations view. You can
|
||||||
drag it to a workspace to dock it.
|
drag it to a workspace to dock it.
|
||||||
|
|
||||||
When you open the \uicontrol Translations view for the first time, \QDS
|
|
||||||
prompts you to enable the multi-language database, select
|
|
||||||
\uicontrol{Yes}.
|
|
||||||
\image enable-multilanguage.png
|
|
||||||
\li In \uicontrol Translations, select
|
\li In \uicontrol Translations, select
|
||||||
\inlineimage icons/select-languages.png
|
\inlineimage icons/select-languages.png
|
||||||
.
|
.
|
||||||
|
|
||||||
When you enable the multi-language database, an SQLite database named
|
|
||||||
\e translations.db is created in the project folder root.
|
|
||||||
\li Select the languages that you want to support in your project,
|
\li Select the languages that you want to support in your project,
|
||||||
in this case \uicontrol{English - American English} and
|
in this case \uicontrol{English - American English} and
|
||||||
\uicontrol{Swedish}.
|
\uicontrol{Swedish - Svenska}.
|
||||||
\li Set \uicontrol English as primary language and select \uicontrol{OK}.
|
\li Set \uicontrol{English - American English} as primary language and
|
||||||
|
select \uicontrol{Ok}.
|
||||||
\li Select \inlineimage icons/import-json-translations.png
|
\li Select \inlineimage icons/import-json-translations.png
|
||||||
and open the \e ml_translations.json file. Now you can see all your
|
and open the \e ml_translations.json file. Now you can see all your
|
||||||
imported translations in the \uicontrol Translations view.
|
imported translations in the \uicontrol Translations view.
|
||||||
|
@@ -1,8 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
** Copyright (C) 2022 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Design Studio.
|
** This file is part of the examples of the Qt Design Studio.
|
||||||
@@ -49,6 +47,7 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
import QtQuick 2.15
|
import QtQuick 2.15
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls 2.12
|
||||||
|
|
||||||
@@ -100,13 +99,16 @@ Button {
|
|||||||
when: !control.down
|
when: !control.down
|
||||||
|
|
||||||
PropertyChanges {
|
PropertyChanges {
|
||||||
target: textItem
|
target: buttonBackground
|
||||||
font.family: "Titillium Web ExtraLight"
|
color: "#00000000"
|
||||||
|
border.color: "#ffffff"
|
||||||
}
|
}
|
||||||
|
|
||||||
PropertyChanges {
|
PropertyChanges {
|
||||||
target: buttonBackground
|
target: textItem
|
||||||
color: "#28e7e7e7"
|
color: "#ffffff"
|
||||||
|
font.pixelSize: 34
|
||||||
|
font.family: "Titillium Web ExtraLight"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
State {
|
State {
|
||||||
@@ -115,12 +117,14 @@ Button {
|
|||||||
PropertyChanges {
|
PropertyChanges {
|
||||||
target: textItem
|
target: textItem
|
||||||
color: "#ffffff"
|
color: "#ffffff"
|
||||||
|
border.color: "#ffffff"
|
||||||
|
font.family: "Titillium Web ExtraLight"
|
||||||
}
|
}
|
||||||
|
|
||||||
PropertyChanges {
|
PropertyChanges {
|
||||||
target: buttonBackground
|
target: buttonBackground
|
||||||
color: "#e7e7e7"
|
color: "#28e7e7e7"
|
||||||
border.color: "#ffffff"
|
border.color: "#00000000"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
@@ -1,8 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
** Copyright (C) 2022 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Design Studio.
|
** This file is part of the examples of the Qt Design Studio.
|
||||||
@@ -49,6 +47,7 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
import QtQuick 2.15
|
import QtQuick 2.15
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls 2.12
|
||||||
|
|
||||||
@@ -68,6 +67,7 @@ Button {
|
|||||||
|
|
||||||
text: "My Button"
|
text: "My Button"
|
||||||
hoverEnabled: false
|
hoverEnabled: false
|
||||||
|
enabled: true
|
||||||
|
|
||||||
background: buttonBackground
|
background: buttonBackground
|
||||||
Rectangle {
|
Rectangle {
|
||||||
@@ -83,6 +83,8 @@ Button {
|
|||||||
contentItem: textItem
|
contentItem: textItem
|
||||||
Text {
|
Text {
|
||||||
id: textItem
|
id: textItem
|
||||||
|
width: 500
|
||||||
|
height: 100
|
||||||
text: control.text
|
text: control.text
|
||||||
font.pixelSize: 34
|
font.pixelSize: 34
|
||||||
|
|
||||||
@@ -101,6 +103,14 @@ Button {
|
|||||||
PropertyChanges {
|
PropertyChanges {
|
||||||
target: buttonBackground
|
target: buttonBackground
|
||||||
color: "#00000000"
|
color: "#00000000"
|
||||||
|
border.color: "#41cd52"
|
||||||
|
}
|
||||||
|
|
||||||
|
PropertyChanges {
|
||||||
|
target: textItem
|
||||||
|
color: "#41cd52"
|
||||||
|
font.pixelSize: 34
|
||||||
|
font.family: "Titillium Web ExtraLight"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
State {
|
State {
|
||||||
@@ -108,20 +118,17 @@ Button {
|
|||||||
when: control.down
|
when: control.down
|
||||||
PropertyChanges {
|
PropertyChanges {
|
||||||
target: textItem
|
target: textItem
|
||||||
color: "#ffffff"
|
color: "#41cd52"
|
||||||
|
border.color: "#41cd52"
|
||||||
|
font.pixelSize: 34
|
||||||
|
font.family: "Titillium Web ExtraLight"
|
||||||
}
|
}
|
||||||
|
|
||||||
PropertyChanges {
|
PropertyChanges {
|
||||||
target: buttonBackground
|
target: buttonBackground
|
||||||
color: "#41cd52"
|
color: "#41cd52"
|
||||||
border.color: "#00000000"
|
border.color: "#41cd52"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
/*##^##
|
|
||||||
Designer {
|
|
||||||
D{i:0;height:100;width:500}
|
|
||||||
}
|
|
||||||
##^##*/
|
|
@@ -1,8 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
** Copyright (C) 2022 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Design Studio.
|
** This file is part of the examples of the Qt Design Studio.
|
||||||
@@ -49,9 +47,10 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
import QtQuick.Controls
|
import QtQuick.Controls
|
||||||
import loginui1 1.0
|
import Loginui1
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
width: Constants.width
|
width: Constants.width
|
||||||
@@ -70,47 +69,44 @@ Rectangle {
|
|||||||
Image {
|
Image {
|
||||||
id: qt_logo_green_128x128px
|
id: qt_logo_green_128x128px
|
||||||
x: 296
|
x: 296
|
||||||
y: 40
|
y: 0
|
||||||
source: "images/qt_logo_green_128x128px.png"
|
source: "images/qt_logo_green_128x128px.png"
|
||||||
fillMode: Image.PreserveAspectFit
|
fillMode: Image.PreserveAspectFit
|
||||||
}
|
}
|
||||||
Text {
|
Text {
|
||||||
id: tagLine
|
|
||||||
width: 541
|
|
||||||
height: 78
|
|
||||||
color: "#ffffff"
|
color: "#ffffff"
|
||||||
text: qsTr("Are you ready to explore?")
|
text: qsTr("Are you ready to explore?")
|
||||||
font.pixelSize: 50
|
font.pixelSize: 50
|
||||||
font.family: "Titillium Web ExtraLight"
|
font.family: "Titillium Web ExtraLight"
|
||||||
anchors.verticalCenterOffset: -391
|
anchors.verticalCenterOffset: -430
|
||||||
anchors.horizontalCenterOffset: 18
|
anchors.horizontalCenterOffset: 0
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
}
|
}
|
||||||
|
|
||||||
EntryField {
|
EntryField {
|
||||||
id: username
|
id: username
|
||||||
x: 128
|
x: 110
|
||||||
y: 470
|
y: 470
|
||||||
text: "Username or Email"
|
text: qsTr("Username or Email")
|
||||||
}
|
}
|
||||||
|
|
||||||
EntryField {
|
EntryField {
|
||||||
id: password
|
id: password
|
||||||
x: 128
|
x: 110
|
||||||
y: 590
|
y: 590
|
||||||
text: qsTr("Password")
|
text: qsTr("Password")
|
||||||
}
|
}
|
||||||
|
|
||||||
PushButton {
|
PushButton {
|
||||||
id: login
|
id: login
|
||||||
x: 102
|
x: 101
|
||||||
y: 966
|
y: 944
|
||||||
text: qsTr("Continue")
|
text: qsTr("Continue")
|
||||||
}
|
}
|
||||||
|
|
||||||
PushButton {
|
PushButton {
|
||||||
id: createAccount
|
id: creteAccount
|
||||||
x: 102
|
x: 101
|
||||||
y: 1088
|
y: 1088
|
||||||
text: qsTr("Create Account")
|
text: qsTr("Create Account")
|
||||||
}
|
}
|
||||||
@@ -118,7 +114,7 @@ Rectangle {
|
|||||||
|
|
||||||
/*##^##
|
/*##^##
|
||||||
Designer {
|
Designer {
|
||||||
D{i:0;formeditorZoom:0.33}
|
D{i:0;formeditorZoom:0.5}D{i:1}D{i:2}D{i:3}D{i:4}D{i:5}D{i:6}D{i:7}
|
||||||
}
|
}
|
||||||
##^##*/
|
##^##*/
|
||||||
|
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 3.4 KiB |
@@ -0,0 +1,41 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2018 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Quick Designer Components.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:GPL$
|
||||||
|
** 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 General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3 or (at your option) any later version
|
||||||
|
** approved by the KDE Free Qt Foundation. The licenses are as published by
|
||||||
|
** the Free Software Foundation and appearing in the file LICENSE.GPL3
|
||||||
|
** included in the packaging of this file. Please review the following
|
||||||
|
** information to ensure the GNU General Public License requirements will
|
||||||
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
import QtQuick
|
||||||
|
|
||||||
|
ListModel {
|
||||||
|
id: eventListModel
|
||||||
|
|
||||||
|
ListElement {
|
||||||
|
eventId: "enterPressed"
|
||||||
|
eventDescription: "Emitted when pressing the enter button"
|
||||||
|
shortcut: "Return"
|
||||||
|
parameters: "Enter"
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,51 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2018 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Quick Designer Components.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:GPL$
|
||||||
|
** 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 General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3 or (at your option) any later version
|
||||||
|
** approved by the KDE Free Qt Foundation. The licenses are as published by
|
||||||
|
** the Free Software Foundation and appearing in the file LICENSE.GPL3
|
||||||
|
** included in the packaging of this file. Please review the following
|
||||||
|
** information to ensure the GNU General Public License requirements will
|
||||||
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
import QtQuick
|
||||||
|
import QtQuick.Studio.EventSimulator 1.0
|
||||||
|
import QtQuick.Studio.EventSystem 1.0
|
||||||
|
|
||||||
|
QtObject {
|
||||||
|
id: simulator
|
||||||
|
property bool active: true
|
||||||
|
|
||||||
|
property Timer __timer: Timer {
|
||||||
|
id: timer
|
||||||
|
interval: 100
|
||||||
|
onTriggered: {
|
||||||
|
EventSimulator.show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
EventSystem.init(Qt.resolvedUrl("EventListModel.qml"))
|
||||||
|
if (simulator.active)
|
||||||
|
timer.start()
|
||||||
|
}
|
||||||
|
}
|
@@ -1,2 +1,6 @@
|
|||||||
|
Module Loginui1
|
||||||
singleton Constants 1.0 Constants.qml
|
singleton Constants 1.0 Constants.qml
|
||||||
EventListSimulator 1.0 EventListSimulator.qml
|
EventListSimulator 1.0 EventListSimulator.qml
|
||||||
|
EventListModel 1.0 EventListModel.qml
|
||||||
|
DirectoryFontLoader 1.0 DirectoryFontLoader.qml
|
||||||
|
|
||||||
|
@@ -1,61 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
|
||||||
** Contact: https://www.qt.io/licensing/
|
|
||||||
**
|
|
||||||
** This file is part of the examples of the Qt Design Studio.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
|
||||||
** 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.
|
|
||||||
**
|
|
||||||
** BSD License Usage
|
|
||||||
** Alternatively, you may use this file under the terms of the BSD license
|
|
||||||
** as follows:
|
|
||||||
**
|
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions are
|
|
||||||
** met:
|
|
||||||
** * Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer in
|
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
|
||||||
** contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
import QtQuick
|
|
||||||
import loginui1 1.0
|
|
||||||
|
|
||||||
Item {
|
|
||||||
width: Constants.width
|
|
||||||
height: Constants.height
|
|
||||||
|
|
||||||
Screen01 {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -1,21 +1,69 @@
|
|||||||
/* File generated by Qt Creator */
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the examples of the Qt Design Studio.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** 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.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
import QmlProject 1.1
|
import QmlProject
|
||||||
|
|
||||||
Project {
|
Project {
|
||||||
mainFile: "loginui1.qml"
|
mainFile: "content/App.qml"
|
||||||
|
|
||||||
/* Include .qml, .js, and image files from current directory and subdirectories */
|
/* Include .qml, .js, and image files from current directory and subdirectories */
|
||||||
QmlFiles {
|
QmlFiles {
|
||||||
directory: "."
|
directory: "content"
|
||||||
}
|
}
|
||||||
|
|
||||||
JavaScriptFiles {
|
JavaScriptFiles {
|
||||||
directory: "."
|
directory: "content"
|
||||||
}
|
}
|
||||||
|
|
||||||
ImageFiles {
|
ImageFiles {
|
||||||
directory: "."
|
directory: "content"
|
||||||
}
|
}
|
||||||
|
|
||||||
Files {
|
Files {
|
||||||
@@ -32,9 +80,34 @@ Project {
|
|||||||
filter: "*.ttf;*.otf"
|
filter: "*.ttf;*.otf"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.wav;*.mp3"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.mp4"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.glsl;*.glslv;*.glslf;*.vsh;*.fsh;*.vert;*.frag"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.mesh"
|
||||||
|
directory: "asset_imports"
|
||||||
|
}
|
||||||
|
|
||||||
Environment {
|
Environment {
|
||||||
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
|
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
|
||||||
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
|
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
|
||||||
|
QT_LOGGING_RULES: "qt.qml.connections=false"
|
||||||
|
QT_ENABLE_HIGHDPI_SCALING: "0"
|
||||||
|
/* Useful for debugging
|
||||||
|
QSG_VISUALIZE=batches
|
||||||
|
QSG_VISUALIZE=clip
|
||||||
|
QSG_VISUALIZE=changes
|
||||||
|
QSG_VISUALIZE=overdraw
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
qt6Project: true
|
qt6Project: true
|
||||||
@@ -43,5 +116,10 @@ Project {
|
|||||||
importPaths: [ "imports", "asset_imports" ]
|
importPaths: [ "imports", "asset_imports" ]
|
||||||
|
|
||||||
/* Required for deployment */
|
/* Required for deployment */
|
||||||
targetDirectory: "/opt/loginui1"
|
targetDirectory: "/opt/Loginui1"
|
||||||
|
|
||||||
|
qdsVersion: "3.0"
|
||||||
|
|
||||||
|
/* If any modules the project imports require widgets (e.g. QtCharts), widgetApp must be true */
|
||||||
|
widgetApp: true
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +0,0 @@
|
|||||||
; This file can be edited to change the style of the application
|
|
||||||
; Read "Qt Quick Controls 2 Configuration File" for details:
|
|
||||||
; http://doc.qt.io/qt-5/qtquickcontrols2-configuration.html
|
|
||||||
|
|
||||||
[Controls]
|
|
||||||
Style=Default
|
|
@@ -1,6 +1,11 @@
|
|||||||
|
/*
|
||||||
|
* This file is automatically generated by Qt Design Studio.
|
||||||
|
* Do not change.
|
||||||
|
*/
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
** Copyright (C) 2022 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Design Studio.
|
** This file is part of the examples of the Qt Design Studio.
|
||||||
@@ -48,14 +53,12 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
import QtQuick
|
#include <QGuiApplication>
|
||||||
import loginui4 1.0
|
|
||||||
|
|
||||||
Item {
|
|
||||||
width: Constants.width
|
|
||||||
height: Constants.height
|
|
||||||
|
|
||||||
Screen01 {
|
|
||||||
}
|
|
||||||
|
|
||||||
|
void set_qt_environment()
|
||||||
|
{
|
||||||
|
qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1");
|
||||||
|
qputenv("QT_ENABLE_HIGHDPI_SCALING", "0");
|
||||||
|
qputenv("QT_LOGGING_RULES", "qt.qml.connections=false");
|
||||||
|
qputenv("QT_QUICK_CONTROLS_CONF", ":/qtquickcontrols2.conf");
|
||||||
}
|
}
|
@@ -0,0 +1,9 @@
|
|||||||
|
/*
|
||||||
|
* This file is automatically generated by Qt Design Studio.
|
||||||
|
* Do not change.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <QtQml/qqmlextensionplugin.h>
|
||||||
|
|
||||||
|
Q_IMPORT_QML_PLUGIN(contentPlugin)
|
||||||
|
Q_IMPORT_QML_PLUGIN(Loginui1Plugin)
|
62
doc/qtdesignstudio/examples/loginui1/src/main.cpp
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Quick Studio Components.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:GPL$
|
||||||
|
** 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 General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3 or (at your option) any later version
|
||||||
|
** approved by the KDE Free Qt Foundation. The licenses are as published by
|
||||||
|
** the Free Software Foundation and appearing in the file LICENSE.GPL3
|
||||||
|
** included in the packaging of this file. Please review the following
|
||||||
|
** information to ensure the GNU General Public License requirements will
|
||||||
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <QGuiApplication>
|
||||||
|
#include <QQmlApplicationEngine>
|
||||||
|
|
||||||
|
#include "app_environment.h"
|
||||||
|
#include "import_qml_plugins.h"
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
set_qt_environment();
|
||||||
|
|
||||||
|
QGuiApplication app(argc, argv);
|
||||||
|
|
||||||
|
QQmlApplicationEngine engine;
|
||||||
|
const QUrl url(u"qrc:Main/main.qml"_qs);
|
||||||
|
QObject::connect(
|
||||||
|
&engine, &QQmlApplicationEngine::objectCreated, &app,
|
||||||
|
[url](QObject *obj, const QUrl &objUrl) {
|
||||||
|
if (!obj && url == objUrl)
|
||||||
|
QCoreApplication::exit(-1);
|
||||||
|
},
|
||||||
|
Qt::QueuedConnection);
|
||||||
|
|
||||||
|
engine.addImportPath(QCoreApplication::applicationDirPath() + "/qml");
|
||||||
|
engine.addImportPath(":/");
|
||||||
|
|
||||||
|
engine.load(url);
|
||||||
|
|
||||||
|
if (engine.rootObjects().isEmpty()) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return app.exec();
|
||||||
|
}
|
75
doc/qtdesignstudio/examples/loginui2/Loginui2.qmlproject
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
import QmlProject
|
||||||
|
|
||||||
|
Project {
|
||||||
|
mainFile: "content/App.qml"
|
||||||
|
|
||||||
|
/* Include .qml, .js, and image files from current directory and subdirectories */
|
||||||
|
QmlFiles {
|
||||||
|
directory: "content"
|
||||||
|
}
|
||||||
|
|
||||||
|
JavaScriptFiles {
|
||||||
|
directory: "content"
|
||||||
|
}
|
||||||
|
|
||||||
|
ImageFiles {
|
||||||
|
directory: "content"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.conf"
|
||||||
|
files: ["qtquickcontrols2.conf"]
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "qmldir"
|
||||||
|
directory: "."
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.ttf;*.otf"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.wav;*.mp3"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.mp4"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.glsl;*.glslv;*.glslf;*.vsh;*.fsh;*.vert;*.frag"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.mesh"
|
||||||
|
directory: "asset_imports"
|
||||||
|
}
|
||||||
|
|
||||||
|
Environment {
|
||||||
|
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
|
||||||
|
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
|
||||||
|
QT_LOGGING_RULES: "qt.qml.connections=false"
|
||||||
|
QT_ENABLE_HIGHDPI_SCALING: "0"
|
||||||
|
/* Useful for debugging
|
||||||
|
QSG_VISUALIZE=batches
|
||||||
|
QSG_VISUALIZE=clip
|
||||||
|
QSG_VISUALIZE=changes
|
||||||
|
QSG_VISUALIZE=overdraw
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
qt6Project: true
|
||||||
|
|
||||||
|
/* List of plugin directories passed to QML runtime */
|
||||||
|
importPaths: [ "imports", "asset_imports" ]
|
||||||
|
|
||||||
|
/* Required for deployment */
|
||||||
|
targetDirectory: "/opt/Loginui1"
|
||||||
|
|
||||||
|
qdsVersion: "3.0"
|
||||||
|
|
||||||
|
/* If any modules the project imports require widgets (e.g. QtCharts), widgetApp must be true */
|
||||||
|
widgetApp: true
|
||||||
|
}
|
@@ -1,8 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
** Copyright (C) 2022 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Design Studio.
|
** This file is part of the examples of the Qt Design Studio.
|
||||||
@@ -49,9 +47,10 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
import QtQuick.Controls
|
import QtQuick.Controls
|
||||||
import loginui2 1.0
|
import Loginui1
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: rectangle
|
id: rectangle
|
||||||
@@ -69,7 +68,6 @@ Rectangle {
|
|||||||
|
|
||||||
Image {
|
Image {
|
||||||
id: qt_logo_green_128x128px
|
id: qt_logo_green_128x128px
|
||||||
x: 296
|
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
source: "images/qt_logo_green_128x128px.png"
|
source: "images/qt_logo_green_128x128px.png"
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
@@ -78,8 +76,6 @@ Rectangle {
|
|||||||
}
|
}
|
||||||
Text {
|
Text {
|
||||||
id: tagLine
|
id: tagLine
|
||||||
width: 541
|
|
||||||
height: 78
|
|
||||||
color: "#ffffff"
|
color: "#ffffff"
|
||||||
text: qsTr("Are you ready to explore?")
|
text: qsTr("Are you ready to explore?")
|
||||||
anchors.top: qt_logo_green_128x128px.bottom
|
anchors.top: qt_logo_green_128x128px.bottom
|
||||||
@@ -87,11 +83,11 @@ Rectangle {
|
|||||||
anchors.topMargin: 40
|
anchors.topMargin: 40
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
font.family: "Titillium Web ExtraLight"
|
font.family: "Titillium Web ExtraLight"
|
||||||
|
anchors.horizontalCenterOffset: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
id: fields
|
id: fields
|
||||||
x: 128
|
|
||||||
anchors.top: tagLine.bottom
|
anchors.top: tagLine.bottom
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
anchors.topMargin: 170
|
anchors.topMargin: 170
|
||||||
@@ -99,7 +95,7 @@ Rectangle {
|
|||||||
|
|
||||||
EntryField {
|
EntryField {
|
||||||
id: username
|
id: username
|
||||||
text: "Username or Email"
|
text: qsTr("Username or Email")
|
||||||
}
|
}
|
||||||
|
|
||||||
EntryField {
|
EntryField {
|
||||||
@@ -110,11 +106,10 @@ Rectangle {
|
|||||||
|
|
||||||
Column {
|
Column {
|
||||||
id: buttons
|
id: buttons
|
||||||
x: 102
|
y: 944
|
||||||
y: 966
|
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
anchors.bottomMargin: 100
|
anchors.bottomMargin: 50
|
||||||
spacing: 20
|
spacing: 20
|
||||||
|
|
||||||
PushButton {
|
PushButton {
|
||||||
@@ -123,7 +118,7 @@ Rectangle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
PushButton {
|
PushButton {
|
||||||
id: createAccount
|
id: creteAccount
|
||||||
text: qsTr("Create Account")
|
text: qsTr("Create Account")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -131,7 +126,7 @@ Rectangle {
|
|||||||
|
|
||||||
/*##^##
|
/*##^##
|
||||||
Designer {
|
Designer {
|
||||||
D{i:0;formeditorZoom:0.5}D{i:1}D{i:2}D{i:4}
|
D{i:0;formeditorZoom:0.66}D{i:1}D{i:2}D{i:3}D{i:5}D{i:6}D{i:4}D{i:8}D{i:9}D{i:7}
|
||||||
}
|
}
|
||||||
##^##*/
|
##^##*/
|
||||||
|
|
@@ -1,26 +0,0 @@
|
|||||||
pragma Singleton
|
|
||||||
import QtQuick
|
|
||||||
|
|
||||||
QtObject {
|
|
||||||
readonly property int width: 720
|
|
||||||
readonly property int height: 1280
|
|
||||||
|
|
||||||
property alias fontDirectory: directoryFontLoader.fontDirectory
|
|
||||||
property alias relativeFontDirectory: directoryFontLoader.relativeFontDirectory
|
|
||||||
|
|
||||||
/* Edit this comment to add your custom font */
|
|
||||||
readonly property font font: Qt.font({
|
|
||||||
family: Qt.application.font.family,
|
|
||||||
pixelSize: Qt.application.font.pixelSize
|
|
||||||
})
|
|
||||||
readonly property font largeFont: Qt.font({
|
|
||||||
family: Qt.application.font.family,
|
|
||||||
pixelSize: Qt.application.font.pixelSize * 1.6
|
|
||||||
})
|
|
||||||
|
|
||||||
readonly property color backgroundColor: "#c2c2c2"
|
|
||||||
|
|
||||||
property DirectoryFontLoader directoryFontLoader: DirectoryFontLoader {
|
|
||||||
id: directoryFontLoader
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,2 +0,0 @@
|
|||||||
singleton Constants 1.0 Constants.qml
|
|
||||||
EventListSimulator 1.0 EventListSimulator.qml
|
|
@@ -1,61 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
|
||||||
** Contact: https://www.qt.io/licensing/
|
|
||||||
**
|
|
||||||
** This file is part of the examples of the Qt Design Studio.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
|
||||||
** 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.
|
|
||||||
**
|
|
||||||
** BSD License Usage
|
|
||||||
** Alternatively, you may use this file under the terms of the BSD license
|
|
||||||
** as follows:
|
|
||||||
**
|
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions are
|
|
||||||
** met:
|
|
||||||
** * Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer in
|
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
|
||||||
** contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
import QtQuick
|
|
||||||
import loginui2 1.0
|
|
||||||
|
|
||||||
Item {
|
|
||||||
width: Constants.width
|
|
||||||
height: Constants.height
|
|
||||||
|
|
||||||
Screen01 {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -1,47 +0,0 @@
|
|||||||
/* File generated by Qt Creator */
|
|
||||||
|
|
||||||
import QmlProject 1.1
|
|
||||||
|
|
||||||
Project {
|
|
||||||
mainFile: "loginui2.qml"
|
|
||||||
|
|
||||||
/* Include .qml, .js, and image files from current directory and subdirectories */
|
|
||||||
QmlFiles {
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
JavaScriptFiles {
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
ImageFiles {
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
Files {
|
|
||||||
filter: "*.conf"
|
|
||||||
files: ["qtquickcontrols2.conf"]
|
|
||||||
}
|
|
||||||
|
|
||||||
Files {
|
|
||||||
filter: "qmldir"
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
Files {
|
|
||||||
filter: "*.ttf;*.otf"
|
|
||||||
}
|
|
||||||
|
|
||||||
Environment {
|
|
||||||
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
|
|
||||||
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
|
|
||||||
}
|
|
||||||
|
|
||||||
qt6Project: true
|
|
||||||
|
|
||||||
/* List of plugin directories passed to QML runtime */
|
|
||||||
importPaths: [ "imports", "asset_imports" ]
|
|
||||||
|
|
||||||
/* Required for deployment */
|
|
||||||
targetDirectory: "/opt/loginui1"
|
|
||||||
}
|
|
@@ -1,6 +0,0 @@
|
|||||||
; This file can be edited to change the style of the application
|
|
||||||
; Read "Qt Quick Controls 2 Configuration File" for details:
|
|
||||||
; http://doc.qt.io/qt-5/qtquickcontrols2-configuration.html
|
|
||||||
|
|
||||||
[Controls]
|
|
||||||
Style=Default
|
|
75
doc/qtdesignstudio/examples/loginui3/Loginui3.qmlproject
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
import QmlProject
|
||||||
|
|
||||||
|
Project {
|
||||||
|
mainFile: "content/App.qml"
|
||||||
|
|
||||||
|
/* Include .qml, .js, and image files from current directory and subdirectories */
|
||||||
|
QmlFiles {
|
||||||
|
directory: "content"
|
||||||
|
}
|
||||||
|
|
||||||
|
JavaScriptFiles {
|
||||||
|
directory: "content"
|
||||||
|
}
|
||||||
|
|
||||||
|
ImageFiles {
|
||||||
|
directory: "content"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.conf"
|
||||||
|
files: ["qtquickcontrols2.conf"]
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "qmldir"
|
||||||
|
directory: "."
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.ttf;*.otf"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.wav;*.mp3"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.mp4"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.glsl;*.glslv;*.glslf;*.vsh;*.fsh;*.vert;*.frag"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.mesh"
|
||||||
|
directory: "asset_imports"
|
||||||
|
}
|
||||||
|
|
||||||
|
Environment {
|
||||||
|
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
|
||||||
|
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
|
||||||
|
QT_LOGGING_RULES: "qt.qml.connections=false"
|
||||||
|
QT_ENABLE_HIGHDPI_SCALING: "0"
|
||||||
|
/* Useful for debugging
|
||||||
|
QSG_VISUALIZE=batches
|
||||||
|
QSG_VISUALIZE=clip
|
||||||
|
QSG_VISUALIZE=changes
|
||||||
|
QSG_VISUALIZE=overdraw
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
qt6Project: true
|
||||||
|
|
||||||
|
/* List of plugin directories passed to QML runtime */
|
||||||
|
importPaths: [ "imports", "asset_imports" ]
|
||||||
|
|
||||||
|
/* Required for deployment */
|
||||||
|
targetDirectory: "/opt/Loginui1"
|
||||||
|
|
||||||
|
qdsVersion: "3.0"
|
||||||
|
|
||||||
|
/* If any modules the project imports require widgets (e.g. QtCharts), widgetApp must be true */
|
||||||
|
widgetApp: true
|
||||||
|
}
|
@@ -1,8 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
** Copyright (C) 2022 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Design Studio.
|
** This file is part of the examples of the Qt Design Studio.
|
||||||
@@ -49,9 +47,10 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
import QtQuick.Controls
|
import QtQuick.Controls
|
||||||
import loginui3 1.0
|
import Loginui1
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: rectangle
|
id: rectangle
|
||||||
@@ -70,7 +69,6 @@ Rectangle {
|
|||||||
|
|
||||||
Image {
|
Image {
|
||||||
id: qt_logo_green_128x128px
|
id: qt_logo_green_128x128px
|
||||||
x: 296
|
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
source: "images/qt_logo_green_128x128px.png"
|
source: "images/qt_logo_green_128x128px.png"
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
@@ -79,8 +77,6 @@ Rectangle {
|
|||||||
}
|
}
|
||||||
Text {
|
Text {
|
||||||
id: tagLine
|
id: tagLine
|
||||||
width: 541
|
|
||||||
height: 78
|
|
||||||
color: "#ffffff"
|
color: "#ffffff"
|
||||||
text: qsTr("Are you ready to explore?")
|
text: qsTr("Are you ready to explore?")
|
||||||
anchors.top: qt_logo_green_128x128px.bottom
|
anchors.top: qt_logo_green_128x128px.bottom
|
||||||
@@ -88,11 +84,11 @@ Rectangle {
|
|||||||
anchors.topMargin: 40
|
anchors.topMargin: 40
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
font.family: "Titillium Web ExtraLight"
|
font.family: "Titillium Web ExtraLight"
|
||||||
|
anchors.horizontalCenterOffset: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
id: fields
|
id: fields
|
||||||
x: 128
|
|
||||||
anchors.top: tagLine.bottom
|
anchors.top: tagLine.bottom
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
anchors.topMargin: 170
|
anchors.topMargin: 170
|
||||||
@@ -100,7 +96,7 @@ Rectangle {
|
|||||||
|
|
||||||
EntryField {
|
EntryField {
|
||||||
id: username
|
id: username
|
||||||
text: "Username or Email"
|
text: qsTr("Username or Email")
|
||||||
}
|
}
|
||||||
|
|
||||||
EntryField {
|
EntryField {
|
||||||
@@ -110,17 +106,16 @@ Rectangle {
|
|||||||
|
|
||||||
EntryField {
|
EntryField {
|
||||||
id: repeatPassword
|
id: repeatPassword
|
||||||
text: "Repeat Password"
|
text: qsTr("Repeat Password")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
id: buttons
|
id: buttons
|
||||||
x: 102
|
y: 944
|
||||||
y: 966
|
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
anchors.bottomMargin: 100
|
anchors.bottomMargin: 50
|
||||||
spacing: 20
|
spacing: 20
|
||||||
|
|
||||||
PushButton {
|
PushButton {
|
||||||
@@ -160,7 +155,8 @@ Rectangle {
|
|||||||
|
|
||||||
/*##^##
|
/*##^##
|
||||||
Designer {
|
Designer {
|
||||||
D{i:0;formeditorZoom:0.5}
|
D{i:0;formeditorZoom:0.5}D{i:1}D{i:2}D{i:3}D{i:5}D{i:6}D{i:7}D{i:4}D{i:9}D{i:11}D{i:10}
|
||||||
|
D{i:8}
|
||||||
}
|
}
|
||||||
##^##*/
|
##^##*/
|
||||||
|
|
@@ -1,26 +0,0 @@
|
|||||||
pragma Singleton
|
|
||||||
import QtQuick
|
|
||||||
|
|
||||||
QtObject {
|
|
||||||
readonly property int width: 720
|
|
||||||
readonly property int height: 1280
|
|
||||||
|
|
||||||
property alias fontDirectory: directoryFontLoader.fontDirectory
|
|
||||||
property alias relativeFontDirectory: directoryFontLoader.relativeFontDirectory
|
|
||||||
|
|
||||||
/* Edit this comment to add your custom font */
|
|
||||||
readonly property font font: Qt.font({
|
|
||||||
family: Qt.application.font.family,
|
|
||||||
pixelSize: Qt.application.font.pixelSize
|
|
||||||
})
|
|
||||||
readonly property font largeFont: Qt.font({
|
|
||||||
family: Qt.application.font.family,
|
|
||||||
pixelSize: Qt.application.font.pixelSize * 1.6
|
|
||||||
})
|
|
||||||
|
|
||||||
readonly property color backgroundColor: "#c2c2c2"
|
|
||||||
|
|
||||||
property DirectoryFontLoader directoryFontLoader: DirectoryFontLoader {
|
|
||||||
id: directoryFontLoader
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,2 +0,0 @@
|
|||||||
singleton Constants 1.0 Constants.qml
|
|
||||||
EventListSimulator 1.0 EventListSimulator.qml
|
|
@@ -1,61 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
|
||||||
** Contact: https://www.qt.io/licensing/
|
|
||||||
**
|
|
||||||
** This file is part of the examples of the Qt Design Studio.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
|
||||||
** 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.
|
|
||||||
**
|
|
||||||
** BSD License Usage
|
|
||||||
** Alternatively, you may use this file under the terms of the BSD license
|
|
||||||
** as follows:
|
|
||||||
**
|
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions are
|
|
||||||
** met:
|
|
||||||
** * Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer in
|
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
|
||||||
** contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
import QtQuick
|
|
||||||
import loginui3 1.0
|
|
||||||
|
|
||||||
Item {
|
|
||||||
width: Constants.width
|
|
||||||
height: Constants.height
|
|
||||||
|
|
||||||
Screen01 {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -1,47 +0,0 @@
|
|||||||
/* File generated by Qt Creator */
|
|
||||||
|
|
||||||
import QmlProject 1.1
|
|
||||||
|
|
||||||
Project {
|
|
||||||
mainFile: "loginui3.qml"
|
|
||||||
|
|
||||||
/* Include .qml, .js, and image files from current directory and subdirectories */
|
|
||||||
QmlFiles {
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
JavaScriptFiles {
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
ImageFiles {
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
Files {
|
|
||||||
filter: "*.conf"
|
|
||||||
files: ["qtquickcontrols2.conf"]
|
|
||||||
}
|
|
||||||
|
|
||||||
Files {
|
|
||||||
filter: "qmldir"
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
Files {
|
|
||||||
filter: "*.ttf;*.otf"
|
|
||||||
}
|
|
||||||
|
|
||||||
Environment {
|
|
||||||
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
|
|
||||||
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
|
|
||||||
}
|
|
||||||
|
|
||||||
qt6Project: true
|
|
||||||
|
|
||||||
/* List of plugin directories passed to QML runtime */
|
|
||||||
importPaths: [ "imports", "asset_imports" ]
|
|
||||||
|
|
||||||
/* Required for deployment */
|
|
||||||
targetDirectory: "/opt/loginui1"
|
|
||||||
}
|
|
@@ -1,2 +0,0 @@
|
|||||||
[Controls]
|
|
||||||
Style=Default
|
|
75
doc/qtdesignstudio/examples/loginui4/Loginui4.qmlproject
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
import QmlProject
|
||||||
|
|
||||||
|
Project {
|
||||||
|
mainFile: "content/App.qml"
|
||||||
|
|
||||||
|
/* Include .qml, .js, and image files from current directory and subdirectories */
|
||||||
|
QmlFiles {
|
||||||
|
directory: "content"
|
||||||
|
}
|
||||||
|
|
||||||
|
JavaScriptFiles {
|
||||||
|
directory: "content"
|
||||||
|
}
|
||||||
|
|
||||||
|
ImageFiles {
|
||||||
|
directory: "content"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.conf"
|
||||||
|
files: ["qtquickcontrols2.conf"]
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "qmldir"
|
||||||
|
directory: "."
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.ttf;*.otf"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.wav;*.mp3"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.mp4"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.glsl;*.glslv;*.glslf;*.vsh;*.fsh;*.vert;*.frag"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.mesh"
|
||||||
|
directory: "asset_imports"
|
||||||
|
}
|
||||||
|
|
||||||
|
Environment {
|
||||||
|
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
|
||||||
|
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
|
||||||
|
QT_LOGGING_RULES: "qt.qml.connections=false"
|
||||||
|
QT_ENABLE_HIGHDPI_SCALING: "0"
|
||||||
|
/* Useful for debugging
|
||||||
|
QSG_VISUALIZE=batches
|
||||||
|
QSG_VISUALIZE=clip
|
||||||
|
QSG_VISUALIZE=changes
|
||||||
|
QSG_VISUALIZE=overdraw
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
qt6Project: true
|
||||||
|
|
||||||
|
/* List of plugin directories passed to QML runtime */
|
||||||
|
importPaths: [ "imports", "asset_imports" ]
|
||||||
|
|
||||||
|
/* Required for deployment */
|
||||||
|
targetDirectory: "/opt/Loginui1"
|
||||||
|
|
||||||
|
qdsVersion: "3.0"
|
||||||
|
|
||||||
|
/* If any modules the project imports require widgets (e.g. QtCharts), widgetApp must be true */
|
||||||
|
widgetApp: true
|
||||||
|
}
|
@@ -1,57 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
|
||||||
** Contact: https://www.qt.io/licensing/
|
|
||||||
**
|
|
||||||
** This file is part of the examples of the Qt Design Studio.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
|
||||||
** 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.
|
|
||||||
**
|
|
||||||
** BSD License Usage
|
|
||||||
** Alternatively, you may use this file under the terms of the BSD license
|
|
||||||
** as follows:
|
|
||||||
**
|
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions are
|
|
||||||
** met:
|
|
||||||
** * Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer in
|
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
|
||||||
** contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
import QtQuick.Controls
|
import QtQuick.Controls
|
||||||
import loginui4 1.0
|
import Loginui1
|
||||||
import QtQuick.Timeline 1.0
|
import QtQuick.Timeline 1.0
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
@@ -71,7 +20,6 @@ Rectangle {
|
|||||||
|
|
||||||
Image {
|
Image {
|
||||||
id: qt_logo_green_128x128px
|
id: qt_logo_green_128x128px
|
||||||
x: 296
|
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
source: "images/qt_logo_green_128x128px.png"
|
source: "images/qt_logo_green_128x128px.png"
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
@@ -80,8 +28,6 @@ Rectangle {
|
|||||||
}
|
}
|
||||||
Text {
|
Text {
|
||||||
id: tagLine
|
id: tagLine
|
||||||
width: 541
|
|
||||||
height: 78
|
|
||||||
color: "#ffffff"
|
color: "#ffffff"
|
||||||
text: qsTr("Are you ready to explore?")
|
text: qsTr("Are you ready to explore?")
|
||||||
anchors.top: qt_logo_green_128x128px.bottom
|
anchors.top: qt_logo_green_128x128px.bottom
|
||||||
@@ -89,30 +35,29 @@ Rectangle {
|
|||||||
anchors.topMargin: 40
|
anchors.topMargin: 40
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
font.family: "Titillium Web ExtraLight"
|
font.family: "Titillium Web ExtraLight"
|
||||||
|
anchors.horizontalCenterOffset: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
EntryField {
|
EntryField {
|
||||||
id: username
|
id: username
|
||||||
x: 110
|
text: qsTr("Username or Email")
|
||||||
text: "Username or Email"
|
|
||||||
anchors.top: tagLine.bottom
|
anchors.top: tagLine.bottom
|
||||||
anchors.topMargin: 170
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
anchors.topMargin: 170
|
||||||
}
|
}
|
||||||
|
|
||||||
EntryField {
|
EntryField {
|
||||||
id: password
|
id: password
|
||||||
x: 110
|
|
||||||
text: qsTr("Password")
|
text: qsTr("Password")
|
||||||
anchors.top: username.bottom
|
anchors.top: username.bottom
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
anchors.topMargin: 20
|
anchors.topMargin: 21
|
||||||
}
|
}
|
||||||
|
|
||||||
EntryField {
|
EntryField {
|
||||||
id: repeatPassword
|
id: repeatPassword
|
||||||
x: 110
|
opacity: 0
|
||||||
text: "Repeat Password"
|
text: qsTr("Repeat Password")
|
||||||
anchors.top: password.bottom
|
anchors.top: password.bottom
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
anchors.topMargin: 20
|
anchors.topMargin: 20
|
||||||
@@ -120,11 +65,10 @@ Rectangle {
|
|||||||
|
|
||||||
Column {
|
Column {
|
||||||
id: buttons
|
id: buttons
|
||||||
x: 102
|
y: 944
|
||||||
y: 966
|
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
anchors.bottomMargin: 100
|
anchors.bottomMargin: 50
|
||||||
spacing: 20
|
spacing: 20
|
||||||
|
|
||||||
PushButton {
|
PushButton {
|
||||||
@@ -148,70 +92,68 @@ Rectangle {
|
|||||||
animations: [
|
animations: [
|
||||||
TimelineAnimation {
|
TimelineAnimation {
|
||||||
id: toCreateAccountState
|
id: toCreateAccountState
|
||||||
|
duration: 1000
|
||||||
running: false
|
running: false
|
||||||
loops: 1
|
loops: 1
|
||||||
duration: 1000
|
|
||||||
to: 1000
|
to: 1000
|
||||||
from: 0
|
from: 0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
endFrame: 1000
|
endFrame: 1000
|
||||||
startFrame: 0
|
|
||||||
enabled: true
|
enabled: true
|
||||||
|
startFrame: 0
|
||||||
|
|
||||||
KeyframeGroup {
|
KeyframeGroup {
|
||||||
target: repeatPassword
|
target: repeatPassword
|
||||||
property: "opacity"
|
property: "opacity"
|
||||||
|
|
||||||
Keyframe {
|
Keyframe {
|
||||||
frame: 0
|
|
||||||
value: 0
|
value: 0
|
||||||
|
frame: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
Keyframe {
|
Keyframe {
|
||||||
frame: 999
|
|
||||||
value: 1
|
value: 1
|
||||||
|
frame: 1000
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
KeyframeGroup {
|
KeyframeGroup {
|
||||||
target: createAccount
|
target: createAccount
|
||||||
property: "opacity"
|
property: "opacity"
|
||||||
|
Keyframe {
|
||||||
|
value: 1
|
||||||
|
frame: 0
|
||||||
|
}
|
||||||
|
|
||||||
Keyframe {
|
Keyframe {
|
||||||
frame: 1000
|
|
||||||
value: 0
|
value: 0
|
||||||
|
frame: 1000
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
KeyframeGroup {
|
KeyframeGroup {
|
||||||
target: repeatPassword
|
target: repeatPassword
|
||||||
property: "anchors.topMargin"
|
property: "anchors.topMargin"
|
||||||
|
|
||||||
Keyframe {
|
Keyframe {
|
||||||
|
value: -100
|
||||||
frame: 0
|
frame: 0
|
||||||
value: -40
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Keyframe {
|
Keyframe {
|
||||||
easing.bezierCurve: [0.39,0.575,0.565,1,1,1]
|
value: -100
|
||||||
frame: 999
|
frame: 4
|
||||||
|
}
|
||||||
|
|
||||||
|
Keyframe {
|
||||||
|
easing.bezierCurve: [0.39, 0.575, 0.565, 1, 1, 1]
|
||||||
value: 20
|
value: 20
|
||||||
|
frame: 999
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
states: [
|
states: [
|
||||||
State {
|
State {
|
||||||
name: "login"
|
name: "login"
|
||||||
|
|
||||||
PropertyChanges {
|
|
||||||
target: timeline
|
|
||||||
enabled: true
|
|
||||||
}
|
|
||||||
|
|
||||||
PropertyChanges {
|
|
||||||
target: toCreateAccountState
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
State {
|
State {
|
||||||
name: "createAccount"
|
name: "createAccount"
|
||||||
@@ -231,6 +173,8 @@ Rectangle {
|
|||||||
|
|
||||||
/*##^##
|
/*##^##
|
||||||
Designer {
|
Designer {
|
||||||
D{i:0;formeditorZoom:0.5}D{i:6}D{i:9}D{i:11}
|
D{i:0;formeditorZoom:0.5}D{i:1}D{i:2}D{i:3}D{i:4}D{i:5}D{i:6}D{i:8}D{i:10}D{i:9}D{i:7}
|
||||||
|
D{i:11}
|
||||||
}
|
}
|
||||||
##^##*/
|
##^##*/
|
||||||
|
|
@@ -1,26 +0,0 @@
|
|||||||
pragma Singleton
|
|
||||||
import QtQuick
|
|
||||||
|
|
||||||
QtObject {
|
|
||||||
readonly property int width: 720
|
|
||||||
readonly property int height: 1280
|
|
||||||
|
|
||||||
property alias fontDirectory: directoryFontLoader.fontDirectory
|
|
||||||
property alias relativeFontDirectory: directoryFontLoader.relativeFontDirectory
|
|
||||||
|
|
||||||
/* Edit this comment to add your custom font */
|
|
||||||
readonly property font font: Qt.font({
|
|
||||||
family: Qt.application.font.family,
|
|
||||||
pixelSize: Qt.application.font.pixelSize
|
|
||||||
})
|
|
||||||
readonly property font largeFont: Qt.font({
|
|
||||||
family: Qt.application.font.family,
|
|
||||||
pixelSize: Qt.application.font.pixelSize * 1.6
|
|
||||||
})
|
|
||||||
|
|
||||||
readonly property color backgroundColor: "#c2c2c2"
|
|
||||||
|
|
||||||
property DirectoryFontLoader directoryFontLoader: DirectoryFontLoader {
|
|
||||||
id: directoryFontLoader
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,2 +0,0 @@
|
|||||||
singleton Constants 1.0 Constants.qml
|
|
||||||
EventListSimulator 1.0 EventListSimulator.qml
|
|
@@ -1,47 +0,0 @@
|
|||||||
/* File generated by Qt Creator */
|
|
||||||
|
|
||||||
import QmlProject 1.1
|
|
||||||
|
|
||||||
Project {
|
|
||||||
mainFile: "loginui4.qml"
|
|
||||||
|
|
||||||
/* Include .qml, .js, and image files from current directory and subdirectories */
|
|
||||||
QmlFiles {
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
JavaScriptFiles {
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
ImageFiles {
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
Files {
|
|
||||||
filter: "*.conf"
|
|
||||||
files: ["qtquickcontrols2.conf"]
|
|
||||||
}
|
|
||||||
|
|
||||||
Files {
|
|
||||||
filter: "qmldir"
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
Files {
|
|
||||||
filter: "*.ttf;*.otf"
|
|
||||||
}
|
|
||||||
|
|
||||||
Environment {
|
|
||||||
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
|
|
||||||
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
|
|
||||||
}
|
|
||||||
|
|
||||||
qt6Project: true
|
|
||||||
|
|
||||||
/* List of plugin directories passed to QML runtime */
|
|
||||||
importPaths: [ "imports", "asset_imports" ]
|
|
||||||
|
|
||||||
/* Required for deployment */
|
|
||||||
targetDirectory: "/opt/loginui4"
|
|
||||||
}
|
|
@@ -1,2 +0,0 @@
|
|||||||
[Controls]
|
|
||||||
Style=Default
|
|
Before Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 3.8 KiB |
@@ -63,12 +63,14 @@
|
|||||||
\li \l{Generating Qt Translation Source Files}
|
\li \l{Generating Qt Translation Source Files}
|
||||||
\row
|
\row
|
||||||
\li \inlineimage icons/project-translation-test.png
|
\li \inlineimage icons/project-translation-test.png
|
||||||
\li Run project translation test.
|
\li Run translation test for several documents and create a test report.
|
||||||
\li \l{Running the Project Translation Test}
|
\li \l{Running Translation Test for Several Documents}
|
||||||
\row
|
\row
|
||||||
\li \inlineimage icons/qml-translation-test.png
|
\li \inlineimage icons/qml-translation-test.png
|
||||||
\li Run QML translation test to find missing and elided translations.
|
\li Run translation test for the currently open document. This test
|
||||||
\li \l{Running the QML Translation Test}
|
shows translation warnings in \uicontrol{From Editor} and creates a
|
||||||
|
test report.
|
||||||
|
\li \l{Running Translation Test for a Single Document}
|
||||||
\row
|
\row
|
||||||
\li \inlineimage icons/export-translations.png
|
\li \inlineimage icons/export-translations.png
|
||||||
\li Export all translations used in your project or all translations
|
\li Export all translations used in your project or all translations
|
||||||
@@ -93,8 +95,8 @@
|
|||||||
"translation": "Password"
|
"translation": "Password"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"language": "sv",
|
"language": "fi",
|
||||||
"translation": "Lösenord"
|
"translation": "Salasana"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -120,8 +122,8 @@
|
|||||||
"translation": "Password"
|
"translation": "Password"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"language": "sv",
|
"language": "fi",
|
||||||
"translation": "Lösenord"
|
"translation": "Salasana"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
\endcode
|
\endcode
|
||||||
@@ -139,14 +141,14 @@
|
|||||||
in the \uicontrol Translations view. The files are generated
|
in the \uicontrol Translations view. The files are generated
|
||||||
in \e{<project-folder>/i18n}.
|
in \e{<project-folder>/i18n}.
|
||||||
|
|
||||||
\section1 Running the QML Translation Test
|
\section1 Running Translation Test for a Single Document
|
||||||
|
|
||||||
You can run the QML language test to find missing
|
You can run the translation test to find missing translations
|
||||||
and elided translations. Running the QML language test
|
and translations where the text exceeds the text element boundaries. Running
|
||||||
is a quick way to check the translations in the application you have open in
|
the test is a quick way to check the translations in the document you have
|
||||||
\uicontrol{Form Editor} as it highlights errors in the UI.
|
open in \uicontrol{Form Editor} as it highlights errors in the UI.
|
||||||
|
|
||||||
To run the QML translation test:
|
To run the test for the currently open document:
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
\li In the \uicontrol Translations view, select
|
\li In the \uicontrol Translations view, select
|
||||||
@@ -155,12 +157,11 @@
|
|||||||
\li Select the tests to run and the highlight color
|
\li Select the tests to run and the highlight color
|
||||||
for each test:
|
for each test:
|
||||||
\list
|
\list
|
||||||
\li \uicontrol{Show Translation Warnings} highlights missing
|
\li \uicontrol{Success} highlights translations without any warnings.
|
||||||
translations.
|
\li \uicontrol{Missing translation} highlights translations that are
|
||||||
\li \uicontrol{Show Found Translations} highlights all translations
|
missing for one or more languages.
|
||||||
that are correct.
|
\li \uicontrol{Exceeds boundaries} highlights translations where
|
||||||
\li \uicontrol{Show Elide Warnings} highlights all translations where
|
the text is too long to fit in the text object.
|
||||||
the text is too long to fit in the text object and therefore is elided.
|
|
||||||
\endlist
|
\endlist
|
||||||
\image translation-tester.png
|
\image translation-tester.png
|
||||||
\li Select \uicontrol{Run Tests}.
|
\li Select \uicontrol{Run Tests}.
|
||||||
@@ -205,16 +206,21 @@
|
|||||||
The report shows the type of error as well as line and column of the
|
The report shows the type of error as well as line and column of the
|
||||||
affected text element in the \e{ui.qml} file.
|
affected text element in the \e{ui.qml} file.
|
||||||
|
|
||||||
\section1 Running the Project Translation Test
|
\section1 Running Translation Test for Several Documents
|
||||||
|
|
||||||
You can run the project translation test on several \e{.ui.qml} files
|
You can run the project translation test on several \e{.ui.qml} files
|
||||||
at the same time. \QDS runs the same tests as during the
|
at the same time. \QDS runs the same tests as during the
|
||||||
\l{Running the QML Translation Test}{QML Translation Test} and generates the
|
\l{Running Translation Test for a Single Document}{Translation Test} and
|
||||||
same test reports but does not highlight errors in the UI.
|
generates the same test reports but does not highlight errors in the UI.
|
||||||
|
|
||||||
To run the project translation test, select
|
To run the translation test for several documents:
|
||||||
|
\list 1
|
||||||
|
\li Select
|
||||||
\inlineimage icons/project-translation-test.png
|
\inlineimage icons/project-translation-test.png
|
||||||
in the \uicontrol Translations view.
|
in the \uicontrol Translations view.
|
||||||
|
\li Select the files that you want to include in the test.
|
||||||
|
\li Select \uicontrol{Run Tests}.
|
||||||
|
\endlist
|
||||||
|
|
||||||
\section1 Exporting Translations in Other Ways
|
\section1 Exporting Translations in Other Ways
|
||||||
|
|
||||||
|
@@ -872,6 +872,13 @@ Item {
|
|||||||
camera: viewRoot.usePerspective ? overlayPerspectiveCamera : overlayOrthoCamera
|
camera: viewRoot.usePerspective ? overlayPerspectiveCamera : overlayOrthoCamera
|
||||||
importScene: overlayScene
|
importScene: overlayScene
|
||||||
z: 2
|
z: 2
|
||||||
|
|
||||||
|
environment: sceneEnv
|
||||||
|
SceneEnvironment {
|
||||||
|
id: sceneEnv
|
||||||
|
antialiasingMode: SceneEnvironment.MSAA
|
||||||
|
antialiasingQuality: SceneEnvironment.High
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Overlay2D {
|
Overlay2D {
|
||||||
|
@@ -50,6 +50,13 @@ View3D {
|
|||||||
thresPerc = (grid_thresholds[thresIdx] - cameraZoomFactor) / (grid_thresholds[thresIdx] - grid_thresholds[thresIdx - 1]);
|
thresPerc = (grid_thresholds[thresIdx] - cameraZoomFactor) / (grid_thresholds[thresIdx] - grid_thresholds[thresIdx - 1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
environment: sceneEnv
|
||||||
|
SceneEnvironment {
|
||||||
|
id: sceneEnv
|
||||||
|
antialiasingMode: SceneEnvironment.MSAA
|
||||||
|
antialiasingQuality: SceneEnvironment.High
|
||||||
|
}
|
||||||
|
|
||||||
Node {
|
Node {
|
||||||
id: sceneHelpers
|
id: sceneHelpers
|
||||||
|
|
||||||
|
@@ -142,6 +142,16 @@ void CameraGeometry::doUpdateGeometry()
|
|||||||
if (!QQuick3DObjectPrivate::get(m_camera)->spatialNode) {
|
if (!QQuick3DObjectPrivate::get(m_camera)->spatialNode) {
|
||||||
// Doing explicit viewport mapping forces cameraNode creation
|
// Doing explicit viewport mapping forces cameraNode creation
|
||||||
m_camera->mapToViewport({}, m_viewPortRect.width(), m_viewPortRect.height());
|
m_camera->mapToViewport({}, m_viewPortRect.width(), m_viewPortRect.height());
|
||||||
|
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
if (!m_nodeCreationUpdateDone) {
|
||||||
|
// Post-node creation update is done only once to avoid infinite loop in case the node
|
||||||
|
// creation fails.
|
||||||
|
m_nodeCreationUpdateDone = true;
|
||||||
|
m_cameraUpdatePending = true;
|
||||||
|
update();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
GeometryBase::doUpdateGeometry();
|
GeometryBase::doUpdateGeometry();
|
||||||
|
@@ -67,6 +67,9 @@ private:
|
|||||||
QQuick3DCamera *m_camera = nullptr;
|
QQuick3DCamera *m_camera = nullptr;
|
||||||
QRectF m_viewPortRect;
|
QRectF m_viewPortRect;
|
||||||
bool m_cameraUpdatePending = false;
|
bool m_cameraUpdatePending = false;
|
||||||
|
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
bool m_nodeCreationUpdateDone = false;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -729,7 +729,8 @@ void MouseArea3D::applyFreeRotation(QQuick3DNode *node, const QVector3D &startRo
|
|||||||
if (dragVector.length() < 0.001f)
|
if (dragVector.length() < 0.001f)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const float *dataPtr(sceneTransform().data());
|
const auto &transform = sceneTransform();
|
||||||
|
const float *dataPtr(transform.data());
|
||||||
QVector3D xAxis = QVector3D(dataPtr[0], dataPtr[1], dataPtr[2]).normalized();
|
QVector3D xAxis = QVector3D(dataPtr[0], dataPtr[1], dataPtr[2]).normalized();
|
||||||
QVector3D yAxis = QVector3D(dataPtr[4], dataPtr[5], dataPtr[6]).normalized();
|
QVector3D yAxis = QVector3D(dataPtr[4], dataPtr[5], dataPtr[6]).normalized();
|
||||||
QVector3D finalAxis = (dragVector.x() * yAxis + dragVector.y() * xAxis);
|
QVector3D finalAxis = (dragVector.x() * yAxis + dragVector.y() * xAxis);
|
||||||
@@ -1029,7 +1030,8 @@ void MouseArea3D::setHovering(bool enable)
|
|||||||
|
|
||||||
QVector3D MouseArea3D::getNormal() const
|
QVector3D MouseArea3D::getNormal() const
|
||||||
{
|
{
|
||||||
const float *dataPtr(sceneTransform().data());
|
const auto &transform = sceneTransform();
|
||||||
|
const float *dataPtr(transform.data());
|
||||||
return QVector3D(dataPtr[8], dataPtr[9], dataPtr[10]).normalized();
|
return QVector3D(dataPtr[8], dataPtr[9], dataPtr[10]).normalized();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -241,7 +241,7 @@ int internalMain(QGuiApplication *application)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(ENABLE_CRASHPAD) && defined(Q_OS_WIN)
|
#if defined(ENABLE_CRASHPAD) && defined(Q_OS_WIN)
|
||||||
startCrashpad();
|
/* startCrashpad(); */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
new QmlDesigner::Qt5NodeInstanceClientProxy(application);
|
new QmlDesigner::Qt5NodeInstanceClientProxy(application);
|
||||||
|
@@ -36,7 +36,9 @@ Item {
|
|||||||
|
|
||||||
property var selectedAssets: ({})
|
property var selectedAssets: ({})
|
||||||
property int allExpandedState: 0
|
property int allExpandedState: 0
|
||||||
property string delFilePath: ""
|
property string contextFilePath: ""
|
||||||
|
property var contextDir: undefined
|
||||||
|
property bool isDirContextMenu: false
|
||||||
|
|
||||||
DropArea {
|
DropArea {
|
||||||
id: dropArea
|
id: dropArea
|
||||||
@@ -67,6 +69,19 @@ Item {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MouseArea { // right clicking the empty area of the view
|
||||||
|
anchors.fill: parent
|
||||||
|
acceptedButtons: Qt.RightButton
|
||||||
|
onClicked: {
|
||||||
|
if (!assetsModel.isEmpty) {
|
||||||
|
contextFilePath = ""
|
||||||
|
contextDir = assetsModel.rootDir()
|
||||||
|
isDirContextMenu = false
|
||||||
|
contextMenu.popup()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// called from C++ to close context menu on focus out
|
// called from C++ to close context menu on focus out
|
||||||
function handleViewFocusOut()
|
function handleViewFocusOut()
|
||||||
{
|
{
|
||||||
@@ -75,9 +90,139 @@ Item {
|
|||||||
selectedAssetsChanged()
|
selectedAssetsChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Dialog {
|
||||||
|
id: newFolderDialog
|
||||||
|
|
||||||
|
title: qsTr("Create new folder")
|
||||||
|
anchors.centerIn: parent
|
||||||
|
closePolicy: Popup.CloseOnEscape
|
||||||
|
modal: true
|
||||||
|
|
||||||
|
contentItem: Column {
|
||||||
|
spacing: 2
|
||||||
|
|
||||||
|
Row {
|
||||||
|
Text {
|
||||||
|
text: qsTr("Folder Name: ")
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
color: StudioTheme.Values.themeTextColor
|
||||||
|
}
|
||||||
|
|
||||||
|
StudioControls.TextField {
|
||||||
|
id: folderName
|
||||||
|
|
||||||
|
actionIndicator.visible: false
|
||||||
|
translationIndicator.visible: false
|
||||||
|
|
||||||
|
Keys.onEnterPressed: btnCreate.onClicked()
|
||||||
|
Keys.onReturnPressed: btnCreate.onClicked()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: qsTr("Folder Name cannot be empty.")
|
||||||
|
color: "#ff0000"
|
||||||
|
anchors.right: parent.right
|
||||||
|
visible: folderName.text === ""
|
||||||
|
}
|
||||||
|
|
||||||
|
Item { // spacer
|
||||||
|
width: 1
|
||||||
|
height: 20
|
||||||
|
}
|
||||||
|
|
||||||
|
Row {
|
||||||
|
anchors.right: parent.right
|
||||||
|
|
||||||
|
Button {
|
||||||
|
id: btnCreate
|
||||||
|
|
||||||
|
text: qsTr("Create")
|
||||||
|
enabled: folderName.text !== ""
|
||||||
|
onClicked: {
|
||||||
|
assetsModel.addNewFolder(contextDir.dirPath + '/' + folderName.text)
|
||||||
|
newFolderDialog.accept()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Button {
|
||||||
|
text: qsTr("Cancel")
|
||||||
|
onClicked: newFolderDialog.reject()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onOpened: {
|
||||||
|
folderName.text = "New folder"
|
||||||
|
folderName.selectAll()
|
||||||
|
folderName.forceActiveFocus()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Dialog {
|
||||||
|
id: confirmDeleteFolderDialog
|
||||||
|
|
||||||
|
title: qsTr("Folder not empty")
|
||||||
|
anchors.centerIn: parent
|
||||||
|
closePolicy: Popup.CloseOnEscape
|
||||||
|
implicitWidth: 300
|
||||||
|
modal: true
|
||||||
|
|
||||||
|
contentItem: Column {
|
||||||
|
spacing: 20
|
||||||
|
width: parent.width
|
||||||
|
|
||||||
|
Text {
|
||||||
|
id: folderNotEmpty
|
||||||
|
|
||||||
|
text: qsTr("Folder '%1' is not empty. Are you sure you want to delete it?")
|
||||||
|
.arg(contextDir ? contextDir.dirName : "")
|
||||||
|
color: StudioTheme.Values.themeTextColor
|
||||||
|
wrapMode: Text.WordWrap
|
||||||
|
width: confirmDeleteFolderDialog.width
|
||||||
|
leftPadding: 10
|
||||||
|
rightPadding: 10
|
||||||
|
|
||||||
|
Keys.onEnterPressed: btnDelete.onClicked()
|
||||||
|
Keys.onReturnPressed: btnDelete.onClicked()
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: qsTr("If the folder has assets in use, deleting it might cause the project to not work correctly.")
|
||||||
|
color: StudioTheme.Values.themeTextColor
|
||||||
|
wrapMode: Text.WordWrap
|
||||||
|
width: confirmDeleteFolderDialog.width
|
||||||
|
leftPadding: 10
|
||||||
|
rightPadding: 10
|
||||||
|
}
|
||||||
|
|
||||||
|
Row {
|
||||||
|
anchors.right: parent.right
|
||||||
|
Button {
|
||||||
|
id: btnDelete
|
||||||
|
|
||||||
|
text: qsTr("Delete")
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
assetsModel.deleteFolder(contextDir.dirPath)
|
||||||
|
confirmDeleteFolderDialog.accept()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Button {
|
||||||
|
text: qsTr("Cancel")
|
||||||
|
onClicked: confirmDeleteFolderDialog.reject()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onOpened: folderNotEmpty.forceActiveFocus()
|
||||||
|
}
|
||||||
|
|
||||||
ScrollView { // TODO: experiment using ListView instead of ScrollView + Column
|
ScrollView { // TODO: experiment using ListView instead of ScrollView + Column
|
||||||
id: assetsView
|
id: assetsView
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
interactive: assetsView.verticalScrollBarVisible
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
StudioControls.Menu {
|
StudioControls.Menu {
|
||||||
@@ -86,7 +231,7 @@ Item {
|
|||||||
StudioControls.MenuItem {
|
StudioControls.MenuItem {
|
||||||
text: qsTr("Expand All")
|
text: qsTr("Expand All")
|
||||||
enabled: allExpandedState !== 1
|
enabled: allExpandedState !== 1
|
||||||
visible: !delFilePath
|
visible: isDirContextMenu
|
||||||
height: visible ? implicitHeight : 0
|
height: visible ? implicitHeight : 0
|
||||||
onTriggered: assetsModel.toggleExpandAll(true)
|
onTriggered: assetsModel.toggleExpandAll(true)
|
||||||
}
|
}
|
||||||
@@ -94,22 +239,51 @@ Item {
|
|||||||
StudioControls.MenuItem {
|
StudioControls.MenuItem {
|
||||||
text: qsTr("Collapse All")
|
text: qsTr("Collapse All")
|
||||||
enabled: allExpandedState !== 2
|
enabled: allExpandedState !== 2
|
||||||
visible: !delFilePath
|
visible: isDirContextMenu
|
||||||
height: visible ? implicitHeight : 0
|
height: visible ? implicitHeight : 0
|
||||||
onTriggered: assetsModel.toggleExpandAll(false)
|
onTriggered: assetsModel.toggleExpandAll(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
StudioControls.MenuSeparator {
|
||||||
|
visible: isDirContextMenu
|
||||||
|
height: visible ? StudioTheme.Values.border : 0
|
||||||
|
}
|
||||||
|
|
||||||
StudioControls.MenuItem {
|
StudioControls.MenuItem {
|
||||||
text: qsTr("Delete File")
|
text: qsTr("Delete File")
|
||||||
visible: delFilePath
|
visible: contextFilePath
|
||||||
height: visible ? implicitHeight : 0
|
height: visible ? implicitHeight : 0
|
||||||
onTriggered: assetsModel.removeFile(delFilePath)
|
onTriggered: assetsModel.deleteFile(contextFilePath)
|
||||||
|
}
|
||||||
|
|
||||||
|
StudioControls.MenuSeparator {
|
||||||
|
visible: contextFilePath
|
||||||
|
height: visible ? StudioTheme.Values.border : 0
|
||||||
|
}
|
||||||
|
|
||||||
|
StudioControls.MenuItem {
|
||||||
|
text: qsTr("New Folder")
|
||||||
|
onTriggered: newFolderDialog.open()
|
||||||
|
}
|
||||||
|
|
||||||
|
StudioControls.MenuItem {
|
||||||
|
text: qsTr("Delete Folder")
|
||||||
|
visible: isDirContextMenu
|
||||||
|
height: visible ? implicitHeight : 0
|
||||||
|
onTriggered: {
|
||||||
|
var dirEmpty = !(contextDir.dirsModel && contextDir.dirsModel.rowCount() > 0)
|
||||||
|
&& !(contextDir.filesModel && contextDir.filesModel.rowCount() > 0);
|
||||||
|
|
||||||
|
if (dirEmpty)
|
||||||
|
assetsModel.deleteFolder(contextDir.dirPath)
|
||||||
|
else
|
||||||
|
confirmDeleteFolderDialog.open()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
spacing: 2
|
|
||||||
Repeater {
|
Repeater {
|
||||||
model: assetsModel // context property
|
model: assetsModel // context property
|
||||||
delegate: dirSection
|
delegate: dirSection
|
||||||
@@ -120,31 +294,35 @@ Item {
|
|||||||
|
|
||||||
Section {
|
Section {
|
||||||
width: assetsView.width -
|
width: assetsView.width -
|
||||||
(assetsView.verticalScrollBarVisible ? assetsView.verticalThickness : 0)
|
(assetsView.verticalScrollBarVisible ? assetsView.verticalThickness : 0) - 5
|
||||||
caption: dirName
|
caption: dirName
|
||||||
sectionHeight: 30
|
sectionHeight: 30
|
||||||
sectionFontSize: 15
|
sectionFontSize: 15
|
||||||
levelShift: 20
|
|
||||||
leftPadding: 0
|
leftPadding: 0
|
||||||
|
topPadding: dirDepth > 0 ? 5 : 0
|
||||||
|
bottomPadding: 0
|
||||||
hideHeader: dirDepth === 0
|
hideHeader: dirDepth === 0
|
||||||
showLeftBorder: true
|
showLeftBorder: dirDepth > 0
|
||||||
expanded: dirExpanded
|
expanded: dirExpanded
|
||||||
visible: dirVisible
|
visible: !assetsModel.isEmpty && dirVisible
|
||||||
expandOnClick: false
|
expandOnClick: false
|
||||||
useDefaulContextMenu: false
|
useDefaulContextMenu: false
|
||||||
|
|
||||||
onToggleExpand: {
|
onToggleExpand: {
|
||||||
dirExpanded = !dirExpanded
|
dirExpanded = !dirExpanded
|
||||||
}
|
}
|
||||||
|
|
||||||
onShowContextMenu: {
|
onShowContextMenu: {
|
||||||
delFilePath = ""
|
contextFilePath = ""
|
||||||
|
contextDir = model
|
||||||
|
isDirContextMenu = true
|
||||||
allExpandedState = assetsModel.getAllExpandedState()
|
allExpandedState = assetsModel.getAllExpandedState()
|
||||||
contextMenu.popup()
|
contextMenu.popup()
|
||||||
}
|
}
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
spacing: 5
|
spacing: 5
|
||||||
leftPadding: 15
|
leftPadding: 5
|
||||||
|
|
||||||
Repeater {
|
Repeater {
|
||||||
model: dirsModel
|
model: dirsModel
|
||||||
@@ -155,6 +333,25 @@ Item {
|
|||||||
model: filesModel
|
model: filesModel
|
||||||
delegate: fileSection
|
delegate: fileSection
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: qsTr("Empty folder")
|
||||||
|
color: StudioTheme.Values.themeTextColorDisabled
|
||||||
|
font.pixelSize: 12
|
||||||
|
visible: !(dirsModel && dirsModel.rowCount() > 0)
|
||||||
|
&& !(filesModel && filesModel.rowCount() > 0)
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
acceptedButtons: Qt.RightButton
|
||||||
|
onClicked: {
|
||||||
|
contextFilePath = ""
|
||||||
|
contextDir = model
|
||||||
|
isDirContextMenu = true
|
||||||
|
contextMenu.popup()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -222,8 +419,11 @@ Item {
|
|||||||
if (currFileSelected)
|
if (currFileSelected)
|
||||||
rootView.startDragAsset(selectedAssetsArr, mapToGlobal(mouse.x, mouse.y))
|
rootView.startDragAsset(selectedAssetsArr, mapToGlobal(mouse.x, mouse.y))
|
||||||
} else {
|
} else {
|
||||||
delFilePath = filePath
|
contextFilePath = filePath
|
||||||
|
contextDir = model.fileDir
|
||||||
|
|
||||||
tooltipBackend.hideTooltip()
|
tooltipBackend.hideTooltip()
|
||||||
|
isDirContextMenu = false
|
||||||
contextMenu.popup()
|
contextMenu.popup()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -263,7 +463,7 @@ Item {
|
|||||||
// Placeholder when the assets panel is empty
|
// Placeholder when the assets panel is empty
|
||||||
Column {
|
Column {
|
||||||
id: colNoAssets
|
id: colNoAssets
|
||||||
visible: assetsModel.isEmpty
|
visible: assetsModel.isEmpty && !rootView.searchActive
|
||||||
|
|
||||||
spacing: 20
|
spacing: 20
|
||||||
x: 20
|
x: 20
|
||||||
@@ -307,4 +507,13 @@ Item {
|
|||||||
wrapMode: Text.WordWrap
|
wrapMode: Text.WordWrap
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: qsTr("No match found.")
|
||||||
|
x: 20
|
||||||
|
y: 10
|
||||||
|
color: StudioTheme.Values.themeTextColor
|
||||||
|
font.pixelSize: 12
|
||||||
|
visible: assetsModel.isEmpty && rootView.searchActive
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -173,7 +173,7 @@ Item {
|
|||||||
id: leftBorder
|
id: leftBorder
|
||||||
visible: false
|
visible: false
|
||||||
width: 1
|
width: 1
|
||||||
height: parent.height - 15
|
height: parent.height - bottomPadding
|
||||||
color: header.color
|
color: header.color
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -27,29 +27,35 @@
|
|||||||
Metadata {
|
Metadata {
|
||||||
id: metadataFile
|
id: metadataFile
|
||||||
|
|
||||||
defaultVersion: v19
|
defaultVersion: v20
|
||||||
|
|
||||||
VersionData {
|
VersionData {
|
||||||
id: v14
|
id: v14
|
||||||
name: "QUL 1.4"
|
name: "Qt for MCUs 1.4"
|
||||||
path: "qul-14.qml"
|
path: "qul-14.qml"
|
||||||
}
|
}
|
||||||
|
|
||||||
VersionData {
|
VersionData {
|
||||||
id: v17
|
id: v17
|
||||||
name: "QUL 1.7"
|
name: "Qt for MCUs 1.7"
|
||||||
path: "qul-17.qml"
|
path: "qul-17.qml"
|
||||||
}
|
}
|
||||||
|
|
||||||
VersionData {
|
VersionData {
|
||||||
id: v18
|
id: v18
|
||||||
name: "QUL 1.8"
|
name: "Qt for MCUs 1.8"
|
||||||
path: "qul-18.qml"
|
path: "qul-18.qml"
|
||||||
}
|
}
|
||||||
|
|
||||||
VersionData {
|
VersionData {
|
||||||
id: v19
|
id: v19
|
||||||
name: "QUL 1.9"
|
name: "Qt for MCUs 1.9"
|
||||||
path: "qul-19.qml"
|
path: "qul-19.qml"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VersionData {
|
||||||
|
id: v20
|
||||||
|
name: "Qt for MCUs 2.0"
|
||||||
|
path: "qul-20.qml"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -24,7 +24,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
VersionData {
|
VersionData {
|
||||||
name: "QUL 1.4"
|
name: "Qt for MCUs 1.4"
|
||||||
|
|
||||||
bannedItems: ["QtQuick.AnimatedImage",
|
bannedItems: ["QtQuick.AnimatedImage",
|
||||||
"QtQuick.FocusScope",
|
"QtQuick.FocusScope",
|
||||||
@@ -34,6 +34,7 @@ VersionData {
|
|||||||
"QtQuick.Grid",
|
"QtQuick.Grid",
|
||||||
"QtQuick.GridView",
|
"QtQuick.GridView",
|
||||||
"QtQuick.PathView",
|
"QtQuick.PathView",
|
||||||
|
"QtQuick.Loader",
|
||||||
"QtQuick.Controls",
|
"QtQuick.Controls",
|
||||||
"QtQuick.Controls.BusyIndicator",
|
"QtQuick.Controls.BusyIndicator",
|
||||||
"QtQuick.Controls.ButtonGroup",
|
"QtQuick.Controls.ButtonGroup",
|
||||||
|
@@ -24,7 +24,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
VersionData {
|
VersionData {
|
||||||
name: "QUL 1.7"
|
name: "Qt for MCUs 1.7"
|
||||||
|
|
||||||
bannedItems: ["QtQuick.AnimatedImage",
|
bannedItems: ["QtQuick.AnimatedImage",
|
||||||
"QtQuick.FocusScope",
|
"QtQuick.FocusScope",
|
||||||
@@ -34,6 +34,7 @@ VersionData {
|
|||||||
"QtQuick.Grid",
|
"QtQuick.Grid",
|
||||||
"QtQuick.GridView",
|
"QtQuick.GridView",
|
||||||
"QtQuick.PathView",
|
"QtQuick.PathView",
|
||||||
|
"QtQuick.Loader",
|
||||||
"QtQuick.Controls",
|
"QtQuick.Controls",
|
||||||
"QtQuick.Controls.BusyIndicator",
|
"QtQuick.Controls.BusyIndicator",
|
||||||
"QtQuick.Controls.ButtonGroup",
|
"QtQuick.Controls.ButtonGroup",
|
||||||
|
@@ -24,7 +24,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
VersionData {
|
VersionData {
|
||||||
name: "QUL 1.8"
|
name: "Qt for MCUs 1.8"
|
||||||
|
|
||||||
bannedItems: ["QtQuick.AnimatedImage",
|
bannedItems: ["QtQuick.AnimatedImage",
|
||||||
"QtQuick.FocusScope",
|
"QtQuick.FocusScope",
|
||||||
@@ -34,6 +34,7 @@ VersionData {
|
|||||||
"QtQuick.Grid",
|
"QtQuick.Grid",
|
||||||
"QtQuick.GridView",
|
"QtQuick.GridView",
|
||||||
"QtQuick.PathView",
|
"QtQuick.PathView",
|
||||||
|
"QtQuick.Loader",
|
||||||
"QtQuick.Controls",
|
"QtQuick.Controls",
|
||||||
"QtQuick.Controls.BusyIndicator",
|
"QtQuick.Controls.BusyIndicator",
|
||||||
"QtQuick.Controls.ButtonGroup",
|
"QtQuick.Controls.ButtonGroup",
|
||||||
@@ -63,7 +64,11 @@ VersionData {
|
|||||||
"QtQuick.Controls.TextArea",
|
"QtQuick.Controls.TextArea",
|
||||||
"QtQuick.Controls.TextField",
|
"QtQuick.Controls.TextField",
|
||||||
"QtQuick.Controls.ToolSeparator",
|
"QtQuick.Controls.ToolSeparator",
|
||||||
"QtQuick.Controls.Tumbler"]
|
"QtQuick.Controls.Tumbler",
|
||||||
|
"QtQuick.Shapes.ConicalGradient",
|
||||||
|
"QtQuick.Shapes.LinearGradient",
|
||||||
|
"QtQuick.Shapes.RadialGradient",
|
||||||
|
"QtQuick.Shapes.ShapeGradient"]
|
||||||
|
|
||||||
allowedImports: ["QtQuick",
|
allowedImports: ["QtQuick",
|
||||||
"QtQuick.Shapes",
|
"QtQuick.Shapes",
|
||||||
|
@@ -24,7 +24,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
VersionData {
|
VersionData {
|
||||||
name: "QUL 1.9"
|
name: "Qt for MCUs 1.9"
|
||||||
|
|
||||||
bannedItems: ["QtQuick.AnimatedImage",
|
bannedItems: ["QtQuick.AnimatedImage",
|
||||||
"QtQuick.FocusScope",
|
"QtQuick.FocusScope",
|
||||||
@@ -34,6 +34,7 @@ VersionData {
|
|||||||
"QtQuick.Grid",
|
"QtQuick.Grid",
|
||||||
"QtQuick.GridView",
|
"QtQuick.GridView",
|
||||||
"QtQuick.PathView",
|
"QtQuick.PathView",
|
||||||
|
"QtQuick.Loader",
|
||||||
"QtQuick.Controls",
|
"QtQuick.Controls",
|
||||||
"QtQuick.Controls.BusyIndicator",
|
"QtQuick.Controls.BusyIndicator",
|
||||||
"QtQuick.Controls.ButtonGroup",
|
"QtQuick.Controls.ButtonGroup",
|
||||||
@@ -63,7 +64,11 @@ VersionData {
|
|||||||
"QtQuick.Controls.TextArea",
|
"QtQuick.Controls.TextArea",
|
||||||
"QtQuick.Controls.TextField",
|
"QtQuick.Controls.TextField",
|
||||||
"QtQuick.Controls.ToolSeparator",
|
"QtQuick.Controls.ToolSeparator",
|
||||||
"QtQuick.Controls.Tumbler"]
|
"QtQuick.Controls.Tumbler",
|
||||||
|
"QtQuick.Shapes.ConicalGradient",
|
||||||
|
"QtQuick.Shapes.LinearGradient",
|
||||||
|
"QtQuick.Shapes.RadialGradient",
|
||||||
|
"QtQuick.Shapes.ShapeGradient"]
|
||||||
|
|
||||||
allowedImports: ["QtQuick",
|
allowedImports: ["QtQuick",
|
||||||
"QtQuick.Shapes",
|
"QtQuick.Shapes",
|
||||||
|
221
share/qtcreator/qmldesigner/qt4mcu/qul-20.qml
Normal file
@@ -0,0 +1,221 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator.
|
||||||
|
**
|
||||||
|
** 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 General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3 as published by the Free Software
|
||||||
|
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||||
|
** included in the packaging of this file. Please review the following
|
||||||
|
** information to ensure the GNU General Public License requirements will
|
||||||
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
VersionData {
|
||||||
|
name: "Qt for MCUs 2.0"
|
||||||
|
|
||||||
|
bannedItems: ["QtQuick.AnimatedImage",
|
||||||
|
"QtQuick.FocusScope",
|
||||||
|
"QtQuick.TextInput",
|
||||||
|
"QtQuick.TextEdit",
|
||||||
|
"QtQuick.Flow",
|
||||||
|
"QtQuick.Grid",
|
||||||
|
"QtQuick.GridView",
|
||||||
|
"QtQuick.PathView",
|
||||||
|
"QtQuick.Loader",
|
||||||
|
"QtQuick.Controls",
|
||||||
|
"QtQuick.Controls.BusyIndicator",
|
||||||
|
"QtQuick.Controls.ButtonGroup",
|
||||||
|
"QtQuick.Controls.CheckDelegate",
|
||||||
|
"QtQuick.Controls.Container",
|
||||||
|
"QtQuick.Controls.ComboBox",
|
||||||
|
"QtQuick.Controls.DelayButton",
|
||||||
|
"QtQuick.Controls.Frame",
|
||||||
|
"QtQuick.Controls.GroupBox",
|
||||||
|
"QtQuick.Controls.ItemDelegate",
|
||||||
|
"QtQuick.Controls.Label",
|
||||||
|
"QtQuick.Controls.Page",
|
||||||
|
"QtQuick.Controls.PageIndicator",
|
||||||
|
"QtQuick.Controls.Pane",
|
||||||
|
"QtQuick.Controls.RadioDelegate",
|
||||||
|
"QtQuick.Controls.RangeSlider",
|
||||||
|
"QtQuick.Controls.RoundButton",
|
||||||
|
"QtQuick.Controls.ScrollView",
|
||||||
|
"QtQuick.Controls.SpinBox",
|
||||||
|
"QtQuick.Controls.StackView",
|
||||||
|
"QtQuick.Controls.SwipeDelegate",
|
||||||
|
"QtQuick.Controls.SwitchDelegate",
|
||||||
|
"QtQuick.Controls.ToolBar",
|
||||||
|
"QtQuick.Controls.ToolButton",
|
||||||
|
"QtQuick.Controls.TabBar",
|
||||||
|
"QtQuick.Controls.TabButton",
|
||||||
|
"QtQuick.Controls.TextArea",
|
||||||
|
"QtQuick.Controls.TextField",
|
||||||
|
"QtQuick.Controls.ToolSeparator",
|
||||||
|
"QtQuick.Controls.Tumbler",
|
||||||
|
"QtQuick.Shapes.ConicalGradient",
|
||||||
|
"QtQuick.Shapes.LinearGradient",
|
||||||
|
"QtQuick.Shapes.RadialGradient",
|
||||||
|
"QtQuick.Shapes.ShapeGradient"]
|
||||||
|
|
||||||
|
allowedImports: ["QtQuick",
|
||||||
|
"QtQuick.Shapes",
|
||||||
|
"QtQuick.Controls",
|
||||||
|
"QtQuick.Timeline",
|
||||||
|
"QtQuickUltralite.Extras",
|
||||||
|
"QtQuickUltralite.Layers"]
|
||||||
|
|
||||||
|
bannedImports: ["FlowView"]
|
||||||
|
|
||||||
|
//ComplexProperty is not a type, it's just a way to handle bigger props
|
||||||
|
ComplexProperty {
|
||||||
|
prefix: "font"
|
||||||
|
bannedProperties: ["wordSpacing", "letterSpacing", "hintingPreference",
|
||||||
|
"kerning", "preferShaping", "capitalization",
|
||||||
|
"strikeout", "underline", "styleName"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Item {
|
||||||
|
bannedProperties: ["layer", "opacity", "smooth", "antialiasing",
|
||||||
|
"baselineOffset", "focus", "activeFocusOnTab",
|
||||||
|
"rotation", "scale", "transformOrigin"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Rectangle {
|
||||||
|
bannedProperties: ["gradient", "border"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Flickable {
|
||||||
|
bannedProperties: ["boundsBehavior", "boundsMovement", "flickDeceleration",
|
||||||
|
"flickableDirection", "leftMargin", "rightMargin", "bottomMargin", "topMargin",
|
||||||
|
"originX", "originY", "pixelAligned", "pressDelay", "synchronousDrag"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.MouseArea {
|
||||||
|
bannedProperties: ["propagateComposedEvents", "preventStealing", "cursorShape",
|
||||||
|
"scrollGestureEnabled", "drag", "acceptedButtons", "hoverEnabled"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Image {
|
||||||
|
allowChildren: false
|
||||||
|
allowedProperties: ["rotation", "scale", "transformOrigin"]
|
||||||
|
bannedProperties: ["mirror", "mipmap", "cache", "autoTransform", "asynchronous",
|
||||||
|
"sourceSize", "smooth"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.BorderImage {
|
||||||
|
bannedProperties: ["asynchronous", "cache", "currentFrame", "frameCount",
|
||||||
|
"horizontalTileMode", "mirror", "progress", "smooth", "sourceSize",
|
||||||
|
"status", "verticalTileMode"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Text {
|
||||||
|
allowChildren: false
|
||||||
|
allowedProperties: ["rotation", "scale", "transformOrigin"]
|
||||||
|
bannedProperties: ["elide", "lineHeight", "lineHeightMode", "wrapMode", "style",
|
||||||
|
"styleColor", "minimumPointSize", "minimumPixelSize",
|
||||||
|
"fontSizeMode", "renderType", "renderTypeQuality", "textFormat", "maximumLineCount"]
|
||||||
|
}
|
||||||
|
|
||||||
|
//Padding is not an actual item, but rather set of properties in Text
|
||||||
|
Padding {
|
||||||
|
bannedProperties: ["bottomPadding", "topPadding", "leftPadding", "rightPadding"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Column {
|
||||||
|
bannedProperties: ["bottomPadding", "leftPadding", "rightPadding", "topPadding"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Row {
|
||||||
|
bannedProperties: ["bottomPadding", "leftPadding", "rightPadding", "topPadding",
|
||||||
|
"effectiveLayoutDirection", "layoutDirection"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.ListView {
|
||||||
|
bannedProperties: ["cacheBuffer", "highlightRangeMode", "highlightMoveDuration",
|
||||||
|
"highlightResizeDuration", "preferredHighlightBegin", "layoutDirection",
|
||||||
|
"preferredHighlightEnd", "highlightFollowsCurrentItem", "keyNavigationWraps",
|
||||||
|
"snapMode", "highlightMoveVelocity", "highlightResizeVelocity"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Animation {
|
||||||
|
bannedProperties: ["paused"]
|
||||||
|
}
|
||||||
|
|
||||||
|
//Quick Controls2 Items and properties:
|
||||||
|
|
||||||
|
QtQuick.Controls.Control {
|
||||||
|
bannedProperties: ["focusPolicy", "hoverEnabled", "wheelEnabled"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Controls.AbstractButton {
|
||||||
|
bannedProperties: ["display", "autoExclusive"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Controls.ProgressBar {
|
||||||
|
bannedProperties: ["indeterminate"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Controls.Slider {
|
||||||
|
bannedProperties: ["live", "snapMode", "touchDragThreshold"]
|
||||||
|
}
|
||||||
|
|
||||||
|
//Path and Shapes related:
|
||||||
|
|
||||||
|
QtQuick.Path {
|
||||||
|
bannedProperties: ["scale", "pathElements"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.PathArc {
|
||||||
|
bannedProperties: ["relativeX", "relativeY"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.PathLine {
|
||||||
|
bannedProperties: ["relativeX", "relativeY"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.PathMove {
|
||||||
|
bannedProperties: ["relativeX", "relativeY"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.PathQuad {
|
||||||
|
bannedProperties: ["relativeX", "relativeY",
|
||||||
|
"relativeControlX", "relativeControlY"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.PathCubic {
|
||||||
|
bannedProperties: ["relativeX", "relativeY",
|
||||||
|
"relativeControl1X", "relativeControl1Y",
|
||||||
|
"relativeControl2X", "relativeControl2Y"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.PathElement {
|
||||||
|
//nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.PathSvg {
|
||||||
|
//nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Shapes.Shape {
|
||||||
|
bannedProperties: ["asynchronous", "containsMode", "data",
|
||||||
|
"renderType", "status", "vendorExtensionsEnabled"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Shapes.ShapePath {
|
||||||
|
bannedProperties: ["dashOffset", "dashPattern",
|
||||||
|
"fillGradient", "strokeStyle"]
|
||||||
|
}
|
||||||
|
}
|
@@ -33,11 +33,8 @@ import StudioTheme 1.0 as StudioTheme
|
|||||||
Rectangle {
|
Rectangle {
|
||||||
id: myRoot
|
id: myRoot
|
||||||
|
|
||||||
color: baseColor
|
|
||||||
|
|
||||||
property bool isBaseState
|
property bool isBaseState
|
||||||
property bool isCurrentState
|
property bool isCurrentState
|
||||||
property color baseColor
|
|
||||||
property string delegateStateName
|
property string delegateStateName
|
||||||
property string delegateStateImageSource
|
property string delegateStateImageSource
|
||||||
property bool delegateHasWhenCondition
|
property bool delegateHasWhenCondition
|
||||||
@@ -47,14 +44,14 @@ Rectangle {
|
|||||||
property int bottomAreaHeight
|
property int bottomAreaHeight
|
||||||
property int stateMargin
|
property int stateMargin
|
||||||
property int previewMargin
|
property int previewMargin
|
||||||
property int columnSpacing
|
|
||||||
|
|
||||||
readonly property bool isDefaultState: isDefault
|
readonly property bool isDefaultState: isDefault
|
||||||
|
|
||||||
property int closeButtonMargin: 6
|
property int closeButtonMargin: 6
|
||||||
property int textFieldMargin: 4
|
property int textFieldMargin: 4
|
||||||
|
|
||||||
signal delegateInteraction
|
property int scrollBarH: 0
|
||||||
|
property int listMargin: 0
|
||||||
|
|
||||||
function autoComplete(text, pos, explicitComplete, filter) {
|
function autoComplete(text, pos, explicitComplete, filter) {
|
||||||
var stringList = statesEditorModel.autoComplete(text, pos, explicitComplete)
|
var stringList = statesEditorModel.autoComplete(text, pos, explicitComplete)
|
||||||
@@ -65,14 +62,16 @@ Rectangle {
|
|||||||
return statesEditorModel.hasAnnotation(internalNodeId)
|
return statesEditorModel.hasAnnotation(internalNodeId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
color: isCurrentState ? StudioTheme.Values.themeInteraction
|
||||||
|
: StudioTheme.Values.themeControlBackgroundInteraction
|
||||||
MouseArea {
|
MouseArea {
|
||||||
id: mouseArea
|
id: mouseArea
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
focus = true
|
focus = true
|
||||||
root.currentStateInternalId = internalNodeId
|
root.currentStateInternalId = internalNodeId
|
||||||
contextMenu.dismiss() // close potentially open context menu
|
contextMenu.dismiss() // close potentially open context menu
|
||||||
myRoot.delegateInteraction()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,7 +88,6 @@ Rectangle {
|
|||||||
visible: !isBaseState && isCurrentState
|
visible: !isBaseState && isCurrentState
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
myRoot.delegateInteraction()
|
|
||||||
if (isDefaultState)
|
if (isDefaultState)
|
||||||
statesEditorModel.resetDefaultState()
|
statesEditorModel.resetDefaultState()
|
||||||
|
|
||||||
@@ -254,9 +252,8 @@ Rectangle {
|
|||||||
|
|
||||||
Rectangle { // separator
|
Rectangle { // separator
|
||||||
width: column.width
|
width: column.width
|
||||||
height: myRoot.columnSpacing
|
height: 2
|
||||||
color: StudioTheme.Values.themeStateSeparator
|
color: StudioTheme.Values.themeStateSeparator
|
||||||
visible: expanded
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
@@ -264,7 +261,6 @@ Rectangle {
|
|||||||
width: myRoot.width - 2 * myRoot.stateMargin
|
width: myRoot.width - 2 * myRoot.stateMargin
|
||||||
height: myRoot.bottomAreaHeight
|
height: myRoot.bottomAreaHeight
|
||||||
color: StudioTheme.Values.themeStateBackground
|
color: StudioTheme.Values.themeStateBackground
|
||||||
visible: expanded
|
|
||||||
|
|
||||||
Image {
|
Image {
|
||||||
anchors.fill: stateImageBackground
|
anchors.fill: stateImageBackground
|
||||||
|
@@ -26,6 +26,7 @@
|
|||||||
import QtQuick 2.15
|
import QtQuick 2.15
|
||||||
import QtQuick.Controls 2.15
|
import QtQuick.Controls 2.15
|
||||||
import QtQuickDesignerTheme 1.0
|
import QtQuickDesignerTheme 1.0
|
||||||
|
import Qt.labs.qmlmodels 1.0
|
||||||
import HelperWidgets 2.0
|
import HelperWidgets 2.0
|
||||||
import StudioControls 1.0 as StudioControls
|
import StudioControls 1.0 as StudioControls
|
||||||
import StudioTheme 1.0 as StudioTheme
|
import StudioTheme 1.0 as StudioTheme
|
||||||
@@ -33,27 +34,24 @@ import StudioTheme 1.0 as StudioTheme
|
|||||||
FocusScope {
|
FocusScope {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
property int delegateTopAreaHeight: StudioTheme.Values.height + 8
|
readonly property int delegateTopAreaHeight: StudioTheme.Values.height + 8
|
||||||
property int delegateBottomAreaHeight: delegateHeight - 2 * delegateStateMargin - delegateTopAreaHeight - delegateColumnSpacing
|
readonly property int delegateBottomAreaHeight: delegateHeight - 2 * delegateStateMargin - delegateTopAreaHeight - 2
|
||||||
property int delegateColumnSpacing: 2
|
readonly property int delegateStateMargin: 16
|
||||||
property int delegateStateMargin: 16
|
readonly property int delegatePreviewMargin: 10
|
||||||
property int delegatePreviewMargin: 10
|
readonly property int effectiveHeight: root.height < 130 ? 89 : Math.min(root.height, 287)
|
||||||
property int effectiveHeight: root.expanded ? Math.max(85, Math.min(287, root.height)) : 85 // height of the states area
|
|
||||||
|
readonly property int scrollBarH: statesListView.ScrollBar.horizontal.scrollBarVisible ? StudioTheme.Values.scrollBarThickness : 0
|
||||||
|
readonly property int listMargin: 10
|
||||||
|
readonly property int delegateWidth: 264
|
||||||
|
readonly property int delegateHeight: Math.max(effectiveHeight - scrollBarH - 2 * listMargin, 69)
|
||||||
|
readonly property int innerSpacing: 2
|
||||||
|
|
||||||
|
property int currentStateInternalId: 0
|
||||||
|
|
||||||
signal createNewState
|
signal createNewState
|
||||||
signal deleteState(int internalNodeId)
|
signal deleteState(int internalNodeId)
|
||||||
signal duplicateCurrentState
|
signal duplicateCurrentState
|
||||||
|
|
||||||
property int padding: 2
|
|
||||||
property int delegateWidth: 264
|
|
||||||
property int delegateHeight: effectiveHeight
|
|
||||||
- StudioTheme.Values.scrollBarThickness
|
|
||||||
- 2 * (root.padding + StudioTheme.Values.border)
|
|
||||||
property int innerSpacing: 2
|
|
||||||
property int currentStateInternalId: 0
|
|
||||||
|
|
||||||
property bool expanded: true
|
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
target: statesEditorModel
|
target: statesEditorModel
|
||||||
function onChangedToState(n) { root.currentStateInternalId = n }
|
function onChangedToState(n) { root.currentStateInternalId = n }
|
||||||
@@ -65,92 +63,117 @@ FocusScope {
|
|||||||
color: StudioTheme.Values.themePanelBackground
|
color: StudioTheme.Values.themePanelBackground
|
||||||
}
|
}
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent
|
|
||||||
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
|
||||||
|
|
||||||
onClicked: function(mouse) {
|
|
||||||
if (mouse.button === Qt.LeftButton) {
|
|
||||||
contextMenu.dismiss()
|
|
||||||
focus = true
|
|
||||||
} else if (mouse.button === Qt.RightButton) {
|
|
||||||
contextMenu.popup()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
StudioControls.Menu {
|
|
||||||
id: contextMenu
|
|
||||||
|
|
||||||
StudioControls.MenuItem {
|
|
||||||
text: root.expanded ? qsTr("Collapse") : qsTr("Expand")
|
|
||||||
onTriggered: root.expanded = !root.expanded
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
AbstractButton {
|
AbstractButton {
|
||||||
id: addStateButton
|
id: addStateButton
|
||||||
|
|
||||||
buttonIcon: root.expanded ? qsTr("Create New State") : StudioTheme.Constants.plus
|
buttonIcon: StudioTheme.Constants.plus
|
||||||
iconFont: root.expanded ? StudioTheme.Constants.font : StudioTheme.Constants.iconFont
|
iconFont: StudioTheme.Constants.iconFont
|
||||||
iconSize: root.expanded ? StudioTheme.Values.myFontSize : StudioTheme.Values.myIconFontSize
|
iconSize: StudioTheme.Values.myIconFontSize
|
||||||
iconItalic: root.expanded
|
|
||||||
tooltip: qsTr("Add a new state.")
|
tooltip: qsTr("Add a new state.")
|
||||||
visible: canAddNewStates
|
visible: canAddNewStates
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
anchors.rightMargin: 8
|
anchors.rightMargin: 4
|
||||||
y: (Math.min(effectiveHeight, root.height) - height) / 2
|
anchors.bottom: parent.bottom
|
||||||
width: root.expanded ? 140 : 18
|
anchors.bottomMargin: statesListView.contentWidth - statesListView.contentX - root.delegateWidth / 2 > statesListView.width ? scrollBarH + 5 : -35
|
||||||
height: root.expanded ? 60 : 18
|
width: 35
|
||||||
|
height: 35
|
||||||
|
|
||||||
onClicked: {
|
Behavior on anchors.bottomMargin {
|
||||||
contextMenu.dismiss()
|
PropertyAnimation {
|
||||||
root.createNewState()
|
duration: 700
|
||||||
|
easing.type: Easing.InOutBack
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle { // separator lines between state items
|
onClicked: root.createNewState()
|
||||||
color: StudioTheme.Values.themeStateSeparator
|
|
||||||
x: root.padding
|
|
||||||
y: root.padding
|
|
||||||
width: statesListView.width
|
|
||||||
height: root.delegateHeight
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ListView {
|
ListView {
|
||||||
id: statesListView
|
id: statesListView
|
||||||
|
|
||||||
boundsBehavior: Flickable.StopAtBounds
|
|
||||||
clip: true
|
clip: true
|
||||||
|
anchors.fill: parent
|
||||||
x: root.padding
|
anchors.topMargin: listMargin
|
||||||
y: root.padding
|
anchors.leftMargin: listMargin
|
||||||
width: Math.min(root.delegateWidth * statesListView.count + root.innerSpacing * (statesListView.count - 1),
|
anchors.rightMargin: listMargin
|
||||||
root.width - addStateButton.width - root.padding - 16) // 16 = 2 * 8 (addStateButton margin)
|
|
||||||
height: root.delegateHeight + StudioTheme.Values.scrollBarThickness
|
|
||||||
|
|
||||||
model: statesEditorModel
|
model: statesEditorModel
|
||||||
orientation: ListView.Horizontal
|
orientation: ListView.Horizontal
|
||||||
spacing: root.innerSpacing
|
spacing: root.innerSpacing
|
||||||
|
|
||||||
delegate: StatesDelegate {
|
property int prevCount: 0
|
||||||
id: statesDelegate
|
onCountChanged: {
|
||||||
|
if (count > prevCount)
|
||||||
|
Qt.callLater(statesListView.positionViewAtEnd)
|
||||||
|
prevCount = count
|
||||||
|
}
|
||||||
|
|
||||||
|
delegate: DelegateChooser {
|
||||||
|
role: "type"
|
||||||
|
|
||||||
|
DelegateChoice {
|
||||||
|
roleValue: "state"
|
||||||
|
|
||||||
|
StatesDelegate {
|
||||||
width: root.delegateWidth
|
width: root.delegateWidth
|
||||||
height: root.delegateHeight
|
height: root.delegateHeight
|
||||||
|
anchors.verticalCenter: parent ? parent.verticalCenter : undefined
|
||||||
|
anchors.verticalCenterOffset: -.5 * (scrollBarH + listMargin)
|
||||||
isBaseState: 0 === internalNodeId
|
isBaseState: 0 === internalNodeId
|
||||||
isCurrentState: root.currentStateInternalId === internalNodeId
|
isCurrentState: root.currentStateInternalId === internalNodeId
|
||||||
baseColor: isCurrentState ? StudioTheme.Values.themeInteraction : background.color
|
|
||||||
delegateStateName: stateName
|
delegateStateName: stateName
|
||||||
delegateStateImageSource: stateImageSource
|
delegateStateImageSource: stateImageSource
|
||||||
delegateHasWhenCondition: hasWhenCondition
|
delegateHasWhenCondition: hasWhenCondition
|
||||||
delegateWhenConditionString: whenConditionString
|
delegateWhenConditionString: whenConditionString
|
||||||
onDelegateInteraction: contextMenu.dismiss()
|
|
||||||
|
|
||||||
columnSpacing: root.delegateColumnSpacing
|
|
||||||
topAreaHeight: root.delegateTopAreaHeight
|
topAreaHeight: root.delegateTopAreaHeight
|
||||||
bottomAreaHeight: root.delegateBottomAreaHeight
|
bottomAreaHeight: root.delegateBottomAreaHeight
|
||||||
stateMargin: root.delegateStateMargin
|
stateMargin: root.delegateStateMargin
|
||||||
previewMargin: root.delegatePreviewMargin
|
previewMargin: root.delegatePreviewMargin
|
||||||
|
scrollBarH: root.scrollBarH
|
||||||
|
listMargin: root.listMargin
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DelegateChoice {
|
||||||
|
roleValue: "add"
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
visible: canAddNewStates
|
||||||
|
|
||||||
|
width: root.delegateWidth
|
||||||
|
height: root.delegateHeight
|
||||||
|
anchors.verticalCenter: parent ? parent.verticalCenter : undefined
|
||||||
|
anchors.verticalCenterOffset: -.5 * (scrollBarH + listMargin)
|
||||||
|
color: Qt.lighter(StudioTheme.Values.themeControlBackgroundInteraction, addState.containsMouse ? 1.5 : 1)
|
||||||
|
|
||||||
|
ToolTip.text: qsTr("Add a new state.")
|
||||||
|
ToolTip.visible: addState.containsMouse
|
||||||
|
ToolTip.delay: 1000
|
||||||
|
|
||||||
|
Rectangle { // inner rect
|
||||||
|
width: parent.width - 30
|
||||||
|
height: parent.height - 30
|
||||||
|
anchors.centerIn: parent
|
||||||
|
color: StudioTheme.Values.themeStateBackground
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: "+"
|
||||||
|
anchors.centerIn: parent
|
||||||
|
anchors.verticalCenterOffset: -5
|
||||||
|
font.pixelSize: parent.height * .5
|
||||||
|
color: Qt.lighter(StudioTheme.Values.themeControlBackgroundInteraction, addState.containsMouse ? 1.5 : 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
id: addState
|
||||||
|
hoverEnabled: true
|
||||||
|
anchors.fill: parent
|
||||||
|
onClicked: root.createNewState()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ScrollBar.horizontal: HorizontalScrollBar {}
|
ScrollBar.horizontal: HorizontalScrollBar {}
|
||||||
|
@@ -28,6 +28,7 @@
|
|||||||
#include "generatecmakelistsconstants.h"
|
#include "generatecmakelistsconstants.h"
|
||||||
|
|
||||||
#include <utils/utilsicons.h>
|
#include <utils/utilsicons.h>
|
||||||
|
#include <utils/detailswidget.h>
|
||||||
|
|
||||||
#include <QDialogButtonBox>
|
#include <QDialogButtonBox>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
@@ -50,17 +51,14 @@ CmakeGeneratorDialog::CmakeGeneratorDialog(const FilePath &rootDir, const FilePa
|
|||||||
|
|
||||||
m_model = new CMakeGeneratorDialogTreeModel(rootDir, files, this);
|
m_model = new CMakeGeneratorDialogTreeModel(rootDir, files, this);
|
||||||
|
|
||||||
QVBoxLayout *layout = new QVBoxLayout(this);
|
QVBoxLayout *dialogLayout = new QVBoxLayout(this);
|
||||||
setLayout(layout);
|
dialogLayout->setSizeConstraint(QLayout::SetFixedSize);
|
||||||
|
setLayout(dialogLayout);
|
||||||
|
|
||||||
QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
|
QWidget *advancedInnerWidget = new QWidget(this);
|
||||||
|
QVBoxLayout *advancedInnerLayout = new QVBoxLayout(advancedInnerWidget);
|
||||||
auto *okButton = buttons->button(QDialogButtonBox::Ok);
|
advancedInnerWidget->setLayout(advancedInnerLayout);
|
||||||
okButton->setDefault(true);
|
advancedInnerWidget->setMinimumHeight(640);
|
||||||
|
|
||||||
connect(buttons, &QDialogButtonBox::accepted, this, &QDialog::accept);
|
|
||||||
connect(buttons, &QDialogButtonBox::rejected, this, &QDialog::reject);
|
|
||||||
connect(m_model, &CMakeGeneratorDialogTreeModel::checkedStateChanged, this, &CmakeGeneratorDialog::refreshNotificationText);
|
|
||||||
|
|
||||||
QTreeView *tree = new QTreeView(this);
|
QTreeView *tree = new QTreeView(this);
|
||||||
tree->setModel(m_model);
|
tree->setModel(m_model);
|
||||||
@@ -72,9 +70,31 @@ CmakeGeneratorDialog::CmakeGeneratorDialog(const FilePath &rootDir, const FilePa
|
|||||||
|
|
||||||
refreshNotificationText();
|
refreshNotificationText();
|
||||||
|
|
||||||
layout->addWidget(tree, 2);
|
advancedInnerLayout->addWidget(tree, 2);
|
||||||
layout->addWidget(m_notifications, 1);
|
advancedInnerLayout->addWidget(m_notifications, 1);
|
||||||
layout->addWidget(buttons);
|
|
||||||
|
DetailsWidget *advancedWidget = new DetailsWidget(this);
|
||||||
|
advancedWidget->setMinimumWidth(600);
|
||||||
|
advancedWidget->setWidget(advancedInnerWidget);
|
||||||
|
advancedWidget->setSummaryText(QCoreApplication::translate("QmlDesigner::GenerateCmake",
|
||||||
|
"Advanced Options"));
|
||||||
|
|
||||||
|
QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
|
||||||
|
auto *okButton = buttons->button(QDialogButtonBox::Ok);
|
||||||
|
okButton->setDefault(true);
|
||||||
|
|
||||||
|
connect(buttons, &QDialogButtonBox::accepted, this, &QDialog::accept);
|
||||||
|
connect(buttons, &QDialogButtonBox::rejected, this, &QDialog::reject);
|
||||||
|
connect(m_model, &CMakeGeneratorDialogTreeModel::checkedStateChanged, this, &CmakeGeneratorDialog::refreshNotificationText);
|
||||||
|
|
||||||
|
QLabel *mainLabel = new QLabel(QCoreApplication::translate("QmlDesigner::GenerateCmake",
|
||||||
|
"Start CMakeFiles.txt generation"),
|
||||||
|
this);
|
||||||
|
mainLabel->setMargin(50);
|
||||||
|
|
||||||
|
dialogLayout->addWidget(mainLabel);
|
||||||
|
dialogLayout->addWidget(advancedWidget);
|
||||||
|
dialogLayout->addWidget(buttons);
|
||||||
}
|
}
|
||||||
|
|
||||||
FilePaths CmakeGeneratorDialog::getFilePaths()
|
FilePaths CmakeGeneratorDialog::getFilePaths()
|
||||||
|
@@ -34,6 +34,7 @@ ItemLibraryAssetsFilesModel::ItemLibraryAssetsFilesModel(QObject *parent)
|
|||||||
// add roles
|
// add roles
|
||||||
m_roleNames.insert(FileNameRole, "fileName");
|
m_roleNames.insert(FileNameRole, "fileName");
|
||||||
m_roleNames.insert(FilePathRole, "filePath");
|
m_roleNames.insert(FilePathRole, "filePath");
|
||||||
|
m_roleNames.insert(FileDirRole, "fileDir");
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant ItemLibraryAssetsFilesModel::data(const QModelIndex &index, int role) const
|
QVariant ItemLibraryAssetsFilesModel::data(const QModelIndex &index, int role) const
|
||||||
@@ -49,6 +50,9 @@ QVariant ItemLibraryAssetsFilesModel::data(const QModelIndex &index, int role) c
|
|||||||
if (role == FilePathRole)
|
if (role == FilePathRole)
|
||||||
return m_files[index.row()];
|
return m_files[index.row()];
|
||||||
|
|
||||||
|
if (role == FileDirRole)
|
||||||
|
return QVariant::fromValue(parent());
|
||||||
|
|
||||||
qWarning() << Q_FUNC_INFO << "Invalid role requested: " << QString::number(role);
|
qWarning() << Q_FUNC_INFO << "Invalid role requested: " << QString::number(role);
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
@@ -44,7 +44,8 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
enum Roles {FileNameRole = Qt::UserRole + 1,
|
enum Roles {FileNameRole = Qt::UserRole + 1,
|
||||||
FilePathRole};
|
FilePathRole,
|
||||||
|
FileDirRole};
|
||||||
|
|
||||||
QStringList m_files;
|
QStringList m_files;
|
||||||
QHash<int, QByteArray> m_roleNames;
|
QHash<int, QByteArray> m_roleNames;
|
||||||
|
@@ -42,6 +42,7 @@
|
|||||||
#include <QMetaProperty>
|
#include <QMetaProperty>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#include <QRawFont>
|
#include <QRawFont>
|
||||||
|
#include <QRegularExpression>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include <utils/stylehelper.h>
|
#include <utils/stylehelper.h>
|
||||||
@@ -99,7 +100,7 @@ void ItemLibraryAssetsModel::toggleExpandAll(bool expand)
|
|||||||
endResetModel();
|
endResetModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ItemLibraryAssetsModel::removeFile(const QString &filePath)
|
void ItemLibraryAssetsModel::deleteFile(const QString &filePath)
|
||||||
{
|
{
|
||||||
bool askBeforeDelete = DesignerSettings::getValue(
|
bool askBeforeDelete = DesignerSettings::getValue(
|
||||||
DesignerSettingsKey::ASK_BEFORE_DELETING_ASSET).toBool();
|
DesignerSettingsKey::ASK_BEFORE_DELETING_ASSET).toBool();
|
||||||
@@ -134,6 +135,52 @@ void ItemLibraryAssetsModel::removeFile(const QString &filePath)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ItemLibraryAssetsModel::addNewFolder(const QString &folderPath)
|
||||||
|
{
|
||||||
|
QString iterPath = folderPath;
|
||||||
|
QRegularExpression rgx("\\d+$"); // matches a number at the end of a string
|
||||||
|
QDir dir{folderPath};
|
||||||
|
|
||||||
|
while (dir.exists()) {
|
||||||
|
// if the folder name ends with a number, increment it
|
||||||
|
QRegularExpressionMatch match = rgx.match(iterPath);
|
||||||
|
if (match.hasMatch()) { // ends with a number
|
||||||
|
QString numStr = match.captured(0);
|
||||||
|
int num = match.captured(0).toInt();
|
||||||
|
|
||||||
|
// get number of padding zeros, ex: for "005" = 2
|
||||||
|
int nPaddingZeros = 0;
|
||||||
|
for (; nPaddingZeros < numStr.size() && numStr[nPaddingZeros] == '0'; ++nPaddingZeros);
|
||||||
|
|
||||||
|
++num;
|
||||||
|
|
||||||
|
// if the incremented number's digits increased, decrease the padding zeros
|
||||||
|
if (std::fmod(std::log10(num), 1.0) == 0)
|
||||||
|
--nPaddingZeros;
|
||||||
|
|
||||||
|
iterPath = folderPath.mid(0, match.capturedStart())
|
||||||
|
+ QString('0').repeated(nPaddingZeros)
|
||||||
|
+ QString::number(num);
|
||||||
|
} else {
|
||||||
|
iterPath = folderPath + '1';
|
||||||
|
}
|
||||||
|
|
||||||
|
dir.setPath(iterPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
dir.mkpath(iterPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ItemLibraryAssetsModel::deleteFolder(const QString &folderPath)
|
||||||
|
{
|
||||||
|
QDir{folderPath}.removeRecursively();
|
||||||
|
}
|
||||||
|
|
||||||
|
QObject *ItemLibraryAssetsModel::rootDir() const
|
||||||
|
{
|
||||||
|
return m_assetsDir;
|
||||||
|
}
|
||||||
|
|
||||||
const QStringList &ItemLibraryAssetsModel::supportedImageSuffixes()
|
const QStringList &ItemLibraryAssetsModel::supportedImageSuffixes()
|
||||||
{
|
{
|
||||||
static QStringList retList;
|
static QStringList retList;
|
||||||
@@ -270,7 +317,7 @@ void ItemLibraryAssetsModel::setRootPath(const QString &path)
|
|||||||
isEmpty &= parseDirRecursive(assetsDir, currDepth + 1);
|
isEmpty &= parseDirRecursive(assetsDir, currDepth + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isEmpty)
|
if (!m_searchText.isEmpty() && isEmpty)
|
||||||
currAssetsDir->setDirVisible(false);
|
currAssetsDir->setDirVisible(false);
|
||||||
|
|
||||||
return isEmpty;
|
return isEmpty;
|
||||||
|
@@ -83,7 +83,10 @@ public:
|
|||||||
|
|
||||||
Q_INVOKABLE void toggleExpandAll(bool expand);
|
Q_INVOKABLE void toggleExpandAll(bool expand);
|
||||||
Q_INVOKABLE DirExpandState getAllExpandedState() const;
|
Q_INVOKABLE DirExpandState getAllExpandedState() const;
|
||||||
Q_INVOKABLE void removeFile(const QString &filePath);
|
Q_INVOKABLE void deleteFile(const QString &filePath);
|
||||||
|
Q_INVOKABLE void addNewFolder(const QString &folderPath);
|
||||||
|
Q_INVOKABLE void deleteFolder(const QString &folderPath);
|
||||||
|
Q_INVOKABLE QObject *rootDir() const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void isEmptyChanged();
|
void isEmptyChanged();
|
||||||
|
@@ -53,7 +53,6 @@ StatesEditorModel::StatesEditorModel(StatesEditorView *view)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int StatesEditorModel::count() const
|
int StatesEditorModel::count() const
|
||||||
{
|
{
|
||||||
return rowCount();
|
return rowCount();
|
||||||
@@ -64,9 +63,8 @@ QModelIndex StatesEditorModel::index(int row, int column, const QModelIndex &par
|
|||||||
if (m_statesEditorView.isNull())
|
if (m_statesEditorView.isNull())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
|
|
||||||
int internalNodeId = 0;
|
int internalNodeId = 0;
|
||||||
if (row > 0)
|
if (row > 0 && row < rowCount() - 1) // first and last rows are base state, add state
|
||||||
internalNodeId = m_statesEditorView->rootModelNode().nodeListProperty("states").at(row - 1).internalId();
|
internalNodeId = m_statesEditorView->rootModelNode().nodeListProperty("states").at(row - 1).internalId();
|
||||||
|
|
||||||
return hasIndex(row, column, parent) ? createIndex(row, column, internalNodeId) : QModelIndex();
|
return hasIndex(row, column, parent) ? createIndex(row, column, internalNodeId) : QModelIndex();
|
||||||
@@ -78,9 +76,9 @@ int StatesEditorModel::rowCount(const QModelIndex &parent) const
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!m_statesEditorView->rootModelNode().hasNodeListProperty("states"))
|
if (!m_statesEditorView->rootModelNode().hasNodeListProperty("states"))
|
||||||
return 1;
|
return 2; // base state + add new state
|
||||||
|
|
||||||
return m_statesEditorView->rootModelNode().nodeListProperty("states").count() + 1;
|
return m_statesEditorView->rootModelNode().nodeListProperty("states").count() + 2; // 2 = base state + add new state
|
||||||
}
|
}
|
||||||
|
|
||||||
void StatesEditorModel::reset()
|
void StatesEditorModel::reset()
|
||||||
@@ -109,8 +107,8 @@ QVariant StatesEditorModel::data(const QModelIndex &index, int role) const
|
|||||||
else
|
else
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case StateImageSourceRole: {
|
case StateImageSourceRole: {
|
||||||
static int randomNumber = 0;
|
static int randomNumber = 0;
|
||||||
randomNumber++;
|
randomNumber++;
|
||||||
@@ -119,9 +117,12 @@ QVariant StatesEditorModel::data(const QModelIndex &index, int role) const
|
|||||||
else
|
else
|
||||||
return QString("image://qmldesigner_stateseditor/%1-%2").arg(index.internalId()).arg(randomNumber);
|
return QString("image://qmldesigner_stateseditor/%1-%2").arg(index.internalId()).arg(randomNumber);
|
||||||
}
|
}
|
||||||
case InternalNodeId: return index.internalId();
|
|
||||||
|
|
||||||
case HasWhenCondition: return stateNode.isValid() && stateNode.hasProperty("when");
|
case InternalNodeId:
|
||||||
|
return index.internalId();
|
||||||
|
|
||||||
|
case HasWhenCondition:
|
||||||
|
return stateNode.isValid() && stateNode.hasProperty("when");
|
||||||
|
|
||||||
case WhenConditionString: {
|
case WhenConditionString: {
|
||||||
if (stateNode.isValid() && stateNode.hasBindingProperty("when"))
|
if (stateNode.isValid() && stateNode.hasBindingProperty("when"))
|
||||||
@@ -137,10 +138,11 @@ QVariant StatesEditorModel::data(const QModelIndex &index, int role) const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
case ModelHasDefaultState: {
|
case ModelHasDefaultState:
|
||||||
return hasDefaultState();
|
return hasDefaultState();
|
||||||
}
|
|
||||||
|
|
||||||
|
case StateType:
|
||||||
|
return index.row() == rowCount() - 1 ? "add" : "state";
|
||||||
}
|
}
|
||||||
|
|
||||||
return QVariant();
|
return QVariant();
|
||||||
@@ -148,14 +150,15 @@ QVariant StatesEditorModel::data(const QModelIndex &index, int role) const
|
|||||||
|
|
||||||
QHash<int, QByteArray> StatesEditorModel::roleNames() const
|
QHash<int, QByteArray> StatesEditorModel::roleNames() const
|
||||||
{
|
{
|
||||||
static QHash<int, QByteArray> roleNames{
|
static QHash<int, QByteArray> roleNames {
|
||||||
{StateNameRole, "stateName"},
|
{StateNameRole, "stateName"},
|
||||||
{StateImageSourceRole, "stateImageSource"},
|
{StateImageSourceRole, "stateImageSource"},
|
||||||
{InternalNodeId, "internalNodeId"},
|
{InternalNodeId, "internalNodeId"},
|
||||||
{HasWhenCondition, "hasWhenCondition"},
|
{HasWhenCondition, "hasWhenCondition"},
|
||||||
{WhenConditionString, "whenConditionString"},
|
{WhenConditionString, "whenConditionString"},
|
||||||
{IsDefault, "isDefault"},
|
{IsDefault, "isDefault"},
|
||||||
{ModelHasDefaultState, "modelHasDefaultState"}
|
{ModelHasDefaultState, "modelHasDefaultState"},
|
||||||
|
{StateType, "type"}
|
||||||
};
|
};
|
||||||
return roleNames;
|
return roleNames;
|
||||||
}
|
}
|
||||||
@@ -163,10 +166,8 @@ QHash<int, QByteArray> StatesEditorModel::roleNames() const
|
|||||||
void StatesEditorModel::insertState(int stateIndex)
|
void StatesEditorModel::insertState(int stateIndex)
|
||||||
{
|
{
|
||||||
if (stateIndex >= 0) {
|
if (stateIndex >= 0) {
|
||||||
|
|
||||||
const int updateIndex = stateIndex + 1;
|
const int updateIndex = stateIndex + 1;
|
||||||
beginInsertRows(QModelIndex(), updateIndex, updateIndex);
|
beginInsertRows(QModelIndex(), updateIndex, updateIndex);
|
||||||
|
|
||||||
endInsertRows();
|
endInsertRows();
|
||||||
|
|
||||||
emit dataChanged(index(updateIndex, 0), index(updateIndex, 0));
|
emit dataChanged(index(updateIndex, 0), index(updateIndex, 0));
|
||||||
|
@@ -44,7 +44,8 @@ class StatesEditorModel : public QAbstractListModel
|
|||||||
HasWhenCondition,
|
HasWhenCondition,
|
||||||
WhenConditionString,
|
WhenConditionString,
|
||||||
IsDefault,
|
IsDefault,
|
||||||
ModelHasDefaultState
|
ModelHasDefaultState,
|
||||||
|
StateType
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@@ -85,12 +85,6 @@ void StatesEditorView::rootNodeTypeChanged(const QString &/*type*/, int /*majorV
|
|||||||
checkForStatesAvailability();
|
checkForStatesAvailability();
|
||||||
}
|
}
|
||||||
|
|
||||||
void StatesEditorView::toggleStatesViewExpanded()
|
|
||||||
{
|
|
||||||
if (m_statesEditorWidget)
|
|
||||||
m_statesEditorWidget->toggleStatesViewExpanded();
|
|
||||||
}
|
|
||||||
|
|
||||||
void StatesEditorView::removeState(int nodeId)
|
void StatesEditorView::removeState(int nodeId)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
@@ -102,6 +96,22 @@ void StatesEditorView::removeState(int nodeId)
|
|||||||
if (modelState.isValid()) {
|
if (modelState.isValid()) {
|
||||||
QStringList lockedTargets;
|
QStringList lockedTargets;
|
||||||
const auto propertyChanges = modelState.propertyChanges();
|
const auto propertyChanges = modelState.propertyChanges();
|
||||||
|
|
||||||
|
// confirm removing not empty states
|
||||||
|
if (!propertyChanges.isEmpty()) {
|
||||||
|
QMessageBox msgBox;
|
||||||
|
msgBox.setTextFormat(Qt::RichText);
|
||||||
|
msgBox.setIcon(QMessageBox::Question);
|
||||||
|
msgBox.setWindowTitle(tr("Remove State"));
|
||||||
|
msgBox.setText(tr("This state is not empty. Are you sure you want to remove it?"));
|
||||||
|
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel);
|
||||||
|
msgBox.setDefaultButton(QMessageBox::Yes);
|
||||||
|
|
||||||
|
if (msgBox.exec() == QMessageBox::Cancel)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// confirm removing states with locked targets
|
||||||
for (const QmlPropertyChanges &change : propertyChanges) {
|
for (const QmlPropertyChanges &change : propertyChanges) {
|
||||||
const ModelNode target = change.target();
|
const ModelNode target = change.target();
|
||||||
QTC_ASSERT(target.isValid(), continue);
|
QTC_ASSERT(target.isValid(), continue);
|
||||||
|
@@ -87,8 +87,6 @@ public:
|
|||||||
|
|
||||||
void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion) override;
|
void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion) override;
|
||||||
|
|
||||||
void toggleStatesViewExpanded();
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void synchonizeCurrentStateFromWidget();
|
void synchonizeCurrentStateFromWidget();
|
||||||
void createNewState();
|
void createNewState();
|
||||||
|
@@ -133,13 +133,6 @@ QString StatesEditorWidget::qmlSourcesPath()
|
|||||||
return Core::ICore::resourcePath("qmldesigner/statesEditorQmlSources").toString();
|
return Core::ICore::resourcePath("qmldesigner/statesEditorQmlSources").toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
void StatesEditorWidget::toggleStatesViewExpanded()
|
|
||||||
{
|
|
||||||
QTC_ASSERT(rootObject(), return);
|
|
||||||
bool expanded = rootObject()->property("expanded").toBool();
|
|
||||||
rootObject()->setProperty("expanded", !expanded);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StatesEditorWidget::showEvent(QShowEvent *event)
|
void StatesEditorWidget::showEvent(QShowEvent *event)
|
||||||
{
|
{
|
||||||
QQuickWidget::showEvent(event);
|
QQuickWidget::showEvent(event);
|
||||||
@@ -168,18 +161,6 @@ void StatesEditorWidget::reloadQmlSource()
|
|||||||
connect(rootObject(), SIGNAL(createNewState()), m_statesEditorView.data(), SLOT(createNewState()));
|
connect(rootObject(), SIGNAL(createNewState()), m_statesEditorView.data(), SLOT(createNewState()));
|
||||||
connect(rootObject(), SIGNAL(deleteState(int)), m_statesEditorView.data(), SLOT(removeState(int)));
|
connect(rootObject(), SIGNAL(deleteState(int)), m_statesEditorView.data(), SLOT(removeState(int)));
|
||||||
m_statesEditorView.data()->synchonizeCurrentStateFromWidget();
|
m_statesEditorView.data()->synchonizeCurrentStateFromWidget();
|
||||||
|
|
||||||
if (!DesignerSettings::getValue(DesignerSettingsKey::STATESEDITOR_EXPANDED).toBool())
|
|
||||||
toggleStatesViewExpanded();
|
|
||||||
|
|
||||||
connect(rootObject(), SIGNAL(expandedChanged()), this, SLOT(handleExpandedChanged()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void StatesEditorWidget::handleExpandedChanged()
|
} // QmlDesigner
|
||||||
{
|
|
||||||
QTC_ASSERT(rootObject(), return);
|
|
||||||
|
|
||||||
bool expanded = rootObject()->property("expanded").toBool();
|
|
||||||
DesignerSettings::setValue(DesignerSettingsKey::STATESEDITOR_EXPANDED, expanded);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@@ -57,14 +57,11 @@ public:
|
|||||||
|
|
||||||
static QString qmlSourcesPath();
|
static QString qmlSourcesPath();
|
||||||
|
|
||||||
void toggleStatesViewExpanded();
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void showEvent(QShowEvent *) override;
|
void showEvent(QShowEvent *) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void reloadQmlSource();
|
void reloadQmlSource();
|
||||||
Q_SLOT void handleExpandedChanged();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QPointer<StatesEditorView> m_statesEditorView;
|
QPointer<StatesEditorView> m_statesEditorView;
|
||||||
|
@@ -100,8 +100,6 @@ public:
|
|||||||
DesignerActionManager &designerActionManager();
|
DesignerActionManager &designerActionManager();
|
||||||
const DesignerActionManager &designerActionManager() const;
|
const DesignerActionManager &designerActionManager() const;
|
||||||
|
|
||||||
void toggleStatesViewExpanded();
|
|
||||||
|
|
||||||
void qmlJSEditorContextHelp(const Core::IContext::HelpCallback &callback) const;
|
void qmlJSEditorContextHelp(const Core::IContext::HelpCallback &callback) const;
|
||||||
DesignDocument *currentDesignDocument() const;
|
DesignDocument *currentDesignDocument() const;
|
||||||
|
|
||||||
|
@@ -394,11 +394,6 @@ const DesignerActionManager &ViewManager::designerActionManager() const
|
|||||||
return d->designerActionManagerView.designerActionManager();
|
return d->designerActionManagerView.designerActionManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ViewManager::toggleStatesViewExpanded()
|
|
||||||
{
|
|
||||||
d->statesEditorView.toggleStatesViewExpanded();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ViewManager::qmlJSEditorContextHelp(const Core::IContext::HelpCallback &callback) const
|
void ViewManager::qmlJSEditorContextHelp(const Core::IContext::HelpCallback &callback) const
|
||||||
{
|
{
|
||||||
d->textEditorView.qmlJSEditorContextHelp(callback);
|
d->textEditorView.qmlJSEditorContextHelp(callback);
|
||||||
|
@@ -72,7 +72,6 @@ void DesignerSettings::fromSettings(QSettings *settings)
|
|||||||
restoreValue(settings, DesignerSettingsKey::FORWARD_PUPPET_OUTPUT, QString());
|
restoreValue(settings, DesignerSettingsKey::FORWARD_PUPPET_OUTPUT, QString());
|
||||||
restoreValue(settings, DesignerSettingsKey::REFORMAT_UI_QML_FILES, true);
|
restoreValue(settings, DesignerSettingsKey::REFORMAT_UI_QML_FILES, true);
|
||||||
restoreValue(settings, DesignerSettingsKey::IGNORE_DEVICE_PIXEL_RATIO, false);
|
restoreValue(settings, DesignerSettingsKey::IGNORE_DEVICE_PIXEL_RATIO, false);
|
||||||
restoreValue(settings, DesignerSettingsKey::STATESEDITOR_EXPANDED, true);
|
|
||||||
restoreValue(settings, DesignerSettingsKey::NAVIGATOR_SHOW_ONLY_VISIBLE_ITEMS, true);
|
restoreValue(settings, DesignerSettingsKey::NAVIGATOR_SHOW_ONLY_VISIBLE_ITEMS, true);
|
||||||
restoreValue(settings, DesignerSettingsKey::NAVIGATOR_REVERSE_ITEM_ORDER, false);
|
restoreValue(settings, DesignerSettingsKey::NAVIGATOR_REVERSE_ITEM_ORDER, false);
|
||||||
restoreValue(settings, DesignerSettingsKey::STANDALONE_MODE, false);
|
restoreValue(settings, DesignerSettingsKey::STANDALONE_MODE, false);
|
||||||
|
@@ -60,7 +60,6 @@ const char ENABLE_MODEL_EXCEPTION_OUTPUT[] = "WarnException";
|
|||||||
const char PUPPET_KILL_TIMEOUT[] = "PuppetKillTimeout";
|
const char PUPPET_KILL_TIMEOUT[] = "PuppetKillTimeout";
|
||||||
const char DEBUG_PUPPET[] = "DebugPuppet";
|
const char DEBUG_PUPPET[] = "DebugPuppet";
|
||||||
const char FORWARD_PUPPET_OUTPUT[] = "ForwardPuppetOutput";
|
const char FORWARD_PUPPET_OUTPUT[] = "ForwardPuppetOutput";
|
||||||
const char STATESEDITOR_EXPANDED[] = "StatesEditorExpanded";
|
|
||||||
const char NAVIGATOR_SHOW_ONLY_VISIBLE_ITEMS[] = "NavigatorShowOnlyVisibleItems";
|
const char NAVIGATOR_SHOW_ONLY_VISIBLE_ITEMS[] = "NavigatorShowOnlyVisibleItems";
|
||||||
const char NAVIGATOR_REVERSE_ITEM_ORDER[] = "NavigatorReverseItemOrder";
|
const char NAVIGATOR_REVERSE_ITEM_ORDER[] = "NavigatorReverseItemOrder";
|
||||||
const char REFORMAT_UI_QML_FILES[] = "ReformatUiQmlFiles"; /* These settings are not exposed in ui. */
|
const char REFORMAT_UI_QML_FILES[] = "ReformatUiQmlFiles"; /* These settings are not exposed in ui. */
|
||||||
|
@@ -511,8 +511,14 @@ bool DocumentManager::belongsToQmakeProject()
|
|||||||
Utils::FilePath DocumentManager::currentResourcePath()
|
Utils::FilePath DocumentManager::currentResourcePath()
|
||||||
{
|
{
|
||||||
Utils::FilePath resourcePath = currentProjectDirPath();
|
Utils::FilePath resourcePath = currentProjectDirPath();
|
||||||
|
|
||||||
if (resourcePath.isEmpty())
|
if (resourcePath.isEmpty())
|
||||||
return currentFilePath().absolutePath();
|
return currentFilePath().absolutePath();
|
||||||
|
|
||||||
|
FilePath contentFilePath = resourcePath.pathAppended("content");
|
||||||
|
if (contentFilePath.exists())
|
||||||
|
return contentFilePath;
|
||||||
|
|
||||||
return resourcePath;
|
return resourcePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -205,8 +205,6 @@ bool showConfirmationDialog(const Utils::FilePath &rootDir)
|
|||||||
files.append(file.filePath);
|
files.append(file.filePath);
|
||||||
|
|
||||||
CmakeGeneratorDialog dialog(rootDir, files);
|
CmakeGeneratorDialog dialog(rootDir, files);
|
||||||
dialog.setMinimumWidth(600);
|
|
||||||
dialog.setMinimumHeight(640);
|
|
||||||
if (dialog.exec()) {
|
if (dialog.exec()) {
|
||||||
Utils::FilePaths confirmedFiles = dialog.getFilePaths();
|
Utils::FilePaths confirmedFiles = dialog.getFilePaths();
|
||||||
removeUnconfirmedQueuedFiles(confirmedFiles);
|
removeUnconfirmedQueuedFiles(confirmedFiles);
|
||||||
|
@@ -69,7 +69,6 @@ ShortCutManager::ShortCutManager()
|
|||||||
m_copyAction(tr("&Copy")),
|
m_copyAction(tr("&Copy")),
|
||||||
m_pasteAction(tr("&Paste")),
|
m_pasteAction(tr("&Paste")),
|
||||||
m_selectAllAction(tr("Select &All")),
|
m_selectAllAction(tr("Select &All")),
|
||||||
m_collapseExpandStatesAction(tr("Toggle States")),
|
|
||||||
m_escapeAction(this)
|
m_escapeAction(this)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -97,10 +96,6 @@ void ShortCutManager::registerActions(const Core::Context &qmlDesignerMainContex
|
|||||||
|
|
||||||
connect(&m_selectAllAction,&QAction::triggered, this, &ShortCutManager::selectAll);
|
connect(&m_selectAllAction,&QAction::triggered, this, &ShortCutManager::selectAll);
|
||||||
|
|
||||||
connect(&m_collapseExpandStatesAction, &QAction::triggered, [] {
|
|
||||||
QmlDesignerPlugin::instance()->viewManager().toggleStatesViewExpanded();
|
|
||||||
});
|
|
||||||
|
|
||||||
// Revert to saved
|
// Revert to saved
|
||||||
Core::EditorManager *em = Core::EditorManager::instance();
|
Core::EditorManager *em = Core::EditorManager::instance();
|
||||||
Core::ActionManager::registerAction(&m_revertToSavedAction,Core::Constants::REVERTTOSAVED, qmlDesignerMainContext);
|
Core::ActionManager::registerAction(&m_revertToSavedAction,Core::Constants::REVERTTOSAVED, qmlDesignerMainContext);
|
||||||
@@ -188,13 +183,6 @@ void ShortCutManager::registerActions(const Core::Context &qmlDesignerMainContex
|
|||||||
command->setDefaultKeySequence(QKeySequence::SelectAll);
|
command->setDefaultKeySequence(QKeySequence::SelectAll);
|
||||||
editMenu->addAction(command, Core::Constants::G_EDIT_SELECTALL);
|
editMenu->addAction(command, Core::Constants::G_EDIT_SELECTALL);
|
||||||
|
|
||||||
Core::ActionContainer *viewsMenu = Core::ActionManager::actionContainer(Core::Constants::M_VIEW_VIEWS);
|
|
||||||
|
|
||||||
command = Core::ActionManager::registerAction(&m_collapseExpandStatesAction, Constants::TOGGLE_STATES_EDITOR, qmlDesignerMainContext);
|
|
||||||
command->setAttribute(Core::Command::CA_Hide);
|
|
||||||
command->setDefaultKeySequence(QKeySequence("Ctrl+Alt+s"));
|
|
||||||
viewsMenu->addAction(command);
|
|
||||||
|
|
||||||
/* Registering disabled action for Escape, because Qt Quick does not support shortcut overrides. */
|
/* Registering disabled action for Escape, because Qt Quick does not support shortcut overrides. */
|
||||||
command = Core::ActionManager::registerAction(&m_escapeAction, Core::Constants::S_RETURNTOEDITOR, qmlDesignerMainContext);
|
command = Core::ActionManager::registerAction(&m_escapeAction, Core::Constants::S_RETURNTOEDITOR, qmlDesignerMainContext);
|
||||||
command->setDefaultKeySequence(QKeySequence(Qt::Key_Escape));
|
command->setDefaultKeySequence(QKeySequence(Qt::Key_Escape));
|
||||||
|
@@ -83,7 +83,6 @@ private:
|
|||||||
QAction m_copyAction;
|
QAction m_copyAction;
|
||||||
QAction m_pasteAction;
|
QAction m_pasteAction;
|
||||||
QAction m_selectAllAction;
|
QAction m_selectAllAction;
|
||||||
QAction m_collapseExpandStatesAction;
|
|
||||||
QAction m_escapeAction;
|
QAction m_escapeAction;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -581,6 +581,7 @@ void StudioWelcomePlugin::extensionsInitialized()
|
|||||||
Core::ModeManager::activateMode(m_welcomeMode->id());
|
Core::ModeManager::activateMode(m_welcomeMode->id());
|
||||||
|
|
||||||
// Enable QDS new project dialog
|
// Enable QDS new project dialog
|
||||||
|
if (Core::ICore::settings()->value("QML/Designer/StandAloneMode", false).toBool())
|
||||||
Core::ICore::setNewDialogFactory([](QWidget *parent) { return new QdsNewDialog(parent); });
|
Core::ICore::setNewDialogFactory([](QWidget *parent) { return new QdsNewDialog(parent); });
|
||||||
|
|
||||||
if (showSplashScreen()) {
|
if (showSplashScreen()) {
|
||||||
|
@@ -2984,7 +2984,7 @@ bool TextEditorWidget::event(QEvent *e)
|
|||||||
&& (ke->key() < Qt::Key_Escape));
|
&& (ke->key() < Qt::Key_Escape));
|
||||||
d->m_maybeFakeTooltipEvent = false;
|
d->m_maybeFakeTooltipEvent = false;
|
||||||
}
|
}
|
||||||
break;
|
return true;
|
||||||
}
|
}
|
||||||
case QEvent::ApplicationPaletteChange: {
|
case QEvent::ApplicationPaletteChange: {
|
||||||
// slight hack: ignore palette changes
|
// slight hack: ignore palette changes
|
||||||
|
@@ -37,7 +37,7 @@ def placeCursorToLine(editor, line, isRegex=False):
|
|||||||
return waitForObject(editor)
|
return waitForObject(editor)
|
||||||
|
|
||||||
isDarwin = platform.system() == 'Darwin'
|
isDarwin = platform.system() == 'Darwin'
|
||||||
if not isinstance(editor, (str, unicode)):
|
if not isString(editor):
|
||||||
editor = objectMap.realName(editor)
|
editor = objectMap.realName(editor)
|
||||||
oldPosition = 0
|
oldPosition = 0
|
||||||
jumpToFirstLine(getEditor())
|
jumpToFirstLine(getEditor())
|
||||||
@@ -120,7 +120,7 @@ def replaceEditorContent(editor, newcontent):
|
|||||||
type(editor, newcontent)
|
type(editor, newcontent)
|
||||||
|
|
||||||
def typeLines(editor, lines):
|
def typeLines(editor, lines):
|
||||||
if isinstance(lines, (str, unicode)):
|
if isString(lines):
|
||||||
lines = [lines]
|
lines = [lines]
|
||||||
if isinstance(lines, (list, tuple)):
|
if isinstance(lines, (list, tuple)):
|
||||||
for line in lines:
|
for line in lines:
|
||||||
|
@@ -35,10 +35,10 @@ def changeFilePermissions(dirPath, readPerm, writePerm, excludeFileNames=None):
|
|||||||
permission |= stat.S_IWRITE
|
permission |= stat.S_IWRITE
|
||||||
if excludeFileNames == None:
|
if excludeFileNames == None:
|
||||||
excludeFileNames = []
|
excludeFileNames = []
|
||||||
elif isinstance(excludeFileNames, (str, unicode)):
|
elif isString(excludeFileNames):
|
||||||
excludeFileNames = [excludeFileNames]
|
excludeFileNames = [excludeFileNames]
|
||||||
if not isinstance(excludeFileNames, (tuple, list)):
|
if not isinstance(excludeFileNames, (tuple, list)):
|
||||||
test.warning("File names to exclude must be of type str, unicode, list, tuple or None - "
|
test.warning("File names to exclude must be of type str, list, tuple or None - "
|
||||||
"ignoring parameter this time.")
|
"ignoring parameter this time.")
|
||||||
excludeFileNames = []
|
excludeFileNames = []
|
||||||
if not os.path.isdir(dirPath):
|
if not os.path.isdir(dirPath):
|
||||||
|
@@ -95,8 +95,8 @@ def setRunInTerminal(wantedKit, runInTerminal=True):
|
|||||||
switchViewTo(ViewConstants.EDIT)
|
switchViewTo(ViewConstants.EDIT)
|
||||||
|
|
||||||
def __getTargetFromToolTip__(toolTip):
|
def __getTargetFromToolTip__(toolTip):
|
||||||
if toolTip == None or not isinstance(toolTip, (str, unicode)):
|
if toolTip == None or not isString(toolTip):
|
||||||
test.warning("Parameter toolTip must be of type str or unicode and can't be None!")
|
test.warning("Parameter toolTip must be of type str and can't be None!")
|
||||||
return None
|
return None
|
||||||
pattern = re.compile(".*<b>Kit:</b>(.*)<b>Deploy.*")
|
pattern = re.compile(".*<b>Kit:</b>(.*)<b>Deploy.*")
|
||||||
target = pattern.match(toolTip)
|
target = pattern.match(toolTip)
|
||||||
@@ -108,7 +108,7 @@ def __getTargetFromToolTip__(toolTip):
|
|||||||
|
|
||||||
def getExecutableAndTargetFromToolTip(toolTip):
|
def getExecutableAndTargetFromToolTip(toolTip):
|
||||||
target = __getTargetFromToolTip__(toolTip)
|
target = __getTargetFromToolTip__(toolTip)
|
||||||
if toolTip == None or not isinstance(toolTip, (str, unicode)):
|
if toolTip == None or not isString(toolTip):
|
||||||
return None, target
|
return None, target
|
||||||
pattern = re.compile('.*<b>Run:</b>(.*)</.*')
|
pattern = re.compile('.*<b>Run:</b>(.*)</.*')
|
||||||
exe = pattern.match(toolTip)
|
exe = pattern.match(toolTip)
|
||||||
|
@@ -76,7 +76,7 @@ def ensureChecked(objectName, shouldBeChecked = True, timeout=20000):
|
|||||||
# or the object itself. If it is an object, it must exist already.
|
# or the object itself. If it is an object, it must exist already.
|
||||||
# param expectedState is the expected enable state of the object
|
# param expectedState is the expected enable state of the object
|
||||||
def verifyEnabled(objectSpec, expectedState = True):
|
def verifyEnabled(objectSpec, expectedState = True):
|
||||||
if isinstance(objectSpec, (str, unicode)):
|
if isString(objectSpec):
|
||||||
waitFor("object.exists('" + str(objectSpec).replace("'", "\\'") + "')", 20000)
|
waitFor("object.exists('" + str(objectSpec).replace("'", "\\'") + "')", 20000)
|
||||||
foundObject = findObject(objectSpec)
|
foundObject = findObject(objectSpec)
|
||||||
else:
|
else:
|
||||||
@@ -154,7 +154,7 @@ def which(program):
|
|||||||
def cleanUpUserFiles(pathsToProFiles=None):
|
def cleanUpUserFiles(pathsToProFiles=None):
|
||||||
if pathsToProFiles==None:
|
if pathsToProFiles==None:
|
||||||
return False
|
return False
|
||||||
if isinstance(pathsToProFiles, (str, unicode)):
|
if isString(pathsToProFiles):
|
||||||
filelist = glob.glob(pathsToProFiles+".user*")
|
filelist = glob.glob(pathsToProFiles+".user*")
|
||||||
elif isinstance(pathsToProFiles, (list, tuple)):
|
elif isinstance(pathsToProFiles, (list, tuple)):
|
||||||
filelist = []
|
filelist = []
|
||||||
@@ -398,10 +398,10 @@ def enabledCheckBoxExists(text):
|
|||||||
|
|
||||||
# this function verifies if the text matches the given
|
# this function verifies if the text matches the given
|
||||||
# regex inside expectedTexts
|
# regex inside expectedTexts
|
||||||
# param text must be a single str/unicode
|
# param text must be a single str
|
||||||
# param expectedTexts can be str/unicode/list/tuple
|
# param expectedTexts can be str/list/tuple
|
||||||
def regexVerify(text, expectedTexts):
|
def regexVerify(text, expectedTexts):
|
||||||
if isinstance(expectedTexts, (str,unicode)):
|
if isString(expectedTexts):
|
||||||
expectedTexts = [expectedTexts]
|
expectedTexts = [expectedTexts]
|
||||||
for curr in expectedTexts:
|
for curr in expectedTexts:
|
||||||
pattern = re.compile(curr)
|
pattern = re.compile(curr)
|
||||||
@@ -453,7 +453,7 @@ def iterateQtVersions(keepOptionsOpen=False, alreadyOnOptionsDialog=False,
|
|||||||
result.append({target:version})
|
result.append({target:version})
|
||||||
if additionalFunction:
|
if additionalFunction:
|
||||||
try:
|
try:
|
||||||
if isinstance(additionalFunction, (str, unicode)):
|
if isString(additionalFunction):
|
||||||
currResult = globals()[additionalFunction](target, version, *argsForAdditionalFunc)
|
currResult = globals()[additionalFunction](target, version, *argsForAdditionalFunc)
|
||||||
else:
|
else:
|
||||||
currResult = additionalFunction(target, version, *argsForAdditionalFunc)
|
currResult = additionalFunction(target, version, *argsForAdditionalFunc)
|
||||||
@@ -514,7 +514,7 @@ def iterateKits(keepOptionsOpen=False, alreadyOnOptionsDialog=False,
|
|||||||
currentItem.replace(".", "\\.")])
|
currentItem.replace(".", "\\.")])
|
||||||
if additionalFunction:
|
if additionalFunction:
|
||||||
try:
|
try:
|
||||||
if isinstance(additionalFunction, (str, unicode)):
|
if isString(additionalFunction):
|
||||||
currResult = globals()[additionalFunction](item, kitName, *argsForAdditionalFunc)
|
currResult = globals()[additionalFunction](item, kitName, *argsForAdditionalFunc)
|
||||||
else:
|
else:
|
||||||
currResult = additionalFunction(item, kitName, *argsForAdditionalFunc)
|
currResult = additionalFunction(item, kitName, *argsForAdditionalFunc)
|
||||||
@@ -674,3 +674,10 @@ def getHelpViewer():
|
|||||||
|
|
||||||
def getHelpTitle():
|
def getHelpTitle():
|
||||||
return str(getHelpViewer().title())
|
return str(getHelpViewer().title())
|
||||||
|
|
||||||
|
|
||||||
|
def isString(sth):
|
||||||
|
if sys.version_info.major > 2:
|
||||||
|
return isinstance(sth, str)
|
||||||
|
else:
|
||||||
|
return isinstance(sth, (str, unicode))
|
||||||
|
@@ -87,7 +87,6 @@ def testRenameId():
|
|||||||
formerTxt = editor.plainText
|
formerTxt = editor.plainText
|
||||||
originalText = originalTexts.get(file).replace("mainView", "renamedView")
|
originalText = originalTexts.get(file).replace("mainView", "renamedView")
|
||||||
test.compare(originalText,formerTxt, "Comparing %s" % file.replace("Core.","").replace("\\",""))
|
test.compare(originalText,formerTxt, "Comparing %s" % file.replace("Core.","").replace("\\",""))
|
||||||
invokeMenuItem("File","Save All")
|
|
||||||
|
|
||||||
def __invokeFindUsage__(filename, line, additionalKeyPresses, expectedCount):
|
def __invokeFindUsage__(filename, line, additionalKeyPresses, expectedCount):
|
||||||
openDocument(focusDocumentPath % filename)
|
openDocument(focusDocumentPath % filename)
|
||||||
|
@@ -46,6 +46,8 @@ def main():
|
|||||||
expectedHeaderName=headerName)
|
expectedHeaderName=headerName)
|
||||||
if not testRenameMacroAfterSourceMoving():
|
if not testRenameMacroAfterSourceMoving():
|
||||||
return
|
return
|
||||||
|
# save and exit
|
||||||
|
invokeMenuItem("File", "Save All")
|
||||||
invokeMenuItem("File", "Exit")
|
invokeMenuItem("File", "Exit")
|
||||||
|
|
||||||
def testRenameMacroAfterSourceModification():
|
def testRenameMacroAfterSourceModification():
|
||||||
@@ -156,8 +158,7 @@ def revertChanges(files):
|
|||||||
simpleName = simpleFileName(f)
|
simpleName = simpleFileName(f)
|
||||||
if openDocument(f):
|
if openDocument(f):
|
||||||
try:
|
try:
|
||||||
invokeMenuItem('File', 'Revert "%s" to Saved' % simpleName)
|
invokeMenuItem('Edit', 'Undo')
|
||||||
clickButton(waitForObject(":Revert to Saved.Proceed_QPushButton"))
|
|
||||||
test.log("Reverted changes inside %s" % simpleName)
|
test.log("Reverted changes inside %s" % simpleName)
|
||||||
except:
|
except:
|
||||||
test.warning("File '%s' cannot be reverted." % simpleName,
|
test.warning("File '%s' cannot be reverted." % simpleName,
|
||||||
|
@@ -306,7 +306,7 @@ def __compareCompilers__(foundCompilers, expectedCompilers):
|
|||||||
if isinstance(currentFound, dict):
|
if isinstance(currentFound, dict):
|
||||||
foundExp = False
|
foundExp = False
|
||||||
for currentExp in expectedCompilers:
|
for currentExp in expectedCompilers:
|
||||||
if isinstance(currentExp, (str, unicode)):
|
if isString(currentExp):
|
||||||
continue
|
continue
|
||||||
key = currentExp.keys()[0]
|
key = currentExp.keys()[0]
|
||||||
# special case for (fuzzy) regex comparison on Windows (internal LLVM)
|
# special case for (fuzzy) regex comparison on Windows (internal LLVM)
|
||||||
@@ -353,7 +353,7 @@ def __compareDebuggers__(foundDebuggers, expectedDebuggers):
|
|||||||
|
|
||||||
def __lowerStrs__(iterable):
|
def __lowerStrs__(iterable):
|
||||||
for it in iterable:
|
for it in iterable:
|
||||||
if isinstance(it, (str, unicode)):
|
if isString(it):
|
||||||
yield it.lower()
|
yield it.lower()
|
||||||
else:
|
else:
|
||||||
yield it
|
yield it
|
||||||
|