X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fplayerform.cpp;h=d0bb5dcccc7999f921ffb9bcc7651cb6658fde65;hb=e0bce0a80c207c746ef2e5de527d7919e63252f7;hp=a1af42f5dba1bad852b859795c6f71bb09b4f674;hpb=bee1ca99846d2d3f2462e6feb24a13f7b95879f1;p=someplayer diff --git a/src/playerform.cpp b/src/playerform.cpp index a1af42f..d0bb5dc 100644 --- a/src/playerform.cpp +++ b/src/playerform.cpp @@ -4,6 +4,7 @@ #include #include #include +#include "trackrenderer.h" using namespace SomePlayer::DataObjects; using namespace SomePlayer::Playback; @@ -15,8 +16,8 @@ inline void __fill_list(QStandardItemModel *_model, Playlist playlist) { _model->setRowCount(count); for (int i = 0; i < count; i++) { TrackMetadata meta = tracks.at(i).metadata(); - _model->setItem(i, 0, new QStandardItem(meta.title())); - _model->setItem(i, 1, new QStandardItem(meta.artist())); + QString t = meta.title()+"#_#"+meta.artist()+"#_#"+meta.album(); + _model->setItem(i, 0, new QStandardItem(t)); } } @@ -30,19 +31,34 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) : connect(ui->libraryButton, SIGNAL(clicked()), this, SLOT(_library())); connect(ui->viewButton, SIGNAL(clicked()), this, SLOT(_toggle_view())); connect(ui->playlistView, SIGNAL(clicked(QModelIndex)), this, SLOT(_process_click(QModelIndex))); - connect(ui->playButton, SIGNAL(clicked()), _player, SLOT(play())); - connect(ui->pauseButton, SIGNAL(clicked()), _player, SLOT(pause())); + connect(ui->playpauseButton, SIGNAL(clicked()), _player, SLOT(toggle())); connect(ui->stopButton, SIGNAL(clicked()), _player, SLOT(stop())); connect(ui->nextButton, SIGNAL(clicked()), _player, SLOT(next())); connect(ui->prevButton, SIGNAL(clicked()), _player, SLOT(prev())); connect(_player, SIGNAL(trackChanged(Track)), this, SLOT(_track_changed(Track))); connect(_player, SIGNAL(tick(int,int)), this, SLOT(_tick(int,int))); + connect(ui->randomButton, SIGNAL(clicked()), _player, SLOT(toggleRandom())); + connect(ui->repeatButton, SIGNAL(clicked()), _player, SLOT(toggleRepeat())); + ui->randomButton->setChecked(_player->random()); + ui->repeatButton->setChecked(_player->repeat()); _seek_slider = new QSlider(Qt::Horizontal); ui->progressLayout->insertWidget(1, _seek_slider); _seek_slider->setTracking(false); - connect(_seek_slider, SIGNAL(sliderMoved(int)), _player, SLOT(seek(int))); + connect(_seek_slider, SIGNAL(sliderReleased()), this, SLOT(_slider_released())); + connect(ui->playlistView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(_custom_context_venu_requested(QPoint))); _model = new QStandardItemModel(0, 2, this); ui->playlistView->setModel(_model); + _context_menu = new QMenu(ui->playlistView); + QAction *delete_action = _context_menu->addAction("Delete"); + connect(delete_action, SIGNAL(triggered()), this, SLOT(_delete_track())); + QAction *enqueue_action = _context_menu->addAction("Enqueue"); + connect(enqueue_action, SIGNAL(triggered()), this, SLOT(_enqueue_track())); + QAction *add_to_favorites = _context_menu->addAction("Add to favorites"); + connect(add_to_favorites, SIGNAL(triggered()), this, SLOT(_add_to_favorites())); + + _track_renderer = new TrackRenderer(this); + ui->playlistView->setItemDelegateForColumn(0, _track_renderer); + connect(_player, SIGNAL(trackDone(Track)), _lib, SLOT(updateTrackCount(Track))); } PlayerForm::~PlayerForm() @@ -71,12 +87,19 @@ void PlayerForm::_process_click(QModelIndex index) { _player->stop(); _player->setTrackId(id); _player->play(); + _track_renderer->setActiveRow(id); + ui->playlistView->hide(); + ui->playlistView->show(); } void PlayerForm::_track_changed(Track track) { int id = _current_playlist.tracks().indexOf(track); QModelIndex index = _model->index(id, 0); ui->playlistView->setCurrentIndex(index); + ui->playlistView->scrollTo(index); + _track_renderer->setActiveRow(id); + ui->playlistView->hide(); + ui->playlistView->show(); _display_track(track); } @@ -90,16 +113,41 @@ void PlayerForm::_display_track(Track track) { arg(track.metadata().album())); _seek_slider->setMinimum(0); _seek_slider->setMaximum(track.metadata().length()); + _tick(0, track.metadata().length()); } void PlayerForm::_tick(int done, int all) { - QTime time1(0, all/60, all%60); - QTime time2(0, done/60, done%60); - ui->allTimeLabel->setText(time1.toString("mm:ss")); - ui->doneTimeLabel->setText(time2.toString("mm:ss")); + QTime time(0, all/60, all%60); + ui->allTimeLabel->setText(time.toString("mm:ss")); + time.setHMS(0, done/60, done%60); + ui->doneTimeLabel->setText(time.toString("mm:ss")); _seek_slider->setValue(done); } void PlayerForm::_slider_released() { _player->seek(_seek_slider->value()); } + +void PlayerForm::_custom_context_venu_requested(const QPoint &pos) { + _context_menu->exec(pos); +} + +void PlayerForm::_delete_track() { + QList idx = ui->playlistView->selectionModel()->selectedIndexes(); + int id = idx.first().row(); + _current_playlist.removeTrackAt(id); + _lib->saveCurrentPlaylist(_current_playlist); + reload(); +} + +void PlayerForm::_enqueue_track() { + QList idx = ui->playlistView->selectionModel()->selectedIndexes(); + int id = idx.first().row(); + _player->enqueue(id); +} + +void PlayerForm::_add_to_favorites() { + QList idx = ui->playlistView->selectionModel()->selectedIndexes(); + int id = idx.first().row(); + _lib->addToFavorites(_current_playlist.tracks().at(id)); +}