Warning, /multimedia/elisa/src/qml/DurationSlider.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2020 (c) Devin Lin <espidev@gmail.com> 0003 0004 SPDX-License-Identifier: LGPL-3.0-or-later 0005 */ 0006 0007 import QtQuick 2.7 0008 import QtQuick.Layouts 1.2 0009 import QtQuick.Controls 2.3 0010 import org.kde.elisa 1.0 0011 import org.kde.kirigami 2.5 as Kirigami 0012 import ".." 0013 0014 /** 0015 * Aligned into a 5x2 grid 0016 * 0017 * Labels inline (bottom row takes up 0 space): 0018 * -------------------------------------------- 0019 * | Label | Slider | Slider | Slider | Label | 0020 * -------------------------------------------- 0021 * | | | | | | 0022 * -------------------------------------------- 0023 * 0024 * Labels below (outer columns take up 0 space): 0025 * -------------------------------------------- 0026 * | | Slider | Slider | Slider | | 0027 * -------------------------------------------- 0028 * | | Label | | Label | | 0029 * -------------------------------------------- 0030 */ 0031 GridLayout { 0032 id: root 0033 0034 property int position 0035 property int duration 0036 property bool seekable 0037 property bool playEnabled 0038 0039 property color labelColor 0040 property bool labelsInline: true 0041 0042 rows: 2 0043 columns: 5 0044 rowSpacing: 0 0045 columnSpacing: Kirigami.Units.largeSpacing 0046 0047 signal seek(int position) 0048 0049 onPositionChanged: { 0050 if (!slider.pressed) { 0051 slider.value = position / 1000 0052 } 0053 } 0054 onDurationChanged: { 0055 slider.to = duration / 1000 0056 } 0057 0058 Connections { 0059 target: ElisaApplication.mediaPlayListProxyModel 0060 function onClearPlayListPlayer() { 0061 slider.value = 0; 0062 } 0063 } 0064 0065 TextMetrics { 0066 id: durationTextMetrics 0067 text: i18nc("@info:placeholder This is used to preserve a fixed width for the duration text.", "00:00:00") 0068 } 0069 0070 LabelWithToolTip { 0071 id: positionLabel 0072 0073 text: timeIndicator.progressDuration 0074 color: root.labelColor 0075 0076 Layout.row: root.labelsInline ? 0 : 1 0077 Layout.column: root.labelsInline ? 0 : 1 0078 Layout.alignment: Qt.AlignVCenter 0079 Layout.fillHeight: true 0080 Layout.rightMargin: !root.labelsInline ? 0 : !LayoutMirroring.enabled ? Kirigami.Units.largeSpacing : Kirigami.Units.largeSpacing * 2 0081 Layout.preferredWidth: (durationTextMetrics.boundingRect.width - durationTextMetrics.boundingRect.x) + Kirigami.Units.smallSpacing 0082 0083 verticalAlignment: Text.AlignVCenter 0084 horizontalAlignment: root.labelsInline ? Text.AlignRight : Text.AlignLeft 0085 0086 ProgressIndicator { 0087 id: timeIndicator 0088 position: root.position 0089 } 0090 } 0091 0092 AccessibleSlider { 0093 id: slider 0094 0095 Layout.row: 0 0096 Layout.column: 1 0097 Layout.columnSpan: 3 0098 Layout.alignment: Qt.AlignVCenter 0099 Layout.fillHeight: true 0100 Layout.fillWidth: true 0101 Layout.rightMargin: !root.labelsInline ? 0 : !LayoutMirroring.enabled ? Kirigami.Units.largeSpacing : 0 0102 Layout.leftMargin: !root.labelsInline ? 0 : LayoutMirroring.enabled ? Kirigami.Units.largeSpacing : 0 0103 0104 Accessible.name: i18nc("@label", "Duration") 0105 0106 // from, to and value of Slider are rescaled to seconds to avoid integer overflow issues 0107 from: 0 0108 to: root.duration / 1000 0109 0110 keyStepSize: 5 0111 wheelStepSize: 10 0112 0113 enabled: root.seekable && root.playEnabled 0114 live: true 0115 onMoved: root.seek(value * 1000) 0116 } 0117 0118 LabelWithToolTip { 0119 id: durationLabel 0120 0121 text: durationIndicator.progressDuration 0122 0123 color: root.labelColor 0124 0125 Layout.row: root.labelsInline ? 0 : 1 0126 Layout.column: root.labelsInline ? 4 : 3 0127 Layout.alignment: Qt.AlignVCenter 0128 Layout.fillHeight: true 0129 Layout.leftMargin: !root.labelsInline ? 0 : LayoutMirroring.enabled ? (Kirigami.Units.largeSpacing * 2) : 0 0130 Layout.preferredWidth: (durationTextMetrics.boundingRect.width - durationTextMetrics.boundingRect.x) 0131 0132 verticalAlignment: Text.AlignVCenter 0133 horizontalAlignment: root.labelsInline ? Text.AlignLeft : Text.AlignRight 0134 0135 ProgressIndicator { 0136 id: durationIndicator 0137 position: root.duration 0138 } 0139 } 0140 }