summaryrefslogtreecommitdiffstats
path: root/qt-models
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2020-05-27 08:17:06 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2020-09-29 16:13:03 -0700
commit536fc05dd6acd67a459fe6decbd67071ad388df0 (patch)
treea745af6ee13e97cb9a2336abddd11ae04aec25f8 /qt-models
parent937fdb500b94244b2da0d72776d939e78a56fa33 (diff)
downloadsubsurface-536fc05dd6acd67a459fe6decbd67071ad388df0.tar.gz
filter: add (very primitive) filterpresetmodel
Implement a trivial model to provide the filter preset names to the UI. Sadly, for now this features the QWidget/QML column / name dichotomy. However, in this simple case that shouldn't be too much of an issue. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'qt-models')
-rw-r--r--qt-models/CMakeLists.txt2
-rw-r--r--qt-models/filterpresetmodel.cpp59
-rw-r--r--qt-models/filterpresetmodel.h30
3 files changed, 91 insertions, 0 deletions
diff --git a/qt-models/CMakeLists.txt b/qt-models/CMakeLists.txt
index 280abbd41..b42b6063b 100644
--- a/qt-models/CMakeLists.txt
+++ b/qt-models/CMakeLists.txt
@@ -21,6 +21,8 @@ set(SUBSURFACE_GENERIC_MODELS_LIB_SRCS
divetripmodel.h
filterconstraintmodel.cpp
filterconstraintmodel.h
+ filterpresetmodel.cpp
+ filterpresetmodel.h
maplocationmodel.cpp
maplocationmodel.h
models.cpp
diff --git a/qt-models/filterpresetmodel.cpp b/qt-models/filterpresetmodel.cpp
new file mode 100644
index 000000000..446dd5e16
--- /dev/null
+++ b/qt-models/filterpresetmodel.cpp
@@ -0,0 +1,59 @@
+// SPDX-License-Identifier: GPL-2.0
+#include "filterpresetmodel.h"
+#include "core/filterconstraint.h"
+#include "core/filterpreset.h"
+#include "core/qthelper.h"
+#include "core/subsurface-qt/divelistnotifier.h"
+
+FilterPresetModel::FilterPresetModel()
+{
+ setHeaderDataStrings(QStringList{ "", tr("Name") });
+ connect(&diveListNotifier, &DiveListNotifier::dataReset, this, &FilterPresetModel::reset);
+}
+
+FilterPresetModel::~FilterPresetModel()
+{
+}
+
+FilterPresetModel *FilterPresetModel::instance()
+{
+ static FilterPresetModel self;
+ return &self;
+}
+
+QVariant FilterPresetModel::data(const QModelIndex &index, int role) const
+{
+ if (!index.isValid() || index.row() >= filter_presets_count())
+ return QVariant();
+
+ switch (role) {
+ case Qt::DisplayRole:
+ if (index.column() == NAME)
+ return filter_preset_name_qstring(index.row());
+ break;
+ case Qt::DecorationRole:
+ if (index.column() == REMOVE)
+ return trashIcon();
+ break;
+ case Qt::SizeHintRole:
+ if (index.column() == REMOVE)
+ return trashIcon().size();
+ break;
+ case Qt::ToolTipRole:
+ if (index.column() == REMOVE)
+ return tr("Clicking here will remove this filter set.");
+ break;
+ }
+ return QVariant();
+}
+
+int FilterPresetModel::rowCount(const QModelIndex &parent) const
+{
+ return filter_presets_count();
+}
+
+void FilterPresetModel::reset()
+{
+ beginResetModel();
+ endResetModel();
+}
diff --git a/qt-models/filterpresetmodel.h b/qt-models/filterpresetmodel.h
new file mode 100644
index 000000000..26543666a
--- /dev/null
+++ b/qt-models/filterpresetmodel.h
@@ -0,0 +1,30 @@
+// SPDX-License-Identifier: GPL-2.0
+#ifndef FILTERPRESETMODEL_H
+#define FILTERPRESETMODEL_H
+
+#include "cleanertablemodel.h"
+#include "core/filterpreset.h"
+
+class FilterPresetModel : public CleanerTableModel {
+ Q_OBJECT
+public:
+ // For QML we will have to define roles
+ enum Column {
+ REMOVE,
+ NAME
+ };
+private
+slots:
+ void reset();
+public:
+ // there is one global filter preset list, therefore this model is a singleton
+ static FilterPresetModel *instance();
+private:
+ FilterPresetModel();
+ ~FilterPresetModel();
+ QVariant data(const QModelIndex &index, int role) const override;
+ int rowCount(const QModelIndex &parent) const override;
+ std::vector<filter_constraint> constraints;
+};
+
+#endif