aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2013-11-12 11:47:25 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2013-11-12 11:47:25 +0000
commit27de65360c5cec6940d634af4fc6332f49321bdf (patch)
tree80a39e78dc937cb9559ed933d6efe61b28c0279d /src
parenteb7437c37308c6b31155a60aea2dce6325ff131c (diff)
downloadqmmp-27de65360c5cec6940d634af4fc6332f49321bdf.tar.gz
qmmp-27de65360c5cec6940d634af4fc6332f49321bdf.tar.bz2
qmmp-27de65360c5cec6940d634af4fc6332f49321bdf.zip
improved 'jump to track' dialog
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@3890 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
-rw-r--r--src/qmmpui/forms/jumptotrackdialog.ui8
-rw-r--r--src/qmmpui/jumptotrackdialog.cpp72
-rw-r--r--src/qmmpui/jumptotrackdialog_p.h6
3 files changed, 60 insertions, 26 deletions
diff --git a/src/qmmpui/forms/jumptotrackdialog.ui b/src/qmmpui/forms/jumptotrackdialog.ui
index e911ac758..8b5d9696f 100644
--- a/src/qmmpui/forms/jumptotrackdialog.ui
+++ b/src/qmmpui/forms/jumptotrackdialog.ui
@@ -114,6 +114,14 @@
</item>
</layout>
</widget>
+ <tabstops>
+ <tabstop>filterLineEdit</tabstop>
+ <tabstop>songsListView</tabstop>
+ <tabstop>queuePushButton</tabstop>
+ <tabstop>refreshPushButton</tabstop>
+ <tabstop>jumpToPushButton</tabstop>
+ <tabstop>buttonBox</tabstop>
+ </tabstops>
<resources/>
<connections>
<connection>
diff --git a/src/qmmpui/jumptotrackdialog.cpp b/src/qmmpui/jumptotrackdialog.cpp
index 4455c952a..c4e19f683 100644
--- a/src/qmmpui/jumptotrackdialog.cpp
+++ b/src/qmmpui/jumptotrackdialog.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2007-2012 by Ilya Kotov *
+ * Copyright (C) 2007-2013 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -23,6 +23,8 @@
#include "mediaplayer.h"
#include <qmmp/soundcore.h>
#include <QAction>
+#include <QEvent>
+#include <QKeyEvent>
#include <QStringListModel>
#include <QSortFilterProxyModel>
#include <QShortcut>
@@ -60,11 +62,10 @@ JumpToTrackDialog::JumpToTrackDialog(PlayListModel *model, QWidget* parent)
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()));
+ filterLineEdit->installEventFilter(this);
+ connect(filterLineEdit, SIGNAL(textChanged(QString)),
+ m_proxyModel, SLOT(setFilterFixedString(QString)));
+
//setup icons
refreshPushButton->setIcon(QIcon::fromTheme("view-refresh"));
jumpToPushButton->setIcon(QIcon::fromTheme("go-top"));
@@ -119,23 +120,6 @@ void JumpToTrackDialog::refresh()
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();
@@ -155,3 +139,45 @@ void JumpToTrackDialog::queueUnqueue(const QModelIndex& curr,const QModelIndex&)
else
queuePushButton->setText(tr("Queue"));
}
+
+bool JumpToTrackDialog::eventFilter(QObject *o, QEvent *e)
+{
+ if(o == filterLineEdit && e->type() == QEvent::KeyPress)
+ {
+ QKeyEvent *key_event = static_cast<QKeyEvent *>(e);
+ QModelIndex index = songsListView->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())
+ songsListView->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())
+ songsListView->setCurrentIndex(index);
+ return true;
+ }
+ else if(key_event->key() == Qt::Key_Return)
+ {
+ if(index.isValid())
+ {
+ jumpTo(index);
+ accept();
+ }
+ return true;
+ }
+ }
+ return QDialog::eventFilter(o, e);
+}
diff --git a/src/qmmpui/jumptotrackdialog_p.h b/src/qmmpui/jumptotrackdialog_p.h
index 915f1197a..e541866f5 100644
--- a/src/qmmpui/jumptotrackdialog_p.h
+++ b/src/qmmpui/jumptotrackdialog_p.h
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2007-2012 by Ilya Kotov *
+ * Copyright (C) 2007-2013 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -27,6 +27,7 @@
class QStringListModel;
class QSortFilterProxyModel;
+class QEvent;
class PlayListManager;
class PlayListModel;
@@ -47,12 +48,11 @@ private slots:
void on_refreshPushButton_clicked();
void on_queuePushButton_clicked();
void on_jumpToPushButton_clicked();
- void on_filterLineEdit_textChanged(const QString&);
- void on_filterLineEdit_returnPressed ();
void jumpTo(const QModelIndex&);
void queueUnqueue(const QModelIndex&,const QModelIndex&);
private:
+ bool eventFilter(QObject *o, QEvent *e);
QStringListModel* m_listModel;
QSortFilterProxyModel* m_proxyModel;
PlayListManager *m_pl_manager;