added progress bar to show position in track
still todo: styling, positioning, output of current time and length
This commit is contained in:
parent
6eabd3cb75
commit
b013b69e8d
4 changed files with 63 additions and 6 deletions
|
|
@ -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{
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue