From d0833655c54c05925bd214f545bc904d53860fb3 Mon Sep 17 00:00:00 2001 From: Juho Annunen Date: Fri, 27 Apr 2018 09:34:46 +0300 Subject: Add new Ebike demo to basicsuite Task-number: QTBUG-67917 Change-Id: I88e783ff7bcc530b13edfd3e21565953433293dc Reviewed-by: Teemu Holappa --- basicsuite/ebike-ui/MusicPlayer.qml | 239 ++++++++++++++++++++++++++++++++++++ 1 file changed, 239 insertions(+) create mode 100644 basicsuite/ebike-ui/MusicPlayer.qml (limited to 'basicsuite/ebike-ui/MusicPlayer.qml') diff --git a/basicsuite/ebike-ui/MusicPlayer.qml b/basicsuite/ebike-ui/MusicPlayer.qml new file mode 100644 index 0000000..9d44534 --- /dev/null +++ b/basicsuite/ebike-ui/MusicPlayer.qml @@ -0,0 +1,239 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the E-Bike demo project. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.7 + +import "./BikeStyle" + +Rectangle { + id: musicPlayer + width: UILayout.musicPlayerWidth + height: UILayout.musicPlayerHeight + UILayout.musicPlayerCorner + radius: UILayout.musicPlayerCorner + color: Colors.musicPlayerBackground + anchors { + horizontalCenter: parent.horizontalCenter + bottom: parent.bottom + bottomMargin: -UILayout.musicPlayerCorner + } + state: "hidden" + property bool isPlaying: false + property var songList: [ + ["Post Malone - Rockstar", 218], + ["Ed Sheeran - Perfect", 263], + ["Imagine Dragons - Thunder", 187] + ] + property int currentSong: 0 + + function setupSong() { + var dur = songList[currentSong][1]; + timeAnimation.stop(); + songTimeText.songDuration = dur; + timeAnimation.from = dur; + timeAnimation.to = 0; + timeAnimation.duration = dur * 1000; + if (isPlaying) + timeAnimation.start(); + } + + function previousSong() { + if (currentSong === 0) + currentSong = songList.length - 1; + else + currentSong -= 1; + setupSong(); + } + + function nextSong() { + if (currentSong >= (songList.length - 1)) + currentSong = 0; + else + currentSong += 1; + setupSong(); + } + + Component.onCompleted: setupSong() + + Image { + id: playIcon + width: UILayout.musicPlayerIconWidth + height: UILayout.musicPlayerIconHeight + source: isPlaying + ? (playIconArea.pressed ? "images/pause_pressed.png" : "images/pause.png") + : (playIconArea.pressed ? "images/play_pressed.png" : "images/play.png") + anchors { + horizontalCenter: parent.horizontalCenter + bottom: parent.bottom + bottomMargin: UILayout.musicPlayerIconBottom + UILayout.musicPlayerCorner + } + + MouseArea { + id: playIconArea + anchors { + fill: parent + margins: -UILayout.musicPlayerIconSpacing / 2 + } + onClicked: { + isPlaying = !isPlaying + if (isPlaying) { + if (timeAnimation.running) + timeAnimation.resume() + else + timeAnimation.start() + } else + timeAnimation.pause() + } + } + } + + Image { + id: previousIcon + width: UILayout.musicPlayerIconWidth + height: UILayout.musicPlayerIconHeight + source: previousIconArea.pressed ? "images/prevsong_pressed.png" : "images/prevsong.png" + anchors { + right: playIcon.left + rightMargin: UILayout.musicPlayerIconSpacing + bottom: playIcon.bottom + } + + MouseArea { + id: previousIconArea + anchors { + fill: parent + margins: -UILayout.musicPlayerIconSpacing / 2 + } + onClicked: previousSong() + } + } + + Image { + id: nextIcon + width: UILayout.musicPlayerIconWidth + height: UILayout.musicPlayerIconHeight + source: nextIconArea.pressed ? "images/nextsong_pressed.png" : "images/nextsong.png" + anchors { + left: playIcon.right + leftMargin: UILayout.musicPlayerIconSpacing + bottom: playIcon.bottom + } + + MouseArea { + id: nextIconArea + anchors { + fill: parent + margins: -UILayout.musicPlayerIconSpacing / 2 + } + onClicked: nextSong() + } + } + + Text { + id: songTitleText + anchors { + left: previousIcon.left + right: nextIcon.right + rightMargin: songTimeText.width + 5 + baseline: previousIcon.top + baselineOffset: -UILayout.musicPlayerTextBottom + } + + color: Colors.musicPlayerSongText + font { + family: "Montserrat, Regular" + weight: Font.Normal + pixelSize: UILayout.musicPlayerTextSize + } + text: songList[currentSong][0] + elide: Text.ElideRight + } + + // Function for pretty-printing duration + function splitDuration(duration) { + var minutes = Math.floor(duration / 60); + var seconds = Math.floor(duration % 60); + if (seconds < 10) + seconds = "0" + seconds; + return minutes + ":" + seconds; + } + + Text { + property int songDuration + id: songTimeText + anchors { + right: nextIcon.right + baseline: nextIcon.top + baselineOffset: -UILayout.musicPlayerTextBottom + } + + color: Colors.musicPlayerTimeText + font { + family: "Montserrat, Regular" + weight: Font.Normal + pixelSize: UILayout.musicPlayerTextSize + } + text: splitDuration(songDuration) + + NumberAnimation { + id: timeAnimation + target: songTimeText + property: "songDuration" + onStopped: { + if (isPlaying) + nextSong(); + } + } + } + + states: State { + name: "hidden" + PropertyChanges { + target: musicPlayer + anchors.bottomMargin: -musicPlayer.height + } + } + + transitions: Transition { + from: "" + to: "hidden" + reversible: true + NumberAnimation { + properties: "anchors.bottomMargin" + duration: 250 + easing.type: Easing.InOutQuad + } + } +} -- cgit v1.2.3