aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Gruendl <henning.gruendl@qt.io>2022-06-20 23:51:16 +0200
committerHenning Gründl <henning.gruendl@qt.io>2022-06-24 11:48:35 +0000
commit85cd97a33446699f97a21429ceb22f3acf40a5be (patch)
treee26161303f4a30c06765f86caf2c55f340a75687
parente3cfbc0a7b2fcdad43efe8bb515dfd06dba98710 (diff)
QmlProjectManager: Update landing page
* Make landing page responsive * Use QtCreator welcome page theme colors * Remove CMake from landing page * Separate colors from values to make mocking data less redundant * Add quick version to qt version check * Use qml singleton for backend instead of using the root context item Change-Id: Ic303d4713c348e34197716031b303720702f3e98 Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
-rw-r--r--share/qtcreator/qmldesigner/landingpage/content/App.qml22
-rw-r--r--share/qtcreator/qmldesigner/landingpage/content/CustomCheckBox.ui.qml135
-rw-r--r--share/qtcreator/qmldesigner/landingpage/content/InstallQdsStatusBlock.ui.qml68
-rw-r--r--share/qtcreator/qmldesigner/landingpage/content/PageText.ui.qml49
-rw-r--r--share/qtcreator/qmldesigner/landingpage/content/ProjectInfoStatusBlock.ui.qml171
-rw-r--r--share/qtcreator/qmldesigner/landingpage/content/PushButton.ui.qml90
-rw-r--r--share/qtcreator/qmldesigner/landingpage/content/Screen01.ui.qml305
-rw-r--r--share/qtcreator/qmldesigner/landingpage/imports/LandingPage/+QDS_theming/Colors.qml (renamed from share/qtcreator/qmldesigner/landingpage/imports/LandingPage/Constants.qml)16
-rw-r--r--share/qtcreator/qmldesigner/landingpage/imports/LandingPage/Colors.qml40
-rw-r--r--share/qtcreator/qmldesigner/landingpage/imports/LandingPage/Values.qml56
-rw-r--r--share/qtcreator/qmldesigner/landingpage/imports/LandingPage/qmldir3
-rw-r--r--share/qtcreator/qmldesigner/landingpage/imports/QdsLandingPageTheme/Values.qml312
-rw-r--r--share/qtcreator/qmldesigner/landingpage/imports/QdsLandingPageTheme/qmldir1
-rw-r--r--share/qtcreator/qmldesigner/landingpage/landingpage.qmlproject11
-rw-r--r--share/qtcreator/qmldesigner/landingpage/mockimports/LandingPageApi/LandingPageApi.qml44
-rw-r--r--share/qtcreator/qmldesigner/landingpage/mockimports/LandingPageApi/qmldir1
-rw-r--r--share/qtcreator/qmldesigner/landingpage/mockimports/LandingPageTheme/Dummy.qml (renamed from share/qtcreator/qmldesigner/landingpage/content/LandingSeparator.qml)10
-rw-r--r--share/qtcreator/qmldesigner/landingpage/mockimports/LandingPageTheme/qmldir1
-rw-r--r--src/plugins/qmlprojectmanager/CMakeLists.txt1
-rw-r--r--src/plugins/qmlprojectmanager/projectfilecontenttools.cpp35
-rw-r--r--src/plugins/qmlprojectmanager/qdslandingpage.cpp140
-rw-r--r--src/plugins/qmlprojectmanager/qdslandingpage.h33
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectconstants.h4
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectmanager.qbs3
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectplugin.cpp74
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectplugin.h9
26 files changed, 798 insertions, 836 deletions
diff --git a/share/qtcreator/qmldesigner/landingpage/content/App.qml b/share/qtcreator/qmldesigner/landingpage/content/App.qml
index 1a5e1efe05e..e93ad196e1a 100644
--- a/share/qtcreator/qmldesigner/landingpage/content/App.qml
+++ b/share/qtcreator/qmldesigner/landingpage/content/App.qml
@@ -28,35 +28,15 @@
****************************************************************************/
import QtQuick 2.15
-import QtQuick.Window 2.15
Item {
+ id: root
width: 1024
height: 768
-
visible: true
- property alias qtVersion: mainScreen.qtVersion
- property alias qdsVersion: mainScreen.qdsVersion
- property alias cmakeLists: mainScreen.cmakeLists
- property alias qdsInstalled: mainScreen.qdsInstalled
- property alias projectFileExists: mainScreen.projectFileExists
- property alias rememberSelection: mainScreen.rememberCheckboxCheckState
-
- signal openQtc(bool rememberSelection)
- signal openQds(bool rememberSelection)
- signal installQds()
- signal generateCmake()
- signal generateProjectFile()
Screen01 {
id: mainScreen
anchors.fill: parent
- openQtcButton.onClicked: openQtc(rememberSelection === Qt.Checked)
- openQdsButton.onClicked: openQds(rememberSelection === Qt.Checked)
- installButton.onClicked: installQds()
- generateCmakeButton.onClicked: generateCmake()
- generateProjectFileButton.onClicked: generateProjectFile()
}
-
}
-
diff --git a/share/qtcreator/qmldesigner/landingpage/content/CustomCheckBox.ui.qml b/share/qtcreator/qmldesigner/landingpage/content/CustomCheckBox.ui.qml
new file mode 100644
index 00000000000..8d91f695429
--- /dev/null
+++ b/share/qtcreator/qmldesigner/landingpage/content/CustomCheckBox.ui.qml
@@ -0,0 +1,135 @@
+/****************************************************************************
+**
+** Copyright (C) 2022 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.
+**
+****************************************************************************/
+
+import QtQuick 2.15
+import QtQuick.Templates 2.15
+import LandingPage as Theme
+
+CheckBox {
+ id: control
+ autoExclusive: false
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: Theme.Values.checkBoxSpacing
+ hoverEnabled: true
+ font.family: Theme.Values.baseFont
+
+ indicator: Rectangle {
+ id: checkBoxBackground
+ implicitWidth: Theme.Values.checkBoxSize
+ implicitHeight: Theme.Values.checkBoxSize
+ x: 0
+ y: parent.height / 2 - height / 2
+ color: Theme.Colors.backgroundPrimary
+ border.color: Theme.Colors.foregroundSecondary
+ border.width: Theme.Values.border
+
+ Rectangle {
+ id: checkBoxIndicator
+ width: Theme.Values.checkBoxIndicatorSize
+ height: Theme.Values.checkBoxIndicatorSize
+ x: (Theme.Values.checkBoxSize - Theme.Values.checkBoxIndicatorSize) * 0.5
+ y: (Theme.Values.checkBoxSize - Theme.Values.checkBoxIndicatorSize) * 0.5
+ color: Theme.Colors.accent
+ visible: control.checked
+ }
+ }
+
+ contentItem: Text {
+ id: checkBoxLabel
+ text: control.text
+ font: control.font
+ color: Theme.Colors.text
+ verticalAlignment: Text.AlignVCenter
+ leftPadding: control.indicator.width + control.spacing
+ }
+
+ states: [
+ State {
+ name: "default"
+ when: control.enabled && !control.hovered && !control.pressed
+ PropertyChanges {
+ target: checkBoxBackground
+ color: Theme.Colors.backgroundPrimary
+ border.color: Theme.Colors.foregroundSecondary
+ }
+ PropertyChanges {
+ target: checkBoxLabel
+ color: Theme.Colors.text
+ }
+ },
+ State {
+ name: "hover"
+ when: control.enabled && control.hovered && !control.pressed
+ PropertyChanges {
+ target: checkBoxBackground
+ color: Theme.Colors.hover
+ border.color: Theme.Colors.foregroundSecondary
+ }
+ },
+ State {
+ name: "press"
+ when: control.hovered && control.pressed
+ PropertyChanges {
+ target: checkBoxBackground
+ color: Theme.Colors.hover
+ border.color: Theme.Colors.accent
+ }
+ PropertyChanges {
+ target: checkBoxIndicator
+ color: Theme.Colors.backgroundSecondary
+ }
+ },
+ State {
+ name: "disable"
+ when: !control.enabled
+ PropertyChanges {
+ target: checkBoxBackground
+ color: Theme.Colors.backgroundPrimary
+ border.color: Theme.Colors.disabledLink
+ }
+ PropertyChanges {
+ target: checkBoxIndicator
+ color: Theme.Colors.disabledLink
+ }
+ PropertyChanges {
+ target: checkBoxLabel
+ color: Theme.Colors.disabledLink
+ }
+ }
+ ]
+}
+
+/*##^##
+Designer {
+ D{i:0;height:40;width:142}
+}
+##^##*/
+
diff --git a/share/qtcreator/qmldesigner/landingpage/content/InstallQdsStatusBlock.ui.qml b/share/qtcreator/qmldesigner/landingpage/content/InstallQdsStatusBlock.ui.qml
index 35c363583c6..6948e216bec 100644
--- a/share/qtcreator/qmldesigner/landingpage/content/InstallQdsStatusBlock.ui.qml
+++ b/share/qtcreator/qmldesigner/landingpage/content/InstallQdsStatusBlock.ui.qml
@@ -33,46 +33,48 @@ It is supposed to be strictly declarative and only uses a subset of QML. If you
this file manually, you might introduce QML code that is not supported by Qt Design Studio.
Check out https://doc.qt.io/qtcreator/creator-quick-ui-forms.html for details on .ui.qml files.
*/
+
import QtQuick 2.15
import QtQuick.Controls 2.15
-import LandingPage
-import QdsLandingPageTheme as Theme
+import LandingPageApi
+import LandingPage as Theme
Rectangle {
- id: installQdsBlock
- color: Theme.Values.themeBackgroundColorNormal
- border.width: 0
- property alias installQdsBlockVisible: installQdsBlock.visible
- property alias installButton: installButton
- height: 200
+ id: root
- Text {
- id: statusText
- text: qsTr("No Qt Design Studio installation found")
- font.family: Theme.Values.baseFont
- font.pixelSize: Constants.fontSizeSubtitle
- anchors.top: parent.top
- anchors.topMargin: 10
- anchors.horizontalCenter: parent.horizontalCenter
- }
+ color: Theme.Colors.backgroundSecondary
+ height: column.childrenRect.height + (2 * Theme.Values.spacing)
- Text {
- id: suggestionText
- text: qsTr("Would you like to install it now?")
- font.family: Theme.Values.baseFont
- font.pixelSize: Constants.fontSizeSubtitle
- anchors.top: statusText.bottom
- anchors.topMargin: 10
- anchors.horizontalCenterOffset: 0
- anchors.horizontalCenter: parent.horizontalCenter
+ Connections {
+ target: installButton
+ function onClicked() { LandingPageApi.installQds() }
}
- PushButton {
- id: installButton
- anchors.top: suggestionText.bottom
- text: "Install"
- anchors.topMargin: Constants.buttonDefaultMargin
- anchors.horizontalCenterOffset: 0
- anchors.horizontalCenter: parent.horizontalCenter
+ Column {
+ id: column
+
+ width: parent.width
+ anchors.centerIn: parent
+
+ PageText {
+ id: statusText
+ width: parent.width
+ topPadding: 0
+ padding: Theme.Values.spacing
+ text: qsTr("No Qt Design Studio installation found")
+ }
+
+ PageText {
+ id: suggestionText
+ width: parent.width
+ padding: Theme.Values.spacing
+ text: qsTr("Would you like to install it now?")
+ }
+
+ PushButton {
+ id: installButton
+ text: qsTr("Install")
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
}
}
diff --git a/share/qtcreator/qmldesigner/landingpage/content/PageText.ui.qml b/share/qtcreator/qmldesigner/landingpage/content/PageText.ui.qml
new file mode 100644
index 00000000000..94fb973084e
--- /dev/null
+++ b/share/qtcreator/qmldesigner/landingpage/content/PageText.ui.qml
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** Copyright (C) 2022 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$
+**
+****************************************************************************/
+
+/*
+This is a UI file (.ui.qml) that is intended to be edited in Qt Design Studio only.
+It is supposed to be strictly declarative and only uses a subset of QML. If you edit
+this file manually, you might introduce QML code that is not supported by Qt Design Studio.
+Check out https://doc.qt.io/qtcreator/creator-quick-ui-forms.html for details on .ui.qml files.
+*/
+
+import QtQuick 2.15
+import QtQuick.Controls 2.15
+import QtQuick.Layouts 1.15
+import LandingPage as Theme
+
+Text {
+ font.family: Theme.Values.baseFont
+ font.pixelSize: Theme.Values.fontSizeSubtitle
+ horizontalAlignment: Text.AlignHCenter
+ color: Theme.Colors.text
+ anchors.horizontalCenter: parent.horizontalCenter
+ wrapMode: Text.WordWrap
+}
diff --git a/share/qtcreator/qmldesigner/landingpage/content/ProjectInfoStatusBlock.ui.qml b/share/qtcreator/qmldesigner/landingpage/content/ProjectInfoStatusBlock.ui.qml
index 40e9f5e3fc6..67108eb0860 100644
--- a/share/qtcreator/qmldesigner/landingpage/content/ProjectInfoStatusBlock.ui.qml
+++ b/share/qtcreator/qmldesigner/landingpage/content/ProjectInfoStatusBlock.ui.qml
@@ -33,171 +33,78 @@ It is supposed to be strictly declarative and only uses a subset of QML. If you
this file manually, you might introduce QML code that is not supported by Qt Design Studio.
Check out https://doc.qt.io/qtcreator/creator-quick-ui-forms.html for details on .ui.qml files.
*/
+
import QtQuick 2.15
import QtQuick.Controls 2.15
-import LandingPage
-import QdsLandingPageTheme as Theme
+import QtQuick.Layouts 1.15
+import LandingPageApi
+import LandingPage as Theme
Rectangle {
- id: projectInfo
- height: 300
- color: Theme.Values.themeBackgroundColorNormal
- border.color: Theme.Values.themeBackgroundColorNormal
- border.width: 0
+ id: root
+
property bool qdsInstalled: qdsVersionText.text.length > 0
property bool projectFileExists: false
- property string qdsVersion: "UNKNOWN"
- property string qtVersion: "UNKNOWN"
- property alias cmakeListText: cmakeList.text
- property alias generateCmakeButton: generateCmakeButton
+ property string qtVersion: qsTr("Unknown")
+ property string qdsVersion: qsTr("Unknown")
property alias generateProjectFileButton: generateProjectFileButton
- Item {
- id: projectFileInfoBox
- width: projectInfo.width
- height: 150
- anchors.top: parent.top
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.topMargin: 30
+ color: Theme.Colors.backgroundSecondary
+ height: column.childrenRect.height + (2 * Theme.Values.spacing)
+
+ Connections {
+ target: generateProjectFileButton
+ function onClicked() { LandingPageApi.generateProjectFile() }
+ }
- Text {
+ Column {
+ id: column
+
+ width: parent.width
+ anchors.centerIn: parent
+ spacing: Theme.Values.spacing
+
+ PageText {
id: projectFileInfoTitle
+ width: parent.width
text: qsTr("QML PROJECT FILE INFO")
- font.family: Theme.Values.baseFont
- font.pixelSize: Constants.fontSizeSubtitle
- anchors.top: parent.top
- horizontalAlignment: Text.AlignHCenter
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.topMargin: 10
}
- Item {
+ Column {
id: projectFileInfoVersionBox
width: parent.width
- height: 150
- visible: projectFileExists
- anchors.top: projectFileInfoTitle.bottom
- anchors.topMargin: 0
- anchors.horizontalCenter: parent.horizontalCenter
+ visible: root.projectFileExists
- Text {
+ PageText {
id: qtVersionText
- text: qsTr("Qt Version - ") + qtVersion
- font.family: Theme.Values.baseFont
- font.pixelSize: Constants.fontSizeSubtitle
- anchors.top: parent.top
- horizontalAlignment: Text.AlignHCenter
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.topMargin: 10
+ width: parent.width
+ padding: Theme.Values.spacing
+ text: qsTr("Qt Version - ") + root.qtVersion
}
- Text {
+ PageText {
id: qdsVersionText
- text: qsTr("Qt Design Studio Version - ") + qdsVersion
- font.family: Theme.Values.baseFont
- font.pixelSize: Constants.fontSizeSubtitle
- anchors.top: qtVersionText.bottom
- horizontalAlignment: Text.AlignHCenter
- anchors.topMargin: 10
- anchors.horizontalCenter: parent.horizontalCenter
+ width: parent.width
+ padding: Theme.Values.spacing
+ text: qsTr("Qt Design Studio Version - ") + root.qdsVersion
}
}
- Item {
+ Column {
id: projectFileInfoMissingBox
width: parent.width
- height: 200
visible: !projectFileInfoVersionBox.visible
- anchors.top: projectFileInfoTitle.bottom
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.topMargin: 0
- Text {
+ PageText {
id: projectFileInfoMissingText
+ width: parent.width
+ padding: Theme.Values.spacing
text: qsTr("No QML project file found - Would you like to create one?")
- font.family: Theme.Values.baseFont
- font.pixelSize: Constants.fontSizeSubtitle
- anchors.top: parent.top
- horizontalAlignment: Text.AlignHCenter
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.topMargin: 10
}
PushButton {
id: generateProjectFileButton
- anchors.top: projectFileInfoMissingText.bottom
- text: "Generate"
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.topMargin: Constants.buttonDefaultMargin
- }
- }
- }
-
- Item {
- id: cmakeInfoBox
- width: projectInfo.width
- height: 200
- anchors.top: projectFileInfoBox.bottom
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.topMargin: 40
-
- Text {
- id: cmakeInfoTitle
- text: qsTr("CMAKE RESOURCE FILES")
- font.family: Theme.Values.baseFont
- font.pixelSize: Constants.fontSizeSubtitle
- anchors.top: parent.top
- horizontalAlignment: Text.AlignHCenter
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.topMargin: 10
- }
-
- Item {
- id: cmakeListBox
- width: 150
- height: 40
- visible: cmakeListText.length > 0
- anchors.top: cmakeInfoTitle.bottom
- anchors.topMargin: 10
- anchors.horizontalCenter: parent.horizontalCenter
-
- Text {
- id: cmakeList
- text: qsTr("")
- font.family: "TitilliumWeb"
- font.pixelSize: Constants.fontSizeSubtitle
- anchors.top: parent.top
- horizontalAlignment: Text.AlignHCenter
- anchors.topMargin: 0
- anchors.horizontalCenter: parent.horizontalCenter
- }
- }
-
- Item {
- id: cmakeMissingBox
- width: cmakeInfoBox.width
- height: 200
- visible: cmakeListText.length === 0
- anchors.top: cmakeInfoTitle.bottom
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.topMargin: 10
-
- Text {
- id: cmakeMissingText
- text: qsTr("No resource files found - Would you like to generate them?")
- font.family: Theme.Values.baseFont
- font.pixelSize: Constants.fontSizeSubtitle
- anchors.top: parent.top
- horizontalAlignment: Text.AlignHCenter
- anchors.topMargin: 10
- anchors.horizontalCenter: parent.horizontalCenter
- }
-
- PushButton {
- id: generateCmakeButton
- anchors.top: cmakeMissingText.bottom
- text: "Generate"
- anchors.topMargin: Constants.buttonDefaultMargin
+ text: qsTr("Generate")
anchors.horizontalCenter: parent.horizontalCenter
}
}
diff --git a/share/qtcreator/qmldesigner/landingpage/content/PushButton.ui.qml b/share/qtcreator/qmldesigner/landingpage/content/PushButton.ui.qml
index be872c21d7d..116940870ee 100644
--- a/share/qtcreator/qmldesigner/landingpage/content/PushButton.ui.qml
+++ b/share/qtcreator/qmldesigner/landingpage/content/PushButton.ui.qml
@@ -1,5 +1,3 @@
-
-
/****************************************************************************
**
** Copyright (C) 2021 The Qt Company Ltd.
@@ -24,49 +22,38 @@
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
+
import QtQuick 2.15
import QtQuick.Templates 2.15
-import QdsLandingPageTheme as Theme
+import LandingPage as Theme
Button {
id: control
- implicitWidth: Math.max(
- buttonBackground ? buttonBackground.implicitWidth : 0,
- textItem.implicitWidth + leftPadding + rightPadding)
- implicitHeight: Math.max(
- buttonBackground ? buttonBackground.implicitHeight : 0,
- textItem.implicitHeight + topPadding + bottomPadding)
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
leftPadding: 4
rightPadding: 4
-
- text: "My Button"
- property alias fontpixelSize: textItem.font.pixelSize
- property bool forceHover: false
hoverEnabled: true
- state: "normal"
+ font.family: Theme.Values.baseFont
+ font.pixelSize: 16
- background: buttonBackground
- Rectangle {
+ background: Rectangle {
id: buttonBackground
- color: Theme.Values.themeControlBackground
+ color: Theme.Colors.backgroundPrimary
implicitWidth: 100
- implicitHeight: 40
- opacity: enabled ? 1 : 0.3
- radius: 2
- border.color: Theme.Values.themeControlOutline
+ implicitHeight: 35
+ border.color: Theme.Colors.foregroundSecondary
anchors.fill: parent
}
- contentItem: textItem
-
- Text {
+ contentItem: Text {
id: textItem
text: control.text
- font.pixelSize: 18
-
- opacity: enabled ? 1.0 : 0.3
- color: Theme.Values.themeTextColor
+ font: control.font
+ color: Theme.Colors.text
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
rightPadding: 5
@@ -75,46 +62,51 @@ Button {
states: [
State {
- name: "normal"
- when: !control.down && !control.hovered && !control.forceHover
-
+ name: "default"
+ when: control.enabled && !control.hovered && !control.pressed && !control.checked
PropertyChanges {
target: buttonBackground
- color: Theme.Values.themeControlBackground
- border.color: Theme.Values.themeControlOutline
+ color: Theme.Colors.backgroundPrimary
}
-
PropertyChanges {
target: textItem
- color: Theme.Values.themeTextColor
+ color: Theme.Colors.text
}
},
State {
name: "hover"
- when: (control.hovered || control.forceHover) && !control.down
- PropertyChanges {
- target: textItem
- color: Theme.Values.themeTextColor
- }
-
+ extend: "default"
+ when: control.enabled && control.hovered && !control.pressed
PropertyChanges {
target: buttonBackground
- color: Theme.Values.themeControlBackgroundHover
- border.color: Theme.Values.themeControlBackgroundHover
+ color: Theme.Colors.hover
}
},
State {
- name: "activeQds"
- when: control.down
+ name: "press"
+ extend: "default"
+ when: control.hovered && control.pressed
+ PropertyChanges {
+ target: buttonBackground
+ color: Theme.Colors.accent
+ border.color: Theme.Colors.accent
+ }
PropertyChanges {
target: textItem
- color: Theme.Values.themeTextColor
+ color: Theme.Colors.backgroundPrimary
}
-
+ },
+ State {
+ name: "disable"
+ when: !control.enabled
PropertyChanges {
target: buttonBackground
- color: Theme.Values.themeControlBackgroundInteraction
- border.color: Theme.Values.themeControlOutlineInteraction
+ color: Theme.Colors.backgroundPrimary
+ border.color: Theme.Colors.disabledLink
+ }
+ PropertyChanges {
+ target: textItem
+ color: Theme.Colors.disabledLink
}
}
]
diff --git a/share/qtcreator/qmldesigner/landingpage/content/Screen01.ui.qml b/share/qtcreator/qmldesigner/landingpage/content/Screen01.ui.qml
index c3521001e64..9e1d29197e7 100644
--- a/share/qtcreator/qmldesigner/landingpage/content/Screen01.ui.qml
+++ b/share/qtcreator/qmldesigner/landingpage/content/Screen01.ui.qml
@@ -33,167 +33,190 @@ It is supposed to be strictly declarative and only uses a subset of QML. If you
this file manually, you might introduce QML code that is not supported by Qt Design Studio.
Check out https://doc.qt.io/qtcreator/creator-quick-ui-forms.html for details on .ui.qml files.
*/
+
import QtQuick 2.15
import QtQuick.Controls 6.2
-import LandingPage
+import QtQuick.Layouts 1.15
import LandingPageApi
-import QdsLandingPageTheme as Theme
+import LandingPage as Theme
Rectangle {
- id: rectangle2
+ id: root
+
width: 1024
height: 768
- color: Theme.Values.themeBackgroundColorNormal
- property bool qdsInstalled: true
- property alias openQtcButton: openQtc
- property alias openQdsButton: openQds
- property alias projectFileExists: projectInfoStatusBlock.projectFileExists
- property alias installButton: installQdsStatusBlock.installButton
- property alias generateCmakeButton: projectInfoStatusBlock.generateCmakeButton
- property alias generateProjectFileButton: projectInfoStatusBlock.generateProjectFileButton
- property alias qtVersion: projectInfoStatusBlock.qtVersion
- property alias qdsVersion: projectInfoStatusBlock.qdsVersion
- property alias cmakeLists: projectInfoStatusBlock.cmakeListText
- property alias installQdsBlockVisible: installQdsStatusBlock.visible
- property alias rememberCheckboxCheckState: rememberCheckbox.checkState
-
- Rectangle {
- id: logoArea
- width: parent.width
- height: 180
- color: Theme.Values.themeBackgroundColorNormal
- anchors.top: parent.top
- anchors.horizontalCenter: parent.horizontalCenter
-
- Image {
- id: qdsLogo
- source: "logo.png"
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.top: parent.top
- anchors.topMargin: 30
- }
+ color: Theme.Colors.backgroundPrimary
- Text {
- id: qdsText
- text: qsTr("Qt Design Studio")
- font.pixelSize: Constants.fontSizeTitle
- font.family: Theme.Values.baseFont
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 20
- }
+ Connections {
+ target: openQds
+ function onClicked() { LandingPageApi.openQds(rememberCheckbox.checkState === Qt.Checked) }
}
- Item {
- id: statusBox
- anchors.top: logoArea.bottom
- anchors.bottom: buttonBox.top
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.rightMargin: 0
- anchors.leftMargin: 0
-
- LandingSeparator {
- id: topSeparator
- anchors.top: parent.top
- anchors.horizontalCenter: parent.horizontalCenter
- }
-
- InstallQdsStatusBlock {
- id: installQdsStatusBlock
- width: parent.width
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.verticalCenter: parent.verticalCenter
- visible: !qdsInstalled
- }
-
- ProjectInfoStatusBlock {
- id: projectInfoStatusBlock
- width: parent.width
- visible: !installQdsStatusBlock.visible
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.verticalCenter: parent.verticalCenter
- }
-
- LandingSeparator {
- id: bottomSeparator
- anchors.bottom: parent.bottom
- anchors.horizontalCenter: parent.horizontalCenter
- }
+ Connections {
+ target: openQtc
+ function onClicked() { LandingPageApi.openQtc(rememberCheckbox.checkState === Qt.Checked) }
}
- Rectangle {
- id: buttonBox
- width: parent.width
- height: 220
- anchors.bottom: parent.bottom
- anchors.horizontalCenter: parent.horizontalCenter
- color: Theme.Values.themeBackgroundColorNormal
-
- Item {
- id: openQdsBox
- width: parent.width / 2
- height: parent.height
- anchors.left: parent.left
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 0
- anchors.leftMargin: 0
-
- Text {
- id: openQdsText
- text: qsTr("Open with Qt Design Studio")
- font.pixelSize: Constants.fontSizeSubtitle
- font.family: Theme.Values.baseFont
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.top: parent.top
- anchors.topMargin: 50
+ states: [
+ State {
+ name: "large"
+ when: root.width > Theme.Values.layoutBreakpointLG
+ PropertyChanges {
+ target: Theme.Values
+ fontSizeTitle: Theme.Values.fontSizeTitleLG
+ fontSizeSubtitle: Theme.Values.fontSizeSubtitleLG
}
-
- PushButton {
- id: openQds
- anchors.top: openQdsText.bottom
- anchors.horizontalCenter: parent.horizontalCenter
- text: "Open"
- anchors.topMargin: Constants.buttonSmallMargin
- enabled: qdsInstalled
+ PropertyChanges {
+ target: buttonBoxGrid
+ columns: 2
+ }
+ },
+ State {
+ name: "medium"
+ when: root.width <= Theme.Values.layoutBreakpointLG
+ && root.width > Theme.Values.layoutBreakpointMD
+ PropertyChanges {
+ target: Theme.Values
+ fontSizeTitle: Theme.Values.fontSizeTitleMD
+ fontSizeSubtitle: Theme.Values.fontSizeSubtitleMD
+ }
+ PropertyChanges {
+ target: buttonBoxGrid
+ columns: 2
+ }
+ },
+ State {
+ name: "small"
+ when: root.width <= Theme.Values.layoutBreakpointMD
+ PropertyChanges {
+ target: Theme.Values
+ fontSizeTitle: Theme.Values.fontSizeTitleSM
+ fontSizeSubtitle: Theme.Values.fontSizeSubtitleSM
+ }
+ PropertyChanges {
+ target: buttonBoxGrid
+ columns: 1
}
}
+ ]
+
+ ScrollView {
+ id: scrollView
+ anchors.fill: root
+
+ Column {
+ id: layout
+ spacing: 0
+ width: scrollView.width
+
+ Item {
+ width: layout.width
+ height: logoSection.childrenRect.height + (2 * Theme.Values.spacing)
+
+ Column {
+ id: logoSection
+ spacing: 10
+ anchors.centerIn: parent
+
+ Image {
+ id: qdsLogo
+ anchors.horizontalCenter: parent.horizontalCenter
+ source: "logo.png"
+ }
+
+ Text {
+ id: qdsText
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: qsTr("Qt Design Studio")
+ font.pixelSize: Theme.Values.fontSizeTitle
+ font.family: Theme.Values.baseFont
+ color: Theme.Colors.text
+ }
+ }
+ }
- Item {
- id: openQtcBox
- width: parent.width / 2
- height: parent.height
- anchors.right: parent.right
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 0
- anchors.rightMargin: 0
-
- Text {
- id: openQtcText
- text: qsTr("Open with Qt Creator - Text Mode")
- font.pixelSize: Constants.fontSizeSubtitle
- font.family: Theme.Values.baseFont
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.top: parent.top
- anchors.topMargin: 50
+ InstallQdsStatusBlock {
+ id: installQdsStatusBlock
+ width: parent.width
+ visible: !LandingPageApi.qdsInstalled
}
- PushButton {
- id: openQtc
- anchors.top: openQtcText.bottom
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.topMargin: Constants.buttonSmallMargin
- text: "Open"
+ ProjectInfoStatusBlock {
+ id: projectInfoStatusBlock
+ width: parent.width
+ visible: !installQdsStatusBlock.visible
+ projectFileExists: LandingPageApi.projectFileExists
+ qtVersion: LandingPageApi.qtVersion
+ qdsVersion: LandingPageApi.qdsVersion
}
- }
- CheckBox {
- id: rememberCheckbox
- text: qsTr("Remember my choice")
- font.family: Theme.Values.baseFont
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 30
- anchors.horizontalCenter: parent.horizontalCenter
+ GridLayout {
+ id: buttonBoxGrid
+ anchors.horizontalCenter: parent.horizontalCenter
+ columns: 2
+ rows: 2
+ columnSpacing: 3 * Theme.Values.spacing
+ rowSpacing: Theme.Values.spacing
+
+ property int tmpWidth: textMetrics.width
+
+ TextMetrics {
+ id: textMetrics
+ text: openQtcText.text.length > openQdsText.text.length ? openQtcText.text
+ : openQdsText.text
+ font.pixelSize: Theme.Values.fontSizeSubtitle
+ font.family: Theme.Values.baseFont
+ }
+
+ Column {
+ id: openQdsBox
+ Layout.alignment: Qt.AlignHCenter
+
+ PageText {
+ id: openQdsText
+ width: buttonBoxGrid.tmpWidth
+ padding: Theme.Values.spacing
+ text: qsTr("Open with Qt Design Studio")
+ wrapMode: Text.NoWrap
+ }
+
+ PushButton {
+ id: openQds
+ text: qsTr("Open")
+ enabled: LandingPageApi.qdsInstalled
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ }
+
+ Column {
+ id: openQtcBox
+ Layout.alignment: Qt.AlignHCenter
+
+ PageText {
+ id: openQtcText
+ width: buttonBoxGrid.tmpWidth
+ padding: Theme.Values.spacing
+ text: qsTr("Open with Qt Creator - Text Mode")
+ wrapMode: Text.NoWrap
+ }
+
+ PushButton {
+ id: openQtc
+ text: qsTr("Open")
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ }
+
+ CustomCheckBox {
+ id: rememberCheckbox
+ text: qsTr("Remember my choice")
+ font.family: Theme.Values.baseFont
+ Layout.columnSpan: buttonBoxGrid.columns
+ Layout.alignment: Qt.AlignHCenter
+ Layout.topMargin: Theme.Values.spacing
+ Layout.bottomMargin: Theme.Values.spacing
+ }
+ }
}
}
}
diff --git a/share/qtcreator/qmldesigner/landingpage/imports/LandingPage/Constants.qml b/share/qtcreator/qmldesigner/landingpage/imports/LandingPage/+QDS_theming/Colors.qml
index 9dc4144c4d9..a94f82a7ad3 100644
--- a/share/qtcreator/qmldesigner/landingpage/imports/LandingPage/Constants.qml
+++ b/share/qtcreator/qmldesigner/landingpage/imports/LandingPage/+QDS_theming/Colors.qml
@@ -24,12 +24,16 @@
****************************************************************************/
pragma Singleton
-import QtQuick 2.10
+import QtQuick 2.15
QtObject {
- readonly property int buttonDefaultMargin: 30
- readonly property int buttonSmallMargin: 20
-
- readonly property int fontSizeTitle: 55
- readonly property int fontSizeSubtitle: 22
+ readonly property color text: "#ffe7e7e7"
+ readonly property color foregroundPrimary: "#ffa3a3a3"
+ readonly property color foregroundSecondary: "#ff808080"
+ readonly property color backgroundPrimary: "#ff333333"
+ readonly property color backgroundSecondary: "#ff232323"
+ readonly property color hover: "#ff404040"
+ readonly property color accent: "#ff57d658"
+ readonly property color link: "#ff67e668"
+ readonly property color disabledLink: "#7fffffff"
}
diff --git a/share/qtcreator/qmldesigner/landingpage/imports/LandingPage/Colors.qml b/share/qtcreator/qmldesigner/landingpage/imports/LandingPage/Colors.qml
new file mode 100644
index 00000000000..95956290f30
--- /dev/null
+++ b/share/qtcreator/qmldesigner/landingpage/imports/LandingPage/Colors.qml
@@ -0,0 +1,40 @@
+/****************************************************************************
+**
+** Copyright (C) 2022 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.
+**
+****************************************************************************/
+
+pragma Singleton
+import QtQuick 2.15
+import LandingPageTheme
+
+QtObject {
+ readonly property color text: Theme.color(Theme.Welcome_TextColor)
+ readonly property color foregroundPrimary: Theme.color(Theme.Welcome_ForegroundPrimaryColor)
+ readonly property color foregroundSecondary: Theme.color(Theme.Welcome_ForegroundSecondaryColor)
+ readonly property color backgroundPrimary: Theme.color(Theme.Welcome_BackgroundPrimaryColor)
+ readonly property color backgroundSecondary: Theme.color(Theme.Welcome_BackgroundSecondaryColor)
+ readonly property color hover: Theme.color(Theme.Welcome_HoverColor)
+ readonly property color accent: Theme.color(Theme.Welcome_AccentColor)
+ readonly property color link: Theme.color(Theme.Welcome_LinkColor)
+ readonly property color disabledLink: Theme.color(Theme.Welcome_DisabledLinkColor)
+}
diff --git a/share/qtcreator/qmldesigner/landingpage/imports/LandingPage/Values.qml b/share/qtcreator/qmldesigner/landingpage/imports/LandingPage/Values.qml
new file mode 100644
index 00000000000..89f71e78d37
--- /dev/null
+++ b/share/qtcreator/qmldesigner/landingpage/imports/LandingPage/Values.qml
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2022 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.
+**
+****************************************************************************/
+
+pragma Singleton
+import QtQuick 2.15
+
+QtObject {
+ id: values
+
+ property string baseFont: "TitilliumWeb"
+
+ property real scaleFactor: 1.0
+ property real checkBoxSize: Math.round(26 * values.scaleFactor)
+ property real checkBoxIndicatorSize: Math.round(14 * values.scaleFactor)
+ property real checkBoxSpacing: Math.round(6 * values.scaleFactor)
+ property real border: 1
+
+ property int fontSizeTitle: values.fontSizeTitleLG
+ property int fontSizeSubtitle: values.fontSizeSubtitleLG
+
+ readonly property int fontSizeTitleSM: 20
+ readonly property int fontSizeTitleMD: 32
+ readonly property int fontSizeTitleLG: 50
+
+ readonly property int fontSizeSubtitleSM: 14
+ readonly property int fontSizeSubtitleMD: 18
+ readonly property int fontSizeSubtitleLG: 22
+
+ // LG > 1000, MD <= 1000 && > 720, SM <= 720
+ readonly property int layoutBreakpointLG: 1000
+ readonly property int layoutBreakpointMD: 720
+
+ readonly property int spacing: 20
+}
diff --git a/share/qtcreator/qmldesigner/landingpage/imports/LandingPage/qmldir b/share/qtcreator/qmldesigner/landingpage/imports/LandingPage/qmldir
index 616ac203530..9773fc5d1ab 100644
--- a/share/qtcreator/qmldesigner/landingpage/imports/LandingPage/qmldir
+++ b/share/qtcreator/qmldesigner/landingpage/imports/LandingPage/qmldir
@@ -1 +1,2 @@
-singleton Constants 1.0 Constants.qml
+singleton Values 1.0 Values.qml
+singleton Colors 1.0 Colors.qml
diff --git a/share/qtcreator/qmldesigner/landingpage/imports/QdsLandingPageTheme/Values.qml b/share/qtcreator/qmldesigner/landingpage/imports/QdsLandingPageTheme/Values.qml
deleted file mode 100644
index 1ff4b5f0d0d..00000000000
--- a/share/qtcreator/qmldesigner/landingpage/imports/QdsLandingPageTheme/Values.qml
+++ /dev/null
@@ -1,312 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2022 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.
-**
-****************************************************************************/
-
-pragma Singleton
-import QtQuick 2.15
-import LandingPageTheme
-
-QtObject {
- id: values
-
- property string baseFont: "TitilliumWeb"
-
- property real baseHeight: 29
- property real baseFontSize: 12
- property real baseIconFont: 12
-
- property real scaleFactor: 1.0
-
- property real height: Math.round(values.baseHeight * values.scaleFactor)
- property real myFontSize: Math.round(values.baseFont * values.scaleFactor)
- property real myIconFontSize: Math.round(values.baseIconFont * values.scaleFactor)
-
- property real squareComponentWidth: values.height
- property real smallRectWidth: values.height / 2 * 1.5
-
- property real inputWidth: values.height * 4
-
- property real sliderHeight: values.height / 2 * 1.5 // TODO:Have a look at -> sliderAreaHeight: Data.Values.height/2*1.5
-
- property real sliderControlSize: 12
- property real sliderControlSizeMulti: values.sliderControlSize * values.scaleFactor
-
- property int dragThreshold: 10 // px
- property real spinControlIconSize: 8
- property real spinControlIconSizeMulti: values.spinControlIconSize * values.scaleFactor
-
- property real sliderTrackHeight: values.height / 3
- property real sliderHandleHeight: values.sliderTrackHeight * 1.8
- property real sliderHandleWidth: values.sliderTrackHeight * 0.5
- property real sliderFontSize: Math.round(8 * values.scaleFactor)
- property real sliderPadding: Math.round(6 * values.scaleFactor)
- property real sliderMargin: Math.round(3 * values.scaleFactor)
-
- property real sliderPointerWidth: Math.round(7 * values.scaleFactor)
- property real sliderPointerHeight: Math.round(2 * values.scaleFactor)
-
- property real checkBoxSpacing: Math.round(6 * values.scaleFactor)
-
- property real radioButtonSpacing: values.checkBoxSpacing
- property real radioButtonWidth: values.height
- property real radioButtonHeight: values.height
- property real radioButtonIndicatorWidth: 14
- property real radioButtonIndicatorHeight: 14
-
- property real switchSpacing: values.checkBoxSpacing
-
- property real columnWidth: 225 + (175 * (values.scaleFactor * 2))
-
- property real marginTopBottom: 4
- property real border: 1
-
- property real maxComboBoxPopupHeight: Math.round(300 * values.scaleFactor)
- property real maxTextAreaPopupHeight: Math.round(150 * values.scaleFactor)
-
- property real contextMenuLabelSpacing: Math.round(30 * values.scaleFactor)
- property real contextMenuHorizontalPadding: Math.round(6 * values.scaleFactor)
-
- property real inputHorizontalPadding: Math.round(6 * values.scaleFactor)
- property real typeLabelVerticalShift: Math.round(6 * values.scaleFactor)
-
- property real scrollBarThickness: 10
- property real scrollBarActivePadding: 1
- property real scrollBarInactivePadding: 2
-
- property real toolTipHeight: 25
- property int toolTipDelay: 1000
-
- // Controls hover animation params
- property int hoverDuration: 500
- property int hoverEasing: Easing.OutExpo
-
- // Layout sizes
- property real sectionColumnSpacing: 20 // distance between label and sliderControlSize
- property real sectionRowSpacing: 5
- property real sectionHeadGap: 15
- property real sectionHeadHeight: 21 // tab and section
- property real sectionHeadSpacerHeight: 10
-
- property real controlLabelWidth: 15
- property real controlLabelGap: 5
-
- property real controlGap: 5 // TODO different name
- property real twoControlColumnGap: values.controlLabelGap
- + values.controlLabelWidth
- + values.controlGap
-
- property real columnGap: 10
-
- property real iconAreaWidth: Math.round(21 * values.scaleFactor)
-
- property real linkControlWidth: values.iconAreaWidth
- property real linkControlHeight: values.height
-
- property real infinityControlWidth: values.iconAreaWidth
- property real infinityControlHeight: values.height
-
- property real transform3DSectionSpacing: 15
-
- // Control sizes
-
- property real defaultControlWidth: values.squareComponentWidth * 5
- property real defaultControlHeight: values.height
-
- property real actionIndicatorWidth: values.iconAreaWidth //StudioTheme.Values.squareComponentWidth
- property real actionIndicatorHeight: values.height
-
- property real spinBoxIndicatorWidth: values.smallRectWidth - 2 * values.border
- property real spinBoxIndicatorHeight: values.height / 2 - values.border
-
- property real sliderIndicatorWidth: values.squareComponentWidth
- property real sliderIndicatorHeight: values.height
-
- property real translationIndicatorWidth: values.squareComponentWidth
- property real translationIndicatorHeight: values.height
-
- property real checkIndicatorWidth: values.squareComponentWidth
- property real checkIndicatorHeight: values.height
-
- property real singleControlColumnWidth: 2 * values.twoControlColumnWidth
- + values.twoControlColumnGap
- + values.actionIndicatorWidth
-
- property real twoControlColumnWidthMin: 3 * values.height - 2 * values.border
- property real twoControlColumnWidthMax: 3 * values.twoControlColumnWidthMin
- property real twoControlColumnWidth: values.twoControlColumnWidthMin
-
- property real controlColumnWithoutControlsWidth: 2 * (values.actionIndicatorWidth
- + values.twoControlColumnGap)
- + values.linkControlWidth
-
- property real controlColumnWidth: values.controlColumnWithoutControlsWidth
- + 2 * values.twoControlColumnWidth
-
- property real controlColumnWidthMin: values.controlColumnWithoutControlsWidth
- + 2 * values.twoControlColumnWidthMin
-
- property real propertyLabelWidthMin: 80
- property real propertyLabelWidthMax: 120
- property real propertyLabelWidth: values.propertyLabelWidthMin
-
- property real sectionLeftPadding: 8
- property real sectionLayoutRightPadding: values.scrollBarThickness + 6
-
- property real columnFactor: values.propertyLabelWidthMin
- / (values.propertyLabelWidthMin + values.controlColumnWidthMin)
-
- function responsiveResize(width) {
- var tmpWidth = width - values.sectionColumnSpacing
- - values.sectionLeftPadding - values.sectionLayoutRightPadding
- var labelColumnWidth = Math.round(tmpWidth * values.columnFactor)
- labelColumnWidth = Math.max(Math.min(values.propertyLabelWidthMax, labelColumnWidth),
- values.propertyLabelWidthMin)
-
- var controlColumnWidth = tmpWidth - labelColumnWidth
- var controlWidth = Math.round((controlColumnWidth - values.controlColumnWithoutControlsWidth) * 0.5)
- controlWidth = Math.max(Math.min(values.twoControlColumnWidthMax, controlWidth),
- values.twoControlColumnWidthMin)
-
- values.propertyLabelWidth = labelColumnWidth
- values.twoControlColumnWidth = controlWidth
- }
-
- // Color Editor Popup
- property real colorEditorPopupWidth: 4 * values.colorEditorPopupSpinBoxWidth
- + 3 * values.controlGap
- + 2 * values.colorEditorPopupPadding
- property real colorEditorPopupHeight: 800
- property real colorEditorPopupPadding: 10
- property real colorEditorPopupMargin: 20
-
- property real colorEditorPopupSpacing: 10
- property real colorEditorPopupLineHeight: 60
-
- property real hueSliderHeight: 20
- property real hueSliderHandleWidth: 10
-
- property real colorEditorPopupCmoboBoxWidth: 110
- property real colorEditorPopupSpinBoxWidth: 54
-
- // Theme Colors
-
- property bool isLightTheme: themeControlBackground.hsvValue > themeTextColor.hsvValue
-
- property string themePanelBackground: Theme.color(Theme.DSpanelBackground)
-
- property string themeGreenLight: Theme.color(Theme.DSgreenLight)
- property string themeAmberLight: Theme.color(Theme.DSamberLight)
- property string themeRedLight: Theme.color(Theme.DSredLight)
-
- property string themeInteraction: Theme.color(Theme.DSinteraction)
- property string themeError: Theme.color(Theme.DSerrorColor)
- property string themeWarning: Theme.color(Theme.DSwarningColor)
- property string themeDisabled: Theme.color(Theme.DSdisabledColor)
-
- property string themeInteractionHover: Theme.color(Theme.DSinteractionHover)
-
- property string themeAliasIconChecked: Theme.color(Theme.DSnavigatorAliasIconChecked)
-
- // Control colors
- property color themeControlBackground: Theme.color(Theme.DScontrolBackground)
- property string themeControlBackgroundInteraction: Theme.color(Theme.DScontrolBackgroundInteraction)
- property string themeControlBackgroundDisabled: Theme.color(Theme.DScontrolBackgroundDisabled)
- property string themeControlBackgroundGlobalHover: Theme.color(Theme.DScontrolBackgroundGlobalHover)
- property string themeControlBackgroundHover: Theme.color(Theme.DScontrolBackgroundHover)
-
- property string themeControlOutline: Theme.color(Theme.DScontrolOutline)
- property string themeControlOutlineInteraction: Theme.color(Theme.DScontrolOutlineInteraction)
- property string themeControlOutlineDisabled: Theme.color(Theme.DScontrolOutlineDisabled)
-
- // Panels & Panes
- property string themeBackgroundColorNormal: Theme.color(Theme.DSBackgroundColorNormal)
- property string themeBackgroundColorAlternate: Theme.color(Theme.DSBackgroundColorAlternate)
-
- // Text colors
- property color themeTextColor: Theme.color(Theme.DStextColor)
- property string themeTextColorDisabled: Theme.color(Theme.DStextColorDisabled)
- property string themeTextSelectionColor: Theme.color(Theme.DStextSelectionColor)
- property string themeTextSelectedTextColor: Theme.color(Theme.DStextSelectedTextColor)
- property string themeTextColorDisabledMCU: Theme.color(Theme.DStextColorDisabled)
-
- property string themePlaceholderTextColor: Theme.color(Theme.DSplaceholderTextColor)
- property string themePlaceholderTextColorInteraction: Theme.color(Theme.DSplaceholderTextColorInteraction)
-
- // Icon colors
- property string themeIconColor: Theme.color(Theme.DSiconColor)
- property string themeIconColorHover: Theme.color(Theme.DSiconColorHover)
- property string themeIconColorInteraction: Theme.color(Theme.DSiconColorInteraction)
- property string themeIconColorDisabled: Theme.color(Theme.DSiconColorDisabled)
- property string themeIconColorSelected: Theme.color(Theme.DSiconColorSelected)
-
- property string themeLinkIndicatorColor: Theme.color(Theme.DSlinkIndicatorColor)
- property string themeLinkIndicatorColorHover: Theme.color(Theme.DSlinkIndicatorColorHover)
- property string themeLinkIndicatorColorInteraction: Theme.color(Theme.DSlinkIndicatorColorInteraction)
- property string themeLinkIndicatorColorDisabled: Theme.color(Theme.DSlinkIndicatorColorDisabled)
-
- property string themeInfiniteLoopIndicatorColor: Theme.color(Theme.DSlinkIndicatorColor)
- property string themeInfiniteLoopIndicatorColorHover: Theme.color(Theme.DSlinkIndicatorColorHover)
- property string themeInfiniteLoopIndicatorColorInteraction: Theme.color(Theme.DSlinkIndicatorColorInteraction)
-
- // Popup background color (ComboBox, SpinBox, TextArea)
- property string themePopupBackground: Theme.color(Theme.DSpopupBackground)
- // GradientPopupDialog modal overly color
- property string themePopupOverlayColor: Theme.color(Theme.DSpopupOverlayColor)
-
- // ToolTip (UrlChooser)
- property string themeToolTipBackground: Theme.color(Theme.DStoolTipBackground)
- property string themeToolTipOutline: Theme.color(Theme.DStoolTipOutline)
- property string themeToolTipText: Theme.color(Theme.DStoolTipText)
-
- // Slider colors
- property string themeSliderActiveTrack: Theme.color(Theme.DSsliderActiveTrack)
- property string themeSliderActiveTrackHover: Theme.color(Theme.DSactiveTrackHover)
- property string themeSliderActiveTrackFocus: Theme.color(Theme.DSsliderActiveTrackFocus)
- property string themeSliderInactiveTrack: Theme.color(Theme.DSsliderInactiveTrack)
- property string themeSliderInactiveTrackHover: Theme.color(Theme.DSsliderInactiveTrackHover)
- property string themeSliderInactiveTrackFocus: Theme.color(Theme.DSsliderInactiveTrackFocus)
- property string themeSliderHandle: Theme.color(Theme.DSsliderHandle)
- property string themeSliderHandleHover: Theme.color(Theme.DSsliderHandleHover)
- property string themeSliderHandleFocus: Theme.color(Theme.DSsliderHandleFocus)
- property string themeSliderHandleInteraction: Theme.color(Theme.DSsliderHandleInteraction)
-
- property string themeScrollBarTrack: Theme.color(Theme.DSscrollBarTrack)
- property string themeScrollBarHandle: Theme.color(Theme.DSscrollBarHandle)
-
- property string themeSectionHeadBackground: Theme.color(Theme.DSsectionHeadBackground)
-
- property string themeTabActiveBackground: Theme.color(Theme.DStabActiveBackground)
- property string themeTabActiveText: Theme.color(Theme.DStabActiveText)
- property string themeTabInactiveBackground: Theme.color(Theme.DStabInactiveBackground)
- property string themeTabInactiveText: Theme.color(Theme.DStabInactiveText)
-
- property string themeStateSeparator: Theme.color(Theme.DSstateSeparatorColor)
- property string themeStateBackground: Theme.color(Theme.DSstateBackgroundColor)
- property string themeStatePreviewOutline: Theme.color(Theme.DSstatePreviewOutline)
-
- property string themeUnimportedModuleColor: Theme.color(Theme.DSUnimportedModuleColor)
-
- // Taken out of Constants.js
- property string themeChangedStateText: Theme.color(Theme.DSchangedStateText)
-}
diff --git a/share/qtcreator/qmldesigner/landingpage/imports/QdsLandingPageTheme/qmldir b/share/qtcreator/qmldesigner/landingpage/imports/QdsLandingPageTheme/qmldir
deleted file mode 100644
index bc251e981f7..00000000000
--- a/share/qtcreator/qmldesigner/landingpage/imports/QdsLandingPageTheme/qmldir
+++ /dev/null
@@ -1 +0,0 @@
-singleton Values 1.0 Values.qml
diff --git a/share/qtcreator/qmldesigner/landingpage/landingpage.qmlproject b/share/qtcreator/qmldesigner/landingpage/landingpage.qmlproject
index 54915a68ddb..2b6325ada5a 100644
--- a/share/qtcreator/qmldesigner/landingpage/landingpage.qmlproject
+++ b/share/qtcreator/qmldesigner/landingpage/landingpage.qmlproject
@@ -12,6 +12,10 @@ Project {
directory: "imports"
}
+ QmlFiles {
+ directory: "mockimports"
+ }
+
JavaScriptFiles {
directory: "content"
}
@@ -69,11 +73,14 @@ Project {
*/
}
-
/* List of plugin directories passed to QML runtime */
- importPaths: [ "imports", "../../../../share/3rdparty/studiofonts" ]
+ importPaths: [ "imports", "../../../../src/share/3rdparty/studiofonts", "mockimports" ]
+
+ fileSelectors: [ "QDS_theming" ]
qt6Project: true
qdsVersion: "3.2"
+
+ mainUiFile: "content/Screen01.ui.qml"
}
diff --git a/share/qtcreator/qmldesigner/landingpage/mockimports/LandingPageApi/LandingPageApi.qml b/share/qtcreator/qmldesigner/landingpage/mockimports/LandingPageApi/LandingPageApi.qml
new file mode 100644
index 00000000000..c1148980988
--- /dev/null
+++ b/share/qtcreator/qmldesigner/landingpage/mockimports/LandingPageApi/LandingPageApi.qml
@@ -0,0 +1,44 @@
+/****************************************************************************
+**
+** Copyright (C) 2022 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.
+**
+****************************************************************************/
+
+pragma Singleton
+import QtQuick 2.15
+import StudioFonts
+
+QtObject {
+ property bool qdsInstalled: true
+ property bool projectFileExists: true
+ property string qtVersion: "6.1"
+ property string qdsVersion: "3.6"
+
+ function openQtc(rememberSelection) { console.log("openQtc", rememberSelection) }
+ function openQds(rememberSelection) { console.log("openQds", rememberSelection) }
+ function installQds() { console.log("installQds") }
+ function generateProjectFile() { console.log("generateProjectFile") }
+
+ // This property ensures that the Titillium font will be loaded and
+ // can be used by the theme.
+ property string family: StudioFonts.titilliumWeb_regular
+}
diff --git a/share/qtcreator/qmldesigner/landingpage/mockimports/LandingPageApi/qmldir b/share/qtcreator/qmldesigner/landingpage/mockimports/LandingPageApi/qmldir
new file mode 100644
index 00000000000..d3cbdae478c
--- /dev/null
+++ b/share/qtcreator/qmldesigner/landingpage/mockimports/LandingPageApi/qmldir
@@ -0,0 +1 @@
+singleton LandingPageApi 1.0 LandingPageApi.qml
diff --git a/share/qtcreator/qmldesigner/landingpage/content/LandingSeparator.qml b/share/qtcreator/qmldesigner/landingpage/mockimports/LandingPageTheme/Dummy.qml
index 344bbbcd3c9..3e1e28bc87a 100644
--- a/share/qtcreator/qmldesigner/landingpage/content/LandingSeparator.qml
+++ b/share/qtcreator/qmldesigner/landingpage/mockimports/LandingPageTheme/Dummy.qml
@@ -28,13 +28,5 @@
****************************************************************************/
import QtQuick 2.15
-import QtQuick.Controls 2.15
-import QdsLandingPageTheme as Theme
-Rectangle {
- color: Theme.Values.themeControlBackground
- width: parent.width
- height: 2
- z: 10
- anchors.horizontalCenter: parent.horizontalCenter
-}
+QtObject {}
diff --git a/share/qtcreator/qmldesigner/landingpage/mockimports/LandingPageTheme/qmldir b/share/qtcreator/qmldesigner/landingpage/mockimports/LandingPageTheme/qmldir
new file mode 100644
index 00000000000..9ae3bc301f0
--- /dev/null
+++ b/share/qtcreator/qmldesigner/landingpage/mockimports/LandingPageTheme/qmldir
@@ -0,0 +1 @@
+Dummy 1.0 Dummy.qml
diff --git a/src/plugins/qmlprojectmanager/CMakeLists.txt b/src/plugins/qmlprojectmanager/CMakeLists.txt
index af094450028..42013e53868 100644
--- a/src/plugins/qmlprojectmanager/CMakeLists.txt
+++ b/src/plugins/qmlprojectmanager/CMakeLists.txt
@@ -30,4 +30,5 @@ add_qtc_plugin(QmlProjectManager
qmlprojectnodes.cpp qmlprojectnodes.h
qmlprojectplugin.cpp qmlprojectplugin.h
qmlprojectrunconfiguration.cpp qmlprojectrunconfiguration.h
+ "${PROJECT_SOURCE_DIR}/src/share/3rdparty/studiofonts/studiofonts.qrc"
)
diff --git a/src/plugins/qmlprojectmanager/projectfilecontenttools.cpp b/src/plugins/qmlprojectmanager/projectfilecontenttools.cpp
index 247e636beaf..3de9a325d46 100644
--- a/src/plugins/qmlprojectmanager/projectfilecontenttools.cpp
+++ b/src/plugins/qmlprojectmanager/projectfilecontenttools.cpp
@@ -56,24 +56,37 @@ const QString qdsVersion(const Utils::FilePath &projectFilePath)
{
const QString projectFileContent = readFileContents(projectFilePath);
QRegularExpressionMatch match = qdsVerRegexp.match(projectFileContent);
- if (!match.hasMatch())
- return {};
- QString version = match.captured(1);
- return version.isEmpty() ? QObject::tr("Unknown") : version;
+ if (match.hasMatch()) {
+ const QString version = match.captured(1);
+ if (!version.isEmpty())
+ return version;
+ }
+
+ return QObject::tr("Unknown");
}
-QRegularExpression qt6Regexp("(qt6project:)\\s*\"*(true|false)\"*", QRegularExpression::CaseInsensitiveOption);
+QRegularExpression quickRegexp("(quickVersion:)\\s*\"(\\d+.\\d+)\"",
+ QRegularExpression::CaseInsensitiveOption);
+QRegularExpression qt6Regexp("(qt6Project:)\\s*\"*(true|false)\"*",
+ QRegularExpression::CaseInsensitiveOption);
const QString qtVersion(const Utils::FilePath &projectFilePath)
{
const QString defaultReturn = QObject::tr("Unknown");
const QString data = readFileContents(projectFilePath);
- QRegularExpressionMatch match = qt6Regexp.match(data);
- if (!match.hasMatch())
- return defaultReturn;
- return match.captured(2).contains("true", Qt::CaseInsensitive)
- ? QObject::tr("Qt6 or later")
- : QObject::tr("Qt5 or earlier");
+
+ // First check if quickVersion is contained in the project file
+ QRegularExpressionMatch match = quickRegexp.match(data);
+ if (match.hasMatch())
+ return QString("Qt %1").arg(match.captured(2));
+
+ // If quickVersion wasn't found check for qt6Project
+ match = qt6Regexp.match(data);
+ if (match.hasMatch())
+ return match.captured(2).contains("true", Qt::CaseInsensitive) ? QObject::tr("Qt 6")
+ : QObject::tr("Qt 5");
+
+ return defaultReturn;
}
bool isQt6Project(const Utils::FilePath &projectFilePath)
diff --git a/src/plugins/qmlprojectmanager/qdslandingpage.cpp b/src/plugins/qmlprojectmanager/qdslandingpage.cpp
index 13b469a18e7..d9fbe8be232 100644
--- a/src/plugins/qmlprojectmanager/qdslandingpage.cpp
+++ b/src/plugins/qmlprojectmanager/qdslandingpage.cpp
@@ -24,26 +24,27 @@
****************************************************************************/
#include "qdslandingpage.h"
+#include "projectfilecontenttools.h"
#include "qdslandingpagetheme.h"
+#include "qmlprojectconstants.h"
+#include "qmlprojectgen/qmlprojectgenerator.h"
+#include "qmlprojectplugin.h"
#include "utils/algorithm.h"
+#include <coreplugin/coreconstants.h>
+#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/icore.h>
+#include <coreplugin/modemanager.h>
-#include <QtQml/QQmlEngine>
+#include <QDesktopServices>
#include <QHBoxLayout>
#include <QQuickItem>
+#include <QtQml/QQmlEngine>
namespace QmlProjectManager {
namespace Internal {
-const char QMLRESOURCEPATH[] = "qmldesigner/propertyEditorQmlSources/imports";
-const char LANDINGPAGEPATH[] = "qmldesigner/landingpage";
-const char PROPERTY_QDSINSTALLED[] = "qdsInstalled";
-const char PROPERTY_PROJECTFILEEXISTS[] = "projectFileExists";
-const char PROPERTY_QTVERSION[] = "qtVersion";
-const char PROPERTY_QDSVERSION[] = "qdsVersion";
-const char PROPERTY_CMAKES[] = "cmakeLists";
-const char PROPERTY_REMEMBER[] = "rememberSelection";
+const char INSTALL_QDS_URL[] = "https://www.qt.io/product/ui-design-tools";
QdsLandingPageWidget::QdsLandingPageWidget(QWidget* parent)
: QWidget(parent)
@@ -62,38 +63,79 @@ QQuickWidget *QdsLandingPageWidget::widget()
{
if (!m_widget) {
m_widget = new QQuickWidget();
+
+ const QString resourcePath
+ = Core::ICore::resourcePath(QmlProjectManager::Constants::QML_RESOURCE_PATH).toString();
+ const QString landingPath
+ = Core::ICore::resourcePath(QmlProjectManager::Constants::LANDING_PAGE_PATH).toString();
+
+ QdsLandingPageTheme::setupTheme(m_widget->engine());
+
+ m_widget->setResizeMode(QQuickWidget::SizeRootObjectToView);
+ m_widget->engine()->addImportPath(landingPath + "/imports");
+ m_widget->engine()->addImportPath(resourcePath);
+ m_widget->setSource(QUrl::fromLocalFile(landingPath + "/main.qml"));
+ m_widget->hide();
+
layout()->addWidget(m_widget);
}
return m_widget;
}
-QdsLandingPage::QdsLandingPage(QdsLandingPageWidget *widget, QWidget *parent)
- : m_widget{widget->widget()}
+QdsLandingPage::QdsLandingPage()
+ : m_widget{nullptr}
+{}
+
+void QdsLandingPage::openQtc(bool rememberSelection)
{
- Q_UNUSED(parent)
+ if (rememberSelection)
+ Core::ICore::settings()->setValue(QmlProjectManager::Constants::ALWAYS_OPEN_UI_MODE,
+ Core::Constants::MODE_EDIT);
- setParent(m_widget);
+ hide();
- const QString resourcePath = Core::ICore::resourcePath(QMLRESOURCEPATH).toString();
- const QString landingPath = Core::ICore::resourcePath(LANDINGPAGEPATH).toString();
+ Core::ModeManager::activateMode(Core::Constants::MODE_EDIT);
+}
- qmlRegisterSingletonInstance<QdsLandingPage>("LandingPageApi", 1, 0, "LandingPageApi", this);
- QdsLandingPageTheme::setupTheme(m_widget->engine());
+void QdsLandingPage::openQds(bool rememberSelection)
+{
+ if (rememberSelection)
+ Core::ICore::settings()->setValue(QmlProjectManager::Constants::ALWAYS_OPEN_UI_MODE,
+ Core::Constants::MODE_DESIGN);
- m_widget->setResizeMode(QQuickWidget::SizeRootObjectToView);
- m_widget->engine()->addImportPath(landingPath + "/imports");
- m_widget->engine()->addImportPath(resourcePath);
- m_widget->setSource(QUrl::fromLocalFile(landingPath + "/main.qml"));
+ auto editor = Core::EditorManager::currentEditor();
+ if (editor)
+ QmlProjectPlugin::openInQDSWithProject(editor->document()->filePath());
+}
- if (m_widget->rootObject()) { // main.qml only works with Qt6
- connect(m_widget->rootObject(), SIGNAL(openQtc(bool)), this, SIGNAL(openCreator(bool)));
- connect(m_widget->rootObject(), SIGNAL(openQds(bool)), this, SIGNAL(openDesigner(bool)));
- connect(m_widget->rootObject(), SIGNAL(installQds()), this, SIGNAL(installDesigner()));
- connect(m_widget->rootObject(), SIGNAL(generateCmake()), this, SIGNAL(generateCmake()));
- connect(m_widget->rootObject(), SIGNAL(generateProjectFile()), this, SIGNAL(generateProjectFile()));
+void QdsLandingPage::installQds()
+{
+ QDesktopServices::openUrl(QUrl(INSTALL_QDS_URL));
+}
+
+void QdsLandingPage::generateProjectFile()
+{
+ GenerateQmlProject::QmlProjectFileGenerator generator;
+
+ Core::IEditor *editor = Core::EditorManager::currentEditor();
+ if (!editor)
+ return;
+
+ if (generator.prepareForUiQmlFile(editor->document()->filePath())) {
+ if (generator.execute()) {
+ const QString qtVersion = ProjectFileContentTools::qtVersion(generator.targetFile());
+ const QString qdsVersion = ProjectFileContentTools::qdsVersion(generator.targetFile());
+ setProjectFileExists(generator.targetFile().exists());
+ setQtVersion(qtVersion);
+ setQdsVersion(qdsVersion);
+ }
}
- m_widget->hide();
+}
+
+void QdsLandingPage::setWidget(QWidget *widget)
+{
+ m_widget = widget;
}
QWidget *QdsLandingPage::widget()
@@ -103,19 +145,17 @@ QWidget *QdsLandingPage::widget()
void QdsLandingPage::show()
{
- if (m_widget->rootObject()) {
- m_widget->rootObject()->setProperty(PROPERTY_QDSINSTALLED, m_qdsInstalled);
- m_widget->rootObject()->setProperty(PROPERTY_PROJECTFILEEXISTS, m_projectFileExists);
- m_widget->rootObject()->setProperty(PROPERTY_QTVERSION, m_qtVersion);
- m_widget->rootObject()->setProperty(PROPERTY_QDSVERSION, m_qdsVersion);
- m_widget->rootObject()->setProperty(PROPERTY_CMAKES, m_cmakeResources);
- m_widget->rootObject()->setProperty(PROPERTY_REMEMBER, Qt::Unchecked);
- }
+ if (!m_widget)
+ return;
+
m_widget->show();
}
void QdsLandingPage::hide()
{
+ if (!m_widget)
+ return;
+
m_widget->hide();
}
@@ -126,9 +166,10 @@ bool QdsLandingPage::qdsInstalled() const
void QdsLandingPage::setQdsInstalled(bool installed)
{
- m_qdsInstalled = installed;
- if (m_widget->rootObject())
- m_widget->rootObject()->setProperty(PROPERTY_QDSINSTALLED, installed);
+ if (m_qdsInstalled != installed) {
+ m_qdsInstalled = installed;
+ emit qdsInstalledChanged();
+ }
}
bool QdsLandingPage::projectFileExists() const
@@ -138,9 +179,10 @@ bool QdsLandingPage::projectFileExists() const
void QdsLandingPage::setProjectFileExists(bool exists)
{
- m_projectFileExists = exists;
- if (m_widget->rootObject())
- m_widget->rootObject()->setProperty(PROPERTY_PROJECTFILEEXISTS, exists);
+ if (m_projectFileExists != exists) {
+ m_projectFileExists = exists;
+ emit projectFileExistshanged();
+ }
}
const QString QdsLandingPage::qtVersion() const
@@ -150,9 +192,10 @@ const QString QdsLandingPage::qtVersion() const
void QdsLandingPage::setQtVersion(const QString &version)
{
- m_qtVersion = version;
- if (m_widget->rootObject())
- m_widget->rootObject()->setProperty(PROPERTY_QTVERSION, version);
+ if (m_qtVersion != version) {
+ m_qtVersion = version;
+ emit qtVersionChanged();
+ }
}
const QString QdsLandingPage::qdsVersion() const
@@ -162,9 +205,10 @@ const QString QdsLandingPage::qdsVersion() const
void QdsLandingPage::setQdsVersion(const QString &version)
{
- m_qdsVersion = version;
- if (m_widget->rootObject())
- m_widget->rootObject()->setProperty(PROPERTY_QDSVERSION, version);
+ if (m_qdsVersion != version) {
+ m_qdsVersion = version;
+ emit qdsVersionChanged();
+ }
}
const QStringList QdsLandingPage::cmakeResources() const
diff --git a/src/plugins/qmlprojectmanager/qdslandingpage.h b/src/plugins/qmlprojectmanager/qdslandingpage.h
index 020633ed3ca..3447a2bf915 100644
--- a/src/plugins/qmlprojectmanager/qdslandingpage.h
+++ b/src/plugins/qmlprojectmanager/qdslandingpage.h
@@ -60,14 +60,24 @@ class QdsLandingPage : public QObject
Q_OBJECT
public:
- Q_PROPERTY(bool qdsInstalled MEMBER m_qdsInstalled READ qdsInstalled WRITE setQdsInstalled)
- Q_PROPERTY(bool projectFileExists MEMBER m_projectFileExists READ projectFileExists WRITE setProjectFileExists)
- Q_PROPERTY(QString qtVersion MEMBER m_qtVersion READ qtVersion WRITE setQtVersion)
- Q_PROPERTY(QString qdsVersion MEMBER m_qdsVersion READ qdsVersion WRITE setQdsVersion)
+ Q_PROPERTY(bool qdsInstalled MEMBER m_qdsInstalled READ qdsInstalled WRITE setQdsInstalled
+ NOTIFY qdsInstalledChanged)
+ Q_PROPERTY(bool projectFileExists MEMBER m_projectFileExists READ projectFileExists WRITE
+ setProjectFileExists NOTIFY projectFileExistshanged)
+ Q_PROPERTY(QString qtVersion MEMBER m_qtVersion READ qtVersion WRITE setQtVersion NOTIFY
+ qtVersionChanged)
+ Q_PROPERTY(QString qdsVersion MEMBER m_qdsVersion READ qdsVersion WRITE setQdsVersion NOTIFY
+ qdsVersionChanged)
public:
- QdsLandingPage(QdsLandingPageWidget *widget, QWidget *parent = nullptr);
+ QdsLandingPage();
+ Q_INVOKABLE void openQtc(bool rememberSelection);
+ Q_INVOKABLE void openQds(bool rememberSelection);
+ Q_INVOKABLE void installQds();
+ Q_INVOKABLE void generateProjectFile();
+
+ void setWidget(QWidget *widget);
QWidget *widget();
void show();
void hide();
@@ -85,19 +95,16 @@ public:
void setCmakeResources(const QStringList &resources);
signals:
- void doNotShowChanged(bool doNotShow);
- void openCreator(bool rememberSelection);
- void openDesigner(bool rememberSelection);
- void installDesigner();
- void generateCmake();
- void generateProjectFile();
+ void qdsInstalledChanged();
+ void projectFileExistshanged();
+ void qtVersionChanged();
+ void qdsVersionChanged();
private:
- QQuickWidget *m_widget = nullptr;
+ QWidget *m_widget = nullptr;
bool m_qdsInstalled = false;
bool m_projectFileExists = false;
- Qt::CheckState m_doNotShow = Qt::Unchecked;
QString m_qtVersion;
QString m_qdsVersion;
QStringList m_cmakeResources;
diff --git a/src/plugins/qmlprojectmanager/qmlprojectconstants.h b/src/plugins/qmlprojectmanager/qmlprojectconstants.h
index 3ba2b101462..89d3cc630d3 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectconstants.h
+++ b/src/plugins/qmlprojectmanager/qmlprojectconstants.h
@@ -43,5 +43,9 @@ const char customImportPaths[] = "CustomImportPaths";
const char canonicalProjectDir[] ="CanonicalProjectDir";
const char enviromentLaunchedQDS[] = "QTC_LAUNCHED_QDS";
+
+const char ALWAYS_OPEN_UI_MODE[] = "J.QtQuick/QmlJSEditor.openUiQmlMode";
+const char QML_RESOURCE_PATH[] = "qmldesigner/propertyEditorQmlSources/imports";
+const char LANDING_PAGE_PATH[] = "qmldesigner/landingpage";
} // namespace Constants
} // namespace QmlProjectManager
diff --git a/src/plugins/qmlprojectmanager/qmlprojectmanager.qbs b/src/plugins/qmlprojectmanager/qmlprojectmanager.qbs
index bf0a2c4626b..0bac36cf7c9 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectmanager.qbs
+++ b/src/plugins/qmlprojectmanager/qmlprojectmanager.qbs
@@ -27,7 +27,8 @@ QtcPlugin {
"qmlprojectmanagerconstants.h",
"qmlprojectnodes.cpp", "qmlprojectnodes.h",
"qmlprojectplugin.cpp", "qmlprojectplugin.h",
- "qmlprojectrunconfiguration.cpp", "qmlprojectrunconfiguration.h"
+ "qmlprojectrunconfiguration.cpp", "qmlprojectrunconfiguration.h",
+ project.ide_source_tree + "/src/share/3rdparty/studiofonts/studiofonts.qrc"
]
}
diff --git a/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp b/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp
index 655ece436cd..4c98a998838 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp
@@ -1,4 +1,4 @@
-/****************************************************************************
+/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
@@ -76,9 +76,6 @@ using namespace ProjectExplorer;
namespace QmlProjectManager {
namespace Internal {
-const char alwaysOpenUiQmlMode[] = "J.QtQuick/QmlJSEditor.openUiQmlMode";
-const char installQdsUrl[] = "https://www.qt.io/product/ui-design-tools";
-
static bool isQmlDesigner(const ExtensionSystem::PluginSpec *spec)
{
if (!spec)
@@ -96,17 +93,19 @@ static bool qmlDesignerEnabled()
static QString alwaysOpenWithMode()
{
- return Core::ICore::settings()->value(alwaysOpenUiQmlMode, "").toString();
+ return Core::ICore::settings()
+ ->value(QmlProjectManager::Constants::ALWAYS_OPEN_UI_MODE, "")
+ .toString();
}
static void setAlwaysOpenWithMode(const QString &mode)
{
- Core::ICore::settings()->setValue(alwaysOpenUiQmlMode, mode);
+ Core::ICore::settings()->setValue(QmlProjectManager::Constants::ALWAYS_OPEN_UI_MODE, mode);
}
static void clearAlwaysOpenWithMode()
{
- Core::ICore::settings()->remove(alwaysOpenUiQmlMode);
+ Core::ICore::settings()->remove(QmlProjectManager::Constants::ALWAYS_OPEN_UI_MODE);
}
class QmlProjectPluginPrivate
@@ -203,7 +202,6 @@ const Utils::FilePath findQmlProjectUpwards(const Utils::FilePath &folder)
static bool findAndOpenProject(const Utils::FilePath &filePath)
{
-
ProjectExplorer::Project *project
= ProjectExplorer::SessionManager::projectForFile(filePath);
@@ -268,6 +266,14 @@ bool QmlProjectPlugin::initialize(const QStringList &, QString *errorMessage)
d = new QmlProjectPluginPrivate;
if (!qmlDesignerEnabled()) {
+ QFontDatabase::addApplicationFont(":/studiofonts/TitilliumWeb-Regular.ttf");
+ d->landingPage = new QdsLandingPage();
+ qmlRegisterSingletonInstance<QdsLandingPage>("LandingPageApi",
+ 1,
+ 0,
+ "LandingPageApi",
+ d->landingPage);
+
d->landingPageWidget = new QdsLandingPageWidget();
const QStringList mimeTypes = {QmlJSTools::Constants::QMLUI_MIMETYPE};
@@ -280,7 +286,6 @@ bool QmlProjectPlugin::initialize(const QStringList &, QString *errorMessage)
this, &QmlProjectPlugin::editorModeChanged);
}
-
ProjectManager::registerProjectType<QmlProject>(QmlJSTools::Constants::QMLPROJECT_MIMETYPE);
Core::FileIconProvider::registerIconOverlayForSuffix(":/qmlproject/images/qmlproject.png",
"qmlproject");
@@ -379,20 +384,12 @@ bool QmlProjectPlugin::initialize(const QStringList &, QString *errorMessage)
return true;
}
-void QmlProjectPlugin::initializeQmlLandingPage()
-{
- d->landingPage = new QdsLandingPage(d->landingPageWidget);
- connect(d->landingPage, &QdsLandingPage::openCreator, this, &QmlProjectPlugin::openQtc);
- connect(d->landingPage, &QdsLandingPage::openDesigner, this, &QmlProjectPlugin::openQds);
- connect(d->landingPage, &QdsLandingPage::installDesigner, this, &QmlProjectPlugin::installQds);
- connect(d->landingPage, &QdsLandingPage::generateCmake, this, &QmlProjectPlugin::generateCmake);
- connect(d->landingPage, &QdsLandingPage::generateProjectFile, this, &QmlProjectPlugin::generateProjectFile);
-}
-
void QmlProjectPlugin::displayQmlLandingPage()
{
if (!d->landingPage)
- initializeQmlLandingPage();
+ return;
+
+ d->landingPage->setWidget(d->landingPageWidget->widget());
updateQmlLandingPageProjectInfo(projectFilePath());
d->landingPage->setQdsInstalled(qdsInstallationExists());
@@ -452,37 +449,16 @@ void QmlProjectPlugin::openQds(bool permanent)
openInQDSWithProject(editor->document()->filePath());
}
-void QmlProjectPlugin::installQds()
-{
- QDesktopServices::openUrl(QUrl(installQdsUrl));
- hideQmlLandingPage();
-}
-
-void QmlProjectPlugin::generateCmake()
-{
- qWarning() << "TODO generate cmake";
-}
-
-void QmlProjectPlugin::generateProjectFile()
-{
- GenerateQmlProject::QmlProjectFileGenerator generator;
-
- Core::IEditor *editor = Core::EditorManager::currentEditor();
- if (editor)
- if (generator.prepareForUiQmlFile(editor->document()->filePath()))
- if (generator.execute())
- updateQmlLandingPageProjectInfo(generator.targetFile());
-}
-
void QmlProjectPlugin::updateQmlLandingPageProjectInfo(const Utils::FilePath &projectFile)
{
- if (d->landingPage) {
- const QString qtVersionString = ProjectFileContentTools::qtVersion(projectFile);
- const QString qdsVersionString = ProjectFileContentTools::qdsVersion(projectFile);
- d->landingPage->setProjectFileExists(projectFile.exists());
- d->landingPage->setQtVersion(qtVersionString);
- d->landingPage->setQdsVersion(qdsVersionString);
- }
+ if (!d->landingPage)
+ return;
+
+ const QString qtVersionString = ProjectFileContentTools::qtVersion(projectFile);
+ const QString qdsVersionString = ProjectFileContentTools::qdsVersion(projectFile);
+ d->landingPage->setProjectFileExists(projectFile.exists());
+ d->landingPage->setQtVersion(qtVersionString);
+ d->landingPage->setQdsVersion(qdsVersionString);
}
Utils::FilePath QmlProjectPlugin::projectFilePath()
diff --git a/src/plugins/qmlprojectmanager/qmlprojectplugin.h b/src/plugins/qmlprojectmanager/qmlprojectplugin.h
index 7a9130b4869..ffc23351bb3 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectplugin.h
+++ b/src/plugins/qmlprojectmanager/qmlprojectplugin.h
@@ -49,21 +49,16 @@ public:
static Utils::FilePaths rootCmakeFiles();
static QString qtVersion(const Utils::FilePath &projectFilePath);
static QString qdsVersion(const Utils::FilePath &projectFilePath);
+ static void openInQDSWithProject(const Utils::FilePath &filePath);
+ static const QString readFileContents(const Utils::FilePath &filePath);
public slots:
void editorModeChanged(Utils::Id newMode, Utils::Id oldMode);
void openQtc(bool permanent = false);
void openQds(bool permanent = false);
- void installQds();
- void generateCmake();
- void generateProjectFile();
private:
- static void openInQDSWithProject(const Utils::FilePath &filePath);
- static const QString readFileContents(const Utils::FilePath &filePath);
-
bool initialize(const QStringList &arguments, QString *errorString) final;
- void initializeQmlLandingPage();
void displayQmlLandingPage();
void hideQmlLandingPage();
void updateQmlLandingPageProjectInfo(const Utils::FilePath &projectFile);