aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/General/covermanager/covermanager.cpp2
-rw-r--r--src/plugins/General/fileops/fileops.cpp3
-rw-r--r--src/plugins/General/fileops/translations/fileops_plugin_cs.ts14
-rw-r--r--src/plugins/General/fileops/translations/fileops_plugin_de.ts14
-rw-r--r--src/plugins/General/fileops/translations/fileops_plugin_it.ts14
-rw-r--r--src/plugins/General/fileops/translations/fileops_plugin_lt.ts14
-rw-r--r--src/plugins/General/fileops/translations/fileops_plugin_pl.ts14
-rw-r--r--src/plugins/General/fileops/translations/fileops_plugin_ru.ts14
-rw-r--r--src/plugins/General/fileops/translations/fileops_plugin_tr.ts14
-rw-r--r--src/plugins/General/fileops/translations/fileops_plugin_uk_UA.ts14
-rw-r--r--src/plugins/General/fileops/translations/fileops_plugin_zh_CN.ts14
-rw-r--r--src/plugins/General/fileops/translations/fileops_plugin_zh_TW.ts14
-rw-r--r--src/plugins/General/hal/halplugin.cpp14
-rw-r--r--src/plugins/General/lyrics/lyrics.cpp5
-rw-r--r--src/plugins/General/mpris/playerobject.cpp17
-rw-r--r--src/plugins/General/mpris/playerobject.h6
-rw-r--r--src/plugins/General/mpris/tracklistobject.cpp19
-rw-r--r--src/plugins/General/mpris/tracklistobject.h5
-rw-r--r--src/qmmpui/CMakeLists.txt3
-rw-r--r--src/qmmpui/mediaplayer.cpp43
-rw-r--r--src/qmmpui/mediaplayer.h12
-rw-r--r--src/qmmpui/playlistmanager.cpp395
-rw-r--r--src/qmmpui/playlistmanager.h200
-rw-r--r--src/qmmpui/playlistmodel.cpp206
-rw-r--r--src/qmmpui/playlistmodel.h81
-rw-r--r--src/qmmpui/qmmpui.pro6
-rw-r--r--src/qmmpui/translations/libqmmpui_cs.ts8
-rw-r--r--src/qmmpui/translations/libqmmpui_de.ts8
-rw-r--r--src/qmmpui/translations/libqmmpui_it.ts8
-rw-r--r--src/qmmpui/translations/libqmmpui_lt.ts8
-rw-r--r--src/qmmpui/translations/libqmmpui_pl.ts8
-rw-r--r--src/qmmpui/translations/libqmmpui_pt_BR.ts8
-rw-r--r--src/qmmpui/translations/libqmmpui_ru.ts8
-rw-r--r--src/qmmpui/translations/libqmmpui_tr.ts8
-rw-r--r--src/qmmpui/translations/libqmmpui_uk_UA.ts8
-rw-r--r--src/qmmpui/translations/libqmmpui_zh_CN.ts8
-rw-r--r--src/qmmpui/translations/libqmmpui_zh_TW.ts8
-rw-r--r--src/ui/configdialog.cpp16
-rw-r--r--src/ui/display.cpp4
-rw-r--r--src/ui/jumptotrackdialog.cpp23
-rw-r--r--src/ui/jumptotrackdialog.h18
-rw-r--r--src/ui/keyboardmanager.cpp67
-rw-r--r--src/ui/keyboardmanager.h8
-rw-r--r--src/ui/listwidget.cpp41
-rw-r--r--src/ui/listwidget.h18
-rw-r--r--src/ui/mainwindow.cpp110
-rw-r--r--src/ui/mainwindow.h16
-rw-r--r--src/ui/playlist.cpp143
-rw-r--r--src/ui/playlist.h14
-rw-r--r--src/ui/playlisttitlebar.cpp7
-rw-r--r--src/ui/playlisttitlebar.h4
-rw-r--r--src/ui/translations/qmmp_cs.ts181
-rw-r--r--src/ui/translations/qmmp_de.ts181
-rw-r--r--src/ui/translations/qmmp_it.ts181
-rw-r--r--src/ui/translations/qmmp_lt.ts181
-rw-r--r--src/ui/translations/qmmp_pl_PL.ts181
-rw-r--r--src/ui/translations/qmmp_pt_BR.ts181
-rw-r--r--src/ui/translations/qmmp_ru.ts181
-rw-r--r--src/ui/translations/qmmp_tr.ts181
-rw-r--r--src/ui/translations/qmmp_uk_UA.ts181
-rw-r--r--src/ui/translations/qmmp_zh_CN.ts181
-rw-r--r--src/ui/translations/qmmp_zh_TW.ts181
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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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>&amp;Play</source>
<translation>Pře&amp;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>&amp;Pause</source>
<translation>Pau&amp;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>&amp;Stop</source>
<translation>&amp;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>&amp;Previous</source>
<translation>&amp;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>&amp;Next</source>
<translation>&amp;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>&amp;Jump To File</source>
<translation>Přeskočit na soubo&amp;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>&amp;Settings</source>
<translation>&amp;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>&amp;About</source>
<translation>O &amp;aplikaci</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="455"/>
+ <location filename="../mainwindow.cpp" line="426"/>
<source>&amp;Exit</source>
<translation>U&amp;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>&amp;About Qt</source>
<translation>O knihovně &amp;Qt</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="425"/>
+ <location filename="../mainwindow.cpp" line="396"/>
<source>&amp;Play/Pause</source>
<translation>&amp;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>&amp;Repeat Track</source>
<translation>&amp;Opakovat stopu</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="429"/>
+ <location filename="../mainwindow.cpp" line="400"/>
<source>&amp;Shuffle</source>
<translation>Za&amp;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>&amp;Repeat Playlist</source>
<translation>&amp;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>&amp;Add File</source>
<translation>Přidat &amp;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>&amp;Add Directory</source>
<translation>Přidat &amp;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>&amp;Remove Selected</source>
<translation>&amp;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>&amp;Remove All</source>
<translation>Odstranit &amp;vše</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="181"/>
+ <location filename="../playlist.cpp" line="195"/>
<source>&amp;Remove Unselected</source>
<translation>Odstranit &amp;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>&amp;View Track Details</source>
<translation>Zobrazit &amp;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>&amp;Select None</source>
<translation>&amp;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>&amp;Select All</source>
<translation>&amp;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>&amp;New List</source>
<translation>&amp;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>&amp;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>&amp;Load List</source>
<translation>Načíst &amp;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>&amp;Save List</source>
<translation>&amp;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>&amp;Add Url</source>
<translation>Přidat &amp;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>&amp;Queue</source>
<translation>&amp;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>&amp;Play</source>
<translation>&amp;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>&amp;Pause</source>
<translation>&amp;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>&amp;Stop</source>
<translation>&amp;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>&amp;Previous</source>
<translation>&amp;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>&amp;Next</source>
<translation>&amp;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>&amp;Jump To File</source>
<translation>Springe zu &amp;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>&amp;Settings</source>
<translation>&amp;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>&amp;About</source>
<translation>Ü&amp;ber</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="455"/>
+ <location filename="../mainwindow.cpp" line="426"/>
<source>&amp;Exit</source>
<translation>Be&amp;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>&amp;About Qt</source>
<translation>Übe&amp;r Qt</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="425"/>
+ <location filename="../mainwindow.cpp" line="396"/>
<source>&amp;Play/Pause</source>
<translation>Wieder&amp;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>&amp;Repeat Track</source>
<translation>Tite&amp;l wiederholen</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="429"/>
+ <location filename="../mainwindow.cpp" line="400"/>
<source>&amp;Shuffle</source>
<translation>&amp;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>&amp;Repeat Playlist</source>
<translation>W&amp;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>&amp;Add File</source>
<translation>&amp;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>&amp;Add Directory</source>
<translation>&amp;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>&amp;Remove Selected</source>
<translation>&amp;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>&amp;Remove All</source>
<translation>Alle &amp;entfernen</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="181"/>
+ <location filename="../playlist.cpp" line="195"/>
<source>&amp;Remove Unselected</source>
<translation>&amp;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>&amp;View Track Details</source>
<translation>&amp;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>&amp;Select None</source>
<translation>&amp;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>&amp;Select All</source>
<translation>Alle aus&amp;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>&amp;New List</source>
<translation>&amp;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>&amp;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>&amp;Load List</source>
<translation>Wiedergabeliste &amp;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>&amp;Save List</source>
<translation>Wiedergabeliste &amp;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>&amp;Add Url</source>
<translation>&amp;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>&amp;Queue</source>
<translation>&amp;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>&amp;Play</source>
<translation>&amp;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>&amp;Pause</source>
<translation>&amp;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>&amp;Stop</source>
<translation>&amp;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>&amp;Previous</source>
<translation>&amp;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>&amp;Next</source>
<translation>&amp;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>&amp;Jump To File</source>
<translation>&amp;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>&amp;Settings</source>
<translation>&amp;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>&amp;Exit</source>
<translation>&amp;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>&amp;About</source>
<translation>&amp;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>&amp;About Qt</source>
<translation>&amp;Informazioni su Qt</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="425"/>
+ <location filename="../mainwindow.cpp" line="396"/>
<source>&amp;Play/Pause</source>
<translation>&amp;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>&amp;Repeat Track</source>
<translation>&amp;Ripeti brano</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="429"/>
+ <location filename="../mainwindow.cpp" line="400"/>
<source>&amp;Shuffle</source>
<translation>&amp;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>&amp;Repeat Playlist</source>
<translation>&amp;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>&amp;Add File</source>
<translation>&amp;Aggiungi brani</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="155"/>
+ <location filename="../playlist.cpp" line="170"/>
<source>&amp;Add Directory</source>
<translation>&amp;Aggiungi cartelle</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="168"/>
+ <location filename="../playlist.cpp" line="183"/>
<source>&amp;Remove Selected</source>
<translation>&amp;Elimina la selezione</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="175"/>
+ <location filename="../playlist.cpp" line="189"/>
<source>&amp;Remove All</source>
<translation>&amp;Elimina tutto</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="181"/>
+ <location filename="../playlist.cpp" line="195"/>
<source>&amp;Remove Unselected</source>
<translation>&amp;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>&amp;View Track Details</source>
<translation>&amp;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>&amp;Select None</source>
<translation>&amp;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>&amp;Select All</source>
<translation>&amp;Seleziona tutto</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="307"/>
+ <location filename="../playlist.cpp" line="314"/>
<source>&amp;New List</source>
<translation>&amp;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>&amp;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>&amp;Load List</source>
<translation>&amp;Carica lista</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="320"/>
+ <location filename="../playlist.cpp" line="332"/>
<source>&amp;Save List</source>
<translation>&amp;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>&amp;Add Url</source>
<translation>&amp;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>&amp;Queue</source>
<translation>&amp;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>&amp;Play</source>
<translation>&amp;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>&amp;Pause</source>
<translation>&amp;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>&amp;Stop</source>
<translation>&amp;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>&amp;Previous</source>
<translation>&amp;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>&amp;Next</source>
<translation>&amp;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>&amp;Jump To File</source>
<translation>&amp;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>&amp;Settings</source>
<translation>&amp;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>&amp;Exit</source>
<translation>&amp;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>&amp;About</source>
<translation>&amp;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>&amp;About Qt</source>
<translation>&amp;Apie Qt</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="425"/>
+ <location filename="../mainwindow.cpp" line="396"/>
<source>&amp;Play/Pause</source>
<translation>&amp;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>&amp;Repeat Track</source>
<translation>&amp;Kartoti takelį</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="429"/>
+ <location filename="../mainwindow.cpp" line="400"/>
<source>&amp;Shuffle</source>
<translation>&amp;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>&amp;Repeat Playlist</source>
<translation>&amp;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>&amp;Add File</source>
<translation>&amp;Pridėti bylą</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="155"/>
+ <location filename="../playlist.cpp" line="170"/>
<source>&amp;Add Directory</source>
<translation>&amp;Pridėti aplanką</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="168"/>
+ <location filename="../playlist.cpp" line="183"/>
<source>&amp;Remove Selected</source>
<translation>&amp;Pašalinti pasirinktus</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="175"/>
+ <location filename="../playlist.cpp" line="189"/>
<source>&amp;Remove All</source>
<translation>&amp;Pašalinti visus</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="181"/>
+ <location filename="../playlist.cpp" line="195"/>
<source>&amp;Remove Unselected</source>
<translation>&amp;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>&amp;View Track Details</source>
<translation>&amp;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>&amp;Select None</source>
<translation>&amp;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>&amp;Select All</source>
<translation>&amp;Pasirinkti visus</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="307"/>
+ <location filename="../playlist.cpp" line="314"/>
<source>&amp;New List</source>
<translation>&amp;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>&amp;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>&amp;Load List</source>
<translation type="unfinished">&amp;Įkelti sąrašą</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="320"/>
+ <location filename="../playlist.cpp" line="332"/>
<source>&amp;Save List</source>
<translation>&amp;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>&amp;Add Url</source>
<translation>&amp;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>&amp;Queue</source>
<translation>&amp;Į 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>&amp;Play</source>
<translation>&amp;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>&amp;Pause</source>
<translation>&amp;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>&amp;Stop</source>
<translation>&amp;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>&amp;Previous</source>
<translation>&amp;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>&amp;Next</source>
<translation>&amp;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>&amp;Jump To File</source>
<translation>&amp;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>&amp;Settings</source>
<translation>&amp;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>&amp;Exit</source>
<translation>&amp;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>&amp;About</source>
<translation>&amp;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>&amp;About Qt</source>
<translation>&amp;O Qt</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="425"/>
+ <location filename="../mainwindow.cpp" line="396"/>
<source>&amp;Play/Pause</source>
<translation>&amp;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>&amp;Repeat Track</source>
<translation>&amp;Powtórz utwór</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="429"/>
+ <location filename="../mainwindow.cpp" line="400"/>
<source>&amp;Shuffle</source>
<translation>&amp;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>&amp;Repeat Playlist</source>
<translation>Powtó&amp;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>&amp;Add File</source>
<translation>&amp;Dodaj plik</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="155"/>
+ <location filename="../playlist.cpp" line="170"/>
<source>&amp;Add Directory</source>
<translation>Dodaj &amp;katalog</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="168"/>
+ <location filename="../playlist.cpp" line="183"/>
<source>&amp;Remove Selected</source>
<translation>&amp;Usuń zaznaczone</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="175"/>
+ <location filename="../playlist.cpp" line="189"/>
<source>&amp;Remove All</source>
<translation>Usuń &amp;wszystkie</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="181"/>
+ <location filename="../playlist.cpp" line="195"/>
<source>&amp;Remove Unselected</source>
<translation>Usuń &amp;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>&amp;View Track Details</source>
<translation>&amp;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>&amp;Select None</source>
<translation>&amp;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>&amp;Select All</source>
<translation>&amp;Zaznacz wszystkie</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="307"/>
+ <location filename="../playlist.cpp" line="314"/>
<source>&amp;New List</source>
<translation>&amp;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>&amp;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>&amp;Load List</source>
<translation>&amp;Ładuj listę</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="320"/>
+ <location filename="../playlist.cpp" line="332"/>
<source>&amp;Save List</source>
<translation>&amp;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>&amp;Add Url</source>
<translation>Dod&amp;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>&amp;Queue</source>
<translation>&amp;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>&amp;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>&amp;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>&amp;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>&amp;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>&amp;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>&amp;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>&amp;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>&amp;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>&amp;About</source>
<translation type="unfinished">&amp;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>&amp;About Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="425"/>
+ <location filename="../mainwindow.cpp" line="396"/>
<source>&amp;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>&amp;Repeat Track</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="429"/>
+ <location filename="../mainwindow.cpp" line="400"/>
<source>&amp;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>&amp;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>&amp;Add File</source>
<translation type="unfinished">&amp;Adicionar arquivo</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="155"/>
+ <location filename="../playlist.cpp" line="170"/>
<source>&amp;Add Directory</source>
<translation type="unfinished">&amp;Adicionar Diretorio</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="168"/>
+ <location filename="../playlist.cpp" line="183"/>
<source>&amp;Remove Selected</source>
<translation type="unfinished">&amp;Remover selecionadas</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="175"/>
+ <location filename="../playlist.cpp" line="189"/>
<source>&amp;Remove All</source>
<translation type="unfinished">&amp;Remover tudo</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="181"/>
+ <location filename="../playlist.cpp" line="195"/>
<source>&amp;Remove Unselected</source>
<translation type="unfinished">&amp;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>&amp;View Track Details</source>
<translation type="unfinished">&amp;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>&amp;Select None</source>
<translation type="unfinished">&amp;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>&amp;Select All</source>
<translation type="unfinished">&amp;Selecionar tudo</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="307"/>
+ <location filename="../playlist.cpp" line="314"/>
<source>&amp;New List</source>
<translation type="unfinished">&amp;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>&amp;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>&amp;Load List</source>
<translation type="unfinished">&amp;Carregar lista</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="320"/>
+ <location filename="../playlist.cpp" line="332"/>
<source>&amp;Save List</source>
<translation type="unfinished">&amp;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>&amp;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>&amp;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>&amp;Play</source>
<translation>&amp;Воспроизвести</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>&amp;Pause</source>
<translation>&amp;Приостановить</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>&amp;Stop</source>
<translation>&amp;Стоп</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>&amp;Previous</source>
<translation>&amp;Предыдущий фрагмент</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>&amp;Next</source>
<translation>&amp;Следующий фрагмент</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>&amp;Jump To File</source>
<translation>&amp;Перейти к файлу</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>&amp;Settings</source>
<translation>&amp;Настройки</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>&amp;Exit</source>
<translation>&amp;Выход</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>&amp;About</source>
<translation>&amp;О программе</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>&amp;About Qt</source>
<translation>&amp;О библиотеке Qt</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="425"/>
+ <location filename="../mainwindow.cpp" line="396"/>
<source>&amp;Play/Pause</source>
<translation>&amp;Воспр/приост</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>&amp;Repeat Track</source>
<translation>&amp;Повторять трек</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="429"/>
+ <location filename="../mainwindow.cpp" line="400"/>
<source>&amp;Shuffle</source>
<translation>&amp;В случайном порядке</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>&amp;Repeat Playlist</source>
<translation>&amp;Повторять список</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>&amp;Add File</source>
<translation>&amp;Добавить файл</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="155"/>
+ <location filename="../playlist.cpp" line="170"/>
<source>&amp;Add Directory</source>
<translation>&amp;Добавить директорию</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="168"/>
+ <location filename="../playlist.cpp" line="183"/>
<source>&amp;Remove Selected</source>
<translation>&amp;Удалить выделенное</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="175"/>
+ <location filename="../playlist.cpp" line="189"/>
<source>&amp;Remove All</source>
<translation>&amp;Удалить всё</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="181"/>
+ <location filename="../playlist.cpp" line="195"/>
<source>&amp;Remove Unselected</source>
<translation>&amp;Удалить невыделенное</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>&amp;View Track Details</source>
<translation>&amp;Информация</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>&amp;Select None</source>
<translation>&amp;Снять выделение</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>&amp;Select All</source>
<translation>&amp;Выделить всё</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="307"/>
+ <location filename="../playlist.cpp" line="314"/>
<source>&amp;New List</source>
<translation>&amp;Новый лист</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>&amp;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>&amp;Load List</source>
<translation>&amp;Загрузить лист</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="320"/>
+ <location filename="../playlist.cpp" line="332"/>
<source>&amp;Save List</source>
<translation>&amp;Сохранить лист</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>&amp;Add Url</source>
<translation>&amp;Добавить 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>&amp;Queue</source>
<translation>&amp;В очередь</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>&amp;Play</source>
<translation>&amp;Ç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>&amp;Pause</source>
<translation>&amp;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>&amp;Stop</source>
<translation>&amp;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>&amp;Previous</source>
<translation>&amp;Ö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>&amp;Next</source>
<translation>&amp;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>&amp;Jump To File</source>
<translation>&amp;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>&amp;Settings</source>
<translation>&amp;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>&amp;Exit</source>
<translation>&amp;Çı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>&amp;About</source>
<translation>&amp;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>&amp;About Qt</source>
<translation>&amp;Qt Hakkında</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="425"/>
+ <location filename="../mainwindow.cpp" line="396"/>
<source>&amp;Play/Pause</source>
<translation>&amp;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>&amp;Repeat Track</source>
<translation>&amp;Parçayı Yinele</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="429"/>
+ <location filename="../mainwindow.cpp" line="400"/>
<source>&amp;Shuffle</source>
<translation>&amp;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>&amp;Repeat Playlist</source>
<translation>&amp;Ç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>&amp;Add File</source>
<translation>&amp;Dosya Ekle</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="155"/>
+ <location filename="../playlist.cpp" line="170"/>
<source>&amp;Add Directory</source>
<translation>&amp;Dizin Ekle</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="168"/>
+ <location filename="../playlist.cpp" line="183"/>
<source>&amp;Remove Selected</source>
<translation>&amp;Seçileni Kaldır</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="175"/>
+ <location filename="../playlist.cpp" line="189"/>
<source>&amp;Remove All</source>
<translation>&amp;Hepsini Kaldır</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="181"/>
+ <location filename="../playlist.cpp" line="195"/>
<source>&amp;Remove Unselected</source>
<translation>&amp;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>&amp;View Track Details</source>
<translation>&amp;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>&amp;Select None</source>
<translation>&amp;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>&amp;Select All</source>
<translation>&amp;Tümünü Seç</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="307"/>
+ <location filename="../playlist.cpp" line="314"/>
<source>&amp;New List</source>
<translation>&amp;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>&amp;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>&amp;Load List</source>
<translation>&amp;Liste Yükle</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="320"/>
+ <location filename="../playlist.cpp" line="332"/>
<source>&amp;Save List</source>
<translation>&amp;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>&amp;Add Url</source>
<translation>&amp;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>&amp;Queue</source>
<translation>&amp;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>&amp;Play</source>
<translation>&amp;Відтворити</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>&amp;Pause</source>
<translation>&amp;Пауза</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>&amp;Stop</source>
<translation>&amp;Стоп</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>&amp;Previous</source>
<translation>&amp;Назад</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>&amp;Next</source>
<translation>&amp;Вперед</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>&amp;Jump To File</source>
<translation>&amp;Перейти до файлу</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>&amp;Settings</source>
<translation>&amp;Налаштування</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>&amp;Exit</source>
<translation>&amp;Вихід</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>&amp;About</source>
<translation>&amp;Про програму</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>&amp;About Qt</source>
<translation>&amp;Про Qt</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="425"/>
+ <location filename="../mainwindow.cpp" line="396"/>
<source>&amp;Play/Pause</source>
<translation>&amp;Грати/Пауза</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>&amp;Repeat Track</source>
<translation>&amp;Повторити трек</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="429"/>
+ <location filename="../mainwindow.cpp" line="400"/>
<source>&amp;Shuffle</source>
<translation>&amp;Перемішати</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>&amp;Repeat Playlist</source>
<translation>&amp;Повторити список</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>&amp;Add File</source>
<translation>&amp;Додати файл</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="155"/>
+ <location filename="../playlist.cpp" line="170"/>
<source>&amp;Add Directory</source>
<translation>&amp;Додати теку</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="168"/>
+ <location filename="../playlist.cpp" line="183"/>
<source>&amp;Remove Selected</source>
<translation>&amp;Видалити вибране</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="175"/>
+ <location filename="../playlist.cpp" line="189"/>
<source>&amp;Remove All</source>
<translation>&amp;Видалити все</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="181"/>
+ <location filename="../playlist.cpp" line="195"/>
<source>&amp;Remove Unselected</source>
<translation>&amp;Видалити не вибране</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>&amp;View Track Details</source>
<translation>&amp;Інформація</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>За ім&apos;ям файлу</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>&amp;Select None</source>
<translation>&amp;Зняти виділення</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>&amp;Select All</source>
<translation>&amp;Вибрати все</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="307"/>
+ <location filename="../playlist.cpp" line="314"/>
<source>&amp;New List</source>
<translation>&amp;Новий список</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>&amp;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>&amp;Load List</source>
<translation>&amp;Завантажити список</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="320"/>
+ <location filename="../playlist.cpp" line="332"/>
<source>&amp;Save List</source>
<translation>&amp;Зберегти список</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>&amp;Add Url</source>
<translation>&amp;Додати адресу</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>&amp;Queue</source>
<translation>&amp;В чергу</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>&amp;Play</source>
<translation>播放(&amp;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>&amp;Pause</source>
<translation>暂停(&amp;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>&amp;Stop</source>
<translation>停止(&amp;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>&amp;Previous</source>
<translation>上一曲(&amp;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>&amp;Next</source>
<translation>下一曲(&amp;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>&amp;Jump To File</source>
<translation>跳到文件(&amp;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>&amp;Settings</source>
<translation>设置(&amp;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>&amp;Exit</source>
<translation>退出(&amp;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>&amp;About</source>
<translation>关于(&amp;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>&amp;About Qt</source>
<translation>关于 Qt (&amp;A)</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="425"/>
+ <location filename="../mainwindow.cpp" line="396"/>
<source>&amp;Play/Pause</source>
<translation>播放/暂停(&amp;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>&amp;Repeat Track</source>
<translation>重复音轨(&amp;R)</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="429"/>
+ <location filename="../mainwindow.cpp" line="400"/>
<source>&amp;Shuffle</source>
<translation>乱序(&amp;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>&amp;Repeat Playlist</source>
<translation>重复播放列表(&amp;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>&amp;Add File</source>
<translation>添加文件(&amp;A)</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="155"/>
+ <location filename="../playlist.cpp" line="170"/>
<source>&amp;Add Directory</source>
<translation>添加文件夹(&amp;A)</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="168"/>
+ <location filename="../playlist.cpp" line="183"/>
<source>&amp;Remove Selected</source>
<translation>删除所选(&amp;R)</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="175"/>
+ <location filename="../playlist.cpp" line="189"/>
<source>&amp;Remove All</source>
<translation>删除全部(&amp;R)</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="181"/>
+ <location filename="../playlist.cpp" line="195"/>
<source>&amp;Remove Unselected</source>
<translation>删除未选(&amp;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>&amp;View Track Details</source>
<translation>查看音轨详细信息(&amp;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>&amp;Select None</source>
<translation>无选择(&amp;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>&amp;Select All</source>
<translation>选择全部(&amp;S)</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="307"/>
+ <location filename="../playlist.cpp" line="314"/>
<source>&amp;New List</source>
<translation>新建列表(&amp;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>&amp;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>&amp;Load List</source>
<translation>载入列表(&amp;L)</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="320"/>
+ <location filename="../playlist.cpp" line="332"/>
<source>&amp;Save List</source>
<translation>保存列表(&amp;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>&amp;Add Url</source>
<translation>添加 URL (&amp;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>&amp;Queue</source>
<translation>队列(&amp;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>&amp;Play</source>
<translation>播放(&amp;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>&amp;Pause</source>
<translation>暫停(&amp;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>&amp;Stop</source>
<translation>停止(&amp;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>&amp;Previous</source>
<translation>上一曲(&amp;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>&amp;Next</source>
<translation>下一曲(&amp;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>&amp;Jump To File</source>
<translation>跳到檔案(&amp;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>&amp;Settings</source>
<translation>設定(&amp;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>&amp;Exit</source>
<translation>結束(&amp;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>&amp;About</source>
<translation>關於(&amp;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>&amp;About Qt</source>
<translation>關於 Qt (&amp;A)</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="425"/>
+ <location filename="../mainwindow.cpp" line="396"/>
<source>&amp;Play/Pause</source>
<translation>播放/暫停(&amp;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>&amp;Repeat Track</source>
<translation>重復音軌(&amp;R)</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="429"/>
+ <location filename="../mainwindow.cpp" line="400"/>
<source>&amp;Shuffle</source>
<translation>亂序(&amp;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>&amp;Repeat Playlist</source>
<translation>重復播放清單(&amp;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>&amp;Add File</source>
<translation>添加檔案(&amp;A)</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="155"/>
+ <location filename="../playlist.cpp" line="170"/>
<source>&amp;Add Directory</source>
<translation>添加檔案夾(&amp;A)</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="168"/>
+ <location filename="../playlist.cpp" line="183"/>
<source>&amp;Remove Selected</source>
<translation>移除所選(&amp;R)</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="175"/>
+ <location filename="../playlist.cpp" line="189"/>
<source>&amp;Remove All</source>
<translation>移除全部(&amp;R)</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="181"/>
+ <location filename="../playlist.cpp" line="195"/>
<source>&amp;Remove Unselected</source>
<translation>移除未選(&amp;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>&amp;View Track Details</source>
<translation>檢視音軌詳細資訊(&amp;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>&amp;Select None</source>
<translation>無選取(&amp;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>&amp;Select All</source>
<translation>選取全部(&amp;S)</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="307"/>
+ <location filename="../playlist.cpp" line="314"/>
<source>&amp;New List</source>
<translation>新建清單(&amp;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>&amp;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>&amp;Load List</source>
<translation>載入清單(&amp;L)</translation>
</message>
<message>
- <location filename="../playlist.cpp" line="320"/>
+ <location filename="../playlist.cpp" line="332"/>
<source>&amp;Save List</source>
<translation>儲存清單(&amp;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>&amp;Add Url</source>
<translation>添加 URL (&amp;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>&amp;Queue</source>
<translation>佇列(&amp;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>