mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
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>
This commit is contained in:
parent
c4f06dc536
commit
77880b7a07
2 changed files with 40 additions and 2 deletions
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue