aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Chris Xiong <chirs241097@gmail.com> 2024-03-13 01:21:32 -0400
committerGravatar Chris Xiong <chirs241097@gmail.com> 2024-03-13 01:21:32 -0400
commite2fee8a707e28aacab93e7524f5ca965d6012f27 (patch)
treec8b98a732db5dcd6dd66a6c144f1b28b76c42abe
parent3a226954ba6b9bd70892ef7247226eaf30d216a4 (diff)
downloadmeteor-trashy-addon-e2fee8a707e28aacab93e7524f5ca965d6012f27.tar.xz
Implement filtering.
-rw-r--r--mapman/src/groupview.cpp28
-rw-r--r--mapman/src/groupview.hpp4
-rw-r--r--mapman/src/sliceview.cpp19
-rw-r--r--mapman/src/sliceview.hpp4
4 files changed, 43 insertions, 12 deletions
diff --git a/mapman/src/groupview.cpp b/mapman/src/groupview.cpp
index 32917d4..721917f 100644
--- a/mapman/src/groupview.cpp
+++ b/mapman/src/groupview.cpp
@@ -6,6 +6,7 @@
#include <QTableView>
#include <QStandardItemModel>
+#include <QSortFilterProxyModel>
#include <QPushButton>
#include <QLineEdit>
#include <QSpinBox>
@@ -17,7 +18,6 @@
#include <QSpacerItem>
#include <QHeaderView>
#include <QMessageBox>
-#include <qmessagebox.h>
group_view::group_view() : QMdiSubWindow()
{
@@ -27,8 +27,11 @@ group_view::group_view() : QMdiSubWindow()
auto l1 = new QVBoxLayout();
leftpane->setLayout(l1);
tv = new QTableView();
- m = new QStandardItemModel();
- tv->setModel(m);
+ m = new QStandardItemModel(this);
+ mf = new QSortFilterProxyModel(this);
+ mf->setSourceModel(m);
+ mf->setFilterCaseSensitivity(Qt::CaseSensitivity::CaseInsensitive);
+ tv->setModel(mf);
tv->setColumnHidden(3, true);
tv->setSelectionMode(QAbstractItemView::SelectionMode::SingleSelection);
tv->setSelectionBehavior(QAbstractItemView::SelectionBehavior::SelectRows);
@@ -38,7 +41,7 @@ group_view::group_view() : QMdiSubWindow()
bool dirty = oldidx.isValid() && this->dirty;
if (oldidx.isValid())
{
- int64_t oldgid = m->item(oldidx.row(), 3)->data(Qt::ItemDataRole::DisplayRole).toLongLong();
+ int64_t oldgid = mf->data(oldidx.siblingAtColumn(3), Qt::ItemDataRole::DisplayRole).toLongLong();
auto oldgroup = l->get_group(oldgid);
dirty |= tetitle->text() != QString::fromStdString(oldgroup.title);
dirty |= teauthor->text() != QString::fromStdString(oldgroup.author);
@@ -63,8 +66,11 @@ group_view::group_view() : QMdiSubWindow()
auto l2 = new QHBoxLayout();
pbadd = new QPushButton("+");
pbrem = new QPushButton("-");
+ tefilter = new QLineEdit();
+ tefilter->setPlaceholderText("Filter");
connect(pbadd, &QPushButton::pressed, this, &group_view::add_group);
connect(pbrem, &QPushButton::pressed, this, &group_view::rem_group);
+ l2->addWidget(tefilter);
l2->addWidget(pbadd);
l2->addWidget(pbrem);
l1->addLayout(l2);
@@ -110,6 +116,7 @@ group_view::group_view() : QMdiSubWindow()
sp->setCollapsible(1, false);
l = nullptr;
dirty = false;
+ connect(tefilter, &QLineEdit::textChanged, mf, &QSortFilterProxyModel::setFilterFixedString);
this->setWindowTitle("Map art listings");
this->setAttribute(Qt::WA_DeleteOnClose, false);
}
@@ -143,7 +150,7 @@ void group_view::rem_group()
{
if (!tv->currentIndex().isValid())
return;
- int64_t curgid = m->item(tv->currentIndex().row(), 3)->data(Qt::ItemDataRole::DisplayRole).toLongLong();
+ int64_t curgid = mf->data(tv->currentIndex().siblingAtColumn(3), Qt::ItemDataRole::DisplayRole).toLongLong();
l->remove_group(curgid);
refresh_list();
}
@@ -152,7 +159,7 @@ void group_view::update_fields()
{
if (!tv->currentIndex().isValid())
return;
- int64_t curgid = m->item(tv->currentIndex().row(), 3)->data(Qt::ItemDataRole::DisplayRole).toLongLong();
+ int64_t curgid = mf->data(tv->currentIndex().siblingAtColumn(3), Qt::ItemDataRole::DisplayRole).toLongLong();
current_group = l->get_group(curgid);
auto &g = current_group;
tetitle->setText(QString::fromStdString(g.title));
@@ -179,7 +186,7 @@ void group_view::update_library()
{
if (!tv->currentIndex().isValid())
return;
- int64_t curgid = m->item(tv->currentIndex().row(), 3)->data(Qt::ItemDataRole::DisplayRole).toLongLong();
+ int64_t curgid = mf->data(tv->currentIndex().siblingAtColumn(3), Qt::ItemDataRole::DisplayRole).toLongLong();
auto &g = current_group;
g.title = tetitle->text().toStdString();
g.author = teauthor->text().toStdString();
@@ -193,8 +200,11 @@ void group_view::update_library()
void group_view::refresh_list()
{
int64_t curgid = -1;
- if (tv->currentIndex().isValid())
- curgid = m->item(tv->currentIndex().row(), 3)->data(Qt::ItemDataRole::DisplayRole).toLongLong();
+ if (tv->currentIndex().isValid() && tv->currentIndex().siblingAtColumn(3).isValid())
+ {
+ auto idx = tv->currentIndex().siblingAtColumn(3);
+ curgid = mf->data(idx, Qt::ItemDataRole::DisplayRole).toLongLong();
+ }
m->clear();
m->setHorizontalHeaderLabels({"Title", "Author(s)", "Dimension", "id"});
tv->setColumnHidden(3, true);
diff --git a/mapman/src/groupview.hpp b/mapman/src/groupview.hpp
index ca4cf30..52c1bd0 100644
--- a/mapman/src/groupview.hpp
+++ b/mapman/src/groupview.hpp
@@ -2,6 +2,7 @@
#define GROUPVIEW_HPP
#include <QMdiSubWindow>
+#include <qsortfilterproxymodel.h>
#include "mapdump.hpp"
class QTableView;
@@ -10,6 +11,7 @@ class QLineEdit;
class QSpinBox;
class QLabel;
class QStandardItemModel;
+class QSortFilterProxyModel;
class map_library;
class map_painter;
@@ -32,10 +34,12 @@ public slots:
private:
QTableView *tv;
QStandardItemModel *m;
+ QSortFilterProxyModel *mf;
QPushButton *pbadd;
QPushButton *pbrem;
QLineEdit *tetitle;
QLineEdit *teauthor;
+ QLineEdit *tefilter;
QSpinBox *sbh;
QSpinBox *sbv;
QPushButton *pbapply;
diff --git a/mapman/src/sliceview.cpp b/mapman/src/sliceview.cpp
index c0dc3a7..db24a26 100644
--- a/mapman/src/sliceview.cpp
+++ b/mapman/src/sliceview.cpp
@@ -6,27 +6,39 @@
#include <QListView>
#include <QGraphicsView>
#include <QStandardItemModel>
+#include <QSortFilterProxyModel>
#include <QSplitter>
+#include <QVBoxLayout>
#include <QDrag>
#include <QMimeData>
#include <QEvent>
#include <QMouseEvent>
+#include <QLineEdit>
#include <QApplication>
-#include <qnamespace.h>
slice_view::slice_view() : l(nullptr)
{
lv = new QListView(this);
m = new QStandardItemModel(this);
- lv->setModel(m);
+ mf = new QSortFilterProxyModel(this);
+ mf->setSourceModel(m);
+ mf->setFilterCaseSensitivity(Qt::CaseSensitivity::CaseInsensitive);
+ tefilter = new QLineEdit(this);
+ tefilter->setPlaceholderText("Filter");
+ lv->setModel(mf);
lv->setSelectionMode(QAbstractItemView::SelectionMode::SingleSelection);
lv->setDragDropMode(QAbstractItemView::DragDropMode::NoDragDrop);
lv->viewport()->installEventFilter(this);
p = new map_painter();
p->set_dimension(1, 1);
+ auto leftcontainer = new QWidget();
+ auto leftlayout = new QVBoxLayout();
+ leftcontainer->setLayout(leftlayout);
+ leftlayout->addWidget(lv);
+ leftlayout->addWidget(tefilter);
auto layout = new QSplitter(Qt::Orientation::Horizontal, this);
layout->setContentsMargins(6, 6, 6, 6);
- layout->addWidget(lv);
+ layout->addWidget(leftcontainer);
layout->addWidget(p->view());
layout->setStretchFactor(0, 1);
layout->setStretchFactor(1, 3);
@@ -42,6 +54,7 @@ slice_view::slice_view() : l(nullptr)
[this](const QModelIndex &idx) {
dragidx = idx;
});
+ connect(tefilter, &QLineEdit::textChanged, mf, &QSortFilterProxyModel::setFilterFixedString);
this->setWindowTitle("Map listings");
this->setAttribute(Qt::WA_DeleteOnClose, false);
}
diff --git a/mapman/src/sliceview.hpp b/mapman/src/sliceview.hpp
index 3f7ee79..0773040 100644
--- a/mapman/src/sliceview.hpp
+++ b/mapman/src/sliceview.hpp
@@ -8,6 +8,8 @@ class map_library;
class map_painter;
class QListView;
class QStandardItemModel;
+class QSortFilterProxyModel;
+class QLineEdit;
class slice_view : public QMdiSubWindow
{
@@ -23,6 +25,8 @@ protected:
private:
QListView *lv;
QStandardItemModel *m;
+ QSortFilterProxyModel *mf;
+ QLineEdit *tefilter;
map_painter *p;
map_library *l;
QModelIndex dragidx;