GUI for saving playlists

This commit is contained in:
David Sansome 2010-05-22 22:20:00 +00:00
parent 06c6bebe15
commit b487ec00ef
36 changed files with 379 additions and 251 deletions

View File

@ -1017,3 +1017,11 @@ void Playlist::set_sequence(PlaylistSequence* v) {
QSortFilterProxyModel* Playlist::proxy() const {
return proxy_;
}
SongList Playlist::GetAllSongs() const {
SongList ret;
foreach (boost::shared_ptr<PlaylistItem> item, items_) {
ret << item->Metadata();
}
return ret;
}

View File

@ -112,6 +112,8 @@ class Playlist : public QAbstractListModel {
PlaylistItem::Options current_item_options() const;
Song current_item_metadata() const;
SongList GetAllSongs() const;
void set_sequence(PlaylistSequence* v);
PlaylistSequence* sequence() const { return playlist_sequence_; }

View File

@ -34,7 +34,6 @@ const char* PlaylistContainer::kSettingsGroup = "Playlist";
PlaylistContainer::PlaylistContainer(QWidget *parent)
: QWidget(parent),
ui_(new Ui_PlaylistContainer),
parser_(new PlaylistParser(this)),
manager_(NULL),
undo_(NULL),
redo_(NULL),
@ -80,6 +79,7 @@ PlaylistContainer::PlaylistContainer(QWidget *parent)
// Connections
connect(ui_->clear, SIGNAL(clicked()), SLOT(ClearFilter()));
connect(ui_->tab_bar, SIGNAL(currentChanged(int)), SLOT(Save()));
connect(ui_->tab_bar, SIGNAL(Save(int)), SLOT(SavePlaylist(int)));
connect(ui_->filter, SIGNAL(textChanged(QString)), SLOT(UpdateFilter()));
}
@ -97,7 +97,7 @@ void PlaylistContainer::SetActions(
ui_->save->setDefaultAction(save_playlist);
ui_->load->setDefaultAction(load_playlist);
ui_->tab_bar->SetActions(new_playlist, save_playlist, load_playlist);
ui_->tab_bar->SetActions(new_playlist, load_playlist);
connect(new_playlist, SIGNAL(triggered()), SLOT(NewPlaylist()));
connect(save_playlist, SIGNAL(triggered()), SLOT(SavePlaylist()));
@ -236,28 +236,28 @@ void PlaylistContainer::LoadPlaylist() {
QString filename = settings_.value("last_load_playlist").toString();
filename = QFileDialog::getOpenFileName(
this, tr("Load playlist"), filename,
tr("Playlists (%1)").arg(parser_->filter_text()));
tr("Playlists (%1)").arg(manager_->parser()->filter_text()));
if (filename.isNull())
return;
settings_.setValue("last_load_playlist", filename);
SongList songs = parser_->Load(filename);
QFileInfo info(filename);
if (songs.isEmpty()) {
QMessageBox::information(this, tr("Error"),
tr("The playlist '%1' was empty or could not be loaded.").arg(
info.completeBaseName()));
return;
}
manager_->New(info.baseName(), songs);
manager_->Load(filename);
}
void PlaylistContainer::SavePlaylist() {
void PlaylistContainer::SavePlaylist(int id = -1) {
QString filename = settings_.value("last_save_playlist").toString();
filename = QFileDialog::getSaveFileName(
this, tr("Save playlist"), filename,
tr("Playlists (%1)").arg(manager_->parser()->filter_text()));
if (filename.isNull())
return;
settings_.setValue("last_save_playlist", filename);
manager_->Save(id == -1 ? manager_->current_id() : id, filename);
}
void PlaylistContainer::Save() {

View File

@ -24,7 +24,6 @@ class Ui_PlaylistContainer;
class Playlist;
class PlaylistManager;
class PlaylistParser;
class PlaylistView;
class QTimeLine;
@ -46,9 +45,9 @@ public:
PlaylistView* view() const;
signals:
void TabChanged(int index);
void Rename(int index, const QString& new_name);
void Remove(int index);
void TabChanged(int id);
void Rename(int id, const QString& new_name);
void Remove(int id);
void UndoRedoActionsChanged(QAction* undo, QAction* redo);
@ -60,12 +59,13 @@ private slots:
void ClearFilter();
void NewPlaylist();
void LoadPlaylist();
void SavePlaylist();
void SavePlaylist() { SavePlaylist(-1); }
void SavePlaylist(int id);
void SetViewModel(Playlist* playlist);
void PlaylistAdded(int index, const QString& name);
void PlaylistRemoved(int index);
void PlaylistRenamed(int index, const QString& new_name);
void PlaylistAdded(int id, const QString& name);
void PlaylistRemoved(int id);
void PlaylistRenamed(int id, const QString& new_name);
void ActivePlaying();
void ActivePaused();
@ -85,7 +85,6 @@ private:
private:
Ui_PlaylistContainer* ui_;
PlaylistParser* parser_;
PlaylistManager* manager_;
QAction* undo_;
QAction* redo_;

View File

@ -17,12 +17,16 @@
#include "playlist.h"
#include "playlistbackend.h"
#include "playlistmanager.h"
#include "playlistparsers/playlistparser.h"
#include <QFileInfo>
PlaylistManager::PlaylistManager(QObject *parent)
: QObject(parent),
playlist_backend_(NULL),
library_backend_(NULL),
sequence_(NULL),
parser_(new PlaylistParser(this)),
current_(-1),
active_(-1)
{
@ -85,11 +89,22 @@ void PlaylistManager::New(const QString& name, const SongList& songs) {
}
void PlaylistManager::Load(const QString& filename) {
SongList songs = parser_->Load(filename);
QFileInfo info(filename);
if (songs.isEmpty()) {
emit Error(tr("The playlist '%1' was empty or could not be loaded.").arg(
info.completeBaseName()));
return;
}
New(info.baseName(), songs);
}
void PlaylistManager::Save(int id, const QString& filename) {
Q_ASSERT(playlists_.contains(id));
parser_->Save(playlist(id)->GetAllSongs(), filename);
}
void PlaylistManager::Rename(int id, const QString& new_name) {

View File

@ -25,6 +25,7 @@
class LibraryBackend;
class Playlist;
class PlaylistBackend;
class PlaylistParser;
class PlaylistSequence;
class QModelIndex;
@ -52,6 +53,7 @@ public:
LibraryBackend* library_backend() const { return library_backend_; }
PlaylistBackend* playlist_backend() const { return playlist_backend_; }
PlaylistSequence* sequence() const { return sequence_; }
PlaylistParser* parser() const { return parser_; }
public slots:
void New(const QString& name, const SongList& songs = SongList());
@ -80,6 +82,8 @@ signals:
void CurrentChanged(Playlist* new_playlist);
void ActiveChanged(Playlist* new_playlist);
void Error(const QString& message);
// Forwarded from individual playlists
void CurrentSongChanged(const Song& song);
void PlaylistChanged();
@ -98,6 +102,7 @@ private:
PlaylistBackend* playlist_backend_;
LibraryBackend* library_backend_;
PlaylistSequence* sequence_;
PlaylistParser* parser_;
// key = id
QMap<int, Data> playlists_;

View File

@ -27,8 +27,9 @@ PlaylistTabBar::PlaylistTabBar(QWidget *parent)
menu_index_(-1),
suppress_current_changed_(false)
{
rename_ = menu_->addAction(IconLoader::Load("edit-rename"), tr("Rename playlist"), this, SLOT(Rename()));
remove_ = menu_->addAction(IconLoader::Load("list-remove"), tr("Remove playlist"), this, SLOT(Remove()));
rename_ = menu_->addAction(IconLoader::Load("edit-rename"), tr("Rename playlist..."), this, SLOT(Rename()));
save_ = menu_->addAction(IconLoader::Load("document-save"), tr("Save playlist..."), this, SLOT(Save()));
menu_->addSeparator();
connect(this, SIGNAL(currentChanged(int)), this, SLOT(CurrentIndexChanged(int)));
@ -36,9 +37,8 @@ PlaylistTabBar::PlaylistTabBar(QWidget *parent)
}
void PlaylistTabBar::SetActions(
QAction* new_playlist, QAction* save_playlist, QAction* load_playlist) {
QAction* new_playlist, QAction* load_playlist) {
menu_->insertAction(0, new_playlist);
menu_->insertAction(0, save_playlist);
menu_->insertAction(0, load_playlist);
new_ = new_playlist;
@ -48,6 +48,7 @@ void PlaylistTabBar::contextMenuEvent(QContextMenuEvent* e) {
menu_index_ = tabAt(e->pos());
rename_->setEnabled(menu_index_ != -1);
remove_->setEnabled(menu_index_ != -1 && count() > 1);
save_->setEnabled(menu_index_ != -1);
menu_->popup(e->globalPos());
}
@ -94,6 +95,13 @@ void PlaylistTabBar::Remove() {
emit Remove(tabData(menu_index_).toInt());
}
void PlaylistTabBar::Save() {
if (menu_index_ == -1)
return;
emit Save(tabData(menu_index_).toInt());
}
int PlaylistTabBar::current_id() const {
if (currentIndex() == -1)
return -1;

View File

@ -27,8 +27,7 @@ class PlaylistTabBar : public QTabBar {
public:
PlaylistTabBar(QWidget *parent = 0);
void SetActions(QAction* new_playlist, QAction* save_playlist,
QAction* load_playlist);
void SetActions(QAction* new_playlist, QAction* load_playlist);
// We use IDs to refer to tabs so the tabs can be moved around (and their
// indexes change).
@ -47,6 +46,7 @@ signals:
void CurrentIdChanged(int id);
void Rename(int id, const QString& name);
void Remove(int id);
void Save(int id);
void PlaylistOrderChanged(const QList<int>& ids);
private slots:
@ -54,6 +54,7 @@ private slots:
void Rename();
void Remove();
void TabMoved();
void Save();
protected:
void contextMenuEvent(QContextMenuEvent* e);
@ -66,6 +67,7 @@ private:
QAction* new_;
QAction* rename_;
QAction* remove_;
QAction* save_;
bool suppress_current_changed_;
};

View File

@ -41,11 +41,7 @@ bool ParserBase::ParseTrackLocation(const QString& filename_or_url,
if (QDir::isAbsolutePath(filename_or_url)) {
// Absolute path.
// Fix windows \, eg. C:\foo -> C:/foo.
QString proper_path = QDir::fromNativeSeparators(filename_or_url);
if (!QFile::exists(proper_path)) {
return false;
}
song->set_filename(proper_path);
song->set_filename(QDir::fromNativeSeparators(filename_or_url));
} else {
// Relative path.
QString proper_path = QDir::fromNativeSeparators(filename_or_url);
@ -55,3 +51,17 @@ bool ParserBase::ParseTrackLocation(const QString& filename_or_url,
song->InitFromFile(song->filename(), -1);
return true;
}
QString ParserBase::MakeRelativeTo(const QString& filename_or_url,
const QDir& dir) const {
if (filename_or_url.contains(QRegExp("^[a-z]+://")))
return filename_or_url;
if (QDir::isAbsolutePath(filename_or_url)) {
QString relative = dir.relativeFilePath(filename_or_url);
if (!relative.contains(".."))
return relative;
}
return filename_or_url;
}

View File

@ -34,8 +34,14 @@ public:
virtual void Save(const SongList& songs, QIODevice* device, const QDir& dir = QDir()) const = 0;
protected:
// Takes a URL, relative path or absolute path, and returns an absolute path.
// Resolves relative paths to "dir".
bool ParseTrackLocation(const QString& filename_or_url, const QDir& dir,
Song* song) const;
// Takes a URL, relative path or absolute path, and in the case of absolute
// paths makes them relative to dir if they are subdirectories.
QString MakeRelativeTo(const QString& filename_or_url, const QDir& dir) const;
};
#endif // PARSERBASE_H

View File

@ -83,7 +83,7 @@ void PLSParser::Save(const SongList &songs, QIODevice *device, const QDir &dir)
int n = 1;
foreach (const Song& song, songs) {
s.setValue("File" + QString::number(n), song.filename());
s.setValue("File" + QString::number(n), MakeRelativeTo(song.filename(), dir));
s.setValue("Title" + QString::number(n), song.title());
s.setValue("Length" + QString::number(n), song.length());
++n;

View File

@ -347,11 +347,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -400,12 +396,22 @@ msgstr "اظهر القسم"
msgid "Hide %1"
msgstr "أخفِ %1"
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1028,9 +1034,6 @@ msgstr ""
msgid "Ctrl+J"
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -348,11 +348,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -401,12 +397,22 @@ msgstr "Zobrazit skeci"
msgid "Hide %1"
msgstr "Skrýt %1"
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1034,9 +1040,6 @@ msgstr ""
msgid "Ctrl+J"
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -350,11 +350,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -403,12 +399,22 @@ msgstr "Vis sektion"
msgid "Hide %1"
msgstr "Skjul %1"
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1037,9 +1043,6 @@ msgstr ""
msgid "Ctrl+J"
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -347,11 +347,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -400,12 +396,22 @@ msgstr "Spalten"
msgid "Hide %1"
msgstr "%1 ausblenden"
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1035,9 +1041,6 @@ msgstr "Zum aktuellen Stück springen"
msgid "Ctrl+J"
msgstr "Strg+J"
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -350,11 +350,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -403,12 +399,22 @@ msgstr "Εμφάνιση τμήματος"
msgid "Hide %1"
msgstr "Απόκρυψη %1"
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1038,9 +1044,6 @@ msgstr "Μετάβαση στο τρέχον κομμάτι που παίζει"
msgid "Ctrl+J"
msgstr "Ctrl+J"
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -347,11 +347,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -400,12 +396,22 @@ msgstr "Show section"
msgid "Hide %1"
msgstr "Hide %1"
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1032,9 +1038,6 @@ msgstr ""
msgid "Ctrl+J"
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -353,11 +353,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -406,12 +402,22 @@ msgstr "Mostrar columna"
msgid "Hide %1"
msgstr "Ocultar %1"
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1042,9 +1048,6 @@ msgstr ""
msgid "Ctrl+J"
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -347,11 +347,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -400,12 +396,22 @@ msgstr ""
msgid "Hide %1"
msgstr "Piilota %1"
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1028,9 +1034,6 @@ msgstr ""
msgid "Ctrl+J"
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -352,11 +352,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -405,12 +401,22 @@ msgstr "Montrer la colonne"
msgid "Hide %1"
msgstr "Masquer %1"
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1040,9 +1046,6 @@ msgstr ""
msgid "Ctrl+J"
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -347,11 +347,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -400,12 +396,22 @@ msgstr "Mostrar a seczón"
msgid "Hide %1"
msgstr "Esconder %1"
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1030,9 +1036,6 @@ msgstr ""
msgid "Ctrl+J"
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -350,11 +350,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -403,12 +399,22 @@ msgstr "Mostra sezione"
msgid "Hide %1"
msgstr "Nascondi %1"
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1039,9 +1045,6 @@ msgstr "Salta alla traccia in riproduzione"
msgid "Ctrl+J"
msgstr "Ctrl+J"
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -347,11 +347,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -400,12 +396,22 @@ msgstr ""
msgid "Hide %1"
msgstr "%1 жасыру"
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1030,9 +1036,6 @@ msgstr ""
msgid "Ctrl+J"
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -348,11 +348,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -401,12 +397,22 @@ msgstr "Vis del"
msgid "Hide %1"
msgstr "Skjul %1"
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1034,9 +1040,6 @@ msgstr ""
msgid "Ctrl+J"
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -347,11 +347,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -400,12 +396,22 @@ msgstr ""
msgid "Hide %1"
msgstr "Amagar « %1 »"
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1028,9 +1034,6 @@ msgstr ""
msgid "Ctrl+J"
msgstr "Ctrl+J"
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -348,11 +348,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -401,12 +397,22 @@ msgstr "Pokaż sekcję"
msgid "Hide %1"
msgstr "Ukryj %1"
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1032,9 +1038,6 @@ msgstr ""
msgid "Ctrl+J"
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -347,11 +347,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -400,12 +396,22 @@ msgstr "Mostrar a secção"
msgid "Hide %1"
msgstr "Esconder %1"
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1035,9 +1041,6 @@ msgstr ""
msgid "Ctrl+J"
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -347,11 +347,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -400,12 +396,22 @@ msgstr ""
msgid "Hide %1"
msgstr ""
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1028,9 +1034,6 @@ msgstr ""
msgid "Ctrl+J"
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -347,11 +347,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -400,12 +396,22 @@ msgstr "Arată secțiune"
msgid "Hide %1"
msgstr "Ascunde %1"
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1029,9 +1035,6 @@ msgstr ""
msgid "Ctrl+J"
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -347,11 +347,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -400,12 +396,22 @@ msgstr "Показать секцию"
msgid "Hide %1"
msgstr "Скрыть %1"
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1034,9 +1040,6 @@ msgstr "Перейти к текущей композиции"
msgid "Ctrl+J"
msgstr "Ctrl+J"
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -348,11 +348,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -401,12 +397,22 @@ msgstr "Zobraziť stĺpec"
msgid "Hide %1"
msgstr "Skryť %1"
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1036,9 +1042,6 @@ msgstr "Preskočiť na práve prehrávanú skladbu"
msgid "Ctrl+J"
msgstr "Ctrl+J"
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -349,11 +349,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -402,12 +398,22 @@ msgstr "Visa kolumn"
msgid "Hide %1"
msgstr "Dölj %1"
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1037,9 +1043,6 @@ msgstr "Hoppa till det spår som spelas för tillfället"
msgid "Ctrl+J"
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -347,11 +347,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -400,12 +396,22 @@ msgstr ""
msgid "Hide %1"
msgstr "Gizle %1"
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1028,9 +1034,6 @@ msgstr ""
msgid "Ctrl+J"
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -338,11 +338,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -391,12 +387,22 @@ msgstr ""
msgid "Hide %1"
msgstr ""
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1019,9 +1025,6 @@ msgstr ""
msgid "Ctrl+J"
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -347,11 +347,7 @@ msgstr ""
msgid "Playlists (%1)"
msgstr ""
msgid "Error"
msgstr ""
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgid "Save playlist"
msgstr ""
msgid "ASF"
@ -400,12 +396,22 @@ msgstr ""
msgid "Hide %1"
msgstr ""
msgid "Rename playlist"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
msgid "Remove playlist"
msgstr ""
msgid "Rename playlist..."
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Rename playlist"
msgstr ""
msgid "Enter a new name for this playlist"
msgstr ""
@ -1028,9 +1034,6 @@ msgstr ""
msgid "Ctrl+J"
msgstr ""
msgid "Save playlist..."
msgstr ""
msgid "Load playlist..."
msgstr ""

View File

@ -264,6 +264,7 @@ MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidg
connect(playlists_, SIGNAL(CurrentSongChanged(Song)), player_, SLOT(CurrentMetadataChanged(Song)));
connect(playlists_, SIGNAL(PlaylistChanged()), player_, SLOT(PlaylistChanged()));
connect(playlists_, SIGNAL(EditingFinished(QModelIndex)), SLOT(PlaylistEditFinished(QModelIndex)));
connect(playlists_, SIGNAL(Error(QString)), SLOT(ReportError(QString)));
connect(ui_->playlist->view(), SIGNAL(doubleClicked(QModelIndex)), SLOT(PlayIndex(QModelIndex)));
connect(ui_->playlist->view(), SIGNAL(PlayPauseItem(QModelIndex)), SLOT(PlayIndex(QModelIndex)));