Revision control

Copy as Markdown

// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Controls.Fusion
import QtQuick.Layouts
import QtMultimedia
import Config
Item {
id: root
implicitHeight: 40
required property MediaPlayer mediaPlayer
property alias fullScreenButton: fullScreenButton
property alias settingsButton: settingsButton
property alias isMediaSliderPressed: mediaSlider.pressed
property alias showSeeker: showSeekerAnim
property alias hideSeeker: hideSeekerAnim
function getTime(time : int) : string {
const h = Math.floor(time / 3600000).toString()
const m = Math.floor(time / 60000).toString()
const s = Math.floor(time / 1000 - m * 60).toString()
return `${h.padStart(2,'0')}:${m.padStart(2,'0')}:${s.padStart(2, '0')}`
}
RowLayout {
anchors.fill: root
anchors.leftMargin: 10
anchors.rightMargin: 10
Label {
id: mediaTime
color: Config.secondaryColor
font.bold: true
text: root.getTime(root.mediaPlayer.position)
}
CustomSlider {
id: mediaSlider
backgroundColor: !Config.activeTheme ? "white" : Config.highlightColor
backgroundOpacity: !Config.activeTheme ? 0.8 : 0.2
enabled: root.mediaPlayer.seekable
to: 1.0
value: root.mediaPlayer.position / root.mediaPlayer.duration
Layout.fillWidth: true
onMoved: root.mediaPlayer.setPosition(value * root.mediaPlayer.duration)
}
Label {
id: durationTime
color: Config.secondaryColor
font.bold: true
text: root.getTime(root.mediaPlayer.duration)
}
CustomButton {
id: settingsButton
icon.source: ControlImages.iconSource("Settings_Icon")
}
CustomButton {
id: fullScreenButton
icon.source: ControlImages.iconSource("FullScreen_Icon")
}
}
ParallelAnimation {
id: hideSeekerAnim
NumberAnimation {
target: root
properties: "opacity"
to: 0
duration: 1000
easing.type: Easing.InOutQuad
}
NumberAnimation {
target: root
properties: "anchors.bottomMargin"
to: -root.height
duration: 1000
easing.type: Easing.InOutQuad
}
}
ParallelAnimation {
id: showSeekerAnim
PropertyAnimation {
target: root
properties: "opacity"
to: 1
duration: 1000
easing.type: Easing.InOutQuad
}
PropertyAnimation {
target: root
properties: "anchors.bottomMargin"
to: 0
duration: 500
easing.type: Easing.InOutQuad
}
}
}