@@ -1,203 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import QtMultimedia 5.0
19−import Ubuntu.Components 0.1
20−import Ubuntu.Components.ListItems 0.1
21−import ".."
22−import "../Generic"
23−import "../../Components"
24−import "../Previews"
25−
26−GenericPreview {
27− id: root
28−
29− previewImages: previewImageComponent
30− header: headerComponent
31− description: descriptionComponent
32−
33− Component {
34− id: previewImageComponent
35− LazyImage {
36− height: units.gu(22)
37− scaleTo: "height"
38− source: previewData ? previewData.image : ""
39− initialHeight: height
40− initialWidth: height
41− }
42− }
43−
44− Component {
45− id: headerComponent
46− Header {
47− title: previewData.title
48− subtitle: previewData.subtitle
49− }
50− }
51−
52− Component {
53− id: descriptionComponent
54−
55− Item {
56− height: childrenRect.height
57− Audio {
58− id: audioPlayer
59− objectName: "audioPlayer"
60− property real progress: audioPlayer.position / audioPlayer.duration
61−
62− property Item playingItem
63−
64− Component.onDestruction: {
65− audioPlayer.stop();
66− }
67−
68− onErrorStringChanged: console.warn("Audio player error:", errorString)
69−
70− }
71−
72− Connections {
73− target: root
74− onIsCurrentChanged: {
75− if (!root.isCurrent) {
76− audioPlayer.stop();
77− }
78− }
79− }
80−
81− Column {
82− anchors { left: parent.left; right: parent.right }
83− visible: trackRepeater.count > 0
84−
85− ThinDivider {
86− objectName: "topDivider"
87− anchors { left: parent.left; right: parent.right }
88− }
89−
90− Repeater {
91− id: trackRepeater
92− objectName: "trackRepeater"
93−
94− model: previewData.tracks
95−
96− delegate: Item {
97− id: trackItem
98− objectName: "trackItem" + index
99− anchors { left: parent.left; right: parent.right }
100− height: units.gu(5)
101− property bool isPlayingItem: audioPlayer.playingItem == trackItem
102−
103− function play() {
104− audioPlayer.stop();
105− // Make sure we change the source, even if two items point to the same uri location
106− audioPlayer.source = "";
107− audioPlayer.source = model.uri;
108− audioPlayer.playingItem = trackItem;
109− audioPlayer.play();
110− }
111−
112− Row {
113− id: trackRow
114− width: parent.width
115− spacing: units.gu(1)
116− property int column1Width: units.gu(3)
117− property int column2Width: width - (2 * spacing) - column1Width - column3Width
118− property int column3Width: units.gu(4)
119− anchors.verticalCenter: parent.verticalCenter
120−
121− Button {
122− objectName: "playButton"
123− width: trackRow.column1Width
124− height: width
125− iconSource: audioPlayer.playbackState == Audio.PlayingState && trackItem.isPlayingItem ? "image://theme/media-playback-pause" : "image://theme/media-playback-start"
126−
127− // Can't be "transparent" or "#00xxxxxx" as the button optimizes away the surrounding shape
128− // FIXME when this is resolved: https://bugs.launchpad.net/ubuntu-ui-toolkit/+bug/1251685
129− color: "#01000000"
130−
131− onClicked: {
132− if (trackItem.isPlayingItem) {
133− if (audioPlayer.playbackState == Audio.PlayingState) {
134− audioPlayer.pause();
135− } else if (audioPlayer.playbackState == Audio.PausedState){
136− audioPlayer.play();
137− }
138− } else {
139− trackItem.play();
140− }
141− }
142− }
143−
144− Label {
145− objectName: "trackTitleLabel"
146− fontSize: "small"
147− opacity: 0.9
148− color: "white"
149− horizontalAlignment: Text.AlignLeft
150− anchors.verticalCenter: parent.verticalCenter
151− width: parent.column2Width
152− text: title
153− style: Text.Raised
154− styleColor: "black"
155− elide: Text.ElideRight
156−
157− UbuntuShape {
158− id: progressBarFill
159− objectName: "progressBarFill"
160− color: UbuntuColors.orange
161− anchors.left: progressBarImage.left
162− anchors.right: progressBarImage.right
163− anchors.verticalCenter: progressBarImage.verticalCenter
164− height: units.dp(2)
165− anchors.margins: units.dp(2)
166− anchors.rightMargin: maxWidth - (maxWidth * audioPlayer.progress) + units.dp(2)
167− visible: progressBarImage.visible
168− property int maxWidth: progressBarImage.width - units.dp(4)
169− }
170−
171− Image {
172− id: progressBarImage
173− anchors { left: parent.left; top: parent.bottom; right: parent.right }
174− height: units.dp(6)
175− visible: audioPlayer.playbackState != Audio.StoppedState && trackItem.isPlayingItem && model.length.length > 0
176− source: "graphics/music_progress_bg.png"
177− }
178− }
179−
180− Label {
181− id: valueLabel
182− objectName: "timeLabel"
183− fontSize: "small"
184− opacity: 0.9
185− color: "white"
186− anchors.verticalCenter: parent.verticalCenter
187− horizontalAlignment: Text.AlignRight
188− width: parent.column3Width
189− text: length
190− style: Text.Raised
191− styleColor: "black"
192− }
193− }
194−
195− ThinDivider {
196− anchors { left: parent.left; bottom: parent.bottom; right: parent.right }
197− }
198− }
199− }
200− }
201− }
202− }
203−}