diff options
| author | vovanec <vovanec@90c681e8-e032-0410-971d-27865f9a5e38> | 2007-06-24 17:15:50 +0000 |
|---|---|---|
| committer | vovanec <vovanec@90c681e8-e032-0410-971d-27865f9a5e38> | 2007-06-24 17:15:50 +0000 |
| commit | ae16fa17daef6113d0dca053f083ab41f329d8f5 (patch) | |
| tree | 36782e0f2d2d8735d8659ac6dfc82c84443f21f6 /src/playlistmodel.cpp | |
| parent | 2d622fd9bcb8da9dd3f3206e296cd6a701fc9d12 (diff) | |
| download | qmmp-ae16fa17daef6113d0dca053f083ab41f329d8f5.tar.gz qmmp-ae16fa17daef6113d0dca053f083ab41f329d8f5.tar.bz2 qmmp-ae16fa17daef6113d0dca053f083ab41f329d8f5.zip | |
added fix for selection
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@16 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/playlistmodel.cpp')
| -rw-r--r-- | src/playlistmodel.cpp | 45 |
1 files changed, 20 insertions, 25 deletions
diff --git a/src/playlistmodel.cpp b/src/playlistmodel.cpp index f50eca956..801614fd7 100644 --- a/src/playlistmodel.cpp +++ b/src/playlistmodel.cpp @@ -202,37 +202,23 @@ void PlayListModel::setSelected ( int row, bool yes ) void PlayListModel::removeSelected() { - int i = 0; - while ( !m_files.isEmpty() && i<m_files.size() ) - { - if ( m_files.at ( i )->isSelected() ) - { - MediaFile* f = m_files.takeAt ( i ); - m_total_length -= f->length(); - if (m_total_length < 0) - m_total_length = 0; - delete f; - - if ( m_current >= i && m_current!=0 ) - m_current--; - } - else - i++; - } - if (!m_files.isEmpty()) - m_currentItem = m_files.at(m_current); - - m_play_state->prepare(); - - emit listChanged(); + removeSelection(false); } void PlayListModel::removeUnselected() { + removeSelection(true); +} + +void PlayListModel::removeSelection(bool inverted) +{ int i = 0; - while ( !m_files.isEmpty() &&i<m_files.size() ) + + int select_after_delete = -1; + + while ( !m_files.isEmpty() && i<m_files.size() ) { - if ( !m_files.at ( i )->isSelected() ) + if ( m_files.at ( i )->isSelected() ^ inverted ) { MediaFile* f = m_files.takeAt ( i ); m_total_length -= f->length(); @@ -240,6 +226,8 @@ void PlayListModel::removeUnselected() m_total_length = 0; delete f; + select_after_delete = i; + if ( m_current >= i && m_current!=0 ) m_current--; } @@ -250,6 +238,11 @@ void PlayListModel::removeUnselected() if (!m_files.isEmpty()) m_currentItem = m_files.at(m_current); + if(select_after_delete >= m_files.count()) + select_after_delete = m_files.count() - 1; + + setSelected(select_after_delete,true); + m_play_state->prepare(); emit listChanged(); @@ -819,3 +812,5 @@ void PlayListModel::preparePlayState() + + |
