aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Ui/skinned/jumptotrackdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Ui/skinned/jumptotrackdialog.cpp')
-rw-r--r--src/plugins/Ui/skinned/jumptotrackdialog.cpp138
1 files changed, 138 insertions, 0 deletions
diff --git a/src/plugins/Ui/skinned/jumptotrackdialog.cpp b/src/plugins/Ui/skinned/jumptotrackdialog.cpp
new file mode 100644
index 000000000..d9df0bb75
--- /dev/null
+++ b/src/plugins/Ui/skinned/jumptotrackdialog.cpp
@@ -0,0 +1,138 @@
+/***************************************************************************
+ * Copyright (C) 2007-2010 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 "jumptotrackdialog.h"
+#include <qmmpui/playlistmanager.h>
+#include <QAction>
+#include <QStringListModel>
+#include <QSortFilterProxyModel>
+#include <QShortcut>
+#include <QKeySequence>
+
+JumpToTrackDialog::JumpToTrackDialog(PlayListManager *manager, QWidget* parent)
+ : QDialog (parent)
+{
+ setupUi(this);
+ setAttribute(Qt::WA_QuitOnClose, false);
+ m_pl_manager = manager;
+ m_listModel = new QStringListModel(this);
+
+ m_proxyModel = new QSortFilterProxyModel;
+ m_proxyModel->setDynamicSortFilter(true);
+ m_proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
+ m_proxyModel->setSourceModel(m_listModel);
+ songsListView->setModel(m_proxyModel);
+
+ connect(songsListView,SIGNAL(doubleClicked(const QModelIndex &)),
+ this,SLOT(jumpTo(const QModelIndex&)));
+ connect(songsListView,SIGNAL(activated(const QModelIndex &)),
+ this,SLOT(jumpTo(const QModelIndex&)));
+ connect(songsListView,SIGNAL(activated(const QModelIndex &)),
+ this,SLOT(accept()));
+ connect(songsListView->selectionModel(),
+ SIGNAL(currentRowChanged(const QModelIndex&,const QModelIndex&)),
+ this,SLOT(queueUnqueue(const QModelIndex&,const QModelIndex&)));
+
+ new QShortcut(tr("Q"),this,SLOT(on_queuePushButton_clicked()));
+ new QShortcut(tr("J"),this,SLOT(on_jumpToPushButton_clicked()));
+ new QShortcut(tr("F5"),this,SLOT(on_refreshPushButton_clicked()));
+
+ QAction *selectSongViewAction = new QAction(filterLineEdit);
+ selectSongViewAction->setShortcut(Qt::Key_Down);
+ selectSongViewAction->setShortcutContext(Qt::WidgetShortcut);
+ filterLineEdit->addAction(selectSongViewAction);
+ connect(selectSongViewAction, SIGNAL(triggered()),songsListView, SLOT(setFocus()));
+ //setup icons
+ refreshPushButton->setIcon(QIcon::fromTheme("view-refresh"));
+ jumpToPushButton->setIcon(QIcon::fromTheme("go-top"));
+}
+
+JumpToTrackDialog::~JumpToTrackDialog()
+{
+}
+
+void JumpToTrackDialog::on_refreshPushButton_clicked()
+{
+ refresh();
+}
+
+void JumpToTrackDialog::on_queuePushButton_clicked()
+{
+ QModelIndexList mi_list = songsListView->selectionModel()->selectedRows();
+ if (!mi_list.isEmpty())
+ {
+ int selected = (m_proxyModel->mapToSource(mi_list.at(0))).row();
+ 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"));
+ }
+}
+
+void JumpToTrackDialog::on_jumpToPushButton_clicked()
+{
+ QModelIndexList mi_list = songsListView->selectionModel()->selectedRows();
+ if (!mi_list.isEmpty())
+ {
+ jumpTo(mi_list.at(0));
+ }
+}
+
+void JumpToTrackDialog::refresh()
+{
+ filterLineEdit->clear();
+ QStringList titles = m_pl_manager->selectedPlayList()->getTitles(0, m_pl_manager->selectedPlayList()->count());
+ m_listModel->setStringList(titles);
+ filterLineEdit->setFocus();
+}
+
+void JumpToTrackDialog::on_filterLineEdit_textChanged(const QString &str)
+{
+ m_proxyModel->setFilterFixedString(str);
+ if (m_proxyModel->hasIndex(0,0))
+ songsListView->setCurrentIndex (m_proxyModel->index (0,0));
+}
+
+void JumpToTrackDialog::on_filterLineEdit_returnPressed ()
+{
+ QModelIndexList mi_list = songsListView->selectionModel()->selectedRows();
+ if (!mi_list.isEmpty())
+ {
+ jumpTo(mi_list.at(0));
+ accept();
+ }
+}
+
+void JumpToTrackDialog::jumpTo(const QModelIndex & index)
+{
+ int selected = (m_proxyModel->mapToSource(index)).row();
+ 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_pl_manager->selectedPlayList()->isQueued(m_pl_manager->selectedPlayList()->item(row)))
+ queuePushButton->setText(tr("Unqueue"));
+ else
+ queuePushButton->setText(tr("Queue"));
+}