From 27de65360c5cec6940d634af4fc6332f49321bdf Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Tue, 12 Nov 2013 11:47:25 +0000 Subject: 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 --- src/qmmpui/forms/jumptotrackdialog.ui | 8 ++++ src/qmmpui/jumptotrackdialog.cpp | 72 ++++++++++++++++++++++++----------- src/qmmpui/jumptotrackdialog_p.h | 6 +-- 3 files changed, 60 insertions(+), 26 deletions(-) (limited to 'src') 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 @@ + + filterLineEdit + songsListView + queuePushButton + refreshPushButton + jumpToPushButton + buttonBox + 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 #include +#include +#include #include #include #include @@ -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(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; -- cgit v1.2.3-13-gbd6f