Confirmation dialogs for dangerous actions
[someplayer] / src / playerform.cpp
index 5f9c089..945e380 100644 (file)
@@ -148,6 +148,8 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) :
        connect(ui->cfavButton, SIGNAL(clicked()), this, SLOT(_c_add_to_favorites()));
        connect(ui->ctagButton, SIGNAL(clicked()), this, SLOT(_c_edit_tags()));
        connect(_cover, SIGNAL(clicked()), this, SLOT(_toggle_extra_buttons()));
+       connect(_player, SIGNAL(startPlaylist()), this, SLOT(_start_playlist()));
+       connect(_player, SIGNAL(saveLastPlayed(LastPlayed)), _lib, SLOT(saveLastPlayedForCurPlaylist(LastPlayed)));
        ui->viewButton->setIcon(QIcon(":/icons/"+_icons_theme+"/playback.png"));
        _top_gradient = ui->topWidget->styleSheet();
        _bottom_gradient = ui->bottomWidget->styleSheet();
@@ -209,7 +211,6 @@ void PlayerForm::_toggle_view() {
 void PlayerForm::_process_click(QModelIndex index) {
        if (index.column() == 1) {
                int id = index.row();
-               _player->stop();
                _player->setTrackId(id);
                _player->play();
                _track_renderer->setActiveRow(id);
@@ -227,6 +228,8 @@ void PlayerForm::_track_changed(Track track) {
        ui->playlistView->hide();
        ui->playlistView->show();
        _display_track(track);
+       _context_menu->actions().at(2)->setText(_lib->isFavorite(track) ? tr("Remove from favorites") : tr("Add to favorites"));
+       emit trackChanged();
 }
 
 void PlayerForm::_display_track(Track track) {
@@ -241,7 +244,7 @@ void PlayerForm::_display_track(Track track) {
        ui->seekSlider->setMaximum(track.metadata().length());
        _tick(0, track.metadata().length());
        _coverfinder->find(track);
-       ui->cfavButton->setChecked(_lib->isFavorite(track));
+       ui->cfavButton->setChecked(_lib->isFavorite(track) && !ui->cfavButton->icon().isNull());
 }
 
 void PlayerForm::_tick(int done, int all) {
@@ -261,6 +264,7 @@ void PlayerForm::_custom_context_menu_requested(const QPoint &pos) {
 }
 
 void PlayerForm::_delete_track() {
+       CONFIRM_ACTION(this, tr("Delete track?"))
        QList<QModelIndex> idx = ui->playlistView->selectionModel()->selectedIndexes();
        if (idx.isEmpty())
                return;
@@ -289,12 +293,19 @@ void PlayerForm::_add_to_favorites() {
        if (idx.isEmpty())
                return;
        int id = idx.first().row();
-       if (ui->cfavButton->isChecked()) {
-               _lib->addToFavorites(_current_playlist.tracks().at(id));
-       } else {
-               _lib->removeFromFavorites(_current_playlist.tracks().at(id));
+       Track cur = _current_playlist.tracks().at(id);
+       if (!cur.source().isEmpty()) {
+               bool isf = _lib->isFavorite(cur);
+               if (!isf) {
+                       _lib->addToFavorites(cur);
+               } else {
+                       _lib->removeFromFavorites(cur);
+               }
+               isf = _lib->isFavorite(cur);
+               ui->cfavButton->setChecked(isf && !ui->cfavButton->icon().isNull());
+               _context_menu->actions().at(2)->setText(isf ? tr("Remove from favorites") : tr("Add to favorites"));
        }
-       ui->cfavButton->setChecked(_lib->isFavorite(_current_playlist.tracks().at(id)));
+
 }
 
 void PlayerForm::_state_changed(PlayerState state) {
@@ -435,6 +446,9 @@ void PlayerForm::_dirview() {
 void PlayerForm::landscapeMode() {
        landscape = true;
 
+       ui->topWidget->hide();
+       ui->bottomWidget->hide();
+
        ui->widget->layout()->removeItem(ui->coverLayout);
        ui->widget->layout()->removeItem(ui->controlLayout);
        ui->controlLayout->removeItem(ui->countHLayout);
@@ -460,9 +474,6 @@ void PlayerForm::landscapeMode() {
        ((QGridLayout *)ui->widget->layout())->addItem(ui->coverLayout, 0, 0);
        ((QGridLayout *)ui->widget->layout())->addItem(ui->controlLayout, 0, 1);
 
-       ui->topWidget->hide();
-       ui->bottomWidget->hide();
-
        ui->bhorizontalLayout->removeItem(ui->chorizontalSpacer_0);
        ui->bhorizontalLayout->removeItem(ui->chorizontalSpacer_1);
        ui->bhorizontalLayout->removeItem(ui->chorizontalSpacer_2);
@@ -485,6 +496,8 @@ void PlayerForm::landscapeMode() {
        ui->bhorizontalLayout->addItem(ui->chorizontalSpacer_4);
        ui->bhorizontalLayout->addWidget(ui->dirButton);
 
+       ui->bhorWidget->show();
+
        if (_tools_widget->isVisible()) {
                ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/unmore.png"));
        } else {
@@ -493,11 +506,10 @@ void PlayerForm::landscapeMode() {
 }
 
 void PlayerForm::portraitMode() {
-       ui->topWidget->show();
-       ui->bottomWidget->show();
-
        landscape = false;
 
+       ui->bhorWidget->hide();
+
        ui->widget->layout()->removeItem(ui->coverLayout);
        ui->widget->layout()->removeItem(ui->controlLayout);
 
@@ -558,6 +570,9 @@ void PlayerForm::portraitMode() {
        ui->bottomWidget->layout()->addItem(ui->bhorizontalSpacer_3);
        ui->bottomWidget->layout()->addWidget(ui->dirButton);
 
+       ui->topWidget->show();
+       ui->bottomWidget->show();
+
        if (_tools_widget->isVisible()) {
                ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/unmore.png"));
        } else {
@@ -721,6 +736,7 @@ void PlayerForm::_toggle_extra_buttons() {
                ui->caddButton->setEnabled(false);
                ui->cdeleteButton->setEnabled(false);
                ui->cfavButton->setEnabled(false);
+               ui->cfavButton->setChecked(false);
                ui->ctagButton->setEnabled(false);
                ui->caddButton->setIcon(QIcon());
                ui->cdeleteButton->setIcon(QIcon());
@@ -746,3 +762,27 @@ void PlayerForm::updateTrackColor() {
        ui->playlistView->hide();
        ui->playlistView->show();
 }
+
+void PlayerForm::next() {
+       _player->next();
+}
+
+void PlayerForm::prev() {
+       _player->prev();
+}
+
+QString PlayerForm::playerCaption() {
+       TrackMetadata meta = _player->current().metadata();
+       return QString("%1 - %2").arg(meta.artist()).arg(meta.title());
+}
+
+void PlayerForm::_start_playlist() {
+       Config config;
+       if (config.getValue("playback/autoresume_off").toBool()) {
+               _player->next();
+               return;
+       }
+       LastPlayed lp = _lib->getLastPlayedForCurPlaylist();
+       _player->setTrackId(lp.trackId);
+       _player->setAwaitingSeek(lp.position);
+}