From 3810b6fb810d298728d2195d0c8e7c98cbf540bc Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Tue, 22 Aug 2017 19:03:22 +0000 Subject: quick search implementation git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@7387 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/Ui/qsui/qsuiquicksearch.cpp | 53 +++++++++++++++++++++++++++++++++ src/plugins/Ui/qsui/qsuiquicksearch.h | 9 ++++++ src/qmmpui/playlistmodel.cpp | 7 +++++ src/qmmpui/playlistmodel.h | 3 ++ 4 files changed, 72 insertions(+) (limited to 'src') diff --git a/src/plugins/Ui/qsui/qsuiquicksearch.cpp b/src/plugins/Ui/qsui/qsuiquicksearch.cpp index ed5011716..89160bdbb 100644 --- a/src/plugins/Ui/qsui/qsuiquicksearch.cpp +++ b/src/plugins/Ui/qsui/qsuiquicksearch.cpp @@ -24,11 +24,15 @@ #include #include #include +#include +#include +#include #include "qsuiquicksearch.h" QSUIQuickSearch::QSUIQuickSearch(QWidget *parent) : QWidget(parent) { + m_manager = PlayListManager::instance(); m_lineEdit = new QLineEdit(this); QHBoxLayout *layout = new QHBoxLayout; layout->setSpacing(0); @@ -47,13 +51,62 @@ QSUIQuickSearch::QSUIQuickSearch(QWidget *parent) : layout->addWidget(upButton); connect(qApp, SIGNAL(focusChanged(QWidget*,QWidget*)), SLOT(onFocusChanged(QWidget*,QWidget*))); + connect(m_lineEdit, SIGNAL(textEdited(QString)), SLOT(onTextEdited(QString))); + connect(downButton, SIGNAL(clicked(bool)), SLOT(onSearchDownClicked())); + connect(upButton, SIGNAL(clicked(bool)), SLOT(onSearchUpClicked())); } void QSUIQuickSearch::onFocusChanged(QWidget *old, QWidget *now) { if(now == m_lineEdit) + { qDebug("focus in"); + search(m_lineEdit->text()); + updateSelection(); + } else if(old == m_lineEdit) qDebug("focus out"); } +void QSUIQuickSearch::onTextEdited(const QString &str) +{ + search(str); + updateSelection(); +} + +void QSUIQuickSearch::onSearchUpClicked() +{ + PlayListModel *model = m_manager->selectedPlayList(); +} + +void QSUIQuickSearch::onSearchDownClicked() +{ + PlayListModel *model = m_manager->selectedPlayList(); +} + +void QSUIQuickSearch::search(const QString &str) +{ + m_indexes.clear(); + if(str.isEmpty()) + return; + + PlayListModel *model = m_manager->selectedPlayList(); + + for(int i = 0; i < model->count(); ++i) + { + PlayListItem *item = model->item(i); + if(item->isGroup()) + continue; + + if(!item->formattedTitles().filter(str, Qt::CaseInsensitive).isEmpty()) + m_indexes << i; + } +} + +void QSUIQuickSearch::updateSelection() +{ + PlayListModel *model = m_manager->selectedPlayList(); + model->clearSelection(); + model->setSelected(m_indexes); +} + diff --git a/src/plugins/Ui/qsui/qsuiquicksearch.h b/src/plugins/Ui/qsui/qsuiquicksearch.h index f6bccf238..077bc0a95 100644 --- a/src/plugins/Ui/qsui/qsuiquicksearch.h +++ b/src/plugins/Ui/qsui/qsuiquicksearch.h @@ -22,8 +22,10 @@ #define QSUIQUICKSEARCH_H #include +#include class QLineEdit; +class PlayListManager; /** @author Ilya Kotov @@ -36,9 +38,16 @@ public: private slots: void onFocusChanged(QWidget *old, QWidget *now); + void onTextEdited(const QString &str); + void onSearchUpClicked(); + void onSearchDownClicked(); private: + void search(const QString &str); + void updateSelection(); QLineEdit *m_lineEdit; + PlayListManager *m_manager; + QList m_indexes; }; diff --git a/src/qmmpui/playlistmodel.cpp b/src/qmmpui/playlistmodel.cpp index 7fe8daacb..4033aaa20 100644 --- a/src/qmmpui/playlistmodel.cpp +++ b/src/qmmpui/playlistmodel.cpp @@ -462,6 +462,13 @@ void PlayListModel::setSelected(int first, int last, bool selected) emit listChanged(SELECTION); } +void PlayListModel::setSelected(QList indexes, bool selected) +{ + foreach (int idx, indexes) + m_container->setSelected(idx, selected); + emit listChanged(SELECTION); +} + void PlayListModel::removeSelected() { removeSelection(false); diff --git a/src/qmmpui/playlistmodel.h b/src/qmmpui/playlistmodel.h index 37fe5497d..1ad03d613 100644 --- a/src/qmmpui/playlistmodel.h +++ b/src/qmmpui/playlistmodel.h @@ -214,6 +214,9 @@ public: * @param selected Selection state (\b true - select, \b false - unselect). */ void setSelected(int first, int last, bool selected = true); + + + void setSelected(QList indexes, bool selected = true); /*! * Advances to the next item. Returns \b false if next iten doesn't exist, * otherwise returns \b true -- cgit v1.2.3-13-gbd6f