From b5a3d3da30e21951de62bea941882ea27f041c8a Mon Sep 17 00:00:00 2001 From: Nikolay Tischenko Date: Sat, 20 Nov 2010 03:36:10 +0600 Subject: [PATCH] Centring current track (Player) and selected element after Back button clicked (Library) --- src/libraryform.cpp | 19 ++++++++++++++----- src/libraryform.h | 3 +++ src/playerform.cpp | 8 ++++---- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/libraryform.cpp b/src/libraryform.cpp index ef93660..2406b4c 100644 --- a/src/libraryform.cpp +++ b/src/libraryform.cpp @@ -215,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(); @@ -225,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); @@ -250,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); @@ -394,12 +397,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; @@ -410,7 +417,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; } @@ -510,7 +519,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() { @@ -525,7 +534,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() { diff --git a/src/libraryform.h b/src/libraryform.h index 1483f39..2d7cba6 100644 --- a/src/libraryform.h +++ b/src/libraryform.h @@ -98,6 +98,9 @@ private: QString _icons_theme; QString _top_gradient; QString _bottom_gradient; + int _artist_row_for_scroll_to; + int _album_row_for_scroll_to; + int _playlist_row_for_scroll_to; void _add_artist(Playlist *cur, QString artist); void _add_album(Playlist *cur, QString artist, QString album); diff --git a/src/playerform.cpp b/src/playerform.cpp index e06d52c..4be237f 100644 --- a/src/playerform.cpp +++ b/src/playerform.cpp @@ -222,7 +222,7 @@ 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(); @@ -342,7 +342,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 +358,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 +366,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(); } -- 1.7.9.5