setupUi();
timeLcd->display("00:00");
plman.addStringList(settings.value("lastPlaylist").toStringList());
-// shuffleList = settings.value("shuffleList", QList<int>()).toList();
- QList<QVariant> tmp = settings.value("shuffleList").toList();
- for (int i = 0; i < tmp.size (); ++i)
- shuffleList.append (tmp[i].toInt());
- if (!shuffleList.size())
- setupShuffleList();
+ setupShuffleList();
int curind = settings.value("currentIndex", -1).toInt ();
if (curind >= 0)
- setItem (curind);
+ setItem (curind, false);
audioOutput->setVolume(settings.value("volume", .5).toReal());
}
settings.setValue("lastPlaylist", plman.playlistStrings());
settings.setValue("volume", audioOutput->volume());
settings.setValue("currentIndex", plman.indexOf(mediaObject->currentSource()));
- QList<QVariant> tmp;
- for (int i = 0; i < shuffleList.size(); ++i)
- tmp.append (i);
- settings.setValue("shuffleList", tmp);
+ for (int i = 0; i < musicTable->columnCount(); ++i)
+ {
+ QString lab = QString ("colWidth_%1").arg (i);
+ settings.setValue(lab, musicTable->columnWidth(i));
+ }
}
void MainWindow::addFiles()
playAction->setEnabled(false);
pauseAction->setEnabled(true);
stopAction->setEnabled(true);
+ lastPlayed = plman.indexOf(mediaObject->currentSource());
break;
case Phonon::StoppedState:
stopAction->setEnabled(false);
playAction->setVisible(true);
pauseAction->setEnabled(false);
timeLcd->display("00:00");
+ unhighlightRow(plman.indexOf(mediaObject->currentSource()));
break;
case Phonon::PausedState:
pauseAction->setEnabled(false);
qDebug () << "Queue size: " << mediaObject->queue().size ();
if (mediaObject->queue().size ())
{
- mediaObject->setCurrentSource(mediaObject->queue()[0]);
- musicTable->selectRow(plman.indexOf(mediaObject->currentSource()));
- mediaObject->play();
+/* mediaObject->setCurrentSource(mediaObject->queue()[0]);
+ musicTable->selectRow(plman.indexOf(mediaObject->currentSource()));*/
+ setItem (plman.indexOf(mediaObject->queue()[0]), true);
+// mediaObject->play();
}
mediaObject->clearQueue();
break;
bool wasPlaying = (mediaObject->state () == Phonon::PlayingState);
if (mediaObject->state () == Phonon::ErrorState)
wasPlaying = true;
- qDebug () << "NEXT, repeat=" << repeat << ", shuffle=" << shuffle;
+ qDebug () << "NEXT, repeat=" << repeat << ", shuffle=" << shuffle << ", ShuffleLis size=" << shuffleList.size ();
+ if (shuffleList.size() != plman.size())
+ qDebug () << "WHOA STRANGE SHUFFLE: " << shuffleList;
int index = plman.indexOf(mediaObject->currentSource());
qDebug () << "Current index is " << index;
if (shuffle)
qDebug () << "Shuffle next 2 " << index;
if (index < shuffleList.size ())
{
- setItem (index);
+ setItem (index, wasPlaying);
}
else if (repeat)
{
qDebug () << "Index increase 2a " << index;
index += 1;
}
- setItem (index);
+ setItem (index, wasPlaying);
}
- if (index >= shuffleList.size ())
- wasPlaying = false;
+/* if (index >= shuffleList.size ())
+ wasPlaying = false;*/
}
else
qDebug () << "Normal next 2 " << index;
if (index < plman.size())
{
- setItem (index);
+ setItem (index, wasPlaying);
}
else if (repeat)
{
index += 1;
qDebug () << "Index increase " << index;
}
- setItem (index);
+ setItem (index, wasPlaying);
}
- if (index >= shuffleList.size ())
- wasPlaying = false;
+/* if (index >= shuffleList.size ())
+ wasPlaying = false;*/
}
- if (wasPlaying)
- mediaObject->play();
+/* if (wasPlaying)
+ mediaObject->play();*/
qDebug () << "wasPlaying: " << wasPlaying << ", playbutton visible: " << playAction->isVisible();
}
-void MainWindow::setItem(int i)
+void MainWindow::setItem(int i, bool doplay)
{
- 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 (lastPlayed >= 0)
+ unhighlightRow(lastPlayed);
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);
- }
- }
+ qDebug () << "SetItem with shuffle, index = " << i << " real index is " << shuffleList[i];
+ qDebug () << "ShuffleList: " << shuffleList;
+ if (doplay)
+ highlightRow(shuffleList[i]);
mediaObject->setCurrentSource(plman.at (shuffleList[i]));
- musicTable->selectRow (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);
- }
- }
+ qDebug () << "SetItem without shuffle, index = " << i;
+ if (doplay)
+ highlightRow(i);
mediaObject->setCurrentSource(plman.at(i));
- musicTable->selectRow (i);
+// musicTable->selectRow (i);
}
}
+ if (doplay && mediaObject->currentSource().type() != Phonon::MediaSource::Invalid)
+ mediaObject->play();
}
void MainWindow::previous()
qDebug () << "Shuffle next 2 " << index;
if (index >= 0)
{
- setItem (index);
+ setItem (index, wasPlaying);
}
else if (repeat)
{
qDebug () << "Index increase 2a " << index;
index--;
}
- setItem (index);
+ setItem (index, wasPlaying);
}
- if (index < 0)
- wasPlaying = false;
+/* if (index < 0)
+ wasPlaying = false;*/
}
else
qDebug () << "Normal next 2 " << index;
if (index >= 0)
{
- setItem (index);
+ setItem (index, wasPlaying);
}
else if (repeat)
{
index--;
qDebug () << "Index increase " << index;
}
- setItem (index);
+ setItem (index, wasPlaying);
}
- if (index < 0)
- wasPlaying = false;
+/* if (index < 0)
+ wasPlaying = false;*/
}
- if (wasPlaying)
- mediaObject->play();
+/* 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)
+
+}
+
+void MainWindow::highlightRow (int i)
+{
+ for (int j = 0; j < 3; ++j)
{
- index = shuffleList.indexOf(plman.indexOf(mediaObject->currentSource())) - 1;
- if (index >= 0)
- {
- mediaObject->setCurrentSource(plman.at (shuffleList[index]));
- }
- else if (repeat)
+ QTableWidgetItem* item = musicTable->item(i, j);
+ if (item)
{
- mediaObject->setCurrentSource(plman.at (shuffleList[shuffleList.size() - 1]));
+ QFont font = item->font();
+ font.setBold(true);
+ font.setItalic(true);
+ item->setFont(font);
}
-
}
- else
+}
+
+void MainWindow::unhighlightRow (int i)
+{
+ for (int j = 0; j < 3; ++j)
{
- if (index >= 0)
- {
- mediaObject->setCurrentSource(plman.at(index));
- }
- else if (repeat)
+ QTableWidgetItem* item = musicTable->item(i, j);
+ if (item)
{
- mediaObject->setCurrentSource(plman.at(plman.size() - 1));
+ QFont font = item->font();
+ font.setBold(false);
+ font.setItalic(false);
+ item->setFont(font);
}
}
- if (wasPlaying)
- mediaObject->play();*/
-
}
+
void MainWindow::tick(qint64 time)
{
QTime displayTime(0, (time / 60000) % 60, (time / 1000) % 60);
{
if (shuffle)
index = shuffleList.indexOf(index);
- setItem (index);
- mediaObject->play();
+ setItem (index, true);
+// mediaObject->play();
}
else
{
{
if (shuffle)
index = shuffleList.indexOf(index);
- setItem (index);
- mediaObject->play();
+ setItem (index, true);
+// mediaObject->play();
}
}
aboutAction->setShortcut(tr("Ctrl+B"));
aboutQtAction = new QAction(tr("About &Qt"), this);
aboutQtAction->setShortcut(tr("Ctrl+Q"));
+/* removeSelected = new QAction (tr("&Delete from playlist"));
+ removeSelected->setShortcut(tr ("Ctrl+D"));*/
connect(playAction, SIGNAL(triggered()), mediaObject, SLOT(play()));
connect(pauseAction, SIGNAL(triggered()), mediaObject, SLOT(pause()) );
connect(repeatAction, SIGNAL(triggered()), this, SLOT(repeatToggle()));
connect(shuffleAction, SIGNAL(triggered()), this, SLOT(shuffleToggle()));
connect(volumeAction, SIGNAL(triggered()), this, SLOT(volumeToggle()));
+
connect(addFilesAction, SIGNAL(triggered()), this, SLOT(addFiles()));
connect(addFoldersAction, SIGNAL(triggered()), this, SLOT(addFolder()));
connect(addUrlAction, SIGNAL(triggered()), this, SLOT(addUrl()));
connect(exitAction, SIGNAL(triggered()), this, SLOT(close()));
connect(aboutAction, SIGNAL(triggered()), this, SLOT(about()));
connect(aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
+// connect (removeSelected, SIGNAL (triggered()), this, SLOT (removeSelectedItem()));
+}
+
+void MainWindow::removeSelectedItem()
+{
+ qDebug () << "Remove Selected!";
+ int row = musicTable->currentRow();
+ if (row >= 0)
+ plman.removeItem(row);
}
+void MainWindow::removeAllButSelectedItem()
+{
+ qDebug () << "Remove Selected!";
+ int row = musicTable->currentRow();
+ if (row >= 0)
+ {
+ QString uri = plman.getItem(row).uri;
+ QStringList lst;
+ lst << uri;
+ plman.clearPlaylist();
+ plman.addStringList(lst);
+ }
+}
void MainWindow::repeatToggle ()
{
bar->addAction(nextAction);
bar->addAction(previousAction);
-/* QLabel *volumeLabel = new QLabel;
- volumeLabel->setPixmap(QPixmap("images/volume.png"));*/
+ contextMenu = new QMenu (this);
+ removeSelected = contextMenu->addAction(tr ("Remove selected"));
+ removeAllButSelected = contextMenu->addAction(tr("Remove all but selected"));
+ connect (removeSelected, SIGNAL (triggered()), this, SLOT (removeSelectedItem()));
+ connect (removeAllButSelected, SIGNAL (triggered()), this, SLOT (removeAllButSelectedItem()));
-/* QPalette palette;
- palette.setBrush(QPalette::Light, Qt::darkGray);*/
timeLcd = new QLCDNumber;
-// timeLcd->setPalette(palette);
QStringList headers;
headers << tr("Artist") << tr("Title") << tr("Album");
this, SLOT(tableClicked(int,int)));
connect(musicTable, SIGNAL(cellClicked(int,int)),
this, SLOT(cellClicked(int,int)));
- musicTable->setSelectionBehavior(QAbstractItemView::SelectRows);
+/* for (int i = 0; i < 3; ++i)
+ {
+ if (!musicTable->horizontalHeaderItem(i))
+ continue;
+ musicTable->horizontalHeaderItem(i)->setBackgroundColor(QColor (128, 128, 255));;
+ musicTable->horizontalHeaderItem(i)->setForeground(QColor (255, 255, 255));
+ }*/
+ for (int i = 0; i < musicTable->columnCount(); ++i)
+ {
+ QString lab = QString ("colWidth_%1").arg (i);
+ int val = settings.value(lab, 0).toInt();
+ if (val)
+ musicTable->setColumnWidth(i, val);
+// settings.setValue(lab, musicTable->columnWidth(i));
+ }
+
QHBoxLayout *seekerLayout = new QHBoxLayout;
QToolBar* bar2 = new QToolBar;
QVBoxLayout *playbackLayout = new QVBoxLayout;
volumeSlider->hide ();
playbackLayout->addWidget(bar);
-// playbackLayout->addStretch();
-// playbackLayout->addWidget(volumeSlider);
-// playbackLayout->addWidget(volumeLabel);
QVBoxLayout *seekAndTableLayout = new QVBoxLayout;
void MainWindow::cellClicked(int /*row*/, int)
{
- /*if (mediaObject->state() == Phonon::PlayingState)
- {
- int index = plman.indexOf(mediaObject->currentSource());
- if (index >= 0)
- {
- musicTable->selectRow(index);
- }
- }
- else if (row < plman.size())
- {
- mediaObject->setCurrentSource(plman.at(row));
- shuffleList.removeAll(row);
- shuffleList.insert(0, row);
- qDebug () << shuffleList;
- }*/
}
+void MainWindow::contextMenuEvent (QContextMenuEvent*e)
+{
+ qDebug () << "Context menu event!";
+ contextMenu->popup(e->globalPos());
+}
+
+
void MainWindow::setupShuffleList()
{
QList<int> tmp;
tmp.removeAt(ind);
}
qDebug () << shuffleList;
- qDebug () << shuffleList;
}
void MainWindow::savePlaylist ()
{
musicTable->removeRow(musicTable->rowCount () - 1);
}
+ int firstGood = -1;
for (int i = from; i < plman.size (); ++i)
{
+ if (firstGood < 0 && plman.getItem (i).playable)
+ firstGood = i;
int currentRow = musicTable->rowCount();
musicTable->insertRow(currentRow);
setRowFromItem (currentRow, plman.getItem(i));
}
+ if (plman.indexOf(mediaObject->currentSource()) < 0)
+ {
+ setItem (firstGood, false);
+ }
setupShuffleList();
}
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);
+ {
+ setItem (index, false);
+ }
+ setRowFromItem (index, plman.getItem(index));
+ if (plman.indexOf(mediaObject->currentSource()) == index)
+ {
+ if (shuffle) index = shuffleList.indexOf(index);
+ setItem (index, false);
+ }
}