aboutsummaryrefslogtreecommitdiff
path: root/src/playlistmodel.cpp
diff options
context:
space:
mode:
authorvovanec <vovanec@90c681e8-e032-0410-971d-27865f9a5e38>2007-06-24 17:15:50 +0000
committervovanec <vovanec@90c681e8-e032-0410-971d-27865f9a5e38>2007-06-24 17:15:50 +0000
commitae16fa17daef6113d0dca053f083ab41f329d8f5 (patch)
tree36782e0f2d2d8735d8659ac6dfc82c84443f21f6 /src/playlistmodel.cpp
parent2d622fd9bcb8da9dd3f3206e296cd6a701fc9d12 (diff)
downloadqmmp-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.cpp45
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()
+
+