From 77880b7a0797cef0fac0650ce0321e3aa8b702f4 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Thu, 30 May 2013 01:04:42 -0300 Subject: Add a proof of concept for filtering the Dive List, Press CTRL+F and a line edit will appear, whenever you write on that will be used as a filter against all columns. The results are maybe somewhat surprising in trip mode, but when sorting by another column this shows some potential. Hit ESC to remove the filtering. I need to find a better position to put the Widget, but it's a proof of concept. Signed-off-by: Tomaz Canabrava Signed-off-by: Dirk Hohndel --- qt-ui/divelistview.cpp | 39 +++++++++++++++++++++++++++++++++++++-- qt-ui/divelistview.h | 3 +++ 2 files changed, 40 insertions(+), 2 deletions(-) (limited to 'qt-ui') diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp index eb19be904..c384d4872 100644 --- a/qt-ui/divelistview.cpp +++ b/qt-ui/divelistview.cpp @@ -14,17 +14,52 @@ #include #include #include +#include +#include - -DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelection(false), currentHeaderClicked(-1) +DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelection(false), + currentHeaderClicked(-1), searchBox(new QLineEdit(this)) { setUniformRowHeights(true); setItemDelegateForColumn(TreeItemDT::RATING, new StarWidgetsDelegate()); QSortFilterProxyModel *model = new QSortFilterProxyModel(this); model->setSortRole(TreeItemDT::SORT_ROLE); + model->setFilterKeyColumn(-1); // filter all columns setModel(model); setSortingEnabled(false); header()->setContextMenuPolicy(Qt::ActionsContextMenu); + QAction *showSearchBox = new QAction(tr("Show Search Box"), this); + showSearchBox->setShortcut( Qt::CTRL + Qt::Key_F); + showSearchBox->setShortcutContext(Qt::ApplicationShortcut); + addAction(showSearchBox); + + searchBox->installEventFilter(this); + searchBox->hide(); + connect(showSearchBox, SIGNAL(triggered(bool)), this, SLOT(showSearchEdit())); + connect(searchBox, SIGNAL(textChanged(QString)), model, SLOT(setFilterFixedString(QString))); +} + +void DiveListView::showSearchEdit() +{ + searchBox->show(); + searchBox->setFocus(); +} + +bool DiveListView::eventFilter(QObject* , QEvent* event) +{ + if(event->type() != QEvent::KeyPress){ + return false; + } + QKeyEvent *keyEv = static_cast(event); + if (keyEv->key() != Qt::Key_Escape){ + return false; + } + + searchBox->clear(); + searchBox->hide(); + QSortFilterProxyModel *m = qobject_cast(model()); + m->setFilterFixedString(QString()); + return true; } void DiveListView::headerClicked(int i) diff --git a/qt-ui/divelistview.h b/qt-ui/divelistview.h index 6f22597f6..2f3838c00 100644 --- a/qt-ui/divelistview.h +++ b/qt-ui/divelistview.h @@ -25,11 +25,13 @@ public: void selectionChanged(const QItemSelection& selected, const QItemSelection& deselected); void currentChanged(const QModelIndex& current, const QModelIndex& previous); void reload(DiveTripModel::Layout layout = DiveTripModel::TREE, bool forceSort = true); + bool eventFilter(QObject* , QEvent* ); public slots: void toggleColumnVisibilityByIndex(); void reloadHeaderActions(); void headerClicked(int); + void showSearchEdit(); Q_SIGNALS: void currentDiveChanged(int divenr); @@ -37,6 +39,7 @@ private: bool mouseClickSelection; int currentHeaderClicked; DiveTripModel::Layout currentLayout; + QLineEdit *searchBox; }; #endif // DIVELISTVIEW_H -- cgit v1.2.3-70-g09d2