X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Flibraryform.cpp;h=5fd2177f9bdabd96ca1488802d2ff1eaa8a8b47c;hb=68e7e55646f7caf47dd678a5f2f51644ddacd751;hp=f2e335b45f68af94732be1c85be08ef1fa5011a6;hpb=e0bce0a80c207c746ef2e5de527d7919e63252f7;p=someplayer diff --git a/src/libraryform.cpp b/src/libraryform.cpp index f2e335b..5fd2177 100644 --- a/src/libraryform.cpp +++ b/src/libraryform.cpp @@ -1,3 +1,22 @@ +/* + * SomePlayer - An alternate music player for Maemo 5 + * Copyright (C) 2010 Nikolay (somebody) Tischenko + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + #include "libraryform.h" #include "ui_libraryform.h" #include "library.h" @@ -46,7 +65,7 @@ LibraryForm::LibraryForm(Library *lib, QWidget *parent) : _lib = lib; _model = new QStandardItemModel(this); _state = STATE_NONE; - ui->setupUi(this); + ui->setupUi(this); connect(ui->playerButton, SIGNAL(clicked()), this, SLOT(_player())); connect(ui->viewButton, SIGNAL(clicked()), this, SLOT(_view_button())); connect(ui->playlistsButton, SIGNAL(clicked()), this, SLOT(_playlists_button())); @@ -74,17 +93,18 @@ void LibraryForm::_view_button() { __fill_model(_model, artitst); ui->listView->setModel(_model); _state = STATE_ARTIST; - ui->backButton->setEnabled(false); + ui->backButton->hide(); ui->listLabel->setText("Artists"); - ui->addButton->setEnabled(true); + ui->addButton->show(); ui->deleteButton->hide(); ui->useButton->hide(); } void LibraryForm::_dynamic_button() { ui->useButton->hide(); - ui->backButton->setEnabled(false); - ui->addButton->setEnabled(true); + ui->backButton->hide(); + ui->addButton->show(); + ui->deleteButton->hide(); _model->clear(); _model->setRowCount(4); _model->setItem(0, new QStandardItem("Favorites")); @@ -102,7 +122,7 @@ void LibraryForm::_process_list_click(QModelIndex index) { __fill_model(_model, _lib->getAlbumsForArtist(data)); _current_artist = data; _state = STATE_ALBUM; - ui->backButton->setEnabled(true); + ui->backButton->show(); ui->listLabel->setText(QString("Albums by \"%1\"").arg(_current_artist)); break; case STATE_ALBUM: @@ -110,7 +130,7 @@ void LibraryForm::_process_list_click(QModelIndex index) { _current_tracks = _lib->getTracksForAlbum(data, _current_artist); __fill_model_tracks(_model, _current_tracks); _state = STATE_TRACK; - ui->backButton->setEnabled(true); + ui->backButton->show(); ui->listLabel->setText(QString("Tracks from \"%1\" by \"%2\"").arg(_current_album).arg(_current_artist)); break; case STATE_PLAYLIST: @@ -119,7 +139,7 @@ void LibraryForm::_process_list_click(QModelIndex index) { _current_tracks = _current_playlist.tracks(); __fill_model_tracks(_model, _current_tracks); _state = STATE_PLAYLIST_TRACK; - ui->backButton->setEnabled(true); + ui->backButton->show(); ui->deleteButton->show(); ui->useButton->show(); ui->listLabel->setText(QString("Tracks in playlist \"%1\"").arg(data)); @@ -145,8 +165,9 @@ void LibraryForm::_process_list_click(QModelIndex index) { _current_tracks = _current_playlist.tracks(); __fill_model_tracks(_model, _current_tracks); _state = STATE_PLAYLIST_TRACK; - ui->backButton->setEnabled(true); + ui->backButton->show(); ui->useButton->show(); + ui->addButton->show(); ui->listLabel->setText(_current_playlist.name()); } default: @@ -243,10 +264,10 @@ void LibraryForm::_playlists_button() { __fill_model(_model, playlists); ui->listView->setModel(_model); _state = STATE_PLAYLIST; - ui->backButton->setEnabled(false); + ui->backButton->hide(); ui->listLabel->setText("Playlists"); - ui->addButton->setEnabled(false); - ui->deleteButton->hide(); + ui->addButton->hide(); + ui->deleteButton->show(); ui->useButton->hide(); } @@ -256,15 +277,33 @@ void LibraryForm::_delete_button() { ui->listView->selectionModel()->clearSelection(); QQueue to_delete; foreach (QModelIndex id, selected) { - _delete_track(_current_tracks.at(id.row())); to_delete.append(id.row()); } qSort(to_delete); int count = to_delete.count(); for (int i = count-1; i >= 0; i--) { - _current_tracks.removeAt(to_delete.at(i)); + _current_playlist.removeTrackAt(to_delete.at(i)); + qDebug() << "Removing from" << _current_playlist.name() << to_delete.at(i); } + _current_tracks = _current_playlist.tracks(); + _lib->savePlaylist(_current_playlist); __fill_model_tracks(_model, _current_tracks); + } else if (_state == STATE_PLAYLIST) { + QModelIndexList selected = ui->listView->selectionModel()->selectedIndexes(); + QQueue to_delete; + foreach (QModelIndex id, selected) { + to_delete.append(id.row()); + } + qSort(to_delete); + int count = to_delete.count(); + for (int i = count-1; i >= 0; i--) { + QString name = _model->item(to_delete.at(i))->text(); + if (name != _CURRENT_PLAYLIST_SUBST_) { + qDebug() << "deleting " << name; + _lib->removePlaylist(name); + _model->removeRow(to_delete.at(i)); + } + } } } @@ -276,4 +315,72 @@ void LibraryForm::_delete_track(Track track) { void LibraryForm::_use_button() { _lib->saveCurrentPlaylist(_current_playlist); + _current_playlist = _lib->getCurrentPlaylist(); +} + +void LibraryForm::search(QString &pattern) { + _search_pattern = pattern; + _search_current_id = -1; + nextItem(); +} + +void LibraryForm::nextItem() { + QString data = _model->index(_search_current_id, 0).data().toString(); + for (int i = _search_current_id+1; i < _model->rowCount(); i++) { + data = _model->index(i, 0).data().toString(); + if (data.contains(_search_pattern, Qt::CaseInsensitive)) { + _search_current_id = i; + break; + } + } + QModelIndex id = _model->index(_search_current_id, 0); + ui->listView->selectionModel()->clearSelection(); + ui->listView->selectionModel()->select(id, QItemSelectionModel::Select); + ui->listView->scrollTo(id); +} + +void LibraryForm::prevItem() { + QString data = _model->index(_search_current_id, 0).data().toString(); + for (int i = _search_current_id-1; i >= 0; i--) { + data = _model->index(i, 0).data().toString(); + if (data.contains(_search_pattern, Qt::CaseInsensitive)) { + _search_current_id = i; + break; + } + } + QModelIndex id = _model->index(_search_current_id, 0); + ui->listView->selectionModel()->clearSelection(); + ui->listView->selectionModel()->select(id, QItemSelectionModel::Select); + ui->listView->scrollTo(id); +} + +void LibraryForm::cancelSearch() { + _search_pattern = ""; + ui->listView->selectionModel()->clearSelection(); +} + +void LibraryForm::refresh() { + switch (_state) { + case STATE_ARTIST: + _view_button(); + break; + case STATE_ALBUM: + __fill_model(_model, _lib->getAlbumsForArtist(_current_artist)); + break; + case STATE_PLAYLIST: + _playlists_button(); + break; + case STATE_DYNAMIC: + _dynamic_button(); + break; + case STATE_PLAYLIST_TRACK: + _current_playlist = _lib->getPlaylist(_current_playlist.name()); + _current_tracks = _current_playlist.tracks(); + __fill_model_tracks(_model, _current_tracks); + break; + case STATE_TRACK: + _current_tracks = _lib->getTracksForAlbum(_current_album, _current_artist); + __fill_model_tracks(_model, _current_tracks); + break; + } }