From 245d0ac0cdb729c94ca71dc035342154d70aa8e5 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Mon, 5 Aug 2013 11:50:37 +0000 Subject: added playlist groups, disabled broken plugins git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@3564 90c681e8-e032-0410-971d-27865f9a5e38 --- src/qmmpui/playstate.cpp | 67 +++++++++++++++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 24 deletions(-) (limited to 'src/qmmpui/playstate.cpp') diff --git a/src/qmmpui/playstate.cpp b/src/qmmpui/playstate.cpp index e9d4c7aeb..6676bc074 100644 --- a/src/qmmpui/playstate.cpp +++ b/src/qmmpui/playstate.cpp @@ -113,56 +113,75 @@ void ShufflePlayState::resetState() NormalPlayState::NormalPlayState(PlayListModel * model) : PlayState(model) {} - bool NormalPlayState::next() { - int itm_count = m_model->items().count(); + int item_count = m_model->items().count(); - if (itm_count > 0) + if(!item_count) + return false; + + if (m_model->isRepeatableList() && m_model->currentIndex() == item_count - 1) { - if ( m_model->currentIndex() == itm_count - 1) - { - if (m_model->isRepeatableList()) - return m_model->setCurrent(0); - else - return false; - } - return m_model->setCurrent(m_model->currentIndex() + 1); + if(item_count >= 1 && m_model->track(0)) + return m_model->setCurrent(0); + else if(item_count >= 2 && m_model->track(1)) + return m_model->setCurrent(1); } - else + else if(m_model->track((m_model->currentIndex() + 1))) + return m_model->setCurrent(m_model->currentIndex() + 1); + else if(m_model->currentIndex() + 2 >= item_count) return false; + else if(m_model->track(m_model->currentIndex() + 2)) + return m_model->setCurrent(m_model->currentIndex() + 2); + return false; } bool NormalPlayState::previous() { - int itm_count = m_model->items().count(); + int item_count = m_model->items().count(); - if (itm_count > 0) + if(!item_count) + return false; + + if(m_model->isRepeatableList()) { - if ( m_model->currentIndex() < 1 && !m_model->isRepeatableList()) - return false; - else if (m_model->setCurrent(m_model->currentIndex() - 1)) - return true; - else if (m_model->isRepeatableList()) - return m_model->setCurrent(m_model->items().count() - 1); + 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)); + else if(m_model->currentIndex() == 0) + return m_model->setCurrent(m_model->currentIndex() - 1); } + if(m_model->currentIndex() == 0) + return false; + else if(m_model->track(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)) + return m_model->setCurrent(m_model->currentIndex() - 2); + return false; } int NormalPlayState::nextIndex() { - int itm_count = m_model->items().count(); - if(!itm_count) + int item_count = m_model->items().count(); + if(!item_count) return -1; - if (m_model->currentIndex() == itm_count - 1) + if (m_model->currentIndex() == item_count - 1) { if (m_model->isRepeatableList()) return 0; else return -1; } - return m_model->currentIndex() + 1; + if(m_model->track(m_model->currentIndex() + 1)) + return m_model->currentIndex() + 1; + else if(m_model->currentIndex() + 2 >= m_model->count()) + return -1; + else if(m_model->track(m_model->currentIndex() + 2)) + return m_model->currentIndex() + 2; + return -1; } -- cgit v1.2.3-13-gbd6f