Warning, /utilities/krecorder/src/contents/ui/PlayerPage.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * SPDX-FileCopyrightText: 2020 Devin Lin <espidev@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-3.0-or-later 0005 */ 0006 0007 import QtQuick 0008 import org.kde.kirigami as Kirigami 0009 import QtQuick.Controls as Controls 0010 import QtQuick.Layouts 0011 import KRecorder 0012 0013 import "components" 0014 0015 Kirigami.Page { 0016 id: root 0017 0018 property Recording recording 0019 0020 title: i18n("Player") 0021 0022 onBackRequested: AudioPlayer.stop() 0023 0024 property real yTranslate: 0 0025 property int mainOpacity: 0 0026 0027 actions: [ 0028 Kirigami.Action { 0029 visible: applicationWindow().isWidescreen 0030 icon.name: "settings-configure" 0031 text: i18n("Settings") 0032 onTriggered: applicationWindow().openSettings(); 0033 } 0034 ] 0035 0036 ColumnLayout { 0037 opacity: mainOpacity 0038 transform: Translate { y: yTranslate } 0039 anchors.fill: parent 0040 0041 ColumnLayout { 0042 Layout.alignment: Qt.AlignTop 0043 spacing: Kirigami.Units.largeSpacing 0044 Layout.fillWidth: true 0045 0046 Controls.Label { 0047 Layout.fillWidth: true 0048 text: recording.fileName 0049 font.weight: Font.DemiBold 0050 horizontalAlignment: Text.AlignHCenter 0051 wrapMode: Text.Wrap 0052 } 0053 0054 Controls.Label { 0055 Layout.fillWidth: true 0056 text: i18n("Recorded on %1", recording.recordDate) 0057 opacity: 0.7 0058 font.weight: Font.DemiBold 0059 horizontalAlignment: Text.AlignHCenter 0060 wrapMode: Text.Wrap 0061 } 0062 } 0063 0064 RowLayout { 0065 Layout.fillHeight: true 0066 Layout.fillWidth: true 0067 spacing: Math.round(Kirigami.Units.gridUnit * 1.5) 0068 0069 Item { 0070 Layout.fillWidth: true 0071 } 0072 0073 // placeholder element for spacing, doesn't do anything 0074 Item { 0075 implicitWidth: Math.round(Kirigami.Units.gridUnit * 2.5) 0076 implicitHeight: Math.round(Kirigami.Units.gridUnit * 2.5) 0077 } 0078 0079 RoundFlatButton { 0080 implicitWidth: Kirigami.Units.gridUnit * 5 0081 implicitHeight: Kirigami.Units.gridUnit * 5 0082 text: (AudioPlayer.playbackState === AudioPlayer.PlayingState) ? i18n("Pause") : i18n("Play") 0083 icon.name: (AudioPlayer.playbackState === AudioPlayer.PlayingState) ? "media-playback-pause" : "media-playback-start" 0084 onClicked: (AudioPlayer.playbackState === AudioPlayer.PlayingState) ? AudioPlayer.pause() : AudioPlayer.play() 0085 } 0086 0087 ToolTipToolButton { 0088 implicitWidth: Math.round(Kirigami.Units.gridUnit * 2.5) 0089 implicitHeight: Math.round(Kirigami.Units.gridUnit * 2.5) 0090 opacity: (AudioPlayer.playbackState !== AudioPlayer.StoppedState) ? 1 : 0 0091 icon.name: "media-playback-stop" 0092 text: i18n("Stop") 0093 onClicked: AudioPlayer.stop(); 0094 } 0095 0096 Item { 0097 Layout.fillWidth: true 0098 } 0099 } 0100 0101 RowLayout { 0102 id: sliderBar 0103 Layout.alignment: Qt.AlignHCenter 0104 spacing: Kirigami.Units.largeSpacing 0105 0106 Controls.Label { 0107 id: elapsedLabel 0108 Layout.alignment: Qt.AlignVCenter 0109 text: (AudioPlayer.playbackState === AudioPlayer.StoppedState) ? "0:00" : Utils.formatDuration(AudioPlayer.position) 0110 color: Kirigami.Theme.disabledTextColor 0111 } 0112 0113 Controls.Slider { 0114 Layout.alignment: Qt.AlignVCenter 0115 implicitWidth: Math.min(root.width - Kirigami.Units.largeSpacing * 2 - elapsedLabel.width - durationLabel.width, root.width * 0.6) 0116 from: 0 0117 to: AudioPlayer.duration 0118 value: AudioPlayer.position 0119 0120 Behavior on value { 0121 NumberAnimation { 0122 duration: 100 0123 easing.type: Easing.InOutQuad 0124 } 0125 } 0126 0127 onMoved: AudioPlayer.setPosition(value) 0128 } 0129 0130 Controls.Label { 0131 id: durationLabel 0132 Layout.alignment: Qt.AlignVCenter 0133 text: recording.recordingLength 0134 color: Kirigami.Theme.disabledTextColor 0135 } 0136 } 0137 } 0138 }