From: tamas Date: Wed, 21 Jul 2010 22:04:03 +0000 (+0200) Subject: previous works, next has strange bug, current track marked with bold+italic text... X-Git-Url: http://git.maemo.org/git/?a=commitdiff_plain;ds=sidebyside;h=d4e5e7ffac7e825506c40ebc592b0650accd3af4;p=tomamp previous works, next has strange bug, current track marked with bold+italic text (might not be complete) --- diff --git a/mainwindow.cpp b/mainwindow.cpp index 7cc9f68..1b17c7c 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -34,7 +34,15 @@ MainWindow::MainWindow() setupUi(); timeLcd->display("00:00"); plman.addStringList(settings.value("lastPlaylist").toStringList()); - setupShuffleList(); +// shuffleList = settings.value("shuffleList", QList()).toList(); + QList tmp = settings.value("shuffleList").toList(); + for (int i = 0; i < tmp.size (); ++i) + shuffleList.append (tmp[i].toInt()); + if (!shuffleList.size()) + setupShuffleList(); + int curind = settings.value("currentIndex", -1).toInt (); + if (curind >= 0) + setItem (curind); audioOutput->setVolume(settings.value("volume", .5).toReal()); } @@ -44,6 +52,11 @@ MainWindow::~MainWindow() settings.setValue("repeat", repeat); settings.setValue("lastPlaylist", plman.playlistStrings()); settings.setValue("volume", audioOutput->volume()); + settings.setValue("currentIndex", plman.indexOf(mediaObject->currentSource())); + QList tmp; + for (int i = 0; i < shuffleList.size(); ++i) + tmp.append (i); + settings.setValue("shuffleList", tmp); } void MainWindow::addFiles() @@ -126,7 +139,7 @@ void MainWindow::stateChanged(Phonon::State newState, Phonon::State /* oldState // QMessageBox::warning(this, tr("Error"), // mediaObject->errorString()); } -// next (); + next (); break; case Phonon::PlayingState: setWindowTitle(mediaObject->metaData().value("TITLE") + " - TomAmp"); @@ -172,75 +185,190 @@ void MainWindow::next() bool wasPlaying = (mediaObject->state () == Phonon::PlayingState); if (mediaObject->state () == Phonon::ErrorState) wasPlaying = true; - qDebug () << "Getting index of current playing"; + qDebug () << "NEXT, repeat=" << repeat << ", shuffle=" << shuffle; int index = plman.indexOf(mediaObject->currentSource()); - qDebug () << "Next index is " << index; + qDebug () << "Current index is " << index; if (shuffle) { - qDebug () << "Shuffle next"; - index = shuffleList.indexOf(plman.indexOf(mediaObject->currentSource())); - do + qDebug () << "Shuffle next " << index; + index = shuffleList.indexOf(plman.indexOf(mediaObject->currentSource())) + 1; + while (index < shuffleList.size () && !plman.getItem(shuffleList[index]).playable) { index += 1; qDebug () << "Index increase a " << index; } - while (index < shuffleList.size () && !plman.getItem(index).playable); qDebug () << "Shuffle next 2 " << index; if (index < shuffleList.size ()) { - mediaObject->setCurrentSource(plman.at (shuffleList[index])); + setItem (index); } else if (repeat) { index = 0; - do + while ((index) < shuffleList.size () && !plman.getItem(shuffleList[index]).playable) { qDebug () << "Index increase 2a " << index; index += 1; } - while (index < shuffleList.size () && !plman.getItem(index).playable); - if (index < shuffleList.size ()) - mediaObject->setCurrentSource(plman.at (shuffleList[index])); + setItem (index); } + if (index >= shuffleList.size ()) + wasPlaying = false; } else { + index++; qDebug () << "Normal next"; - while ((index + 1) < plman.size ()) + while ((index) < plman.size () && !plman.getItem(index).playable) { index += 1; qDebug () << "Index increase " << index; - if (plman.getItem(index).playable) - break; } qDebug () << "Normal next 2 " << index; - if (plman.size() > index) + if (index < plman.size()) { - mediaObject->setCurrentSource(plman.at(index)); + setItem (index); } else if (repeat) { + qDebug () << "Repeat on"; index = 0; - do + while ((index) < plman.size () && !plman.getItem(index).playable) { - qDebug () << "Index increase 2 " << index; index += 1; - if (plman.getItem(index).playable) - break; + qDebug () << "Index increase " << index; } - while ((index + 1) < shuffleList.size ()); - mediaObject->setCurrentSource(plman.at(index)); + setItem (index); } + if (index >= shuffleList.size ()) + wasPlaying = false; } - musicTable->selectRow (plman.indexOf(mediaObject->currentSource())); if (wasPlaying) mediaObject->play(); + qDebug () << "wasPlaying: " << wasPlaying << ", playbutton visible: " << playAction->isVisible(); +} + +void MainWindow::setItem(int i) +{ + int curInd = plman.indexOf(mediaObject->currentSource()); + for (int j = 0; j < 3 && curInd >= 0 && curInd < shuffleList.size (); ++j) + { + QTableWidgetItem* item = musicTable->item(curInd, j); + if (item) + { + QFont font = item->font(); + font.setBold(false); + font.setItalic(false); + item->setFont(font); + } + } + if (i < plman.size() && i >= 0) + { + if (shuffle) + { + for (int j = 0; j < 3; ++j) + { + QTableWidgetItem* item = musicTable->item(shuffleList[i], j); + if (item) + { + QFont font = item->font(); + font.setBold(true); + font.setItalic(true); + item->setFont(font); + } + } + mediaObject->setCurrentSource(plman.at (shuffleList[i])); + musicTable->selectRow (shuffleList[i]); + } + else + { + for (int j = 0; j < 3; ++j) + { + QTableWidgetItem* item = musicTable->item(i, j); + if (item) + { + QFont font = item->font(); + font.setBold(true); + font.setItalic(true); + item->setFont(font); + } + } + mediaObject->setCurrentSource(plman.at(i)); + musicTable->selectRow (i); + } + } } void MainWindow::previous() { bool wasPlaying = (mediaObject->state () == Phonon::PlayingState); + if (mediaObject->state () == Phonon::ErrorState) + wasPlaying = true; + qDebug () << "PREVIOUS, repeat=" << repeat << ", shuffle=" << shuffle; + int index = plman.indexOf(mediaObject->currentSource()); + qDebug () << "Current index is " << index; + if (shuffle) + { + qDebug () << "Shuffle next"; + index = shuffleList.indexOf(plman.indexOf(mediaObject->currentSource())) - 1; + while (index >= 0 && !plman.getItem(shuffleList[index]).playable) + { + index--; + qDebug () << "Index increase a " << index; + } + qDebug () << "Shuffle next 2 " << index; + if (index >= 0) + { + setItem (index); + } + else if (repeat) + { + index = plman.size () - 1; + while (index >= 0 && !plman.getItem(shuffleList[index]).playable) + { + qDebug () << "Index increase 2a " << index; + index--; + } + setItem (index); + } + if (index < 0) + wasPlaying = false; + + } + else + { + index--; + qDebug () << "Normal next"; + while ((index) >= 0 && !plman.getItem(index).playable) + { + index--; + qDebug () << "Index increase " << index; + } + qDebug () << "Normal next 2 " << index; + if (index >= 0) + { + setItem (index); + } + else if (repeat) + { + qDebug () << "Repeat on"; + index = plman.size() - 1; + while ((index) >= 0 && !plman.getItem(index).playable) + { + index--; + qDebug () << "Index increase " << index; + } + setItem (index); + } + if (index < 0) + wasPlaying = false; + } + if (wasPlaying) + mediaObject->play(); + qDebug () << "wasPlaying: " << wasPlaying << ", playbutton visible: " << playAction->isVisible(); + +/* bool wasPlaying = (mediaObject->state () == Phonon::PlayingState); int index = plman.indexOf(mediaObject->currentSource()) - 1; if (shuffle) { @@ -267,7 +395,7 @@ void MainWindow::previous() } } if (wasPlaying) - mediaObject->play(); + mediaObject->play();*/ } @@ -282,29 +410,38 @@ void MainWindow::tableClicked(int row, int /* column */) { // bool wasPlaying = mediaObject->state() == Phonon::PlayingState; - mediaObject->stop(); - mediaObject->clearQueue(); +/* mediaObject->stop(); + mediaObject->clearQueue();*/ if (row >= plman.size()) return; int index = row; - while (index < plman.size () && !plman.getItem(index).playable) + while (index < shuffleList.size () && !plman.getItem(index).playable) { index += 1; } if (plman.size() > index) { - mediaObject->setCurrentSource(plman.at(index)); - int ind = shuffleList.indexOf(index); - shuffleList.removeAt(ind); - shuffleList.insert(0, index); - qDebug () << "Modified shuffle list: " << shuffleList; + if (shuffle) + index = shuffleList.indexOf(index); + setItem (index); mediaObject->play(); } else { - next (); + index = 0; + while (index < plman.size () && !plman.getItem(index).playable) + { + index += 1; + } + if (plman.size() > index) + { + if (shuffle) + index = shuffleList.indexOf(index); + setItem (index); + mediaObject->play(); + } } } @@ -637,4 +774,6 @@ void MainWindow::setRowFromItem (int row, const PlaylistItem& item) void MainWindow::itemUpdated(int index) { setRowFromItem (index, plman.getItem(index)); + if (plman.indexOf(mediaObject->currentSource()) < 0 && plman.getItem (index).playable) + mediaObject->setCurrentSource(plman.getItem(index).source); } diff --git a/mainwindow.h b/mainwindow.h index 2391544..ede5f62 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -92,6 +92,7 @@ private slots: void loadPlaylist (); void playlistChanged (int from); void itemUpdated (int index); + void setItem (int ind); private: void setupActions();