aboutsummaryrefslogtreecommitdiffstats
path: root/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine
diff options
context:
space:
mode:
Diffstat (limited to 'src/quickdialogs/quickdialogsquickimpl/qml/+Imagine')
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/ColorDialog.qml273
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialog.qml189
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialogDelegate.qml67
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FolderBreadcrumbBar.qml58
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FolderDialog.qml141
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FolderDialogDelegate.qml61
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FontDialog.qml134
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/MessageDialog.qml163
8 files changed, 1086 insertions, 0 deletions
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/ColorDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/ColorDialog.qml
new file mode 100644
index 0000000000..641453bca5
--- /dev/null
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/ColorDialog.qml
@@ -0,0 +1,273 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+import QtQuick.Dialogs.quickimpl
+import QtQuick.Layouts
+import QtQuick.Templates as T
+
+ColorDialogImpl {
+ id: control
+
+ // Can't set implicitWidth of the NinePatchImage background, so we do it here.
+ implicitWidth: Math.max(200,
+ implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitHeaderWidth,
+ implicitFooterWidth)
+ implicitHeight: Math.max(600,
+ implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding
+ + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ standardButtons: T.Dialog.Ok | T.Dialog.Cancel
+
+ isHsl: true
+
+ ColorDialogImpl.eyeDropperButton: eyeDropperButton
+ ColorDialogImpl.buttonBox: buttonBox
+ ColorDialogImpl.colorPicker: colorPicker
+ ColorDialogImpl.alphaSlider: alphaSlider
+ ColorDialogImpl.colorInputs: inputs
+
+ background: NinePatchImage {
+ source: Imagine.url + "dialog-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": control.modal},
+ {"dim": control.dim}
+ ]
+ }
+ }
+
+ header: RowLayout {
+ Label {
+ text: control.title
+ elide: Label.ElideRight
+ font.bold: true
+ font.pixelSize: 16
+ leftPadding: 16
+ rightPadding: 16
+ topPadding: 16
+ bottomPadding: 16
+
+ Layout.preferredWidth: control.title.length > 0 ? implicitWidth : 0
+ }
+
+ Button {
+ id: eyeDropperButton
+ icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/eye-dropper.png"
+ flat: true
+ topPadding: 16
+ bottomPadding: 16
+ visible: false
+
+ Layout.alignment: Qt.AlignRight
+ Layout.rightMargin: 16
+ }
+ }
+
+ contentItem: ColumnLayout {
+ SaturationLightnessPicker {
+ id: colorPicker
+ objectName: "colorPicker"
+ implicitHeight: width
+ color: control.color
+
+ Layout.fillWidth: true
+ }
+
+ Slider {
+ id: hueSlider
+ objectName: "hueSlider"
+ orientation: Qt.Horizontal
+ value: control.hue
+ onMoved: function() { control.hue = value; }
+
+ Layout.fillWidth: true
+ Layout.leftMargin: 16
+ Layout.rightMargin: 16
+
+ handle: PickerHandle {
+ x: hueSlider.leftPadding + (hueSlider.horizontal
+ ? hueSlider.visualPosition * (hueSlider.availableWidth - width)
+ : (hueSlider.availableWidth - width) / 2)
+ y: hueSlider.topPadding + (hueSlider.horizontal
+ ? (hueSlider.availableHeight - height) / 2
+ : hueSlider.visualPosition * (hueSlider.availableHeight - height))
+ picker: hueSlider
+ }
+
+ implicitHeight: 20
+
+ background: Rectangle {
+ anchors.fill: parent
+ anchors.leftMargin: hueSlider.handle.width / 2
+ anchors.rightMargin: hueSlider.handle.width / 2
+ border.width: 2
+ border.color: control.palette.dark
+ radius: 10
+ color: "transparent"
+ Rectangle {
+ anchors.fill: parent
+ anchors.margins: 4
+ radius: 10
+ gradient: HueGradient {
+ orientation: Gradient.Horizontal
+ }
+ }
+ }
+ }
+
+ Slider {
+ id: alphaSlider
+ objectName: "alphaSlider"
+ orientation: Qt.Horizontal
+ value: control.alpha
+ implicitHeight: 20
+ handle: PickerHandle {
+ x: alphaSlider.leftPadding + (alphaSlider.horizontal
+ ? alphaSlider.visualPosition * (alphaSlider.availableWidth - width)
+ : (alphaSlider.availableWidth - width) / 2)
+ y: alphaSlider.topPadding + (alphaSlider.horizontal
+ ? (alphaSlider.availableHeight - height) / 2
+ : alphaSlider.visualPosition * (alphaSlider.availableHeight - height))
+ picker: alphaSlider
+ }
+ background: Rectangle {
+ anchors.fill: parent
+ anchors.leftMargin: parent.handle.width / 2
+ anchors.rightMargin: parent.handle.width / 2
+ border.width: 2
+ border.color: control.palette.dark
+ radius: 10
+ color: "transparent"
+
+ Image {
+ anchors.fill: alphaSliderGradient
+ source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/checkers.png"
+ fillMode: Image.Tile
+ }
+
+ Rectangle {
+ id: alphaSliderGradient
+ anchors.fill: parent
+ anchors.margins: 4
+ radius: 10
+ gradient: Gradient {
+ orientation: Gradient.Horizontal
+ GradientStop {
+ position: 0
+ color: "transparent"
+ }
+ GradientStop {
+ position: 1
+ color: Qt.rgba(control.color.r,
+ control.color.g,
+ control.color.b,
+ 1)
+ }
+ }
+ }
+ }
+
+ Layout.fillWidth: true
+ Layout.leftMargin: 16
+ Layout.rightMargin: 16
+ }
+
+ ColorInputs {
+ id: inputs
+
+ color: control.color
+
+ Layout.fillWidth: true
+ Layout.leftMargin: 16
+ Layout.rightMargin: 16
+ Layout.bottomMargin: 16
+ }
+ }
+
+ footer: RowLayout {
+ spacing: 20
+
+ Label {
+ text: qsTr("Color")
+
+ Layout.leftMargin: 16
+ Layout.bottomMargin: 16
+ }
+
+ Rectangle {
+ implicitWidth: 32
+ implicitHeight: 32
+ border.width: 2
+ border.color: control.palette.dark
+ color: "transparent"
+
+ Image {
+ anchors.fill: parent
+ anchors.margins: 4
+ source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/checkers.png"
+ fillMode: Image.Tile
+ }
+
+ Rectangle {
+ anchors.fill: parent
+ anchors.margins: 4
+ color: control.color
+ }
+
+ Layout.bottomMargin: 16
+ }
+
+ Item {
+ // empty filler
+ Layout.fillWidth: true
+ }
+
+ DialogButtonBox {
+ id: buttonBox
+ standardButtons: control.standardButtons
+ spacing: 12
+
+ Layout.bottomMargin: 16
+ Layout.rightMargin: 16
+ Layout.alignment: Qt.AlignRight
+ }
+ }
+
+
+ T.Overlay.modal: NinePatchImage {
+ source: Imagine.url + "dialog-overlay"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": true}
+ ]
+ }
+ }
+
+ T.Overlay.modeless: NinePatchImage {
+ source: Imagine.url + "dialog-overlay"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": false}
+ ]
+ }
+ }
+}
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialog.qml
new file mode 100644
index 0000000000..664965e571
--- /dev/null
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialog.qml
@@ -0,0 +1,189 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import Qt.labs.folderlistmodel
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+import QtQuick.Dialogs.quickimpl
+import QtQuick.Layouts
+
+import "." as DialogsImpl
+
+FileDialogImpl {
+ id: control
+
+ // Can't set implicitWidth of the NinePatchImage background, so we do it here.
+ implicitWidth: Math.max(600,
+ implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitHeaderWidth,
+ implicitFooterWidth)
+ implicitHeight: Math.max(400,
+ implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding
+ + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ standardButtons: T.Dialog.Open | T.Dialog.Cancel
+
+ FileDialogImpl.buttonBox: buttonBox
+ FileDialogImpl.nameFiltersComboBox: nameFiltersComboBox
+ FileDialogImpl.fileDialogListView: fileDialogListView
+ FileDialogImpl.breadcrumbBar: breadcrumbBar
+ FileDialogImpl.fileNameLabel: fileNameLabel
+ FileDialogImpl.fileNameTextField: fileNameTextField
+
+ background: NinePatchImage {
+ source: Imagine.url + "dialog-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": control.modal},
+ {"dim": control.dim}
+ ]
+ }
+ }
+
+ header: ColumnLayout {
+ spacing: 12
+
+ Label {
+ text: control.title
+ elide: Label.ElideRight
+ font.bold: true
+
+ Layout.leftMargin: 16
+ Layout.rightMargin: 16
+ Layout.topMargin: 12
+ Layout.fillWidth: true
+ Layout.preferredHeight: control.title.length > 0 ? implicitHeight : 0
+
+ background: NinePatchImage {
+ width: parent.width
+ height: parent.height
+
+ source: Imagine.url + "dialog-title"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": control.modal},
+ {"dim": control.dim}
+ ]
+ }
+ }
+ }
+
+ DialogsImpl.FolderBreadcrumbBar {
+ id: breadcrumbBar
+ dialog: control
+
+ Layout.leftMargin: 16
+ Layout.rightMargin: 16
+ Layout.fillWidth: true
+ Layout.maximumWidth: parent.width - 28
+ }
+ }
+
+ contentItem: ListView {
+ id: fileDialogListView
+ objectName: "fileDialogListView"
+ clip: true
+ boundsBehavior: Flickable.StopAtBounds
+
+ ScrollBar.vertical: ScrollBar {}
+
+ model: FolderListModel {
+ folder: control.currentFolder
+ nameFilters: control.selectedNameFilter.globs
+ showDirsFirst: PlatformTheme.themeHint(PlatformTheme.ShowDirectoriesFirst)
+ sortCaseSensitive: false
+ }
+ delegate: DialogsImpl.FileDialogDelegate {
+ objectName: "fileDialogDelegate" + index
+ width: ListView.view.width
+ highlighted: ListView.isCurrentItem
+ dialog: control
+ fileDetailRowWidth: nameFiltersComboBox.width
+ }
+ }
+
+ footer: GridLayout {
+ columnSpacing: 20
+ columns: 3
+
+ Label {
+ id: fileNameLabel
+ text: qsTr("File name")
+ visible: false
+
+ Layout.leftMargin: 16
+ }
+
+ TextField {
+ id: fileNameTextField
+ objectName: "fileNameTextField"
+ text: control.fileName
+ visible: false
+
+ Layout.fillWidth: true
+ }
+
+ Label {
+ text: qsTr("Filter")
+
+ Layout.column: 0
+ Layout.row: 1
+ Layout.leftMargin: 16
+ Layout.bottomMargin: 16
+ }
+
+ ComboBox {
+ id: nameFiltersComboBox
+ model: control.nameFilters
+
+ Layout.fillWidth: true
+ Layout.bottomMargin: 16
+ }
+
+ DialogButtonBox {
+ id: buttonBox
+ standardButtons: control.standardButtons
+ spacing: 12
+
+ Layout.row: 1
+ Layout.column: 2
+ Layout.columnSpan: 1
+ Layout.bottomMargin: 16
+ Layout.rightMargin: 16
+ }
+ }
+
+ T.Overlay.modal: NinePatchImage {
+ source: Imagine.url + "dialog-overlay"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": true}
+ ]
+ }
+ }
+
+ T.Overlay.modeless: NinePatchImage {
+ source: Imagine.url + "dialog-overlay"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": false}
+ ]
+ }
+ }
+}
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialogDelegate.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialogDelegate.qml
new file mode 100644
index 0000000000..30094a7d9d
--- /dev/null
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FileDialogDelegate.qml
@@ -0,0 +1,67 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick.Controls
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+import QtQuick.Controls.impl as ControlsImpl
+import QtQuick.Dialogs.quickimpl as DialogsQuickImpl
+
+DialogsQuickImpl.FileDialogDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 12
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ file: fileUrl
+
+ icon.width: 16
+ icon.height: 16
+ icon.color: highlighted ? palette.highlightedText : palette.text
+ icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/"
+ + (fileIsDir ? "folder" : "file") + "-icon-round.png"
+
+ required property int index
+ required property string fileName
+ required property url fileUrl
+ required property int fileSize
+ required property date fileModified
+ required property bool fileIsDir
+
+ required property int fileDetailRowWidth
+
+ contentItem: FileDialogDelegateLabel {
+ delegate: control
+ fileDetailRowTextColor: control.icon.color
+ fileDetailRowWidth: control.fileDetailRowWidth
+ }
+
+ background: NinePatchImage {
+ source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/imagine/filedialogdelegate-background"
+ NinePatchImageSelector on source {
+ states: [
+ { "disabled": !control.enabled },
+ { "pressed": control.down },
+ { "focused": control.visualFocus },
+ { "highlighted": control.highlighted },
+ { "mirrored": control.mirrored },
+ { "hovered": control.enabled && control.hovered }
+ ]
+ }
+ }
+}
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FolderBreadcrumbBar.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FolderBreadcrumbBar.qml
new file mode 100644
index 0000000000..8becba5108
--- /dev/null
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FolderBreadcrumbBar.qml
@@ -0,0 +1,58 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+import QtQuick.Dialogs.quickimpl as DialogsQuickImpl
+
+DialogsQuickImpl.FolderBreadcrumbBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + (upButton ? upButton.implicitWidth + upButtonSpacing : 0)
+ + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+ upButtonSpacing: 20
+ padding: 1
+
+ background: Rectangle {}
+ contentItem: ListView {
+ currentIndex: control.currentIndex
+ model: control.contentModel
+ orientation: ListView.Horizontal
+ snapMode: ListView.SnapToItem
+ highlightMoveDuration: 0
+ interactive: false
+ clip: true
+ }
+ buttonDelegate: Button {
+ id: buttonDelegateRoot
+ text: folderName
+ flat: true
+
+ required property int index
+ required property string folderName
+ }
+ separatorDelegate: IconImage {
+ id: iconImage
+ source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/crumb-separator-icon-round.png"
+ sourceSize: Qt.size(8, 8)
+ width: 8
+ height: control.contentItem.height
+ y: (control.height - height) / 2
+ }
+ upButton: ToolButton {
+ x: control.leftPadding
+ y: control.topPadding
+ icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/up-icon-thick-square.png"
+ icon.width: 16
+ icon.height: 16
+ focusPolicy: Qt.TabFocus
+ }
+ textField: TextField {
+ text: (control.dialog as DialogsQuickImpl.FileDialogImpl)?.selectedFile
+ ?? (control.dialog as DialogsQuickImpl.FolderDialogImpl).currentFolder
+ }
+}
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FolderDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FolderDialog.qml
new file mode 100644
index 0000000000..d0af142afa
--- /dev/null
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FolderDialog.qml
@@ -0,0 +1,141 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import Qt.labs.folderlistmodel
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+import QtQuick.Dialogs.quickimpl
+import QtQuick.Layouts
+
+import "." as DialogsImpl
+
+FolderDialogImpl {
+ id: control
+
+ // Can't set implicitWidth of the NinePatchImage background, so we do it here.
+ implicitWidth: Math.max(600,
+ implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitHeaderWidth,
+ implicitFooterWidth)
+ implicitHeight: Math.max(400,
+ implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding
+ + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ standardButtons: T.Dialog.Open | T.Dialog.Cancel
+
+ FolderDialogImpl.folderDialogListView: folderDialogListView
+ FolderDialogImpl.breadcrumbBar: breadcrumbBar
+
+ background: NinePatchImage {
+ source: Imagine.url + "dialog-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": control.modal},
+ {"dim": control.dim}
+ ]
+ }
+ }
+
+ header: ColumnLayout {
+ spacing: 12
+
+ Label {
+ text: control.title
+ elide: Label.ElideRight
+ font.bold: true
+
+ Layout.leftMargin: 16
+ Layout.rightMargin: 16
+ Layout.topMargin: 12
+ Layout.fillWidth: true
+ Layout.preferredHeight: control.title.length > 0 ? implicitHeight : 0
+
+ background: NinePatchImage {
+ width: parent.width
+ height: parent.height
+
+ source: Imagine.url + "dialog-title"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": control.modal},
+ {"dim": control.dim}
+ ]
+ }
+ }
+ }
+
+ DialogsImpl.FolderBreadcrumbBar {
+ id: breadcrumbBar
+ dialog: control
+
+ Layout.leftMargin: 16
+ Layout.rightMargin: 16
+ Layout.fillWidth: true
+ Layout.maximumWidth: parent.width - 28
+ }
+ }
+
+ contentItem: ListView {
+ id: folderDialogListView
+ objectName: "folderDialogListView"
+ clip: true
+ boundsBehavior: Flickable.StopAtBounds
+
+ ScrollBar.vertical: ScrollBar {}
+
+ model: FolderListModel {
+ folder: control.currentFolder
+ showFiles: false
+ sortCaseSensitive: false
+ }
+ delegate: DialogsImpl.FolderDialogDelegate {
+ objectName: "folderDialogDelegate" + index
+ width: ListView.view.width
+ highlighted: ListView.isCurrentItem
+ dialog: control
+ }
+ }
+
+ footer: DialogButtonBox {
+ id: buttonBox
+ standardButtons: control.standardButtons
+ spacing: 12
+ leftPadding: 16
+ rightPadding: 16
+ bottomPadding: 16
+ }
+
+ T.Overlay.modal: NinePatchImage {
+ source: Imagine.url + "dialog-overlay"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": true}
+ ]
+ }
+ }
+
+ T.Overlay.modeless: NinePatchImage {
+ source: Imagine.url + "dialog-overlay"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": false}
+ ]
+ }
+ }
+}
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FolderDialogDelegate.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FolderDialogDelegate.qml
new file mode 100644
index 0000000000..64195c725a
--- /dev/null
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FolderDialogDelegate.qml
@@ -0,0 +1,61 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick.Controls
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+import QtQuick.Controls.impl as ControlsImpl
+import QtQuick.Dialogs.quickimpl as DialogsQuickImpl
+
+DialogsQuickImpl.FileDialogDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 12
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ file: fileUrl
+
+ icon.width: 16
+ icon.height: 16
+ icon.color: highlighted ? palette.highlightedText : palette.text
+ icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/folder-icon-round.png"
+
+ required property int index
+ required property string fileName
+ required property url fileUrl
+ required property date fileModified
+
+ contentItem: FolderDialogDelegateLabel {
+ delegate: control
+ fileDetailRowTextColor: Qt.lighter(control.icon.color)
+ }
+
+ background: NinePatchImage {
+ source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/imagine/filedialogdelegate-background"
+ NinePatchImageSelector on source {
+ states: [
+ { "disabled": !control.enabled },
+ { "pressed": control.down },
+ { "focused": control.visualFocus },
+ { "highlighted": control.highlighted },
+ { "mirrored": control.mirrored },
+ { "hovered": control.enabled && control.hovered }
+ ]
+ }
+ }
+}
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FontDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FontDialog.qml
new file mode 100644
index 0000000000..87660b87b0
--- /dev/null
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/FontDialog.qml
@@ -0,0 +1,134 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+import QtQuick.Dialogs
+import QtQuick.Dialogs.quickimpl
+import QtQuick.Layouts
+import QtQuick.Templates as T
+
+FontDialogImpl {
+ id: control
+
+ // Can't set implicitWidth of the NinePatchImage background, so we do it here.
+ implicitWidth: Math.max(600,
+ implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitHeaderWidth,
+ implicitFooterWidth)
+ implicitHeight: Math.max(400,
+ implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding
+ + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ standardButtons: T.Dialog.Ok | T.Dialog.Cancel
+
+ FontDialogImpl.buttonBox: buttonBox
+ FontDialogImpl.familyListView: content.familyListView
+ FontDialogImpl.styleListView: content.styleListView
+ FontDialogImpl.sizeListView: content.sizeListView
+ FontDialogImpl.sampleEdit: content.sampleEdit
+ FontDialogImpl.writingSystemComboBox: writingSystemComboBox
+ FontDialogImpl.underlineCheckBox: content.underline
+ FontDialogImpl.strikeoutCheckBox: content.strikeout
+ FontDialogImpl.familyEdit: content.familyEdit
+ FontDialogImpl.styleEdit: content.styleEdit
+ FontDialogImpl.sizeEdit: content.sizeEdit
+
+ background: NinePatchImage {
+ source: Imagine.url + "dialog-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": control.modal},
+ {"dim": control.dim}
+ ]
+ }
+ }
+
+ Overlay.modal: NinePatchImage {
+ source: Imagine.url + "dialog-overlay"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": true}
+ ]
+ }
+ }
+
+ Overlay.modeless: NinePatchImage {
+ source: Imagine.url + "dialog-overlay"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": false}
+ ]
+ }
+ }
+
+ header: Label {
+ text: control.title
+ elide: Label.ElideRight
+ font.bold: true
+
+ leftPadding: 16
+ rightPadding: 16
+ topPadding: 12
+ visible: control.title.length > 0
+
+ background: NinePatchImage {
+ width: parent.width
+ height: parent.height
+
+ source: Imagine.url + "dialog-title"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": control.modal},
+ {"dim": control.dim}
+ ]
+ }
+ }
+ }
+
+ contentItem: FontDialogContent {
+ id: content
+ rowSpacing: 16
+ }
+
+ footer: RowLayout {
+ id: rowLayout
+ spacing: 20
+
+ Label {
+ text: qsTr("Writing System")
+ Layout.leftMargin: 16
+ Layout.bottomMargin: 16
+ }
+ ComboBox{
+ id: writingSystemComboBox
+
+ Layout.fillWidth: true
+ Layout.bottomMargin: 16
+ }
+
+ DialogButtonBox {
+ id: buttonBox
+ standardButtons: control.standardButtons
+ spacing: 12
+ Layout.rightMargin: 16
+ Layout.bottomMargin: 16
+ }
+ }
+}
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/MessageDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/MessageDialog.qml
new file mode 100644
index 0000000000..9ec3a550da
--- /dev/null
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Imagine/MessageDialog.qml
@@ -0,0 +1,163 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+import QtQuick.Dialogs
+import QtQuick.Dialogs.quickimpl
+import QtQuick.Layouts
+
+MessageDialogImpl {
+ id: control
+
+ // Can't set implicitWidth of the NinePatchImage background, so we do it here.
+ implicitWidth: Math.max(320,
+ implicitBackgroundWidth + leftInset + rightInset,
+ implicitHeaderWidth,
+ rowLayout.implicitWidth)
+ implicitHeight: Math.max(160,
+ implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding
+ + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ MessageDialogImpl.buttonBox: buttonBox
+ MessageDialogImpl.detailedTextButton: detailedTextButton
+
+ background: NinePatchImage {
+ source: Imagine.url + "dialog-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": control.modal},
+ {"dim": control.dim}
+ ]
+ }
+ }
+
+ header: Label {
+ text: control.title
+ elide: Label.ElideRight
+ font.bold: true
+
+ leftPadding: 16
+ rightPadding: 16
+ topPadding: 12
+ visible: control.title.length > 0
+
+ background: NinePatchImage {
+ width: parent.width
+ height: parent.height
+
+ source: Imagine.url + "dialog-title"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": control.modal},
+ {"dim": control.dim}
+ ]
+ }
+ }
+ }
+
+ contentItem: Column {
+ padding: 8
+ spacing: 16
+
+ Label {
+ id: textLabel
+ objectName: "textLabel"
+ text: control.text
+ visible: text.length > 0
+ wrapMode: Text.Wrap
+ width: parent.width - parent.leftPadding - parent.rightPadding
+ }
+ Label {
+ id: informativeTextLabel
+ objectName: "informativeTextLabel"
+ text: control.informativeText
+ visible: text.length > 0
+ wrapMode: Text.Wrap
+ width: parent.width - parent.leftPadding - parent.rightPadding
+ }
+ }
+
+ footer: ColumnLayout {
+ id: columnLayout
+
+ RowLayout {
+ id: rowLayout
+ spacing: 12
+
+ Layout.leftMargin: 16
+ Layout.rightMargin: 16
+ Layout.bottomMargin: 16
+
+ Button {
+ id: detailedTextButton
+ objectName: "detailedTextButton"
+ text: control.showDetailedText ? qsTr("Hide Details...") : qsTr("Show Details...")
+ }
+
+ DialogButtonBox {
+ id: buttonBox
+ objectName: "buttonBox"
+ spacing: 12
+ padding: 0
+
+ Layout.fillWidth: true
+ }
+ }
+
+ TextArea {
+ id: detailedTextArea
+ objectName: "detailedText"
+ text: control.detailedText
+ visible: control.showDetailedText
+ wrapMode: TextEdit.WordWrap
+ readOnly: true
+
+ padding: 12
+
+ Layout.fillWidth: true
+ Layout.leftMargin: 16
+ Layout.rightMargin: 16
+ Layout.bottomMargin: 16
+
+ background: Rectangle {
+ color: Qt.rgba(1,1,1,1)
+ radius: 3
+ border.color: Qt.darker(control.palette.light)
+ border.width: 1
+ }
+ }
+ }
+
+ Overlay.modal: NinePatchImage {
+ source: Imagine.url + "dialog-overlay"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": true}
+ ]
+ }
+ }
+
+ Overlay.modeless: NinePatchImage {
+ source: Imagine.url + "dialog-overlay"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": false}
+ ]
+ }
+ }
+}