added progress bar to show position in track

still todo:
styling, positioning, output of current time and length
This commit is contained in:
Anika Raemer 2018-12-06 10:19:51 +01:00
parent 6eabd3cb75
commit b013b69e8d
4 changed files with 63 additions and 6 deletions

View file

@ -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{

View file

@ -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()

View file

@ -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;
}

View file

@ -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;