summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Jenssen <tim.jenssen@qt.io>2021-12-01 17:56:12 +0100
committerTim Jenssen <tim.jenssen@qt.io>2021-12-01 16:56:37 +0000
commit4710d765b22bc1ee4657fd346b92ec098f7c4c09 (patch)
tree2103e9d2e25ce39a5b234ef45b927aa710d42235
parentbbb7a8fe4e99d5f4a31a4c6c115ccefd288fc933 (diff)
parent38b2bb9fb2fbc0d764605c9a103ff58ea26c2d61 (diff)
downloadqt-creator-4710d765b22bc1ee4657fd346b92ec098f7c4c09.tar.gz
Merge remote-tracking branch 'origin/6.0' into qds-2.3
Change-Id: I67a01bae763ef723a88bf4cb94ef29c713eaa743
-rw-r--r--doc/qtcreator/src/projects/creator-only/creator-projects-settings-environment.qdoc10
-rw-r--r--doc/qtcreator/src/user-interface/creator-ui.qdoc2
-rw-r--r--doc/qtdesignstudio/examples/doc/loginui1.qdoc1
-rw-r--r--doc/qtdesignstudio/examples/doc/loginui2.qdoc1
-rw-r--r--doc/qtdesignstudio/examples/doc/loginui3.qdoc1
-rw-r--r--doc/qtdesignstudio/examples/doc/loginui4.qdoc3
-rw-r--r--doc/qtdesignstudio/src/overviews/qtquick-uis.qdoc2
-rw-r--r--doc/qtdesignstudio/src/qtdesignstudio-examples.qdoc46
-rw-r--r--doc/qtdesignstudio/src/qtdesignstudio-faq.qdoc2
-rw-r--r--doc/qtdesignstudio/src/qtdesignstudio-getting-started.qdoc8
-rw-r--r--doc/qtdesignstudio/src/qtdesignstudio-installation.qdoc6
-rw-r--r--doc/qtdesignstudio/src/qtdesignstudio-terms.qdoc2
-rw-r--r--doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc4
-rw-r--r--doc/qtdesignstudio/src/qtdesignstudio-tutorials.qdoc24
-rw-r--r--doc/qtdesignstudio/src/qtdesignstudio.qdoc4
-rw-r--r--share/qtcreator/qmldesigner/newprojectdialog/NewProjectDialog.qml181
-rw-r--r--share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/Details.qml642
-rw-r--r--share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/DialogValues.qml14
-rw-r--r--share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/NewProjectView.qml54
-rw-r--r--share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/Styles.qml3
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/ComboBox.qml4
-rw-r--r--src/plugins/mcusupport/mcusupportcmakemapper.cpp7
-rw-r--r--src/plugins/mcusupport/mcusupportoptions.cpp32
-rw-r--r--src/plugins/qmldesigner/generatecmakelists.cpp102
-rw-r--r--src/plugins/qmldesigner/generatecmakelists.h6
-rw-r--r--src/plugins/qmldesigner/generatecmakelistsconstants.h2
-rw-r--r--src/plugins/qmldesigner/qmlprojectmodulecmakelists.tpl4
-rw-r--r--src/plugins/qmldesigner/qmlprojectmodules.tpl5
-rw-r--r--src/plugins/studiowelcome/newprojectdialogimageprovider.cpp22
-rw-r--r--src/plugins/studiowelcome/newprojectdialogimageprovider.h1
-rw-r--r--src/plugins/studiowelcome/qdsnewdialog.cpp13
-rw-r--r--src/plugins/texteditor/texteditor.cpp2
32 files changed, 693 insertions, 517 deletions
diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-environment.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-environment.qdoc
index e3209835c0..6a4dc9bf92 100644
--- a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-environment.qdoc
+++ b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-environment.qdoc
@@ -55,10 +55,12 @@
\image qtcreator-build-environment.png "Build Environment"
- \note The changes are stored in the local project specific \c{.pro.user}
- file. Therefore, they are not suitable for sharing between developers or
- development PCs. To share settings, incorporate them into the build system.
- For example, if you use qmake, make the changes in the \c{.pro} file.
+ The changes are stored in the local project specific \c{CMakeLists.txt.user}
+ or \c{.pro.user} file, depending on the build system you use. Therefore,
+ they are not suitable for sharing between developers or development PCs. To
+ share settings, incorporate them into the build system. For example, if you
+ use CMake, make the changes in the \c {CMakeLists.txt} file, and if you use
+ qmake, make the changes in the \c{.pro} file.
\section1 Batch Editing
diff --git a/doc/qtcreator/src/user-interface/creator-ui.qdoc b/doc/qtcreator/src/user-interface/creator-ui.qdoc
index 2af504a69d..2d154021cf 100644
--- a/doc/qtcreator/src/user-interface/creator-ui.qdoc
+++ b/doc/qtcreator/src/user-interface/creator-ui.qdoc
@@ -32,7 +32,7 @@
/*!
\page creator-quick-tour.html
\if defined(qtdesignstudio)
- \previouspage {Your First UI}
+ \previouspage {Tutorials}
\else
\previouspage creator-overview.html
\endif
diff --git a/doc/qtdesignstudio/examples/doc/loginui1.qdoc b/doc/qtdesignstudio/examples/doc/loginui1.qdoc
index 0165817ad6..31e1ebb549 100644
--- a/doc/qtdesignstudio/examples/doc/loginui1.qdoc
+++ b/doc/qtdesignstudio/examples/doc/loginui1.qdoc
@@ -25,7 +25,6 @@
/*!
\example loginui1
- \ingroup studioexamples
\ingroup gstutorials
\nextpage {Log In UI - Positioning}
diff --git a/doc/qtdesignstudio/examples/doc/loginui2.qdoc b/doc/qtdesignstudio/examples/doc/loginui2.qdoc
index 0a74a67f85..6ff8b2f542 100644
--- a/doc/qtdesignstudio/examples/doc/loginui2.qdoc
+++ b/doc/qtdesignstudio/examples/doc/loginui2.qdoc
@@ -25,7 +25,6 @@
/*!
\example loginui2
- \ingroup studioexamples
\ingroup gstutorials
\previouspage {Log In UI - Components}
\nextpage {Log In UI - States}
diff --git a/doc/qtdesignstudio/examples/doc/loginui3.qdoc b/doc/qtdesignstudio/examples/doc/loginui3.qdoc
index a7a919319c..d04690b224 100644
--- a/doc/qtdesignstudio/examples/doc/loginui3.qdoc
+++ b/doc/qtdesignstudio/examples/doc/loginui3.qdoc
@@ -25,7 +25,6 @@
/*!
\example loginui3
- \ingroup studioexamples
\ingroup gstutorials
\title Log In UI - States
diff --git a/doc/qtdesignstudio/examples/doc/loginui4.qdoc b/doc/qtdesignstudio/examples/doc/loginui4.qdoc
index b88c122558..5c8bdca033 100644
--- a/doc/qtdesignstudio/examples/doc/loginui4.qdoc
+++ b/doc/qtdesignstudio/examples/doc/loginui4.qdoc
@@ -25,7 +25,6 @@
/*!
\example loginui4
- \ingroup studioexamples
\ingroup gstutorials
\title Log In UI - Timeline
@@ -324,5 +323,5 @@
\section1 Next Steps
- For more examples about using timelines, see \l{Examples and Tutorials}.
+ For more examples about using timelines, see \l{Examples}.
*/
diff --git a/doc/qtdesignstudio/src/overviews/qtquick-uis.qdoc b/doc/qtdesignstudio/src/overviews/qtquick-uis.qdoc
index 3cb66337fc..4b626c46e0 100644
--- a/doc/qtdesignstudio/src/overviews/qtquick-uis.qdoc
+++ b/doc/qtdesignstudio/src/overviews/qtquick-uis.qdoc
@@ -26,7 +26,7 @@
/*!
\page quick-uis.html
\if defined(qtdesignstudio)
- \previouspage {Examples and Tutorials}
+ \previouspage {Examples}
\nextpage studio-app-flows.html
\else
\previouspage qtquick-text-editor.html
diff --git a/doc/qtdesignstudio/src/qtdesignstudio-examples.qdoc b/doc/qtdesignstudio/src/qtdesignstudio-examples.qdoc
index d2b7a7e9dd..f80f66dc38 100644
--- a/doc/qtdesignstudio/src/qtdesignstudio-examples.qdoc
+++ b/doc/qtdesignstudio/src/qtdesignstudio-examples.qdoc
@@ -27,43 +27,29 @@
\previouspage studio-terms.html
\group studioexamples
\nextpage quick-uis.html
- \title Examples and Tutorials
+ \title Examples
- In the \uicontrol Welcome mode, you can open examples and tutorials that
- illustrate how to use \QDS. Some examples are delivered together with
- \QDS and have been documented, while you can download and install others
- for previewing them on the desktop.
-
- \section1 Video Tutorials
-
- The \uicontrol Tutorials tab contains links to video tutorials that provide
- more information about \QDS. To watch a tutorial on YouTube, select it in
- the tab.
-
- \include qtbridge-tutorial-links.qdocinc qtsketchbridge tutorials
-
- \section1 Examples for Downloading
-
- The \uicontrol Examples tab lists complex example applications for
- downloading that demonstrate what you can accomplish with \QDS.
+ \QDS comes with a set of example projects. To see these, select \uicontrol
+ Examples on the \uicontrol Welcome page when you run \QDS.
\image studio-examples-download.png "Examples for download in Welcome mode"
- To download the examples and open them in \QDS:
+ To run an example project:
+ \list 1
+ \li Select the example.
+ \li Select the \inlineimage live_preview.png
+ (\uicontrol {Show Live Preview}) button to preview the example.
+ \endlist
+ Some of the example projects require that you download them before you can run them, to do this:
\list 1
- \li Select an example.
- \li Select \uicontrol {Start Download} to download the example source
- files.
- \li Select the folder where the source files will be installed.
- \li Select \uicontrol Continue to install the files.
- \li Select \uicontrol Open to open the example in \QDS.
- \li Select the \inlineimage live_preview.png
- (\uicontrol {Show Live Preview}) button to preview the example.
+ \li Select an example.
+ \li Select \uicontrol {Start Download}.
+ \li Select the folder where the source files will be installed.
+ \li Select \uicontrol Continue to install the files.
+ \li Select \uicontrol Open to open the example in \QDS.
\endlist
- \section1 Documented Examples
+ \section1 Example Documentation
- The \uicontrol Examples tab lists documented examples of using \QDS. To
- open an example in \QDS, select it in the tab.
*/
diff --git a/doc/qtdesignstudio/src/qtdesignstudio-faq.qdoc b/doc/qtdesignstudio/src/qtdesignstudio-faq.qdoc
index 0e802ebcc7..97981f16bc 100644
--- a/doc/qtdesignstudio/src/qtdesignstudio-faq.qdoc
+++ b/doc/qtdesignstudio/src/qtdesignstudio-faq.qdoc
@@ -34,7 +34,7 @@
grouped by categories. You might also find answers to your questions in the
product documentation by searching or browsing the index in the
\l{Using the Help Mode}{Help mode}. Many questions are also answered by the
- \l{Examples and Tutorials}{examples and video tutorials}.
+ \l{Examples}{examples} and \l{Tutorials}{video tutorials}.
\list
\li \l {FAQ - \QB}{\QB}
diff --git a/doc/qtdesignstudio/src/qtdesignstudio-getting-started.qdoc b/doc/qtdesignstudio/src/qtdesignstudio-getting-started.qdoc
index 58dbd20203..6ad323da3e 100644
--- a/doc/qtdesignstudio/src/qtdesignstudio-getting-started.qdoc
+++ b/doc/qtdesignstudio/src/qtdesignstudio-getting-started.qdoc
@@ -47,10 +47,10 @@
\QDS is available either as a standalone installation package or
as an option in the Qt online installer.
- \li \l {Your First UI}
+ \li \l {Tutorials}
- Follow a set of hands-on tutorials that build on each other to
- design your first animated UI using preset and custom components.
+ Follow a set of hands-on tutorials that illustrate how to use the
+ features of \QDS.
\li \l {User Interface}
Describes the parts and basic features of \QDS.
@@ -71,7 +71,7 @@
\li \l{Concepts and Terms}
Describes main \QDS concepts and terms.
- \li \l{Examples and Tutorials}
+ \li \l{Examples}
A set of examples available in the \uicontrol Welcome mode
illustrates how to use \QDS features such as the timeline.
diff --git a/doc/qtdesignstudio/src/qtdesignstudio-installation.qdoc b/doc/qtdesignstudio/src/qtdesignstudio-installation.qdoc
index 701b84d30c..a896a1ded6 100644
--- a/doc/qtdesignstudio/src/qtdesignstudio-installation.qdoc
+++ b/doc/qtdesignstudio/src/qtdesignstudio-installation.qdoc
@@ -26,7 +26,7 @@
/*!
\page studio-installation.html
\previouspage studio-getting-started.html
- \nextpage {Your First UI}
+ \nextpage {Tutorials}
\title Installation
@@ -42,8 +42,8 @@
package \l{https://www.qt.io/product/ui-design-tools}{here}.
After the installation, you can start exploring \QDS by following
- tutorials to \l{Your First UI}{create your first UI}, opening
- \l{Examples and Tutorials}{examples}, watching videos, and reading
+ \l{Tutorials}{tutorials}, opening
+ \l{Examples}{examples}, watching videos, and reading
this manual.
\section1 Stand-Alone Installation
diff --git a/doc/qtdesignstudio/src/qtdesignstudio-terms.qdoc b/doc/qtdesignstudio/src/qtdesignstudio-terms.qdoc
index a1b163bc21..c05618ee0c 100644
--- a/doc/qtdesignstudio/src/qtdesignstudio-terms.qdoc
+++ b/doc/qtdesignstudio/src/qtdesignstudio-terms.qdoc
@@ -26,7 +26,7 @@
/*!
\page studio-terms.html
\previouspage studio-use-cases.html
- \nextpage {Examples and Tutorials}
+ \nextpage {Examples}
\title Concepts and Terms
diff --git a/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc b/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc
index 52ba391531..cd6982b100 100644
--- a/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc
+++ b/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc
@@ -31,7 +31,7 @@
\li \l{Getting Started}
\list
\li \l{Installation}
- \li \l{Your First UI}
+ \li \l{Tutorials}
\li \l{User Interface}
\list
\li \l{Selecting Modes}
@@ -59,7 +59,7 @@
\li \l{Creating Projects}
\li \l{Use Cases}
\li \l{Concepts and Terms}
- \li \l{Examples and Tutorials}
+ \li \l{Examples}
\endlist
\li \l{Wireframing}
\list
diff --git a/doc/qtdesignstudio/src/qtdesignstudio-tutorials.qdoc b/doc/qtdesignstudio/src/qtdesignstudio-tutorials.qdoc
index 331e84185a..0ff5137f58 100644
--- a/doc/qtdesignstudio/src/qtdesignstudio-tutorials.qdoc
+++ b/doc/qtdesignstudio/src/qtdesignstudio-tutorials.qdoc
@@ -28,14 +28,22 @@
\previouspage studio-installation.html
\nextpage creator-quick-tour.html
- \title Your First UI
+ \title Tutorials
\image loginui4.gif "Log In UI"
- You can follow a set of hands-on tutorials that build on each other to
+ \section1 Video Tutorials
+
+ When you run \QDS, the \uicontrol Tutorials tab in \uicontrol Welcome mode contains links
+ to video tutorials. To watch a tutorial on YouTube,
+ select it.
+
+ \section1 Written Tutorials
+
+ You can follow a set of hands-on tutorials that
illustrate how to use the features of \QDS. Even if you plan to export your
- designs from a design tool, it is useful to first create a small UI from
- scratch to learn to use \QDS. In particular, \e {Log In UI - Components}
+ designs from a design tool, it is useful to go through tutorials to learn to
+ use \QDS. In particular, \l {Log In UI - Components}
describes the terms and concepts that you will run into when exporting
designs with \QB.
@@ -43,8 +51,8 @@
yourself with the parts of \QDS in general, and the \uicontrol Design
mode in particular: \l{User Interface} and \l{Design Views}.
- In addition to these entry-level tutorials, \QDS comes with examples
- and video tutorials that you can open from the \uicontrol Examples and
- \uicontrol Tutorials tabs in the \uicontrol Welcome mode. For more
- information, see \l {Examples and Tutorials}.
+ In addition to these tutorials, \QDS comes with examples that you can open
+ from the \uicontrol Examples and tabs in the \uicontrol Welcome mode. For more
+ information, see \l {Examples}.
+
*/
diff --git a/doc/qtdesignstudio/src/qtdesignstudio.qdoc b/doc/qtdesignstudio/src/qtdesignstudio.qdoc
index e97a0cbf6a..a64c5e95be 100644
--- a/doc/qtdesignstudio/src/qtdesignstudio.qdoc
+++ b/doc/qtdesignstudio/src/qtdesignstudio.qdoc
@@ -48,12 +48,12 @@
\li \b {\l{Getting Started}}
\list
\li \l{Installation}
- \li \l{Your First UI}
+ \li \l{Tutorials}
\li \l{User Interface}
\li \l{Creating Projects}
\li \l{Use Cases}
\li \l{Concepts and Terms}
- \li \l{Examples and Tutorials}
+ \li \l{Examples}
\endlist
\li \b {\l{Wireframing}}
\list
diff --git a/share/qtcreator/qmldesigner/newprojectdialog/NewProjectDialog.qml b/share/qtcreator/qmldesigner/newprojectdialog/NewProjectDialog.qml
index 86234bf5ba..eb0cb21adf 100644
--- a/share/qtcreator/qmldesigner/newprojectdialog/NewProjectDialog.qml
+++ b/share/qtcreator/qmldesigner/newprojectdialog/NewProjectDialog.qml
@@ -34,6 +34,7 @@ import StudioControls as SC
import NewProjectDialog
Item {
+ id: rootDialog
width: DialogValues.dialogWidth
height: DialogValues.dialogHeight
@@ -47,38 +48,53 @@ Item {
Layout.alignment: Qt.AlignHCenter
spacing: 0
+ Item { width: parent.width; height: 20 } // spacer
+
Item { // Header Item
Layout.fillWidth: true
- implicitHeight: 218
+ implicitHeight: 164
- Column {
+ ColumnLayout {
anchors.fill: parent
- Item { width: parent.width; height: 74 } // spacer
-
- Text {
- text: qsTr("Welcome to Qt Design Studio. Let's Create Something Wonderful!")
- font.pixelSize: 32
+ Item { width: parent.width; implicitHeight: 20 } // spacer
+ Row {
width: parent.width
- height: 47
- lineHeight: 49
- lineHeightMode: Text.FixedHeight
- color: DialogValues.textColor
- horizontalAlignment: Text.AlignHCenter
- }
+ height: DialogValues.dialogTitleTextHeight
+ Layout.alignment: Qt.AlignHCenter
+ Text {
+ text: qsTr("Welcome to ")
+ font.pixelSize: DialogValues.dialogTitlePixelSize
+ font.family: "Titillium Web"
+ height: DialogValues.dialogTitleTextHeight
+ lineHeight: DialogValues.dialogTitleLineHeight
+ lineHeightMode: Text.FixedHeight
+ color: DialogValues.textColor
+ }
- Item { width: parent.width; height: 11 } // spacer
+ Text {
+ text: qsTr("Qt Design Studio")
+ font.pixelSize: DialogValues.dialogTitlePixelSize
+ font.family: "Titillium Web"
+ height: DialogValues.dialogTitleTextHeight
+ lineHeight: DialogValues.dialogTitleLineHeight
+ lineHeightMode: Text.FixedHeight
+ color: DialogValues.textColorInteraction
+ }
+ }
Text {
width: parent.width
- text: qsTr("Get started by selecting from Presets or start from empty screen. You may also include your design file.")
+ text: qsTr("Create new project by selecting a suitable Preset and then adjust details.")
color: DialogValues.textColor
font.pixelSize: DialogValues.paneTitlePixelSize
lineHeight: DialogValues.paneTitleLineHeight
lineHeightMode: Text.FixedHeight
- horizontalAlignment: Text.AlignHCenter
+ Layout.alignment: Qt.AlignHCenter
}
- }
+
+ Item { width: parent.width; Layout.fillHeight: true} // spacer
+ } // ColumnLayout
} // Header Item
Item { // Content Item
@@ -96,7 +112,7 @@ Item {
Layout.fillWidth: true
Layout.fillHeight: true
Layout.minimumWidth: 379 // figured out this number visually
- Layout.minimumHeight: 326 // figured out this number visually
+ Layout.minimumHeight: 261 // figured out this number visually
Column {
x: DialogValues.defaultPadding // left padding
@@ -106,19 +122,86 @@ Item {
Text {
text: qsTr("Presets")
width: parent.width
+ height: 47
font.weight: Font.DemiBold
font.pixelSize: DialogValues.paneTitlePixelSize
lineHeight: DialogValues.paneTitleLineHeight
lineHeightMode: Text.FixedHeight
color: DialogValues.textColor
+ verticalAlignment: Qt.AlignVCenter
}
+ Rectangle { // TabBar
+ readonly property int animDur: 500
+ id: samTabRect
+ x: 10 // left padding
+ width: parent.width - 64 // right padding
+ height: DialogValues.projectViewHeaderHeight
+ color: DialogValues.lightPaneColor
+
+ Row {
+ id: tabBarRow
+ spacing: 20
+ property int currIndex: 0
+
+ Repeater {
+ model: categoryModel
+ Text {
+ text: name
+ font.weight: Font.DemiBold
+ font.pixelSize: DialogValues.viewHeaderPixelSize
+ verticalAlignment: Text.AlignVCenter
+ color: tabBarRow.currIndex === index ? DialogValues.textColorInteraction
+ : DialogValues.textColor
+ Behavior on color { ColorAnimation { duration: samTabRect.animDur } }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ tabBarRow.currIndex = index
+ projectModel.setPage(index)
+ projectViewId.currentIndex = 0
+ projectViewId.currentIndexChanged()
+
+ strip.x = parent.x
+ strip.width = parent.width
+ }
+ }
+
+ } // Text
+ } // Repeater
+ } // tabBarRow
+
+ Rectangle {
+ id: strip
+ width: tabBarRow.children[0].width
+ height: 5
+ radius: 2
+ color: DialogValues.textColorInteraction
+ anchors.bottom: parent.bottom
+
+ Behavior on x { SmoothedAnimation { duration: samTabRect.animDur } }
+ Behavior on width { SmoothedAnimation { duration: strip.width === 0 ? 0 : samTabRect.animDur } } // do not animate initial width
+ }
+ } // Rectangle
+
NewProjectView {
id: projectViewId
x: 10 // left padding
width: parent.width - 64 // right padding
height: DialogValues.projectViewHeight
loader: projectDetailsLoader
+
+ Connections {
+ target: rootDialog
+ function onHeightChanged() {
+ if (rootDialog.height < 700) { // 700 = minimum height big dialog
+ projectViewId.height = DialogValues.projectViewHeight / 2
+ } else {
+ projectViewId.height = DialogValues.projectViewHeight
+ }
+ }
+ }
}
Item { height: 5; width: parent.width }
@@ -158,32 +241,46 @@ Item {
Item { Layout.fillWidth: true }
- SC.AbstractButton {
- implicitWidth: DialogValues.dialogButtonWidth
- width: DialogValues.dialogButtonWidth
- visible: true
- buttonIcon: qsTr("Cancel")
- iconSize: DialogValues.defaultPixelSize
- iconFont: StudioTheme.Constants.font
+ Item { // Dialog Button Box
+ width: DialogValues.stylesPaneWidth
+ height: parent.height
- onClicked: {
- dialogBox.reject();
- }
- }
+ RowLayout {
+ width: DialogValues.stylesPaneWidth
+ implicitWidth: DialogValues.stylesPaneWidth
+ implicitHeight: parent.height
+
+ SC.AbstractButton {
+ implicitWidth: DialogValues.dialogButtonWidth
+ width: DialogValues.dialogButtonWidth
+ visible: true
+ buttonIcon: qsTr("Cancel")
+ iconSize: DialogValues.defaultPixelSize
+ iconFont: StudioTheme.Constants.font
+
+ onClicked: {
+ dialogBox.reject();
+ }
+ }
+
+ Item { Layout.fillWidth: true }
+
+ SC.AbstractButton {
+ implicitWidth: DialogValues.dialogButtonWidth
+ width: DialogValues.dialogButtonWidth
+ visible: true
+ buttonIcon: qsTr("Create")
+ iconSize: DialogValues.defaultPixelSize
+ enabled: dialogBox.fieldsValid
+ iconFont: StudioTheme.Constants.font
+
+ onClicked: {
+ dialogBox.accept();
+ }
+ }
+ } // RowLayout
+ } // Dialog Button Box
- SC.AbstractButton {
- implicitWidth: DialogValues.dialogButtonWidth
- width: DialogValues.dialogButtonWidth
- visible: true
- buttonIcon: qsTr("Create")
- iconSize: DialogValues.defaultPixelSize
- enabled: dialogBox.fieldsValid
- iconFont: StudioTheme.Constants.font
-
- onClicked: {
- dialogBox.accept();
- }
- }
Item { implicitWidth: 35 - DialogValues.defaultPadding }
} // RowLayout
} // Footer
diff --git a/share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/Details.qml b/share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/Details.qml
index 9c4f259648..d622253a68 100644
--- a/share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/Details.qml
+++ b/share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/Details.qml
@@ -49,358 +49,385 @@ Item {
Item {
x: DialogValues.detailsPanePadding // left padding
width: parent.width - DialogValues.detailsPanePadding * 2 // right padding
+ height: parent.height
Column {
anchors.fill: parent
spacing: DialogValues.defaultPadding
Text {
+ id: detailsHeading
text: qsTr("Details")
+ height: DialogValues.dialogTitleTextHeight
width: parent.width;
font.weight: Font.DemiBold
font.pixelSize: DialogValues.paneTitlePixelSize
lineHeight: DialogValues.paneTitleLineHeight
lineHeightMode: Text.FixedHeight
color: DialogValues.textColor
+ verticalAlignment: Qt.AlignVCenter
}
- SC.TextField {
- id: projectNameTextField
- actionIndicatorVisible: false
- translationIndicatorVisible: false
- text: dialogBox.projectName
+ Flickable {
width: parent.width
- color: DialogValues.textColor
- selectByMouse: true
+ height: parent.height - detailsHeading.height - DialogValues.defaultPadding
- onEditingFinished: {
- text = text.charAt(0).toUpperCase() + text.slice(1)
- }
+ contentWidth: parent.width
+ contentHeight: scrollContent.height
+ boundsBehavior: Flickable.StopAtBounds
+ clip: true
- font.pixelSize: DialogValues.paneTitlePixelSize
- }
+ ScrollBar.vertical: ScrollBar {
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
- Binding {
- target: dialogBox
- property: "projectName"
- value: projectNameTextField.text
- }
+ property bool scrollBarVisible: parent.childrenRect.height > parent.height
- Item { width: parent.width; height: DialogValues.narrowSpacing(11) }
+ minimumSize: orientation == Qt.Horizontal ? height / width : width / height
- RowLayout { // Project location
- width: parent.width
+ orientation: Qt.Vertical
+ policy: scrollBarVisible ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff
+ x: parent.width - width
+ y: 0
+ height: parent.availableHeight
+ - (parent.bothVisible ? parent.horizontalThickness : 0)
+ padding: 0
- SC.TextField {
- Layout.fillWidth: true
- id: projectLocationTextField
- actionIndicatorVisible: false
- translationIndicatorVisible: false
- text: dialogBox.projectLocation
- color: DialogValues.textColor
- selectByMouse: true
- font.pixelSize: DialogValues.defaultPixelSize
- }
-
- Binding {
- target: dialogBox
- property: "projectLocation"
- value: projectLocationTextField.text
- }
-
- SC.AbstractButton {
- implicitWidth: 30
- iconSize: 20
- visible: true
- buttonIcon: "…"
- iconFont: StudioTheme.Constants.font
-
- onClicked: {
- var newLocation = dialogBox.chooseProjectLocation()
- if (newLocation)
- projectLocationTextField.text = newLocation
+ background: Rectangle {
+ color: StudioTheme.Values.themeScrollBarTrack
}
- } // SC.AbstractButton
- } // Project location RowLayout
- Item { width: parent.width; height: DialogValues.narrowSpacing(7) }
+ contentItem: Rectangle {
+ implicitWidth: StudioTheme.Values.scrollBarThickness
+ color: StudioTheme.Values.themeScrollBarHandle
+ }
+ } // ScrollBar
- RowLayout { // StatusMessage
- width: parent.width
- spacing: 0
-
- Image {
- id: statusIcon
- Layout.alignment: Qt.AlignTop
- asynchronous: false
- }
-
- Text {
- id: statusMessage
- text: dialogBox.statusMessage
- font.pixelSize: DialogValues.defaultPixelSize
- lineHeight: DialogValues.defaultLineHeight
- lineHeightMode: Text.FixedHeight
- color: DialogValues.textColor
- wrapMode: Text.Wrap
- elide: Text.ElideRight
- maximumLineCount: 3
- Layout.fillWidth: true
-
- states: [
- State {
- name: "warning"
- when: dialogBox.statusType === "warning"
- PropertyChanges {
- target: statusMessage
- color: DialogValues.textWarning
- }
- PropertyChanges {
- target: statusIcon
- source: "image://newprojectdialog_library/status-warning"
- }
- },
-
- State {
- name: "error"
- when: dialogBox.statusType === "error"
- PropertyChanges {
- target: statusMessage
- color: DialogValues.textError
- }
- PropertyChanges {
- target: statusIcon
- source: "image://newprojectdialog_library/status-error"
- }
+ Column {
+ id: scrollContent
+ width: parent.width - DialogValues.detailsPanePadding
+ height: DialogValues.detailsScrollableContentHeight
+ spacing: DialogValues.defaultPadding
+
+ SC.TextField {
+ id: projectNameTextField
+ actionIndicatorVisible: false
+ translationIndicatorVisible: false
+ text: dialogBox.projectName
+ width: parent.width
+ color: DialogValues.textColor
+ selectByMouse: true
+
+ onEditingFinished: {
+ text = text.charAt(0).toUpperCase() + text.slice(1)
}
- ]
- } // Text
- } // RowLayout
-
- SC.CheckBox {
- id: defaultLocationCheckbox
- actionIndicatorVisible: false
- text: qsTr("Use as default project location")
- checked: false
- font.pixelSize: DialogValues.defaultPixelSize
- }
- Binding {
- target: dialogBox
- property: "saveAsDefaultLocation"
- value: defaultLocationCheckbox.checked
- }
+ font.pixelSize: DialogValues.defaultPixelSize
+ }
- Rectangle { width: parent.width; height: 1; color: DialogValues.dividerlineColor }
+ Binding {
+ target: dialogBox
+ property: "projectName"
+ value: projectNameTextField.text
+ }
- SC.ComboBox { // Screen Size ComboBox
- id: screenSizeComboBox
- actionIndicatorVisible: false
- currentIndex: -1
- model: screenSizeModel
- textRole: "display"
- width: parent.width
- font.pixelSize: DialogValues.defaultPixelSize
+ Item { width: parent.width; height: DialogValues.narrowSpacing(11) }
- onActivated: (index) => {
- dialogBox.setScreenSizeIndex(index);
+ RowLayout { // Project location
+ width: parent.width
- var size = screenSizeModel.screenSizes(index);
- widthField.realValue = size.width;
- heightField.realValue = size.height;
- }
+ SC.TextField {
+ Layout.fillWidth: true
+ id: projectLocationTextField
+ actionIndicatorVisible: false
+ translationIndicatorVisible: false
+ text: dialogBox.projectLocation
+ color: DialogValues.textColor
+ selectByMouse: true
+ font.pixelSize: DialogValues.defaultPixelSize
+ }
- Connections {
- target: screenSizeModel
- function onModelReset() {
- var newIndex = screenSizeComboBox.currentIndex > -1
- ? screenSizeComboBox.currentIndex
- : dialogBox.screenSizeIndex()
+ Binding {
+ target: dialogBox
+ property: "projectLocation"
+ value: projectLocationTextField.text
+ }
- screenSizeComboBox.currentIndex = newIndex
- screenSizeComboBox.activated(newIndex)
- }
- }
- } // Screen Size ComboBox
+ SC.AbstractButton {
+ implicitWidth: 30
+ iconSize: 20
+ visible: true
+ buttonIcon: "…"
+ iconFont: StudioTheme.Constants.font
+
+ onClicked: {
+ var newLocation = dialogBox.chooseProjectLocation()
+ if (newLocation)
+ projectLocationTextField.text = newLocation
+ }
+ } // SC.AbstractButton
+ } // Project location RowLayout
- GridLayout { // orientation + width + height
- width: parent.width
- height: 85
-
- columns: 4
- rows: 2
-
- columnSpacing: 10
- rowSpacing: 10
-
- // header items
- Text {
- text: qsTr("Width")
- font.pixelSize: DialogValues.defaultPixelSize
- lineHeight: DialogValues.defaultLineHeight
- lineHeightMode: Text.FixedHeight
- color: DialogValues.textColor
- }
-
- Text {
- text: qsTr("Height")
- font.pixelSize: DialogValues.defaultPixelSize
- lineHeight: DialogValues.defaultLineHeight
- lineHeightMode: Text.FixedHeight
- color: DialogValues.textColor
- }
-
- Item { Layout.fillWidth: true }
-
- Text {
- text: qsTr("Orientation")
- font.pixelSize: DialogValues.defaultPixelSize
- lineHeight: DialogValues.defaultLineHeight
- lineHeightMode: Text.FixedHeight
- color: DialogValues.textColor
- }
-
- // content items
- SC.RealSpinBox {
- id: widthField
- actionIndicatorVisible: false
- implicitWidth: 70
- labelColor: DialogValues.textColor
- realFrom: 100
- realTo: 100000
- realValue: 100
- realStepSize: 10
- font.pixelSize: DialogValues.defaultPixelSize
-
- onRealValueChanged: {
- var height = heightField.realValue
- var width = realValue
-
- if (width >= height)
- orientationButton.setHorizontal()
- else
- orientationButton.setVertical()
+ Item { width: parent.width; height: DialogValues.narrowSpacing(7) }
+
+ RowLayout { // StatusMessage
+ width: parent.width
+ spacing: 0
+
+ Image {
+ id: statusIcon
+ Layout.alignment: Qt.AlignTop
+ asynchronous: false
+ }
+
+ Text {
+ id: statusMessage
+ text: dialogBox.statusMessage
+ font.pixelSize: DialogValues.defaultPixelSize
+ lineHeight: DialogValues.defaultLineHeight
+ lineHeightMode: Text.FixedHeight
+ color: DialogValues.textColor
+ wrapMode: Text.Wrap
+ elide: Text.ElideRight
+ maximumLineCount: 3
+ Layout.fillWidth: true
+
+ states: [
+ State {
+ name: "warning"
+ when: dialogBox.statusType === "warning"
+ PropertyChanges {
+ target: statusMessage
+ color: DialogValues.textWarning
+ }
+ PropertyChanges {
+ target: statusIcon
+ source: "image://newprojectdialog_library/status-warning"
+ }
+ },
+
+ State {
+ name: "error"
+ when: dialogBox.statusType === "error"
+ PropertyChanges {
+ target: statusMessage
+ color: DialogValues.textError
+ }
+ PropertyChanges {
+ target: statusIcon
+ source: "image://newprojectdialog_library/status-error"
+ }
+ }
+ ]
+ } // Text
+ } // RowLayout
+
+ SC.CheckBox {
+ id: defaultLocationCheckbox
+ actionIndicatorVisible: false
+ text: qsTr("Use as default project location")
+ checked: false
+ font.pixelSize: DialogValues.defaultPixelSize
}
- } // Width Text Field
-
- Binding {
- target: dialogBox
- property: "customWidth"
- value: widthField.realValue
- }
-
- SC.RealSpinBox {
- id: heightField
- actionIndicatorVisible: false
- implicitWidth: 70
- labelColor: DialogValues.textColor
- realFrom: 100
- realTo: 100000
- realValue: 100
- realStepSize: 10
- font.pixelSize: DialogValues.defaultPixelSize
-
- onRealValueChanged: {
- var height = realValue
- var width = widthField.realValue
-
- if (width >= height)
- orientationButton.setHorizontal()
- else
- orientationButton.setVertical()
+
+ Binding {
+ target: dialogBox
+ property: "saveAsDefaultLocation"
+ value: defaultLocationCheckbox.checked
}
- } // Height Text Field
- Binding {
- target: dialogBox
- property: "customHeight"
- value: heightField.realValue
- }
+ Rectangle { width: parent.width; height: 1; color: DialogValues.dividerlineColor }
- Item { Layout.fillWidth: true }
+ SC.ComboBox { // Screen Size ComboBox
+ id: screenSizeComboBox
+ actionIndicatorVisible: false
+ currentIndex: -1
+ model: screenSizeModel
+ textRole: "display"
+ width: parent.width
+ font.pixelSize: DialogValues.defaultPixelSize
- Button {
- id: orientationButton
- implicitWidth: 100
- implicitHeight: 50
+ onActivated: (index) => {
+ dialogBox.setScreenSizeIndex(index);
- checked: false
- hoverEnabled: false
- background: Rectangle {
- width: parent.width
- height: parent.height
- color: "transparent"
-
- Row {
- Item {
- width: orientationButton.width / 2
- height: orientationButton.height
- Rectangle {
- id: horizontalBar
- color: "white"
- width: parent.width
- height: orientationButton.height / 2
- anchors.verticalCenter: parent.verticalCenter
- }
- }
+ var size = screenSizeModel.screenSizes(index);
+ widthField.realValue = size.width;
+ heightField.realValue = size.height;
+ }
- Item {
- width: orientationButton.width / 4
- height: orientationButton.height
- }
+ Connections {
+ target: screenSizeModel
+ function onModelReset() {
+ var newIndex = screenSizeComboBox.currentIndex > -1
+ ? screenSizeComboBox.currentIndex
+ : dialogBox.screenSizeIndex()
- Rectangle {
- id: verticalBar
- width: orientationButton.width / 4
- height: orientationButton.height
- color: "white"
+ screenSizeComboBox.currentIndex = newIndex
+ screenSizeComboBox.activated(newIndex)
}
}
- }
+ } // Screen Size ComboBox
+
+ GridLayout { // orientation + width + height
+ width: parent.width
+ height: 85
+
+ columns: 4
+ rows: 2
- onClicked: {
- if (widthField.realValue && heightField.realValue) {
- [widthField.realValue, heightField.realValue] = [heightField.realValue, widthField.realValue];
- checked = !checked
+ columnSpacing: 10
+ rowSpacing: 10
+
+ // header items
+ Text {
+ text: qsTr("Width")
+ font.pixelSize: DialogValues.defaultPixelSize
+ lineHeight: DialogValues.defaultLineHeight
+ lineHeightMode: Text.FixedHeight
+ color: DialogValues.textColor
}
- }
- function setHorizontal() {
- checked = false
- horizontalBar.color = DialogValues.textColorInteraction
- verticalBar.color = "white"
- }
+ Text {
+ text: qsTr("Height")
+ font.pixelSize: DialogValues.defaultPixelSize
+ lineHeight: DialogValues.defaultLineHeight
+ lineHeightMode: Text.FixedHeight
+ color: DialogValues.textColor
+ }
- function setVertical() {
- checked = true
- horizontalBar.color = "white"
- verticalBar.color = DialogValues.textColorInteraction
- }
- } // Orientation button
+ Item { Layout.fillWidth: true }
- } // GridLayout: orientation + width + height
+ Text {
+ text: qsTr("Orientation")
+ font.pixelSize: DialogValues.defaultPixelSize
+ lineHeight: DialogValues.defaultLineHeight
+ lineHeightMode: Text.FixedHeight
+ color: DialogValues.textColor
+ }
- Rectangle { width: parent.width; height: 1; color: DialogValues.dividerlineColor }
+ // content items
+ SC.RealSpinBox {
+ id: widthField
+ actionIndicatorVisible: false
+ implicitWidth: 70
+ labelColor: DialogValues.textColor
+ realFrom: 100
+ realTo: 100000
+ realValue: 100
+ realStepSize: 10
+ font.pixelSize: DialogValues.defaultPixelSize
- SC.Section {
- width: parent.width
- caption: qsTr("Advanced")
- captionPixelSize: DialogValues.defaultPixelSize
- captionColor: DialogValues.darkPaneColor
- captionTextColor: DialogValues.textColor
- leftPadding: 0
- expanded: true
- visible: dialogBox.haveVirtualKeyboard || dialogBox.haveTargetQtVersion
+ onRealValueChanged: {
+ var height = heightField.realValue
+ var width = realValue
- Column {
- spacing: DialogValues.defaultPadding
- width: parent.width
+ if (width >= height)
+ orientationButton.setHorizontal()
+ else
+ orientationButton.setVertical()
+ }
+ } // Width Text Field
+
+ Binding {
+ target: dialogBox
+ property: "customWidth"
+ value: widthField.realValue
+ }
- /* We need a spacer of -10 in order to have actual 18px spacing between
- * section bottom and the checkbox. Otherwise, with Column spacing set to
- * 18, without a spacer, the default space to the first item would be 10,
- * for some reason. */
- Item { width: parent.width; height: -10 }
+ SC.RealSpinBox {
+ id: heightField
+ actionIndicatorVisible: false
+ implicitWidth: 70
+ labelColor: DialogValues.textColor
+ realFrom: 100
+ realTo: 100000
+ realValue: 100
+ realStepSize: 10
+ font.pixelSize: DialogValues.defaultPixelSize
+
+ onRealValueChanged: {
+ var height = realValue
+ var width = widthField.realValue
+
+ if (width >= height)
+ orientationButton.setHorizontal()
+ else
+ orientationButton.setVertical()
+ }
+ } // Height Text Field
+
+ Binding {
+ target: dialogBox
+ property: "customHeight"
+ value: heightField.realValue
+ }
+
+ Item { Layout.fillWidth: true }
+
+ Button {
+ id: orientationButton
+ implicitWidth: 100
+ implicitHeight: 50
+
+ checked: false
+ hoverEnabled: false
+ background: Rectangle {
+ width: parent.width
+ height: parent.height
+ color: "transparent"
+
+ Row {
+ Item {
+ width: orientationButton.width / 2
+ height: orientationButton.height
+ Rectangle {
+ id: horizontalBar
+ color: "white"
+ width: parent.width
+ height: orientationButton.height / 2
+ anchors.verticalCenter: parent.verticalCenter
+ }
+ }
+
+ Item {
+ width: orientationButton.width / 4
+ height: orientationButton.height
+ }
+
+ Rectangle {
+ id: verticalBar
+ width: orientationButton.width / 4
+ height: orientationButton.height
+ color: "white"
+ }
+ }
+ }
+
+ onClicked: {
+ if (widthField.realValue && heightField.realValue) {
+ [widthField.realValue, heightField.realValue] = [heightField.realValue, widthField.realValue];
+ checked = !checked
+ }
+ }
+
+ function setHorizontal() {
+ checked = false
+ horizontalBar.color = DialogValues.textColorInteraction
+ verticalBar.color = "white"
+ }
+
+ function setVertical() {
+ checked = true
+ horizontalBar.color = "white"
+ verticalBar.color = DialogValues.textColorInteraction
+ }
+ } // Orientation button
+
+ } // GridLayout: orientation + width + height
+
+ Rectangle { width: parent.width; height: 1; color: DialogValues.dividerlineColor }
SC.CheckBox {
id: useQtVirtualKeyboard
@@ -440,22 +467,19 @@ Item {
}
}
- width: parent.width
-
onActivated: (index) => {
dialogBox.setTargetQtVersion(index)
}
} // Target Qt Version ComboBox
-
} // RowLayout
- } // Column
- } // SC.Section
- Binding {
- target: dialogBox
- property: "useVirtualKeyboard"
- value: useQtVirtualKeyboard.checked
- }
+ Binding {
+ target: dialogBox
+ property: "useVirtualKeyboard"
+ value: useQtVirtualKeyboard.checked
+ }
+ } // ScrollContent Column
+ } // ScrollView
} // Column
} // Item
diff --git a/share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/DialogValues.qml b/share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/DialogValues.qml
index 4fedf87921..0dafb43e44 100644
--- a/share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/DialogValues.qml
+++ b/share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/DialogValues.qml
@@ -30,12 +30,16 @@ import StudioTheme as StudioTheme
QtObject {
readonly property int dialogWidth: 1522
- readonly property int dialogHeight: 994
+ readonly property int dialogHeight: 940
readonly property int projectViewMinimumWidth: 600
readonly property int projectViewMinimumHeight: projectViewHeight
readonly property int dialogContentHeight: projectViewHeight + 300 // i.e. dialog without header and footer
readonly property int loadedPanesWidth: detailsPaneWidth + stylesPaneWidth
- readonly property int detailsPaneWidth: 330 + detailsPanePadding * 2
+ readonly property int detailsPaneWidth: 330 + detailsPanePadding * 2// + 10 // 50
+ readonly property int dialogTitleTextHeight: 47
+ /* detailsScrollableContentHeight - the full height that may need to be scrolled to be fully
+ visible, if the dialog box is too small. */
+ readonly property int detailsScrollableContentHeight: 428
readonly property int stylesPaneWidth: styleImageWidth + stylesPanePadding * 2 + styleImageBorderWidth * 2 // i.e. 240px
readonly property int detailsPanePadding: 18
readonly property int stylesPanePadding: 18
@@ -44,9 +48,9 @@ QtObject {
readonly property int styleImageWidth: 200
readonly property int styleImageBorderWidth: 2
readonly property int footerHeight: 73
- readonly property int projectItemWidth: 144
+ readonly property int projectItemWidth: 90
readonly property int projectItemHeight: 144
- readonly property int projectViewHeight: projectItemHeight * 2 + projectViewHeaderHeight
+ readonly property int projectViewHeight: projectItemHeight * 2
readonly property int projectViewHeaderHeight: 38
readonly property int dialogButtonWidth: 100
@@ -69,6 +73,8 @@ QtObject {
readonly property real viewHeaderLineHeight: 24
readonly property real paneTitlePixelSize: 18
readonly property real paneTitleLineHeight: 27
+ readonly property int dialogTitlePixelSize: 32
+ readonly property int dialogTitleLineHeight: 49
// for a spacer item
function narrowSpacing(value, layoutSpacing = DialogValues.defaultPadding) {
diff --git a/share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/NewProjectView.qml b/share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/NewProjectView.qml
index 32a22cb1fc..4270c0946a 100644
--- a/share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/NewProjectView.qml
+++ b/share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/NewProjectView.qml
@@ -35,61 +35,9 @@ GridView {
required property Item loader
- readonly property int animDur: 500
-
- header: Rectangle {
- width: parent.width
- height: DialogValues.projectViewHeaderHeight
- color: DialogValues.lightPaneColor
-
- Row {
- id: row
- spacing: 20
- property int currIndex: 0
-
- Repeater {
- model: categoryModel
- Text {
- text: name
- font.weight: Font.DemiBold
- font.pixelSize: DialogValues.viewHeaderPixelSize
- verticalAlignment: Text.AlignVCenter
- color: row.currIndex === index ? DialogValues.textColorInteraction
- : DialogValues.textColor
- Behavior on color { ColorAnimation { duration: animDur } }
-
- MouseArea {
- anchors.fill: parent
- onClicked: {
- row.currIndex = index
- projectModel.setPage(index)
- projectView.currentIndex = 0
- projectView.currentIndexChanged()
-
- strip.x = parent.x
- strip.width = parent.width
- }
- }
-
- } // Text
- } // Repeater
- } // Row
-
- Rectangle {
- id: strip
- width: row.children[0].width
- height: 5
- radius: 2
- color: DialogValues.textColorInteraction
- anchors.bottom: parent.bottom
-
- Behavior on x { SmoothedAnimation { duration: animDur } }
- Behavior on width { SmoothedAnimation { duration: strip.width === 0 ? 0 : animDur } } // do not animate initial width
- }
- } // Rectangle
-
cellWidth: DialogValues.projectItemWidth
cellHeight: DialogValues.projectItemHeight
+ clip: true
boundsBehavior: Flickable.StopAtBounds
diff --git a/share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/Styles.qml b/share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/Styles.qml
index a1ef6696f3..09350f5601 100644
--- a/share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/Styles.qml
+++ b/share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/Styles.qml
@@ -65,12 +65,13 @@ Item {
Text {
id: styleTitleText
text: qsTr("Style")
- width: parent.width;
+ Layout.minimumHeight: DialogValues.dialogTitleTextHeight
font.weight: Font.DemiBold
font.pixelSize: DialogValues.paneTitlePixelSize
lineHeight: DialogValues.paneTitleLineHeight
lineHeightMode: Text.FixedHeight
color: DialogValues.textColor
+ verticalAlignment: Qt.AlignVCenter
function refresh() {
text = qsTr("Style") + " (" + styleModel.rowCount() + ")"
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/ComboBox.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/ComboBox.qml
index 98fdccddb0..bb8166326a 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/ComboBox.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/ComboBox.qml
@@ -203,13 +203,15 @@ T.ComboBox {
| T.Popup.CloseOnReleaseOutsideParent
contentItem: ListView {
+ id: listView
clip: true
- implicitHeight: contentHeight
+ implicitHeight: listView.contentHeight
model: myComboBox.popup.visible ? myComboBox.delegateModel : null
currentIndex: myComboBox.highlightedIndex
boundsBehavior: Flickable.StopAtBounds
ScrollBar.vertical: ScrollBar {
id: comboBoxPopupScrollBar
+ visible: listView.height < listView.contentHeight
}
}
diff --git a/src/plugins/mcusupport/mcusupportcmakemapper.cpp b/src/plugins/mcusupport/mcusupportcmakemapper.cpp
index 8b0e05db63..34cd578259 100644
--- a/src/plugins/mcusupport/mcusupportcmakemapper.cpp
+++ b/src/plugins/mcusupport/mcusupportcmakemapper.cpp
@@ -40,12 +40,15 @@ static const QHash<QString, QString> &envVarToCMakeVarMapping()
{"STM32Cube_FW_F4_SDK_PATH","QUL_BOARD_SDK_DIR"},
{"STM32Cube_FW_L4_SDK_PATH","QUL_BOARD_SDK_DIR"},
{"STM32Cube_FW_H7_SDK_PATH","QUL_BOARD_SDK_DIR"},
+ {"RGL_DIR", "QUL_BOARD_SDK_DIR"},
+ {"TVII_GRAPHICS_DRIVER_DIR", "QUL_BOARD_SDK_DIR"},
+ {"EK_RA6M3G_FSP_PATH", "QUL_BOARD_SDK_DIR"},
{"ARMGCC_DIR", "QUL_TARGET_TOOLCHAIN_DIR"},
{"IAR_ARM_COMPILER_DIR", "QUL_TARGET_TOOLCHAIN_DIR"},
{"GHS_COMPILER_DIR", "QUL_TARGET_TOOLCHAIN_DIR"},
{"GHS_ARM_COMPILER_DIR", "QUL_TARGET_TOOLCHAIN_DIR"},
{"EVK_MIMXRT1170_FREERTOS_PATH","FREERTOS_DIR"},
- {"EVK_MIMXRT1170_FREERTOS_PATH","FREERTOS_DIR"},
+ {"IMXRT1050_FREERTOS_DIR","FREERTOS_DIR"},
{"IMXRT1064_FREERTOS_DIR","FREERTOS_DIR"},
{"IMXRT595_FREERTOS_DIR","FREERTOS_DIR"},
{"STM32F7_FREERTOS_DIR", "FREERTOS_DIR"},
@@ -53,10 +56,8 @@ static const QHash<QString, QString> &envVarToCMakeVarMapping()
{"RenesasFlashProgrammer_PATH", "RENESAS_FLASH_PROGRAMMER_PATH"},
{"MCUXpressoIDE_PATH", "MCUXPRESSO_IDE_PATH"},
{"JLINK_PATH", "JLINK_PATH"},
- {"TVII_GRAPHICS_DRIVER_DIR", "TVII_GRAPHICS_DRIVER_DIR"},
{"CYPRESS_AUTO_FLASH_UTILITY_DIR", "CYPRESS_AUTO_FLASH_UTILITY_DIR"},
{"EK_RA6M3G_E2_PROJECT_PATH", "EK_RA6M3G_E2_PROJECT_PATH"},
- {"EK_RA6M3G_FSP_PATH", "EK_RA6M3G_FSP_PATH"},
};
return mapping;
}
diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp
index 4a21ece87b..4c9c7dab27 100644
--- a/src/plugins/mcusupport/mcusupportoptions.cpp
+++ b/src/plugins/mcusupport/mcusupportoptions.cpp
@@ -497,8 +497,27 @@ QVariant McuToolChainPackage::debuggerId() const
{
using namespace Debugger;
- QString sub = QString::fromLatin1(m_type == TypeArmGcc ? "bin/arm-none-eabi-gdb-py"
- : m_type == TypeIAR ? "../common/bin/CSpyBat" : "bar/foo-keil-gdb");
+ QString sub, displayName;
+ DebuggerEngineType engineType;
+
+ switch (m_type) {
+ case TypeArmGcc: {
+ sub = QString::fromLatin1("bin/arm-none-eabi-gdb-py");
+ displayName = McuPackage::tr("Arm GDB at %1");
+ engineType = Debugger::GdbEngineType;
+ break; }
+ case TypeIAR: {
+ sub = QString::fromLatin1("../common/bin/CSpyBat");
+ displayName = QLatin1String("CSpy");
+ engineType = Debugger::NoEngineType; // support for IAR missing
+ break; }
+ case TypeKEIL: {
+ sub = QString::fromLatin1("UV4/UV4");
+ displayName = QLatin1String("KEIL uVision Debugger");
+ engineType = Debugger::UvscEngineType;
+ break; }
+ default: return QVariant();
+ }
const FilePath command = path().pathAppended(sub).withExecutableSuffix();
const DebuggerItem *debugger = DebuggerItemManager::findByCommand(command);
@@ -506,11 +525,8 @@ QVariant McuToolChainPackage::debuggerId() const
if (!debugger) {
DebuggerItem newDebugger;
newDebugger.setCommand(command);
- const QString displayName = m_type == TypeArmGcc
- ? McuPackage::tr("Arm GDB at %1")
- : m_type == TypeIAR ? QLatin1String("CSpy")
- : QLatin1String("/bar/foo-keil-gdb");
newDebugger.setUnexpandedDisplayName(displayName.arg(command.toUserOutput()));
+ newDebugger.setEngineType(engineType);
debuggerId = DebuggerItemManager::registerDebugger(newDebugger);
} else {
debuggerId = debugger->id();
@@ -743,7 +759,9 @@ static void setKitDebugger(Kit *k, const McuToolChainPackage *tcPackage)
|| tcPackage->type() == McuToolChainPackage::TypeIAR)
return;
- Debugger::DebuggerKitAspect::setDebugger(k, tcPackage->debuggerId());
+ const QVariant debuggerId = tcPackage->debuggerId();
+ if (debuggerId.isValid())
+ Debugger::DebuggerKitAspect::setDebugger(k, debuggerId);
}
static void setKitDevice(Kit *k, const McuTarget* mcuTarget)
diff --git a/src/plugins/qmldesigner/generatecmakelists.cpp b/src/plugins/qmldesigner/generatecmakelists.cpp
index 51c199d585..1e49ed3909 100644
--- a/src/plugins/qmldesigner/generatecmakelists.cpp
+++ b/src/plugins/qmldesigner/generatecmakelists.cpp
@@ -63,13 +63,14 @@ enum ProjectDirectoryError {
NoError = 0,
MissingContentDir = 1<<1,
MissingImportDir = 1<<2,
- MissingCppDir = 1<<3,
- MissingMainCMake = 1<<4,
- MissingMainQml = 1<<5,
- MissingAppMainQml = 1<<6,
- MissingQmlModules = 1<<7,
- MissingMainCpp = 1<<8,
- MissingMainCppHeader = 1<<9
+ MissingAssetImportDir = 1<<3,
+ MissingCppDir = 1<<4,
+ MissingMainCMake = 1<<5,
+ MissingMainQml = 1<<6,
+ MissingAppMainQml = 1<<7,
+ MissingQmlModules = 1<<8,
+ MissingMainCpp = 1<<9,
+ MissingMainCppHeader = 1<<10
};
QVector<GeneratableFile> queuedFiles;
@@ -131,6 +132,8 @@ int isProjectCorrectlyFormed(const FilePath &rootDir)
if (!rootDir.pathAppended(DIRNAME_IMPORT).exists())
errors |= MissingImportDir;
+ if (!rootDir.pathAppended(DIRNAME_ASSET).exists())
+ errors |= MissingAssetImportDir;
if (!rootDir.pathAppended(DIRNAME_CPP).exists())
errors |= MissingCppDir;
@@ -159,7 +162,7 @@ void removeUnconfirmedQueuedFiles(const Utils::FilePaths confirmedFiles)
const QString WARNING_MISSING_STRUCTURE_FATAL = QCoreApplication::translate("QmlDesigner::GenerateCmake",
"The project is not properly structured for automatically generating CMake files.\n\nAborting process.\n\nThe following files or directories are missing:\n\n%1");
const QString WARNING_MISSING_STRUCTURE_NONFATAL = QCoreApplication::translate("QmlDesigner::GenerateCmake",
- "The project is not properly structured for automatically generating CMake files.\n\nThe following files will be created:\n\n%1");
+ "The project is not properly structured for automatically generating CMake files.\n\nThe following files or directories are missing and may be created:\n\n%1");
const QString WARNING_TITLE_FATAL = QCoreApplication::translate("QmlDesigner::GenerateCmake",
"Cannot Generate CMake Files");
const QString WARNING_TITLE_NONFATAL = QCoreApplication::translate("QmlDesigner::GenerateCmake",
@@ -182,6 +185,8 @@ void showProjectDirErrorDialog(int error)
if (error & MissingImportDir)
fatalList.append(QString(DIRNAME_IMPORT) + "\n");
+ if (error & MissingAssetImportDir)
+ nonFatalList.append(QString(DIRNAME_ASSET) + "\n");
if (error & MissingMainCMake)
nonFatalList.append(QString(FILENAME_CMAKELISTS) + "\n");
if (error & MissingQmlModules)
@@ -290,16 +295,21 @@ bool generateCmakes(const FilePath &rootDir)
{
moduleNames.clear();
- FilePath contentDir = rootDir.pathAppended("content");
- FilePath importDir = rootDir.pathAppended("imports");
+ FilePath contentDir = rootDir.pathAppended(DIRNAME_CONTENT);
+ FilePath importDir = rootDir.pathAppended(DIRNAME_IMPORT);
+ FilePath assetDir = rootDir.pathAppended(DIRNAME_ASSET);
generateModuleCmake(contentDir);
generateImportCmake(importDir);
+ generateImportCmake(assetDir);
generateMainCmake(rootDir);
return true;
}
+const char DO_NOT_EDIT_FILE_COMMENT[] = "### This file is automatically generated by Qt Design Studio.\n### Do not change\n\n";
+const char ADD_SUBDIR[] = "add_subdirectory(%1)\n";
+
void generateMainCmake(const FilePath &rootDir)
{
//TODO startupProject() may be a terrible way to try to get "current project". It's not necessarily the same thing at all.
@@ -309,27 +319,47 @@ void generateMainCmake(const FilePath &rootDir)
QString cmakeFileContent = GenerateCmake::readTemplate(MAIN_CMAKEFILE_TEMPLATE_PATH).arg(appName);
queueCmakeFile(rootDir, cmakeFileContent);
+ QString subdirIncludes;
+ subdirIncludes.append(QString(ADD_SUBDIR).arg(DIRNAME_CONTENT));
+ subdirIncludes.append(QString(ADD_SUBDIR).arg(DIRNAME_IMPORT));
+ if (rootDir.pathAppended(DIRNAME_ASSET).exists())
+ subdirIncludes.append(QString(ADD_SUBDIR).arg(DIRNAME_ASSET));
+
QString modulesAsPlugins;
for (const QString &moduleName : moduleNames)
modulesAsPlugins.append(" " + moduleName + "plugin\n");
- QString moduleFileContent = GenerateCmake::readTemplate(QMLMODULES_FILE_TEMPLATE_PATH).arg(appName).arg(modulesAsPlugins);
+ QString moduleFileContent = GenerateCmake::readTemplate(QMLMODULES_FILE_TEMPLATE_PATH)
+ .arg(appName)
+ .arg(subdirIncludes)
+ .arg(modulesAsPlugins);
+
GenerateCmake::queueFile(rootDir.pathAppended(FILENAME_MODULES), moduleFileContent);
}
-const char DO_NOT_EDIT_FILE_COMMENT[] = "### This file is automatically generated by Qt Design Studio.\n### Do not change\n\n";
-const char ADD_SUBDIR[] = "add_subdirectory(%1)\n";
-
-void generateImportCmake(const FilePath &dir)
+void generateImportCmake(const FilePath &dir, const QString &modulePrefix)
{
+ if (!dir.exists())
+ return;
+
QString fileContent;
fileContent.append(DO_NOT_EDIT_FILE_COMMENT);
-
FilePaths subDirs = dir.dirEntries(DIRS_ONLY);
for (FilePath &subDir : subDirs) {
+ if (isDirBlacklisted(subDir))
+ continue;
+ if (getDirectoryTreeQmls(subDir).isEmpty() && getDirectoryTreeResources(subDir).isEmpty())
+ continue;
fileContent.append(QString(ADD_SUBDIR).arg(subDir.fileName()));
- generateModuleCmake(subDir);
+ QString prefix = modulePrefix.isEmpty() ?
+ modulePrefix % subDir.fileName() :
+ QString(modulePrefix + '.') + subDir.fileName();
+ if (getDirectoryQmls(subDir).isEmpty()) {
+ generateImportCmake(subDir, prefix);
+ } else {
+ generateModuleCmake(subDir, prefix);
+ }
}
queueCmakeFile(dir, fileContent);
@@ -339,13 +369,12 @@ const char MODULEFILE_PROPERTY_SINGLETON[] = "QT_QML_SINGLETON_TYPE";
const char MODULEFILE_PROPERTY_SET[] = "set_source_files_properties(%1\n PROPERTIES\n %2 %3\n)\n\n";
const char MODULEFILE_TEMPLATE_PATH[] = ":/boilerplatetemplates/qmlprojectmodulecmakelists.tpl";
-void generateModuleCmake(const FilePath &dir)
+void generateModuleCmake(const FilePath &dir, const QString &uri)
{
QString fileTemplate = GenerateCmake::readTemplate(MODULEFILE_TEMPLATE_PATH);
- const QStringList qmldirFilesOnly(FILENAME_QMLDIR);
QString singletonContent;
- FilePaths qmldirFileList = dir.dirEntries(qmldirFilesOnly, FILES_ONLY);
+ FilePaths qmldirFileList = dir.dirEntries(QStringList(FILENAME_QMLDIR), FILES_ONLY);
if (!qmldirFileList.isEmpty()) {
QStringList singletons = getSingletonsFromQmldirFile(qmldirFileList.first());
for (QString &singleton : singletons) {
@@ -371,12 +400,14 @@ void generateModuleCmake(const FilePath &dir)
moduleContent.append(QString(" RESOURCES\n%1").arg(resourceFiles));
}
- QString moduleName = dir.fileName();
-
+ QString moduleUri = uri.isEmpty() ?
+ dir.fileName() :
+ uri;
+ QString moduleName = QString(moduleUri).remove('.');
moduleNames.append(moduleName);
QString fileContent;
- fileContent.append(fileTemplate.arg(singletonContent).arg(moduleName).arg(moduleContent));
+ fileContent.append(fileTemplate.arg(singletonContent, moduleName, moduleUri, moduleContent));
queueCmakeFile(dir, fileContent);
}
@@ -403,6 +434,22 @@ QStringList getSingletonsFromQmldirFile(const FilePath &filePath)
return singletons;
}
+FilePaths getDirectoryQmls(const FilePath &dir)
+{
+ const QStringList qmlFilesOnly("*.qml");
+ ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
+ FilePaths allFiles = dir.dirEntries(qmlFilesOnly, FILES_ONLY);
+ FilePaths moduleFiles;
+ for (FilePath &file : allFiles) {
+ if (!isFileBlacklisted(file.fileName()) &&
+ project->isKnownFile(file)) {
+ moduleFiles.append(file);
+ }
+ }
+
+ return moduleFiles;
+}
+
QStringList getDirectoryTreeQmls(const FilePath &dir)
{
const QStringList qmlFilesOnly("*.qml");
@@ -419,6 +466,8 @@ QStringList getDirectoryTreeQmls(const FilePath &dir)
FilePaths subDirsList = dir.dirEntries(DIRS_ONLY);
for (FilePath &subDir : subDirsList) {
+ if (isDirBlacklisted(subDir))
+ continue;
QStringList subDirQmlFiles = getDirectoryTreeQmls(subDir);
for (QString &qmlFile : subDirQmlFiles) {
qmlFileList.append(subDir.fileName().append('/').append(qmlFile));
@@ -444,6 +493,8 @@ QStringList getDirectoryTreeResources(const FilePath &dir)
FilePaths subDirsList = dir.dirEntries(DIRS_ONLY);
for (FilePath &subDir : subDirsList) {
+ if (isDirBlacklisted(subDir))
+ continue;
QStringList subDirResources = getDirectoryTreeResources(subDir);
for (QString &resource : subDirResources) {
resourceFileList.append(subDir.fileName().append('/').append(resource));
@@ -466,6 +517,11 @@ bool isFileBlacklisted(const QString &fileName)
!fileName.compare(FILENAME_CMAKELISTS));
}
+bool isDirBlacklisted(const FilePath &dir)
+{
+ return (!dir.fileName().compare(DIRNAME_DESIGNER));
+}
+
}
namespace GenerateEntryPoints {
diff --git a/src/plugins/qmldesigner/generatecmakelists.h b/src/plugins/qmldesigner/generatecmakelists.h
index 794610a53f..53c6703ef0 100644
--- a/src/plugins/qmldesigner/generatecmakelists.h
+++ b/src/plugins/qmldesigner/generatecmakelists.h
@@ -54,13 +54,15 @@ QString readTemplate(const QString &templatePath);
namespace GenerateCmakeLists {
bool generateCmakes(const Utils::FilePath &rootDir);
void generateMainCmake(const Utils::FilePath &rootDir);
-void generateImportCmake(const Utils::FilePath &dir);
-void generateModuleCmake(const Utils::FilePath &dir);
+void generateImportCmake(const Utils::FilePath &dir, const QString &modulePrefix = QString());
+void generateModuleCmake(const Utils::FilePath &dir, const QString &moduleUri = QString());
+Utils::FilePaths getDirectoryQmls(const Utils::FilePath &dir);
QStringList getSingletonsFromQmldirFile(const Utils::FilePath &filePath);
QStringList getDirectoryTreeQmls(const Utils::FilePath &dir);
QStringList getDirectoryTreeResources(const Utils::FilePath &dir);
void queueCmakeFile(const Utils::FilePath &filePath, const QString &content);
bool isFileBlacklisted(const QString &fileName);
+bool isDirBlacklisted(const Utils::FilePath &dir);
}
namespace GenerateEntryPoints {
bool generateEntryPointFiles(const Utils::FilePath &dir);
diff --git a/src/plugins/qmldesigner/generatecmakelistsconstants.h b/src/plugins/qmldesigner/generatecmakelistsconstants.h
index 59b11723e4..dce1b8e61b 100644
--- a/src/plugins/qmldesigner/generatecmakelistsconstants.h
+++ b/src/plugins/qmldesigner/generatecmakelistsconstants.h
@@ -34,7 +34,9 @@ namespace Constants {
const char DIRNAME_CONTENT[] = "content";
const char DIRNAME_IMPORT[] = "imports";
+const char DIRNAME_ASSET[] = "asset_imports";
const char DIRNAME_CPP[] = "src";
+const char DIRNAME_DESIGNER[] = "designer";
const char FILENAME_CMAKELISTS[] = "CMakeLists.txt";
const char FILENAME_APPMAINQML[] = "App.qml";
diff --git a/src/plugins/qmldesigner/qmlprojectmodulecmakelists.tpl b/src/plugins/qmldesigner/qmlprojectmodulecmakelists.tpl
index 46132d8c1a..e193ebf5ba 100644
--- a/src/plugins/qmldesigner/qmlprojectmodulecmakelists.tpl
+++ b/src/plugins/qmldesigner/qmlprojectmodulecmakelists.tpl
@@ -5,7 +5,7 @@
qt_add_library(%2 STATIC)
qt6_add_qml_module(%2
- URI "%2"
+ URI "%3"
VERSION 1.0
-%3
+%4
)
diff --git a/src/plugins/qmldesigner/qmlprojectmodules.tpl b/src/plugins/qmldesigner/qmlprojectmodules.tpl
index 2cae6017cc..a1fdb4071d 100644
--- a/src/plugins/qmldesigner/qmlprojectmodules.tpl
+++ b/src/plugins/qmldesigner/qmlprojectmodules.tpl
@@ -8,9 +8,8 @@ qt6_add_qml_module(%1
QML_FILES main.qml
)
-add_subdirectory(content)
-add_subdirectory(imports)
+%2
target_link_libraries(%1 PRIVATE
-%2
+%3
)
diff --git a/src/plugins/studiowelcome/newprojectdialogimageprovider.cpp b/src/plugins/studiowelcome/newprojectdialogimageprovider.cpp
index bdb3e4af8b..0e50292504 100644
--- a/src/plugins/studiowelcome/newprojectdialogimageprovider.cpp
+++ b/src/plugins/studiowelcome/newprojectdialogimageprovider.cpp
@@ -84,6 +84,26 @@ QPixmap NewProjectDialogImageProvider::requestStylePixmap(const QString &id, QSi
return pixmap;
}
+QPixmap NewProjectDialogImageProvider::requestDefaultPixmap(const QString &id, QSize *size, const QSize &requestedSize)
+{
+ QString realPath = Core::ICore::resourcePath("qmldesigner/newprojectdialog/image/" + id).toString();
+
+ QPixmap pixmap{realPath};
+
+ if (size) {
+ size->setWidth(pixmap.width());
+ size->setHeight(pixmap.height());
+ }
+
+ if (pixmap.isNull())
+ return QPixmap{};
+
+ if (requestedSize.isValid())
+ return pixmap.scaled(requestedSize);
+
+ return pixmap;
+}
+
QPixmap NewProjectDialogImageProvider::requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)
{
if (id.startsWith("style-"))
@@ -92,7 +112,7 @@ QPixmap NewProjectDialogImageProvider::requestPixmap(const QString &id, QSize *s
if (id.startsWith("status-"))
return requestStatusPixmap(id, size, requestedSize);
- return QPixmap{};
+ return requestDefaultPixmap(id, size, requestedSize);
}
} // namespace Internal
diff --git a/src/plugins/studiowelcome/newprojectdialogimageprovider.h b/src/plugins/studiowelcome/newprojectdialogimageprovider.h
index f149d082c2..0064070259 100644
--- a/src/plugins/studiowelcome/newprojectdialogimageprovider.h
+++ b/src/plugins/studiowelcome/newprojectdialogimageprovider.h
@@ -41,6 +41,7 @@ public:
private:
QPixmap requestStatusPixmap(const QString &id, QSize *size, const QSize &requestedSize);
QPixmap requestStylePixmap(const QString &id, QSize *size, const QSize &requestedSize);
+ QPixmap requestDefaultPixmap(const QString &id, QSize *size, const QSize &requestedSize);
static QPixmap invalidStyleIcon();
};
diff --git a/src/plugins/studiowelcome/qdsnewdialog.cpp b/src/plugins/studiowelcome/qdsnewdialog.cpp
index 7ab0d9f8c1..1ab2a45ee8 100644
--- a/src/plugins/studiowelcome/qdsnewdialog.cpp
+++ b/src/plugins/studiowelcome/qdsnewdialog.cpp
@@ -23,9 +23,6 @@
**
****************************************************************************/
-#include <QQmlContext>
-#include <QMessageBox>
-
#include "qdsnewdialog.h"
#include <coreplugin/icore.h>
@@ -37,6 +34,10 @@
#include "wizardfactories.h"
#include "newprojectdialogimageprovider.h"
+#include <QMessageBox>
+#include <QQmlContext>
+#include <QScreen>
+
using namespace StudioWelcome;
namespace {
@@ -93,7 +94,11 @@ QdsNewDialog::QdsNewDialog(QWidget *parent)
m_dialog->setWindowModality(Qt::ApplicationModal);
m_dialog->setWindowFlags(Qt::Dialog);
m_dialog->setAttribute(Qt::WA_DeleteOnClose);
- m_dialog->setMinimumSize(1155, 804);
+ m_dialog->setMinimumSize(1110, 554);
+
+ QSize screenSize = m_dialog->screen()->geometry().size();
+ if (screenSize.height() < 1080)
+ m_dialog->resize(parent->size());
QObject::connect(&m_wizard, &WizardHandler::deletingWizard, this, &QdsNewDialog::onDeletingWizard);
QObject::connect(&m_wizard, &WizardHandler::wizardCreated, this, &QdsNewDialog::onWizardCreated);
diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp
index ef6e169813..28fe278cab 100644
--- a/src/plugins/texteditor/texteditor.cpp
+++ b/src/plugins/texteditor/texteditor.cpp
@@ -342,6 +342,7 @@ public:
void checkNext()
{
+ QTC_ASSERT(m_currentHandlerIndex >= 0, return);
QTC_ASSERT(m_currentHandlerIndex < m_handlers.size(), return);
BaseHoverHandler *currentHandler = m_handlers[m_currentHandlerIndex];
@@ -352,6 +353,7 @@ public:
void onHandlerFinished(int documentRevision, int position, int priority)
{
+ QTC_ASSERT(m_currentHandlerIndex >= 0, return);
QTC_ASSERT(m_currentHandlerIndex < m_handlers.size(), return);
QTC_ASSERT(documentRevision == m_documentRevision, return);
QTC_ASSERT(position == m_position, return);