1 #include "playerform.h"
2 #include "ui_playerform.h"
8 using namespace SomePlayer::DataObjects;
9 using namespace SomePlayer::Playback;
11 inline void __fill_list(QStandardItemModel *_model, Playlist playlist) {
13 QList<Track> tracks = playlist.tracks();
14 int count = tracks.count();
15 _model->setRowCount(count);
16 for (int i = 0; i < count; i++) {
17 TrackMetadata meta = tracks.at(i).metadata();
18 _model->setItem(i, 0, new QStandardItem(meta.title()));
19 _model->setItem(i, 1, new QStandardItem(meta.artist()));
23 PlayerForm::PlayerForm(Library* lib, QWidget *parent) :
25 ui(new Ui::PlayerForm)
28 _player = new Player(this);
30 connect(ui->libraryButton, SIGNAL(clicked()), this, SLOT(_library()));
31 connect(ui->viewButton, SIGNAL(clicked()), this, SLOT(_toggle_view()));
32 connect(ui->playlistView, SIGNAL(clicked(QModelIndex)), this, SLOT(_process_click(QModelIndex)));
33 connect(ui->playButton, SIGNAL(clicked()), _player, SLOT(play()));
34 connect(ui->pauseButton, SIGNAL(clicked()), _player, SLOT(pause()));
35 connect(ui->stopButton, SIGNAL(clicked()), _player, SLOT(stop()));
36 connect(ui->nextButton, SIGNAL(clicked()), _player, SLOT(next()));
37 connect(ui->prevButton, SIGNAL(clicked()), _player, SLOT(prev()));
38 connect(_player, SIGNAL(trackChanged(Track)), this, SLOT(_track_changed(Track)));
39 connect(_player, SIGNAL(tick(int,int)), this, SLOT(_tick(int,int)));
40 _seek_slider = new QSlider(Qt::Horizontal);
41 ui->progressLayout->insertWidget(1, _seek_slider);
42 _seek_slider->setTracking(false);
43 connect(_seek_slider, SIGNAL(sliderMoved(int)), _player, SLOT(seek(int)));
44 _model = new QStandardItemModel(0, 2, this);
45 ui->playlistView->setModel(_model);
48 PlayerForm::~PlayerForm()
53 void PlayerForm::_library() {
57 void PlayerForm::reload() {
58 _current_playlist = _lib->getCurrentPlaylist();
59 _player->setPlaylist(_current_playlist);
60 __fill_list(_model, _current_playlist);
63 void PlayerForm::_toggle_view() {
64 int index = ui->stackedWidget->currentIndex();
66 ui->stackedWidget->setCurrentIndex(index);
69 void PlayerForm::_process_click(QModelIndex index) {
72 _player->setTrackId(id);
76 void PlayerForm::_track_changed(Track track) {
77 int id = _current_playlist.tracks().indexOf(track);
78 QModelIndex index = _model->index(id, 0);
79 ui->playlistView->setCurrentIndex(index);
80 _display_track(track);
83 void PlayerForm::_display_track(Track track) {
84 ui->countLabel->setText(QString("%1/%2").
85 arg(_current_playlist.tracks().indexOf(track)+1).
86 arg(_current_playlist.tracks().count()));
87 ui->titleLabel->setText(QString("<h3>%1</h3>").arg(track.metadata().title()));
88 ui->artistAlbumLabel->setText(QString("<h3>%1</h3><br/>%2").
89 arg(track.metadata().artist()).
90 arg(track.metadata().album()));
91 _seek_slider->setMinimum(0);
92 _seek_slider->setMaximum(track.metadata().length());
95 void PlayerForm::_tick(int done, int all) {
96 QTime time1(0, all/60, all%60);
97 QTime time2(0, done/60, done%60);
98 ui->allTimeLabel->setText(time1.toString("mm:ss"));
99 ui->doneTimeLabel->setText(time2.toString("mm:ss"));
100 _seek_slider->setValue(done);
103 void PlayerForm::_slider_released() {
104 _player->seek(_seek_slider->value());