+
+void MainWindow::savePlaylist ()
+{
+ QString filename = QFileDialog::getSaveFileName(this, tr("Please select file name"), "", "Playlist Files (*.m3u)");
+ plman.loadPlaylist(filename);
+}
+
+void MainWindow::loadPlaylist ()
+{
+ QString filename = QFileDialog::getOpenFileName(this, tr("Select playlist file to load"), "", "*.m3u");
+ plman.loadPlaylist (filename);
+}
+
+void MainWindow::playlistChanged(int from)
+{
+ while (musicTable->rowCount() > from)
+ {
+ musicTable->removeRow(musicTable->rowCount () - 1);
+ }
+ for (int i = from; i < plman.size (); ++i)
+ {
+ int currentRow = musicTable->rowCount();
+ musicTable->insertRow(currentRow);
+ setRowFromItem (currentRow, plman.getItem(i));
+ }
+ setupShuffleList();
+}
+
+void MainWindow::setRowFromItem (int row, const PlaylistItem& item)
+{
+ if (row >= musicTable->rowCount())
+ return;
+ if (item.artist.isEmpty() && item.title.isEmpty())
+ {
+ QTableWidgetItem *item1 = new QTableWidgetItem(item.uri);
+ item1->setFlags(item1->flags() ^ Qt::ItemIsEditable);
+ musicTable->setItem(row, 1, item1);
+ }
+ else
+ {
+ QTableWidgetItem *item1 = new QTableWidgetItem(item.artist);
+ item1->setFlags(item1->flags() ^ Qt::ItemIsEditable);
+ musicTable->setItem(row, 0, item1);
+ QTableWidgetItem *item2 = new QTableWidgetItem(item.title);
+ item2->setFlags(item2->flags() ^ Qt::ItemIsEditable);
+ musicTable->setItem(row, 1, item2);
+ QTableWidgetItem *item3 = new QTableWidgetItem(item.album);
+ item3->setFlags(item3->flags() ^ Qt::ItemIsEditable);
+ musicTable->setItem(row, 2, item3);
+ }
+}
+
+void MainWindow::itemUpdated(int index)
+{
+ setRowFromItem (index, plman.getItem(index));
+}