Files
qt-creator/share/qtcreator/qmldesigner/welcomepage/DownloadButton.qml
Thomas Hartmann b47e074f62 QmlDesigner: Add QML source
This adds the QML source for the Qt Design Studio Welcome page.
The source code was private before.

Change-Id: I5dcb900ed9a17b1bc3bbcaf50f649ebeb61cc8bf
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2024-01-17 09:46:02 +00:00

135 lines
3.7 KiB
QML

// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
import QtQuick
import QtQuick.Controls
import WelcomeScreen 1.0
import StudioTheme 1.0 as StudioTheme
Item {
id: root
width: 30
height: 30
state: "default"
property bool dowloadPressed: false
property bool isHovered: mouseArea.containsMouse
property bool globalHover: false
property bool alreadyDownloaded: false
property bool updateAvailable: false
property bool downloadUnavailable: false
signal downloadClicked()
property color currentColor: {
if (root.updateAvailable)
return Constants.amberLight
if (root.alreadyDownloaded)
return Constants.greenLight
if (root.downloadUnavailable)
return Constants.redLight
return Constants.currentGlobalText
}
property string currentIcon: {
if (root.updateAvailable)
return StudioTheme.Constants.downloadUpdate
if (root.alreadyDownloaded)
return StudioTheme.Constants.downloaded
if (root.downloadUnavailable)
return StudioTheme.Constants.downloadUnavailable
return StudioTheme.Constants.download
}
property string currentToolTipText: {
if (root.updateAvailable)
return qsTr("Update available.")
if (root.alreadyDownloaded)
return qsTr("Example was already downloaded.")
if (root.downloadUnavailable)
return qsTr("Network or example is not available or the link is broken.")
return qsTr("Download the example.")
}
Text {
id: downloadIcon
color: root.currentColor
font.family: StudioTheme.Constants.iconFont.family
text: root.currentIcon
anchors.fill: parent
font.pixelSize: 22
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
anchors.bottomMargin: 0
}
MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: true
propagateComposedEvents: true
Connections {
target: mouseArea
onClicked: root.downloadClicked()
}
}
ToolTip {
id: toolTip
y: -toolTip.height
visible: mouseArea.containsMouse
text: root.currentToolTipText
delay: 1000
height: 20
background: Rectangle {
color: Constants.currentToolTipBackground
border.color: Constants.currentToolTipOutline
border.width: 1
}
contentItem: Text {
color: Constants.currentToolTipText
text: toolTip.text
verticalAlignment: Text.AlignVCenter
}
}
states: [
State {
name: "default"
when: !mouseArea.pressed && !mouseArea.containsMouse && !root.globalHover
PropertyChanges {
target: downloadIcon
color: root.currentColor
}
},
State {
name: "pressed"
when: mouseArea.pressed && mouseArea.containsMouse
PropertyChanges {
target: downloadIcon
color: Constants.currentBrand
scale: 1.2
}
},
State {
name: "hover"
when: mouseArea.containsMouse && !mouseArea.pressed && !root.globalHover
PropertyChanges {
target: downloadIcon
scale: 1.2
}
},
State {
name: "globalHover"
extend: "hover"
when: root.globalHover && !mouseArea.pressed && !mouseArea.containsMouse
}
]
}