From b013b69e8ddc2b741c3c00eed5b6f28518add321 Mon Sep 17 00:00:00 2001 From: Anika Raemer Date: Thu, 6 Dec 2018 10:19:51 +0100 Subject: [PATCH] added progress bar to show position in track still todo: styling, positioning, output of current time and length --- LenaPi/MusicPlayer.qml | 41 ++++++++++++++++++++++---- LenaPi/controllers/MusicController.cpp | 2 ++ LenaPi/models/MusicModel.cpp | 18 +++++++++++ LenaPi/models/MusicModel.h | 8 +++++ 4 files changed, 63 insertions(+), 6 deletions(-) diff --git a/LenaPi/MusicPlayer.qml b/LenaPi/MusicPlayer.qml index fa3430c..47d0545 100644 --- a/LenaPi/MusicPlayer.qml +++ b/LenaPi/MusicPlayer.qml @@ -1,4 +1,6 @@ import QtQuick 2.0 + import QtQuick.Controls 1.4 + import QtQuick.Controls.Styles 1.4 import QtGraphicalEffects 1.0 Item{ @@ -38,6 +40,37 @@ Item{ } } + ProgressBar{ + anchors.top: parent.top + anchors.right: parent.right + anchors.margins: container.margins + /*anchors.bottom: buttons.top + anchors.left: parent.left + anchors.right: parent.right + anchors.leftMargin: 40 + anchors.rightMargin: 40 + anchors.topMargin: 10 + anchors.bottomMargin: 10 + */ + z:99 + + value: musicModel.pProgress + style:ProgressBarStyle { + background: Rectangle { + radius: 2 + color: "magenta" + border.color: "gray" + border.width: 1 + implicitWidth: 200 + implicitHeight: 24 + } + progress: Rectangle { + color: "lightsteelblue" + border.color: "steelblue" + } + } + } + Rectangle { id: controlPannel @@ -47,8 +80,9 @@ Item{ color: "#99ffffff" height: 120 - // @todo: use rowLayout instead? + Row{ + id: buttons spacing: 20 anchors.centerIn: parent @@ -73,10 +107,6 @@ Item{ onClicked:{ musicModel.playPause(); - /* if(imageSource == "qrc:/icon_play") - imageSource = "qrc:/icon_pause" - else - imageSource = "qrc:/icon_play"*/ } } RoundButton{ @@ -90,7 +120,6 @@ Item{ onClicked:{ musicModel.stopMusic(); - //playPause.imageSource = "qrc:/icon_play" } } RoundButton{ diff --git a/LenaPi/controllers/MusicController.cpp b/LenaPi/controllers/MusicController.cpp index 7eb2ce7..6fb7ffc 100644 --- a/LenaPi/controllers/MusicController.cpp +++ b/LenaPi/controllers/MusicController.cpp @@ -21,6 +21,8 @@ MusicController::MusicController(QObject *parent) : QObject(parent) }); connect(mPlayer, SIGNAL(nextItemSet(VlcMedia*)), mModel, SLOT(onNextMediaSet(VlcMedia*))); + connect(mPlayer->mediaPlayer(), &VlcMediaPlayer::lengthChanged, mModel, &MusicModel::onLengthChanged); + connect(mPlayer->mediaPlayer(), &VlcMediaPlayer::timeChanged, mModel, &MusicModel::onTimeChanged); } MusicController::~MusicController() diff --git a/LenaPi/models/MusicModel.cpp b/LenaPi/models/MusicModel.cpp index 98a965e..59973c6 100644 --- a/LenaPi/models/MusicModel.cpp +++ b/LenaPi/models/MusicModel.cpp @@ -64,6 +64,8 @@ void MusicModel::stopMusic() mIsPlaying = false; mHasNext = false; mHasPrevious = false; + mCurrentMediaItemProgress = 0.0; + emit progressChanged(); emit hasNextChanged(); emit hasPreviousChanged(); emit isPlayingChanged(); @@ -114,6 +116,11 @@ bool MusicModel::hasPrevious() return mHasPrevious; } +double MusicModel::getProgress() +{ + return mCurrentMediaItemProgress; +} + void MusicModel::onNextMediaSet(VlcMedia *media) { mHasNext = true; @@ -127,3 +134,14 @@ void MusicModel::onNextMediaSet(VlcMedia *media) emit hasPreviousChanged(); emit hasNextChanged(); } + +void MusicModel::onTimeChanged(int time) +{ + mCurrentMediaItemProgress = (double) time / mCurrentMediaItemLength; + emit progressChanged(); +} + +void MusicModel::onLengthChanged(int length) +{ + mCurrentMediaItemLength= length; +} diff --git a/LenaPi/models/MusicModel.h b/LenaPi/models/MusicModel.h index 88c90e8..b17fa3d 100644 --- a/LenaPi/models/MusicModel.h +++ b/LenaPi/models/MusicModel.h @@ -14,6 +14,7 @@ class MusicModel : public QObject Q_PROPERTY(bool pHasNext READ hasNext NOTIFY hasNextChanged) Q_PROPERTY(bool pHasPrevious READ hasPrevious NOTIFY hasPreviousChanged) Q_PROPERTY(bool pIsPlaying READ isPlaying NOTIFY isPlayingChanged) + Q_PROPERTY(double pProgress READ getProgress NOTIFY progressChanged) signals: void navigateTo(NavigationItemModel *item); @@ -26,6 +27,7 @@ signals: void hasPreviousChanged(); void hasNextChanged(); void isPlayingChanged(); + void progressChanged(); public: MusicModel(VlcInstance* instance, QObject *parent = Q_NULLPTR); @@ -47,13 +49,19 @@ public: bool hasNext(); bool hasPrevious(); + double getProgress(); + public slots: void onNextMediaSet(VlcMedia* media); + void onTimeChanged(int time); + void onLengthChanged(int length); private: bool mIsPlaying = false; bool mHasNext = false; bool mHasPrevious = false; + int mCurrentMediaItemLength = 0; + double mCurrentMediaItemProgress = 0; NavigationItemModel* mCurrentItem = Q_NULLPTR; VlcMediaList* mMedia = Q_NULLPTR; VlcInstance* mVlc;