Minor bugfixes
[someplayer] / src / libraryform.cpp
index 7ccfb78..178f7df 100644 (file)
@@ -150,6 +150,7 @@ LibraryForm::LibraryForm(Library *lib, QWidget *parent) :
        _top_gradient = ui->topWidget->styleSheet();
        _bottom_gradient = ui->bottomWidget->styleSheet();
        _is_dynamic = false;
+       _is_favorites = false;
        setAttribute(Qt::WA_Maemo5StackedWindow);
        setWindowFlags(Qt::Window | windowFlags());
        ui->addButton->setEnabled(false);
@@ -214,6 +215,7 @@ void LibraryForm::_process_list_click(QModelIndex index) {
        QRegExp regexp("\\[\\d+\\]\\ (.*)");
        switch (_state) {
        case STATE_ARTIST:
+               _artist_row_for_scroll_to = index.row();
                __fill_model_album(_model, _lib->getAlbumsForArtist(data), _icons_theme);
                ui->listView->setColumnWidth(0, 70);
                ui->listView->scrollToTop();
@@ -224,6 +226,7 @@ void LibraryForm::_process_list_click(QModelIndex index) {
                ui->listLabel->setText(QString(tr("Albums by \"%1\"")).arg(_current_artist));
                break;
        case STATE_ALBUM:
+               _album_row_for_scroll_to = index.row();
                if (regexp.indexIn(data) != -1) {
                        _current_album = regexp.cap(1).trimmed();
                        _current_tracks = _lib->getTracksForAlbum(_current_album, _current_artist);
@@ -249,6 +252,7 @@ void LibraryForm::_process_list_click(QModelIndex index) {
                break;
        case STATE_PLAYLIST:
                {
+                       _playlist_row_for_scroll_to = index.row();
                        _current_playlist = _lib->getPlaylist(data);
                        _current_tracks = _current_playlist.tracks();
                        __fill_model_tracks(_model, _current_tracks, _icons_theme);
@@ -268,14 +272,19 @@ void LibraryForm::_process_list_click(QModelIndex index) {
                        switch(index.row()) {
                        case 0: //favorites
                                _current_playlist = _lib->getFavorites();
+                               _is_favorites = true;
                                break;
                        case 1: //most played
                                _current_playlist = _lib->getMostPlayed();
+                               _is_favorites = false;
                                break;
                        case 2: //never played
                                _current_playlist = _lib->getNeverPlayed();
+                               _is_favorites = false;
+                               break;
                        case 3: //recently added
                                _current_playlist = _lib->getRecentlyAdded();
+                               _is_favorites = false;
                                break;
                        default:
                                return;
@@ -339,6 +348,9 @@ void LibraryForm::_add_button() {
                _lib->saveCurrentPlaylist(cur);
                emit refreshPlayer();
                break;
+       case STATE_DYNAMIC:
+
+               break;
        case STATE_PLAYLIST_TRACK:
                foreach (QModelIndex id, selected) {
                        _add_track(&cur, _current_tracks.at(id.row()));
@@ -389,12 +401,16 @@ void LibraryForm::_back_button() {
        switch (_state) {
        case STATE_ALBUM:
                _view_button();
-               ui->listView->scrollToTop();
+               if (_model->rowCount() != 0) {
+                       ui->listView->scrollTo(_model->index(_artist_row_for_scroll_to, 1), QAbstractItemView::PositionAtCenter);
+               }
                break;
        case STATE_TRACK:
                __fill_model_album(_model, _lib->getAlbumsForArtist(_current_artist), _icons_theme);
                ui->listView->setColumnWidth(0, 70);
-               ui->listView->scrollToTop();
+               if (_model->rowCount() != 0) {
+                       ui->listView->scrollTo(_model->index(_album_row_for_scroll_to, 1), QAbstractItemView::PositionAtCenter);
+               }
                _state = STATE_ALBUM;
                ui->listLabel->setText(QString(tr("Albums by \"%1\"")).arg(_current_artist));
                break;
@@ -405,7 +421,9 @@ void LibraryForm::_back_button() {
                } else {
                        _playlists_button();
                }
-               ui->listView->scrollToTop();
+               if (_model->rowCount() != 0 && !_is_dynamic) {
+                       ui->listView->scrollTo(_model->index(_playlist_row_for_scroll_to, 1), QAbstractItemView::PositionAtCenter);
+               }
        default:
                return;
        }
@@ -438,12 +456,21 @@ void LibraryForm::_delete_button() {
                }
                qSort(to_delete);
                int count = to_delete.count();
-               for (int i = count-1; i >= 0; i--) {
-                       _current_playlist.removeTrackAt(to_delete.at(i));
+               if (_is_dynamic && _is_favorites) {
+                       _current_tracks = _lib->getFavorites().tracks();
+                       for (int i = count-1; i >= 0; i--) {
+                               _lib->removeFromFavorites(_current_tracks.at(to_delete.at(i)));
+                       }
+                       _current_playlist = _lib->getFavorites();
+                       _current_tracks = _current_playlist.tracks();
+               } else {
+                       for (int i = count-1; i >= 0; i--) {
+                               _current_playlist.removeTrackAt(to_delete.at(i));
+                       }
+                       _current_tracks = _current_playlist.tracks();
+                       _lib->savePlaylist(_current_playlist);
+                       emit refreshPlayer();
                }
-               _current_tracks = _current_playlist.tracks();
-               _lib->savePlaylist(_current_playlist);
-               emit refreshPlayer();
                __fill_model_tracks(_model, _current_tracks, _icons_theme);
                ui->listView->setColumnWidth(0, 70);
        } else if (_state == STATE_PLAYLIST) {
@@ -496,7 +523,7 @@ void LibraryForm::nextItem() {
        QModelIndex id = _model->index(_search_current_id, 1);
        ui->listView->selectionModel()->clearSelection();
        ui->listView->selectRow(id.row());
-       ui->listView->scrollTo(id);
+       ui->listView->scrollTo(id, QAbstractItemView::PositionAtCenter);
 }
 
 void LibraryForm::prevItem() {
@@ -511,7 +538,7 @@ void LibraryForm::prevItem() {
        QModelIndex id = _model->index(_search_current_id, 1);
        ui->listView->selectionModel()->clearSelection();
        ui->listView->selectRow(id.row());
-       ui->listView->scrollTo(id);
+       ui->listView->scrollTo(id, QAbstractItemView::PositionAtCenter);
 }
 
 void LibraryForm::cancelSearch() {
@@ -566,6 +593,11 @@ void LibraryForm::_toggle_select_all_button() {
                ui->selectAllButton->setIcon(QIcon(":/icons/"+_icons_theme+"/deselect_all.png"));
                ui->addButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png"));
                ui->addButton->setEnabled(true);
+               if (_state == STATE_PLAYLIST || (_state == STATE_PLAYLIST_TRACK && !_is_dynamic)
+                       || (_state == STATE_PLAYLIST_TRACK && _is_favorites)) {
+                       ui->deleteButton->setEnabled(true);
+                       ui->deleteButton->setIcon(QIcon(":/icons/"+_icons_theme+"/delete.png"));
+               }
        }
 }
 
@@ -602,6 +634,9 @@ void LibraryForm::landscapeMode() {
        ui->rverticalLayout->addItem(ui->rverticalSpacer_3);
        ui->rverticalLayout->addWidget(ui->playlistsButton);
 
+       ui->lverticalWidget->show();
+       ui->rverticalWidget->show();
+
        if (_tools_widget->isVisible()) {
                ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/more_l.png"));
        } else {
@@ -612,8 +647,8 @@ void LibraryForm::landscapeMode() {
 void LibraryForm::portraitMode() {
        landscape = false;
 
-       ui->topWidget->show();
-       ui->bottomWidget->show();
+       ui->lverticalWidget->hide();
+       ui->rverticalWidget->hide();
 
        ui->lverticalLayout->removeItem(ui->lverticalSpacer_0);
        ui->lverticalLayout->removeItem(ui->lverticalSpacer_1);
@@ -653,6 +688,9 @@ void LibraryForm::portraitMode() {
        ui->bottomWidget->layout()->addItem(ui->bhorizontalSpacer_2);
        ui->bottomWidget->layout()->addWidget(ui->playlistsButton);
 
+       ui->topWidget->show();
+       ui->bottomWidget->show();
+
        if (_tools_widget->isVisible()) {
                ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/unmore.png"));
        } else {
@@ -741,7 +779,8 @@ void LibraryForm::_process_selection(QItemSelection selected, QItemSelection des
        if (ui->listView->selectionModel()->selectedRows().count() > 0) {
                ui->addButton->setEnabled(true);
                ui->addButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png"));
-               if (_state == STATE_PLAYLIST || (_state == STATE_PLAYLIST_TRACK && !_is_dynamic)) {
+               if (_state == STATE_PLAYLIST || (_state == STATE_PLAYLIST_TRACK && !_is_dynamic)
+                       || (_state == STATE_PLAYLIST_TRACK && _is_favorites)) {
                        ui->deleteButton->setEnabled(true);
                        ui->deleteButton->setIcon(QIcon(":/icons/"+_icons_theme+"/delete.png"));
                }
@@ -814,3 +853,7 @@ void LibraryForm::_search_in_library(QString pattern) {
        ui->listView->setColumnWidth(0, 70);
        ui->listView->scrollToTop();
 }
+
+void LibraryForm::updateTranslations() {
+       ui->retranslateUi(this);
+}