diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2013-11-12 11:47:25 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2013-11-12 11:47:25 +0000 |
| commit | 27de65360c5cec6940d634af4fc6332f49321bdf (patch) | |
| tree | 80a39e78dc937cb9559ed933d6efe61b28c0279d /src | |
| parent | eb7437c37308c6b31155a60aea2dce6325ff131c (diff) | |
| download | qmmp-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.ui | 8 | ||||
| -rw-r--r-- | src/qmmpui/jumptotrackdialog.cpp | 72 | ||||
| -rw-r--r-- | src/qmmpui/jumptotrackdialog_p.h | 6 |
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; |
