X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fplayerform.cpp;h=945e380f3b110ac9a6b7ea677e1cc3e818d1c213;hb=2a1cf9a16d15506f9693338a8cd1d174e5e98805;hp=ec52a4b986ce1dacebcc83c49768c7c11d079f36;hpb=dd5116c03cafc924071ac3ee837b78cfcfb2c792;p=someplayer diff --git a/src/playerform.cpp b/src/playerform.cpp index ec52a4b..945e380 100644 --- a/src/playerform.cpp +++ b/src/playerform.cpp @@ -87,16 +87,17 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) : _model = new QStandardItemModel(0, 2, this); ui->playlistView->setModel(_model); _context_menu = new QMenu(ui->playlistView); - QAction *clear_playlist = _context_menu->addAction("Clear playlist"); - QAction *delete_action = _context_menu->addAction("Delete"); - QAction *add_to_favorites = _context_menu->addAction("Add to favorites"); - QAction *enqueue_action = _context_menu->addAction("Enqueue"); - QAction *add_to_playlists = _context_menu->addAction("Add to playlists"); - QAction *edit_tags = _context_menu->addAction("Edit tags"); + __clear_playlist = _context_menu->addAction(tr("Clear playlist")); + __delete_action = _context_menu->addAction(tr("Delete")); + __add_to_favorites = _context_menu->addAction(tr("Add to favorites")); + __enqueue_action = _context_menu->addAction(tr("Enqueue")); + __add_to_playlists = _context_menu->addAction(tr("Add to playlists")); + __edit_tags = _context_menu->addAction(tr("Edit tags")); _track_renderer = new TrackRenderer(this); _track_renderer->setActiveRow(-1); _track_renderer->setSearchRow(-1); + _track_renderer->setActiveTrackColor(config.getValue("ui/trackcolor").toString()); ui->playlistView->setItemDelegateForColumn(1, _track_renderer); ui->playlistView->setItemDelegateForColumn(0, _track_renderer); @@ -107,7 +108,7 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) : _cover->setMinimumSize(300, 300); _cover->setMaximumSize(300, 300); _cover->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - _cover->setScaledContents(true); + _cover->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); _cover->setPixmap(QPixmap::fromImage(_coverfinder->defaultCover())); connect(ui->libraryButton, SIGNAL(clicked()), this, SLOT(_library())); @@ -123,12 +124,12 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) : connect(ui->repeatButton, SIGNAL(clicked()), this, SLOT(_toggle_repeat())); connect(ui->seekSlider, SIGNAL(sliderMoved(int)), _player, SLOT(seek(int))); connect(ui->playlistView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(_custom_context_menu_requested(QPoint))); - connect(clear_playlist, SIGNAL(triggered()), this, SIGNAL(clearPlaylist())); - connect(delete_action, SIGNAL(triggered()), this, SLOT(_delete_track())); - connect(enqueue_action, SIGNAL(triggered()), this, SLOT(_enqueue_track())); - connect(add_to_favorites, SIGNAL(triggered()), this, SLOT(_add_to_favorites())); - connect(add_to_playlists, SIGNAL(triggered()), this, SLOT(_add_to_playlists())); - connect(edit_tags, SIGNAL(triggered()), this, SLOT(_edit_tags())); + connect(__clear_playlist, SIGNAL(triggered()), this, SIGNAL(clearPlaylist())); + connect(__delete_action, SIGNAL(triggered()), this, SLOT(_delete_track())); + connect(__enqueue_action, SIGNAL(triggered()), this, SLOT(_enqueue_track())); + connect(__add_to_favorites, SIGNAL(triggered()), this, SLOT(_add_to_favorites())); + connect(__add_to_playlists, SIGNAL(triggered()), this, SLOT(_add_to_playlists())); + connect(__edit_tags, SIGNAL(triggered()), this, SLOT(_edit_tags())); connect(_player, SIGNAL(stateChanged(PlayerState)), this, SLOT(_state_changed(PlayerState))); connect(_player, SIGNAL(trackDone(Track)), _lib, SLOT(updateTrackCount(Track))); connect(_tag_resolver, SIGNAL(decoded(Track)), this, SLOT(_track_decoded(Track))); @@ -147,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(); @@ -208,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); @@ -221,11 +223,13 @@ 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); + ui->playlistView->scrollTo(index, QAbstractItemView::PositionAtCenter); _track_renderer->setActiveRow(id); 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) { @@ -239,7 +243,8 @@ void PlayerForm::_display_track(Track track) { ui->seekSlider->setMinimum(0); ui->seekSlider->setMaximum(track.metadata().length()); _tick(0, track.metadata().length()); - _coverfinder->find(QFileInfo(track.source()).absolutePath()); + _coverfinder->find(track); + ui->cfavButton->setChecked(_lib->isFavorite(track) && !ui->cfavButton->icon().isNull()); } void PlayerForm::_tick(int done, int all) { @@ -259,6 +264,7 @@ void PlayerForm::_custom_context_menu_requested(const QPoint &pos) { } void PlayerForm::_delete_track() { + CONFIRM_ACTION(this, tr("Delete track?")) QList idx = ui->playlistView->selectionModel()->selectedIndexes(); if (idx.isEmpty()) return; @@ -287,8 +293,19 @@ void PlayerForm::_add_to_favorites() { if (idx.isEmpty()) return; int id = idx.first().row(); - _lib->addToFavorites(_current_playlist.tracks().at(id)); - qWarning() << "added to favorites: " << id << _current_playlist.tracks().at(id).metadata().title(); + 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")); + } + } void PlayerForm::_state_changed(PlayerState state) { @@ -342,7 +359,7 @@ void PlayerForm::nextItem() { } QModelIndex id = _model->index(_search_current_id, 1); _track_renderer->setSearchRow(_search_current_id); - ui->playlistView->scrollTo(id); + ui->playlistView->scrollTo(id, QAbstractItemView::PositionAtCenter); ui->playlistView->hide(); ui->playlistView->show(); } @@ -358,7 +375,7 @@ void PlayerForm::prevItem() { } QModelIndex id = _model->index(_search_current_id, 1); _track_renderer->setSearchRow(_search_current_id); - ui->playlistView->scrollTo(id); + ui->playlistView->scrollTo(id, QAbstractItemView::PositionAtCenter); ui->playlistView->hide(); ui->playlistView->show(); } @@ -366,7 +383,7 @@ void PlayerForm::prevItem() { void PlayerForm::cancelSearch() { _search_pattern = ""; _track_renderer->setSearchRow(-1); - ui->playlistView->scrollTo(_model->index(_track_renderer->activeRow(), 1)); + ui->playlistView->scrollTo(_model->index(_track_renderer->activeRow(), 1), QAbstractItemView::PositionAtCenter); ui->playlistView->hide(); ui->playlistView->show(); } @@ -429,34 +446,34 @@ 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); ui->controlLayout->removeItem(ui->cverticalSpacer_0); - ui->controlLayout->removeWidget(ui->titleLabel); + ui->controlLayout->removeItem(ui->titleLayout); ui->controlLayout->removeItem(ui->coverLayout); ui->controlLayout->removeItem(ui->cverticalSpacer_1); ui->controlLayout->removeItem(ui->seekLayout); ui->controlLayout->removeItem(ui->progressLayout); ui->controlLayout->removeItem(ui->cverticalSpacer_2); - ui->controlLayout->removeWidget(ui->artistAlbumLabel); + ui->controlLayout->removeItem(ui->artistAlbumLayout); ui->controlLayout->removeItem(ui->cverticalSpacer_3); ui->controlLayout->addItem(ui->countHLayout); ui->controlLayout->addItem(ui->cverticalSpacer_0); - ui->controlLayout->addWidget(ui->titleLabel); + ui->controlLayout->addItem(ui->titleLayout); ui->controlLayout->addItem(ui->cverticalSpacer_1); ui->controlLayout->addItem(ui->progressLayout); ui->controlLayout->addItem(ui->seekLayout); ui->controlLayout->addItem(ui->cverticalSpacer_2); - ui->controlLayout->addWidget(ui->artistAlbumLabel); + ui->controlLayout->addItem(ui->artistAlbumLayout); ui->controlLayout->addItem(ui->cverticalSpacer_3); ((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); @@ -479,40 +496,41 @@ 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+"/more.png")); - } else { ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/unmore.png")); + } else { + ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/more.png")); } } 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); ui->controlLayout->removeItem(ui->countHLayout); ui->controlLayout->removeItem(ui->cverticalSpacer_0); - ui->controlLayout->removeWidget(ui->titleLabel); + ui->controlLayout->removeItem(ui->titleLayout); ui->controlLayout->removeItem(ui->coverLayout); ui->controlLayout->removeItem(ui->cverticalSpacer_1); ui->controlLayout->removeItem(ui->seekLayout); ui->controlLayout->removeItem(ui->progressLayout); ui->controlLayout->removeItem(ui->cverticalSpacer_2); - ui->controlLayout->removeWidget(ui->artistAlbumLabel); + ui->controlLayout->removeItem(ui->artistAlbumLayout); ui->controlLayout->removeItem(ui->cverticalSpacer_3); ui->controlLayout->addItem(ui->countHLayout); ui->controlLayout->addItem(ui->progressLayout); ui->controlLayout->addItem(ui->seekLayout); ui->controlLayout->addItem(ui->cverticalSpacer_0); - ui->controlLayout->addWidget(ui->titleLabel); + ui->controlLayout->addItem(ui->titleLayout); ui->controlLayout->addItem(ui->coverLayout); - ui->controlLayout->addWidget(ui->artistAlbumLabel); + ui->controlLayout->addItem(ui->artistAlbumLayout); ui->controlLayout->addItem(ui->cverticalSpacer_1); ui->controlLayout->invalidate(); @@ -552,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 { @@ -561,12 +582,12 @@ void PlayerForm::portraitMode() { void PlayerForm::_tools_widget_toggle() { if (_tools_widget->isVisible()) { - ui->moreButton->setIcon(QIcon(landscape ? ":/icons/"+_icons_theme+"/unmore.png" : ":/icons/"+_icons_theme+"/more.png")); + ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/more.png")); _tools_widget->hide(); _tools_widget->reset(); cancelSearch(); } else { - ui->moreButton->setIcon(QIcon(landscape ? ":/icons/"+_icons_theme+"/more.png" : ":/icons/"+_icons_theme+"/unmore.png")); + ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/unmore.png")); _tools_widget->show(); _tools_widget->setFocus(); } @@ -594,9 +615,9 @@ void PlayerForm::updateIcons() { } ui->libraryButton->setIcon(QIcon(":/icons/"+_icons_theme+"/library.png")); if (_tools_widget->isVisible()) { - ui->moreButton->setIcon(QIcon(landscape ? ":/icons/" + _icons_theme + "/unmore.png" : ":/icons/" + _icons_theme + "/more.png")); + ui->moreButton->setIcon(QIcon(":/icons/" + _icons_theme + "/unmore.png")); } else { - ui->moreButton->setIcon(QIcon(landscape ? ":/icons/" + _icons_theme + "/more.png" : ":/icons/" + _icons_theme + "/unmore.png")); + ui->moreButton->setIcon(QIcon(":/icons/" + _icons_theme + "/more.png")); } ui->nextButton->setIcon(QIcon(":/icons/"+_icons_theme+"/next.png")); ui->stopButton->setIcon(QIcon(":/icons/"+_icons_theme+"/stop.png")); @@ -663,12 +684,12 @@ void PlayerForm::hideCountdown() { } void PlayerForm::_display_cover(QImage image) { - _cover->setPixmap(QPixmap::fromImage(image)); + QPixmap p = QPixmap::fromImage(image).scaled(_cover->width(), _cover->height(), Qt::KeepAspectRatio, Qt::SmoothTransformation); + _cover->setPixmap(p); } void PlayerForm::_c_add_to_favorites() { int id = _track_renderer->activeRow(); - qWarning() << id; if (id >= 0 && id < _current_playlist.tracks().count()) { ui->playlistView->selectRow(id); _add_to_favorites(); @@ -677,7 +698,6 @@ void PlayerForm::_c_add_to_favorites() { void PlayerForm::_c_delete_track() { int id = _track_renderer->activeRow(); - qWarning() << id; if (id >= 0 && id < _current_playlist.tracks().count()) { ui->playlistView->selectRow(id); _delete_track(); @@ -686,7 +706,6 @@ void PlayerForm::_c_delete_track() { void PlayerForm::_c_add_to_playlists() { int id = _track_renderer->activeRow(); - qWarning() << id; if (id >= 0 && id < _current_playlist.tracks().count()) { ui->playlistView->selectRow(id); _add_to_playlists(); @@ -695,7 +714,6 @@ void PlayerForm::_c_add_to_playlists() { void PlayerForm::_c_edit_tags() { int id = _track_renderer->activeRow(); - qWarning() << id; if (id >= 0 && id < _current_playlist.tracks().count()) { ui->playlistView->selectRow(id); _edit_tags(); @@ -708,6 +726,7 @@ void PlayerForm::_toggle_extra_buttons() { ui->caddButton->setEnabled(true); ui->cdeleteButton->setEnabled(true); ui->cfavButton->setEnabled(true); + ui->cfavButton->setChecked(_lib->isFavorite(_player->current())); ui->ctagButton->setEnabled(true); ui->caddButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png")); ui->cdeleteButton->setIcon(QIcon(":/icons/"+_icons_theme+"/delete.png")); @@ -717,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()); @@ -724,3 +744,45 @@ void PlayerForm::_toggle_extra_buttons() { ui->ctagButton->setIcon(QIcon()); } } + +void PlayerForm::updateTranslations() { + ui->retranslateUi(this); + __clear_playlist->setText(tr("Clear playlist")); + __delete_action->setText(tr("Delete")); + __add_to_favorites->setText(tr("Add to favorites")); + __enqueue_action->setText(tr("Enqueue")); + __add_to_playlists->setText(tr("Add to playlists")); + __edit_tags->setText(tr("Edit tags")); +} + +void PlayerForm::updateTrackColor() { + Config config; + QString color = config.getValue("ui/trackcolor").toString(); + _track_renderer->setActiveTrackColor(color); + 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); +}