From 90d3aeb642ba4d6445932343010294a39b33efe2 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Thu, 12 Nov 2009 22:00:02 +0000 Subject: added multiple playlists support git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@1363 90c681e8-e032-0410-971d-27865f9a5e38 --- src/ui/configdialog.cpp | 16 ++-- src/ui/display.cpp | 4 +- src/ui/jumptotrackdialog.cpp | 23 ++--- src/ui/jumptotrackdialog.h | 18 ++-- src/ui/keyboardmanager.cpp | 67 +++++++------- src/ui/keyboardmanager.h | 8 +- src/ui/listwidget.cpp | 41 ++------- src/ui/listwidget.h | 18 ++-- src/ui/mainwindow.cpp | 110 ++++++++--------------- src/ui/mainwindow.h | 16 ++-- src/ui/playlist.cpp | 143 ++++++++++++++++++++---------- src/ui/playlist.h | 14 +-- src/ui/playlisttitlebar.cpp | 7 +- src/ui/playlisttitlebar.h | 4 +- src/ui/translations/qmmp_cs.ts | 181 ++++++++++++++++++++------------------ src/ui/translations/qmmp_de.ts | 181 ++++++++++++++++++++------------------ src/ui/translations/qmmp_it.ts | 181 ++++++++++++++++++++------------------ src/ui/translations/qmmp_lt.ts | 181 ++++++++++++++++++++------------------ src/ui/translations/qmmp_pl_PL.ts | 181 ++++++++++++++++++++------------------ src/ui/translations/qmmp_pt_BR.ts | 181 ++++++++++++++++++++------------------ src/ui/translations/qmmp_ru.ts | 181 ++++++++++++++++++++------------------ src/ui/translations/qmmp_tr.ts | 181 ++++++++++++++++++++------------------ src/ui/translations/qmmp_uk_UA.ts | 181 ++++++++++++++++++++------------------ src/ui/translations/qmmp_zh_CN.ts | 181 ++++++++++++++++++++------------------ src/ui/translations/qmmp_zh_TW.ts | 181 ++++++++++++++++++++------------------ 25 files changed, 1277 insertions(+), 1203 deletions(-) (limited to 'src/ui') 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 +#include #include #include #include #include -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 #include "ui_jumptotrackdialog.h" -/** - @author Vladimir Kuznetsov - */ - class QStringListModel; -class PlayListModel; class QSortFilterProxyModel; +class PlayListManager; - +/** + @author Vladimir Kuznetsov + */ 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 - #include - #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 rows = m_playListModel->getSelectedRows(); + QList 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 rows = m_playListModel->getSelectedRows(); + QList 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 rows = m_playListModel->getSelectedRows(); + QList rows = m_playlist->listWidget()->model()->getSelectedRows(); MainWindow* mw = qobject_cast (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 #include #include - #include #include #include - #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 #include #include +#include #include @@ -35,6 +36,7 @@ #include #include #include +#include #include #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 */ 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 #include +#include #include #include #include -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 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 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 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 @@ JumpToTrackDialog - + Unqueue Vyřadit - + Queue Zařadit @@ -851,174 +851,168 @@ MainWindow - - - Default - Seznam - - - + Choose a directory Výběr adresáře - + Select one or more files to open Vyberte jeden či více souborů k otevření - + &Play Pře&hrát - + X X - + &Pause Pau&za - + C C - + &Stop &Stop - + V V - + &Previous &Předchozí - + Z Z - + &Next &Další - + B B - + &Jump To File Přeskočit na soubo&r - + J J - + &Settings &Nastavení - + Ctrl+P Ctrl+P - + &About O &aplikaci - + &Exit U&končit - + Ctrl+Q Ctrl+Q - - + + Playlist Files Seznamy skladeb - + Open Playlist Načíst seznam skladeb - + Save Playlist Uložit seznam skladeb - + Space Mezerník - + &About Qt O knihovně &Qt - + &Play/Pause &Přehrát/Pauza - + All Supported Bitstreams Všechny podporované formáty - + &Repeat Track &Opakovat stopu - + &Shuffle Za&míchat - + R O - + Ctrl+R Ctrl+R - + S M - + &Repeat Playlist &Opakovat seznam skladeb - + Tools Nástroje @@ -1026,194 +1020,209 @@ PlayList - + &Add File Přidat &soubor - + F F - + &Add Directory Přidat &adresář - + D D - + &Remove Selected &Odstranit vybrané - + Del Del - + &Remove All Odstranit &vše - + &Remove Unselected Odstranit &nevybrané - + Remove unavailable files Odstranit nedostupné soubory - + &View Track Details Zobrazit &informace o skladbě - + Alt+I Alt+I - + Sort List Seřadit seznam - - + + By Title Podle názvu skladby - - + + By Album - - + + By Artist - - + + By Filename Podle názvu souboru - - + + By Path + Filename Podle cesty a názvu souboru - - + + By Date Podle data - + Sort Selection Seřadit výběr - + Randomize List Zamíchat seznam - + Reverse List Obrátit pořadí seznamu - + Invert Selection Invertovat výběr - + &Select None &Zrušit výběr - + + Shift+A + + + + &Select All &Vybrat vše - + Ctrl+A Ctrl+A - + &New List &Nový seznam - + Shift+N Shift+N - + + &Delete List + + + + + Shift+D + + + + &Load List Načíst &seznam - + O O - + &Save List &Uložit seznam - + Shift+S Shift+S - + &Add Url Přidat &URL - + U U - - + + By Track Number Podle čísla skladby - + &Queue &Fronta - + Q Q - + Actions Činnosti 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 @@ JumpToTrackDialog - + Unqueue Aus Warteschlange entfernen - + Queue In Warteschlange @@ -851,174 +851,168 @@ MainWindow - - - Default - Standard - - - + Choose a directory Verzeichnis wählen - + Select one or more files to open Dateien hinzufügen - + &Play &Wiedergabe - + X X - + &Pause &Pause - + C C - + &Stop &Stopp - + V V - + &Previous &Vorheriger Titel - + Z Z - + &Next &Nächster Titel - + B B - + &Jump To File Springe zu &Titel - + J J - + &Settings &Einstellungen - + Ctrl+P Strg+P - + &About Ü&ber - + &Exit Be&enden - + Ctrl+Q Strg+Q - - + + Playlist Files Wiedergabelisten - + Open Playlist Wiedergabeliste öffnen - + Save Playlist Wiedergabeliste speichern - + Space Leertaste - + &About Qt Übe&r Qt - + &Play/Pause Wieder&gabe/Pause - + All Supported Bitstreams Alle unterstützten Formate - + &Repeat Track Tite&l wiederholen - + &Shuffle &Zufallswiedergabe - + R R - + Ctrl+R Strg+R - + S S - + &Repeat Playlist W&iedergabeliste wiederholen - + Tools Werkzeuge @@ -1026,194 +1020,209 @@ PlayList - + &Add File &Datei hinzufügen - + F F - + &Add Directory &Verzeichnis hinzufügen - + D D - + &Remove Selected &Ausgewählte entfernen - + Del Entf - + &Remove All Alle &entfernen - + &Remove Unselected &Nicht ausgewählte entfernen - + Remove unavailable files Nichtverfügbare Dateien entfernen - + &View Track Details &Titeldetails anzeigen - + Alt+I Alt+I - + Sort List Wiedergabeliste sortieren - - + + By Title Nach Titel - - + + By Album - - + + By Artist - - + + By Filename Nach Dateinamen - - + + By Path + Filename Nach Pfad + Dateinamen - - + + By Date Nach Datum - + Sort Selection Auswahl sortieren - + Randomize List Wiedergabeliste mischen - + Reverse List Wiedergabeliste umkehren - + Invert Selection Auswahl umkehren - + &Select None &Auswahl aufheben - + + Shift+A + + + + &Select All Alle aus&wählen - + Ctrl+A Strg+A - + &New List &Neue Wiedergabeliste - + Shift+N Umschalt+N - + + &Delete List + + + + + Shift+D + + + + &Load List Wiedergabeliste &laden - + O O - + &Save List Wiedergabeliste &speichern - + Shift+S Umschalt+S - + &Add Url &URL hinzufügen - + U U - - + + By Track Number Nach Titelnummer - + &Queue &Warteschlange - + Q Q - + Actions Aktionen 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 @@ JumpToTrackDialog - + Unqueue Elimna dalla coda - + Queue Metti in coda @@ -851,174 +851,168 @@ MainWindow - - - Default - Défault - - - + Choose a directory Scegliere una cartella - + Select one or more files to open Seleziona uno o più brani da aprire - + &Play &Esegui - + X X - + &Pause &Pausa - + C C - + &Stop &Arresta - + V V - + &Previous &Precedente - + Z Z - + &Next &Successivo - + B B - + &Jump To File &Vai al brano - + J J - + &Settings &Configurazione - + Ctrl+P Ctrl+P - + &Exit &Esci - + Ctrl+Q Ctrl+Q - + Open Playlist Apri lista di brani - + Save Playlist Salva lista di brani - + &About &Informazioni - - + + Playlist Files Brani della lista - + Space Spazio - + &About Qt &Informazioni su Qt - + &Play/Pause &Esegui / Pausa - + All Supported Bitstreams Elenco di tutti i tipi di flusso accettati - + &Repeat Track &Ripeti brano - + &Shuffle &Ordine casuale - + R R - + Ctrl+R Ctrl+R - + S S - + &Repeat Playlist &Ripeti lista brani - + Tools Strumenti @@ -1026,194 +1020,209 @@ PlayList - + F F - + D D - + Alt+I Alt+I - + Ctrl+A Ctrl+A - + O O - + &Add File &Aggiungi brani - + &Add Directory &Aggiungi cartelle - + &Remove Selected &Elimina la selezione - + &Remove All &Elimina tutto - + &Remove Unselected &Elimina i non selezionati - + Remove unavailable files Rimuovi files non disponibili - + &View Track Details &Dettagli della traccia - + Sort List Riordina la lista - - + + By Title Per titolo - - + + By Album - - + + By Artist - - + + By Filename Per titolo del brano - - + + By Path + Filename per percorso più titolo del brano - - + + By Date Per data - + Sort Selection Riordina la selezione - + Randomize List Mescola i brnai della lista - + Reverse List Inverti la lista - + Invert Selection Inverti la selezione - + &Select None &Non scegliere alcun brano - + + Shift+A + + + + &Select All &Seleziona tutto - + &New List &Nuova lista - + Shift+N Shift+N - + + &Delete List + + + + + Shift+D + + + + &Load List &Carica lista - + &Save List &Salva lista - + Shift+S Shift+S - + Del Canc - + &Add Url &Aggiungi URL - + U U - - + + By Track Number Per numero di traccia - + &Queue &Metti in coda - + Q Q - + Actions Azioni 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 @@ JumpToTrackDialog - + Unqueue Pašalinti iš eilės - + Queue Į eilę @@ -851,174 +851,168 @@ MainWindow - - - Default - - - - + Choose a directory Pasirinkite aplanką - + Select one or more files to open Pasirinkite vieną ar kelias bylas atvėrimui - + &Play &Groti - + X - + &Pause &Pristabdyti - + C - + &Stop &Sustabdyti - + V - + &Previous &Ankstesnis - + Z - + &Next &Sekantis - + B - + &Jump To File &Pereiti prie bylos - + J - + &Settings &Nustatymai - + Ctrl+P - + &Exit &Išeiti - + Ctrl+Q - + Open Playlist Atverti grojaraštį - + Save Playlist Išsaugoti grojaraštį - + &About &Apie - - + + Playlist Files Grojaraščio bylos - + Space - + &About Qt &Apie Qt - + &Play/Pause &Groti/Pristabdyti - + All Supported Bitstreams Palaikomi bylų tipai - + &Repeat Track &Kartoti takelį - + &Shuffle &Atsitiktine tvarka - + R - + Ctrl+R - + S - + &Repeat Playlist &Kartoti grojaraštį - + Tools Įrankiai @@ -1026,194 +1020,209 @@ PlayList - + F - + D - + Alt+I - + Ctrl+A - + O - + &Add File &Pridėti bylą - + &Add Directory &Pridėti aplanką - + &Remove Selected &Pašalinti pasirinktus - + &Remove All &Pašalinti visus - + &Remove Unselected &Pašalinti NEpasirinktus - + Remove unavailable files - + &View Track Details &Takelio informacija - + Sort List Rūšiuoti - - + + By Title Pagal dainos pavadinimą - - + + By Album - - + + By Artist - - + + By Filename Pagal bylos pavadinimą - - + + By Path + Filename Pagal kelią iki bylos - - + + By Date Pagal datą - + Sort Selection Rūšiuoti pasirinktus - + Randomize List Sumaišyti sąrašą - + Reverse List Apversti - + Invert Selection Atšaukti pasirinkimą - + &Select None &Nepasirinkti nei vieno - + + Shift+A + + + + &Select All &Pasirinkti visus - + &New List &Naujas sąrašas - + Shift+N - + + &Delete List + + + + + Shift+D + + + + &Load List &Įkelti sąrašą - + &Save List &Išsaugoti sąrašą - + Shift+S - + Del - + &Add Url &Pridėti interneto adresą - + U - - + + By Track Number Pagal takelio numerį - + &Queue &Į eilę - + Q - + Actions Veiksmai 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 @@ JumpToTrackDialog - + Unqueue Wykolejkuj - + Queue Kolejkuj @@ -851,174 +851,168 @@ MainWindow - - - Default - Domyślne - - - + Choose a directory Wybierz katalog - + Select one or more files to open Wybierz jeden lub więcej plików do otwarcia - + &Play &Odtwarzaj - + X X - + &Pause &Wstrzymaj - + C C - + &Stop &Zatrzymaj - + V V - + &Previous &Poprzedni - + Z Z - + &Next &Następny - + B B - + &Jump To File &Skocz do pliku - + J J - + &Settings &Ustawienia - + Ctrl+P Ctrl+P - + &Exit &Wyjście - + Ctrl+Q Ctrl+Q - + Open Playlist Otwórz listę odtwarzania - + Save Playlist Zapisz listę odtwarzania - + &About &O programie - - + + Playlist Files Pliki listy odtwarzania - + Space - + &About Qt &O Qt - + &Play/Pause &Odtwarzaj/Wstrzymaj - + All Supported Bitstreams Wszystkie wspierane formaty - + &Repeat Track &Powtórz utwór - + &Shuffle &Losowo - + R - + Ctrl+R - + S - + &Repeat Playlist Powtó&rz listę odtwarzania - + Tools Narzędzia @@ -1026,194 +1020,209 @@ PlayList - + F F - + D D - + Alt+I Alt+I - + Ctrl+A Ctrl+A - + O O - + &Add File &Dodaj plik - + &Add Directory Dodaj &katalog - + &Remove Selected &Usuń zaznaczone - + &Remove All Usuń &wszystkie - + &Remove Unselected Usuń &niezaznaczone - + Remove unavailable files Usuń niedostępne pliki - + &View Track Details &Pokaż informacje o pliku - + Sort List Sortuj listę - - + + By Title Według nazwy - - + + By Album - - + + By Artist - - + + By Filename Według nazwy pliku - - + + By Path + Filename Według Ścieżki + Nazwy pliku - - + + By Date Wg Daty - + Sort Selection Sortuj zaznaczone - + Randomize List Tasuj listę - + Reverse List Odwróć listę - + Invert Selection Odwróć zaznaczenie - + &Select None &Odznacz wszystkie - + + Shift+A + + + + &Select All &Zaznacz wszystkie - + &New List &Nowa lista - + Shift+N Shift+N - + + &Delete List + + + + + Shift+D + + + + &Load List &Ładuj listę - + &Save List &Zapisz listę - + Shift+S Shift+S - + Del Del - + &Add Url Dod&aj Url - + U U - - + + By Track Number Wg numeru utworu - + &Queue &Kolejkuj - + Q Q - + Actions Akcje 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 @@ JumpToTrackDialog - + Unqueue Sem Faixa na Fila - + Queue Faixa na Fila @@ -851,174 +851,168 @@ MainWindow - - - Default - Padrão - - - + Choose a directory Escolher o diretorio - + Select one or more files to open Selecionar um ou mais arquivos - + &Play Tocar - + X - + &Pause Pausar - + C - + &Stop Parar - + V - + &Previous Anterior - + Z - + &Next Próximo - + B - + &Jump To File Pular para arquivo - + J - + &Settings Configurações - + Ctrl+P - + &Exit Sair - + Ctrl+Q - + Open Playlist Abrir Playlist - + Save Playlist Salvar Playlist - + &About &Sobre - - + + Playlist Files ФArquivos de lista de músicas - + Space - + &About Qt - + &Play/Pause - + All Supported Bitstreams - + &Repeat Track - + &Shuffle - + R - + Ctrl+R - + S - + &Repeat Playlist - + Tools @@ -1026,194 +1020,209 @@ PlayList - + F - + D - + Alt+I - + Ctrl+A - + O - + &Add File &Adicionar arquivo - + &Add Directory &Adicionar Diretorio - + &Remove Selected &Remover selecionadas - + &Remove All &Remover tudo - + &Remove Unselected &Remover não selecionadas - + Remove unavailable files - + &View Track Details &Ver detalhes da Faixa - + Sort List Classificar lista - - + + By Title Por Título - - + + By Album - - + + By Artist - - + + By Filename Por Nome - - + + By Path + Filename Por Dirertório + Nome - - + + By Date Por Data - + Sort Selection Classificar por Seleção - + Randomize List Lista Eleatória - + Reverse List Lista Revertida - + Invert Selection Inverter Seleção - + &Select None &Nenhum selecionado - + + Shift+A + + + + &Select All &Selecionar tudo - + &New List &Nova lista - + Shift+N - + + &Delete List + + + + + Shift+D + + + + &Load List &Carregar lista - + &Save List &Salvar lista - + Shift+S - + Del - + &Add Url - + U - - + + By Track Number - + &Queue Na fila - + Q - + Actions 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 @@ JumpToTrackDialog - + Unqueue Снять с очереди - + Queue В очередь @@ -851,174 +851,168 @@ MainWindow - - - Default - - - - + Choose a directory Выберите директорию - + Select one or more files to open Выберите один или несколько файлов - + &Play &Воспроизвести - + X - + &Pause &Приостановить - + C - + &Stop &Стоп - + V - + &Previous &Предыдущий фрагмент - + Z - + &Next &Следующий фрагмент - + B - + &Jump To File &Перейти к файлу - + J - + &Settings &Настройки - + Ctrl+P - + &Exit &Выход - + Ctrl+Q - + Open Playlist Открыть список - + Save Playlist Сохранить список - + &About &О программе - - + + Playlist Files Файлы списков - + Space - + &About Qt &О библиотеке Qt - + &Play/Pause &Воспр/приост - + All Supported Bitstreams Все форматы - + &Repeat Track &Повторять трек - + &Shuffle &В случайном порядке - + R - + Ctrl+R - + S - + &Repeat Playlist &Повторять список - + Tools Сервис @@ -1026,194 +1020,209 @@ PlayList - + F - + D - + Alt+I - + Ctrl+A - + O - + &Add File &Добавить файл - + &Add Directory &Добавить директорию - + &Remove Selected &Удалить выделенное - + &Remove All &Удалить всё - + &Remove Unselected &Удалить невыделенное - + Remove unavailable files Удалить недоступные файлы - + &View Track Details &Информация - + Sort List Сортировать - - + + By Title По названию - - + + By Album По альбому - - + + By Artist По исполнителю - - + + By Filename По имени файла - - + + By Path + Filename По пути и файлу - - + + By Date По дате - + Sort Selection Сортировать выделенное - + Randomize List Перемешать - + Reverse List Перевернуть - + Invert Selection Инвертировать выделение - + &Select None &Снять выделение - + + Shift+A + + + + &Select All &Выделить всё - + &New List &Новый лист - + Shift+N - + + &Delete List + + + + + Shift+D + + + + &Load List &Загрузить лист - + &Save List &Сохранить лист - + Shift+S - + Del - + &Add Url &Добавить URL - + U - - + + By Track Number По номеру трека - + &Queue &В очередь - + Q - + Actions Действия 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 @@ JumpToTrackDialog - + Unqueue Kuyrukta Değil - + Queue Kuyruk @@ -851,174 +851,168 @@ MainWindow - - - Default - Öntanımlı - - - + Choose a directory Bir dizin seçin - + Select one or more files to open Açmak için bir yada daha çok dosya seçin - + &Play &Çal - + X X - + &Pause &Duraklat - + C C - + &Stop &Durdur - + V V - + &Previous &Önceki - + Z Z - + &Next &Sonraki - + B B - + &Jump To File &Parçaya Git - + J J - + &Settings &Ayarlar - + Ctrl+P Ctrl+P - + &Exit &Çıkış - + Ctrl+Q Ctrl+Q - + Open Playlist Çalma Listesini Aç - + Save Playlist Çalma Listesini Kaydet - + &About &Hakkında - - + + Playlist Files Çalma Listesi Dosyaları - + Space Boşluk - + &About Qt &Qt Hakkında - + &Play/Pause &Oynat/Duraklat - + All Supported Bitstreams Tüm Desteklenen Bitstreamler - + &Repeat Track &Parçayı Yinele - + &Shuffle &Rastgele - + R R - + Ctrl+R Ctrl+R - + S S - + &Repeat Playlist &Çalma Listesini Yinele - + Tools Araçlar @@ -1026,194 +1020,209 @@ PlayList - + F F - + D D - + Alt+I Alt+I - + Ctrl+A Ctrl+A - + O O - + &Add File &Dosya Ekle - + &Add Directory &Dizin Ekle - + &Remove Selected &Seçileni Kaldır - + &Remove All &Hepsini Kaldır - + &Remove Unselected &Seçilmemişleri Kaldır - + Remove unavailable files - + &View Track Details &Parça Detaylarını Göster - + Sort List Listeyi Sınıflandır - - + + By Title Başlığa Göre - - + + By Album - - + + By Artist - - + + By Filename Dosya Adına Göre - - + + By Path + Filename Dosya Yolu + Dosya Adına Göre - - + + By Date Tarihe Göre - + Sort Selection Seçilenleri Sınıflandır - + Randomize List Rastgele Listele - + Reverse List Listeyi Ters Çevir - + Invert Selection Seçimi Tersine Çevir - + &Select None &Hiçbirini Seçme - + + Shift+A + + + + &Select All &Tümünü Seç - + &New List &Yeni Liste - + Shift+N Shift+N - + + &Delete List + + + + + Shift+D + + + + &Load List &Liste Yükle - + &Save List &Listeyi Kaydet - + Shift+S Shift+S - + Del Del - + &Add Url &Url Ekle - + U U - - + + By Track Number Parça Numarasına Göre - + &Queue &Kuyruğa ekle - + Q Q - + Actions Eylemler 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 @@ JumpToTrackDialog - + Unqueue Зняти з черги - + Queue В чергу @@ -851,174 +851,168 @@ MainWindow - - - Default - За умовчанням - - - + Choose a directory Виберіть теку - + Select one or more files to open Виберіть один чи кілька файлів - + &Play &Відтворити - + X - + &Pause &Пауза - + C - + &Stop &Стоп - + V - + &Previous &Назад - + Z - + &Next &Вперед - + B - + &Jump To File &Перейти до файлу - + J - + &Settings &Налаштування - + Ctrl+P - + &Exit &Вихід - + Ctrl+Q - + Open Playlist Відкрити список - + Save Playlist Зберегти список - + &About &Про програму - - + + Playlist Files Файли списків - + Space - + &About Qt &Про Qt - + &Play/Pause &Грати/Пауза - + All Supported Bitstreams Усі формати - + &Repeat Track &Повторити трек - + &Shuffle &Перемішати - + R - + Ctrl+R - + S - + &Repeat Playlist &Повторити список - + Tools Утиліти @@ -1026,194 +1020,209 @@ PlayList - + F - + D - + Alt+I - + Ctrl+A - + O - + &Add File &Додати файл - + &Add Directory &Додати теку - + &Remove Selected &Видалити вибране - + &Remove All &Видалити все - + &Remove Unselected &Видалити не вибране - + Remove unavailable files Видалити недоступні файли - + &View Track Details &Інформація - + Sort List Сортувати - - + + By Title За назвою - - + + By Album За альбомом - - + + By Artist За артистом - - + + By Filename За ім'ям файлу - - + + By Path + Filename За шляхом та файлом - - + + By Date За датою - + Sort Selection Сортувати вибране - + Randomize List Перемішати - + Reverse List Перевернути - + Invert Selection Інвертувати вибране - + &Select None &Зняти виділення - + + Shift+A + + + + &Select All &Вибрати все - + &New List &Новий список - + Shift+N - + + &Delete List + + + + + Shift+D + + + + &Load List &Завантажити список - + &Save List &Зберегти список - + Shift+S - + Del - + &Add Url &Додати адресу - + U - - + + By Track Number - + &Queue &В чергу - + Q - + Actions Дії 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 @@ JumpToTrackDialog - + Unqueue 移出队列 - + Queue 加入队列 @@ -851,174 +851,168 @@ MainWindow - - - Default - 默认 - - - + Choose a directory 选择一个目录 - + Select one or more files to open 选择打开一个或更多文件 - + &Play 播放(&P) - + X X - + &Pause 暂停(&P) - + C C - + &Stop 停止(&S) - + V V - + &Previous 上一曲(&P) - + Z Z - + &Next 下一曲(&N) - + B B - + &Jump To File 跳到文件(&J) - + J J - + &Settings 设置(&S) - + Ctrl+P Ctrl+P - + &Exit 退出(&E) - + Ctrl+Q Ctrl+Q - + Open Playlist 打开播放列表 - + Save Playlist 保存播放列表 - + &About 关于(&A) - - + + Playlist Files 播放列表文件 - + Space 空格 - + &About Qt 关于 Qt (&A) - + &Play/Pause 播放/暂停(&P) - + All Supported Bitstreams 支持的全部文件 - + &Repeat Track 重复音轨(&R) - + &Shuffle 乱序(&S) - + R R - + Ctrl+R Ctrl+R - + S S - + &Repeat Playlist 重复播放列表(&R) - + Tools 工具 @@ -1026,194 +1020,209 @@ PlayList - + F F - + D D - + Alt+I Alt+I - + Ctrl+A Ctrl+A - + O O - + &Add File 添加文件(&A) - + &Add Directory 添加文件夹(&A) - + &Remove Selected 删除所选(&R) - + &Remove All 删除全部(&R) - + &Remove Unselected 删除未选(&R) - + Remove unavailable files - + &View Track Details 查看音轨详细信息(&V) - + Sort List 列表排序 - - + + By Title 按标题 - - + + By Album - - + + By Artist - - + + By Filename 按文件名 - - + + By Path + Filename 按路径+文件名 - - + + By Date 按日期 - + Sort Selection 选择排序 - + Randomize List 随机产生列表 - + Reverse List 逆序列表 - + Invert Selection 反选 - + &Select None 无选择(&S) - + + Shift+A + + + + &Select All 选择全部(&S) - + &New List 新建列表(&N) - + Shift+N Shift+N - + + &Delete List + + + + + Shift+D + + + + &Load List 载入列表(&L) - + &Save List 保存列表(&S) - + Shift+S Shift+S - + Del Del - + &Add Url 添加 URL (&A) - + U U - - + + By Track Number 按音轨 - + &Queue 队列(&Q) - + Q Q - + Actions 动作 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 @@ JumpToTrackDialog - + Unqueue 移出佇列 - + Queue 加入佇列 @@ -851,174 +851,168 @@ MainWindow - - - Default - 預設 - - - + Choose a directory 選取一個目錄 - + Select one or more files to open 選取開啟一個或更多檔案 - + &Play 播放(&P) - + X X - + &Pause 暫停(&P) - + C C - + &Stop 停止(&S) - + V V - + &Previous 上一曲(&P) - + Z Z - + &Next 下一曲(&N) - + B B - + &Jump To File 跳到檔案(&J) - + J J - + &Settings 設定(&S) - + Ctrl+P Ctrl+P - + &Exit 結束(&E) - + Ctrl+Q Ctrl+Q - + Open Playlist 開啟播放清單 - + Save Playlist 儲存播放清單 - + &About 關於(&A) - - + + Playlist Files 播放清單檔案 - + Space 空格 - + &About Qt 關於 Qt (&A) - + &Play/Pause 播放/暫停(&P) - + All Supported Bitstreams 支援的全部檔案 - + &Repeat Track 重復音軌(&R) - + &Shuffle 亂序(&S) - + R R - + Ctrl+R Ctrl+R - + S S - + &Repeat Playlist 重復播放清單(&R) - + Tools 工具 @@ -1026,194 +1020,209 @@ PlayList - + F F - + D D - + Alt+I Alt+I - + Ctrl+A Ctrl+A - + O O - + &Add File 添加檔案(&A) - + &Add Directory 添加檔案夾(&A) - + &Remove Selected 移除所選(&R) - + &Remove All 移除全部(&R) - + &Remove Unselected 移除未選(&R) - + Remove unavailable files - + &View Track Details 檢視音軌詳細資訊(&V) - + Sort List 清單排序 - - + + By Title 按標題 - - + + By Album - - + + By Artist - - + + By Filename 按檔名 - - + + By Path + Filename 按路徑+檔名 - - + + By Date 按日期 - + Sort Selection 選取排序 - + Randomize List 隨機產生清單 - + Reverse List 逆串列表 - + Invert Selection 反選 - + &Select None 無選取(&S) - + + Shift+A + + + + &Select All 選取全部(&S) - + &New List 新建清單(&N) - + Shift+N Shift+N - + + &Delete List + + + + + Shift+D + + + + &Load List 載入清單(&L) - + &Save List 儲存清單(&S) - + Shift+S Shift+S - + Del Del - + &Add Url 添加 URL (&A) - + U U - - + + By Track Number 按音軌 - + &Queue 佇列(&Q) - + Q Q - + Actions 動作 -- cgit v1.2.3-13-gbd6f