From 470e95f57fe72d60e8a9699385cae7a78b7416a6 Mon Sep 17 00:00:00 2001 From: Anika Raemer Date: Thu, 6 Dec 2018 20:59:24 +0100 Subject: [PATCH] show media length and progress above progress bar --- LenaPi/MusicPlayer.qml | 7 +++++ LenaPi/models/MusicModel.cpp | 57 ++++++++++++++++++++++++++---------- LenaPi/models/MusicModel.h | 18 +++++++++--- 3 files changed, 63 insertions(+), 19 deletions(-) diff --git a/LenaPi/MusicPlayer.qml b/LenaPi/MusicPlayer.qml index 46409d6..9da8fce 100644 --- a/LenaPi/MusicPlayer.qml +++ b/LenaPi/MusicPlayer.qml @@ -49,6 +49,13 @@ Item{ color: "#99ffffff" height: 140 + Label{ + anchors.right: progress.right + anchors.bottom: progress.top + font.pointSize: 9 + color: "grey" + text: musicModel.pTime + " / " + musicModel.pMediaLength + } ProgressBar{ id: progress diff --git a/LenaPi/models/MusicModel.cpp b/LenaPi/models/MusicModel.cpp index f3d328d..387f8d9 100644 --- a/LenaPi/models/MusicModel.cpp +++ b/LenaPi/models/MusicModel.cpp @@ -23,10 +23,7 @@ void MusicModel::init(NavigationItemModel *item) mCurrentItem = item; emit currentItemChanged(); - mHasNext = false; - mHasPrevious = false; - emit hasNextChanged(); - emit hasPrevious(); + reset(); while(mMedia->count() > 0){ mMedia->removeMedia(0); @@ -64,13 +61,7 @@ void MusicModel::stopMusic() mIsPlaying = false; emit isPlayingChanged(); - mHasNext = false; - mHasPrevious = false; - emit hasNextChanged(); - emit hasPreviousChanged(); - - mCurrentMediaItemProgress = 0.0; - emit progressChanged(); + reset(); emit stop(); } @@ -104,26 +95,36 @@ VlcMediaList *MusicModel::getMedia() return mMedia; } -bool MusicModel::isPlaying() +bool MusicModel::isPlaying() const { return mIsPlaying; } -bool MusicModel::hasNext() +bool MusicModel::hasNext() const { return mHasNext; } -bool MusicModel::hasPrevious() +bool MusicModel::hasPrevious() const { return mHasPrevious; } -double MusicModel::getProgress() +double MusicModel::getProgress() const { return mCurrentMediaItemProgress; } +QString MusicModel::getMediaLength() +{ + return timeToString(mCurrentMediaItemLength); +} + +QString MusicModel::getTime() +{ + return timeToString(mCurrentTime); +} + void MusicModel::onNextMediaSet(VlcMedia *media) { mHasNext = true; @@ -141,10 +142,36 @@ void MusicModel::onNextMediaSet(VlcMedia *media) void MusicModel::onTimeChanged(int time) { mCurrentMediaItemProgress = (double) time / mCurrentMediaItemLength; + mCurrentTime = time; emit progressChanged(); } void MusicModel::onLengthChanged(int length) { mCurrentMediaItemLength= length; + emit mediaLengthChanged(); +} + +void MusicModel::reset() +{ + mHasNext = false; + mHasPrevious = false; + emit hasNextChanged(); + emit hasPreviousChanged(); + + mCurrentMediaItemProgress = 0.0; + mCurrentTime = 0.0; + emit progressChanged(); + + mCurrentMediaItemLength = 0.0; + emit mediaLengthChanged(); +} + +QString MusicModel::timeToString(int time) +{ + int sec = time/1000; + int min = sec/60; + sec = sec-min*60; + QString secStr = sec < 10 ? "0"+QString::number(sec) : QString::number(sec); + return QString::number(min) + ":" + secStr; } diff --git a/LenaPi/models/MusicModel.h b/LenaPi/models/MusicModel.h index b17fa3d..76fee93 100644 --- a/LenaPi/models/MusicModel.h +++ b/LenaPi/models/MusicModel.h @@ -15,6 +15,8 @@ class MusicModel : public QObject Q_PROPERTY(bool pHasPrevious READ hasPrevious NOTIFY hasPreviousChanged) Q_PROPERTY(bool pIsPlaying READ isPlaying NOTIFY isPlayingChanged) Q_PROPERTY(double pProgress READ getProgress NOTIFY progressChanged) + Q_PROPERTY(QString pMediaLength READ getMediaLength NOTIFY mediaLengthChanged) + Q_PROPERTY(QString pTime READ getTime NOTIFY progressChanged) signals: void navigateTo(NavigationItemModel *item); @@ -28,6 +30,7 @@ signals: void hasNextChanged(); void isPlayingChanged(); void progressChanged(); + void mediaLengthChanged(); public: MusicModel(VlcInstance* instance, QObject *parent = Q_NULLPTR); @@ -45,11 +48,14 @@ public: VlcMediaList *getMedia(); - bool isPlaying(); - bool hasNext(); - bool hasPrevious(); + bool isPlaying() const; + bool hasNext() const; + bool hasPrevious() const; - double getProgress(); + double getProgress() const; + + QString getMediaLength(); + QString getTime(); public slots: void onNextMediaSet(VlcMedia* media); @@ -57,10 +63,14 @@ public slots: void onLengthChanged(int length); private: + void reset(); + QString timeToString(int time); + bool mIsPlaying = false; bool mHasNext = false; bool mHasPrevious = false; int mCurrentMediaItemLength = 0; + int mCurrentTime = 0; double mCurrentMediaItemProgress = 0; NavigationItemModel* mCurrentItem = Q_NULLPTR; VlcMediaList* mMedia = Q_NULLPTR;