diff options
author | Tomaz Canabrava <tcanabrava@kde.org> | 2013-05-30 01:04:42 -0300 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2013-05-30 20:29:55 +0900 |
commit | 77880b7a0797cef0fac0650ce0321e3aa8b702f4 (patch) | |
tree | 4d684edfb22b3d16f34021574011a8290c99e8ef /qt-ui/divelistview.cpp | |
parent | c4f06dc536392e31a477e592d30fb946f1499595 (diff) | |
download | subsurface-77880b7a0797cef0fac0650ce0321e3aa8b702f4.tar.gz |
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 <tcanabrava@kde.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui/divelistview.cpp')
-rw-r--r-- | qt-ui/divelistview.cpp | 39 |
1 files changed, 37 insertions, 2 deletions
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 <QKeyEvent> #include <QSortFilterProxyModel> #include <QAction> +#include <QLineEdit> +#include <QKeyEvent> - -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<QKeyEvent*>(event); + if (keyEv->key() != Qt::Key_Escape){ + return false; + } + + searchBox->clear(); + searchBox->hide(); + QSortFilterProxyModel *m = qobject_cast<QSortFilterProxyModel*>(model()); + m->setFilterFixedString(QString()); + return true; } void DiveListView::headerClicked(int i) |