aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/playlistmodel.cpp45
-rw-r--r--src/playlistmodel.h6
2 files changed, 26 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()
+
+
diff --git a/src/playlistmodel.h b/src/playlistmodel.h
index 8b520f7c0..10285ba30 100644
--- a/src/playlistmodel.h
+++ b/src/playlistmodel.h
@@ -279,6 +279,12 @@ private:
* Is someone of file loaders is running?
*/
bool isFileLoaderRunning()const;
+
+ /*!
+ * Removes items from model. If \b inverted is \b false -
+ * selected items will be removed, else - unselected.
+ */
+ void removeSelection(bool inverted = false);
private:
QList <MediaFile*> m_files;