Warning, /frameworks/qqc2-desktop-style/tests/testBars.qml is written in an unsupported language. File is not indexed.

0001 /*
0002  *  SPDX-FileCopyrightText: 2023 ivan (@ratijas) tkachenko <me@ratijas.tk>
0003  *
0004  *  SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 import QtQuick
0008 import QtQuick.Controls
0009 import QtQuick.Templates as T
0010 import QtQuick.Layouts
0011 
0012 import org.kde.kirigami as Kirigami
0013 
0014 Kirigami.ApplicationWindow {
0015     title: "Progress Bars & Sliders"
0016     width: demo.implicitWidth
0017     height: demo.implicitHeight
0018 
0019     component LoopAnimation : SequentialAnimation {
0020         id: animation
0021 
0022         property real to: 1
0023 
0024         running: true
0025 
0026         // this is bound to global time, so that you could open multiple
0027         // windows side by side, and they all play in sync
0028         ScriptAction {
0029             script: phase.value = value() * animation.to
0030             function value() {
0031                 var phase = Date.now() % 7000;
0032                 if (phase < 500) {
0033                     return 0;
0034                 } else if (phase < 3500) {
0035                     return (phase - 500) / 3000;
0036                 } else if (phase < 4000) {
0037                     return 1;
0038                 } else {
0039                     return 1 - ((phase - 4000) / 3000);
0040                 }
0041             }
0042         }
0043         PropertyAction {
0044             id: phase
0045         }
0046         PauseAnimation { duration: 1 }
0047         onFinished: restart()
0048     }
0049 
0050     component Demo : GridLayout {
0051         id: layout
0052         columns: 4
0053         columnSpacing: Kirigami.Units.smallSpacing
0054         rowSpacing: Kirigami.Units.smallSpacing
0055 
0056         Slider {
0057             orientation: Qt.Vertical
0058             to: 10
0059             value: 3
0060             stepSize: 1
0061             LoopAnimation on value {
0062                 to: 10
0063             }
0064             Layout.fillHeight: true
0065             Layout.rowSpan: 11
0066         }
0067 
0068         Slider {
0069             orientation: Qt.Vertical
0070             to: 10
0071             value: 3
0072             stepSize: 1
0073             Layout.fillHeight: true
0074             Layout.rowSpan: 11
0075         }
0076 
0077         Label {
0078             text: "Mirrorring:"
0079             Layout.alignment: Qt.AlignRight
0080         }
0081 
0082         RowLayout {
0083             spacing: Kirigami.Units.smallSpacing
0084             Label {
0085                 text: layout.LayoutMirroring.enabled ? "Enabled" : "Disabled"
0086                 Layout.rightMargin: Kirigami.Units.gridUnit * 2
0087             }
0088 
0089             Label {
0090                 text: "Inherit:"
0091                 Layout.alignment: Qt.AlignRight
0092             }
0093 
0094             Label {
0095                 text: layout.LayoutMirroring.childrenInherit ? "Yes" : "No"
0096             }
0097         }
0098 
0099         Label {
0100             text: "Value:"
0101             Layout.alignment: Qt.AlignRight
0102         }
0103 
0104         Label {
0105             text: value.toFixed(2)
0106             property real value
0107             LoopAnimation on value {}
0108             Layout.fillWidth: true
0109         }
0110 
0111         Item {
0112             Layout.preferredHeight: Kirigami.Units.gridUnit
0113             Layout.columnSpan: 2
0114         }
0115 
0116         Label {
0117             text: "Progress Bar:"
0118             Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
0119         }
0120 
0121         ProgressBar {
0122             LoopAnimation on value {}
0123             Layout.fillWidth: true
0124         }
0125 
0126         Item {
0127             Layout.preferredHeight: Kirigami.Units.gridUnit
0128             Layout.columnSpan: 2
0129         }
0130 
0131         Label {
0132             text: "Indeterminate:"
0133             Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
0134         }
0135 
0136         ProgressBar {
0137             indeterminate: true
0138             Layout.fillWidth: true
0139         }
0140 
0141         Item {
0142             Layout.preferredHeight: Kirigami.Units.gridUnit
0143             Layout.columnSpan: 2
0144         }
0145 
0146         Label {
0147             text: "Slider:"
0148             Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
0149         }
0150 
0151         Slider {
0152             stepSize: 0.1
0153             LoopAnimation on value {}
0154             Layout.fillWidth: true
0155         }
0156 
0157         Item {
0158             Layout.preferredHeight: Kirigami.Units.gridUnit
0159             Layout.columnSpan: 2
0160         }
0161 
0162         Label {
0163             text: "Manual:"
0164             Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
0165         }
0166 
0167         // Test for BUG-455339
0168         Slider {
0169             to:       300000
0170             stepSize: 30000
0171             value:    90000
0172             Layout.fillWidth: true
0173         }
0174 
0175         Label {
0176             text: "Non-live:"
0177             Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
0178         }
0179 
0180         RowLayout {
0181             spacing: Kirigami.Units.largeSpacing
0182             Layout.fillWidth: true
0183 
0184             // Test for BUG-473400
0185             Slider {
0186                 id: nonLiveSlider
0187                 live: false
0188                 to:       300000
0189                 stepSize: 30000
0190                 value:    90000
0191                 Layout.fillWidth: true
0192             }
0193 
0194             Label {
0195                 text: String(Math.round(nonLiveSlider.value))
0196                 horizontalAlignment: Text.AlignRight
0197                 Layout.preferredWidth: nonLiveSliderTextMetrics.advanceWidth
0198                 LayoutMirroring.enabled: false
0199             }
0200 
0201             TextMetrics {
0202                 id: nonLiveSliderTextMetrics
0203                 font: nonLiveSlider.font
0204                 text: String(nonLiveSlider.to)
0205             }
0206         }
0207     }
0208 
0209     Kirigami.Page {
0210         id: demo
0211 
0212         anchors.fill: parent
0213         contentItem: ColumnLayout {
0214             spacing: Kirigami.Units.largeSpacing
0215             RowLayout {
0216                 Layout.fillWidth: false
0217                 Layout.fillHeight: false
0218                 Layout.alignment: Qt.AlignHCenter
0219                 spacing: Kirigami.Units.smallSpacing
0220 
0221                 Label {
0222                     text: "Application Layout Direction:"
0223                     Layout.alignment: Qt.AlignRight
0224                 }
0225                 Label {
0226                     text: Qt.application.layoutDirection === Qt.RightToLeft ? "Right to Left" : "Left to Right"
0227                 }
0228             }
0229             Kirigami.Separator { Layout.fillWidth: true }
0230             RowLayout {
0231                 Layout.fillHeight: false
0232                 spacing: Kirigami.Units.largeSpacing
0233 
0234                 Demo {
0235                     id: sampleDemo
0236                     LayoutMirroring.enabled: true
0237                     LayoutMirroring.childrenInherit: true
0238                 }
0239                 Kirigami.Separator { Layout.fillHeight: true }
0240                 Demo {
0241                     LayoutMirroring.enabled: false
0242                     LayoutMirroring.childrenInherit: true
0243                 }
0244                 Layout.bottomMargin: Kirigami.Units.gridUnit
0245             }
0246             Kirigami.Separator { Layout.fillWidth: true }
0247             Demo {
0248                 Layout.fillWidth: false
0249                 Layout.fillHeight: false
0250                 Layout.alignment: Qt.AlignHCenter
0251                 Layout.preferredWidth: sampleDemo.width
0252             }
0253             Item {
0254                 Layout.fillHeight: true
0255             }
0256             Kirigami.SelectableLabel {
0257                 Layout.fillWidth: true
0258                 horizontalAlignment: Text.AlignHCenter
0259                 textFormat: Text.MarkdownText
0260                 text: "Hint: run this test both with `export LANGUAGE=ar:en_US LANG=ar_EG.UTF-8 LC_ALL=` and `export LANGUAGE=en:en_US LANG=en_US.UTF-8 LC_ALL=` environments."
0261             }
0262         }
0263     }
0264 }