Suggesting default playlist name in save dialog based on playlist
authorNikolay Tischenko <niktischenko@gmail.com>
Sat, 23 Oct 2010 15:31:55 +0000 (22:31 +0700)
committerNikolay Tischenko <niktischenko@gmail.com>
Sat, 23 Oct 2010 15:31:55 +0000 (22:31 +0700)
content

src/mainwindow.cpp
src/saveplaylistdialog.cpp
src/saveplaylistdialog.h

index 214bd9e..67b1399 100644 (file)
@@ -129,7 +129,27 @@ void MainWindow::_manage_library() {
 void MainWindow::_save_playlist() {
        QList<QString> playlists = _library->getPlaylistsNames();
        playlists.removeOne(_CURRENT_PLAYLIST_SUBST_);
-       SavePlaylistDialog dialog(this);
+       Playlist cur = _library->getCurrentPlaylist();
+       // construct playlist name if possible
+       QString suggest_name;
+       QList<Track> tracks = cur.tracks();
+       QString artist = tracks.at(0).metadata().artist(), album = tracks.at(0).metadata().album();
+       foreach (Track t, tracks) {
+               if (t.metadata().album() != album)
+                       album = "";
+               if (t.metadata().artist() != artist)
+                       artist = "";
+       }
+       if (album.isEmpty() && artist.isEmpty()) {
+               suggest_name = "New playlist";
+       } else if (album.isEmpty()) {
+               suggest_name = artist;
+       } else {
+               suggest_name = QString("%1 - %2").arg(artist).arg(album);
+       }
+
+       // constructed
+       SavePlaylistDialog dialog(suggest_name, this);
        dialog.setPlaylistNames(playlists);
        if (dialog.exec() == QDialog::Accepted) {
                QString name = dialog.selectedName();
@@ -144,7 +164,6 @@ void MainWindow::_save_playlist() {
                        }
                }
                if (append) {
-                       Playlist cur = _library->getCurrentPlaylist();
                        Playlist target = _library->getPlaylist(name);
                        QList<Track> tracks = cur.tracks();
                        foreach (Track track, tracks) {
@@ -152,9 +171,8 @@ void MainWindow::_save_playlist() {
                        }
                        _library->savePlaylist(target);
                } else {
-                       Playlist playlist = _library->getCurrentPlaylist();
-                       playlist.setName(name);
-                       _library->savePlaylist(playlist);
+                       cur.setName(name);
+                       _library->savePlaylist(cur);
                }
        }
 }
index 06dfa0b..20753a2 100644 (file)
 #include "saveplaylistdialog.h"
 #include "ui_saveplaylistdialog.h"
 
-SavePlaylistDialog::SavePlaylistDialog(QWidget *parent) :
-    QDialog(parent),
-    ui(new Ui::SavePlaylistDialog)
+SavePlaylistDialog::SavePlaylistDialog(QString suggestName, QWidget *parent) :
+               QDialog(parent),
+               ui(new Ui::SavePlaylistDialog)
 {
        ui->setupUi(this);
        selectedItem = "";
        connect(ui->listWidget, SIGNAL(activated(QModelIndex)), this, SLOT(_select_item(QModelIndex)));
+       ui->lineEdit->setText(suggestName);
 }
 
 SavePlaylistDialog::~SavePlaylistDialog()
@@ -36,7 +37,6 @@ SavePlaylistDialog::~SavePlaylistDialog()
 
 void SavePlaylistDialog::setPlaylistNames(QList<QString> names) {
        ui->listWidget->addItems(names);
-       ui->lineEdit->setText("New playlist");
 }
 
 QString SavePlaylistDialog::selectedName() {
index 8479153..307f2db 100644 (file)
@@ -33,7 +33,7 @@ class SavePlaylistDialog : public QDialog
        Q_OBJECT
 
 public:
-       explicit SavePlaylistDialog(QWidget *parent = 0);
+       explicit SavePlaylistDialog(QString suggestName, QWidget *parent = 0);
        ~SavePlaylistDialog();
        void setPlaylistNames(QList<QString>);
        QString selectedName();