X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fplayerform.cpp;h=a0ffb3783fa9c818969f1fe741d5011fedffdea8;hb=f5220f7e7820734fb853b1043b6f33fecc241000;hp=567f7b62aafdbaca1ed696c1b87a5be6bcb1523a;hpb=8ae9fb971616f51ee64aa623cbc93de50162a067;p=someplayer diff --git a/src/playerform.cpp b/src/playerform.cpp index 567f7b6..a0ffb37 100644 --- a/src/playerform.cpp +++ b/src/playerform.cpp @@ -39,12 +39,13 @@ inline void __fill_list(QStandardItemModel *_model, Playlist playlist) { QList tracks = playlist.tracks(); int count = tracks.count(); _model->setRowCount(count); + _model->setColumnCount(2); QTime time; for (int i = 0; i < count; i++) { TrackMetadata meta = tracks.at(i).metadata(); time.setHMS(0, meta.length()/60, meta.length() % 60); QString t = meta.title()+"#_#"+meta.artist()+"#_#"+meta.album()+"#_#"+time.toString("mm:ss"); - _model->setItem(i, 0, new QStandardItem(t)); + _model->setItem(i, 1, new QStandardItem(t)); } } @@ -70,13 +71,16 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) : } else { ui->repeatButton->setIcon(QIcon(":/icons/"+_icons_theme+"/repeat_one.png")); } - 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); + + _fscreen_button = new QPushButton(this); + _fscreen_button->setFlat(true); + _fscreen_button->setIcon(QIcon(":/icons/"+_icons_theme+"/fullscreen.png")); + _fscreen_button->setCheckable(true); + _fscreen_button->setMinimumSize(70, 70); + _fscreen_button->setMaximumSize(70, 70); + _fscreen_button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + _fscreen_button->hide(); + _tools_widget = new ToolsWidget(this); ui->toolsLayout->insertWidget(0, _tools_widget); _tools_widget->hide(); @@ -93,13 +97,22 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) : _track_renderer = new TrackRenderer(this); _track_renderer->setActiveRow(-1); _track_renderer->setSearchRow(-1); + ui->playlistView->setItemDelegateForColumn(1, _track_renderer); 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(clicked(QModelIndex)), this, SLOT(_process_click(QModelIndex))); + connect(ui->playlistView, SIGNAL(activated(QModelIndex)), this, SLOT(_process_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())); @@ -109,7 +122,6 @@ 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())); @@ -120,21 +132,44 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) : 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())); connect(_tools_widget, SIGNAL(prevSearch()), this, SLOT(prevItem())); connect(_tools_widget, SIGNAL(toggleFullscreen(bool)), this, SIGNAL(fullscreen(bool))); + 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() @@ -151,6 +186,7 @@ void PlayerForm::reload(bool reread) { _current_playlist = _lib->getCurrentPlaylist(); _player->setPlaylist(_current_playlist); __fill_list(_model, _current_playlist); + ui->playlistView->setColumnWidth(0, 50); } } @@ -159,22 +195,26 @@ void PlayerForm::_toggle_view() { index = (!index % 2); if (index) { ui->viewButton->setIcon(QIcon(":/icons/"+_icons_theme+"/playlist.png")); - ui->moreButton->setEnabled(false); + ui->moreButton->hide(); + _fscreen_button->show(); } else { ui->viewButton->setIcon(QIcon(":/icons/"+_icons_theme+"/playback.png")); - ui->moreButton->setEnabled(true); + ui->moreButton->show(); + _fscreen_button->hide(); } ui->stackedWidget->setCurrentIndex(index); } void PlayerForm::_process_click(QModelIndex index) { - int id = index.row(); - _player->stop(); - _player->setTrackId(id); - _player->play(); - _track_renderer->setActiveRow(id); - ui->playlistView->hide(); - ui->playlistView->show(); + if (index.column() == 1) { + int id = index.row(); + _player->stop(); + _player->setTrackId(id); + _player->play(); + _track_renderer->setActiveRow(id); + } else { + _custom_context_menu_requested(ui->playlistView->rect().center()); + } } void PlayerForm::_track_changed(Track track) { @@ -199,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()).absolutePath()); } void PlayerForm::_tick(int done, int all) { @@ -290,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(); @@ -306,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(); @@ -324,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(); } @@ -336,6 +377,7 @@ void PlayerForm::addFiles(QList files) { void PlayerForm::_track_decoded(Track track) { _current_playlist.addTrack(track); __fill_list(_model, _current_playlist); + ui->playlistView->setColumnWidth(0, 50); _lib->saveCurrentPlaylist(_current_playlist); _player->setPlaylist(_current_playlist); } @@ -371,6 +413,7 @@ void PlayerForm::_edit_tags() { track.setMetadata(dialog.meta()); _lib->updateTrackMetadata(track); reload(true); + emit refreshLibrary(); } } @@ -378,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(); @@ -420,8 +474,9 @@ void PlayerForm::landscapeMode() { ui->bhorizontalLayout->addWidget(ui->stopButton); ui->bhorizontalLayout->addItem(ui->chorizontalSpacer_3); 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")); @@ -431,15 +486,37 @@ void PlayerForm::landscapeMode() { } 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); @@ -453,6 +530,7 @@ void PlayerForm::portraitMode() { ui->topWidget->layout()->addWidget(ui->nextButton); ui->topWidget->layout()->addItem(ui->thorizontalSpacer_3); ui->topWidget->layout()->addWidget(ui->moreButton); + ui->topWidget->layout()->addWidget(_fscreen_button); ui->bhorizontalLayout->removeItem(ui->chorizontalSpacer_0); ui->bhorizontalLayout->removeItem(ui->chorizontalSpacer_1); ui->bhorizontalLayout->removeItem(ui->chorizontalSpacer_2); @@ -471,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")); @@ -497,6 +575,22 @@ 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")); @@ -506,7 +600,8 @@ void PlayerForm::updateIcons() { 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 { @@ -548,5 +643,79 @@ 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) { + _cover->setPixmap(QPixmap::fromImage(image)); +} + +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()); } }