diff options
author | Doris Verria <doris.verria@qt.io> | 2023-01-26 11:26:19 +0100 |
---|---|---|
committer | Doris Verria <doris.verria@qt.io> | 2023-02-09 00:00:16 +0100 |
commit | 75bb351462b23f4c2aa729f3aa18e02bb97962fe (patch) | |
tree | d9df678e60b6029469316a403b9c7efdc55c3249 | |
parent | 4a9be82a382b58155949ad4ec75e8ce4e12c47e6 (diff) |
iOS Style: Add Dialog and DialogButtonBox
Pick-to: 6.5
Change-Id: I6899b1438af43a822f3f212a6fd928200c893ee3
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
47 files changed, 220 insertions, 0 deletions
diff --git a/src/quickcontrols/ios/CMakeLists.txt b/src/quickcontrols/ios/CMakeLists.txt index d20090b601..b87be9a280 100644 --- a/src/quickcontrols/ios/CMakeLists.txt +++ b/src/quickcontrols/ios/CMakeLists.txt @@ -45,6 +45,8 @@ set(qml_files "ComboBox.qml" "HorizontalHeaderView.qml" "VerticalHeaderView.qml" + "Dialog.qml" + "DialogButtonBox.qml" ) set_source_files_properties(Slider.qml PROPERTIES diff --git a/src/quickcontrols/ios/Dialog.qml b/src/quickcontrols/ios/Dialog.qml new file mode 100644 index 0000000000..8f762842b8 --- /dev/null +++ b/src/quickcontrols/ios/Dialog.qml @@ -0,0 +1,74 @@ +// Copyright (C) 2023 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.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.iOS.impl + +T.Dialog { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + leftPadding: 16 + rightPadding: 16 + bottomPadding: 23 + + dim: true + + enter: Transition { + NumberAnimation { property: "scale"; from: 1.5; to: 1.0; easing.type: Easing.OutQuint; duration: 220 } + NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 } + } + + exit: Transition { + NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 } + } + + background: Item { + NinePatchImage { + width: parent.width + height: parent.height + source: IOS.url + "popup-background" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark} + ] + } + } + } + + header: Label { + text: control.title + visible: control.title + horizontalAlignment: Text.AlignHCenter + topPadding: 23 + bottomPadding: 7 + verticalAlignment: Text.AlignVCenter + elide: Label.ElideRight + font.weight: Font.Medium + font.pointSize: 17 + } + + footer: DialogButtonBox { + visible: count > 0 + } + + T.Overlay.modal: Rectangle { + color: Color.transparent("black", 0.5) + Behavior on opacity { NumberAnimation { duration: 150 } } + } + + T.Overlay.modeless: Rectangle { + color: Color.transparent("black", 0.5) + Behavior on opacity { NumberAnimation { duration: 150 } } + } +} diff --git a/src/quickcontrols/ios/DialogButtonBox.qml b/src/quickcontrols/ios/DialogButtonBox.qml new file mode 100644 index 0000000000..761ce98887 --- /dev/null +++ b/src/quickcontrols/ios/DialogButtonBox.qml @@ -0,0 +1,75 @@ +// Copyright (C) 2023 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.Templates as T +import QtQuick.Controls.iOS.impl + +T.DialogButtonBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + readonly property var orientation: (count === 2 || alignment !== 0) + ? ListView.Horizontal : ListView.Vertical + readonly property bool delegatePressed: count === 2 && (itemAt(0).down || itemAt(1).down) + + spacing: orientation === ListView.Horizontal + ? (background && background.separatorLine ? background.separatorLine.width : 0) + : 0 + + delegate: DialogButtonBoxDelegate { + width: control.orientation === ListView.Vertical + ? control.width : undefined + } + + contentItem: ListView { + clip: true + implicitWidth: contentWidth + implicitHeight: contentHeight + model: control.contentModel + spacing: control.spacing + orientation: control.orientation + boundsBehavior: Flickable.StopAtBounds + snapMode: ListView.SnapToItem + } + + background: Item { + implicitHeight: control.orientation === ListView.Horizontal ? 44 : Math.max(contentItem.implicitHeight, 44) + implicitWidth: 270 + + readonly property NinePatchImage backgroundImage : NinePatchImage { + parent: control.background + width: parent.width + height: parent.height + rotation: control.position === DialogButtonBox.Header ? 180 : 0 + source: IOS.url + "dialogbuttonbox-delegate-vertical-last" + NinePatchImageSelector on source { + states: [ + {"pressed": delegate.down}, + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + ] + } + } + + readonly property NinePatchImage separatorLine : NinePatchImage { + parent: control.background.backgroundImage + x: control.itemAt(0) ? control.itemAt(0).width : 0 + height: parent.height + rotation: control.position === DialogButtonBox.Header ? 180 : 0 + visible: control.alignment === 0 && (control.count === 2 && !control.delegatePressed) + + source: IOS.url + "dialogbuttonbox-separator" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark} + ] + } + } + } +} diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-dark.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-dark.9.png Binary files differnew file mode 100644 index 0000000000..4c752634f2 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-dark.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-dark@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..a0e7be1fb7 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-dark@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..01ca2e7b19 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-light.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-light.9.png Binary files differnew file mode 100644 index 0000000000..31f979f17a --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-light.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-light@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..ad45b8c100 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-light@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-light@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..c9414f36be --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-light@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-dark.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-dark.9.png Binary files differnew file mode 100644 index 0000000000..e08c253e2a --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-dark.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-dark@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..c203f8f6d7 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-dark@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..b651b14bf0 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-light.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-light.9.png Binary files differnew file mode 100644 index 0000000000..e86f90a095 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-light.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-light@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..a2553b828e --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-light@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-light@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..d832ded229 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-light@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-dark.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-dark.9.png Binary files differnew file mode 100644 index 0000000000..8c966a7f87 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-dark.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-dark@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..2f65e40b76 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-dark@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..311e1c15bf --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-dark.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-dark.9.png Binary files differnew file mode 100644 index 0000000000..bfb6d3a6bf --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-dark.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-dark@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..50345d347c --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-dark@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..2afa7013bb --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-light.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-light.9.png Binary files differnew file mode 100644 index 0000000000..f80b82367e --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-light.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-light@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..dcba4c6220 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-light@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-light@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..5adde16f54 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-light@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-dark.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-dark.9.png Binary files differnew file mode 100644 index 0000000000..898cdf1173 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-dark.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-dark@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..492d319559 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-dark@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..d670e53d32 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-light.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-light.9.png Binary files differnew file mode 100644 index 0000000000..c3f9486440 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-light.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-light@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..fb63659ceb --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-light@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-light@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..4b2c1f8a21 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-light@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-light.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-light.9.png Binary files differnew file mode 100644 index 0000000000..67a28cead3 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-light.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-light@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..d4348cb61a --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-light@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-light@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..c00560ae56 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-light@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-dark.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-dark.9.png Binary files differnew file mode 100644 index 0000000000..0d99bbd993 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-dark.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-dark@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..7e7e00bfce --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-dark@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..64bd4860a0 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-light.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-light.9.png Binary files differnew file mode 100644 index 0000000000..094a28ef2f --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-light.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-light@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..bafcb6f623 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-light@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-light@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..8b17a33b57 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-light@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-separator-dark.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-separator-dark.9.png Binary files differnew file mode 100644 index 0000000000..5f00cd512d --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-separator-dark.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-separator-dark@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-separator-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..72365ea12b --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-separator-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-separator-dark@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-separator-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..3c6b87a691 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-separator-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-separator-light.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-separator-light.9.png Binary files differnew file mode 100644 index 0000000000..e701f3e7d5 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-separator-light.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-separator-light@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-separator-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..1e151c1bab --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-separator-light@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-separator-light@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-separator-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..f9391caa00 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-separator-light@3x.9.png diff --git a/src/quickcontrols/ios/impl/CMakeLists.txt b/src/quickcontrols/ios/impl/CMakeLists.txt index e298335bb1..48727e8dcb 100644 --- a/src/quickcontrols/ios/impl/CMakeLists.txt +++ b/src/quickcontrols/ios/impl/CMakeLists.txt @@ -7,6 +7,7 @@ set(qml_files "CursorDelegate.qml" + "DialogButtonBoxDelegate.qml" ) qt_internal_add_qml_module(qtquickcontrols2iosstyleimplplugin diff --git a/src/quickcontrols/ios/impl/DialogButtonBoxDelegate.qml b/src/quickcontrols/ios/impl/DialogButtonBoxDelegate.qml new file mode 100644 index 0000000000..77ecd9997b --- /dev/null +++ b/src/quickcontrols/ios/impl/DialogButtonBoxDelegate.qml @@ -0,0 +1,68 @@ +// Copyright (C) 2023 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.iOS.impl + +Button { + id: delegate + + implicitHeight: 44 + + readonly property var dialogButtonBox: DialogButtonBox.buttonBox + readonly property bool hasVerticalLayout: dialogButtonBox && (dialogButtonBox.count !== 2) + readonly property bool isLastItem: dialogButtonBox + && (dialogButtonBox.contentChildren) + && (dialogButtonBox.itemAt(count - 1) == delegate) + readonly property int count: dialogButtonBox ? dialogButtonBox.count : 0 + + flat: true + + contentItem: IconLabel { + readonly property var redColor: Qt.styleHints.appearance === Qt.Light ? "#ff3b30" : "#ff453a" + text: delegate.text + font: delegate.font + spacing: delegate.spacing + color: delegate.DialogButtonBox.buttonRole === DialogButtonBox.DestructiveRole + ? redColor + : delegate.enabled ? (delegate.down ? delegate.palette.highlight : delegate.palette.button) + : delegate.palette.mid + } + + background: Item { + // The assets below only support the typical iOS Dialog look with buttons + // positioned at the bottom and that fill the entire width of the parent. + // Don't draw a background if these conditions are not met + visible: delegate.dialogButtonBox + && delegate.dialogButtonBox.position === DialogButtonBox.Footer + && delegate.dialogButtonBox.alignment === 0 + implicitHeight: 44 + readonly property bool leftItem: !delegate.hasVerticalLayout && !delegate.isLastItem + readonly property bool rightItem: !delegate.hasVerticalLayout && !leftItem + readonly property bool flip: delegate.mirrored ? leftItem : rightItem + + NinePatchImage { + transform: [ + // flip + Translate { x: (!delegate.background.flip ? 0 : -width) }, + Scale { xScale: (!delegate.background.flip ? 1 : -1) } + ] + width: parent.width + height: parent.height + source: IOS.url + "dialogbuttonbox-delegate" + NinePatchImageSelector on source { + states: [ + {"horizontal": !delegate.hasVerticalLayout}, + {"vertical": delegate.hasVerticalLayout}, + {"last": delegate.hasVerticalLayout && delegate.isLastItem}, + {"pressed": delegate.down}, + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + ] + } + } + + + } +} |