X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fplayerform.cpp;h=47999d1417b4dec2d6f2b040f73d089c3df921fe;hb=d00952438c2eaa454f17c6ab840925719a057da9;hp=cfe5b1ecc06ef358d2dffa793b8bdf183f7cacc2;hpb=943cffa214b8d78ccfa15ff1bebf6057d713d25e;p=someplayer diff --git a/src/playerform.cpp b/src/playerform.cpp index cfe5b1e..47999d1 100644 --- a/src/playerform.cpp +++ b/src/playerform.cpp @@ -46,7 +46,6 @@ inline void __fill_list(QStandardItemModel *_model, Playlist playlist) { time.setHMS(0, meta.length()/60, meta.length() % 60); QString t = meta.title()+"#_#"+meta.artist()+"#_#"+meta.album()+"#_#"+time.toString("mm:ss"); _model->setItem(i, 1, new QStandardItem(t)); - _model->setItem(i, 0, new QStandardItem("")); } } @@ -82,25 +81,18 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) : _fscreen_button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); _fscreen_button->hide(); - ui->volumeSlider->setMinimum(0); - ui->volumeSlider->setMaximum(100); - ui->volumeSlider->setValue(config.getValue("playback/volume").toInt()); - _player->setVolume(ui->volumeSlider->value()); - ui->volumeSlider->hide(); - ui->seekSlider->setEnabled(false); - ui->progressLayout->removeItem(ui->seekSpacer); _tools_widget = new ToolsWidget(this); ui->toolsLayout->insertWidget(0, _tools_widget); _tools_widget->hide(); _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); @@ -109,11 +101,18 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) : ui->playlistView->setItemDelegateForColumn(0, _track_renderer); _tag_resolver = new TagResolver(this); + _coverfinder = new CoverFinder(this); + + _cover = new ClickableLabel(this); + _cover->setMinimumSize(300, 300); + _cover->setMaximumSize(300, 300); + _cover->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + _cover->setScaledContents(true); + _cover->setPixmap(QPixmap::fromImage(_coverfinder->defaultCover())); connect(ui->libraryButton, SIGNAL(clicked()), this, SLOT(_library())); connect(ui->viewButton, SIGNAL(clicked()), this, SLOT(_toggle_view())); connect(ui->playlistView, SIGNAL(activated(QModelIndex)), this, SLOT(_process_click(QModelIndex))); - connect(ui->playlistView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(_process_dbl_click(QModelIndex))); connect(ui->playpauseButton, SIGNAL(clicked()), _player, SLOT(toggle())); connect(ui->nextButton, SIGNAL(clicked()), _player, SLOT(next())); connect(ui->stopButton, SIGNAL(clicked()), _player, SLOT(stop())); @@ -123,18 +122,17 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) : connect(ui->randomButton, SIGNAL(clicked()), this, SLOT(_toggle_random())); connect(ui->repeatButton, SIGNAL(clicked()), this, SLOT(_toggle_repeat())); connect(ui->seekSlider, SIGNAL(sliderMoved(int)), _player, SLOT(seek(int))); - connect(ui->volumeSlider, SIGNAL(sliderMoved(int)), _player, SLOT(setVolume(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))); - connect(ui->volumeButton, SIGNAL(clicked()), this, SLOT(_toggle_volume())); + connect(ui->dirButton, SIGNAL(clicked()), this, SLOT(_dirview())); connect(ui->moreButton, SIGNAL(clicked()), this, SLOT(_tools_widget_toggle())); connect(_tools_widget, SIGNAL(search(QString)), this, SLOT(search(QString))); connect(_tools_widget, SIGNAL(nextSearch()), this, SLOT(nextItem())); @@ -143,15 +141,35 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) : connect(_tools_widget, SIGNAL(toggleFullscreen(bool)), _fscreen_button, SLOT(setChecked(bool))); connect(_fscreen_button, SIGNAL(clicked(bool)), this, SIGNAL(fullscreen(bool))); connect(_fscreen_button, SIGNAL(clicked(bool)), _tools_widget, SLOT(setFullscreenState(bool))); + connect(_coverfinder, SIGNAL(found(QImage)), this, SLOT(_display_cover(QImage))); + connect(ui->caddButton, SIGNAL(clicked()), this, SLOT(_c_add_to_playlists())); + connect(ui->cdeleteButton, SIGNAL(clicked()), this, SLOT(_c_delete_track())); + 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())); ui->viewButton->setIcon(QIcon(":/icons/"+_icons_theme+"/playback.png")); _top_gradient = ui->topWidget->styleSheet(); _bottom_gradient = ui->bottomWidget->styleSheet(); + ui->countdownWidget->hide(); + + // constructing cover layout + ui->coverLayout->removeItem(ui->clverticalLayout_0); + ui->coverLayout->removeItem(ui->clverticalLayout_1); + ui->coverLayout->removeItem(ui->cbverticalSpacer); + ui->coverLayout->removeItem(ui->ctverticalSpacer); + ((QGridLayout *)ui->coverLayout)->addItem(ui->ctverticalSpacer, 0, 1); + ((QGridLayout *)ui->coverLayout)->addItem(ui->cbverticalSpacer, 2, 1); + ((QGridLayout *)ui->coverLayout)->addItem(ui->clverticalLayout_0, 1, 0); + ((QGridLayout *)ui->coverLayout)->addItem(ui->clverticalLayout_1, 1, 2); + ((QGridLayout *)ui->coverLayout)->addWidget(_cover, 1, 1); + // // dbus _dbusadaptor = new DBusAdaptop(_player); QDBusConnection connection = QDBusConnection::sessionBus(); bool ret = connection.registerService(_SERVICE_NAME_); ret = connection.registerObject("/", _player); + _show_extra_buttons = false; } PlayerForm::~PlayerForm() @@ -197,8 +215,6 @@ void PlayerForm::_process_click(QModelIndex index) { } else { _custom_context_menu_requested(ui->playlistView->rect().center()); } -// ui->playlistView->hide(); -// ui->playlistView->show(); } void PlayerForm::_track_changed(Track track) { @@ -223,6 +239,7 @@ 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())); } void PlayerForm::_tick(int done, int all) { @@ -314,15 +331,15 @@ void PlayerForm::search(QString pattern) { } void PlayerForm::nextItem() { - QString data = _model->index(_search_current_id, 0).data().toString(); + QString data = _model->index(_search_current_id, 1).data().toString(); for (int i = _search_current_id+1; i < _model->rowCount(); i++) { - data = _model->index(i, 0).data().toString(); + data = _model->index(i, 1).data().toString(); if (data.contains(_search_pattern, Qt::CaseInsensitive)) { _search_current_id = i; break; } } - QModelIndex id = _model->index(_search_current_id, 0); + QModelIndex id = _model->index(_search_current_id, 1); _track_renderer->setSearchRow(_search_current_id); ui->playlistView->scrollTo(id); ui->playlistView->hide(); @@ -330,15 +347,15 @@ void PlayerForm::nextItem() { } void PlayerForm::prevItem() { - QString data = _model->index(_search_current_id, 0).data().toString(); + QString data = _model->index(_search_current_id, 1).data().toString(); for (int i = _search_current_id-1; i >= 0; i--) { - data = _model->index(i, 0).data().toString(); + data = _model->index(i, 1).data().toString(); if (data.contains(_search_pattern, Qt::CaseInsensitive)) { _search_current_id = i; break; } } - QModelIndex id = _model->index(_search_current_id, 0); + QModelIndex id = _model->index(_search_current_id, 1); _track_renderer->setSearchRow(_search_current_id); ui->playlistView->scrollTo(id); ui->playlistView->hide(); @@ -348,7 +365,7 @@ void PlayerForm::prevItem() { void PlayerForm::cancelSearch() { _search_pattern = ""; _track_renderer->setSearchRow(-1); - ui->playlistView->scrollTo(_model->index(_track_renderer->activeRow(), 0)); + ui->playlistView->scrollTo(_model->index(_track_renderer->activeRow(), 1)); ui->playlistView->hide(); ui->playlistView->show(); } @@ -404,27 +421,38 @@ void PlayerForm::stop() { _player->stop(); } -void PlayerForm::_toggle_volume() { - if (ui->volumeSlider->isVisible()) { - ui->volumeSlider->hide(); - } else { - ui->volumeSlider->show(); - ui->volumeSlider->setValue(_player->volume()); - } -} - -void PlayerForm::_volume_changed() { - int value = ui->volumeSlider->value(); - _player->setVolume(value); +void PlayerForm::_dirview() { + emit dirView(); } void PlayerForm::landscapeMode() { - ui->progressLayout->removeItem(ui->seekSpacer); - ui->progressLayout->insertWidget(1, ui->seekSlider); - ui->progressWidget->setVisible(false); - landscape = true; + 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->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->removeItem(ui->artistAlbumLayout); + ui->controlLayout->removeItem(ui->cverticalSpacer_3); + ui->controlLayout->addItem(ui->countHLayout); + ui->controlLayout->addItem(ui->cverticalSpacer_0); + 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->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(); @@ -448,25 +476,47 @@ void PlayerForm::landscapeMode() { ui->bhorizontalLayout->addWidget(ui->moreButton); ui->bhorizontalLayout->addWidget(_fscreen_button); ui->bhorizontalLayout->addItem(ui->chorizontalSpacer_4); - ui->bhorizontalLayout->addWidget(ui->volumeButton); + ui->bhorizontalLayout->addWidget(ui->dirButton); 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->progressLayout->insertSpacerItem(1, ui->seekSpacer); - ui->progressWidget->layout()->addWidget(ui->seekSlider); - ui->progressWidget->setVisible(true); - ui->topWidget->show(); ui->bottomWidget->show(); landscape = false; + 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->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->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->addItem(ui->titleLayout); + ui->controlLayout->addItem(ui->coverLayout); + ui->controlLayout->addItem(ui->artistAlbumLayout); + ui->controlLayout->addItem(ui->cverticalSpacer_1); + ui->controlLayout->invalidate(); + + ui->widget->layout()->addItem(ui->controlLayout); + ui->topWidget->layout()->removeItem(ui->thorizontalSpacer_0); ui->topWidget->layout()->removeItem(ui->thorizontalSpacer_1); ui->topWidget->layout()->removeItem(ui->thorizontalSpacer_2); @@ -499,7 +549,7 @@ void PlayerForm::portraitMode() { ui->bottomWidget->layout()->addItem(ui->bhorizontalSpacer_2); ui->bottomWidget->layout()->addWidget(ui->repeatButton); ui->bottomWidget->layout()->addItem(ui->bhorizontalSpacer_3); - ui->bottomWidget->layout()->addWidget(ui->volumeButton); + ui->bottomWidget->layout()->addWidget(ui->dirButton); if (_tools_widget->isVisible()) { ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/unmore.png")); @@ -510,12 +560,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(); } @@ -525,16 +575,33 @@ void PlayerForm::updateIcons() { Config config; _icons_theme = config.getValue("ui/iconstheme").toString(); _tools_widget->updateIcons(); + _track_renderer->updateIcons(); + if (_show_extra_buttons) { + ui->caddButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png")); + ui->cdeleteButton->setIcon(QIcon(":/icons/"+_icons_theme+"/delete.png")); + ui->cfavButton->setIcon(QIcon(":/icons/"+_icons_theme+"/fav.png")); + ui->ctagButton->setIcon(QIcon(":/icons/"+_icons_theme+"/tags.png")); + } else { + ui->caddButton->setIcon(QIcon()); + ui->cdeleteButton->setIcon(QIcon()); + ui->cfavButton->setIcon(QIcon()); + ui->ctagButton->setIcon(QIcon()); + ui->caddButton->setEnabled(false); + ui->cdeleteButton->setEnabled(false); + ui->cfavButton->setEnabled(false); + ui->ctagButton->setEnabled(false); + } 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")); ui->prevButton->setIcon(QIcon(":/icons/"+_icons_theme+"/prev.png")); - ui->volumeButton->setIcon(QIcon(":/icons/"+_icons_theme+"/volume.png")); + ui->dirButton->setIcon(QIcon(":/icons/"+_icons_theme+"/directory.png")); + if (_player->state() == PLAYER_PLAYING) { ui->playpauseButton->setIcon(QIcon(":/icons/"+_icons_theme+"/pause.png")); } else { @@ -576,9 +643,84 @@ void PlayerForm::play(Track track) { if (id >= 0) { _player->setTrackId(id); _player->play(); + } else { + _current_playlist.addTrack(track); + _lib->saveCurrentPlaylist(_current_playlist); + reload(true); + _player->setTrackId(_current_playlist.tracks().count()-1); + _player->play(); + } +} + +void PlayerForm::showCountdown(QString text) { + ui->countdownWidget->show(); + ui->timeLabel->setText(text); +} + +void PlayerForm::hideCountdown() { + ui->countdownWidget->hide(); +} + +void PlayerForm::_display_cover(QImage image) { + QPixmap p = QPixmap::fromImage(image); + _cover->setPixmap(p); +} + +void PlayerForm::_c_add_to_favorites() { + int id = _track_renderer->activeRow(); + if (id >= 0 && id < _current_playlist.tracks().count()) { + ui->playlistView->selectRow(id); + _add_to_favorites(); + } +} + +void PlayerForm::_c_delete_track() { + int id = _track_renderer->activeRow(); + if (id >= 0 && id < _current_playlist.tracks().count()) { + ui->playlistView->selectRow(id); + _delete_track(); + } +} + +void PlayerForm::_c_add_to_playlists() { + int id = _track_renderer->activeRow(); + if (id >= 0 && id < _current_playlist.tracks().count()) { + ui->playlistView->selectRow(id); + _add_to_playlists(); + } +} + +void PlayerForm::_c_edit_tags() { + int id = _track_renderer->activeRow(); + if (id >= 0 && id < _current_playlist.tracks().count()) { + ui->playlistView->selectRow(id); + _edit_tags(); + } +} + +void PlayerForm::_toggle_extra_buttons() { + _show_extra_buttons = !_show_extra_buttons; + if (_show_extra_buttons) { + ui->caddButton->setEnabled(true); + ui->cdeleteButton->setEnabled(true); + ui->cfavButton->setEnabled(true); + ui->ctagButton->setEnabled(true); + ui->caddButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png")); + ui->cdeleteButton->setIcon(QIcon(":/icons/"+_icons_theme+"/delete.png")); + ui->cfavButton->setIcon(QIcon(":/icons/"+_icons_theme+"/fav.png")); + ui->ctagButton->setIcon(QIcon(":/icons/"+_icons_theme+"/tags.png")); + } else { + ui->caddButton->setEnabled(false); + ui->cdeleteButton->setEnabled(false); + ui->cfavButton->setEnabled(false); + ui->ctagButton->setEnabled(false); + ui->caddButton->setIcon(QIcon()); + ui->cdeleteButton->setIcon(QIcon()); + ui->cfavButton->setIcon(QIcon()); + ui->ctagButton->setIcon(QIcon()); } } -void PlayerForm::_process_dbl_click(QModelIndex) { - _custom_context_menu_requested(ui->playlistView->rect().center()); +void PlayerForm::updateTranslations() { + ui->retranslateUi(this); }