diff options
-rw-r--r-- | qt-ui/divelistview.cpp | 39 | ||||
-rw-r--r-- | qt-ui/divelistview.h | 3 |
2 files changed, 40 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) 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 |