2 * Copyright (C) 2014,2015 Canonical, Ltd.
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.
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.
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/>.
18 import Ubuntu.Components 1.3
21 /*! \brief Preview widget for audio tracks.
23 This widget shows tracks contained in widgetData["tracks"], each of which should be of the form:
27 "source" "uri://to/file",
29 "subtitle": "Subtitle", // optional
30 "length": 125 // in seconds
37 implicitHeight: childrenRect.height
40 anchors { left: parent.left; right: parent.right }
41 visible: trackRepeater.count > 0
45 objectName: "trackRepeater"
46 model: root.widgetData["tracks"]
50 objectName: "trackItem" + index
52 readonly property url sourceUrl: modelData["source"]
53 readonly property bool isPlayingItem: AudioUrlComparer.compare(sourceUrl, DashAudioPlayer.currentSource)
55 anchors { left: parent.left; right: parent.right }
61 readonly property int column1Width: units.gu(3)
62 readonly property int column2Width: width - (2 * spacing) - column1Width - column3Width
63 readonly property int column3Width: units.gu(4)
65 anchors.verticalCenter: parent.verticalCenter
70 objectName: "playButton"
71 width: trackRow.column1Width
73 iconSource: DashAudioPlayer.playing && trackItem.isPlayingItem ? "image://theme/media-playback-pause" : "image://theme/media-playback-start"
75 // Can't be "transparent" or "#00xxxxxx" as the button optimizes away the surrounding shape
76 // FIXME when this is resolved: https://bugs.launchpad.net/ubuntu-ui-toolkit/+bug/1251685
80 if (trackItem.isPlayingItem) {
81 if (DashAudioPlayer.playing) {
82 DashAudioPlayer.pause();
83 } else if (DashAudioPlayer.paused) {
84 DashAudioPlayer.play();
87 DashAudioPlayer.playSource(sourceUrl);
93 anchors.verticalCenter: parent.verticalCenter
94 width: parent.column2Width
95 height: trackSubtitleLabel.visible ? trackTitleLabel.height + trackSubtitleLabel.height : trackTitleLabel.height
99 objectName: "trackTitleLabel"
100 anchors { top: parent.top; left: parent.left; right: parent.right }
102 color: scopeStyle ? scopeStyle.foreground : theme.palette.normal.baseText
104 horizontalAlignment: Text.AlignLeft
105 text: modelData["title"]
106 elide: Text.ElideRight
110 id: trackSubtitleLabel
111 objectName: "trackSubtitleLabel"
112 anchors { top: trackTitleLabel.bottom; left: parent.left; right: parent.right }
115 color: scopeStyle ? scopeStyle.foreground : theme.palette.normal.baseText
116 font.weight: Font.Light
118 horizontalAlignment: Text.AlignLeft
119 text: modelData["subtitle"] || ""
120 elide: Text.ElideRight
124 anchors { left: parent.left; top: parent.bottom; right: parent.right }
125 visible: !DashAudioPlayer.stopped && trackItem.isPlayingItem && modelData["length"] > 0
132 objectName: "timeLabel"
133 anchors.verticalCenter: parent.verticalCenter
134 width: parent.column3Width
136 color: scopeStyle ? scopeStyle.foreground : theme.palette.normal.baseText
138 horizontalAlignment: Text.AlignRight
139 text: DashAudioPlayer.lengthToString(modelData["length"])