aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/qmmpui/playlistmodel.cpp7
-rw-r--r--src/qmmpui/playlistmodel.h4
-rw-r--r--src/qmmpui/playstate.cpp50
3 files changed, 34 insertions, 27 deletions
diff --git a/src/qmmpui/playlistmodel.cpp b/src/qmmpui/playlistmodel.cpp
index 507bf6252..b7a1bdcee 100644
--- a/src/qmmpui/playlistmodel.cpp
+++ b/src/qmmpui/playlistmodel.cpp
@@ -207,6 +207,13 @@ bool PlayListModel::setCurrent(PlayListTrack *track)
return setCurrent(m_container.indexOf(track));
}
+bool PlayListModel::isTrack(int index) const
+{
+ if (index > count()-1 || index < 0)
+ return false;
+ return !m_container.item(index)->isGroup();
+}
+
bool PlayListModel::next()
{
if(m_stop_track == currentTrack())
diff --git a/src/qmmpui/playlistmodel.h b/src/qmmpui/playlistmodel.h
index 9689e505b..f0929d196 100644
--- a/src/qmmpui/playlistmodel.h
+++ b/src/qmmpui/playlistmodel.h
@@ -142,6 +142,10 @@ public:
* Returns \b true if success, otherwise returns \b false
*/
bool setCurrent(PlayListTrack *item);
+
+
+ bool isTrack(int index) const;
+
/*!
* Returns \b true if item with \b index is selected, otherwise returns \b false
*/
diff --git a/src/qmmpui/playstate.cpp b/src/qmmpui/playstate.cpp
index 6676bc074..b06f1e659 100644
--- a/src/qmmpui/playstate.cpp
+++ b/src/qmmpui/playstate.cpp
@@ -115,21 +115,22 @@ NormalPlayState::NormalPlayState(PlayListModel * model) : PlayState(model)
bool NormalPlayState::next()
{
- int item_count = m_model->items().count();
-
- if(!item_count)
+ if(!m_model->count())
return false;
- if (m_model->isRepeatableList() && m_model->currentIndex() == item_count - 1)
+ if (m_model->isRepeatableList() && m_model->currentIndex() == m_model->count() - 1)
{
- if(item_count >= 1 && m_model->track(0))
+ if(m_model->track(0))
return m_model->setCurrent(0);
- else if(item_count >= 2 && m_model->track(1))
+ else if(m_model->count() >= 2 && m_model->track(1))
return m_model->setCurrent(1);
+ else
+ return false;
}
- else if(m_model->track((m_model->currentIndex() + 1)))
+
+ if(m_model->track((m_model->currentIndex() + 1)))
return m_model->setCurrent(m_model->currentIndex() + 1);
- else if(m_model->currentIndex() + 2 >= item_count)
+ else if(m_model->currentIndex() + 2 > m_model->count() - 1)
return false;
else if(m_model->track(m_model->currentIndex() + 2))
return m_model->setCurrent(m_model->currentIndex() + 2);
@@ -138,50 +139,45 @@ bool NormalPlayState::next()
bool NormalPlayState::previous()
{
- int item_count = m_model->items().count();
-
- if(!item_count)
+ if(!m_model->count())
return false;
if(m_model->isRepeatableList())
{
- if(m_model->currentIndex() == 1 && m_model->track(0))
- return m_model->setCurrent(0);
- else if(m_model->currentIndex() == 1 && !m_model->track(0))
- return (m_model->setCurrent(m_model->currentIndex() - 1));
+ if(m_model->currentIndex() == 1 && !m_model->isTrack(0))
+ return (m_model->setCurrent(m_model->count() - 1));
else if(m_model->currentIndex() == 0)
- return m_model->setCurrent(m_model->currentIndex() - 1);
+ return m_model->setCurrent(m_model->count() - 1);
}
- if(m_model->currentIndex() == 0)
+ if(m_model->currentIndex() == 1 && !m_model->isTrack(0))
return false;
- else if(m_model->track(m_model->currentIndex() - 1))
+ else if(m_model->currentIndex() == 0)
+ return false;
+ else if(m_model->isTrack(m_model->currentIndex() - 1))
return m_model->setCurrent(m_model->currentIndex() - 1);
- else if(m_model->currentIndex() >= 2 && m_model->track(m_model->currentIndex() - 2))
+ else if(m_model->currentIndex() >= 2 && m_model->isTrack(m_model->currentIndex() - 2))
return m_model->setCurrent(m_model->currentIndex() - 2);
-
return false;
}
int NormalPlayState::nextIndex()
{
- int item_count = m_model->items().count();
- if(!item_count)
+ if(!m_model->count())
return -1;
- if (m_model->currentIndex() == item_count - 1)
+ if (m_model->currentIndex() == m_model->count() - 1)
{
if (m_model->isRepeatableList())
return 0;
else
return -1;
}
- if(m_model->track(m_model->currentIndex() + 1))
+ if(m_model->isTrack(m_model->currentIndex() + 1))
return m_model->currentIndex() + 1;
- else if(m_model->currentIndex() + 2 >= m_model->count())
+ else if(m_model->currentIndex() + 2 > m_model->count() - 1)
return -1;
- else if(m_model->track(m_model->currentIndex() + 2))
+ else if(m_model->isTrack(m_model->currentIndex() + 2))
return m_model->currentIndex() + 2;
return -1;
}
-