blob: 37c2ab111a60fb5d109866781622ee4c1e6c7f3a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
@media only all and (prefers-color-scheme: dark) {
.highlight .hll { background-color: #49483e }
.highlight .c { color: #75715e } /* Comment */
.highlight .err { color: #960050; background-color: #1e0010 } /* Error */
.highlight .k { color: #66d9ef } /* Keyword */
.highlight .l { color: #ae81ff } /* Literal */
.highlight .n { color: #f8f8f2 } /* Name */
.highlight .o { color: #f92672 } /* Operator */
.highlight .p { color: #f8f8f2 } /* Punctuation */
.highlight .ch { color: #75715e } /* Comment.Hashbang */
.highlight .cm { color: #75715e } /* Comment.Multiline */
.highlight .cp { color: #75715e } /* Comment.Preproc */
.highlight .cpf { color: #75715e } /* Comment.PreprocFile */
.highlight .c1 { color: #75715e } /* Comment.Single */
.highlight .cs { color: #75715e } /* Comment.Special */
.highlight .gd { color: #f92672 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gi { color: #a6e22e } /* Generic.Inserted */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #75715e } /* Generic.Subheading */
.highlight .kc { color: #66d9ef } /* Keyword.Constant */
.highlight .kd { color: #66d9ef } /* Keyword.Declaration */
.highlight .kn { color: #f92672 } /* Keyword.Namespace */
.highlight .kp { color: #66d9ef } /* Keyword.Pseudo */
.highlight .kr { color: #66d9ef } /* Keyword.Reserved */
.highlight .kt { color: #66d9ef } /* Keyword.Type */
.highlight .ld { color: #e6db74 } /* Literal.Date */
.highlight .m { color: #ae81ff } /* Literal.Number */
.highlight .s { color: #e6db74 } /* Literal.String */
.highlight .na { color: #a6e22e } /* Name.Attribute */
.highlight .nb { color: #f8f8f2 } /* Name.Builtin */
.highlight .nc { color: #a6e22e } /* Name.Class */
.highlight .no { color: #66d9ef } /* Name.Constant */
.highlight .nd { color: #a6e22e } /* Name.Decorator */
.highlight .ni { color: #f8f8f2 } /* Name.Entity */
.highlight .ne { color: #a6e22e } /* Name.Exception */
.highlight .nf { color: #a6e22e } /* Name.Function */
.highlight .nl { color: #f8f8f2 } /* Name.Label */
.highlight .nn { color: #f8f8f2 } /* Name.Namespace */
.highlight .nx { color: #a6e22e } /* Name.Other */
.highlight .py { color: #f8f8f2 } /* Name.Property */
.highlight .nt { color: #f92672 } /* Name.Tag */
.highlight .nv { color: #f8f8f2 } /* Name.Variable */
.highlight .ow { color: #f92672 } /* Operator.Word */
.highlight .w { color: #f8f8f2 } /* Text.Whitespace */
.highlight .mb { color: #ae81ff } /* Literal.Number.Bin */
.highlight .mf { color: #ae81ff } /* Literal.Number.Float */
.highlight .mh { color: #ae81ff } /* Literal.Number.Hex */
.highlight .mi { color: #ae81ff } /* Literal.Number.Integer */
.highlight .mo { color: #ae81ff } /* Literal.Number.Oct */
.highlight .sa { color: #e6db74 } /* Literal.String.Affix */
.highlight .sb { color: #e6db74 } /* Literal.String.Backtick */
.highlight .sc { color: #e6db74 } /* Literal.String.Char */
.highlight .dl { color: #e6db74 } /* Literal.String.Delimiter */
.highlight .sd { color: #e6db74 } /* Literal.String.Doc */
.highlight .s2 { color: #e6db74 } /* Literal.String.Double */
.highlight .se { color: #ae81ff } /* Literal.String.Escape */
.highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */
.highlight .si { color: #e6db74 } /* Literal.String.Interpol */
.highlight .sx { color: #e6db74 } /* Literal.String.Other */
.highlight .sr { color: #e6db74 } /* Literal.String.Regex */
.highlight .s1 { color: #e6db74 } /* Literal.String.Single */
.highlight .ss { color: #e6db74 } /* Literal.String.Symbol */
.highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #a6e22e } /* Name.Function.Magic */
.highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */
.highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */
.highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */
.highlight .vm { color: #f8f8f2 } /* Name.Variable.Magic */
.highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */
}
@media (prefers-color-scheme: light) {
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cp/*
* Copyright (C) 2016 The Qt Company Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import QtQuick 2.6
import QtQuick.Layouts 1.1
import QtQuick.Controls 2.0
import QtMultimedia 5.6
import AGL.Demo.Controls 1.0
import MediaPlayer 1.0
ApplicationWindow {
id: root
MediaPlayer {
id: player
audioRole: MediaPlayer.MusicRole
autoLoad: true
playlist: playlist
function time2str(value) {
return Qt.formatTime(new Date(value), 'mm:ss')
}
onPositionChanged: slider.value = player.position
}
Playlist {
id: playlist
playbackMode: random.checked ? Playlist.Random : loop.checked ? Playlist.Loop : Playlist.Sequential
Component.onCompleted: {
playlist.addItems(mediaFiles)
}
}
ColumnLayout {
anchors.fill: parent
Item {
Layout.fillWidth: true
Layout.fillHeight: true
Layout.preferredHeight: 1080
clip: true
Image {
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
height: sourceSize.height * width / sourceSize.width
fillMode: Image.PreserveAspectCrop
source: player.metaData.coverArtImage ? player.metaData.coverArtImage : ''
}
Item {
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
height :307
Rectangle {
anchors.fill: parent
color: 'black'
opacity: 0.75
}
ColumnLayout {
anchors.fill: parent
anchors.margins: root.width * 0.02
Item {
Layout.fillWidth: true
Layout.fillHeight: true
Row {
spacing: 20
ToggleButton {
id: random
offImage: './images/AGL_MediaPlayer_Shuffle_Inactive.svg'
onImage: './images/AGL_MediaPlayer_Shuffle_Active.svg'
}
ToggleButton {
id: loop
offImage: './images/AGL_MediaPlayer_Loop_Inactive.svg'
onImage: './images/AGL_MediaPlayer_Loop_Active.svg'
}
}
ColumnLayout {
anchors.fill: parent
Label {
id: title
Layout.alignment: Layout.Center
text: player.metaData.title ? player.metaData.title : ''
horizontalAlignment: Label.AlignHCenter
verticalAlignment: Label.AlignVCenter
}
Label {
id: artist
Layout.alignment: Layout.Center
text: player.metaData.contributingArtist ? player.metaData.contributingArtist : ''
horizontalAlignment: Label.AlignHCenter
verticalAlignment: Label.AlignVCenter
font.pixelSize: title.font.pixelSize * 0.6
}
}
}
Slider {
id: slider
Layout.fillWidth: true
to: player.duration
Label {
id: position
anchors.left: parent.left
anchors.bottom: parent.top
font.pixelSize: 32
text: player.time2str(player.position)
}
Label {
id: duration
anchors.right: parent.right
anchors.bottom: parent.top
font.pixelSize: 32
text: player.time2str(player.duration)
}
onPressedChanged: player.seek(value)
}
RowLayout {
Layout.fillHeight: true
// Image {
// source: './images/AGL_MediaPlayer_Playlist_Inactive.svg'
// }
// Image {
// source: './images/AGL_MediaPlayer_CD_Inactive.svg'
// }
Item { Layout.fillWidth: true }
ImageButton {
offImage: './images/AGL_MediaPlayer_BackArrow.svg'
onClicked: playlist.previous()
}
ImageButton {
id: play
offImage: './images/AGL_MediaPlayer_Player_Play.svg'
onClicked: player.play()
states: [
State {
when: player.playbackState === MediaPlayer.PlayingState
PropertyChanges {
target: play
offImage: './images/AGL_MediaPlayer_Player_Pause.svg'
onClicked: player.pause()
}
}
]
}
ImageButton {
offImage: './images/AGL_MediaPlayer_ForwardArrow.svg'
onClicked: playlist.next()
}
Item { Layout.fillWidth: true }
// Image {
// source: './images/AGL_MediaPlayer_Bluetooth_Inactive.svg'
// }
// Image {
// source: './images/AGL_MediaPlayer_Radio_Inactive.svg'
// }
}
}
}
}
Item {
Layout.fillWidth: true
Layout.fillHeight: true
Layout.preferredHeight: 407
ListView {
anchors.fill: parent
clip: true
header: Label {
x: 50
text: 'PLAYLIST'
opacity: 0.5
}
model: PlaylistWithMetadata {
source: playlist
}
currentIndex: playlist.currentIndex
delegate: MouseArea {
id: delegate
width: ListView.view.width
height: ListView.view.height / 4
RowLayout {
anchors.fill: parent
anchors.leftMargin: 50
anchors.rightMargin: 50
Image {
source: model.coverArt
fillMode: Image.PreserveAspectFit
Layout.preferredWidth: delegate.height
Layout.preferredHeight: delegate.height
}
ColumnLayout {
Layout.fillWidth: true
Label {
Layout.fillWidth: true
text: model.title
}
Label {
Layout.fillWidth: true
text: model.artist
color: '#66FF99'
font.pixelSize: 32
}
}
Label {
text: player.time2str(model.duration)
color: '#66FF99'
font.pixelSize: 32
}
}
onClicked: {
playlist.currentIndex = model.index
player.play()
}
}
highlight: Rectangle {
color: 'white'
opacity: 0.25
}
}
}
}
}
|