aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Ui/qsui/playlistbrowser.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-08-11 09:08:12 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-08-11 09:08:12 +0000
commit017d2d27bfbcd97ada407212e925b280ff3482b5 (patch)
tree2a832873a52ee7c8546b6262be58f41d1bdd480e /src/plugins/Ui/qsui/playlistbrowser.cpp
parent22cf3c55368be9361b43eb002e7a2fb7f2868ac2 (diff)
downloadqmmp-017d2d27bfbcd97ada407212e925b280ff3482b5.tar.gz
qmmp-017d2d27bfbcd97ada407212e925b280ff3482b5.tar.bz2
qmmp-017d2d27bfbcd97ada407212e925b280ff3482b5.zip
added qsui plugin
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@5367 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Ui/qsui/playlistbrowser.cpp')
-rw-r--r--src/plugins/Ui/qsui/playlistbrowser.cpp156
1 files changed, 156 insertions, 0 deletions
diff --git a/src/plugins/Ui/qsui/playlistbrowser.cpp b/src/plugins/Ui/qsui/playlistbrowser.cpp
new file mode 100644
index 000000000..447b723a9
--- /dev/null
+++ b/src/plugins/Ui/qsui/playlistbrowser.cpp
@@ -0,0 +1,156 @@
+/***************************************************************************
+ * Copyright (C) 2009-2013 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., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include <QAction>
+#include <QApplication>
+#include <QStyle>
+#include <QKeyEvent>
+#include <QStandardItemModel>
+#include <QSortFilterProxyModel>
+#include <QListView>
+#include <QLineEdit>
+#include <QVBoxLayout>
+#include <qmmpui/playlistmanager.h>
+#include "actionmanager.h"
+#include "playlistbrowser.h"
+
+PlayListBrowser::PlayListBrowser(PlayListManager *manager, QWidget *parent) : QWidget(parent)
+{
+ m_lineEdit = new QLineEdit(this);
+ m_lineEdit->installEventFilter(this);
+ m_lineEdit->setContentsMargins(5,5,5,0);
+ m_listView = new QListView(this);
+ m_listView->setFrameStyle(QFrame::NoFrame);
+ m_listView->setEditTriggers(QAbstractItemView::NoEditTriggers);
+ m_listView->installEventFilter(this);
+
+ QVBoxLayout *layout = new QVBoxLayout();
+ layout->setContentsMargins(0,0,0,0);
+ layout->addWidget(m_lineEdit);
+ layout->addWidget(m_listView);
+ setLayout(layout);
+
+ m_pl_manager = manager;
+ connect(m_pl_manager, SIGNAL(playListsChanged()), SLOT(updateList()));
+ //actions
+ m_listView->setContextMenuPolicy(Qt::ActionsContextMenu);
+ m_listView->addAction(ACTION(ActionManager::PL_RENAME));
+ m_listView->addAction(ACTION(ActionManager::PL_CLOSE));
+
+ m_listModel = new QStandardItemModel(this);
+ m_proxyModel = new QSortFilterProxyModel(this);
+ m_proxyModel->setDynamicSortFilter(true);
+ m_proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
+ m_proxyModel->setSourceModel(m_listModel);
+ m_listView->setModel(m_proxyModel);
+ connect(m_lineEdit, SIGNAL(textChanged(QString)), SLOT(onLineEditTextChanged(QString)));
+ connect(m_listView, SIGNAL(activated(QModelIndex)), SLOT(onListViewActivated(QModelIndex)));
+ connect(m_listView->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),
+ SLOT(updateCurrentRow(QModelIndex,QModelIndex)));
+ updateList();
+}
+
+PlayListBrowser::~PlayListBrowser()
+{}
+
+void PlayListBrowser::updateList()
+{
+ m_listView->selectionModel()->blockSignals(true);
+ m_listModel->clear();
+ foreach(PlayListModel *model, m_pl_manager->playLists())
+ {
+ QStandardItem *item = new QStandardItem(model->name());
+ if(m_pl_manager->currentPlayList() == model)
+ {
+ QFont font = item->font();
+ font.setBold(true);
+ item->setFont(font);
+ }
+ m_listModel->appendRow(item);
+ if(m_pl_manager->selectedPlayList() == model)
+ {
+ m_listView->setCurrentIndex(m_proxyModel->mapFromSource(m_listModel->indexFromItem(item)));
+ }
+ }
+ m_listView->selectionModel()->blockSignals(false);
+}
+
+void PlayListBrowser::onLineEditTextChanged(const QString &str)
+{
+ m_listView->selectionModel()->blockSignals(true);
+ m_proxyModel->setFilterFixedString(str);
+ m_listView->selectionModel()->blockSignals(false);
+}
+
+void PlayListBrowser::onListViewActivated(const QModelIndex &index)
+{
+ int row = m_proxyModel->mapToSource(index).row();
+ if(row >= 0)
+ {
+ m_pl_manager->activatePlayList(row);
+ m_pl_manager->selectPlayList(row);
+ }
+}
+
+void PlayListBrowser::updateCurrentRow(QModelIndex index, QModelIndex)
+{
+ int row = m_proxyModel->mapToSource(index).row();
+ if(row >= 0)
+ m_pl_manager->selectPlayList(row);
+}
+
+bool PlayListBrowser::eventFilter(QObject *o, QEvent *e)
+{
+ if((o == m_lineEdit || o == m_listView) && e->type() == QEvent::ShortcutOverride)
+ {
+ e->accept();
+ return false;
+ }
+
+ if(o == m_lineEdit && e->type() == QEvent::KeyPress)
+ {
+ QKeyEvent *key_event = static_cast<QKeyEvent *>(e);
+ QModelIndex index = m_listView->currentIndex();
+ bool select_first = false;
+ if(!index.isValid() && m_proxyModel->rowCount())
+ {
+ select_first = true;
+ index = m_proxyModel->index(0,0);
+ }
+
+ if(key_event->key() == Qt::Key_Up)
+ {
+ if(!select_first)
+ index = m_proxyModel->index(index.row() - 1, index.column());
+ if(index.isValid())
+ m_listView->setCurrentIndex(index);
+ return true;
+ }
+ else if(key_event->key() == Qt::Key_Down)
+ {
+ if(!select_first)
+ index = m_proxyModel->index(index.row() + 1, index.column());
+ if(index.isValid())
+ m_listView->setCurrentIndex(index);
+ return true;
+ }
+ }
+ return QWidget::eventFilter(o, e);
+}