diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2009-11-12 22:00:02 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2009-11-12 22:00:02 +0000 |
| commit | 90d3aeb642ba4d6445932343010294a39b33efe2 (patch) | |
| tree | ea9380c8aa1c8086b2258a8c21e8bf6486fcc141 | |
| parent | e7115704de07fd7a4a474447b36ae2c9cc8a8f25 (diff) | |
| download | qmmp-90d3aeb642ba4d6445932343010294a39b33efe2.tar.gz qmmp-90d3aeb642ba4d6445932343010294a39b33efe2.tar.bz2 qmmp-90d3aeb642ba4d6445932343010294a39b33efe2.zip | |
added multiple playlists support
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@1363 90c681e8-e032-0410-971d-27865f9a5e38
62 files changed, 2157 insertions, 1568 deletions
diff --git a/src/plugins/General/covermanager/covermanager.cpp b/src/plugins/General/covermanager/covermanager.cpp index 5cb285f25..ab4303c8e 100644 --- a/src/plugins/General/covermanager/covermanager.cpp +++ b/src/plugins/General/covermanager/covermanager.cpp @@ -37,7 +37,7 @@ CoverManager::CoverManager(QObject *parent) : General(parent) void CoverManager::showWindow() { - QList <PlayListItem *> items = MediaPlayer::instance()->playListModel()->getSelectedItems(); + QList <PlayListItem *> items = MediaPlayer::instance()->playListManager()->selectedPlayList()->getSelectedItems(); if (!items.isEmpty()) { if (items.at(0)->url().contains("://")) diff --git a/src/plugins/General/fileops/fileops.cpp b/src/plugins/General/fileops/fileops.cpp index 62e723a89..a2cf0ee5d 100644 --- a/src/plugins/General/fileops/fileops.cpp +++ b/src/plugins/General/fileops/fileops.cpp @@ -30,6 +30,7 @@ #include <qmmp/soundcore.h> #include <qmmpui/generalhandler.h> #include <qmmpui/playlistmodel.h> +#include <qmmpui/playlistmanager.h> #include <qmmpui/playlistitem.h> #include <qmmpui/mediaplayer.h> #include "fileops.h" @@ -84,7 +85,7 @@ void FileOps::execAction(int n) QString pattern = m_patterns.at(n); QString destination = m_destinations.at(n); - PlayListModel *model = MediaPlayer::instance()->playListModel(); + PlayListModel *model = MediaPlayer::instance()->playListManager()->selectedPlayList(); QList<PlayListItem*> items = model->getSelectedItems(); switch (type) diff --git a/src/plugins/General/fileops/translations/fileops_plugin_cs.ts b/src/plugins/General/fileops/translations/fileops_plugin_cs.ts index 80cd25897..6a8220b8e 100644 --- a/src/plugins/General/fileops/translations/fileops_plugin_cs.ts +++ b/src/plugins/General/fileops/translations/fileops_plugin_cs.ts @@ -4,37 +4,37 @@ <context> <name>FileOps</name> <message> - <location filename="../fileops.cpp" line="97"/> + <location filename="../fileops.cpp" line="98"/> <source>Error</source> <translation>Chyba</translation> </message> <message> - <location filename="../fileops.cpp" line="98"/> + <location filename="../fileops.cpp" line="99"/> <source>Destination directory doesn't exist</source> <translation>Cílový adresář neexistuje</translation> </message> <message> - <location filename="../fileops.cpp" line="103"/> + <location filename="../fileops.cpp" line="104"/> <source>Copying</source> <translation>Kopíruje se</translation> </message> <message> - <location filename="../fileops.cpp" line="104"/> + <location filename="../fileops.cpp" line="105"/> <source>Stop</source> <translation>Přerušit</translation> </message> <message> - <location filename="../fileops.cpp" line="134"/> + <location filename="../fileops.cpp" line="135"/> <source>Copying file %1/%2</source> <translation>Kopíruje se soubor %1/%2</translation> </message> <message> - <location filename="../fileops.cpp" line="176"/> + <location filename="../fileops.cpp" line="177"/> <source>Remove files</source> <translation>Odstranit soubory</translation> </message> <message numerus="yes"> - <location filename="../fileops.cpp" line="177"/> + <location filename="../fileops.cpp" line="178"/> <source>Are you sure you want to remove %n file(s) from disk?</source> <translation> <numerusform>Jste si jisti, že chcete z disku odstranit %n soubor?</numerusform> diff --git a/src/plugins/General/fileops/translations/fileops_plugin_de.ts b/src/plugins/General/fileops/translations/fileops_plugin_de.ts index 4cd826e89..341477a22 100644 --- a/src/plugins/General/fileops/translations/fileops_plugin_de.ts +++ b/src/plugins/General/fileops/translations/fileops_plugin_de.ts @@ -4,37 +4,37 @@ <context> <name>FileOps</name> <message> - <location filename="../fileops.cpp" line="97"/> + <location filename="../fileops.cpp" line="98"/> <source>Error</source> <translation>Fehler</translation> </message> <message> - <location filename="../fileops.cpp" line="98"/> + <location filename="../fileops.cpp" line="99"/> <source>Destination directory doesn't exist</source> <translation>Das Zielverzeichnis existiert nicht</translation> </message> <message> - <location filename="../fileops.cpp" line="103"/> + <location filename="../fileops.cpp" line="104"/> <source>Copying</source> <translation>Kopiere</translation> </message> <message> - <location filename="../fileops.cpp" line="104"/> + <location filename="../fileops.cpp" line="105"/> <source>Stop</source> <translation>Stopp</translation> </message> <message> - <location filename="../fileops.cpp" line="134"/> + <location filename="../fileops.cpp" line="135"/> <source>Copying file %1/%2</source> <translation>Kopiere Datei %1/%2</translation> </message> <message> - <location filename="../fileops.cpp" line="176"/> + <location filename="../fileops.cpp" line="177"/> <source>Remove files</source> <translation>Dateien entfernen</translation> </message> <message numerus="yes"> - <location filename="../fileops.cpp" line="177"/> + <location filename="../fileops.cpp" line="178"/> <source>Are you sure you want to remove %n file(s) from disk?</source> <translation type="unfinished"> <numerusform></numerusform> diff --git a/src/plugins/General/fileops/translations/fileops_plugin_it.ts b/src/plugins/General/fileops/translations/fileops_plugin_it.ts index 000c64c7e..96b5634bf 100644 --- a/src/plugins/General/fileops/translations/fileops_plugin_it.ts +++ b/src/plugins/General/fileops/translations/fileops_plugin_it.ts @@ -4,37 +4,37 @@ <context> <name>FileOps</name> <message> - <location filename="../fileops.cpp" line="97"/> + <location filename="../fileops.cpp" line="98"/> <source>Error</source> <translation>Errore</translation> </message> <message> - <location filename="../fileops.cpp" line="98"/> + <location filename="../fileops.cpp" line="99"/> <source>Destination directory doesn't exist</source> <translation>Cartella di destinazione</translation> </message> <message> - <location filename="../fileops.cpp" line="103"/> + <location filename="../fileops.cpp" line="104"/> <source>Copying</source> <translation>Copia</translation> </message> <message> - <location filename="../fileops.cpp" line="104"/> + <location filename="../fileops.cpp" line="105"/> <source>Stop</source> <translation>Ferma</translation> </message> <message> - <location filename="../fileops.cpp" line="134"/> + <location filename="../fileops.cpp" line="135"/> <source>Copying file %1/%2</source> <translation>Copia del file</translation> </message> <message> - <location filename="../fileops.cpp" line="176"/> + <location filename="../fileops.cpp" line="177"/> <source>Remove files</source> <translation>Rimuovi file</translation> </message> <message numerus="yes"> - <location filename="../fileops.cpp" line="177"/> + <location filename="../fileops.cpp" line="178"/> <source>Are you sure you want to remove %n file(s) from disk?</source> <translation> <numerusform>Vuoi davvero rimuovere %n file(s) dal disco?</numerusform> diff --git a/src/plugins/General/fileops/translations/fileops_plugin_lt.ts b/src/plugins/General/fileops/translations/fileops_plugin_lt.ts index 69ac4bc3d..fb6e6bf79 100644 --- a/src/plugins/General/fileops/translations/fileops_plugin_lt.ts +++ b/src/plugins/General/fileops/translations/fileops_plugin_lt.ts @@ -4,37 +4,37 @@ <context> <name>FileOps</name> <message> - <location filename="../fileops.cpp" line="97"/> + <location filename="../fileops.cpp" line="98"/> <source>Error</source> <translation>Klaida</translation> </message> <message> - <location filename="../fileops.cpp" line="98"/> + <location filename="../fileops.cpp" line="99"/> <source>Destination directory doesn't exist</source> <translation>Aplankas neegzistuoja</translation> </message> <message> - <location filename="../fileops.cpp" line="103"/> + <location filename="../fileops.cpp" line="104"/> <source>Copying</source> <translation>Kopijuoju</translation> </message> <message> - <location filename="../fileops.cpp" line="104"/> + <location filename="../fileops.cpp" line="105"/> <source>Stop</source> <translation>Stop</translation> </message> <message> - <location filename="../fileops.cpp" line="134"/> + <location filename="../fileops.cpp" line="135"/> <source>Copying file %1/%2</source> <translation>Kopijuoju bylą %1/%2</translation> </message> <message> - <location filename="../fileops.cpp" line="176"/> + <location filename="../fileops.cpp" line="177"/> <source>Remove files</source> <translation>Ištrinti bylas</translation> </message> <message numerus="yes"> - <location filename="../fileops.cpp" line="177"/> + <location filename="../fileops.cpp" line="178"/> <source>Are you sure you want to remove %n file(s) from disk?</source> <translation type="unfinished"> <numerusform></numerusform> diff --git a/src/plugins/General/fileops/translations/fileops_plugin_pl.ts b/src/plugins/General/fileops/translations/fileops_plugin_pl.ts index 2d67a70ec..db73e9c36 100644 --- a/src/plugins/General/fileops/translations/fileops_plugin_pl.ts +++ b/src/plugins/General/fileops/translations/fileops_plugin_pl.ts @@ -4,37 +4,37 @@ <context> <name>FileOps</name> <message> - <location filename="../fileops.cpp" line="97"/> + <location filename="../fileops.cpp" line="98"/> <source>Error</source> <translation>Błąd</translation> </message> <message> - <location filename="../fileops.cpp" line="98"/> + <location filename="../fileops.cpp" line="99"/> <source>Destination directory doesn't exist</source> <translation>Katalog docelowy nie istnieje</translation> </message> <message> - <location filename="../fileops.cpp" line="103"/> + <location filename="../fileops.cpp" line="104"/> <source>Copying</source> <translation>Kopiowanie</translation> </message> <message> - <location filename="../fileops.cpp" line="104"/> + <location filename="../fileops.cpp" line="105"/> <source>Stop</source> <translation></translation> </message> <message> - <location filename="../fileops.cpp" line="134"/> + <location filename="../fileops.cpp" line="135"/> <source>Copying file %1/%2</source> <translation>Kopiowanie pliku %1/%2</translation> </message> <message> - <location filename="../fileops.cpp" line="176"/> + <location filename="../fileops.cpp" line="177"/> <source>Remove files</source> <translation>Usuń pliki</translation> </message> <message numerus="yes"> - <location filename="../fileops.cpp" line="177"/> + <location filename="../fileops.cpp" line="178"/> <source>Are you sure you want to remove %n file(s) from disk?</source> <translation> <numerusform>Czy napewno chcesz usunąć %n plik(ów) z dysku?</numerusform> diff --git a/src/plugins/General/fileops/translations/fileops_plugin_ru.ts b/src/plugins/General/fileops/translations/fileops_plugin_ru.ts index 8da9527f4..54353ecc7 100644 --- a/src/plugins/General/fileops/translations/fileops_plugin_ru.ts +++ b/src/plugins/General/fileops/translations/fileops_plugin_ru.ts @@ -4,37 +4,37 @@ <context> <name>FileOps</name> <message> - <location filename="../fileops.cpp" line="97"/> + <location filename="../fileops.cpp" line="98"/> <source>Error</source> <translation>Ошибка</translation> </message> <message> - <location filename="../fileops.cpp" line="98"/> + <location filename="../fileops.cpp" line="99"/> <source>Destination directory doesn't exist</source> <translation>Директория назначения не существует</translation> </message> <message> - <location filename="../fileops.cpp" line="103"/> + <location filename="../fileops.cpp" line="104"/> <source>Copying</source> <translation>Копирование</translation> </message> <message> - <location filename="../fileops.cpp" line="104"/> + <location filename="../fileops.cpp" line="105"/> <source>Stop</source> <translation>Остановить</translation> </message> <message> - <location filename="../fileops.cpp" line="134"/> + <location filename="../fileops.cpp" line="135"/> <source>Copying file %1/%2</source> <translation>Копирование файла %1/%2</translation> </message> <message> - <location filename="../fileops.cpp" line="176"/> + <location filename="../fileops.cpp" line="177"/> <source>Remove files</source> <translation>Удалить файлы</translation> </message> <message numerus="yes"> - <location filename="../fileops.cpp" line="177"/> + <location filename="../fileops.cpp" line="178"/> <source>Are you sure you want to remove %n file(s) from disk?</source> <translation> <numerusform>Вы уверены, что хотите удалить %n файл с диска?</numerusform> diff --git a/src/plugins/General/fileops/translations/fileops_plugin_tr.ts b/src/plugins/General/fileops/translations/fileops_plugin_tr.ts index 96df85603..88ef5d138 100644 --- a/src/plugins/General/fileops/translations/fileops_plugin_tr.ts +++ b/src/plugins/General/fileops/translations/fileops_plugin_tr.ts @@ -4,37 +4,37 @@ <context> <name>FileOps</name> <message> - <location filename="../fileops.cpp" line="97"/> + <location filename="../fileops.cpp" line="98"/> <source>Error</source> <translation>Hata</translation> </message> <message> - <location filename="../fileops.cpp" line="98"/> + <location filename="../fileops.cpp" line="99"/> <source>Destination directory doesn't exist</source> <translation>Hedef dizin mevcut değil</translation> </message> <message> - <location filename="../fileops.cpp" line="103"/> + <location filename="../fileops.cpp" line="104"/> <source>Copying</source> <translation>Kopyalıyor</translation> </message> <message> - <location filename="../fileops.cpp" line="104"/> + <location filename="../fileops.cpp" line="105"/> <source>Stop</source> <translation>Dur</translation> </message> <message> - <location filename="../fileops.cpp" line="134"/> + <location filename="../fileops.cpp" line="135"/> <source>Copying file %1/%2</source> <translation>%1/%2 dosyası kopyalanıyor</translation> </message> <message> - <location filename="../fileops.cpp" line="176"/> + <location filename="../fileops.cpp" line="177"/> <source>Remove files</source> <translation>Dosyaları kaldır</translation> </message> <message numerus="yes"> - <location filename="../fileops.cpp" line="177"/> + <location filename="../fileops.cpp" line="178"/> <source>Are you sure you want to remove %n file(s) from disk?</source> <translation type="unfinished"> <numerusform></numerusform> diff --git a/src/plugins/General/fileops/translations/fileops_plugin_uk_UA.ts b/src/plugins/General/fileops/translations/fileops_plugin_uk_UA.ts index 330683148..6f846f613 100644 --- a/src/plugins/General/fileops/translations/fileops_plugin_uk_UA.ts +++ b/src/plugins/General/fileops/translations/fileops_plugin_uk_UA.ts @@ -4,37 +4,37 @@ <context> <name>FileOps</name> <message> - <location filename="../fileops.cpp" line="97"/> + <location filename="../fileops.cpp" line="98"/> <source>Error</source> <translation>Помилка</translation> </message> <message> - <location filename="../fileops.cpp" line="98"/> + <location filename="../fileops.cpp" line="99"/> <source>Destination directory doesn't exist</source> <translation>Тека призначення не існує</translation> </message> <message> - <location filename="../fileops.cpp" line="103"/> + <location filename="../fileops.cpp" line="104"/> <source>Copying</source> <translation>Копіювання</translation> </message> <message> - <location filename="../fileops.cpp" line="104"/> + <location filename="../fileops.cpp" line="105"/> <source>Stop</source> <translation>Зупинити</translation> </message> <message> - <location filename="../fileops.cpp" line="134"/> + <location filename="../fileops.cpp" line="135"/> <source>Copying file %1/%2</source> <translation>Копіювання файла %1/%2</translation> </message> <message> - <location filename="../fileops.cpp" line="176"/> + <location filename="../fileops.cpp" line="177"/> <source>Remove files</source> <translation>Видалити файли</translation> </message> <message numerus="yes"> - <location filename="../fileops.cpp" line="177"/> + <location filename="../fileops.cpp" line="178"/> <source>Are you sure you want to remove %n file(s) from disk?</source> <translation> <numerusform>Ви дійсно бажаєте видалити %n файл(ів) з диску?</numerusform> diff --git a/src/plugins/General/fileops/translations/fileops_plugin_zh_CN.ts b/src/plugins/General/fileops/translations/fileops_plugin_zh_CN.ts index 6bbd98d7d..5223deb6d 100644 --- a/src/plugins/General/fileops/translations/fileops_plugin_zh_CN.ts +++ b/src/plugins/General/fileops/translations/fileops_plugin_zh_CN.ts @@ -4,37 +4,37 @@ <context> <name>FileOps</name> <message> - <location filename="../fileops.cpp" line="97"/> + <location filename="../fileops.cpp" line="98"/> <source>Error</source> <translation>错误</translation> </message> <message> - <location filename="../fileops.cpp" line="98"/> + <location filename="../fileops.cpp" line="99"/> <source>Destination directory doesn't exist</source> <translation>目标目录不存在</translation> </message> <message> - <location filename="../fileops.cpp" line="103"/> + <location filename="../fileops.cpp" line="104"/> <source>Copying</source> <translation>正在复制</translation> </message> <message> - <location filename="../fileops.cpp" line="104"/> + <location filename="../fileops.cpp" line="105"/> <source>Stop</source> <translation>停止</translation> </message> <message> - <location filename="../fileops.cpp" line="134"/> + <location filename="../fileops.cpp" line="135"/> <source>Copying file %1/%2</source> <translation>正在复制文件 %1/%2</translation> </message> <message> - <location filename="../fileops.cpp" line="176"/> + <location filename="../fileops.cpp" line="177"/> <source>Remove files</source> <translation>删除文件</translation> </message> <message numerus="yes"> - <location filename="../fileops.cpp" line="177"/> + <location filename="../fileops.cpp" line="178"/> <source>Are you sure you want to remove %n file(s) from disk?</source> <translation type="unfinished"> <numerusform></numerusform> diff --git a/src/plugins/General/fileops/translations/fileops_plugin_zh_TW.ts b/src/plugins/General/fileops/translations/fileops_plugin_zh_TW.ts index 013bf5e7a..2238a5356 100644 --- a/src/plugins/General/fileops/translations/fileops_plugin_zh_TW.ts +++ b/src/plugins/General/fileops/translations/fileops_plugin_zh_TW.ts @@ -4,37 +4,37 @@ <context> <name>FileOps</name> <message> - <location filename="../fileops.cpp" line="97"/> + <location filename="../fileops.cpp" line="98"/> <source>Error</source> <translation>錯誤</translation> </message> <message> - <location filename="../fileops.cpp" line="98"/> + <location filename="../fileops.cpp" line="99"/> <source>Destination directory doesn't exist</source> <translation>目標目錄早已存在</translation> </message> <message> - <location filename="../fileops.cpp" line="103"/> + <location filename="../fileops.cpp" line="104"/> <source>Copying</source> <translation>正在復制</translation> </message> <message> - <location filename="../fileops.cpp" line="104"/> + <location filename="../fileops.cpp" line="105"/> <source>Stop</source> <translation>停止</translation> </message> <message> - <location filename="../fileops.cpp" line="134"/> + <location filename="../fileops.cpp" line="135"/> <source>Copying file %1/%2</source> <translation>復制檔案 %1/%2</translation> </message> <message> - <location filename="../fileops.cpp" line="176"/> + <location filename="../fileops.cpp" line="177"/> <source>Remove files</source> <translation>刪除檔案</translation> </message> <message numerus="yes"> - <location filename="../fileops.cpp" line="177"/> + <location filename="../fileops.cpp" line="178"/> <source>Are you sure you want to remove %n file(s) from disk?</source> <translation type="unfinished"> <numerusform></numerusform> diff --git a/src/plugins/General/hal/halplugin.cpp b/src/plugins/General/hal/halplugin.cpp index 002ebc0e3..1d40e0c8b 100644 --- a/src/plugins/General/hal/halplugin.cpp +++ b/src/plugins/General/hal/halplugin.cpp @@ -23,7 +23,7 @@ #include <qmmpui/generalhandler.h> #include <qmmpui/mediaplayer.h> -#include <qmmpui/playlistmodel.h> +#include <qmmpui/playlistmanager.h> #include <qmmpui/playlistitem.h> #include <qmmp/qmmp.h> #include "haldevice.h" @@ -190,9 +190,9 @@ void HalPlugin::processAction(QAction *action) qDebug("HalPlugin: action triggered: %s", qPrintable(action->data().toString())); QString path = action->data().toString(); if (path.startsWith("cdda://")) - MediaPlayer::instance()->playListModel()->addFile(path); + MediaPlayer::instance()->playListManager()->selectedPlayList()->addFile(path); else - MediaPlayer::instance()->playListModel()->addDirectory(path); + MediaPlayer::instance()->playListManager()->selectedPlayList()->addDirectory(path); } QAction *HalPlugin::findAction(const QString &dev_path) @@ -229,7 +229,7 @@ HalDevice *HalPlugin::findDevice(QAction *action) void HalPlugin::addPath(const QString &path) { - foreach(PlayListItem *item, MediaPlayer::instance()->playListModel()->items()) // Is it already exist? + foreach(PlayListItem *item, MediaPlayer::instance()->playListManager()->selectedPlayList()->items()) // Is it already exist? { if (item->url().startsWith(path)) return; @@ -237,11 +237,11 @@ void HalPlugin::addPath(const QString &path) if (path.startsWith("cdda://") && m_addTracks) { - MediaPlayer::instance()->playListModel()->addFile(path); + MediaPlayer::instance()->playListManager()->selectedPlayList()->addFile(path); return; } else if (!path.startsWith("cdda://") && m_addFiles) - MediaPlayer::instance()->playListModel()->addDirectory(path); + MediaPlayer::instance()->playListManager()->selectedPlayList()->addDirectory(path); } void HalPlugin::removePath(const QString &path) @@ -250,7 +250,7 @@ void HalPlugin::removePath(const QString &path) (!path.startsWith("cdda://") && !m_removeFiles)) //process settings return; - PlayListModel *model = MediaPlayer::instance()->playListModel(); + PlayListModel *model = MediaPlayer::instance()->playListManager()->selectedPlayList(); int i = 0; while (model->count() > 0 && i < model->count()) diff --git a/src/plugins/General/lyrics/lyrics.cpp b/src/plugins/General/lyrics/lyrics.cpp index e0492cbf5..65ab6182a 100644 --- a/src/plugins/General/lyrics/lyrics.cpp +++ b/src/plugins/General/lyrics/lyrics.cpp @@ -23,7 +23,7 @@ #include <qmmp/soundcore.h> #include <qmmpui/generalhandler.h> -#include <qmmpui/playlistmodel.h> +#include <qmmpui/playlistmanager.h> #include <qmmpui/playlistitem.h> #include <qmmpui/mediaplayer.h> #include "lyricswindow.h" @@ -43,7 +43,8 @@ Lyrics::~Lyrics() void Lyrics::showLyrics() { - QList <PlayListItem *> items = MediaPlayer::instance()->playListModel()->getSelectedItems(); + PlayListManager *pl_manager = MediaPlayer::instance()->playListManager(); + QList <PlayListItem *> items = pl_manager->selectedPlayList()->getSelectedItems(); if (!items.isEmpty()) { if (items.at(0)->artist().isEmpty() || items.at(0)->title().isEmpty()) diff --git a/src/plugins/General/mpris/playerobject.cpp b/src/plugins/General/mpris/playerobject.cpp index 894b68617..d7166e964 100644 --- a/src/plugins/General/mpris/playerobject.cpp +++ b/src/plugins/General/mpris/playerobject.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008 by Ilya Kotov * + * Copyright (C) 2008-2009 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -24,7 +24,7 @@ #include <qmmp/soundcore.h> #include <qmmp/metadatamanager.h> #include <qmmpui/mediaplayer.h> -#include <qmmpui/playlistmodel.h> +#include <qmmpui/playlistmanager.h> #include "playerobject.h" @@ -53,18 +53,17 @@ const QDBusArgument &operator >> (const QDBusArgument &arg, PlayerStatus &status return arg; } -PlayerObject::PlayerObject(QObject *parent) - : QObject(parent) +PlayerObject::PlayerObject(QObject *parent) : QObject(parent) { qDBusRegisterMetaType<PlayerStatus>(); m_core = SoundCore::instance(); m_player = MediaPlayer::instance(); - m_model = m_player->playListModel(); + m_pl_manager = m_player->playListManager(); connect(m_core, SIGNAL(stateChanged (Qmmp::State)), SLOT(updateCaps())); connect(m_core, SIGNAL(metaDataChanged ()), SLOT(updateTrack())); connect(m_core, SIGNAL(stateChanged (Qmmp::State)), SLOT(updateStatus())); - connect(m_model, SIGNAL(repeatableListChanged(bool)), SLOT(updateStatus())); - connect(m_model, SIGNAL(shuffleChanged(bool)), SLOT(updateStatus())); + connect(m_pl_manager, SIGNAL(repeatableListChanged(bool)), SLOT(updateStatus())); + connect(m_pl_manager, SIGNAL(shuffleChanged(bool)), SLOT(updateStatus())); connect(m_player, SIGNAL(repeatableChanged(bool)), SLOT(updateStatus())); } @@ -118,9 +117,9 @@ PlayerStatus PlayerObject::GetStatus() case Qmmp::Paused: st.state = 1; }; - st.random = int(m_model->isShuffle()); + st.random = int(m_pl_manager->isShuffle()); st.repeat = int(m_player->isRepeatable()); - st.repeatPlayList = int(m_model->isRepeatableList()); + st.repeatPlayList = int(m_pl_manager->isRepeatableList()); return st; } diff --git a/src/plugins/General/mpris/playerobject.h b/src/plugins/General/mpris/playerobject.h index dbd7e771c..709357387 100644 --- a/src/plugins/General/mpris/playerobject.h +++ b/src/plugins/General/mpris/playerobject.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008 by Ilya Kotov * + * Copyright (C) 2008-2009 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -25,7 +25,7 @@ class SoundCore; class MediaPlayer; -class PlayListModel; +class PlayListManager; /** @author Ilya Kotov <forkotov02@hotmail.ru> @@ -94,7 +94,7 @@ private slots: private: SoundCore *m_core; MediaPlayer *m_player; - PlayListModel *m_model; + PlayListManager *m_pl_manager; }; diff --git a/src/plugins/General/mpris/tracklistobject.cpp b/src/plugins/General/mpris/tracklistobject.cpp index 6b3699a0c..3ca1830ba 100644 --- a/src/plugins/General/mpris/tracklistobject.cpp +++ b/src/plugins/General/mpris/tracklistobject.cpp @@ -21,18 +21,20 @@ #include <QFile> #include <QUrl> -#include <qmmpui/playlistmodel.h> +#include <qmmpui/playlistmanager.h> #include <qmmpui/mediaplayer.h> #include <qmmpui/playlistitem.h> #include "tracklistobject.h" -TrackListObject::TrackListObject(QObject *parent) - : QObject(parent) +TrackListObject::TrackListObject(QObject *parent) : QObject(parent) { m_player = MediaPlayer::instance(); - m_model = m_player->playListModel(); + m_pl_manager = m_player->playListManager(); + m_model = m_pl_manager->currentPlayList(); connect (m_model, SIGNAL(listChanged()), SLOT(updateTrackList())); + connect (m_pl_manager, SIGNAL(currentPlayListChanged(PlayListModel*,PlayListModel*)), + SLOT(switchPlayList(PlayListModel*,PlayListModel*))); } @@ -111,3 +113,12 @@ void TrackListObject::updateTrackList() { emit TrackListChange(m_model->count()); } + +void TrackListObject::switchPlayList(PlayListModel *cur, PlayListModel *prev) +{ + m_model = cur; + connect (m_model, SIGNAL(listChanged()), SLOT(updateTrackList())); + if(prev) + disconnect(prev,0,this,0); + updateTrackList(); +} diff --git a/src/plugins/General/mpris/tracklistobject.h b/src/plugins/General/mpris/tracklistobject.h index 856ebd5df..0004f25b9 100644 --- a/src/plugins/General/mpris/tracklistobject.h +++ b/src/plugins/General/mpris/tracklistobject.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008 by Ilya Kotov * + * Copyright (C) 2008-2009 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -25,6 +25,7 @@ #include <QVariantMap> class PlayListModel; +class PlayListManager; class MediaPlayer; /** @@ -54,9 +55,11 @@ signals: private slots: void updateTrackList(); + void switchPlayList(PlayListModel *cur, PlayListModel *prev); private: PlayListModel *m_model; + PlayListManager *m_pl_manager; MediaPlayer *m_player; }; diff --git a/src/qmmpui/CMakeLists.txt b/src/qmmpui/CMakeLists.txt index af54b4145..84b640b7a 100644 --- a/src/qmmpui/CMakeLists.txt +++ b/src/qmmpui/CMakeLists.txt @@ -38,6 +38,7 @@ SET(libqmmpui_SRCS playlistsettings.cpp detailsdialog.cpp tageditor.cpp + playlistmanager.cpp ) SET(libqmmpui_MOC_HDRS @@ -60,6 +61,7 @@ SET(libqmmpui_MOC_HDRS playlistsettings.h detailsdialog.h tageditor.h + playlistmanager.h ) SET(libqmmpui_DEVEL_HDRS @@ -78,6 +80,7 @@ SET(libqmmpui_DEVEL_HDRS playlistparser.h detailsdialog.h tageditor.h + playlistmanager.h ) diff --git a/src/qmmpui/mediaplayer.cpp b/src/qmmpui/mediaplayer.cpp index 0d47dd257..d50cea3ce 100644 --- a/src/qmmpui/mediaplayer.cpp +++ b/src/qmmpui/mediaplayer.cpp @@ -22,11 +22,7 @@ #include <QString> #include <QTranslator> #include <QLocale> - -#include <qmmp/soundcore.h> -#include "playlistmodel.h" #include "playlistitem.h" - #include "mediaplayer.h" #define MAX_SKIPS 5 @@ -37,7 +33,7 @@ MediaPlayer::MediaPlayer(QObject *parent) : QObject(parent) { m_instance = this; - m_model = 0; + m_pl_manager = 0; m_core = 0; m_skips = 0; m_repeat = FALSE; @@ -47,7 +43,6 @@ MediaPlayer::MediaPlayer(QObject *parent) qApp->installTranslator(translator); } - MediaPlayer::~MediaPlayer() {} @@ -56,20 +51,20 @@ MediaPlayer* MediaPlayer::instance() return m_instance; } -void MediaPlayer::initialize(SoundCore *core, PlayListModel *model) +void MediaPlayer::initialize(SoundCore *core, PlayListManager *pl_manager) { Q_CHECK_PTR(core); - Q_CHECK_PTR(model); + Q_CHECK_PTR(m_pl_manager); m_core = core; - m_model = model; + m_pl_manager = pl_manager; m_repeat = FALSE; connect(m_core, SIGNAL(aboutToFinish()), SLOT(updateNextUrl())); connect(m_core, SIGNAL(finished()), SLOT(next())); } -PlayListModel *MediaPlayer::playListModel() +PlayListManager *MediaPlayer::playListManager() { - return m_model; + return m_pl_manager; } bool MediaPlayer::isRepeatable() const @@ -79,17 +74,17 @@ bool MediaPlayer::isRepeatable() const void MediaPlayer::play() { - m_model->doCurrentVisibleRequest(); + m_pl_manager->currentPlayList()->doCurrentVisibleRequest(); if (m_core->state() == Qmmp::Paused) { m_core->pause(); return; } - if (m_model->count() == 0) + if (m_pl_manager->currentPlayList()->count() == 0) return; - QString s = m_model->currentItem()->url(); + QString s = m_pl_manager->currentPlayList()->currentItem()->url(); if (s.isEmpty()) { m_nextUrl.clear(); @@ -122,11 +117,11 @@ void MediaPlayer::play() break; } qApp->processEvents(); - if (!m_model->isEmptyQueue()) + if (!m_pl_manager->currentPlayList()->isEmptyQueue()) { - m_model->setCurrentToQueued(); + m_pl_manager->currentPlayList()->setCurrentToQueued(); } - else if (!m_model->next()) + else if (!m_pl_manager->currentPlayList()->next()) { stop(); return; @@ -148,11 +143,11 @@ void MediaPlayer::stop() void MediaPlayer::next() { - if (!m_model->isEmptyQueue()) + if (!m_pl_manager->currentPlayList()->isEmptyQueue()) { - m_model->setCurrentToQueued(); + m_pl_manager->currentPlayList()->setCurrentToQueued(); } - else if (!m_model->next()) + else if (!m_pl_manager->currentPlayList()->next()) { stop(); return; @@ -168,7 +163,7 @@ void MediaPlayer::next() void MediaPlayer::previous() { - if (!m_model->previous()) + if (!m_pl_manager->currentPlayList()->previous()) { stop(); return; @@ -200,10 +195,10 @@ void MediaPlayer::setRepeatable(bool r) void MediaPlayer::updateNextUrl() { - if(m_model->nextItem() && !isRepeatable()) + if(m_pl_manager->currentPlayList()->nextItem() && !isRepeatable()) { - m_core->play(m_model->nextItem()->url(), TRUE); - m_nextUrl = m_model->nextItem()->url(); + m_core->play(m_pl_manager->currentPlayList()->nextItem()->url(), TRUE); + m_nextUrl = m_pl_manager->currentPlayList()->nextItem()->url(); qDebug("MediaPlayer: sending next url"); } else diff --git a/src/qmmpui/mediaplayer.h b/src/qmmpui/mediaplayer.h index d0b84fad3..77969542c 100644 --- a/src/qmmpui/mediaplayer.h +++ b/src/qmmpui/mediaplayer.h @@ -21,9 +21,9 @@ #define MEDIAPLAYER_H #include <QObject> +#include <qmmp/soundcore.h> +#include "playlistmanager.h" -class PlayListModel; -class SoundCore; /*! @brief The MediaPlayer class provides a simple way to use SoundCore and PlayListModel together. * @author Ilya Kotov <forkotov02@hotmail.ru> @@ -50,11 +50,11 @@ public: * @param core Pointer to the SoundCore object. * @param model Playlist model */ - void initialize(SoundCore *core, PlayListModel *model); + void initialize(SoundCore *core, PlayListManager *pl_mamager); /*! - * Returns playlist model pointer + * Returns playlist manager pointer */ - PlayListModel *playListModel(); + PlayListManager *playListManager(); /*! * Returns \b true if "Repeate Track" option is enabled, otherwise returns \b false */ @@ -94,7 +94,7 @@ private slots: void updateNextUrl(); private: - PlayListModel *m_model; + PlayListManager *m_pl_manager; SoundCore *m_core; static MediaPlayer* m_instance; bool m_repeat; diff --git a/src/qmmpui/playlistmanager.cpp b/src/qmmpui/playlistmanager.cpp new file mode 100644 index 000000000..f49d72749 --- /dev/null +++ b/src/qmmpui/playlistmanager.cpp @@ -0,0 +1,395 @@ +/*************************************************************************** + * Copyright (C) 2009 by Ilya Kotov * + * forkotov02@hotmail.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include <QByteArray> +#include <QFile> +#include <QBuffer> +#include <QSettings> +#include <QDir> +#include <qmmp/fileinfo.h> +#include "playlistsettings.h" +#include "playlistmanager.h" + +PlayListManager::PlayListManager(QObject *parent) : QObject(parent) +{ + m_current = 0; + m_selected = 0; + m_repeatable = FALSE; + m_shuffle = FALSE; + readPlayLists(); +} + +PlayListManager::~PlayListManager() +{ + writePlayLists(); + delete PlaylistSettings::instance(); +} + +PlayListModel *PlayListManager::selectedPlayList() const +{ + return m_selected; +} + +PlayListModel *PlayListManager::currentPlayList() const +{ + return m_current; +} + +QList <PlayListModel *> PlayListManager::playLists() const +{ + return m_models; +} + +QStringList PlayListManager::playListNames() const +{ + QStringList names; + foreach(PlayListModel *model, m_models) + names << model->name(); + return names; +} + +void PlayListManager::selectPlayList(PlayListModel *model) +{ + if(model != m_selected && m_models.contains(model)) + { + PlayListModel *prev = m_selected; + m_selected = model; + emit selectedPlayListChanged(model, prev); + } +} + +void PlayListManager::selectPlayList(int i) +{ + if(i > m_models.count() - 1) + return; + selectPlayList(playListAt(i)); +} + +void PlayListManager::activatePlayList(PlayListModel *model) +{ + if(model != m_current && m_models.contains(model)) + { + PlayListModel *prev = m_current; + m_current = model; + emit currentPlayListChanged(model, prev); + } +} + +PlayListModel *PlayListManager::createPlayList(const QString &name) +{ + PlayListModel *model = new PlayListModel (name.isEmpty() ? tr("Playlist") : name, this); + int i = m_models.indexOf(m_selected); + m_models.insert(i, model); + model->prepareForRepeatablePlaying(m_repeatable); + model->prepareForShufflePlaying(m_shuffle); + emit playListAdded(i); + return model; +} + +void PlayListManager::removePlayList(PlayListModel *model) +{ + if(m_models.count() < 2 || !m_models.contains(model)) + return; + + int i = m_models.indexOf(model); + + if(m_current == model) + activatePlayList(m_models.at(i + (i > 0) ? -1 : 1)); + if(m_selected == model) + selectPlayList(m_models.at(i + (i > 0) ? -1 : 1)); + m_models.removeAt(i); + model->deleteLater(); + emit playListRemoved(i); +} + +void PlayListManager::setRepeatableList(bool r) +{ + if(m_repeatable == r) + return; + m_repeatable = r; + foreach(PlayListModel *model, m_models) + model->prepareForRepeatablePlaying(r); + emit repeatableListChanged(r); +} + +void PlayListManager::setShuffle(bool s) +{ + if(m_shuffle == s) + return; + m_shuffle = s; + foreach(PlayListModel *model, m_models) + model->prepareForShufflePlaying(s); + emit shuffleChanged(s); +} + +int PlayListManager::count() +{ + return m_models.count(); +} + +int PlayListManager::indexOf(PlayListModel *model) +{ + return m_models.indexOf(model); +} + +PlayListModel *PlayListManager::playListAt(int i) +{ + if(i >= 0 || i < m_models.count()) + return m_models.at(i); + return 0; +} + +bool PlayListManager::convertUnderscore() +{ + return PlaylistSettings::instance()->convertUnderscore(); +} + +bool PlayListManager::convertTwenty() +{ + return PlaylistSettings::instance()->convertTwenty(); +} + +bool PlayListManager::useMetadata() +{ + return PlaylistSettings::instance()->useMetadata(); +} + +const QString PlayListManager::format() const +{ + return PlaylistSettings::instance()->format(); +} + +void PlayListManager::setConvertUnderscore(bool yes) +{ + PlaylistSettings::instance()->setConvertUnderscore(yes); + emit settingsChanged(); +} + +void PlayListManager::setConvertTwenty(bool yes) +{ + PlaylistSettings::instance()->setConvertTwenty(yes); + emit settingsChanged(); +} + +void PlayListManager::setUseMetadata(bool yes) +{ + PlaylistSettings::instance()->setUseMetadata(yes); + emit settingsChanged(); +} + +void PlayListManager::setFormat(const QString &format) +{ + PlaylistSettings::instance()->setFormat(format); + emit settingsChanged(); +} + +bool PlayListManager::isRepeatableList() const +{ + return m_repeatable; +} + +bool PlayListManager::isShuffle() const +{ + return m_shuffle; +} + +void PlayListManager::readPlayLists() +{ + QString line, param, value; + int s; + QList <FileInfo *> infoList; + QFile file(QDir::homePath() +"/.qmmp/playlist.txt"); + file.open(QIODevice::ReadOnly); + QByteArray array = file.readAll(); + file.close(); + QBuffer buffer(&array); + buffer.open(QIODevice::ReadOnly); + + while (!buffer.atEnd()) + { + line = QString::fromUtf8(buffer.readLine()).trimmed(); + if ((s = line.indexOf("=")) < 0) + continue; + + param = line.left(s); + value = line.right(line.size() - s - 1); + + if(param == "playlist") + { + if(!m_models.isEmpty()) + { + foreach(FileInfo *info, infoList) + m_models.last()->add(new PlayListItem(info)); + } + infoList.clear(); + m_models << new PlayListModel(value, this); + } + else if (param == "file") + infoList << new FileInfo(value); + else if (infoList.isEmpty()) + continue; + else if (param == "title") + infoList.last()->setMetaData(Qmmp::TITLE, value); + else if (param == "artist") + infoList.last()->setMetaData(Qmmp::ARTIST, value); + else if (param == "album") + infoList.last()->setMetaData(Qmmp::ALBUM, value); + else if (param == "comment") + infoList.last()->setMetaData(Qmmp::COMMENT, value); + else if (param == "genre") + infoList.last()->setMetaData(Qmmp::GENRE, value); + else if (param == "composer") + infoList.last()->setMetaData(Qmmp::COMPOSER, value); + else if (param == "year") + infoList.last()->setMetaData(Qmmp::YEAR, value); + else if (param == "track") + infoList.last()->setMetaData(Qmmp::TRACK, value); + else if (param == "disc") + infoList.last()->setMetaData(Qmmp::DISCNUMBER, value); + else if (param == "length") + infoList.last()->setLength(value.toInt()); + } + buffer.close(); + if(!m_models.isEmpty()) + { + foreach(FileInfo *info, infoList) + m_models.last()->add(new PlayListItem(info)); + } + else + m_models << new PlayListModel("Default",this); + m_selected = m_models.at(0); + m_current = m_models.at(0); +} + +void PlayListManager::writePlayLists() +{ + QFile file(QDir::homePath() +"/.qmmp/playlist.txt"); + file.open(QIODevice::WriteOnly); + foreach(PlayListModel *model, m_models) + { + QList<PlayListItem *> items = model->items(); + file.write(QString("playlist=%1").arg(model->name()).toUtf8() +"\n"); + foreach(PlayListItem* m, items) + { + file.write(QString("file=%1").arg(m->url()).toUtf8() +"\n"); + file.write(QString("title=%1").arg(m->title()).toUtf8() +"\n"); + file.write(QString("artist=%1").arg(m->artist()).toUtf8() +"\n"); + file.write(QString("album=%1").arg(m->album()).toUtf8() +"\n"); + file.write(QString("comment=%1").arg(m->comment()).toUtf8() +"\n"); + file.write(QString("genre=%1").arg(m->genre()).toUtf8() +"\n"); + file.write(QString("composer=%1").arg(m->composer()).toUtf8() +"\n"); + file.write(QString("year=%1").arg(m->year()).toUtf8() +"\n"); + file.write(QString("track=%1").arg(m->track()).toUtf8() +"\n"); + file.write(QString("disc=%1").arg(m->discNumber()).toUtf8() +"\n"); + file.write(QString("length=%1").arg(m->length()).toUtf8() +"\n"); + } + } + file.close(); +} + +void PlayListManager::clear() +{ + m_selected->clear(); +} + +void PlayListManager::clearSelection() +{ + m_selected->clearSelection(); +} + +void PlayListManager::removeSelected() +{ + m_selected->removeSelected(); +} + +void PlayListManager::removeUnselected() +{ + m_selected->removeUnselected(); +} + +void PlayListManager::removeAt (int i) +{ + m_selected->removeAt(i); +} + +void PlayListManager::removeItem (PlayListItem *item) +{ + m_selected->removeItem(item); +} + +void PlayListManager::invertSelection() +{ + m_selected->invertSelection(); +} + +void PlayListManager::selectAll() +{ + m_selected->selectAll(); +} + +void PlayListManager::showDetails() +{ + m_selected->showDetails(); +} + +void PlayListManager::addFile(const QString &path) +{ + m_selected->addFile(path); +} + +void PlayListManager::addFiles(const QStringList& l) +{ + m_selected->addFiles(l); +} + +void PlayListManager::addDirectory(const QString& dir) +{ + m_selected->addDirectory(dir); +} + +void PlayListManager::randomizeList() +{ + m_selected->randomizeList(); +} + +void PlayListManager::reverseList() +{ + m_selected->reverseList(); +} + +void PlayListManager::sortSelection(int mode) +{ + m_selected->sortSelection(mode); +} + +void PlayListManager::sort(int mode) +{ + m_selected->sort(mode); +} + +void PlayListManager::addToQueue() +{ + m_selected->addToQueue(); +} + +void PlayListManager::clearInvalidItems() +{ + m_selected->clearInvalidItems(); +} diff --git a/src/qmmpui/playlistmanager.h b/src/qmmpui/playlistmanager.h new file mode 100644 index 000000000..d6550e063 --- /dev/null +++ b/src/qmmpui/playlistmanager.h @@ -0,0 +1,200 @@ +/*************************************************************************** + * Copyright (C) 2009 by Ilya Kotov * + * forkotov02@hotmail.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef PLAYLISTMANAGER_H +#define PLAYLISTMANAGER_H + +#include <QObject> +#include "playlistmodel.h" + +/*! + * @author Ilya Kotov <forkotov02@hotmail.ru> + */ +class PlayListManager : public QObject +{ +Q_OBJECT +public: + PlayListManager(QObject *parent); + ~PlayListManager(); + + QList <PlayListModel *> playLists() const; + QStringList playListNames() const; + PlayListModel *selectedPlayList() const; + PlayListModel *currentPlayList() const; + int count(); + int indexOf(PlayListModel *model); + PlayListModel *playListAt(int i); + /*! + * Returns state of the "Convert underscores to blanks" option (\b true - enabled, \b false - disabled). + */ + bool convertUnderscore(); + /*! + * Returns state of the "Convert %20 to blanks" option (\b true - enabled, \b false - disabled). + */ + bool convertTwenty(); + /*! + * Returns the state of metadata usage (\b true - use, \b false - not use). + */ + bool useMetadata(); + /*! + * Returns title format string. + */ + const QString format() const; + /*! + * Sets the "Convert underscores to blanks" option state to \b enabled + * @param enabled Option state (\b true - enabled, \b false - disabled) + */ + void setConvertUnderscore(bool enabled); + /*! + * Sets the "Convert %20 to blanks" option state to \b enabled + * @param enabled Option state (\b true - enabled, \b false - disabled) + */ + void setConvertTwenty(bool enabled); + /*! + * Sets metadata usage option state to \b enabled + * @param enabled Option state (\b true - enabled, \b false - disabled) + */ + void setUseMetadata(bool enabled); + /*! + * Sets short title format + * @param format title format. (Expressions: "%p" - artist, "%a" - album, "%t" - title, "%n" - track, + * "%g" - genre, "%c" - comment, "%C" - composer, "%D" - disc number "%f" - file name, " + * %F" - full path, "%y" - year) + */ + void setFormat(const QString &format); + /*! + * Returns state of "Repeat All" option. + */ + bool isRepeatableList() const; + /*! + * Returns state of "Shuffle" option. + */ + bool isShuffle() const; + +signals: + void currentPlayListChanged (PlayListModel *current, PlayListModel *previous); + void selectedPlayListChanged (PlayListModel *selected, PlayListModel *previous); + void playListAdded(int index); + void playListRemoved(int index); + /*! + * Emitted when state of the "Repeat All" option has changed. + * @param state New state of the "Repeat All" option (\b true - enabled, \b false disabled) + */ + void repeatableListChanged(bool state); + /*! + * Emitted when state of the "Shuffle" option has changed. + * @param state New state of the "Shuffle" option (\b true - enabled, \b false disabled) + */ + void shuffleChanged(bool state); + /*! + * Emitted when other settings (format, metadata, etc) have changed. + */ + void settingsChanged(); + +public slots: + void selectPlayList(PlayListModel *model); + void selectPlayList(int index); + void activatePlayList(PlayListModel *model); + PlayListModel *createPlayList(const QString &name = QString()); + void removePlayList(PlayListModel *model); + void setRepeatableList(bool r); + void setShuffle(bool s); + /*! + * This is a convenience function and is the same as calling \b selectedPlayList()->clear() + */ + void clear(); + /*! + * This is a convenience function and is the same as calling \b selectedPlayList()->clearSelection() + */ + void clearSelection(); + /*! + * This is a convenience function and is the same as calling \b selectedPlayList()->removeSelected() + */ + void removeSelected(); + /*! + * This is a convenience function and is the same as calling \b selectedPlayList()->removeUnselected() + */ + void removeUnselected(); + /*! + * This is a convenience function and is the same as calling \b selectedPlayList()->removeAt(i) + */ + void removeAt (int i); + /*! + * This is a convenience function and is the same as calling \b selectedPlayList()->removeItem(item) + */ + void removeItem (PlayListItem *item); + /*! + * This is a convenience function and is the same as calling \b selectedPlayList()->invertSelection() + */ + void invertSelection(); + /*! + * This is a convenience function and is the same as calling \b selectedPlayList()->selectAll() + */ + void selectAll(); + /*! + * This is a convenience function and is the same as calling \b selectedPlayList()->showDetails() + */ + void showDetails(); + /*! + * This is a convenience function and is the same as calling \b selectedPlayList()->addFile(path) + */ + void addFile(const QString &path); + /*! + * This is a convenience function and is the same as calling \b selectedPlayList()->addFiles(l) + */ + void addFiles(const QStringList& l); + /*! + * This is a convenience function and is the same as calling \b selectedPlayList()->addDirectory(dir) + */ + void addDirectory(const QString& dir); + /*! + * This is a convenience function and is the same as calling \b selectedPlayList()->randomizeList() + */ + void randomizeList(); + /*! + * This is a convenience function and is the same as calling \b selectedPlayList()->reverseList() + */ + void reverseList(); + /*! + * This is a convenience function and is the same as calling \b selectedPlayList()->sortSelection(mode) + */ + void sortSelection(int mode); + /*! + * This is a convenience function and is the same as calling \b selectedPlayList()->sort(mode) + */ + void sort(int mode); + /*! + * This is a convenience function and is the same as calling \b selectedPlayList()->addToQueue() + */ + void addToQueue(); + /*! + * This is a convenience function and is the same as calling \b selectedPlayList()->clearInvalidItems() + */ + void clearInvalidItems(); + +private: + void readPlayLists(); + void writePlayLists(); + QList <PlayListModel *> m_models; + PlayListModel *m_current; + PlayListModel *m_selected; + bool m_repeatable, m_shuffle; +}; + +#endif // PLAYLISTMANAGER_H diff --git a/src/qmmpui/playlistmodel.cpp b/src/qmmpui/playlistmodel.cpp index 0f1eda511..c87ad7409 100644 --- a/src/qmmpui/playlistmodel.cpp +++ b/src/qmmpui/playlistmodel.cpp @@ -34,11 +34,12 @@ #include "playlistparser.h" #include "playlistformat.h" #include "fileloader.h" -#include "playlistmodel.h" #include "playlistitem.h" #include "playstate.h" #include "detailsdialog.h" #include "playlistsettings.h" +#include "playlistmodel.h" + #define INVALID_ROW -1 @@ -63,27 +64,22 @@ void TagUpdater::updateTag() } } - -PlayListModel::PlayListModel(QObject *parent) +PlayListModel::PlayListModel(const QString &name, QObject *parent) : QObject(parent) , m_selection() { qsrand(time(0)); + m_name = name; m_shuffle = 0; m_total_length = 0; m_current = 0; - m_block_update_signals = false; is_repeatable_list = false; m_play_state = new NormalPlayState(this); - readSettings(); } PlayListModel::~PlayListModel() { - writeSettings(); clear(); delete m_play_state; - //qDeleteAll(m_registered_pl_formats); - foreach(GuardedFileLoader l,m_running_loaders) { if (!l.isNull()) @@ -92,10 +88,19 @@ PlayListModel::~PlayListModel() l->wait(); } } - delete PlaylistSettings::instance(); } -void PlayListModel::load(PlayListItem *item) +QString PlayListModel::name() const +{ + return m_name; +} + +void PlayListModel::setName(const QString &name) +{ + m_name = name; +} + +void PlayListModel::add(PlayListItem *item) { if (m_items.isEmpty()) m_currentItem = item; @@ -105,9 +110,25 @@ void PlayListModel::load(PlayListItem *item) if (m_items.size() == 1) emit firstAdded(); + m_current = m_items.indexOf(m_currentItem); + emit listChanged(); +} - if (!m_block_update_signals) - emit listChanged(); +void PlayListModel::add(QList <PlayListItem *> items) +{ + if(items.isEmpty()) + return; + if (m_items.isEmpty()) + m_currentItem = items.at(0); + + foreach(PlayListItem *item, items) + m_total_length += item->length(); + m_items.append(items); + + if (m_items.size() == items.size()) + emit firstAdded(); + m_current = m_items.indexOf(m_currentItem); + emit listChanged(); } int PlayListModel::count() @@ -117,10 +138,7 @@ int PlayListModel::count() PlayListItem* PlayListModel::currentItem() { - if (m_items.isEmpty()) - return 0; - else - return m_items.at(qMin(m_items.size() - 1, m_current)); + return m_items.isEmpty() ? 0 : m_items.at(qMin(m_items.size() - 1, m_current)); } PlayListItem* PlayListModel::nextItem() @@ -153,12 +171,10 @@ bool PlayListModel::setCurrent(int c) return TRUE; } - bool PlayListModel::next() { if (isFileLoaderRunning()) m_play_state->prepare(); - return m_play_state->next(); } @@ -166,8 +182,7 @@ bool PlayListModel::previous() { if (isFileLoaderRunning()) m_play_state->prepare(); - - return m_play_state->previous();//) + return m_play_state->previous(); } void PlayListModel::clear() @@ -362,89 +377,6 @@ void PlayListModel::showDetails() } } -void PlayListModel::readSettings() -{ - QSettings settings(Qmmp::configFile(), QSettings::IniFormat); - m_current = settings.value("Playlist/current",0).toInt(); - - QString line, param, value; - int s; - QList <FileInfo *> infoList; - QFile file(QDir::homePath() +"/.qmmp/playlist.txt"); - file.open(QIODevice::ReadOnly); - QByteArray array = file.readAll(); - file.close(); - QBuffer buffer(&array); - buffer.open(QIODevice::ReadOnly); - while (!buffer.atEnd()) - { - line = QString::fromUtf8(buffer.readLine()).trimmed(); - if ((s = line.indexOf("=")) < 0) - continue; - - param = line.left(s); - value = line.right(line.size() - s - 1); - - if (param == "file") - infoList << new FileInfo(value); - else if (infoList.isEmpty()) - continue; - else if (param == "title") - infoList.last()->setMetaData(Qmmp::TITLE, value); - else if (param == "artist") - infoList.last()->setMetaData(Qmmp::ARTIST, value); - else if (param == "album") - infoList.last()->setMetaData(Qmmp::ALBUM, value); - else if (param == "comment") - infoList.last()->setMetaData(Qmmp::COMMENT, value); - else if (param == "genre") - infoList.last()->setMetaData(Qmmp::GENRE, value); - else if (param == "composer") - infoList.last()->setMetaData(Qmmp::COMPOSER, value); - else if (param == "year") - infoList.last()->setMetaData(Qmmp::YEAR, value); - else if (param == "track") - infoList.last()->setMetaData(Qmmp::TRACK, value); - else if (param == "disc") - infoList.last()->setMetaData(Qmmp::DISCNUMBER, value); - else if (param == "length") - infoList.last()->setLength(value.toInt()); - } - buffer.close(); - if (m_current > infoList.count() - 1) - m_current = 0; - m_block_update_signals = TRUE; - foreach(FileInfo *info, infoList) - load(new PlayListItem(info)); - m_block_update_signals = FALSE; - if(!m_items.isEmpty()) - m_currentItem = m_items.at(m_current); - doCurrentVisibleRequest(); -} - -void PlayListModel::writeSettings() -{ - QFile file(QDir::homePath() +"/.qmmp/playlist.txt"); - file.open(QIODevice::WriteOnly); - foreach(PlayListItem* m, m_items) - { - file.write(QString("file=%1").arg(m->url()).toUtf8() +"\n"); - file.write(QString("title=%1").arg(m->title()).toUtf8() +"\n"); - file.write(QString("artist=%1").arg(m->artist()).toUtf8() +"\n"); - file.write(QString("album=%1").arg(m->album()).toUtf8() +"\n"); - file.write(QString("comment=%1").arg(m->comment()).toUtf8() +"\n"); - file.write(QString("genre=%1").arg(m->genre()).toUtf8() +"\n"); - file.write(QString("composer=%1").arg(m->composer()).toUtf8() +"\n"); - file.write(QString("year=%1").arg(m->year()).toUtf8() +"\n"); - file.write(QString("track=%1").arg(m->track()).toUtf8() +"\n"); - file.write(QString("disc=%1").arg(m->discNumber()).toUtf8() +"\n"); - file.write(QString("length=%1").arg(m->length()).toUtf8() +"\n"); - } - file.close(); - QSettings settings(Qmmp::configFile(), QSettings::IniFormat); - settings.setValue("Playlist/current", m_current); -} - void PlayListModel::addFile(const QString& path) { if (path.isEmpty()) @@ -452,7 +384,7 @@ void PlayListModel::addFile(const QString& path) QList <FileInfo *> playList = MetaDataManager::instance()->createPlayList(path, PlaylistSettings::instance()->useMetadata()); foreach(FileInfo *info, playList) - emit load(new PlayListItem(info)); + add(new PlayListItem(info)); m_play_state->prepare(); } @@ -462,7 +394,7 @@ FileLoader * PlayListModel::createFileLoader() FileLoader* f_loader = new FileLoader(this); // f_loader->setStackSize(20 * 1024 * 1024); m_running_loaders << f_loader; - connect(f_loader,SIGNAL(newPlayListItem(PlayListItem*)),this,SLOT(load(PlayListItem*)),Qt::QueuedConnection); + connect(f_loader,SIGNAL(newPlayListItem(PlayListItem*)), SLOT(add(PlayListItem*)),Qt::QueuedConnection); connect(f_loader,SIGNAL(finished()),this,SLOT(preparePlayState())); connect(f_loader,SIGNAL(finished()),f_loader,SLOT(deleteLater())); return f_loader; @@ -583,8 +515,6 @@ void PlayListModel::moveItems(int from, int to) } } - - int PlayListModel::topmostInSelection(int row) { if (row == 0) @@ -654,14 +584,7 @@ void PlayListModel::addToQueue() { QList<PlayListItem*> selected_items = getSelectedItems(); foreach(PlayListItem* file,selected_items) - {/* - if(isQueued(file)) - m_queued_songs.removeAt(m_queued_songs.indexOf(file)); - else - m_queued_songs.append(file); - */ setQueued(file); - } emit listChanged(); } @@ -671,7 +594,6 @@ void PlayListModel::setQueued(PlayListItem* file) m_queued_songs.removeAt(m_queued_songs.indexOf(file)); else m_queued_songs.append(file); - emit listChanged(); } @@ -885,14 +807,11 @@ void PlayListModel::prepareForShufflePlaying(bool val) m_play_state = new NormalPlayState(this); m_shuffle = val; - - emit shuffleChanged(val); } void PlayListModel::prepareForRepeatablePlaying(bool val) { is_repeatable_list = val; - emit repeatableListChanged(val); } void PlayListModel::doCurrentVisibleRequest() @@ -901,13 +820,6 @@ void PlayListModel::doCurrentVisibleRequest() emit listChanged(); } -void PlayListModel::setUpdatesEnabled(bool yes) -{ - m_block_update_signals = !yes; - if (yes) - emit listChanged(); -} - void PlayListModel::loadPlaylist(const QString &f_name) { PlaylistFormat* prs = PlaylistParser::instance()->findByPath(f_name); @@ -975,50 +887,6 @@ void PlayListModel::preparePlayState() m_play_state->prepare(); } -bool PlayListModel::convertUnderscore() -{ - return PlaylistSettings::instance()->convertUnderscore(); -} - -bool PlayListModel::convertTwenty() -{ - return PlaylistSettings::instance()->convertTwenty(); -} - -bool PlayListModel::useMetadata() -{ - return PlaylistSettings::instance()->useMetadata(); -} - -const QString PlayListModel::format() const -{ - return PlaylistSettings::instance()->format(); -} - -void PlayListModel::setConvertUnderscore(bool yes) -{ - PlaylistSettings::instance()->setConvertUnderscore(yes); - emit settingsChanged(); -} - -void PlayListModel::setConvertTwenty(bool yes) -{ - PlaylistSettings::instance()->setConvertTwenty(yes); - emit settingsChanged(); -} - -void PlayListModel::setUseMetadata(bool yes) -{ - PlaylistSettings::instance()->setUseMetadata(yes); - emit settingsChanged(); -} - -void PlayListModel::setFormat(const QString &format) -{ - PlaylistSettings::instance()->setFormat(format); - emit settingsChanged(); -} - void PlayListModel::clearInvalidItems() { foreach(PlayListItem *item, m_items) diff --git a/src/qmmpui/playlistmodel.h b/src/qmmpui/playlistmodel.h index 8e945da57..834d38f1f 100644 --- a/src/qmmpui/playlistmodel.h +++ b/src/qmmpui/playlistmodel.h @@ -26,6 +26,7 @@ #include <QMap> #include <QPointer> #include <QVector> +#include "playlistitem.h" class FileLoader; class PlayListItem; @@ -102,11 +103,14 @@ public: * Constructs a playlist model. * @param parent QObject parent */ - PlayListModel(QObject *parent = 0); + PlayListModel(const QString &name, QObject *parent = 0); /*! * Object destructor. */ ~PlayListModel(); + + QString name() const; + void setName(const QString &name); /*! * Returns number of items. */ @@ -201,15 +205,15 @@ public: /*! * Returns list with selected rows indexes. */ - QList<int> getSelectedRows()const; + QList<int> getSelectedRows() const; /*! * Returns list of \b PlayListItem pointers that are selected. */ - QList<PlayListItem*> getSelectedItems()const; + QList<PlayListItem*> getSelectedItems() const; /*! * Returns list of all \b PlayListItem pointers. */ - QList<PlayListItem*> items()const + QList<PlayListItem*> items() const { return m_items; } @@ -232,7 +236,6 @@ public: * Loads playlist with \b f_name name. */ void loadPlaylist(const QString& f_name); - /*! * Saves current songs to the playlist with \b f_name name. */ @@ -272,26 +275,17 @@ signals: * Emitted when first item has added. */ void firstAdded(); - /*! - * Emitted when state of the "Repeat All" option has changed. - * @param state New state of the "Repeat All" option (\b true - enabled, \b false disabled) - */ - void repeatableListChanged(bool state); - /*! - * Emitted when state of the "Shuffle" option has changed. - * @param state New state of the "Shuffle" option (\b true - enabled, \b false disabled) - */ - void shuffleChanged(bool state); - /*! - * Emitted when other settings (format, metadata, etc) have changed. - */ - void settingsChanged(); public slots: /*! * Adds \b item to the playlist. */ - void load(PlayListItem *item); + void add(PlayListItem *item); + /*! + * Adds a list of items to the playlist. + * @param items List of items + */ + void add(QList <PlayListItem *> items); /*! * Removes all items. */ @@ -387,44 +381,6 @@ public slots: */ void setQueued(PlayListItem* f); /*! - * Returns state of the "Convert underscores to blanks" option (\b true - enabled, \b false - disabled). - */ - bool convertUnderscore(); - /*! - * Returns state of the "Convert %20 to blanks" option (\b true - enabled, \b false - disabled). - */ - bool convertTwenty(); - /*! - * Returns the state of metadata usage (\b true - use, \b false - not use). - */ - bool useMetadata(); - /*! - * Returns title format string. - */ - const QString format() const; - /*! - * Sets the "Convert underscores to blanks" option state to \b enabled - * @param enabled Option state (\b true - enabled, \b false - disabled) - */ - void setConvertUnderscore(bool enabled); - /*! - * Sets the "Convert %20 to blanks" option state to \b enabled - * @param enabled Option state (\b true - enabled, \b false - disabled) - */ - void setConvertTwenty(bool enabled); - /*! - * Sets metadata usage option state to \b enabled - * @param enabled Option state (\b true - enabled, \b false - disabled) - */ - void setUseMetadata(bool enabled); - /*! - * Sets short title format - * @param format title format. (Expressions: "%p" - artist, "%a" - album, "%t" - title, "%n" - track, - * "%g" - genre, "%c" - comment, "%C" - composer, "%D" - disc number "%f" - file name, " - * %F" - full path, "%y" - year) - */ - void setFormat(const QString &format); - /*! * Removes invalid items from playlist */ void clearInvalidItems(); @@ -465,13 +421,6 @@ private: QList <PlayListItem*> m_editing_items; PlayListItem* m_currentItem; int m_current; - void readSettings(); - void writeSettings(); - void setUpdatesEnabled(bool); - bool updatesEnabled()const - { - return !m_block_update_signals; - } /*! * This flyweight object represents current selection. */ @@ -488,7 +437,6 @@ private: * Current playing state (Normal or Shuffle) */ PlayState* m_play_state; - bool m_block_update_signals; int m_total_length; typedef QPointer<FileLoader> GuardedFileLoader; /*! @@ -498,6 +446,7 @@ private: */ QVector<GuardedFileLoader> m_running_loaders; bool m_shuffle; + QString m_name; }; diff --git a/src/qmmpui/qmmpui.pro b/src/qmmpui/qmmpui.pro index ea0cb623b..e3096c8cc 100644 --- a/src/qmmpui/qmmpui.pro +++ b/src/qmmpui/qmmpui.pro @@ -36,7 +36,8 @@ HEADERS += general.h \ mediaplayer.h \ playlistsettings.h \ detailsdialog.h \ - tageditor.h + tageditor.h \ + playlistmanager.h SOURCES += general.cpp \ generalhandler.cpp \ playlistparser.cpp \ @@ -51,7 +52,8 @@ SOURCES += general.cpp \ mediaplayer.cpp \ playlistsettings.cpp \ detailsdialog.cpp \ - tageditor.cpp + tageditor.cpp \ + playlistmanager.cpp FORMS += detailsdialog.ui \ tageditor.ui unix:DESTDIR = . diff --git a/src/qmmpui/translations/libqmmpui_cs.ts b/src/qmmpui/translations/libqmmpui_cs.ts index ea9a4dfa7..5ba850bf1 100644 --- a/src/qmmpui/translations/libqmmpui_cs.ts +++ b/src/qmmpui/translations/libqmmpui_cs.ts @@ -69,6 +69,14 @@ p, li { white-space: pre-wrap; } </message> </context> <context> + <name>PlayListManager</name> + <message> + <location filename="../playlistmanager.cpp" line="97"/> + <source>Playlist</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>QtFileDialogFactory</name> <message> <location filename="../qtfiledialog.cpp" line="33"/> diff --git a/src/qmmpui/translations/libqmmpui_de.ts b/src/qmmpui/translations/libqmmpui_de.ts index fd71c68ab..3fba815bb 100644 --- a/src/qmmpui/translations/libqmmpui_de.ts +++ b/src/qmmpui/translations/libqmmpui_de.ts @@ -73,6 +73,14 @@ p, li { white-space: pre-wrap; } </message> </context> <context> + <name>PlayListManager</name> + <message> + <location filename="../playlistmanager.cpp" line="97"/> + <source>Playlist</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>QtFileDialogFactory</name> <message> <location filename="../qtfiledialog.cpp" line="33"/> diff --git a/src/qmmpui/translations/libqmmpui_it.ts b/src/qmmpui/translations/libqmmpui_it.ts index 9f2776e71..4fd497a3f 100644 --- a/src/qmmpui/translations/libqmmpui_it.ts +++ b/src/qmmpui/translations/libqmmpui_it.ts @@ -69,6 +69,14 @@ p, li { white-space: pre-wrap; } </message> </context> <context> + <name>PlayListManager</name> + <message> + <location filename="../playlistmanager.cpp" line="97"/> + <source>Playlist</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>QtFileDialogFactory</name> <message> <location filename="../qtfiledialog.cpp" line="33"/> diff --git a/src/qmmpui/translations/libqmmpui_lt.ts b/src/qmmpui/translations/libqmmpui_lt.ts index 05e6cbb63..106a1e353 100644 --- a/src/qmmpui/translations/libqmmpui_lt.ts +++ b/src/qmmpui/translations/libqmmpui_lt.ts @@ -69,6 +69,14 @@ p, li { white-space: pre-wrap; } </message> </context> <context> + <name>PlayListManager</name> + <message> + <location filename="../playlistmanager.cpp" line="97"/> + <source>Playlist</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>QtFileDialogFactory</name> <message> <location filename="../qtfiledialog.cpp" line="33"/> diff --git a/src/qmmpui/translations/libqmmpui_pl.ts b/src/qmmpui/translations/libqmmpui_pl.ts index 505d60a25..6e1b6ccb9 100644 --- a/src/qmmpui/translations/libqmmpui_pl.ts +++ b/src/qmmpui/translations/libqmmpui_pl.ts @@ -69,6 +69,14 @@ p, li { white-space: pre-wrap; } </message> </context> <context> + <name>PlayListManager</name> + <message> + <location filename="../playlistmanager.cpp" line="97"/> + <source>Playlist</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>QtFileDialogFactory</name> <message> <location filename="../qtfiledialog.cpp" line="33"/> diff --git a/src/qmmpui/translations/libqmmpui_pt_BR.ts b/src/qmmpui/translations/libqmmpui_pt_BR.ts index b6a6c4c31..160f36849 100644 --- a/src/qmmpui/translations/libqmmpui_pt_BR.ts +++ b/src/qmmpui/translations/libqmmpui_pt_BR.ts @@ -69,6 +69,14 @@ p, li { white-space: pre-wrap; } </message> </context> <context> + <name>PlayListManager</name> + <message> + <location filename="../playlistmanager.cpp" line="97"/> + <source>Playlist</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>QtFileDialogFactory</name> <message> <location filename="../qtfiledialog.cpp" line="33"/> diff --git a/src/qmmpui/translations/libqmmpui_ru.ts b/src/qmmpui/translations/libqmmpui_ru.ts index 3708ba4f0..ad4b32096 100644 --- a/src/qmmpui/translations/libqmmpui_ru.ts +++ b/src/qmmpui/translations/libqmmpui_ru.ts @@ -69,6 +69,14 @@ p, li { white-space: pre-wrap; } </message> </context> <context> + <name>PlayListManager</name> + <message> + <location filename="../playlistmanager.cpp" line="97"/> + <source>Playlist</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>QtFileDialogFactory</name> <message> <location filename="../qtfiledialog.cpp" line="33"/> diff --git a/src/qmmpui/translations/libqmmpui_tr.ts b/src/qmmpui/translations/libqmmpui_tr.ts index 06ce067a6..167aad31b 100644 --- a/src/qmmpui/translations/libqmmpui_tr.ts +++ b/src/qmmpui/translations/libqmmpui_tr.ts @@ -69,6 +69,14 @@ p, li { white-space: pre-wrap; } </message> </context> <context> + <name>PlayListManager</name> + <message> + <location filename="../playlistmanager.cpp" line="97"/> + <source>Playlist</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>QtFileDialogFactory</name> <message> <location filename="../qtfiledialog.cpp" line="33"/> diff --git a/src/qmmpui/translations/libqmmpui_uk_UA.ts b/src/qmmpui/translations/libqmmpui_uk_UA.ts index bc68cd376..57771a6fb 100644 --- a/src/qmmpui/translations/libqmmpui_uk_UA.ts +++ b/src/qmmpui/translations/libqmmpui_uk_UA.ts @@ -69,6 +69,14 @@ p, li { white-space: pre-wrap; } </message> </context> <context> + <name>PlayListManager</name> + <message> + <location filename="../playlistmanager.cpp" line="97"/> + <source>Playlist</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>QtFileDialogFactory</name> <message> <location filename="../qtfiledialog.cpp" line="33"/> diff --git a/src/qmmpui/translations/libqmmpui_zh_CN.ts b/src/qmmpui/translations/libqmmpui_zh_CN.ts index 257d42b9a..3ef670ebf 100644 --- a/src/qmmpui/translations/libqmmpui_zh_CN.ts +++ b/src/qmmpui/translations/libqmmpui_zh_CN.ts @@ -69,6 +69,14 @@ p, li { white-space: pre-wrap; } </message> </context> <context> + <name>PlayListManager</name> + <message> + <location filename="../playlistmanager.cpp" line="97"/> + <source>Playlist</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>QtFileDialogFactory</name> <message> <location filename="../qtfiledialog.cpp" line="33"/> diff --git a/src/qmmpui/translations/libqmmpui_zh_TW.ts b/src/qmmpui/translations/libqmmpui_zh_TW.ts index 3cbe3c90c..8b3b6a60a 100644 --- a/src/qmmpui/translations/libqmmpui_zh_TW.ts +++ b/src/qmmpui/translations/libqmmpui_zh_TW.ts @@ -69,6 +69,14 @@ p, li { white-space: pre-wrap; } </message> </context> <context> + <name>PlayListManager</name> + <message> + <location filename="../playlistmanager.cpp" line="97"/> + <source>Playlist</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>QtFileDialogFactory</name> <message> <location filename="../qtfiledialog.cpp" line="33"/> diff --git a/src/ui/configdialog.cpp b/src/ui/configdialog.cpp index 068a9010c..a468cd28c 100644 --- a/src/ui/configdialog.cpp +++ b/src/ui/configdialog.cpp @@ -105,10 +105,10 @@ void ConfigDialog::readSettings() QSettings settings (Qmmp::configFile(), QSettings::IniFormat); if (MediaPlayer *player = MediaPlayer::instance()) { - ui.formatLineEdit->setText(player->playListModel()->format()); - ui.metadataCheckBox->setChecked(player->playListModel()->useMetadata()); - ui.underscoresCheckBox->setChecked(player->playListModel()->convertUnderscore()); - ui.per20CheckBox->setChecked(player->playListModel()->convertTwenty()); + ui.formatLineEdit->setText(player->playListManager()->format()); + ui.metadataCheckBox->setChecked(player->playListManager()->useMetadata()); + ui.underscoresCheckBox->setChecked(player->playListManager()->convertUnderscore()); + ui.per20CheckBox->setChecked(player->playListManager()->convertTwenty()); } ui.protocolCheckBox->setChecked(settings.value ("PlayList/show_protocol", FALSE).toBool()); ui.numbersCheckBox->setChecked(settings.value ("PlayList/show_numbers", TRUE).toBool()); @@ -607,10 +607,10 @@ void ConfigDialog::saveSettings() QSettings settings (Qmmp::configFile(), QSettings::IniFormat); if (MediaPlayer *player = MediaPlayer::instance()) { - player->playListModel()->setFormat(ui.formatLineEdit->text().trimmed()); - player->playListModel()->setUseMetadata(ui.metadataCheckBox->isChecked()); - player->playListModel()->setConvertUnderscore(ui.underscoresCheckBox->isChecked()); - player->playListModel()->setConvertTwenty(ui.per20CheckBox->isChecked()); + player->playListManager()->setFormat(ui.formatLineEdit->text().trimmed()); + player->playListManager()->setUseMetadata(ui.metadataCheckBox->isChecked()); + player->playListManager()->setConvertUnderscore(ui.underscoresCheckBox->isChecked()); + player->playListManager()->setConvertTwenty(ui.per20CheckBox->isChecked()); } settings.setValue ("PlayList/show_protocol", ui.protocolCheckBox->isChecked()); settings.setValue ("PlayList/show_numbers", ui.numbersCheckBox->isChecked()); diff --git a/src/ui/display.cpp b/src/ui/display.cpp index 58cb78e7c..fab49fbf9 100644 --- a/src/ui/display.cpp +++ b/src/ui/display.cpp @@ -114,9 +114,9 @@ MainDisplay::MainDisplay (QWidget *parent) connect(m_core, SIGNAL(stateChanged(Qmmp::State)), SLOT(setState(Qmmp::State))); connect(m_core, SIGNAL(volumeChanged(int,int)), SLOT(setVolume(int, int))); connect(m_core, SIGNAL(elapsedChanged(qint64)),m_titlebar, SLOT(setTime(qint64))); - PlayListModel *model = MediaPlayer::instance()->playListModel(); + /*PlayListModel *model = MediaPlayer::instance()->playListModel(); connect(model, SIGNAL(repeatableListChanged(bool)), m_repeatButton, SLOT(setON(bool))); - connect(model, SIGNAL(shuffleChanged(bool)), m_shuffleButton, SLOT(setON(bool))); + connect(model, SIGNAL(shuffleChanged(bool)), m_shuffleButton, SLOT(setON(bool)));*/ updatePositions(); updateMask(); } diff --git a/src/ui/jumptotrackdialog.cpp b/src/ui/jumptotrackdialog.cpp index 6c9343170..0cad6ecfd 100644 --- a/src/ui/jumptotrackdialog.cpp +++ b/src/ui/jumptotrackdialog.cpp @@ -19,19 +19,19 @@ ***************************************************************************/ #include "jumptotrackdialog.h" -#include <qmmpui/playlistmodel.h> +#include <qmmpui/playlistmanager.h> #include <QStringListModel> #include <QSortFilterProxyModel> #include <QShortcut> #include <QKeySequence> -JumpToTrackDialog::JumpToTrackDialog(QWidget* parent, Qt::WFlags fl) - : QDialog( parent, fl ) +JumpToTrackDialog::JumpToTrackDialog(PlayListManager *manager, QWidget* parent) + : QDialog (parent) { setupUi(this); setAttribute(Qt::WA_QuitOnClose, FALSE); - m_playListModel = 0; + m_pl_manager = manager; m_listModel = new QStringListModel(this); m_proxyModel = new QSortFilterProxyModel; @@ -76,8 +76,8 @@ void JumpToTrackDialog::on_queuePushButton_clicked() if (!mi_list.isEmpty()) { int selected = (m_proxyModel->mapToSource(mi_list.at(0))).row(); - m_playListModel->setQueued(m_playListModel->item(selected)); - if (m_playListModel->isQueued(m_playListModel->item(selected))) + m_pl_manager->selectedPlayList()->setQueued(m_pl_manager->selectedPlayList()->item(selected)); + if (m_pl_manager->selectedPlayList()->isQueued(m_pl_manager->selectedPlayList()->item(selected))) queuePushButton->setText(tr("Unqueue")); else queuePushButton->setText(tr("Queue")); @@ -96,16 +96,11 @@ void JumpToTrackDialog::on_jumpToPushButton_clicked() void JumpToTrackDialog::refresh() { filterLineEdit->clear(); - QStringList titles = m_playListModel->getTitles(0,m_playListModel->count()); + QStringList titles = m_pl_manager->selectedPlayList()->getTitles(0, m_pl_manager->selectedPlayList()->count()); m_listModel->setStringList(titles); filterLineEdit->setFocus(); } -void JumpToTrackDialog::setModel(PlayListModel * model) -{ - m_playListModel = model; -} - void JumpToTrackDialog::on_filterLineEdit_textChanged(const QString &str) { m_proxyModel->setFilterFixedString(str); @@ -126,14 +121,14 @@ void JumpToTrackDialog::on_filterLineEdit_returnPressed () void JumpToTrackDialog::jumpTo(const QModelIndex & index) { int selected = (m_proxyModel->mapToSource(index)).row(); - m_playListModel->setCurrent(selected); + m_pl_manager->selectedPlayList()->setCurrent(selected); emit playRequest(); } void JumpToTrackDialog::queueUnqueue(const QModelIndex& curr,const QModelIndex&) { int row = m_proxyModel->mapToSource(curr).row(); - if (m_playListModel->isQueued(m_playListModel->item(row))) + if (m_pl_manager->selectedPlayList()->isQueued(m_pl_manager->selectedPlayList()->item(row))) queuePushButton->setText(tr("Unqueue")); else queuePushButton->setText(tr("Queue")); diff --git a/src/ui/jumptotrackdialog.h b/src/ui/jumptotrackdialog.h index fb4cf301e..56f95a177 100644 --- a/src/ui/jumptotrackdialog.h +++ b/src/ui/jumptotrackdialog.h @@ -24,24 +24,22 @@ #include <QDialog> #include "ui_jumptotrackdialog.h" -/** - @author Vladimir Kuznetsov <vovanec@gmail.com> - */ - class QStringListModel; -class PlayListModel; class QSortFilterProxyModel; +class PlayListManager; - +/** + @author Vladimir Kuznetsov <vovanec@gmail.com> + */ class JumpToTrackDialog : public QDialog, private Ui::JumpToTrackDialog { Q_OBJECT public: - JumpToTrackDialog(QWidget* parent = 0, Qt::WFlags fl = 0 ); + JumpToTrackDialog(PlayListManager *manager, QWidget* parent = 0); ~JumpToTrackDialog(); - void setModel(PlayListModel* model); void refresh(); + protected slots: void on_closePushButton_clicked(); void on_refreshPushButton_clicked(); @@ -51,12 +49,14 @@ protected slots: void on_filterLineEdit_returnPressed (); void jumpTo(const QModelIndex&); void queueUnqueue(const QModelIndex&,const QModelIndex&); + signals: void playRequest(); + private: - PlayListModel* m_playListModel; QStringListModel* m_listModel; QSortFilterProxyModel* m_proxyModel; + PlayListManager *m_pl_manager; }; #endif diff --git a/src/ui/keyboardmanager.cpp b/src/ui/keyboardmanager.cpp index 8a6853b85..024f12bae 100644 --- a/src/ui/keyboardmanager.cpp +++ b/src/ui/keyboardmanager.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006 by Ilya Kotov * + * Copyright (C) 2006-2009 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -20,9 +20,7 @@ #include <QKeyEvent> - #include <qmmpui/playlistmodel.h> - #include "playlist.h" #include "listwidget.h" #include "keyboardmanager.h" @@ -72,14 +70,9 @@ bool KeyboardManager::handleKeyRelease (QKeyEvent*) return FALSE; } -void KeyboardManager::setModel (PlayListModel *m) -{ - m_playListModel = m; -} - void KeyboardManager::keyUp (QKeyEvent * ke) { - QList<int> rows = m_playListModel->getSelectedRows(); + QList<int> rows = m_playlist->listWidget()->model()->getSelectedRows(); ListWidget* list_widget = m_playlist->listWidget(); if (rows.count() > 0) @@ -89,7 +82,7 @@ void KeyboardManager::keyUp (QKeyEvent * ke) if (! (ke->modifiers() & Qt::ShiftModifier || ke->modifiers() & Qt::AltModifier)) { - m_playListModel->clearSelection(); + m_playlist->listWidget()->model()->clearSelection(); list_widget->setAnchorRow(-1); } @@ -109,22 +102,22 @@ void KeyboardManager::keyUp (QKeyEvent * ke) { if (ke->modifiers() == Qt::AltModifier) { - m_playListModel->moveItems (rows[0],rows[0] - 1); + m_playlist->listWidget()->model()->moveItems (rows[0],rows[0] - 1); list_widget->setAnchorRow (list_widget->getAnchorRow() - 1); } else { if (rows.last() > list_widget->getAnchorRow() && ke->modifiers() & Qt::ShiftModifier) { - m_playListModel->setSelected (rows.last(),false); + m_playlist->listWidget()->model()->setSelected (rows.last(),false); } else if (rows[0] > 0) { - m_playListModel->setSelected (rows[0] - 1,true); + m_playlist->listWidget()->model()->setSelected (rows[0] - 1,true); } else { - m_playListModel->setSelected (rows[0],true); + m_playlist->listWidget()->model()->setSelected (rows[0],true); if(list_widget->getAnchorRow() == -1) list_widget->setAnchorRow(rows[0]); } @@ -135,11 +128,11 @@ void KeyboardManager::keyUp (QKeyEvent * ke) } else { - m_playListModel->setSelected (list_widget->firstVisibleRow(),true); + m_playlist->listWidget()->model()->setSelected (list_widget->firstVisibleRow(),true); list_widget->setAnchorRow(list_widget->firstVisibleRow()); } - rows = m_playListModel->getSelectedRows(); + rows = m_playlist->listWidget()->model()->getSelectedRows(); if (rows[0] < list_widget->firstVisibleRow() && list_widget->firstVisibleRow() > 0) { @@ -154,20 +147,20 @@ void KeyboardManager::keyUp (QKeyEvent * ke) { //if(list_widget->getAnchorRow() == -1) list_widget->setAnchorRow(list_widget->firstVisibleRow()); - m_playListModel->setSelected (list_widget->firstVisibleRow(),true); + m_playlist->listWidget()->model()->setSelected (list_widget->firstVisibleRow(),true); } } void KeyboardManager::keyDown (QKeyEvent * ke) { - QList<int> rows = m_playListModel->getSelectedRows(); + QList<int> rows = m_playlist->listWidget()->model()->getSelectedRows(); ListWidget* list_widget = m_playlist->listWidget(); //qWarning("count: %d",rows.count()); if (rows.count() > 0) { if (! (ke->modifiers() & Qt::ShiftModifier || ke->modifiers() & Qt::AltModifier)) { - m_playListModel->clearSelection(); + m_playlist->listWidget()->model()->clearSelection(); list_widget->setAnchorRow(-1); } @@ -187,37 +180,37 @@ void KeyboardManager::keyDown (QKeyEvent * ke) { if (ke->modifiers() == Qt::AltModifier) { - m_playListModel->moveItems (rows.last(),rows.last() + 1); + m_playlist->listWidget()->model()->moveItems (rows.last(),rows.last() + 1); list_widget->setAnchorRow (list_widget->getAnchorRow() + 1); } else { //qWarning("list_widget %d",list_widget->getAnchorRow()); - //qWarning("model count: %d rows.last(): %d",m_playListModel->count(),rows.last()); + //qWarning("model count: %d rows.last(): %d",m_playlist->listWidget()->model()->count(),rows.last()); if (rows[0] < list_widget->getAnchorRow() && ke->modifiers() & Qt::ShiftModifier) - m_playListModel->setSelected (rows[0],false); - else if (rows.last() < m_playListModel->count() - 1) + m_playlist->listWidget()->model()->setSelected (rows[0],false); + else if (rows.last() < m_playlist->listWidget()->model()->count() - 1) { - m_playListModel->setSelected (rows.last() + 1,true); + m_playlist->listWidget()->model()->setSelected (rows.last() + 1,true); } else { - m_playListModel->setSelected (rows.last(),true); + m_playlist->listWidget()->model()->setSelected (rows.last(),true); if(list_widget->getAnchorRow() == -1) list_widget->setAnchorRow(rows.last()); } - if (! (ke->modifiers() & Qt::ShiftModifier) && rows.last() < m_playListModel->count() - 1) + if (! (ke->modifiers() & Qt::ShiftModifier) && rows.last() < m_playlist->listWidget()->model()->count() - 1) list_widget->setAnchorRow (rows.last() + 1); } } else { - m_playListModel->setSelected (list_widget->firstVisibleRow(),true); + m_playlist->listWidget()->model()->setSelected (list_widget->firstVisibleRow(),true); list_widget->setAnchorRow(list_widget->firstVisibleRow()); } - rows = m_playListModel->getSelectedRows(); + rows = m_playlist->listWidget()->model()->getSelectedRows(); if (!rows.isEmpty() && rows.last() >= list_widget->visibleRows() + list_widget->firstVisibleRow()) { @@ -231,7 +224,7 @@ void KeyboardManager::keyDown (QKeyEvent * ke) } else { - m_playListModel->setSelected (list_widget->firstVisibleRow(),true); + m_playlist->listWidget()->model()->setSelected (list_widget->firstVisibleRow(),true); //if(list_widget->getAnchorRow() == -1) list_widget->setAnchorRow(list_widget->firstVisibleRow()); } @@ -249,18 +242,18 @@ void KeyboardManager::keyPgDown (QKeyEvent *) { ListWidget* list_widget = m_playlist->listWidget(); int page_size = list_widget->visibleRows(); - int offset = (list_widget->firstVisibleRow() +page_size < m_playListModel->count()) ? - list_widget->firstVisibleRow() +page_size:m_playListModel->count() - 1; + int offset = (list_widget->firstVisibleRow() +page_size < m_playlist->listWidget()->model()->count()) ? + list_widget->firstVisibleRow() +page_size:m_playlist->listWidget()->model()->count() - 1; list_widget->scroll (offset); } void KeyboardManager::keyEnter (QKeyEvent *) { - QList<int> rows = m_playListModel->getSelectedRows(); + QList<int> rows = m_playlist->listWidget()->model()->getSelectedRows(); MainWindow* mw = qobject_cast<MainWindow*> (m_playlist->parentWidget()); if (mw && rows.count() > 0) { - m_playListModel->setCurrent (rows[0]); + m_playlist->listWidget()->model()->setCurrent (rows[0]); mw->replay(); } } @@ -271,17 +264,17 @@ void KeyboardManager::keyHome(QKeyEvent *ke) m_playlist->listWidget()->scroll (0); if(ke->modifiers() & Qt::ShiftModifier) for(int i = 0; i <= list_widget->getAnchorRow(); ++i) - m_playListModel->setSelected (i,true); + m_playlist->listWidget()->model()->setSelected (i,true); } void KeyboardManager::keyEnd(QKeyEvent *ke) { ListWidget* list_widget = m_playlist->listWidget(); int page_size = list_widget->visibleRows(); - int scroll_to = m_playListModel->count() - page_size; + int scroll_to = m_playlist->listWidget()->model()->count() - page_size; if(scroll_to >= 0) list_widget->scroll(scroll_to); if(ke->modifiers() & Qt::ShiftModifier) - for(int i = list_widget->getAnchorRow(); i < m_playListModel->count(); ++i) - m_playListModel->setSelected (i,true); + for(int i = list_widget->getAnchorRow(); i < m_playlist->listWidget()->model()->count(); ++i) + m_playlist->listWidget()->model()->setSelected (i,true); } diff --git a/src/ui/keyboardmanager.h b/src/ui/keyboardmanager.h index 791a93334..73fa1bd53 100644 --- a/src/ui/keyboardmanager.h +++ b/src/ui/keyboardmanager.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006 by Ilya Kotov * + * Copyright (C) 2006-2009 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -23,7 +23,6 @@ #define _KEYBOARDMANAGER_H class PlayList; -class PlayListModel; class QKeyEvent; @@ -52,10 +51,6 @@ class KeyboardManager */ bool handleKeyRelease (QKeyEvent*); - /*! - * Inits the \b KeyboardManager object with data model. - */ - void setModel (PlayListModel*); protected: void keyUp (QKeyEvent* ke); void keyDown (QKeyEvent* ke); @@ -66,7 +61,6 @@ class KeyboardManager void keyEnd(QKeyEvent* ke); private: PlayList* m_playlist; - PlayListModel* m_playListModel; }; #endif diff --git a/src/ui/listwidget.cpp b/src/ui/listwidget.cpp index 6a56d4218..2a80fb421 100644 --- a/src/ui/listwidget.cpp +++ b/src/ui/listwidget.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2008 by Ilya Kotov * + * Copyright (C) 2006-2009 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -27,11 +27,9 @@ #include <QUrl> #include <QApplication> #include <QHelpEvent> - #include <qmmpui/playlistitem.h> #include <qmmpui/playlistmodel.h> #include <qmmpui/mediaplayer.h> - #include "textscroller.h" #include "listwidget.h" #include "skin.h" @@ -71,7 +69,6 @@ void ListWidget::readSettings() m_show_protocol = settings.value ("PlayList/show_protocol", FALSE).toBool(); m_show_number = settings.value ("PlayList/show_numbers", TRUE).toBool(); - if (m_update) { delete m_metrics; @@ -179,19 +176,11 @@ void ListWidget::mousePressEvent(QMouseEvent *e) if (m_pressed_row > m_anchor_row) { - //int upper_selected = m_model->firstSelectedUpper(m_anchor_row); - //if (INVALID_ROW != upper_selected) - //{ - /*for (int j = upper_selected;j < m_anchor_row;j++) - { - m_model->setSelected(j, false); - }*/ m_model->clearSelection(); for (int j = m_anchor_row;j <= m_pressed_row;j++) { m_model->setSelected(j, true); } - //} } else { @@ -201,27 +190,6 @@ void ListWidget::mousePressEvent(QMouseEvent *e) m_model->setSelected(j, true); } } - - /* - int upper_selected = m_model->firstSelectedUpper(row); - int lower_selected = m_model->firstSelectedLower(row); - if (INVALID_ROW != upper_selected) - { - for (int j = upper_selected;j <= row;j++) - { - m_model->setSelected(j, true); - } - } - else if (INVALID_ROW != lower_selected) - { - for (int j = row;j <= lower_selected;j++) - { - m_model->setSelected(j, true); - } - } - else - m_model->setSelected(row, true); - */ } else { @@ -324,9 +292,11 @@ void ListWidget::updateList() update(); } -void ListWidget::setModel(PlayListModel *model) +void ListWidget::setModel(PlayListModel *selected, PlayListModel *previous) { - m_model = model; + if(previous) + disconnect(previous, 0, this, 0); //disconnect previous model + m_model = selected; connect (m_model, SIGNAL(listChanged()), SLOT(updateList())); connect (m_model, SIGNAL(currentChanged()), SLOT(recenterCurrent())); updateList(); @@ -464,7 +434,6 @@ int ListWidget::rowAt(int y) const return INVALID_ROW; } - void ListWidget::contextMenuEvent(QContextMenuEvent * event) { if (menu()) diff --git a/src/ui/listwidget.h b/src/ui/listwidget.h index df3889593..15e657c62 100644 --- a/src/ui/listwidget.h +++ b/src/ui/listwidget.h @@ -46,7 +46,6 @@ public: ~ListWidget(); - void setModel(PlayListModel *); void readSettings(); /*! * Returns count of currently visible rows. @@ -74,15 +73,24 @@ public: m_anchor_row = r; } + QMenu *menu() + { + return m_menu; + } + + PlayListModel *model() + { + Q_ASSERT(!m_model); + return m_model; + } + + public slots: void updateList(); void scroll(int); //0-99 void recenterCurrent(); + void setModel(PlayListModel *selected, PlayListModel *previous = 0); - QMenu *menu() - { - return m_menu; - } signals: void selectionChanged(); diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index ae23f58b0..4f021d725 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2009 by Ilya Kotov m * + * Copyright (C) 2006-2009 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -22,6 +22,7 @@ #include <QDir> #include <QAction> #include <QMenu> +#include <QLibrary> #include <math.h> @@ -35,6 +36,7 @@ #include <qmmpui/commandlinemanager.h> #include <qmmpui/filedialog.h> #include <qmmpui/playlistmodel.h> +#include <qmmpui/playlistmanager.h> #include <qmmpui/mediaplayer.h> #include "textscroller.h" @@ -58,10 +60,8 @@ MainWindow::MainWindow(const QStringList& args, BuiltinCommandLineOption* option : QMainWindow(parent) { m_vis = 0; - seeking = FALSE; m_update = FALSE; m_paused = FALSE; - m_playlistName = tr("Default"); m_option_manager = option_manager; setWindowIcon(QIcon(":/32x32/qmmp.png")); #if QT_VERSION >= 0x040500 @@ -69,14 +69,13 @@ MainWindow::MainWindow(const QStringList& args, BuiltinCommandLineOption* option #else setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowSystemMenuHint); #endif - //setFixedSize (275,116); setWindowTitle("Qmmp"); //prepare libqmmp and libqmmpui libraries for playing m_player = new MediaPlayer(this); m_core = new SoundCore(this); - m_playListModel = new PlayListModel(this); - m_player->initialize(m_core, m_playListModel); + m_pl_manager = new PlayListManager(this); + m_player->initialize(m_core, m_pl_manager); //additional featuries new PlaylistParser(this); m_generalHandler = new GeneralHandler(this); @@ -90,15 +89,13 @@ MainWindow::MainWindow(const QStringList& args, BuiltinCommandLineOption* option setCentralWidget(m_display); m_display->setFocus (); - m_playlist = new PlayList(this); - m_playlist->setModel(m_playListModel); + m_playlist = new PlayList(m_pl_manager, this); dock->addWidget(m_playlist); m_equalizer = new EqWidget(this); dock->addWidget(m_equalizer); - m_jumpDialog = new JumpToTrackDialog(this); - m_jumpDialog->setModel(m_playListModel); + m_jumpDialog = new JumpToTrackDialog(m_pl_manager, this); m_jumpDialog->hide(); createActions(); @@ -113,22 +110,19 @@ MainWindow::MainWindow(const QStringList& args, BuiltinCommandLineOption* option connect (m_playlist,SIGNAL(pause()), m_core ,SLOT(pause())); connect (m_playlist,SIGNAL(stop()),SLOT(stop())); connect (m_playlist,SIGNAL(eject()),SLOT(addFile())); - connect (m_playlist,SIGNAL(newPlaylist()),SLOT(newPlaylist())); connect (m_playlist,SIGNAL(loadPlaylist()),SLOT(loadPlaylist())); connect (m_playlist,SIGNAL(savePlaylist()),SLOT(savePlaylist())); - connect(m_display,SIGNAL(shuffleToggled(bool)),m_playListModel,SLOT(prepareForShufflePlaying(bool))); - connect(m_display,SIGNAL(repeatableToggled(bool)),m_playListModel,SLOT(prepareForRepeatablePlaying(bool))); + connect(m_display,SIGNAL(shuffleToggled(bool)),m_pl_manager,SLOT(setShuffle(bool))); + connect(m_display,SIGNAL(repeatableToggled(bool)),m_pl_manager,SLOT(setRepeatableList(bool))); connect(m_equalizer, SIGNAL(valueChanged()), SLOT(updateEQ())); - connect(m_jumpDialog,SIGNAL(playRequest()),this,SLOT(play())); + connect(m_jumpDialog,SIGNAL(playRequest()), SLOT(replay())); connect(m_core, SIGNAL(stateChanged(Qmmp::State)), SLOT(showState(Qmmp::State))); connect(m_core, SIGNAL(elapsedChanged(qint64)),m_playlist, SLOT(setTime(qint64))); connect(m_core, SIGNAL(metaDataChanged()),SLOT(showMetaData())); - connect(m_core, SIGNAL(bufferingProgress(int)), TextScroller::getPointer(), - SLOT(setProgress(int))); - + connect(m_core, SIGNAL(bufferingProgress(int)), TextScroller::getPointer(), SLOT(setProgress(int))); connect(m_generalHandler, SIGNAL(toggleVisibilityCalled()), SLOT(toggleVisibility())); connect(m_generalHandler, SIGNAL(exitCalled()), SLOT(close())); @@ -136,7 +130,7 @@ MainWindow::MainWindow(const QStringList& args, BuiltinCommandLineOption* option m_display->setEQ(m_equalizer); m_display->setPL(m_playlist); dock->updateDock(); - m_playListModel->doCurrentVisibleRequest(); + m_pl_manager->currentPlayList()->doCurrentVisibleRequest(); updateEQ(); #ifndef Q_OS_WIN32 QString cwd = QDir::currentPath(); @@ -148,9 +142,7 @@ MainWindow::MainWindow(const QStringList& args, BuiltinCommandLineOption* option MainWindow::~MainWindow() -{ - //stop(); -} +{} void MainWindow::play() { @@ -160,16 +152,15 @@ void MainWindow::play() void MainWindow::replay() { stop(); + m_pl_manager->activatePlayList(m_pl_manager->selectedPlayList()); play(); } void MainWindow::seek(qint64 pos) { - if (!seeking) - m_core->seek(pos); + m_core->seek(pos); } - void MainWindow::forward() { seek(m_core->elapsed() + KEY_OFFSET); @@ -217,12 +208,12 @@ void MainWindow::updateEQ() void MainWindow::showState(Qmmp::State state) { - disconnect(m_playListModel, SIGNAL(firstAdded()), this, SLOT(play())); + //disconnect(m_playListModel, SIGNAL(firstAdded()), this, SLOT(play())); switch ((int) state) { case Qmmp::Playing: - if (m_playListModel->currentItem()) - m_equalizer->loadPreset(m_playListModel->currentItem()->url().section("/",-1)); + if (m_pl_manager->currentPlayList()->currentItem()) + m_equalizer->loadPreset(m_pl_manager->currentPlayList()->currentItem()->url().section("/",-1)); if (m_playlist->listWidget()) m_playlist->listWidget()->updateList(); //removes progress message from TextScroller break; @@ -237,6 +228,7 @@ void MainWindow::showState(Qmmp::State state) break; } } + void MainWindow::showMetaData() { qDebug("===== metadata ======"); @@ -270,7 +262,7 @@ void MainWindow::closeEvent (QCloseEvent *) void MainWindow::addDir() { FileDialog::popup(this, FileDialog::AddDirs, &m_lastDir, - m_playListModel, SLOT(addFileList(const QStringList&)), + m_pl_manager->selectedPlayList(), SLOT(addFileList(const QStringList&)), tr("Choose a directory")); } @@ -281,25 +273,10 @@ void MainWindow::addFile() MetaDataManager::instance()->nameFilters().join (" ") +")"; filters << MetaDataManager::instance()->filters(); FileDialog::popup(this, FileDialog::AddDirsFiles, &m_lastDir, - m_playListModel, SLOT(addFileList(const QStringList&)), + m_pl_manager->selectedPlayList(), SLOT(addFileList(const QStringList&)), tr("Select one or more files to open"), filters.join(";;")); } -void MainWindow::clear() -{ - m_playListModel->clear(); -} - -void MainWindow::startSeek() -{ - seeking = TRUE; -} - -void MainWindow::endSeek() -{ - seeking = FALSE; -} - void MainWindow::changeEvent (QEvent * event) { if (event->type() == QEvent::ActivationChange) @@ -328,14 +305,11 @@ void MainWindow::readSettings() bool val = settings.value("Playlist/repeatable",FALSE).toBool(); // Repeat/Shuffle - m_playListModel->prepareForRepeatablePlaying(val); + m_pl_manager->setRepeatableList(val); m_display->setIsRepeatable(val); val = settings.value("Playlist/shuffle",FALSE).toBool(); m_display->setIsShuffle(val); - m_playListModel->prepareForShufflePlaying(val); - - // Playlist name - m_playlistName = settings.value("Playlist/playlist_name","Default").toString(); + m_pl_manager->setShuffle(val); m_update = TRUE; } @@ -363,8 +337,6 @@ void MainWindow::writeSettings() settings.setValue("repeatable",m_display->isRepeatable()); settings.setValue("shuffle",m_display->isShuffle()); - // Playlist name - settings.setValue("playlist_name",m_playlistName); settings.endGroup(); } @@ -376,7 +348,6 @@ void MainWindow::showSettings() readSettings(); m_playlist->readSettings(); TextScroller::getPointer()->readSettings(); - //m_core->updateConfig(); m_visMenu->updateActions(); m_skin->reloadSkin(); Dock::instance()->updateDock(); @@ -433,12 +404,12 @@ void MainWindow::createActions() repeateAllAction->setShortcut(tr("R")) ; repeateTrackAction->setShortcut(tr("Ctrl+R")) ; shuffleAction->setShortcut(tr("S")) ; - connect(repeateAllAction, SIGNAL(triggered (bool)), m_playListModel, SLOT(prepareForRepeatablePlaying(bool))); + connect(repeateAllAction, SIGNAL(triggered (bool)), m_pl_manager, SLOT(setRepeatableList(bool))); connect(repeateTrackAction, SIGNAL(triggered (bool)), m_player, SLOT(setRepeatable(bool))); - connect(shuffleAction, SIGNAL(triggered (bool)), m_playListModel, SLOT(prepareForShufflePlaying(bool))); - connect(m_playListModel, SIGNAL(repeatableListChanged(bool)), repeateAllAction, SLOT(setChecked(bool))); + connect(shuffleAction, SIGNAL(triggered (bool)), m_pl_manager, SLOT(setShuffle(bool))); + connect(m_pl_manager, SIGNAL(repeatableListChanged(bool)), repeateAllAction, SLOT(setChecked(bool))); connect(m_player, SIGNAL (repeatableChanged(bool)), repeateTrackAction, SLOT(setChecked(bool))); - connect(m_playListModel, SIGNAL(shuffleChanged(bool)), shuffleAction, SLOT(setChecked(bool))); + connect(m_pl_manager, SIGNAL(shuffleChanged(bool)), shuffleAction, SLOT(setChecked(bool))); m_mainMenu->addSeparator(); m_mainMenu->addAction(tr("&Jump To File"),this, SLOT(jumpToFile()), tr("J")); m_mainMenu->addSeparator(); @@ -477,12 +448,6 @@ QMenu* MainWindow::menu() return m_mainMenu; } -void MainWindow::newPlaylist() -{ - m_playListModel->clear(); - m_playlistName = tr("Default"); -} - void MainWindow::loadPlaylist() { QStringList l; @@ -497,9 +462,9 @@ void MainWindow::loadPlaylist() QString f_name = FileDialog::getOpenFileName(this,tr("Open Playlist"),m_lastDir,mask); if (!f_name.isEmpty()) { - m_playListModel->clear(); - m_playListModel->loadPlaylist(f_name); - m_playlistName = QFileInfo(f_name).baseName(); + m_pl_manager->selectedPlayList()->clear(); + m_pl_manager->selectedPlayList()->loadPlaylist(f_name); + m_pl_manager->selectedPlayList()->setName(QFileInfo(f_name).baseName()); m_lastDir = QFileInfo(f_name).absoluteDir().path(); } } @@ -520,12 +485,11 @@ void MainWindow::savePlaylist() QString mask = tr("Playlist Files")+" (" + l.join(" *.").prepend("*.") + ")"; QString f_name = FileDialog::getSaveFileName(this, tr("Save Playlist"),m_lastDir + "/" + - m_playlistName + "." + l[0],mask); + m_pl_manager->selectedPlayList()->name() + "." + l[0],mask); if (!f_name.isEmpty()) { - m_playListModel->savePlaylist(f_name); - m_playlistName = QFileInfo(f_name).baseName(); + m_pl_manager->selectedPlayList()->savePlaylist(f_name); m_lastDir = QFileInfo(f_name).absoluteDir().path(); } } @@ -538,12 +502,12 @@ void MainWindow::setFileList(const QStringList & l) if (m_core->state() == Qmmp::Playing || m_core->state() == Qmmp::Paused) stop(); qApp->processEvents(); //receive stop signal - connect(m_playListModel, SIGNAL(firstAdded()), this, SLOT(play())); - if (!m_playListModel->setFileList(l)) + //connect(m_playListModel, SIGNAL(firstAdded()), this, SLOT(play())); + /*if (!m_playListModel->setFileList(l)) { disconnect(m_playListModel, SIGNAL(firstAdded()), this, SLOT(play())); addFile(); - } + }*/ } void MainWindow::playPause() @@ -572,7 +536,7 @@ bool MainWindow::processCommandArgs(const QStringList &slist,const QString& cwd) else full_path_list << cwd + "/" + slist.at(i); } - m_playListModel->addFileList(full_path_list); //TODO url support + m_pl_manager->currentPlayList()->addFileList(full_path_list); //TODO url support } else if (str.startsWith("-")) // is it a command? { @@ -618,7 +582,7 @@ void MainWindow::handleCloseRequest() void MainWindow::addUrl() { - AddUrlDialog::popup(this,m_playListModel); + AddUrlDialog::popup(this, m_pl_manager->currentPlayList()); } SoundCore * MainWindow::soundCore() const diff --git a/src/ui/mainwindow.h b/src/ui/mainwindow.h index bb6c49001..42d3d7d77 100644 --- a/src/ui/mainwindow.h +++ b/src/ui/mainwindow.h @@ -34,7 +34,7 @@ @author Ilya Kotov <forkotov02@hotmail.ru> */ class PlayList; -class PlayListModel; +class PlayListManager; class ConfigDialog; class EqWidget; class MainVisual; @@ -82,23 +82,19 @@ public slots: void addFile(); void addUrl(); - void newPlaylist(); void loadPlaylist(); void savePlaylist(); void setFileList(const QStringList&); protected: - virtual void closeEvent ( QCloseEvent *); - virtual void changeEvent ( QEvent * event ); - virtual void keyPressEvent ( QKeyEvent* ); + virtual void closeEvent (QCloseEvent *); + virtual void changeEvent (QEvent *event); + virtual void keyPressEvent (QKeyEvent* ); private slots: void showState(Qmmp::State state); void showMetaData(); - void clear(); - void startSeek(); - void endSeek(); void showSettings(); void updateEQ(); void forward(); @@ -110,12 +106,11 @@ private: void readSettings(); void writeSettings(); void createActions(); - bool seeking; SoundCore *m_core; QMenu *m_mainMenu; MainDisplay *m_display; PlayList *m_playlist; - PlayListModel *m_playListModel; + PlayListManager *m_pl_manager; ConfigDialog *m_confDialog; int m_preamp; EqWidget *m_equalizer; @@ -127,7 +122,6 @@ private: bool m_paused; bool m_showToolTip; Skin *m_skin; - QString m_playlistName; JumpToTrackDialog* m_jumpDialog; bool m_hideOnClose, m_startHidden; VisualMenu *m_visMenu; diff --git a/src/ui/playlist.cpp b/src/ui/playlist.cpp index 6471bf6ed..296d26d5e 100644 --- a/src/ui/playlist.cpp +++ b/src/ui/playlist.cpp @@ -41,18 +41,19 @@ #include <qmmpui/playlistitem.h> #include <qmmpui/playlistmodel.h> +#include <qmmpui/playlistmanager.h> #include <qmmpui/fileloader.h> #include <qmmpui/generalhandler.h> #include <qmmp/soundcore.h> -PlayList::PlayList (QWidget *parent) +PlayList::PlayList (PlayListManager *manager, QWidget *parent) : QWidget (parent) { + m_pl_manager = manager; m_update = FALSE; m_resize = FALSE; m_skin = Skin::instance(); m_ratio = m_skin->ratio(); - createMenus(); m_shaded = FALSE; resize (275*m_ratio, 116*m_ratio); @@ -76,6 +77,7 @@ PlayList::PlayList (QWidget *parent) m_current_time = new SymbolDisplay (this,6); m_keyboardManager = new KeyboardManager (this); + m_pl_actions = new QActionGroup (this); connect (m_listWidget, SIGNAL (selectionChanged()), parent, SLOT (replay())); @@ -95,16 +97,29 @@ PlayList::PlayList (QWidget *parent) connect (m_pl_control, SIGNAL (pauseClicked()), SIGNAL (pause())); connect (m_pl_control, SIGNAL (stopClicked()), SIGNAL (stop())); connect (m_pl_control, SIGNAL (ejectClicked()), SIGNAL (eject())); + + connect (m_pl_manager, SIGNAL (selectedPlayListChanged(PlayListModel *, PlayListModel *)), + m_listWidget, SLOT(setModel(PlayListModel*))); + m_listWidget->setModel(m_pl_manager->selectedPlayList()); + m_titleBar = new PlayListTitleBar (this); m_titleBar->move (0,0); + connect (m_pl_manager, SIGNAL (currentPlayListChanged(PlayListModel *, PlayListModel *)), + m_titleBar, SLOT(setModel(PlayListModel*))); + m_titleBar->setModel(m_pl_manager->currentPlayList()); + + createMenus(); + createActions(); + readSettings(); setCursor(m_skin->getCursor(Skin::CUR_PNORMAL)); updatePositions(); } - PlayList::~PlayList() -{} +{ + delete m_keyboardManager; +} void PlayList::updatePositions() { @@ -168,29 +183,27 @@ void PlayList::createActions() QAction *remSelAct = new QAction (tr ("&Remove Selected"),this); remSelAct->setShortcut (tr ("Del")); m_subMenu->addAction (remSelAct); - connect (remSelAct, SIGNAL (triggered()), - m_playListModel, SLOT (removeSelected ())); - this->addAction (remSelAct); + connect (remSelAct, SIGNAL (triggered()), m_pl_manager, SLOT (removeSelected ())); + addAction (remSelAct); QAction *remAllAct = new QAction (tr ("&Remove All"),this); //remAllAct->setShortcut(tr("D")); FIXME: add correct shortcat m_subMenu->addAction (remAllAct); - connect (remAllAct, SIGNAL (triggered()), m_playListModel, SLOT (clear ())); + connect (remAllAct, SIGNAL (triggered()), m_pl_manager, SLOT (clear ())); m_actions << remAllAct; QAction *remUnselAct = new QAction (tr ("&Remove Unselected"),this); m_subMenu->addAction (remUnselAct); - connect (remUnselAct, SIGNAL (triggered()), - m_playListModel, SLOT (removeUnselected ())); + connect (remUnselAct, SIGNAL (triggered()), m_pl_manager, SLOT (removeUnselected ())); m_subMenu->addSeparator(); - m_subMenu->addAction (tr("Remove unavailable files"), m_playListModel, SLOT(clearInvalidItems())); + m_subMenu->addAction (tr("Remove unavailable files"), m_pl_manager, SLOT(clearInvalidItems())); //listwidget menu QAction *detailsAct = new QAction (tr ("&View Track Details"),this); detailsAct->setShortcut (tr ("Alt+I")); m_listWidget->menu()->addAction (detailsAct); - connect (detailsAct, SIGNAL (triggered()), m_playListModel, SLOT (showDetails ())); + connect (detailsAct, SIGNAL (triggered()), m_pl_manager, SLOT (showDetails ())); // sort menu m_sortMenu->addAction (detailsAct); @@ -227,8 +240,7 @@ void PlayList::createActions() connect (trackAct, SIGNAL (triggered (bool)), signalMapper, SLOT (map())); signalMapper->setMapping (trackAct, PlayListModel::TRACK); - connect (signalMapper, SIGNAL (mapped (int)), - m_playListModel, SLOT (sort (int))); + connect (signalMapper, SIGNAL (mapped (int)), m_pl_manager, SLOT (sort (int))); m_sortMenu->addMenu (sort_mode_menu); @@ -262,14 +274,13 @@ void PlayList::createActions() connect (trackAct, SIGNAL (triggered (bool)), signalMapper, SLOT (map())); signalMapper->setMapping (trackAct, PlayListModel::TRACK); - connect (signalMapper, SIGNAL (mapped (int)), - m_playListModel, SLOT (sortSelection (int))); + connect (signalMapper, SIGNAL (mapped (int)), m_pl_manager, SLOT (sortSelection (int))); m_sortMenu->addMenu (sort_mode_menu); m_sortMenu->addSeparator(); - m_sortMenu->addAction (tr ("Randomize List"),m_playListModel,SLOT (randomizeList())); - m_sortMenu->addAction (tr ("Reverse List"),m_playListModel,SLOT (reverseList())); + m_sortMenu->addAction (tr ("Randomize List"),m_pl_manager,SLOT (randomizeList())); + m_sortMenu->addAction (tr ("Reverse List"),m_pl_manager,SLOT (reverseList())); m_listWidget->menu()->addSeparator(); m_listWidget->menu()->addActions (m_subMenu->actions().mid(0,3)); //use 3 first actions @@ -277,38 +288,39 @@ void PlayList::createActions() tr("Actions"), this)); m_listWidget->menu()->addSeparator(); - m_listWidget->menu()->addAction(tr("&Queue"),m_playListModel, SLOT(addToQueue()), tr("Q")); + m_listWidget->menu()->addAction(tr("&Queue"),m_pl_manager, SLOT(addToQueue()), tr("Q")); m_actions << m_listWidget->menu()->actions(); //select menu QAction *invSelAct = new QAction (tr ("Invert Selection"),this); m_selectMenu->addAction (invSelAct); - connect (invSelAct, SIGNAL (triggered()), - m_playListModel, SLOT (invertSelection ())); + connect (invSelAct, SIGNAL (triggered()), m_pl_manager, SLOT (invertSelection ())); m_selectMenu->addSeparator(); QAction *selNoneAct = new QAction (tr ("&Select None"),this); - //selNoneAct->setShortcut(tr("Ctrl+Shift+A")); + selNoneAct->setShortcut(tr("Shift+A")); m_selectMenu->addAction (selNoneAct); - connect (selNoneAct, SIGNAL (triggered()), - m_playListModel, SLOT (clearSelection ())); + connect (selNoneAct, SIGNAL (triggered()), m_pl_manager, SLOT (clearSelection ())); this->addAction (selNoneAct); QAction *selAllAct = new QAction (tr ("&Select All"),this); selAllAct->setShortcut (tr ("Ctrl+A")); m_actions << selAllAct; m_selectMenu->addAction (selAllAct); - connect (selAllAct, SIGNAL (triggered()), - m_playListModel, SLOT (selectAll ())); - //this->addAction (selAllAct); + connect (selAllAct, SIGNAL (triggered()), m_pl_manager, SLOT (selectAll ())); -// Playlist Menu + // Playlist Menu QAction *newListAct = new QAction (tr ("&New List"),this); newListAct->setShortcut (tr ("Shift+N")); m_actions << newListAct; m_playlistMenu->addAction (newListAct); - connect (newListAct, SIGNAL (triggered()), this, SIGNAL (newPlaylist())); + connect (newListAct, SIGNAL (triggered()), m_pl_manager, SLOT (createPlayList())); + QAction *deleteListAct = new QAction (tr ("&Delete List"),this); + deleteListAct->setShortcut (tr ("Shift+D")); + m_actions << deleteListAct; + m_playlistMenu->addAction (deleteListAct); + connect (deleteListAct, SIGNAL (triggered()), SLOT (deletePlaylist())); m_playlistMenu->addSeparator(); QAction *loadListAct = new QAction (tr ("&Load List"),this); @@ -322,8 +334,19 @@ void PlayList::createActions() m_actions << saveListAct; m_playlistMenu->addAction (saveListAct); connect (saveListAct, SIGNAL (triggered()), this, SIGNAL (savePlaylist())); - //this->addActions (m_playlistMenu->actions()); - + //plalists + m_playlistMenu->addSeparator(); + foreach(QString name, m_pl_manager->playListNames()) + { + QAction *pl = new QAction(name, this); + pl->setCheckable(TRUE); + m_playlistMenu->addAction (pl); + m_pl_actions->addAction(pl); + } + m_pl_actions->actions().at(m_pl_manager->indexOf(m_pl_manager->currentPlayList()))->setChecked(TRUE); + connect(m_pl_actions, SIGNAL(triggered(QAction*)), SLOT(select(QAction*))); + connect(m_pl_manager, SIGNAL(playListAdded(int)), SLOT(addModel(int))); + connect(m_pl_manager, SIGNAL(playListRemoved(int)), SLOT(removeModel(int))); Dock::instance()->addActions (m_actions); } @@ -375,6 +398,7 @@ void PlayList::mousePressEvent (QMouseEvent *e) else m_resize = FALSE; } + void PlayList::mouseMoveEvent (QMouseEvent *e) { if (m_resize) @@ -396,6 +420,7 @@ void PlayList::mouseMoveEvent (QMouseEvent *e) #endif } } + void PlayList::mouseReleaseEvent (QMouseEvent *) { setCursor (m_skin->getCursor (Skin::CUR_PNORMAL)); @@ -404,14 +429,6 @@ void PlayList::mouseReleaseEvent (QMouseEvent *) m_resize = FALSE; Dock::instance()->updateDock(); } -void PlayList::setModel (PlayListModel *model) -{ - m_playListModel = model; - m_listWidget->setModel (model); - m_keyboardManager->setModel (model); - m_titleBar->setModel (model); - createActions(); -} void PlayList::changeEvent (QEvent * event) { @@ -442,7 +459,6 @@ void PlayList::readSettings() settings.endGroup(); m_update = TRUE; } - } void PlayList::writeSettings() @@ -496,14 +512,12 @@ void PlayList::setTime(qint64 time) m_current_time->display (formatTime (time/1000)); m_current_time->update(); - if (m_playListModel && SoundCore::instance()) + if (SoundCore::instance()) { - m_playListModel->totalLength(); - QString str_length = formatTime (m_playListModel->totalLength()) + + QString str_length = formatTime (m_pl_manager->currentPlayList()->totalLength()) + "/" + formatTime (SoundCore::instance()->totalTime()/1000); m_length_totalLength->display (str_length); m_length_totalLength->update(); - } } @@ -515,7 +529,7 @@ void PlayList::updateList() PlayListItem *PlayList::currentItem() { - return m_playListModel ? m_playListModel->currentItem() : 0; + return m_pl_manager->currentPlayList()->currentItem(); } void PlayList::showPlaylistMenu() @@ -537,6 +551,45 @@ void PlayList::updateSkin() setMinimalMode(m_shaded); } +void PlayList::select(QAction *a) +{ + int i = m_pl_actions->actions().indexOf(a); + m_pl_manager->selectPlayList(i); +} + +void PlayList::addModel(int i) +{ + QList <QAction *> actions = m_pl_actions->actions(); + foreach(QAction *a, actions) //clear action group + { + m_pl_actions->removeAction(a); + m_playlistMenu->removeAction (a); + } + QAction *new_action = new QAction(m_pl_manager->playListNames().at(i), this); + new_action->setCheckable(TRUE); + actions.insert(i, new_action); + foreach(QAction *a, actions) + { + m_pl_actions->addAction(a); + m_playlistMenu->addAction (a); + } + m_pl_actions->actions().at(m_pl_manager->indexOf(m_pl_manager->currentPlayList()))->setChecked(TRUE); +} + +void PlayList::removeModel(int i) +{ + QAction *a = m_pl_actions->actions().at(i); + m_pl_actions->removeAction(a); + m_playlistMenu->removeAction (a); + a->deleteLater(); + m_pl_actions->actions().at(m_pl_manager->indexOf(m_pl_manager->currentPlayList()))->setChecked(TRUE); +} + +void PlayList::deletePlaylist() +{ + m_pl_manager->removePlayList(m_pl_manager->selectedPlayList()); +} + void PlayList::setMinimalMode(bool b) { if(!m_shaded) diff --git a/src/ui/playlist.h b/src/ui/playlist.h index 2d17a59d4..4b58b0048 100644 --- a/src/ui/playlist.h +++ b/src/ui/playlist.h @@ -23,6 +23,7 @@ #include <QWidget> class QMenu; +class QActionGroup; class Skin; class ListWidget; class PlayListItem; @@ -36,6 +37,7 @@ class OutputState; class PixmapWidget; class PlaylistControl; class KeyboardManager; +class PlayListManager; /** @@ -45,11 +47,10 @@ class PlayList : public QWidget { Q_OBJECT public: - PlayList (QWidget *parent = 0); + PlayList (PlayListManager *manager, QWidget *parent = 0); ~PlayList(); void load (PlayListItem *); - void setModel (PlayListModel *); void readSettings(); PlayListItem *currentItem(); ListWidget* listWidget() const @@ -67,7 +68,6 @@ class PlayList : public QWidget void eject(); void loadPlaylist(); void savePlaylist(); - void newPlaylist(); void closed(); public slots: @@ -81,7 +81,10 @@ class PlayList : public QWidget void showSortMenu(); void showPlaylistMenu(); void updateSkin(); - + void select(QAction *a); //selects playlist with action + void addModel(int i); + void removeModel(int i); + void deletePlaylist(); private: void updatePositions(); @@ -108,7 +111,6 @@ class PlayList : public QWidget Skin *m_skin; ListWidget *m_listWidget; - PlayListModel *m_playListModel; PlayListTitleBar *m_titleBar; PlayListSlider *m_plslider; QList <QAction *> m_actions; @@ -118,7 +120,9 @@ class PlayList : public QWidget int m_ratio; int m_height; bool m_shaded; + PlayListManager *m_pl_manager; KeyboardManager* m_keyboardManager; + QActionGroup *m_pl_actions; protected: virtual void paintEvent (QPaintEvent *); diff --git a/src/ui/playlisttitlebar.cpp b/src/ui/playlisttitlebar.cpp index 6104ff0e6..8646f1192 100644 --- a/src/ui/playlisttitlebar.cpp +++ b/src/ui/playlisttitlebar.cpp @@ -194,10 +194,13 @@ void PlayListTitleBar::setActive(bool a) } -void PlayListTitleBar::setModel(PlayListModel *model) +void PlayListTitleBar::setModel(PlayListModel *selected, PlayListModel *previous) { - m_model = model; + if(previous) + disconnect(previous, 0, this, 0); //disconnect previous model + m_model = selected; connect (m_model, SIGNAL(listChanged()), SLOT(showCurrent())); + showCurrent(); } void PlayListTitleBar::readSettings() diff --git a/src/ui/playlisttitlebar.h b/src/ui/playlisttitlebar.h index cde01c3c6..745aab446 100644 --- a/src/ui/playlisttitlebar.h +++ b/src/ui/playlisttitlebar.h @@ -37,15 +37,13 @@ class PlayListTitleBar : public PixmapWidget Q_OBJECT public: PlayListTitleBar(QWidget *parent = 0); - ~PlayListTitleBar(); - void setActive(bool); - void setModel(PlayListModel *model); void readSettings(); public slots: void showCurrent(); + void setModel(PlayListModel *selected, PlayListModel *previous = 0); private slots: void updateSkin(); diff --git a/src/ui/translations/qmmp_cs.ts b/src/ui/translations/qmmp_cs.ts index dd4aa1171..4c73fe409 100644 --- a/src/ui/translations/qmmp_cs.ts +++ b/src/ui/translations/qmmp_cs.ts @@ -615,14 +615,14 @@ <name>JumpToTrackDialog</name> <message> <location filename="../jumptotrackdialog.cpp" line="81"/> - <location filename="../jumptotrackdialog.cpp" line="137"/> + <location filename="../jumptotrackdialog.cpp" line="132"/> <source>Unqueue</source> <translation>Vyřadit</translation> </message> <message> <location filename="../forms/jumptotrackdialog.ui" line="79"/> <location filename="../jumptotrackdialog.cpp" line="83"/> - <location filename="../jumptotrackdialog.cpp" line="139"/> + <location filename="../jumptotrackdialog.cpp" line="134"/> <source>Queue</source> <translation>Zařadit</translation> </message> @@ -851,174 +851,168 @@ <context> <name>MainWindow</name> <message> - <location filename="../mainwindow.cpp" line="64"/> - <location filename="../mainwindow.cpp" line="483"/> - <source>Default</source> - <translation>Seznam</translation> - </message> - <message> - <location filename="../mainwindow.cpp" line="274"/> + <location filename="../mainwindow.cpp" line="266"/> <source>Choose a directory</source> <translation>Výběr adresáře</translation> </message> <message> - <location filename="../mainwindow.cpp" line="285"/> + <location filename="../mainwindow.cpp" line="277"/> <source>Select one or more files to open</source> <translation>Vyberte jeden či více souborů k otevření</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>&Play</source> <translation>Pře&hrát</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>X</source> <translation>X</translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>&Pause</source> <translation>Pau&za</translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>C</source> <translation>C</translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>&Stop</source> <translation>&Stop</translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>V</source> <translation>V</translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>&Previous</source> <translation>&Předchozí</translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>Z</source> <translation>Z</translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>&Next</source> <translation>&Další</translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>B</source> <translation>B</translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>&Jump To File</source> <translation>Přeskočit na soubo&r</translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>J</source> <translation>J</translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>&Settings</source> <translation>&Nastavení</translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>Ctrl+P</source> <translation>Ctrl+P</translation> </message> <message> - <location filename="../mainwindow.cpp" line="451"/> + <location filename="../mainwindow.cpp" line="422"/> <source>&About</source> <translation>O &aplikaci</translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>&Exit</source> <translation>U&končit</translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>Ctrl+Q</source> <translation>Ctrl+Q</translation> </message> <message> - <location filename="../mainwindow.cpp" line="495"/> - <location filename="../mainwindow.cpp" line="521"/> + <location filename="../mainwindow.cpp" line="460"/> + <location filename="../mainwindow.cpp" line="486"/> <source>Playlist Files</source> <translation>Seznamy skladeb</translation> </message> <message> - <location filename="../mainwindow.cpp" line="497"/> + <location filename="../mainwindow.cpp" line="462"/> <source>Open Playlist</source> <translation>Načíst seznam skladeb</translation> </message> <message> - <location filename="../mainwindow.cpp" line="522"/> + <location filename="../mainwindow.cpp" line="487"/> <source>Save Playlist</source> <translation>Uložit seznam skladeb</translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>Space</source> <translation>Mezerník</translation> </message> <message> - <location filename="../mainwindow.cpp" line="452"/> + <location filename="../mainwindow.cpp" line="423"/> <source>&About Qt</source> <translation>O knihovně &Qt</translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>&Play/Pause</source> <translation>&Přehrát/Pauza</translation> </message> <message> - <location filename="../mainwindow.cpp" line="280"/> + <location filename="../mainwindow.cpp" line="272"/> <source>All Supported Bitstreams</source> <translation>Všechny podporované formáty</translation> </message> <message> - <location filename="../mainwindow.cpp" line="428"/> + <location filename="../mainwindow.cpp" line="399"/> <source>&Repeat Track</source> <translation>&Opakovat stopu</translation> </message> <message> - <location filename="../mainwindow.cpp" line="429"/> + <location filename="../mainwindow.cpp" line="400"/> <source>&Shuffle</source> <translation>Za&míchat</translation> </message> <message> - <location filename="../mainwindow.cpp" line="433"/> + <location filename="../mainwindow.cpp" line="404"/> <source>R</source> <translation>O</translation> </message> <message> - <location filename="../mainwindow.cpp" line="434"/> + <location filename="../mainwindow.cpp" line="405"/> <source>Ctrl+R</source> <translation>Ctrl+R</translation> </message> <message> - <location filename="../mainwindow.cpp" line="435"/> + <location filename="../mainwindow.cpp" line="406"/> <source>S</source> <translation>M</translation> </message> <message> - <location filename="../mainwindow.cpp" line="427"/> + <location filename="../mainwindow.cpp" line="398"/> <source>&Repeat Playlist</source> <translation>&Opakovat seznam skladeb</translation> </message> <message> - <location filename="../mainwindow.cpp" line="447"/> + <location filename="../mainwindow.cpp" line="418"/> <source>Tools</source> <translation>Nástroje</translation> </message> @@ -1026,194 +1020,209 @@ <context> <name>PlayList</name> <message> - <location filename="../playlist.cpp" line="149"/> + <location filename="../playlist.cpp" line="164"/> <source>&Add File</source> <translation>Přidat &soubor</translation> </message> <message> - <location filename="../playlist.cpp" line="150"/> + <location filename="../playlist.cpp" line="165"/> <source>F</source> <translation>F</translation> </message> <message> - <location filename="../playlist.cpp" line="155"/> + <location filename="../playlist.cpp" line="170"/> <source>&Add Directory</source> <translation>Přidat &adresář</translation> </message> <message> - <location filename="../playlist.cpp" line="156"/> + <location filename="../playlist.cpp" line="171"/> <source>D</source> <translation>D</translation> </message> <message> - <location filename="../playlist.cpp" line="168"/> + <location filename="../playlist.cpp" line="183"/> <source>&Remove Selected</source> <translation>&Odstranit vybrané</translation> </message> <message> - <location filename="../playlist.cpp" line="169"/> + <location filename="../playlist.cpp" line="184"/> <source>Del</source> <translation>Del</translation> </message> <message> - <location filename="../playlist.cpp" line="175"/> + <location filename="../playlist.cpp" line="189"/> <source>&Remove All</source> <translation>Odstranit &vše</translation> </message> <message> - <location filename="../playlist.cpp" line="181"/> + <location filename="../playlist.cpp" line="195"/> <source>&Remove Unselected</source> <translation>Odstranit &nevybrané</translation> </message> <message> - <location filename="../playlist.cpp" line="187"/> + <location filename="../playlist.cpp" line="200"/> <source>Remove unavailable files</source> <translation>Odstranit nedostupné soubory</translation> </message> <message> - <location filename="../playlist.cpp" line="190"/> + <location filename="../playlist.cpp" line="203"/> <source>&View Track Details</source> <translation>Zobrazit &informace o skladbě</translation> </message> <message> - <location filename="../playlist.cpp" line="191"/> + <location filename="../playlist.cpp" line="204"/> <source>Alt+I</source> <translation>Alt+I</translation> </message> <message> - <location filename="../playlist.cpp" line="199"/> + <location filename="../playlist.cpp" line="212"/> <source>Sort List</source> <translation>Seřadit seznam</translation> </message> <message> - <location filename="../playlist.cpp" line="202"/> - <location filename="../playlist.cpp" line="237"/> + <location filename="../playlist.cpp" line="215"/> + <location filename="../playlist.cpp" line="249"/> <source>By Title</source> <translation>Podle názvu skladby</translation> </message> <message> - <location filename="../playlist.cpp" line="206"/> - <location filename="../playlist.cpp" line="241"/> + <location filename="../playlist.cpp" line="219"/> + <location filename="../playlist.cpp" line="253"/> <source>By Album</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="210"/> - <location filename="../playlist.cpp" line="245"/> + <location filename="../playlist.cpp" line="223"/> + <location filename="../playlist.cpp" line="257"/> <source>By Artist</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="214"/> - <location filename="../playlist.cpp" line="249"/> + <location filename="../playlist.cpp" line="227"/> + <location filename="../playlist.cpp" line="261"/> <source>By Filename</source> <translation>Podle názvu souboru</translation> </message> <message> - <location filename="../playlist.cpp" line="218"/> - <location filename="../playlist.cpp" line="253"/> + <location filename="../playlist.cpp" line="231"/> + <location filename="../playlist.cpp" line="265"/> <source>By Path + Filename</source> <translation>Podle cesty a názvu souboru</translation> </message> <message> - <location filename="../playlist.cpp" line="222"/> - <location filename="../playlist.cpp" line="257"/> + <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="269"/> <source>By Date</source> <translation>Podle data</translation> </message> <message> - <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="247"/> <source>Sort Selection</source> <translation>Seřadit výběr</translation> </message> <message> - <location filename="../playlist.cpp" line="271"/> + <location filename="../playlist.cpp" line="282"/> <source>Randomize List</source> <translation>Zamíchat seznam</translation> </message> <message> - <location filename="../playlist.cpp" line="272"/> + <location filename="../playlist.cpp" line="283"/> <source>Reverse List</source> <translation>Obrátit pořadí seznamu</translation> </message> <message> - <location filename="../playlist.cpp" line="284"/> + <location filename="../playlist.cpp" line="295"/> <source>Invert Selection</source> <translation>Invertovat výběr</translation> </message> <message> - <location filename="../playlist.cpp" line="291"/> + <location filename="../playlist.cpp" line="301"/> <source>&Select None</source> <translation>&Zrušit výběr</translation> </message> <message> - <location filename="../playlist.cpp" line="298"/> + <location filename="../playlist.cpp" line="302"/> + <source>Shift+A</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="307"/> <source>&Select All</source> <translation>&Vybrat vše</translation> </message> <message> - <location filename="../playlist.cpp" line="299"/> + <location filename="../playlist.cpp" line="308"/> <source>Ctrl+A</source> <translation>Ctrl+A</translation> </message> <message> - <location filename="../playlist.cpp" line="307"/> + <location filename="../playlist.cpp" line="314"/> <source>&New List</source> <translation>&Nový seznam</translation> </message> <message> - <location filename="../playlist.cpp" line="308"/> + <location filename="../playlist.cpp" line="315"/> <source>Shift+N</source> <translation>Shift+N</translation> </message> <message> - <location filename="../playlist.cpp" line="314"/> + <location filename="../playlist.cpp" line="319"/> + <source>&Delete List</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="320"/> + <source>Shift+D</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="326"/> <source>&Load List</source> <translation>Načíst &seznam</translation> </message> <message> - <location filename="../playlist.cpp" line="315"/> + <location filename="../playlist.cpp" line="327"/> <source>O</source> <translation>O</translation> </message> <message> - <location filename="../playlist.cpp" line="320"/> + <location filename="../playlist.cpp" line="332"/> <source>&Save List</source> <translation>&Uložit seznam</translation> </message> <message> - <location filename="../playlist.cpp" line="321"/> + <location filename="../playlist.cpp" line="333"/> <source>Shift+S</source> <translation>Shift+S</translation> </message> <message> - <location filename="../playlist.cpp" line="161"/> + <location filename="../playlist.cpp" line="176"/> <source>&Add Url</source> <translation>Přidat &URL</translation> </message> <message> - <location filename="../playlist.cpp" line="162"/> + <location filename="../playlist.cpp" line="177"/> <source>U</source> <translation>U</translation> </message> <message> - <location filename="../playlist.cpp" line="226"/> - <location filename="../playlist.cpp" line="261"/> + <location filename="../playlist.cpp" line="239"/> + <location filename="../playlist.cpp" line="273"/> <source>By Track Number</source> <translation>Podle čísla skladby</translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>&Queue</source> <translation>&Fronta</translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>Q</source> <translation>Q</translation> </message> <message> - <location filename="../playlist.cpp" line="277"/> + <location filename="../playlist.cpp" line="288"/> <source>Actions</source> <translation>Činnosti</translation> </message> diff --git a/src/ui/translations/qmmp_de.ts b/src/ui/translations/qmmp_de.ts index 625da29b6..5824c12c6 100644 --- a/src/ui/translations/qmmp_de.ts +++ b/src/ui/translations/qmmp_de.ts @@ -615,14 +615,14 @@ <name>JumpToTrackDialog</name> <message> <location filename="../jumptotrackdialog.cpp" line="81"/> - <location filename="../jumptotrackdialog.cpp" line="137"/> + <location filename="../jumptotrackdialog.cpp" line="132"/> <source>Unqueue</source> <translation>Aus Warteschlange entfernen</translation> </message> <message> <location filename="../forms/jumptotrackdialog.ui" line="79"/> <location filename="../jumptotrackdialog.cpp" line="83"/> - <location filename="../jumptotrackdialog.cpp" line="139"/> + <location filename="../jumptotrackdialog.cpp" line="134"/> <source>Queue</source> <translation>In Warteschlange</translation> </message> @@ -851,174 +851,168 @@ <context> <name>MainWindow</name> <message> - <location filename="../mainwindow.cpp" line="64"/> - <location filename="../mainwindow.cpp" line="483"/> - <source>Default</source> - <translation>Standard</translation> - </message> - <message> - <location filename="../mainwindow.cpp" line="274"/> + <location filename="../mainwindow.cpp" line="266"/> <source>Choose a directory</source> <translation>Verzeichnis wählen</translation> </message> <message> - <location filename="../mainwindow.cpp" line="285"/> + <location filename="../mainwindow.cpp" line="277"/> <source>Select one or more files to open</source> <translation>Dateien hinzufügen</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>&Play</source> <translation>&Wiedergabe</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>X</source> <translation>X</translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>&Pause</source> <translation>&Pause</translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>C</source> <translation>C</translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>&Stop</source> <translation>&Stopp</translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>V</source> <translation>V</translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>&Previous</source> <translation>&Vorheriger Titel</translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>Z</source> <translation>Z</translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>&Next</source> <translation>&Nächster Titel</translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>B</source> <translation>B</translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>&Jump To File</source> <translation>Springe zu &Titel</translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>J</source> <translation>J</translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>&Settings</source> <translation>&Einstellungen</translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>Ctrl+P</source> <translation>Strg+P</translation> </message> <message> - <location filename="../mainwindow.cpp" line="451"/> + <location filename="../mainwindow.cpp" line="422"/> <source>&About</source> <translation>Ü&ber</translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>&Exit</source> <translation>Be&enden</translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>Ctrl+Q</source> <translation>Strg+Q</translation> </message> <message> - <location filename="../mainwindow.cpp" line="495"/> - <location filename="../mainwindow.cpp" line="521"/> + <location filename="../mainwindow.cpp" line="460"/> + <location filename="../mainwindow.cpp" line="486"/> <source>Playlist Files</source> <translation>Wiedergabelisten</translation> </message> <message> - <location filename="../mainwindow.cpp" line="497"/> + <location filename="../mainwindow.cpp" line="462"/> <source>Open Playlist</source> <translation>Wiedergabeliste öffnen</translation> </message> <message> - <location filename="../mainwindow.cpp" line="522"/> + <location filename="../mainwindow.cpp" line="487"/> <source>Save Playlist</source> <translation>Wiedergabeliste speichern</translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>Space</source> <translation>Leertaste</translation> </message> <message> - <location filename="../mainwindow.cpp" line="452"/> + <location filename="../mainwindow.cpp" line="423"/> <source>&About Qt</source> <translation>Übe&r Qt</translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>&Play/Pause</source> <translation>Wieder&gabe/Pause</translation> </message> <message> - <location filename="../mainwindow.cpp" line="280"/> + <location filename="../mainwindow.cpp" line="272"/> <source>All Supported Bitstreams</source> <translation>Alle unterstützten Formate</translation> </message> <message> - <location filename="../mainwindow.cpp" line="428"/> + <location filename="../mainwindow.cpp" line="399"/> <source>&Repeat Track</source> <translation>Tite&l wiederholen</translation> </message> <message> - <location filename="../mainwindow.cpp" line="429"/> + <location filename="../mainwindow.cpp" line="400"/> <source>&Shuffle</source> <translation>&Zufallswiedergabe</translation> </message> <message> - <location filename="../mainwindow.cpp" line="433"/> + <location filename="../mainwindow.cpp" line="404"/> <source>R</source> <translation>R</translation> </message> <message> - <location filename="../mainwindow.cpp" line="434"/> + <location filename="../mainwindow.cpp" line="405"/> <source>Ctrl+R</source> <translation>Strg+R</translation> </message> <message> - <location filename="../mainwindow.cpp" line="435"/> + <location filename="../mainwindow.cpp" line="406"/> <source>S</source> <translation>S</translation> </message> <message> - <location filename="../mainwindow.cpp" line="427"/> + <location filename="../mainwindow.cpp" line="398"/> <source>&Repeat Playlist</source> <translation>W&iedergabeliste wiederholen</translation> </message> <message> - <location filename="../mainwindow.cpp" line="447"/> + <location filename="../mainwindow.cpp" line="418"/> <source>Tools</source> <translation>Werkzeuge</translation> </message> @@ -1026,194 +1020,209 @@ <context> <name>PlayList</name> <message> - <location filename="../playlist.cpp" line="149"/> + <location filename="../playlist.cpp" line="164"/> <source>&Add File</source> <translation>&Datei hinzufügen</translation> </message> <message> - <location filename="../playlist.cpp" line="150"/> + <location filename="../playlist.cpp" line="165"/> <source>F</source> <translation>F</translation> </message> <message> - <location filename="../playlist.cpp" line="155"/> + <location filename="../playlist.cpp" line="170"/> <source>&Add Directory</source> <translation>&Verzeichnis hinzufügen</translation> </message> <message> - <location filename="../playlist.cpp" line="156"/> + <location filename="../playlist.cpp" line="171"/> <source>D</source> <translation>D</translation> </message> <message> - <location filename="../playlist.cpp" line="168"/> + <location filename="../playlist.cpp" line="183"/> <source>&Remove Selected</source> <translation>&Ausgewählte entfernen</translation> </message> <message> - <location filename="../playlist.cpp" line="169"/> + <location filename="../playlist.cpp" line="184"/> <source>Del</source> <translation>Entf</translation> </message> <message> - <location filename="../playlist.cpp" line="175"/> + <location filename="../playlist.cpp" line="189"/> <source>&Remove All</source> <translation>Alle &entfernen</translation> </message> <message> - <location filename="../playlist.cpp" line="181"/> + <location filename="../playlist.cpp" line="195"/> <source>&Remove Unselected</source> <translation>&Nicht ausgewählte entfernen</translation> </message> <message> - <location filename="../playlist.cpp" line="187"/> + <location filename="../playlist.cpp" line="200"/> <source>Remove unavailable files</source> <translation>Nichtverfügbare Dateien entfernen</translation> </message> <message> - <location filename="../playlist.cpp" line="190"/> + <location filename="../playlist.cpp" line="203"/> <source>&View Track Details</source> <translation>&Titeldetails anzeigen</translation> </message> <message> - <location filename="../playlist.cpp" line="191"/> + <location filename="../playlist.cpp" line="204"/> <source>Alt+I</source> <translation>Alt+I</translation> </message> <message> - <location filename="../playlist.cpp" line="199"/> + <location filename="../playlist.cpp" line="212"/> <source>Sort List</source> <translation>Wiedergabeliste sortieren</translation> </message> <message> - <location filename="../playlist.cpp" line="202"/> - <location filename="../playlist.cpp" line="237"/> + <location filename="../playlist.cpp" line="215"/> + <location filename="../playlist.cpp" line="249"/> <source>By Title</source> <translation>Nach Titel</translation> </message> <message> - <location filename="../playlist.cpp" line="206"/> - <location filename="../playlist.cpp" line="241"/> + <location filename="../playlist.cpp" line="219"/> + <location filename="../playlist.cpp" line="253"/> <source>By Album</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="210"/> - <location filename="../playlist.cpp" line="245"/> + <location filename="../playlist.cpp" line="223"/> + <location filename="../playlist.cpp" line="257"/> <source>By Artist</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="214"/> - <location filename="../playlist.cpp" line="249"/> + <location filename="../playlist.cpp" line="227"/> + <location filename="../playlist.cpp" line="261"/> <source>By Filename</source> <translation>Nach Dateinamen</translation> </message> <message> - <location filename="../playlist.cpp" line="218"/> - <location filename="../playlist.cpp" line="253"/> + <location filename="../playlist.cpp" line="231"/> + <location filename="../playlist.cpp" line="265"/> <source>By Path + Filename</source> <translation>Nach Pfad + Dateinamen</translation> </message> <message> - <location filename="../playlist.cpp" line="222"/> - <location filename="../playlist.cpp" line="257"/> + <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="269"/> <source>By Date</source> <translation>Nach Datum</translation> </message> <message> - <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="247"/> <source>Sort Selection</source> <translation>Auswahl sortieren</translation> </message> <message> - <location filename="../playlist.cpp" line="271"/> + <location filename="../playlist.cpp" line="282"/> <source>Randomize List</source> <translation>Wiedergabeliste mischen</translation> </message> <message> - <location filename="../playlist.cpp" line="272"/> + <location filename="../playlist.cpp" line="283"/> <source>Reverse List</source> <translation>Wiedergabeliste umkehren</translation> </message> <message> - <location filename="../playlist.cpp" line="284"/> + <location filename="../playlist.cpp" line="295"/> <source>Invert Selection</source> <translation>Auswahl umkehren</translation> </message> <message> - <location filename="../playlist.cpp" line="291"/> + <location filename="../playlist.cpp" line="301"/> <source>&Select None</source> <translation>&Auswahl aufheben</translation> </message> <message> - <location filename="../playlist.cpp" line="298"/> + <location filename="../playlist.cpp" line="302"/> + <source>Shift+A</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="307"/> <source>&Select All</source> <translation>Alle aus&wählen</translation> </message> <message> - <location filename="../playlist.cpp" line="299"/> + <location filename="../playlist.cpp" line="308"/> <source>Ctrl+A</source> <translation>Strg+A</translation> </message> <message> - <location filename="../playlist.cpp" line="307"/> + <location filename="../playlist.cpp" line="314"/> <source>&New List</source> <translation>&Neue Wiedergabeliste</translation> </message> <message> - <location filename="../playlist.cpp" line="308"/> + <location filename="../playlist.cpp" line="315"/> <source>Shift+N</source> <translation>Umschalt+N</translation> </message> <message> - <location filename="../playlist.cpp" line="314"/> + <location filename="../playlist.cpp" line="319"/> + <source>&Delete List</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="320"/> + <source>Shift+D</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="326"/> <source>&Load List</source> <translation>Wiedergabeliste &laden</translation> </message> <message> - <location filename="../playlist.cpp" line="315"/> + <location filename="../playlist.cpp" line="327"/> <source>O</source> <translation>O</translation> </message> <message> - <location filename="../playlist.cpp" line="320"/> + <location filename="../playlist.cpp" line="332"/> <source>&Save List</source> <translation>Wiedergabeliste &speichern</translation> </message> <message> - <location filename="../playlist.cpp" line="321"/> + <location filename="../playlist.cpp" line="333"/> <source>Shift+S</source> <translation>Umschalt+S</translation> </message> <message> - <location filename="../playlist.cpp" line="161"/> + <location filename="../playlist.cpp" line="176"/> <source>&Add Url</source> <translation>&URL hinzufügen</translation> </message> <message> - <location filename="../playlist.cpp" line="162"/> + <location filename="../playlist.cpp" line="177"/> <source>U</source> <translation>U</translation> </message> <message> - <location filename="../playlist.cpp" line="226"/> - <location filename="../playlist.cpp" line="261"/> + <location filename="../playlist.cpp" line="239"/> + <location filename="../playlist.cpp" line="273"/> <source>By Track Number</source> <translation>Nach Titelnummer</translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>&Queue</source> <translation>&Warteschlange</translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>Q</source> <translation>Q</translation> </message> <message> - <location filename="../playlist.cpp" line="277"/> + <location filename="../playlist.cpp" line="288"/> <source>Actions</source> <translation>Aktionen</translation> </message> diff --git a/src/ui/translations/qmmp_it.ts b/src/ui/translations/qmmp_it.ts index de478172c..2448f7930 100644 --- a/src/ui/translations/qmmp_it.ts +++ b/src/ui/translations/qmmp_it.ts @@ -615,14 +615,14 @@ <name>JumpToTrackDialog</name> <message> <location filename="../jumptotrackdialog.cpp" line="81"/> - <location filename="../jumptotrackdialog.cpp" line="137"/> + <location filename="../jumptotrackdialog.cpp" line="132"/> <source>Unqueue</source> <translation>Elimna dalla coda</translation> </message> <message> <location filename="../forms/jumptotrackdialog.ui" line="79"/> <location filename="../jumptotrackdialog.cpp" line="83"/> - <location filename="../jumptotrackdialog.cpp" line="139"/> + <location filename="../jumptotrackdialog.cpp" line="134"/> <source>Queue</source> <translation>Metti in coda</translation> </message> @@ -851,174 +851,168 @@ <context> <name>MainWindow</name> <message> - <location filename="../mainwindow.cpp" line="64"/> - <location filename="../mainwindow.cpp" line="483"/> - <source>Default</source> - <translation>Défault</translation> - </message> - <message> - <location filename="../mainwindow.cpp" line="274"/> + <location filename="../mainwindow.cpp" line="266"/> <source>Choose a directory</source> <translation>Scegliere una cartella</translation> </message> <message> - <location filename="../mainwindow.cpp" line="285"/> + <location filename="../mainwindow.cpp" line="277"/> <source>Select one or more files to open</source> <translation>Seleziona uno o più brani da aprire</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>&Play</source> <translation>&Esegui</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>X</source> <translation>X</translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>&Pause</source> <translation>&Pausa</translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>C</source> <translation>C</translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>&Stop</source> <translation>&Arresta</translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>V</source> <translation>V</translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>&Previous</source> <translation>&Precedente</translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>Z</source> <translation>Z</translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>&Next</source> <translation>&Successivo</translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>B</source> <translation>B</translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>&Jump To File</source> <translation>&Vai al brano</translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>J</source> <translation>J</translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>&Settings</source> <translation>&Configurazione</translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>Ctrl+P</source> <translation>Ctrl+P</translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>&Exit</source> <translation>&Esci</translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>Ctrl+Q</source> <translation>Ctrl+Q</translation> </message> <message> - <location filename="../mainwindow.cpp" line="497"/> + <location filename="../mainwindow.cpp" line="462"/> <source>Open Playlist</source> <translation>Apri lista di brani</translation> </message> <message> - <location filename="../mainwindow.cpp" line="522"/> + <location filename="../mainwindow.cpp" line="487"/> <source>Save Playlist</source> <translation>Salva lista di brani</translation> </message> <message> - <location filename="../mainwindow.cpp" line="451"/> + <location filename="../mainwindow.cpp" line="422"/> <source>&About</source> <translation>&Informazioni</translation> </message> <message> - <location filename="../mainwindow.cpp" line="495"/> - <location filename="../mainwindow.cpp" line="521"/> + <location filename="../mainwindow.cpp" line="460"/> + <location filename="../mainwindow.cpp" line="486"/> <source>Playlist Files</source> <translation>Brani della lista</translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>Space</source> <translation>Spazio</translation> </message> <message> - <location filename="../mainwindow.cpp" line="452"/> + <location filename="../mainwindow.cpp" line="423"/> <source>&About Qt</source> <translation>&Informazioni su Qt</translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>&Play/Pause</source> <translation>&Esegui / Pausa</translation> </message> <message> - <location filename="../mainwindow.cpp" line="280"/> + <location filename="../mainwindow.cpp" line="272"/> <source>All Supported Bitstreams</source> <translation>Elenco di tutti i tipi di flusso accettati</translation> </message> <message> - <location filename="../mainwindow.cpp" line="428"/> + <location filename="../mainwindow.cpp" line="399"/> <source>&Repeat Track</source> <translation>&Ripeti brano</translation> </message> <message> - <location filename="../mainwindow.cpp" line="429"/> + <location filename="../mainwindow.cpp" line="400"/> <source>&Shuffle</source> <translation>&Ordine casuale</translation> </message> <message> - <location filename="../mainwindow.cpp" line="433"/> + <location filename="../mainwindow.cpp" line="404"/> <source>R</source> <translation>R</translation> </message> <message> - <location filename="../mainwindow.cpp" line="434"/> + <location filename="../mainwindow.cpp" line="405"/> <source>Ctrl+R</source> <translation>Ctrl+R</translation> </message> <message> - <location filename="../mainwindow.cpp" line="435"/> + <location filename="../mainwindow.cpp" line="406"/> <source>S</source> <translation>S</translation> </message> <message> - <location filename="../mainwindow.cpp" line="427"/> + <location filename="../mainwindow.cpp" line="398"/> <source>&Repeat Playlist</source> <translation>&Ripeti lista brani</translation> </message> <message> - <location filename="../mainwindow.cpp" line="447"/> + <location filename="../mainwindow.cpp" line="418"/> <source>Tools</source> <translation>Strumenti</translation> </message> @@ -1026,194 +1020,209 @@ <context> <name>PlayList</name> <message> - <location filename="../playlist.cpp" line="150"/> + <location filename="../playlist.cpp" line="165"/> <source>F</source> <translation>F</translation> </message> <message> - <location filename="../playlist.cpp" line="156"/> + <location filename="../playlist.cpp" line="171"/> <source>D</source> <translation>D</translation> </message> <message> - <location filename="../playlist.cpp" line="191"/> + <location filename="../playlist.cpp" line="204"/> <source>Alt+I</source> <translation>Alt+I</translation> </message> <message> - <location filename="../playlist.cpp" line="299"/> + <location filename="../playlist.cpp" line="308"/> <source>Ctrl+A</source> <translation>Ctrl+A</translation> </message> <message> - <location filename="../playlist.cpp" line="315"/> + <location filename="../playlist.cpp" line="327"/> <source>O</source> <translation>O</translation> </message> <message> - <location filename="../playlist.cpp" line="149"/> + <location filename="../playlist.cpp" line="164"/> <source>&Add File</source> <translation>&Aggiungi brani</translation> </message> <message> - <location filename="../playlist.cpp" line="155"/> + <location filename="../playlist.cpp" line="170"/> <source>&Add Directory</source> <translation>&Aggiungi cartelle</translation> </message> <message> - <location filename="../playlist.cpp" line="168"/> + <location filename="../playlist.cpp" line="183"/> <source>&Remove Selected</source> <translation>&Elimina la selezione</translation> </message> <message> - <location filename="../playlist.cpp" line="175"/> + <location filename="../playlist.cpp" line="189"/> <source>&Remove All</source> <translation>&Elimina tutto</translation> </message> <message> - <location filename="../playlist.cpp" line="181"/> + <location filename="../playlist.cpp" line="195"/> <source>&Remove Unselected</source> <translation>&Elimina i non selezionati</translation> </message> <message> - <location filename="../playlist.cpp" line="187"/> + <location filename="../playlist.cpp" line="200"/> <source>Remove unavailable files</source> <translation>Rimuovi files non disponibili</translation> </message> <message> - <location filename="../playlist.cpp" line="190"/> + <location filename="../playlist.cpp" line="203"/> <source>&View Track Details</source> <translation>&Dettagli della traccia</translation> </message> <message> - <location filename="../playlist.cpp" line="199"/> + <location filename="../playlist.cpp" line="212"/> <source>Sort List</source> <translation>Riordina la lista</translation> </message> <message> - <location filename="../playlist.cpp" line="202"/> - <location filename="../playlist.cpp" line="237"/> + <location filename="../playlist.cpp" line="215"/> + <location filename="../playlist.cpp" line="249"/> <source>By Title</source> <translation>Per titolo</translation> </message> <message> - <location filename="../playlist.cpp" line="206"/> - <location filename="../playlist.cpp" line="241"/> + <location filename="../playlist.cpp" line="219"/> + <location filename="../playlist.cpp" line="253"/> <source>By Album</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="210"/> - <location filename="../playlist.cpp" line="245"/> + <location filename="../playlist.cpp" line="223"/> + <location filename="../playlist.cpp" line="257"/> <source>By Artist</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="214"/> - <location filename="../playlist.cpp" line="249"/> + <location filename="../playlist.cpp" line="227"/> + <location filename="../playlist.cpp" line="261"/> <source>By Filename</source> <translation>Per titolo del brano</translation> </message> <message> - <location filename="../playlist.cpp" line="218"/> - <location filename="../playlist.cpp" line="253"/> + <location filename="../playlist.cpp" line="231"/> + <location filename="../playlist.cpp" line="265"/> <source>By Path + Filename</source> <translation>per percorso più titolo del brano</translation> </message> <message> - <location filename="../playlist.cpp" line="222"/> - <location filename="../playlist.cpp" line="257"/> + <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="269"/> <source>By Date</source> <translation>Per data</translation> </message> <message> - <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="247"/> <source>Sort Selection</source> <translation>Riordina la selezione</translation> </message> <message> - <location filename="../playlist.cpp" line="271"/> + <location filename="../playlist.cpp" line="282"/> <source>Randomize List</source> <translation>Mescola i brnai della lista</translation> </message> <message> - <location filename="../playlist.cpp" line="272"/> + <location filename="../playlist.cpp" line="283"/> <source>Reverse List</source> <translation>Inverti la lista</translation> </message> <message> - <location filename="../playlist.cpp" line="284"/> + <location filename="../playlist.cpp" line="295"/> <source>Invert Selection</source> <translation>Inverti la selezione</translation> </message> <message> - <location filename="../playlist.cpp" line="291"/> + <location filename="../playlist.cpp" line="301"/> <source>&Select None</source> <translation>&Non scegliere alcun brano</translation> </message> <message> - <location filename="../playlist.cpp" line="298"/> + <location filename="../playlist.cpp" line="302"/> + <source>Shift+A</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="307"/> <source>&Select All</source> <translation>&Seleziona tutto</translation> </message> <message> - <location filename="../playlist.cpp" line="307"/> + <location filename="../playlist.cpp" line="314"/> <source>&New List</source> <translation>&Nuova lista</translation> </message> <message> - <location filename="../playlist.cpp" line="308"/> + <location filename="../playlist.cpp" line="315"/> <source>Shift+N</source> <translation>Shift+N</translation> </message> <message> - <location filename="../playlist.cpp" line="314"/> + <location filename="../playlist.cpp" line="319"/> + <source>&Delete List</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="320"/> + <source>Shift+D</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="326"/> <source>&Load List</source> <translation>&Carica lista</translation> </message> <message> - <location filename="../playlist.cpp" line="320"/> + <location filename="../playlist.cpp" line="332"/> <source>&Save List</source> <translation>&Salva lista</translation> </message> <message> - <location filename="../playlist.cpp" line="321"/> + <location filename="../playlist.cpp" line="333"/> <source>Shift+S</source> <translation>Shift+S</translation> </message> <message> - <location filename="../playlist.cpp" line="169"/> + <location filename="../playlist.cpp" line="184"/> <source>Del</source> <translation>Canc</translation> </message> <message> - <location filename="../playlist.cpp" line="161"/> + <location filename="../playlist.cpp" line="176"/> <source>&Add Url</source> <translation>&Aggiungi URL</translation> </message> <message> - <location filename="../playlist.cpp" line="162"/> + <location filename="../playlist.cpp" line="177"/> <source>U</source> <translation>U</translation> </message> <message> - <location filename="../playlist.cpp" line="226"/> - <location filename="../playlist.cpp" line="261"/> + <location filename="../playlist.cpp" line="239"/> + <location filename="../playlist.cpp" line="273"/> <source>By Track Number</source> <translation>Per numero di traccia</translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>&Queue</source> <translation>&Metti in coda</translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>Q</source> <translation>Q</translation> </message> <message> - <location filename="../playlist.cpp" line="277"/> + <location filename="../playlist.cpp" line="288"/> <source>Actions</source> <translation>Azioni</translation> </message> diff --git a/src/ui/translations/qmmp_lt.ts b/src/ui/translations/qmmp_lt.ts index fcdf4bf90..7414278b4 100644 --- a/src/ui/translations/qmmp_lt.ts +++ b/src/ui/translations/qmmp_lt.ts @@ -615,14 +615,14 @@ <name>JumpToTrackDialog</name> <message> <location filename="../jumptotrackdialog.cpp" line="81"/> - <location filename="../jumptotrackdialog.cpp" line="137"/> + <location filename="../jumptotrackdialog.cpp" line="132"/> <source>Unqueue</source> <translation>Pašalinti iš eilės</translation> </message> <message> <location filename="../forms/jumptotrackdialog.ui" line="79"/> <location filename="../jumptotrackdialog.cpp" line="83"/> - <location filename="../jumptotrackdialog.cpp" line="139"/> + <location filename="../jumptotrackdialog.cpp" line="134"/> <source>Queue</source> <translation>Į eilę</translation> </message> @@ -851,174 +851,168 @@ <context> <name>MainWindow</name> <message> - <location filename="../mainwindow.cpp" line="64"/> - <location filename="../mainwindow.cpp" line="483"/> - <source>Default</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../mainwindow.cpp" line="274"/> + <location filename="../mainwindow.cpp" line="266"/> <source>Choose a directory</source> <translation>Pasirinkite aplanką</translation> </message> <message> - <location filename="../mainwindow.cpp" line="285"/> + <location filename="../mainwindow.cpp" line="277"/> <source>Select one or more files to open</source> <translation>Pasirinkite vieną ar kelias bylas atvėrimui</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>&Play</source> <translation>&Groti</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>X</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>&Pause</source> <translation>&Pristabdyti</translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>C</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>&Stop</source> <translation>&Sustabdyti</translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>V</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>&Previous</source> <translation>&Ankstesnis</translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>Z</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>&Next</source> <translation>&Sekantis</translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>B</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>&Jump To File</source> <translation>&Pereiti prie bylos</translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>J</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>&Settings</source> <translation>&Nustatymai</translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>Ctrl+P</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>&Exit</source> <translation>&Išeiti</translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>Ctrl+Q</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="497"/> + <location filename="../mainwindow.cpp" line="462"/> <source>Open Playlist</source> <translation>Atverti grojaraštį</translation> </message> <message> - <location filename="../mainwindow.cpp" line="522"/> + <location filename="../mainwindow.cpp" line="487"/> <source>Save Playlist</source> <translation>Išsaugoti grojaraštį</translation> </message> <message> - <location filename="../mainwindow.cpp" line="451"/> + <location filename="../mainwindow.cpp" line="422"/> <source>&About</source> <translation>&Apie</translation> </message> <message> - <location filename="../mainwindow.cpp" line="495"/> - <location filename="../mainwindow.cpp" line="521"/> + <location filename="../mainwindow.cpp" line="460"/> + <location filename="../mainwindow.cpp" line="486"/> <source>Playlist Files</source> <translation>Grojaraščio bylos</translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>Space</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="452"/> + <location filename="../mainwindow.cpp" line="423"/> <source>&About Qt</source> <translation>&Apie Qt</translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>&Play/Pause</source> <translation>&Groti/Pristabdyti</translation> </message> <message> - <location filename="../mainwindow.cpp" line="280"/> + <location filename="../mainwindow.cpp" line="272"/> <source>All Supported Bitstreams</source> <translation>Palaikomi bylų tipai</translation> </message> <message> - <location filename="../mainwindow.cpp" line="428"/> + <location filename="../mainwindow.cpp" line="399"/> <source>&Repeat Track</source> <translation>&Kartoti takelį</translation> </message> <message> - <location filename="../mainwindow.cpp" line="429"/> + <location filename="../mainwindow.cpp" line="400"/> <source>&Shuffle</source> <translation>&Atsitiktine tvarka</translation> </message> <message> - <location filename="../mainwindow.cpp" line="433"/> + <location filename="../mainwindow.cpp" line="404"/> <source>R</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="434"/> + <location filename="../mainwindow.cpp" line="405"/> <source>Ctrl+R</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="435"/> + <location filename="../mainwindow.cpp" line="406"/> <source>S</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="427"/> + <location filename="../mainwindow.cpp" line="398"/> <source>&Repeat Playlist</source> <translation>&Kartoti grojaraštį</translation> </message> <message> - <location filename="../mainwindow.cpp" line="447"/> + <location filename="../mainwindow.cpp" line="418"/> <source>Tools</source> <translation>Įrankiai</translation> </message> @@ -1026,194 +1020,209 @@ <context> <name>PlayList</name> <message> - <location filename="../playlist.cpp" line="150"/> + <location filename="../playlist.cpp" line="165"/> <source>F</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="156"/> + <location filename="../playlist.cpp" line="171"/> <source>D</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="191"/> + <location filename="../playlist.cpp" line="204"/> <source>Alt+I</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="299"/> + <location filename="../playlist.cpp" line="308"/> <source>Ctrl+A</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="315"/> + <location filename="../playlist.cpp" line="327"/> <source>O</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="149"/> + <location filename="../playlist.cpp" line="164"/> <source>&Add File</source> <translation>&Pridėti bylą</translation> </message> <message> - <location filename="../playlist.cpp" line="155"/> + <location filename="../playlist.cpp" line="170"/> <source>&Add Directory</source> <translation>&Pridėti aplanką</translation> </message> <message> - <location filename="../playlist.cpp" line="168"/> + <location filename="../playlist.cpp" line="183"/> <source>&Remove Selected</source> <translation>&Pašalinti pasirinktus</translation> </message> <message> - <location filename="../playlist.cpp" line="175"/> + <location filename="../playlist.cpp" line="189"/> <source>&Remove All</source> <translation>&Pašalinti visus</translation> </message> <message> - <location filename="../playlist.cpp" line="181"/> + <location filename="../playlist.cpp" line="195"/> <source>&Remove Unselected</source> <translation>&Pašalinti NEpasirinktus</translation> </message> <message> - <location filename="../playlist.cpp" line="187"/> + <location filename="../playlist.cpp" line="200"/> <source>Remove unavailable files</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="190"/> + <location filename="../playlist.cpp" line="203"/> <source>&View Track Details</source> <translation>&Takelio informacija</translation> </message> <message> - <location filename="../playlist.cpp" line="199"/> + <location filename="../playlist.cpp" line="212"/> <source>Sort List</source> <translation>Rūšiuoti</translation> </message> <message> - <location filename="../playlist.cpp" line="202"/> - <location filename="../playlist.cpp" line="237"/> + <location filename="../playlist.cpp" line="215"/> + <location filename="../playlist.cpp" line="249"/> <source>By Title</source> <translation>Pagal dainos pavadinimą</translation> </message> <message> - <location filename="../playlist.cpp" line="206"/> - <location filename="../playlist.cpp" line="241"/> + <location filename="../playlist.cpp" line="219"/> + <location filename="../playlist.cpp" line="253"/> <source>By Album</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="210"/> - <location filename="../playlist.cpp" line="245"/> + <location filename="../playlist.cpp" line="223"/> + <location filename="../playlist.cpp" line="257"/> <source>By Artist</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="214"/> - <location filename="../playlist.cpp" line="249"/> + <location filename="../playlist.cpp" line="227"/> + <location filename="../playlist.cpp" line="261"/> <source>By Filename</source> <translation>Pagal bylos pavadinimą</translation> </message> <message> - <location filename="../playlist.cpp" line="218"/> - <location filename="../playlist.cpp" line="253"/> + <location filename="../playlist.cpp" line="231"/> + <location filename="../playlist.cpp" line="265"/> <source>By Path + Filename</source> <translation>Pagal kelią iki bylos</translation> </message> <message> - <location filename="../playlist.cpp" line="222"/> - <location filename="../playlist.cpp" line="257"/> + <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="269"/> <source>By Date</source> <translation>Pagal datą</translation> </message> <message> - <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="247"/> <source>Sort Selection</source> <translation>Rūšiuoti pasirinktus</translation> </message> <message> - <location filename="../playlist.cpp" line="271"/> + <location filename="../playlist.cpp" line="282"/> <source>Randomize List</source> <translation>Sumaišyti sąrašą</translation> </message> <message> - <location filename="../playlist.cpp" line="272"/> + <location filename="../playlist.cpp" line="283"/> <source>Reverse List</source> <translation>Apversti</translation> </message> <message> - <location filename="../playlist.cpp" line="284"/> + <location filename="../playlist.cpp" line="295"/> <source>Invert Selection</source> <translation type="unfinished">Atšaukti pasirinkimą</translation> </message> <message> - <location filename="../playlist.cpp" line="291"/> + <location filename="../playlist.cpp" line="301"/> <source>&Select None</source> <translation>&Nepasirinkti nei vieno</translation> </message> <message> - <location filename="../playlist.cpp" line="298"/> + <location filename="../playlist.cpp" line="302"/> + <source>Shift+A</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="307"/> <source>&Select All</source> <translation>&Pasirinkti visus</translation> </message> <message> - <location filename="../playlist.cpp" line="307"/> + <location filename="../playlist.cpp" line="314"/> <source>&New List</source> <translation>&Naujas sąrašas</translation> </message> <message> - <location filename="../playlist.cpp" line="308"/> + <location filename="../playlist.cpp" line="315"/> <source>Shift+N</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="314"/> + <location filename="../playlist.cpp" line="319"/> + <source>&Delete List</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="320"/> + <source>Shift+D</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="326"/> <source>&Load List</source> <translation type="unfinished">&Įkelti sąrašą</translation> </message> <message> - <location filename="../playlist.cpp" line="320"/> + <location filename="../playlist.cpp" line="332"/> <source>&Save List</source> <translation>&Išsaugoti sąrašą</translation> </message> <message> - <location filename="../playlist.cpp" line="321"/> + <location filename="../playlist.cpp" line="333"/> <source>Shift+S</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="169"/> + <location filename="../playlist.cpp" line="184"/> <source>Del</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="161"/> + <location filename="../playlist.cpp" line="176"/> <source>&Add Url</source> <translation>&Pridėti interneto adresą</translation> </message> <message> - <location filename="../playlist.cpp" line="162"/> + <location filename="../playlist.cpp" line="177"/> <source>U</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="226"/> - <location filename="../playlist.cpp" line="261"/> + <location filename="../playlist.cpp" line="239"/> + <location filename="../playlist.cpp" line="273"/> <source>By Track Number</source> <translation>Pagal takelio numerį</translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>&Queue</source> <translation>&Į eilę</translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>Q</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="277"/> + <location filename="../playlist.cpp" line="288"/> <source>Actions</source> <translation>Veiksmai</translation> </message> diff --git a/src/ui/translations/qmmp_pl_PL.ts b/src/ui/translations/qmmp_pl_PL.ts index e859f72e2..a8c1791b8 100644 --- a/src/ui/translations/qmmp_pl_PL.ts +++ b/src/ui/translations/qmmp_pl_PL.ts @@ -615,14 +615,14 @@ <name>JumpToTrackDialog</name> <message> <location filename="../jumptotrackdialog.cpp" line="81"/> - <location filename="../jumptotrackdialog.cpp" line="137"/> + <location filename="../jumptotrackdialog.cpp" line="132"/> <source>Unqueue</source> <translation>Wykolejkuj</translation> </message> <message> <location filename="../forms/jumptotrackdialog.ui" line="79"/> <location filename="../jumptotrackdialog.cpp" line="83"/> - <location filename="../jumptotrackdialog.cpp" line="139"/> + <location filename="../jumptotrackdialog.cpp" line="134"/> <source>Queue</source> <translation>Kolejkuj</translation> </message> @@ -851,174 +851,168 @@ <context> <name>MainWindow</name> <message> - <location filename="../mainwindow.cpp" line="64"/> - <location filename="../mainwindow.cpp" line="483"/> - <source>Default</source> - <translation>Domyślne</translation> - </message> - <message> - <location filename="../mainwindow.cpp" line="274"/> + <location filename="../mainwindow.cpp" line="266"/> <source>Choose a directory</source> <translation>Wybierz katalog</translation> </message> <message> - <location filename="../mainwindow.cpp" line="285"/> + <location filename="../mainwindow.cpp" line="277"/> <source>Select one or more files to open</source> <translation>Wybierz jeden lub więcej plików do otwarcia</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>&Play</source> <translation>&Odtwarzaj</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>X</source> <translation>X</translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>&Pause</source> <translation>&Wstrzymaj</translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>C</source> <translation>C</translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>&Stop</source> <translation>&Zatrzymaj</translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>V</source> <translation>V</translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>&Previous</source> <translation>&Poprzedni</translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>Z</source> <translation>Z</translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>&Next</source> <translation>&Następny</translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>B</source> <translation>B</translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>&Jump To File</source> <translation>&Skocz do pliku</translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>J</source> <translation>J</translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>&Settings</source> <translation>&Ustawienia</translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>Ctrl+P</source> <translation>Ctrl+P</translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>&Exit</source> <translation>&Wyjście</translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>Ctrl+Q</source> <translation>Ctrl+Q</translation> </message> <message> - <location filename="../mainwindow.cpp" line="497"/> + <location filename="../mainwindow.cpp" line="462"/> <source>Open Playlist</source> <translation>Otwórz listę odtwarzania</translation> </message> <message> - <location filename="../mainwindow.cpp" line="522"/> + <location filename="../mainwindow.cpp" line="487"/> <source>Save Playlist</source> <translation>Zapisz listę odtwarzania</translation> </message> <message> - <location filename="../mainwindow.cpp" line="451"/> + <location filename="../mainwindow.cpp" line="422"/> <source>&About</source> <translation>&O programie</translation> </message> <message> - <location filename="../mainwindow.cpp" line="495"/> - <location filename="../mainwindow.cpp" line="521"/> + <location filename="../mainwindow.cpp" line="460"/> + <location filename="../mainwindow.cpp" line="486"/> <source>Playlist Files</source> <translation>Pliki listy odtwarzania</translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>Space</source> <translation></translation> </message> <message> - <location filename="../mainwindow.cpp" line="452"/> + <location filename="../mainwindow.cpp" line="423"/> <source>&About Qt</source> <translation>&O Qt</translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>&Play/Pause</source> <translation>&Odtwarzaj/Wstrzymaj</translation> </message> <message> - <location filename="../mainwindow.cpp" line="280"/> + <location filename="../mainwindow.cpp" line="272"/> <source>All Supported Bitstreams</source> <translation>Wszystkie wspierane formaty</translation> </message> <message> - <location filename="../mainwindow.cpp" line="428"/> + <location filename="../mainwindow.cpp" line="399"/> <source>&Repeat Track</source> <translation>&Powtórz utwór</translation> </message> <message> - <location filename="../mainwindow.cpp" line="429"/> + <location filename="../mainwindow.cpp" line="400"/> <source>&Shuffle</source> <translation>&Losowo</translation> </message> <message> - <location filename="../mainwindow.cpp" line="433"/> + <location filename="../mainwindow.cpp" line="404"/> <source>R</source> <translation></translation> </message> <message> - <location filename="../mainwindow.cpp" line="434"/> + <location filename="../mainwindow.cpp" line="405"/> <source>Ctrl+R</source> <translation></translation> </message> <message> - <location filename="../mainwindow.cpp" line="435"/> + <location filename="../mainwindow.cpp" line="406"/> <source>S</source> <translation></translation> </message> <message> - <location filename="../mainwindow.cpp" line="427"/> + <location filename="../mainwindow.cpp" line="398"/> <source>&Repeat Playlist</source> <translation>Powtó&rz listę odtwarzania</translation> </message> <message> - <location filename="../mainwindow.cpp" line="447"/> + <location filename="../mainwindow.cpp" line="418"/> <source>Tools</source> <translation>Narzędzia</translation> </message> @@ -1026,194 +1020,209 @@ <context> <name>PlayList</name> <message> - <location filename="../playlist.cpp" line="150"/> + <location filename="../playlist.cpp" line="165"/> <source>F</source> <translation>F</translation> </message> <message> - <location filename="../playlist.cpp" line="156"/> + <location filename="../playlist.cpp" line="171"/> <source>D</source> <translation>D</translation> </message> <message> - <location filename="../playlist.cpp" line="191"/> + <location filename="../playlist.cpp" line="204"/> <source>Alt+I</source> <translation>Alt+I</translation> </message> <message> - <location filename="../playlist.cpp" line="299"/> + <location filename="../playlist.cpp" line="308"/> <source>Ctrl+A</source> <translation>Ctrl+A</translation> </message> <message> - <location filename="../playlist.cpp" line="315"/> + <location filename="../playlist.cpp" line="327"/> <source>O</source> <translation>O</translation> </message> <message> - <location filename="../playlist.cpp" line="149"/> + <location filename="../playlist.cpp" line="164"/> <source>&Add File</source> <translation>&Dodaj plik</translation> </message> <message> - <location filename="../playlist.cpp" line="155"/> + <location filename="../playlist.cpp" line="170"/> <source>&Add Directory</source> <translation>Dodaj &katalog</translation> </message> <message> - <location filename="../playlist.cpp" line="168"/> + <location filename="../playlist.cpp" line="183"/> <source>&Remove Selected</source> <translation>&Usuń zaznaczone</translation> </message> <message> - <location filename="../playlist.cpp" line="175"/> + <location filename="../playlist.cpp" line="189"/> <source>&Remove All</source> <translation>Usuń &wszystkie</translation> </message> <message> - <location filename="../playlist.cpp" line="181"/> + <location filename="../playlist.cpp" line="195"/> <source>&Remove Unselected</source> <translation>Usuń &niezaznaczone</translation> </message> <message> - <location filename="../playlist.cpp" line="187"/> + <location filename="../playlist.cpp" line="200"/> <source>Remove unavailable files</source> <translation>Usuń niedostępne pliki</translation> </message> <message> - <location filename="../playlist.cpp" line="190"/> + <location filename="../playlist.cpp" line="203"/> <source>&View Track Details</source> <translation>&Pokaż informacje o pliku</translation> </message> <message> - <location filename="../playlist.cpp" line="199"/> + <location filename="../playlist.cpp" line="212"/> <source>Sort List</source> <translation>Sortuj listę</translation> </message> <message> - <location filename="../playlist.cpp" line="202"/> - <location filename="../playlist.cpp" line="237"/> + <location filename="../playlist.cpp" line="215"/> + <location filename="../playlist.cpp" line="249"/> <source>By Title</source> <translation>Według nazwy</translation> </message> <message> - <location filename="../playlist.cpp" line="206"/> - <location filename="../playlist.cpp" line="241"/> + <location filename="../playlist.cpp" line="219"/> + <location filename="../playlist.cpp" line="253"/> <source>By Album</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="210"/> - <location filename="../playlist.cpp" line="245"/> + <location filename="../playlist.cpp" line="223"/> + <location filename="../playlist.cpp" line="257"/> <source>By Artist</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="214"/> - <location filename="../playlist.cpp" line="249"/> + <location filename="../playlist.cpp" line="227"/> + <location filename="../playlist.cpp" line="261"/> <source>By Filename</source> <translation>Według nazwy pliku</translation> </message> <message> - <location filename="../playlist.cpp" line="218"/> - <location filename="../playlist.cpp" line="253"/> + <location filename="../playlist.cpp" line="231"/> + <location filename="../playlist.cpp" line="265"/> <source>By Path + Filename</source> <translation>Według Ścieżki + Nazwy pliku</translation> </message> <message> - <location filename="../playlist.cpp" line="222"/> - <location filename="../playlist.cpp" line="257"/> + <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="269"/> <source>By Date</source> <translation>Wg Daty</translation> </message> <message> - <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="247"/> <source>Sort Selection</source> <translation>Sortuj zaznaczone</translation> </message> <message> - <location filename="../playlist.cpp" line="271"/> + <location filename="../playlist.cpp" line="282"/> <source>Randomize List</source> <translation>Tasuj listę</translation> </message> <message> - <location filename="../playlist.cpp" line="272"/> + <location filename="../playlist.cpp" line="283"/> <source>Reverse List</source> <translation>Odwróć listę</translation> </message> <message> - <location filename="../playlist.cpp" line="284"/> + <location filename="../playlist.cpp" line="295"/> <source>Invert Selection</source> <translation>Odwróć zaznaczenie</translation> </message> <message> - <location filename="../playlist.cpp" line="291"/> + <location filename="../playlist.cpp" line="301"/> <source>&Select None</source> <translation>&Odznacz wszystkie</translation> </message> <message> - <location filename="../playlist.cpp" line="298"/> + <location filename="../playlist.cpp" line="302"/> + <source>Shift+A</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="307"/> <source>&Select All</source> <translation>&Zaznacz wszystkie</translation> </message> <message> - <location filename="../playlist.cpp" line="307"/> + <location filename="../playlist.cpp" line="314"/> <source>&New List</source> <translation>&Nowa lista</translation> </message> <message> - <location filename="../playlist.cpp" line="308"/> + <location filename="../playlist.cpp" line="315"/> <source>Shift+N</source> <translation>Shift+N</translation> </message> <message> - <location filename="../playlist.cpp" line="314"/> + <location filename="../playlist.cpp" line="319"/> + <source>&Delete List</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="320"/> + <source>Shift+D</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="326"/> <source>&Load List</source> <translation>&Ładuj listę</translation> </message> <message> - <location filename="../playlist.cpp" line="320"/> + <location filename="../playlist.cpp" line="332"/> <source>&Save List</source> <translation>&Zapisz listę</translation> </message> <message> - <location filename="../playlist.cpp" line="321"/> + <location filename="../playlist.cpp" line="333"/> <source>Shift+S</source> <translation>Shift+S</translation> </message> <message> - <location filename="../playlist.cpp" line="169"/> + <location filename="../playlist.cpp" line="184"/> <source>Del</source> <translation>Del</translation> </message> <message> - <location filename="../playlist.cpp" line="161"/> + <location filename="../playlist.cpp" line="176"/> <source>&Add Url</source> <translation>Dod&aj Url</translation> </message> <message> - <location filename="../playlist.cpp" line="162"/> + <location filename="../playlist.cpp" line="177"/> <source>U</source> <translation>U</translation> </message> <message> - <location filename="../playlist.cpp" line="226"/> - <location filename="../playlist.cpp" line="261"/> + <location filename="../playlist.cpp" line="239"/> + <location filename="../playlist.cpp" line="273"/> <source>By Track Number</source> <translation>Wg numeru utworu</translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>&Queue</source> <translation>&Kolejkuj</translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>Q</source> <translation>Q</translation> </message> <message> - <location filename="../playlist.cpp" line="277"/> + <location filename="../playlist.cpp" line="288"/> <source>Actions</source> <translation>Akcje</translation> </message> diff --git a/src/ui/translations/qmmp_pt_BR.ts b/src/ui/translations/qmmp_pt_BR.ts index 165dea5c2..b0585a8ce 100644 --- a/src/ui/translations/qmmp_pt_BR.ts +++ b/src/ui/translations/qmmp_pt_BR.ts @@ -615,14 +615,14 @@ <name>JumpToTrackDialog</name> <message> <location filename="../jumptotrackdialog.cpp" line="81"/> - <location filename="../jumptotrackdialog.cpp" line="137"/> + <location filename="../jumptotrackdialog.cpp" line="132"/> <source>Unqueue</source> <translation type="unfinished">Sem Faixa na Fila</translation> </message> <message> <location filename="../forms/jumptotrackdialog.ui" line="79"/> <location filename="../jumptotrackdialog.cpp" line="83"/> - <location filename="../jumptotrackdialog.cpp" line="139"/> + <location filename="../jumptotrackdialog.cpp" line="134"/> <source>Queue</source> <translation type="unfinished">Faixa na Fila</translation> </message> @@ -851,174 +851,168 @@ <context> <name>MainWindow</name> <message> - <location filename="../mainwindow.cpp" line="64"/> - <location filename="../mainwindow.cpp" line="483"/> - <source>Default</source> - <translation type="unfinished">Padrão</translation> - </message> - <message> - <location filename="../mainwindow.cpp" line="274"/> + <location filename="../mainwindow.cpp" line="266"/> <source>Choose a directory</source> <translation type="unfinished">Escolher o diretorio</translation> </message> <message> - <location filename="../mainwindow.cpp" line="285"/> + <location filename="../mainwindow.cpp" line="277"/> <source>Select one or more files to open</source> <translation type="unfinished">Selecionar um ou mais arquivos</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>&Play</source> <translation type="unfinished">Tocar</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>X</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>&Pause</source> <translation type="unfinished">Pausar</translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>C</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>&Stop</source> <translation type="unfinished">Parar</translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>V</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>&Previous</source> <translation type="unfinished">Anterior</translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>Z</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>&Next</source> <translation type="unfinished">Próximo</translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>B</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>&Jump To File</source> <translation type="unfinished">Pular para arquivo</translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>J</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>&Settings</source> <translation type="unfinished">Configurações</translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>Ctrl+P</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>&Exit</source> <translation type="unfinished">Sair</translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>Ctrl+Q</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="497"/> + <location filename="../mainwindow.cpp" line="462"/> <source>Open Playlist</source> <translation type="unfinished">Abrir Playlist</translation> </message> <message> - <location filename="../mainwindow.cpp" line="522"/> + <location filename="../mainwindow.cpp" line="487"/> <source>Save Playlist</source> <translation type="unfinished">Salvar Playlist</translation> </message> <message> - <location filename="../mainwindow.cpp" line="451"/> + <location filename="../mainwindow.cpp" line="422"/> <source>&About</source> <translation type="unfinished">&Sobre</translation> </message> <message> - <location filename="../mainwindow.cpp" line="495"/> - <location filename="../mainwindow.cpp" line="521"/> + <location filename="../mainwindow.cpp" line="460"/> + <location filename="../mainwindow.cpp" line="486"/> <source>Playlist Files</source> <translation type="unfinished">ФArquivos de lista de músicas</translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>Space</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="452"/> + <location filename="../mainwindow.cpp" line="423"/> <source>&About Qt</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>&Play/Pause</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="280"/> + <location filename="../mainwindow.cpp" line="272"/> <source>All Supported Bitstreams</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="428"/> + <location filename="../mainwindow.cpp" line="399"/> <source>&Repeat Track</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="429"/> + <location filename="../mainwindow.cpp" line="400"/> <source>&Shuffle</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="433"/> + <location filename="../mainwindow.cpp" line="404"/> <source>R</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="434"/> + <location filename="../mainwindow.cpp" line="405"/> <source>Ctrl+R</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="435"/> + <location filename="../mainwindow.cpp" line="406"/> <source>S</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="427"/> + <location filename="../mainwindow.cpp" line="398"/> <source>&Repeat Playlist</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="447"/> + <location filename="../mainwindow.cpp" line="418"/> <source>Tools</source> <translation type="unfinished"></translation> </message> @@ -1026,194 +1020,209 @@ <context> <name>PlayList</name> <message> - <location filename="../playlist.cpp" line="150"/> + <location filename="../playlist.cpp" line="165"/> <source>F</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="156"/> + <location filename="../playlist.cpp" line="171"/> <source>D</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="191"/> + <location filename="../playlist.cpp" line="204"/> <source>Alt+I</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="299"/> + <location filename="../playlist.cpp" line="308"/> <source>Ctrl+A</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="315"/> + <location filename="../playlist.cpp" line="327"/> <source>O</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="149"/> + <location filename="../playlist.cpp" line="164"/> <source>&Add File</source> <translation type="unfinished">&Adicionar arquivo</translation> </message> <message> - <location filename="../playlist.cpp" line="155"/> + <location filename="../playlist.cpp" line="170"/> <source>&Add Directory</source> <translation type="unfinished">&Adicionar Diretorio</translation> </message> <message> - <location filename="../playlist.cpp" line="168"/> + <location filename="../playlist.cpp" line="183"/> <source>&Remove Selected</source> <translation type="unfinished">&Remover selecionadas</translation> </message> <message> - <location filename="../playlist.cpp" line="175"/> + <location filename="../playlist.cpp" line="189"/> <source>&Remove All</source> <translation type="unfinished">&Remover tudo</translation> </message> <message> - <location filename="../playlist.cpp" line="181"/> + <location filename="../playlist.cpp" line="195"/> <source>&Remove Unselected</source> <translation type="unfinished">&Remover não selecionadas</translation> </message> <message> - <location filename="../playlist.cpp" line="187"/> + <location filename="../playlist.cpp" line="200"/> <source>Remove unavailable files</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="190"/> + <location filename="../playlist.cpp" line="203"/> <source>&View Track Details</source> <translation type="unfinished">&Ver detalhes da Faixa</translation> </message> <message> - <location filename="../playlist.cpp" line="199"/> + <location filename="../playlist.cpp" line="212"/> <source>Sort List</source> <translation type="unfinished">Classificar lista</translation> </message> <message> - <location filename="../playlist.cpp" line="202"/> - <location filename="../playlist.cpp" line="237"/> + <location filename="../playlist.cpp" line="215"/> + <location filename="../playlist.cpp" line="249"/> <source>By Title</source> <translation type="unfinished">Por Título</translation> </message> <message> - <location filename="../playlist.cpp" line="206"/> - <location filename="../playlist.cpp" line="241"/> + <location filename="../playlist.cpp" line="219"/> + <location filename="../playlist.cpp" line="253"/> <source>By Album</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="210"/> - <location filename="../playlist.cpp" line="245"/> + <location filename="../playlist.cpp" line="223"/> + <location filename="../playlist.cpp" line="257"/> <source>By Artist</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="214"/> - <location filename="../playlist.cpp" line="249"/> + <location filename="../playlist.cpp" line="227"/> + <location filename="../playlist.cpp" line="261"/> <source>By Filename</source> <translation type="unfinished">Por Nome</translation> </message> <message> - <location filename="../playlist.cpp" line="218"/> - <location filename="../playlist.cpp" line="253"/> + <location filename="../playlist.cpp" line="231"/> + <location filename="../playlist.cpp" line="265"/> <source>By Path + Filename</source> <translation type="unfinished">Por Dirertório + Nome</translation> </message> <message> - <location filename="../playlist.cpp" line="222"/> - <location filename="../playlist.cpp" line="257"/> + <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="269"/> <source>By Date</source> <translation type="unfinished">Por Data</translation> </message> <message> - <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="247"/> <source>Sort Selection</source> <translation type="unfinished">Classificar por Seleção</translation> </message> <message> - <location filename="../playlist.cpp" line="271"/> + <location filename="../playlist.cpp" line="282"/> <source>Randomize List</source> <translation type="unfinished">Lista Eleatória</translation> </message> <message> - <location filename="../playlist.cpp" line="272"/> + <location filename="../playlist.cpp" line="283"/> <source>Reverse List</source> <translation type="unfinished">Lista Revertida</translation> </message> <message> - <location filename="../playlist.cpp" line="284"/> + <location filename="../playlist.cpp" line="295"/> <source>Invert Selection</source> <translation type="unfinished">Inverter Seleção</translation> </message> <message> - <location filename="../playlist.cpp" line="291"/> + <location filename="../playlist.cpp" line="301"/> <source>&Select None</source> <translation type="unfinished">&Nenhum selecionado</translation> </message> <message> - <location filename="../playlist.cpp" line="298"/> + <location filename="../playlist.cpp" line="302"/> + <source>Shift+A</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="307"/> <source>&Select All</source> <translation type="unfinished">&Selecionar tudo</translation> </message> <message> - <location filename="../playlist.cpp" line="307"/> + <location filename="../playlist.cpp" line="314"/> <source>&New List</source> <translation type="unfinished">&Nova lista</translation> </message> <message> - <location filename="../playlist.cpp" line="308"/> + <location filename="../playlist.cpp" line="315"/> <source>Shift+N</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="314"/> + <location filename="../playlist.cpp" line="319"/> + <source>&Delete List</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="320"/> + <source>Shift+D</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="326"/> <source>&Load List</source> <translation type="unfinished">&Carregar lista</translation> </message> <message> - <location filename="../playlist.cpp" line="320"/> + <location filename="../playlist.cpp" line="332"/> <source>&Save List</source> <translation type="unfinished">&Salvar lista</translation> </message> <message> - <location filename="../playlist.cpp" line="321"/> + <location filename="../playlist.cpp" line="333"/> <source>Shift+S</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="169"/> + <location filename="../playlist.cpp" line="184"/> <source>Del</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="161"/> + <location filename="../playlist.cpp" line="176"/> <source>&Add Url</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="162"/> + <location filename="../playlist.cpp" line="177"/> <source>U</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="226"/> - <location filename="../playlist.cpp" line="261"/> + <location filename="../playlist.cpp" line="239"/> + <location filename="../playlist.cpp" line="273"/> <source>By Track Number</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>&Queue</source> <translation type="unfinished">Na fila</translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>Q</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="277"/> + <location filename="../playlist.cpp" line="288"/> <source>Actions</source> <translation type="unfinished"></translation> </message> diff --git a/src/ui/translations/qmmp_ru.ts b/src/ui/translations/qmmp_ru.ts index 85e48dc4e..ac3bcbd2f 100644 --- a/src/ui/translations/qmmp_ru.ts +++ b/src/ui/translations/qmmp_ru.ts @@ -615,14 +615,14 @@ <name>JumpToTrackDialog</name> <message> <location filename="../jumptotrackdialog.cpp" line="81"/> - <location filename="../jumptotrackdialog.cpp" line="137"/> + <location filename="../jumptotrackdialog.cpp" line="132"/> <source>Unqueue</source> <translation>Снять с очереди</translation> </message> <message> <location filename="../forms/jumptotrackdialog.ui" line="79"/> <location filename="../jumptotrackdialog.cpp" line="83"/> - <location filename="../jumptotrackdialog.cpp" line="139"/> + <location filename="../jumptotrackdialog.cpp" line="134"/> <source>Queue</source> <translation>В очередь</translation> </message> @@ -851,174 +851,168 @@ <context> <name>MainWindow</name> <message> - <location filename="../mainwindow.cpp" line="64"/> - <location filename="../mainwindow.cpp" line="483"/> - <source>Default</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../mainwindow.cpp" line="274"/> + <location filename="../mainwindow.cpp" line="266"/> <source>Choose a directory</source> <translation>Выберите директорию</translation> </message> <message> - <location filename="../mainwindow.cpp" line="285"/> + <location filename="../mainwindow.cpp" line="277"/> <source>Select one or more files to open</source> <translation>Выберите один или несколько файлов</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>&Play</source> <translation>&Воспроизвести</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>X</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>&Pause</source> <translation>&Приостановить</translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>C</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>&Stop</source> <translation>&Стоп</translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>V</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>&Previous</source> <translation>&Предыдущий фрагмент</translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>Z</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>&Next</source> <translation>&Следующий фрагмент</translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>B</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>&Jump To File</source> <translation>&Перейти к файлу</translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>J</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>&Settings</source> <translation>&Настройки</translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>Ctrl+P</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>&Exit</source> <translation>&Выход</translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>Ctrl+Q</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="497"/> + <location filename="../mainwindow.cpp" line="462"/> <source>Open Playlist</source> <translation>Открыть список</translation> </message> <message> - <location filename="../mainwindow.cpp" line="522"/> + <location filename="../mainwindow.cpp" line="487"/> <source>Save Playlist</source> <translation>Сохранить список</translation> </message> <message> - <location filename="../mainwindow.cpp" line="451"/> + <location filename="../mainwindow.cpp" line="422"/> <source>&About</source> <translation>&О программе</translation> </message> <message> - <location filename="../mainwindow.cpp" line="495"/> - <location filename="../mainwindow.cpp" line="521"/> + <location filename="../mainwindow.cpp" line="460"/> + <location filename="../mainwindow.cpp" line="486"/> <source>Playlist Files</source> <translation>Файлы списков</translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>Space</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="452"/> + <location filename="../mainwindow.cpp" line="423"/> <source>&About Qt</source> <translation>&О библиотеке Qt</translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>&Play/Pause</source> <translation>&Воспр/приост</translation> </message> <message> - <location filename="../mainwindow.cpp" line="280"/> + <location filename="../mainwindow.cpp" line="272"/> <source>All Supported Bitstreams</source> <translation>Все форматы</translation> </message> <message> - <location filename="../mainwindow.cpp" line="428"/> + <location filename="../mainwindow.cpp" line="399"/> <source>&Repeat Track</source> <translation>&Повторять трек</translation> </message> <message> - <location filename="../mainwindow.cpp" line="429"/> + <location filename="../mainwindow.cpp" line="400"/> <source>&Shuffle</source> <translation>&В случайном порядке</translation> </message> <message> - <location filename="../mainwindow.cpp" line="433"/> + <location filename="../mainwindow.cpp" line="404"/> <source>R</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="434"/> + <location filename="../mainwindow.cpp" line="405"/> <source>Ctrl+R</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="435"/> + <location filename="../mainwindow.cpp" line="406"/> <source>S</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainwindow.cpp" line="427"/> + <location filename="../mainwindow.cpp" line="398"/> <source>&Repeat Playlist</source> <translation>&Повторять список</translation> </message> <message> - <location filename="../mainwindow.cpp" line="447"/> + <location filename="../mainwindow.cpp" line="418"/> <source>Tools</source> <translation>Сервис</translation> </message> @@ -1026,194 +1020,209 @@ <context> <name>PlayList</name> <message> - <location filename="../playlist.cpp" line="150"/> + <location filename="../playlist.cpp" line="165"/> <source>F</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="156"/> + <location filename="../playlist.cpp" line="171"/> <source>D</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="191"/> + <location filename="../playlist.cpp" line="204"/> <source>Alt+I</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="299"/> + <location filename="../playlist.cpp" line="308"/> <source>Ctrl+A</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="315"/> + <location filename="../playlist.cpp" line="327"/> <source>O</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="149"/> + <location filename="../playlist.cpp" line="164"/> <source>&Add File</source> <translation>&Добавить файл</translation> </message> <message> - <location filename="../playlist.cpp" line="155"/> + <location filename="../playlist.cpp" line="170"/> <source>&Add Directory</source> <translation>&Добавить директорию</translation> </message> <message> - <location filename="../playlist.cpp" line="168"/> + <location filename="../playlist.cpp" line="183"/> <source>&Remove Selected</source> <translation>&Удалить выделенное</translation> </message> <message> - <location filename="../playlist.cpp" line="175"/> + <location filename="../playlist.cpp" line="189"/> <source>&Remove All</source> <translation>&Удалить всё</translation> </message> <message> - <location filename="../playlist.cpp" line="181"/> + <location filename="../playlist.cpp" line="195"/> <source>&Remove Unselected</source> <translation>&Удалить невыделенное</translation> </message> <message> - <location filename="../playlist.cpp" line="187"/> + <location filename="../playlist.cpp" line="200"/> <source>Remove unavailable files</source> <translation>Удалить недоступные файлы</translation> </message> <message> - <location filename="../playlist.cpp" line="190"/> + <location filename="../playlist.cpp" line="203"/> <source>&View Track Details</source> <translation>&Информация</translation> </message> <message> - <location filename="../playlist.cpp" line="199"/> + <location filename="../playlist.cpp" line="212"/> <source>Sort List</source> <translation>Сортировать</translation> </message> <message> - <location filename="../playlist.cpp" line="202"/> - <location filename="../playlist.cpp" line="237"/> + <location filename="../playlist.cpp" line="215"/> + <location filename="../playlist.cpp" line="249"/> <source>By Title</source> <translation>По названию</translation> </message> <message> - <location filename="../playlist.cpp" line="206"/> - <location filename="../playlist.cpp" line="241"/> + <location filename="../playlist.cpp" line="219"/> + <location filename="../playlist.cpp" line="253"/> <source>By Album</source> <translation>По альбому</translation> </message> <message> - <location filename="../playlist.cpp" line="210"/> - <location filename="../playlist.cpp" line="245"/> + <location filename="../playlist.cpp" line="223"/> + <location filename="../playlist.cpp" line="257"/> <source>By Artist</source> <translation>По исполнителю</translation> </message> <message> - <location filename="../playlist.cpp" line="214"/> - <location filename="../playlist.cpp" line="249"/> + <location filename="../playlist.cpp" line="227"/> + <location filename="../playlist.cpp" line="261"/> <source>By Filename</source> <translation>По имени файла</translation> </message> <message> - <location filename="../playlist.cpp" line="218"/> - <location filename="../playlist.cpp" line="253"/> + <location filename="../playlist.cpp" line="231"/> + <location filename="../playlist.cpp" line="265"/> <source>By Path + Filename</source> <translation>По пути и файлу</translation> </message> <message> - <location filename="../playlist.cpp" line="222"/> - <location filename="../playlist.cpp" line="257"/> + <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="269"/> <source>By Date</source> <translation>По дате</translation> </message> <message> - <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="247"/> <source>Sort Selection</source> <translation>Сортировать выделенное</translation> </message> <message> - <location filename="../playlist.cpp" line="271"/> + <location filename="../playlist.cpp" line="282"/> <source>Randomize List</source> <translation>Перемешать</translation> </message> <message> - <location filename="../playlist.cpp" line="272"/> + <location filename="../playlist.cpp" line="283"/> <source>Reverse List</source> <translation>Перевернуть</translation> </message> <message> - <location filename="../playlist.cpp" line="284"/> + <location filename="../playlist.cpp" line="295"/> <source>Invert Selection</source> <translation>Инвертировать выделение</translation> </message> <message> - <location filename="../playlist.cpp" line="291"/> + <location filename="../playlist.cpp" line="301"/> <source>&Select None</source> <translation>&Снять выделение</translation> </message> <message> - <location filename="../playlist.cpp" line="298"/> + <location filename="../playlist.cpp" line="302"/> + <source>Shift+A</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="307"/> <source>&Select All</source> <translation>&Выделить всё</translation> </message> <message> - <location filename="../playlist.cpp" line="307"/> + <location filename="../playlist.cpp" line="314"/> <source>&New List</source> <translation>&Новый лист</translation> </message> <message> - <location filename="../playlist.cpp" line="308"/> + <location filename="../playlist.cpp" line="315"/> <source>Shift+N</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="314"/> + <location filename="../playlist.cpp" line="319"/> + <source>&Delete List</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="320"/> + <source>Shift+D</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="326"/> <source>&Load List</source> <translation>&Загрузить лист</translation> </message> <message> - <location filename="../playlist.cpp" line="320"/> + <location filename="../playlist.cpp" line="332"/> <source>&Save List</source> <translation>&Сохранить лист</translation> </message> <message> - <location filename="../playlist.cpp" line="321"/> + <location filename="../playlist.cpp" line="333"/> <source>Shift+S</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="169"/> + <location filename="../playlist.cpp" line="184"/> <source>Del</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="161"/> + <location filename="../playlist.cpp" line="176"/> <source>&Add Url</source> <translation>&Добавить URL</translation> </message> <message> - <location filename="../playlist.cpp" line="162"/> + <location filename="../playlist.cpp" line="177"/> <source>U</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="226"/> - <location filename="../playlist.cpp" line="261"/> + <location filename="../playlist.cpp" line="239"/> + <location filename="../playlist.cpp" line="273"/> <source>By Track Number</source> <translation>По номеру трека</translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>&Queue</source> <translation>&В очередь</translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>Q</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="277"/> + <location filename="../playlist.cpp" line="288"/> <source>Actions</source> <translation>Действия</translation> </message> diff --git a/src/ui/translations/qmmp_tr.ts b/src/ui/translations/qmmp_tr.ts index 2e6d04b6c..58cfdc258 100644 --- a/src/ui/translations/qmmp_tr.ts +++ b/src/ui/translations/qmmp_tr.ts @@ -615,14 +615,14 @@ <name>JumpToTrackDialog</name> <message> <location filename="../jumptotrackdialog.cpp" line="81"/> - <location filename="../jumptotrackdialog.cpp" line="137"/> + <location filename="../jumptotrackdialog.cpp" line="132"/> <source>Unqueue</source> <translation>Kuyrukta Değil</translation> </message> <message> <location filename="../forms/jumptotrackdialog.ui" line="79"/> <location filename="../jumptotrackdialog.cpp" line="83"/> - <location filename="../jumptotrackdialog.cpp" line="139"/> + <location filename="../jumptotrackdialog.cpp" line="134"/> <source>Queue</source> <translation>Kuyruk</translation> </message> @@ -851,174 +851,168 @@ <context> <name>MainWindow</name> <message> - <location filename="../mainwindow.cpp" line="64"/> - <location filename="../mainwindow.cpp" line="483"/> - <source>Default</source> - <translation>Öntanımlı</translation> - </message> - <message> - <location filename="../mainwindow.cpp" line="274"/> + <location filename="../mainwindow.cpp" line="266"/> <source>Choose a directory</source> <translation>Bir dizin seçin</translation> </message> <message> - <location filename="../mainwindow.cpp" line="285"/> + <location filename="../mainwindow.cpp" line="277"/> <source>Select one or more files to open</source> <translation>Açmak için bir yada daha çok dosya seçin</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>&Play</source> <translation>&Çal</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>X</source> <translation>X</translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>&Pause</source> <translation>&Duraklat</translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>C</source> <translation>C</translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>&Stop</source> <translation>&Durdur</translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>V</source> <translation>V</translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>&Previous</source> <translation>&Önceki</translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>Z</source> <translation>Z</translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>&Next</source> <translation>&Sonraki</translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>B</source> <translation>B</translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>&Jump To File</source> <translation>&Parçaya Git</translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>J</source> <translation>J</translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>&Settings</source> <translation>&Ayarlar</translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>Ctrl+P</source> <translation>Ctrl+P</translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>&Exit</source> <translation>&Çıkış</translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>Ctrl+Q</source> <translation>Ctrl+Q</translation> </message> <message> - <location filename="../mainwindow.cpp" line="497"/> + <location filename="../mainwindow.cpp" line="462"/> <source>Open Playlist</source> <translation>Çalma Listesini Aç</translation> </message> <message> - <location filename="../mainwindow.cpp" line="522"/> + <location filename="../mainwindow.cpp" line="487"/> <source>Save Playlist</source> <translation>Çalma Listesini Kaydet</translation> </message> <message> - <location filename="../mainwindow.cpp" line="451"/> + <location filename="../mainwindow.cpp" line="422"/> <source>&About</source> <translation>&Hakkında</translation> </message> <message> - <location filename="../mainwindow.cpp" line="495"/> - <location filename="../mainwindow.cpp" line="521"/> + <location filename="../mainwindow.cpp" line="460"/> + <location filename="../mainwindow.cpp" line="486"/> <source>Playlist Files</source> <translation>Çalma Listesi Dosyaları</translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>Space</source> <translation>Boşluk</translation> </message> <message> - <location filename="../mainwindow.cpp" line="452"/> + <location filename="../mainwindow.cpp" line="423"/> <source>&About Qt</source> <translation>&Qt Hakkında</translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>&Play/Pause</source> <translation>&Oynat/Duraklat</translation> </message> <message> - <location filename="../mainwindow.cpp" line="280"/> + <location filename="../mainwindow.cpp" line="272"/> <source>All Supported Bitstreams</source> <translation>Tüm Desteklenen Bitstreamler</translation> </message> <message> - <location filename="../mainwindow.cpp" line="428"/> + <location filename="../mainwindow.cpp" line="399"/> <source>&Repeat Track</source> <translation>&Parçayı Yinele</translation> </message> <message> - <location filename="../mainwindow.cpp" line="429"/> + <location filename="../mainwindow.cpp" line="400"/> <source>&Shuffle</source> <translation>&Rastgele</translation> </message> <message> - <location filename="../mainwindow.cpp" line="433"/> + <location filename="../mainwindow.cpp" line="404"/> <source>R</source> <translation>R</translation> </message> <message> - <location filename="../mainwindow.cpp" line="434"/> + <location filename="../mainwindow.cpp" line="405"/> <source>Ctrl+R</source> <translation>Ctrl+R</translation> </message> <message> - <location filename="../mainwindow.cpp" line="435"/> + <location filename="../mainwindow.cpp" line="406"/> <source>S</source> <translation>S</translation> </message> <message> - <location filename="../mainwindow.cpp" line="427"/> + <location filename="../mainwindow.cpp" line="398"/> <source>&Repeat Playlist</source> <translation>&Çalma Listesini Yinele</translation> </message> <message> - <location filename="../mainwindow.cpp" line="447"/> + <location filename="../mainwindow.cpp" line="418"/> <source>Tools</source> <translation>Araçlar</translation> </message> @@ -1026,194 +1020,209 @@ <context> <name>PlayList</name> <message> - <location filename="../playlist.cpp" line="150"/> + <location filename="../playlist.cpp" line="165"/> <source>F</source> <translation>F</translation> </message> <message> - <location filename="../playlist.cpp" line="156"/> + <location filename="../playlist.cpp" line="171"/> <source>D</source> <translation>D</translation> </message> <message> - <location filename="../playlist.cpp" line="191"/> + <location filename="../playlist.cpp" line="204"/> <source>Alt+I</source> <translation>Alt+I</translation> </message> <message> - <location filename="../playlist.cpp" line="299"/> + <location filename="../playlist.cpp" line="308"/> <source>Ctrl+A</source> <translation>Ctrl+A</translation> </message> <message> - <location filename="../playlist.cpp" line="315"/> + <location filename="../playlist.cpp" line="327"/> <source>O</source> <translation>O</translation> </message> <message> - <location filename="../playlist.cpp" line="149"/> + <location filename="../playlist.cpp" line="164"/> <source>&Add File</source> <translation>&Dosya Ekle</translation> </message> <message> - <location filename="../playlist.cpp" line="155"/> + <location filename="../playlist.cpp" line="170"/> <source>&Add Directory</source> <translation>&Dizin Ekle</translation> </message> <message> - <location filename="../playlist.cpp" line="168"/> + <location filename="../playlist.cpp" line="183"/> <source>&Remove Selected</source> <translation>&Seçileni Kaldır</translation> </message> <message> - <location filename="../playlist.cpp" line="175"/> + <location filename="../playlist.cpp" line="189"/> <source>&Remove All</source> <translation>&Hepsini Kaldır</translation> </message> <message> - <location filename="../playlist.cpp" line="181"/> + <location filename="../playlist.cpp" line="195"/> <source>&Remove Unselected</source> <translation>&Seçilmemişleri Kaldır</translation> </message> <message> - <location filename="../playlist.cpp" line="187"/> + <location filename="../playlist.cpp" line="200"/> <source>Remove unavailable files</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="190"/> + <location filename="../playlist.cpp" line="203"/> <source>&View Track Details</source> <translation>&Parça Detaylarını Göster</translation> </message> <message> - <location filename="../playlist.cpp" line="199"/> + <location filename="../playlist.cpp" line="212"/> <source>Sort List</source> <translation>Listeyi Sınıflandır</translation> </message> <message> - <location filename="../playlist.cpp" line="202"/> - <location filename="../playlist.cpp" line="237"/> + <location filename="../playlist.cpp" line="215"/> + <location filename="../playlist.cpp" line="249"/> <source>By Title</source> <translation>Başlığa Göre</translation> </message> <message> - <location filename="../playlist.cpp" line="206"/> - <location filename="../playlist.cpp" line="241"/> + <location filename="../playlist.cpp" line="219"/> + <location filename="../playlist.cpp" line="253"/> <source>By Album</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="210"/> - <location filename="../playlist.cpp" line="245"/> + <location filename="../playlist.cpp" line="223"/> + <location filename="../playlist.cpp" line="257"/> <source>By Artist</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="214"/> - <location filename="../playlist.cpp" line="249"/> + <location filename="../playlist.cpp" line="227"/> + <location filename="../playlist.cpp" line="261"/> <source>By Filename</source> <translation>Dosya Adına Göre</translation> </message> <message> - <location filename="../playlist.cpp" line="218"/> - <location filename="../playlist.cpp" line="253"/> + <location filename="../playlist.cpp" line="231"/> + <location filename="../playlist.cpp" line="265"/> <source>By Path + Filename</source> <translation>Dosya Yolu + Dosya Adına Göre</translation> </message> <message> - <location filename="../playlist.cpp" line="222"/> - <location filename="../playlist.cpp" line="257"/> + <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="269"/> <source>By Date</source> <translation>Tarihe Göre</translation> </message> <message> - <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="247"/> <source>Sort Selection</source> <translation>Seçilenleri Sınıflandır</translation> </message> <message> - <location filename="../playlist.cpp" line="271"/> + <location filename="../playlist.cpp" line="282"/> <source>Randomize List</source> <translation>Rastgele Listele</translation> </message> <message> - <location filename="../playlist.cpp" line="272"/> + <location filename="../playlist.cpp" line="283"/> <source>Reverse List</source> <translation>Listeyi Ters Çevir</translation> </message> <message> - <location filename="../playlist.cpp" line="284"/> + <location filename="../playlist.cpp" line="295"/> <source>Invert Selection</source> <translation>Seçimi Tersine Çevir</translation> </message> <message> - <location filename="../playlist.cpp" line="291"/> + <location filename="../playlist.cpp" line="301"/> <source>&Select None</source> <translation>&Hiçbirini Seçme</translation> </message> <message> - <location filename="../playlist.cpp" line="298"/> + <location filename="../playlist.cpp" line="302"/> + <source>Shift+A</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="307"/> <source>&Select All</source> <translation>&Tümünü Seç</translation> </message> <message> - <location filename="../playlist.cpp" line="307"/> + <location filename="../playlist.cpp" line="314"/> <source>&New List</source> <translation>&Yeni Liste</translation> </message> <message> - <location filename="../playlist.cpp" line="308"/> + <location filename="../playlist.cpp" line="315"/> <source>Shift+N</source> <translation>Shift+N</translation> </message> <message> - <location filename="../playlist.cpp" line="314"/> + <location filename="../playlist.cpp" line="319"/> + <source>&Delete List</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="320"/> + <source>Shift+D</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="326"/> <source>&Load List</source> <translation>&Liste Yükle</translation> </message> <message> - <location filename="../playlist.cpp" line="320"/> + <location filename="../playlist.cpp" line="332"/> <source>&Save List</source> <translation>&Listeyi Kaydet</translation> </message> <message> - <location filename="../playlist.cpp" line="321"/> + <location filename="../playlist.cpp" line="333"/> <source>Shift+S</source> <translation>Shift+S</translation> </message> <message> - <location filename="../playlist.cpp" line="169"/> + <location filename="../playlist.cpp" line="184"/> <source>Del</source> <translation>Del</translation> </message> <message> - <location filename="../playlist.cpp" line="161"/> + <location filename="../playlist.cpp" line="176"/> <source>&Add Url</source> <translation>&Url Ekle</translation> </message> <message> - <location filename="../playlist.cpp" line="162"/> + <location filename="../playlist.cpp" line="177"/> <source>U</source> <translation>U</translation> </message> <message> - <location filename="../playlist.cpp" line="226"/> - <location filename="../playlist.cpp" line="261"/> + <location filename="../playlist.cpp" line="239"/> + <location filename="../playlist.cpp" line="273"/> <source>By Track Number</source> <translation>Parça Numarasına Göre</translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>&Queue</source> <translation>&Kuyruğa ekle</translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>Q</source> <translation>Q</translation> </message> <message> - <location filename="../playlist.cpp" line="277"/> + <location filename="../playlist.cpp" line="288"/> <source>Actions</source> <translation>Eylemler</translation> </message> diff --git a/src/ui/translations/qmmp_uk_UA.ts b/src/ui/translations/qmmp_uk_UA.ts index 395908d87..fbc46944e 100644 --- a/src/ui/translations/qmmp_uk_UA.ts +++ b/src/ui/translations/qmmp_uk_UA.ts @@ -615,14 +615,14 @@ <name>JumpToTrackDialog</name> <message> <location filename="../jumptotrackdialog.cpp" line="81"/> - <location filename="../jumptotrackdialog.cpp" line="137"/> + <location filename="../jumptotrackdialog.cpp" line="132"/> <source>Unqueue</source> <translation>Зняти з черги</translation> </message> <message> <location filename="../forms/jumptotrackdialog.ui" line="79"/> <location filename="../jumptotrackdialog.cpp" line="83"/> - <location filename="../jumptotrackdialog.cpp" line="139"/> + <location filename="../jumptotrackdialog.cpp" line="134"/> <source>Queue</source> <translation>В чергу</translation> </message> @@ -851,174 +851,168 @@ <context> <name>MainWindow</name> <message> - <location filename="../mainwindow.cpp" line="64"/> - <location filename="../mainwindow.cpp" line="483"/> - <source>Default</source> - <translation>За умовчанням</translation> - </message> - <message> - <location filename="../mainwindow.cpp" line="274"/> + <location filename="../mainwindow.cpp" line="266"/> <source>Choose a directory</source> <translation>Виберіть теку</translation> </message> <message> - <location filename="../mainwindow.cpp" line="285"/> + <location filename="../mainwindow.cpp" line="277"/> <source>Select one or more files to open</source> <translation>Виберіть один чи кілька файлів</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>&Play</source> <translation>&Відтворити</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>X</source> <translation></translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>&Pause</source> <translation>&Пауза</translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>C</source> <translation></translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>&Stop</source> <translation>&Стоп</translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>V</source> <translation></translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>&Previous</source> <translation>&Назад</translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>Z</source> <translation></translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>&Next</source> <translation>&Вперед</translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>B</source> <translation></translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>&Jump To File</source> <translation>&Перейти до файлу</translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>J</source> <translation></translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>&Settings</source> <translation>&Налаштування</translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>Ctrl+P</source> <translation></translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>&Exit</source> <translation>&Вихід</translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>Ctrl+Q</source> <translation></translation> </message> <message> - <location filename="../mainwindow.cpp" line="497"/> + <location filename="../mainwindow.cpp" line="462"/> <source>Open Playlist</source> <translation>Відкрити список</translation> </message> <message> - <location filename="../mainwindow.cpp" line="522"/> + <location filename="../mainwindow.cpp" line="487"/> <source>Save Playlist</source> <translation>Зберегти список</translation> </message> <message> - <location filename="../mainwindow.cpp" line="451"/> + <location filename="../mainwindow.cpp" line="422"/> <source>&About</source> <translation>&Про програму</translation> </message> <message> - <location filename="../mainwindow.cpp" line="495"/> - <location filename="../mainwindow.cpp" line="521"/> + <location filename="../mainwindow.cpp" line="460"/> + <location filename="../mainwindow.cpp" line="486"/> <source>Playlist Files</source> <translation>Файли списків</translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>Space</source> <translation></translation> </message> <message> - <location filename="../mainwindow.cpp" line="452"/> + <location filename="../mainwindow.cpp" line="423"/> <source>&About Qt</source> <translation>&Про Qt</translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>&Play/Pause</source> <translation>&Грати/Пауза</translation> </message> <message> - <location filename="../mainwindow.cpp" line="280"/> + <location filename="../mainwindow.cpp" line="272"/> <source>All Supported Bitstreams</source> <translation>Усі формати</translation> </message> <message> - <location filename="../mainwindow.cpp" line="428"/> + <location filename="../mainwindow.cpp" line="399"/> <source>&Repeat Track</source> <translation>&Повторити трек</translation> </message> <message> - <location filename="../mainwindow.cpp" line="429"/> + <location filename="../mainwindow.cpp" line="400"/> <source>&Shuffle</source> <translation>&Перемішати</translation> </message> <message> - <location filename="../mainwindow.cpp" line="433"/> + <location filename="../mainwindow.cpp" line="404"/> <source>R</source> <translation></translation> </message> <message> - <location filename="../mainwindow.cpp" line="434"/> + <location filename="../mainwindow.cpp" line="405"/> <source>Ctrl+R</source> <translation></translation> </message> <message> - <location filename="../mainwindow.cpp" line="435"/> + <location filename="../mainwindow.cpp" line="406"/> <source>S</source> <translation></translation> </message> <message> - <location filename="../mainwindow.cpp" line="427"/> + <location filename="../mainwindow.cpp" line="398"/> <source>&Repeat Playlist</source> <translation>&Повторити список</translation> </message> <message> - <location filename="../mainwindow.cpp" line="447"/> + <location filename="../mainwindow.cpp" line="418"/> <source>Tools</source> <translation>Утиліти</translation> </message> @@ -1026,194 +1020,209 @@ <context> <name>PlayList</name> <message> - <location filename="../playlist.cpp" line="150"/> + <location filename="../playlist.cpp" line="165"/> <source>F</source> <translation></translation> </message> <message> - <location filename="../playlist.cpp" line="156"/> + <location filename="../playlist.cpp" line="171"/> <source>D</source> <translation></translation> </message> <message> - <location filename="../playlist.cpp" line="191"/> + <location filename="../playlist.cpp" line="204"/> <source>Alt+I</source> <translation></translation> </message> <message> - <location filename="../playlist.cpp" line="299"/> + <location filename="../playlist.cpp" line="308"/> <source>Ctrl+A</source> <translation></translation> </message> <message> - <location filename="../playlist.cpp" line="315"/> + <location filename="../playlist.cpp" line="327"/> <source>O</source> <translation></translation> </message> <message> - <location filename="../playlist.cpp" line="149"/> + <location filename="../playlist.cpp" line="164"/> <source>&Add File</source> <translation>&Додати файл</translation> </message> <message> - <location filename="../playlist.cpp" line="155"/> + <location filename="../playlist.cpp" line="170"/> <source>&Add Directory</source> <translation>&Додати теку</translation> </message> <message> - <location filename="../playlist.cpp" line="168"/> + <location filename="../playlist.cpp" line="183"/> <source>&Remove Selected</source> <translation>&Видалити вибране</translation> </message> <message> - <location filename="../playlist.cpp" line="175"/> + <location filename="../playlist.cpp" line="189"/> <source>&Remove All</source> <translation>&Видалити все</translation> </message> <message> - <location filename="../playlist.cpp" line="181"/> + <location filename="../playlist.cpp" line="195"/> <source>&Remove Unselected</source> <translation>&Видалити не вибране</translation> </message> <message> - <location filename="../playlist.cpp" line="187"/> + <location filename="../playlist.cpp" line="200"/> <source>Remove unavailable files</source> <translation>Видалити недоступні файли</translation> </message> <message> - <location filename="../playlist.cpp" line="190"/> + <location filename="../playlist.cpp" line="203"/> <source>&View Track Details</source> <translation>&Інформація</translation> </message> <message> - <location filename="../playlist.cpp" line="199"/> + <location filename="../playlist.cpp" line="212"/> <source>Sort List</source> <translation>Сортувати</translation> </message> <message> - <location filename="../playlist.cpp" line="202"/> - <location filename="../playlist.cpp" line="237"/> + <location filename="../playlist.cpp" line="215"/> + <location filename="../playlist.cpp" line="249"/> <source>By Title</source> <translation>За назвою</translation> </message> <message> - <location filename="../playlist.cpp" line="206"/> - <location filename="../playlist.cpp" line="241"/> + <location filename="../playlist.cpp" line="219"/> + <location filename="../playlist.cpp" line="253"/> <source>By Album</source> <translation>За альбомом</translation> </message> <message> - <location filename="../playlist.cpp" line="210"/> - <location filename="../playlist.cpp" line="245"/> + <location filename="../playlist.cpp" line="223"/> + <location filename="../playlist.cpp" line="257"/> <source>By Artist</source> <translation>За артистом</translation> </message> <message> - <location filename="../playlist.cpp" line="214"/> - <location filename="../playlist.cpp" line="249"/> + <location filename="../playlist.cpp" line="227"/> + <location filename="../playlist.cpp" line="261"/> <source>By Filename</source> <translation>За ім'ям файлу</translation> </message> <message> - <location filename="../playlist.cpp" line="218"/> - <location filename="../playlist.cpp" line="253"/> + <location filename="../playlist.cpp" line="231"/> + <location filename="../playlist.cpp" line="265"/> <source>By Path + Filename</source> <translation>За шляхом та файлом</translation> </message> <message> - <location filename="../playlist.cpp" line="222"/> - <location filename="../playlist.cpp" line="257"/> + <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="269"/> <source>By Date</source> <translation>За датою</translation> </message> <message> - <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="247"/> <source>Sort Selection</source> <translation>Сортувати вибране</translation> </message> <message> - <location filename="../playlist.cpp" line="271"/> + <location filename="../playlist.cpp" line="282"/> <source>Randomize List</source> <translation>Перемішати</translation> </message> <message> - <location filename="../playlist.cpp" line="272"/> + <location filename="../playlist.cpp" line="283"/> <source>Reverse List</source> <translation>Перевернути</translation> </message> <message> - <location filename="../playlist.cpp" line="284"/> + <location filename="../playlist.cpp" line="295"/> <source>Invert Selection</source> <translation>Інвертувати вибране</translation> </message> <message> - <location filename="../playlist.cpp" line="291"/> + <location filename="../playlist.cpp" line="301"/> <source>&Select None</source> <translation>&Зняти виділення</translation> </message> <message> - <location filename="../playlist.cpp" line="298"/> + <location filename="../playlist.cpp" line="302"/> + <source>Shift+A</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="307"/> <source>&Select All</source> <translation>&Вибрати все</translation> </message> <message> - <location filename="../playlist.cpp" line="307"/> + <location filename="../playlist.cpp" line="314"/> <source>&New List</source> <translation>&Новий список</translation> </message> <message> - <location filename="../playlist.cpp" line="308"/> + <location filename="../playlist.cpp" line="315"/> <source>Shift+N</source> <translation></translation> </message> <message> - <location filename="../playlist.cpp" line="314"/> + <location filename="../playlist.cpp" line="319"/> + <source>&Delete List</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="320"/> + <source>Shift+D</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="326"/> <source>&Load List</source> <translation>&Завантажити список</translation> </message> <message> - <location filename="../playlist.cpp" line="320"/> + <location filename="../playlist.cpp" line="332"/> <source>&Save List</source> <translation>&Зберегти список</translation> </message> <message> - <location filename="../playlist.cpp" line="321"/> + <location filename="../playlist.cpp" line="333"/> <source>Shift+S</source> <translation></translation> </message> <message> - <location filename="../playlist.cpp" line="169"/> + <location filename="../playlist.cpp" line="184"/> <source>Del</source> <translation></translation> </message> <message> - <location filename="../playlist.cpp" line="161"/> + <location filename="../playlist.cpp" line="176"/> <source>&Add Url</source> <translation>&Додати адресу</translation> </message> <message> - <location filename="../playlist.cpp" line="162"/> + <location filename="../playlist.cpp" line="177"/> <source>U</source> <translation></translation> </message> <message> - <location filename="../playlist.cpp" line="226"/> - <location filename="../playlist.cpp" line="261"/> + <location filename="../playlist.cpp" line="239"/> + <location filename="../playlist.cpp" line="273"/> <source>By Track Number</source> <translation></translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>&Queue</source> <translation>&В чергу</translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>Q</source> <translation></translation> </message> <message> - <location filename="../playlist.cpp" line="277"/> + <location filename="../playlist.cpp" line="288"/> <source>Actions</source> <translation>Дії</translation> </message> diff --git a/src/ui/translations/qmmp_zh_CN.ts b/src/ui/translations/qmmp_zh_CN.ts index 370b6a017..44fd0082a 100644 --- a/src/ui/translations/qmmp_zh_CN.ts +++ b/src/ui/translations/qmmp_zh_CN.ts @@ -615,14 +615,14 @@ <name>JumpToTrackDialog</name> <message> <location filename="../jumptotrackdialog.cpp" line="81"/> - <location filename="../jumptotrackdialog.cpp" line="137"/> + <location filename="../jumptotrackdialog.cpp" line="132"/> <source>Unqueue</source> <translation>移出队列</translation> </message> <message> <location filename="../forms/jumptotrackdialog.ui" line="79"/> <location filename="../jumptotrackdialog.cpp" line="83"/> - <location filename="../jumptotrackdialog.cpp" line="139"/> + <location filename="../jumptotrackdialog.cpp" line="134"/> <source>Queue</source> <translation>加入队列</translation> </message> @@ -851,174 +851,168 @@ <context> <name>MainWindow</name> <message> - <location filename="../mainwindow.cpp" line="64"/> - <location filename="../mainwindow.cpp" line="483"/> - <source>Default</source> - <translation>默认</translation> - </message> - <message> - <location filename="../mainwindow.cpp" line="274"/> + <location filename="../mainwindow.cpp" line="266"/> <source>Choose a directory</source> <translation>选择一个目录</translation> </message> <message> - <location filename="../mainwindow.cpp" line="285"/> + <location filename="../mainwindow.cpp" line="277"/> <source>Select one or more files to open</source> <translation>选择打开一个或更多文件</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>&Play</source> <translation>播放(&P)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>X</source> <translation>X</translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>&Pause</source> <translation>暂停(&P)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>C</source> <translation>C</translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>&Stop</source> <translation>停止(&S)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>V</source> <translation>V</translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>&Previous</source> <translation>上一曲(&P)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>Z</source> <translation>Z</translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>&Next</source> <translation>下一曲(&N)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>B</source> <translation>B</translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>&Jump To File</source> <translation>跳到文件(&J)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>J</source> <translation>J</translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>&Settings</source> <translation>设置(&S)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>Ctrl+P</source> <translation>Ctrl+P</translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>&Exit</source> <translation>退出(&E)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>Ctrl+Q</source> <translation>Ctrl+Q</translation> </message> <message> - <location filename="../mainwindow.cpp" line="497"/> + <location filename="../mainwindow.cpp" line="462"/> <source>Open Playlist</source> <translation>打开播放列表</translation> </message> <message> - <location filename="../mainwindow.cpp" line="522"/> + <location filename="../mainwindow.cpp" line="487"/> <source>Save Playlist</source> <translation>保存播放列表</translation> </message> <message> - <location filename="../mainwindow.cpp" line="451"/> + <location filename="../mainwindow.cpp" line="422"/> <source>&About</source> <translation>关于(&A)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="495"/> - <location filename="../mainwindow.cpp" line="521"/> + <location filename="../mainwindow.cpp" line="460"/> + <location filename="../mainwindow.cpp" line="486"/> <source>Playlist Files</source> <translation>播放列表文件</translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>Space</source> <translation>空格</translation> </message> <message> - <location filename="../mainwindow.cpp" line="452"/> + <location filename="../mainwindow.cpp" line="423"/> <source>&About Qt</source> <translation>关于 Qt (&A)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>&Play/Pause</source> <translation>播放/暂停(&P)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="280"/> + <location filename="../mainwindow.cpp" line="272"/> <source>All Supported Bitstreams</source> <translation>支持的全部文件</translation> </message> <message> - <location filename="../mainwindow.cpp" line="428"/> + <location filename="../mainwindow.cpp" line="399"/> <source>&Repeat Track</source> <translation>重复音轨(&R)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="429"/> + <location filename="../mainwindow.cpp" line="400"/> <source>&Shuffle</source> <translation>乱序(&S)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="433"/> + <location filename="../mainwindow.cpp" line="404"/> <source>R</source> <translation>R</translation> </message> <message> - <location filename="../mainwindow.cpp" line="434"/> + <location filename="../mainwindow.cpp" line="405"/> <source>Ctrl+R</source> <translation>Ctrl+R</translation> </message> <message> - <location filename="../mainwindow.cpp" line="435"/> + <location filename="../mainwindow.cpp" line="406"/> <source>S</source> <translation>S</translation> </message> <message> - <location filename="../mainwindow.cpp" line="427"/> + <location filename="../mainwindow.cpp" line="398"/> <source>&Repeat Playlist</source> <translation>重复播放列表(&R)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="447"/> + <location filename="../mainwindow.cpp" line="418"/> <source>Tools</source> <translation>工具</translation> </message> @@ -1026,194 +1020,209 @@ <context> <name>PlayList</name> <message> - <location filename="../playlist.cpp" line="150"/> + <location filename="../playlist.cpp" line="165"/> <source>F</source> <translation>F</translation> </message> <message> - <location filename="../playlist.cpp" line="156"/> + <location filename="../playlist.cpp" line="171"/> <source>D</source> <translation>D</translation> </message> <message> - <location filename="../playlist.cpp" line="191"/> + <location filename="../playlist.cpp" line="204"/> <source>Alt+I</source> <translation>Alt+I</translation> </message> <message> - <location filename="../playlist.cpp" line="299"/> + <location filename="../playlist.cpp" line="308"/> <source>Ctrl+A</source> <translation>Ctrl+A</translation> </message> <message> - <location filename="../playlist.cpp" line="315"/> + <location filename="../playlist.cpp" line="327"/> <source>O</source> <translation>O</translation> </message> <message> - <location filename="../playlist.cpp" line="149"/> + <location filename="../playlist.cpp" line="164"/> <source>&Add File</source> <translation>添加文件(&A)</translation> </message> <message> - <location filename="../playlist.cpp" line="155"/> + <location filename="../playlist.cpp" line="170"/> <source>&Add Directory</source> <translation>添加文件夹(&A)</translation> </message> <message> - <location filename="../playlist.cpp" line="168"/> + <location filename="../playlist.cpp" line="183"/> <source>&Remove Selected</source> <translation>删除所选(&R)</translation> </message> <message> - <location filename="../playlist.cpp" line="175"/> + <location filename="../playlist.cpp" line="189"/> <source>&Remove All</source> <translation>删除全部(&R)</translation> </message> <message> - <location filename="../playlist.cpp" line="181"/> + <location filename="../playlist.cpp" line="195"/> <source>&Remove Unselected</source> <translation>删除未选(&R)</translation> </message> <message> - <location filename="../playlist.cpp" line="187"/> + <location filename="../playlist.cpp" line="200"/> <source>Remove unavailable files</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="190"/> + <location filename="../playlist.cpp" line="203"/> <source>&View Track Details</source> <translation>查看音轨详细信息(&V)</translation> </message> <message> - <location filename="../playlist.cpp" line="199"/> + <location filename="../playlist.cpp" line="212"/> <source>Sort List</source> <translation>列表排序</translation> </message> <message> - <location filename="../playlist.cpp" line="202"/> - <location filename="../playlist.cpp" line="237"/> + <location filename="../playlist.cpp" line="215"/> + <location filename="../playlist.cpp" line="249"/> <source>By Title</source> <translation>按标题</translation> </message> <message> - <location filename="../playlist.cpp" line="206"/> - <location filename="../playlist.cpp" line="241"/> + <location filename="../playlist.cpp" line="219"/> + <location filename="../playlist.cpp" line="253"/> <source>By Album</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="210"/> - <location filename="../playlist.cpp" line="245"/> + <location filename="../playlist.cpp" line="223"/> + <location filename="../playlist.cpp" line="257"/> <source>By Artist</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="214"/> - <location filename="../playlist.cpp" line="249"/> + <location filename="../playlist.cpp" line="227"/> + <location filename="../playlist.cpp" line="261"/> <source>By Filename</source> <translation>按文件名</translation> </message> <message> - <location filename="../playlist.cpp" line="218"/> - <location filename="../playlist.cpp" line="253"/> + <location filename="../playlist.cpp" line="231"/> + <location filename="../playlist.cpp" line="265"/> <source>By Path + Filename</source> <translation>按路径+文件名</translation> </message> <message> - <location filename="../playlist.cpp" line="222"/> - <location filename="../playlist.cpp" line="257"/> + <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="269"/> <source>By Date</source> <translation>按日期</translation> </message> <message> - <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="247"/> <source>Sort Selection</source> <translation>选择排序</translation> </message> <message> - <location filename="../playlist.cpp" line="271"/> + <location filename="../playlist.cpp" line="282"/> <source>Randomize List</source> <translation>随机产生列表</translation> </message> <message> - <location filename="../playlist.cpp" line="272"/> + <location filename="../playlist.cpp" line="283"/> <source>Reverse List</source> <translation>逆序列表</translation> </message> <message> - <location filename="../playlist.cpp" line="284"/> + <location filename="../playlist.cpp" line="295"/> <source>Invert Selection</source> <translation>反选</translation> </message> <message> - <location filename="../playlist.cpp" line="291"/> + <location filename="../playlist.cpp" line="301"/> <source>&Select None</source> <translation>无选择(&S)</translation> </message> <message> - <location filename="../playlist.cpp" line="298"/> + <location filename="../playlist.cpp" line="302"/> + <source>Shift+A</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="307"/> <source>&Select All</source> <translation>选择全部(&S)</translation> </message> <message> - <location filename="../playlist.cpp" line="307"/> + <location filename="../playlist.cpp" line="314"/> <source>&New List</source> <translation>新建列表(&N)</translation> </message> <message> - <location filename="../playlist.cpp" line="308"/> + <location filename="../playlist.cpp" line="315"/> <source>Shift+N</source> <translation>Shift+N</translation> </message> <message> - <location filename="../playlist.cpp" line="314"/> + <location filename="../playlist.cpp" line="319"/> + <source>&Delete List</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="320"/> + <source>Shift+D</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="326"/> <source>&Load List</source> <translation>载入列表(&L)</translation> </message> <message> - <location filename="../playlist.cpp" line="320"/> + <location filename="../playlist.cpp" line="332"/> <source>&Save List</source> <translation>保存列表(&S)</translation> </message> <message> - <location filename="../playlist.cpp" line="321"/> + <location filename="../playlist.cpp" line="333"/> <source>Shift+S</source> <translation>Shift+S</translation> </message> <message> - <location filename="../playlist.cpp" line="169"/> + <location filename="../playlist.cpp" line="184"/> <source>Del</source> <translation>Del</translation> </message> <message> - <location filename="../playlist.cpp" line="161"/> + <location filename="../playlist.cpp" line="176"/> <source>&Add Url</source> <translation>添加 URL (&A)</translation> </message> <message> - <location filename="../playlist.cpp" line="162"/> + <location filename="../playlist.cpp" line="177"/> <source>U</source> <translation>U</translation> </message> <message> - <location filename="../playlist.cpp" line="226"/> - <location filename="../playlist.cpp" line="261"/> + <location filename="../playlist.cpp" line="239"/> + <location filename="../playlist.cpp" line="273"/> <source>By Track Number</source> <translation>按音轨</translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>&Queue</source> <translation>队列(&Q)</translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>Q</source> <translation>Q</translation> </message> <message> - <location filename="../playlist.cpp" line="277"/> + <location filename="../playlist.cpp" line="288"/> <source>Actions</source> <translation>动作</translation> </message> diff --git a/src/ui/translations/qmmp_zh_TW.ts b/src/ui/translations/qmmp_zh_TW.ts index 9ea1a9df2..89a1e7abd 100644 --- a/src/ui/translations/qmmp_zh_TW.ts +++ b/src/ui/translations/qmmp_zh_TW.ts @@ -615,14 +615,14 @@ <name>JumpToTrackDialog</name> <message> <location filename="../jumptotrackdialog.cpp" line="81"/> - <location filename="../jumptotrackdialog.cpp" line="137"/> + <location filename="../jumptotrackdialog.cpp" line="132"/> <source>Unqueue</source> <translation>移出佇列</translation> </message> <message> <location filename="../forms/jumptotrackdialog.ui" line="79"/> <location filename="../jumptotrackdialog.cpp" line="83"/> - <location filename="../jumptotrackdialog.cpp" line="139"/> + <location filename="../jumptotrackdialog.cpp" line="134"/> <source>Queue</source> <translation>加入佇列</translation> </message> @@ -851,174 +851,168 @@ <context> <name>MainWindow</name> <message> - <location filename="../mainwindow.cpp" line="64"/> - <location filename="../mainwindow.cpp" line="483"/> - <source>Default</source> - <translation>預設</translation> - </message> - <message> - <location filename="../mainwindow.cpp" line="274"/> + <location filename="../mainwindow.cpp" line="266"/> <source>Choose a directory</source> <translation>選取一個目錄</translation> </message> <message> - <location filename="../mainwindow.cpp" line="285"/> + <location filename="../mainwindow.cpp" line="277"/> <source>Select one or more files to open</source> <translation>選取開啟一個或更多檔案</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>&Play</source> <translation>播放(&P)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="420"/> + <location filename="../mainwindow.cpp" line="391"/> <source>X</source> <translation>X</translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>&Pause</source> <translation>暫停(&P)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="421"/> + <location filename="../mainwindow.cpp" line="392"/> <source>C</source> <translation>C</translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>&Stop</source> <translation>停止(&S)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="422"/> + <location filename="../mainwindow.cpp" line="393"/> <source>V</source> <translation>V</translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>&Previous</source> <translation>上一曲(&P)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="423"/> + <location filename="../mainwindow.cpp" line="394"/> <source>Z</source> <translation>Z</translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>&Next</source> <translation>下一曲(&N)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="424"/> + <location filename="../mainwindow.cpp" line="395"/> <source>B</source> <translation>B</translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>&Jump To File</source> <translation>跳到檔案(&J)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="443"/> + <location filename="../mainwindow.cpp" line="414"/> <source>J</source> <translation>J</translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>&Settings</source> <translation>設定(&S)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="449"/> + <location filename="../mainwindow.cpp" line="420"/> <source>Ctrl+P</source> <translation>Ctrl+P</translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>&Exit</source> <translation>結束(&E)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="455"/> + <location filename="../mainwindow.cpp" line="426"/> <source>Ctrl+Q</source> <translation>Ctrl+Q</translation> </message> <message> - <location filename="../mainwindow.cpp" line="497"/> + <location filename="../mainwindow.cpp" line="462"/> <source>Open Playlist</source> <translation>開啟播放清單</translation> </message> <message> - <location filename="../mainwindow.cpp" line="522"/> + <location filename="../mainwindow.cpp" line="487"/> <source>Save Playlist</source> <translation>儲存播放清單</translation> </message> <message> - <location filename="../mainwindow.cpp" line="451"/> + <location filename="../mainwindow.cpp" line="422"/> <source>&About</source> <translation>關於(&A)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="495"/> - <location filename="../mainwindow.cpp" line="521"/> + <location filename="../mainwindow.cpp" line="460"/> + <location filename="../mainwindow.cpp" line="486"/> <source>Playlist Files</source> <translation>播放清單檔案</translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>Space</source> <translation>空格</translation> </message> <message> - <location filename="../mainwindow.cpp" line="452"/> + <location filename="../mainwindow.cpp" line="423"/> <source>&About Qt</source> <translation>關於 Qt (&A)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="425"/> + <location filename="../mainwindow.cpp" line="396"/> <source>&Play/Pause</source> <translation>播放/暫停(&P)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="280"/> + <location filename="../mainwindow.cpp" line="272"/> <source>All Supported Bitstreams</source> <translation>支援的全部檔案</translation> </message> <message> - <location filename="../mainwindow.cpp" line="428"/> + <location filename="../mainwindow.cpp" line="399"/> <source>&Repeat Track</source> <translation>重復音軌(&R)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="429"/> + <location filename="../mainwindow.cpp" line="400"/> <source>&Shuffle</source> <translation>亂序(&S)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="433"/> + <location filename="../mainwindow.cpp" line="404"/> <source>R</source> <translation>R</translation> </message> <message> - <location filename="../mainwindow.cpp" line="434"/> + <location filename="../mainwindow.cpp" line="405"/> <source>Ctrl+R</source> <translation>Ctrl+R</translation> </message> <message> - <location filename="../mainwindow.cpp" line="435"/> + <location filename="../mainwindow.cpp" line="406"/> <source>S</source> <translation>S</translation> </message> <message> - <location filename="../mainwindow.cpp" line="427"/> + <location filename="../mainwindow.cpp" line="398"/> <source>&Repeat Playlist</source> <translation>重復播放清單(&R)</translation> </message> <message> - <location filename="../mainwindow.cpp" line="447"/> + <location filename="../mainwindow.cpp" line="418"/> <source>Tools</source> <translation>工具</translation> </message> @@ -1026,194 +1020,209 @@ <context> <name>PlayList</name> <message> - <location filename="../playlist.cpp" line="150"/> + <location filename="../playlist.cpp" line="165"/> <source>F</source> <translation>F</translation> </message> <message> - <location filename="../playlist.cpp" line="156"/> + <location filename="../playlist.cpp" line="171"/> <source>D</source> <translation>D</translation> </message> <message> - <location filename="../playlist.cpp" line="191"/> + <location filename="../playlist.cpp" line="204"/> <source>Alt+I</source> <translation>Alt+I</translation> </message> <message> - <location filename="../playlist.cpp" line="299"/> + <location filename="../playlist.cpp" line="308"/> <source>Ctrl+A</source> <translation>Ctrl+A</translation> </message> <message> - <location filename="../playlist.cpp" line="315"/> + <location filename="../playlist.cpp" line="327"/> <source>O</source> <translation>O</translation> </message> <message> - <location filename="../playlist.cpp" line="149"/> + <location filename="../playlist.cpp" line="164"/> <source>&Add File</source> <translation>添加檔案(&A)</translation> </message> <message> - <location filename="../playlist.cpp" line="155"/> + <location filename="../playlist.cpp" line="170"/> <source>&Add Directory</source> <translation>添加檔案夾(&A)</translation> </message> <message> - <location filename="../playlist.cpp" line="168"/> + <location filename="../playlist.cpp" line="183"/> <source>&Remove Selected</source> <translation>移除所選(&R)</translation> </message> <message> - <location filename="../playlist.cpp" line="175"/> + <location filename="../playlist.cpp" line="189"/> <source>&Remove All</source> <translation>移除全部(&R)</translation> </message> <message> - <location filename="../playlist.cpp" line="181"/> + <location filename="../playlist.cpp" line="195"/> <source>&Remove Unselected</source> <translation>移除未選(&R)</translation> </message> <message> - <location filename="../playlist.cpp" line="187"/> + <location filename="../playlist.cpp" line="200"/> <source>Remove unavailable files</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="190"/> + <location filename="../playlist.cpp" line="203"/> <source>&View Track Details</source> <translation>檢視音軌詳細資訊(&V)</translation> </message> <message> - <location filename="../playlist.cpp" line="199"/> + <location filename="../playlist.cpp" line="212"/> <source>Sort List</source> <translation>清單排序</translation> </message> <message> - <location filename="../playlist.cpp" line="202"/> - <location filename="../playlist.cpp" line="237"/> + <location filename="../playlist.cpp" line="215"/> + <location filename="../playlist.cpp" line="249"/> <source>By Title</source> <translation>按標題</translation> </message> <message> - <location filename="../playlist.cpp" line="206"/> - <location filename="../playlist.cpp" line="241"/> + <location filename="../playlist.cpp" line="219"/> + <location filename="../playlist.cpp" line="253"/> <source>By Album</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="210"/> - <location filename="../playlist.cpp" line="245"/> + <location filename="../playlist.cpp" line="223"/> + <location filename="../playlist.cpp" line="257"/> <source>By Artist</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../playlist.cpp" line="214"/> - <location filename="../playlist.cpp" line="249"/> + <location filename="../playlist.cpp" line="227"/> + <location filename="../playlist.cpp" line="261"/> <source>By Filename</source> <translation>按檔名</translation> </message> <message> - <location filename="../playlist.cpp" line="218"/> - <location filename="../playlist.cpp" line="253"/> + <location filename="../playlist.cpp" line="231"/> + <location filename="../playlist.cpp" line="265"/> <source>By Path + Filename</source> <translation>按路徑+檔名</translation> </message> <message> - <location filename="../playlist.cpp" line="222"/> - <location filename="../playlist.cpp" line="257"/> + <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="269"/> <source>By Date</source> <translation>按日期</translation> </message> <message> - <location filename="../playlist.cpp" line="235"/> + <location filename="../playlist.cpp" line="247"/> <source>Sort Selection</source> <translation>選取排序</translation> </message> <message> - <location filename="../playlist.cpp" line="271"/> + <location filename="../playlist.cpp" line="282"/> <source>Randomize List</source> <translation>隨機產生清單</translation> </message> <message> - <location filename="../playlist.cpp" line="272"/> + <location filename="../playlist.cpp" line="283"/> <source>Reverse List</source> <translation>逆串列表</translation> </message> <message> - <location filename="../playlist.cpp" line="284"/> + <location filename="../playlist.cpp" line="295"/> <source>Invert Selection</source> <translation>反選</translation> </message> <message> - <location filename="../playlist.cpp" line="291"/> + <location filename="../playlist.cpp" line="301"/> <source>&Select None</source> <translation>無選取(&S)</translation> </message> <message> - <location filename="../playlist.cpp" line="298"/> + <location filename="../playlist.cpp" line="302"/> + <source>Shift+A</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="307"/> <source>&Select All</source> <translation>選取全部(&S)</translation> </message> <message> - <location filename="../playlist.cpp" line="307"/> + <location filename="../playlist.cpp" line="314"/> <source>&New List</source> <translation>新建清單(&N)</translation> </message> <message> - <location filename="../playlist.cpp" line="308"/> + <location filename="../playlist.cpp" line="315"/> <source>Shift+N</source> <translation>Shift+N</translation> </message> <message> - <location filename="../playlist.cpp" line="314"/> + <location filename="../playlist.cpp" line="319"/> + <source>&Delete List</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="320"/> + <source>Shift+D</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../playlist.cpp" line="326"/> <source>&Load List</source> <translation>載入清單(&L)</translation> </message> <message> - <location filename="../playlist.cpp" line="320"/> + <location filename="../playlist.cpp" line="332"/> <source>&Save List</source> <translation>儲存清單(&S)</translation> </message> <message> - <location filename="../playlist.cpp" line="321"/> + <location filename="../playlist.cpp" line="333"/> <source>Shift+S</source> <translation>Shift+S</translation> </message> <message> - <location filename="../playlist.cpp" line="169"/> + <location filename="../playlist.cpp" line="184"/> <source>Del</source> <translation>Del</translation> </message> <message> - <location filename="../playlist.cpp" line="161"/> + <location filename="../playlist.cpp" line="176"/> <source>&Add Url</source> <translation>添加 URL (&A)</translation> </message> <message> - <location filename="../playlist.cpp" line="162"/> + <location filename="../playlist.cpp" line="177"/> <source>U</source> <translation>U</translation> </message> <message> - <location filename="../playlist.cpp" line="226"/> - <location filename="../playlist.cpp" line="261"/> + <location filename="../playlist.cpp" line="239"/> + <location filename="../playlist.cpp" line="273"/> <source>By Track Number</source> <translation>按音軌</translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>&Queue</source> <translation>佇列(&Q)</translation> </message> <message> - <location filename="../playlist.cpp" line="280"/> + <location filename="../playlist.cpp" line="291"/> <source>Q</source> <translation>Q</translation> </message> <message> - <location filename="../playlist.cpp" line="277"/> + <location filename="../playlist.cpp" line="288"/> <source>Actions</source> <translation>動作</translation> </message> |
