Files
qt-creator/share/qtcreator/qmldesigner/welcomepage/MainGridStack.qml
Mahmoud Badri c04eb4444d QmlDesigner: Use ExamplesModelV2
V2 adds minQDSVersion property for model items

Change-Id: I27d36428f73b27b1d52d429e23654d094d6ff86d
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
2024-03-28 09:18:39 +00:00

177 lines
6.1 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 QtQuick.Layouts
import WelcomeScreen 1.0
import projectmodel 1.0
import DataModels 1.0
import UiTour
import StudioControls as StudioControls
Item {
id: thumbnails
width: 1500
height: 800
clip: true
property alias stackLayoutCurrentIndex: gridStackLayout.currentIndex
property var projectModel: Constants.projectModel
Rectangle {
id: thumbnailGridBack
color: Constants.currentThumbnailGridBackground
anchors.fill: parent
HoverHandler { id: hoverHandler }
StackLayout {
id: gridStackLayout
visible: !Constants.isListView
anchors.fill: parent
anchors.margins: Constants.gridMargins
currentIndex: 0
CustomGrid {
id: recentGrid
Layout.fillWidth: true
Layout.fillHeight: true
hover: hoverHandler.hovered
model: thumbnails.projectModel
delegate: ThumbnailDelegate {
id: delegate
type: ThumbnailDelegate.Type.RecentProject
hasPath: true
thumbnailPlaceholderSource: previewUrl
onClicked: projectModel.openProjectAt(index)
onRightClicked: {
removeMenuItem.index = index
contextMenu.popup(delegate)
}
}
Text {
text: qsTr("Create a new project using the \"<b>Create Project</b>\" or open an existing project using the \"<b>Open Project</b>\" option. ")
font.pixelSize: 18
color: Constants.currentGlobalText
anchors.centerIn: parent
width: recentGrid.width
horizontalAlignment: Text.AlignHCenter
leftPadding: 20
rightPadding: 20
wrapMode: Text.WordWrap
visible: projectModel.count === 0
}
StudioControls.Menu {
id: contextMenu
StudioControls.MenuItem {
id: removeMenuItem
property int index: -1
text: qsTr("Remove Project from Recent Projects")
onTriggered: projectModel.removeFromRecentProjects(removeMenuItem.index)
}
StudioControls.MenuItem {
text: qsTr("Clear Recent Project List")
onTriggered: projectModel.clearRecentProjects()
}
}
}
CustomGrid {
id: examplesGrid
Layout.fillWidth: true
Layout.fillHeight: true
hover: hoverHandler.hovered
Component.onCompleted: {
// remove items with old versions from the examples model
for (let i = examplesModel.count - 1; i >= 0; --i) {
if (!projectModel.exampleVersionOk(examplesModel.get(i).minQDSVersion))
examplesModel.remove(i)
}
}
model: ExamplesModelV2 { id: examplesModel }
delegate: ThumbnailDelegate {
type: ThumbnailDelegate.Type.Example
downloadable: showDownload
hasUpdate: showUpdate
downloadUrl: url
thumbnailPlaceholderSource: examplesModel.resolveUrl(thumbnail)
onClicked: projectModel.openExample(targetPath,
projectName,
qmlFileName,
explicitQmlproject)
}
}
CustomGrid {
id: tutorialsGrid
Layout.fillWidth: true
Layout.fillHeight: true
hover: hoverHandler.hovered
model: TutorialsModel { id: tutorialsModel}
delegate: ThumbnailDelegate {
type: ThumbnailDelegate.Type.Tutorial
thumbnailPlaceholderSource: tutorialsModel.resolveUrl(thumbnail)
onClicked: Qt.openUrlExternally(url)
}
}
CustomGrid {
id: tourGrid
Layout.fillWidth: true
Layout.fillHeight: true
hover: hoverHandler.hovered
model: TourModel {}
delegate: TourThumbnailDelegate {
id: thumbnailDelegate
visible: !slidePlayer.visible
enabled: !slidePlayer.visible
Connections {
target: thumbnailDelegate
onClicked: tourGrid.startTour(qmlFileName)
}
}
function startTour(url) {
slidePlayer.visible = true
slidePlayer.slideSource = Qt.resolvedUrl(url)
}
SlidePlayer {
id: slidePlayer
anchors.fill: parent
visible: false
}
TourDialogButton {
id: closeButton
anchors.right: parent.right
anchors.top: parent.top
anchors.rightMargin: 16
anchors.topMargin: 16
visible: slidePlayer.visible
Connections {
target: closeButton
onButtonClicked: {
slidePlayer.visible = false
slidePlayer.loaderActive = false
slidePlayer.loaderActive = true
}
}
}
}
}
}
}