summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tomaz Canabrava <tcanabrava@kde.org>2018-12-06 20:07:47 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2018-12-14 01:05:18 +0800
commit81bb6086c0e7f7ba6d4100a49cc9cf32556caaaf (patch)
tree478e59d052d3fddd564c7bbabbd44d8544b276ca
parent89413c5f0779813dab1b63e24aa4b34aebc1e28c (diff)
downloadsubsurface-81bb6086c0e7f7ba6d4100a49cc9cf32556caaaf.tar.gz
Struct FilterData
The idea is that this struct will have all the needed data that will be passed to the filter model. Everything that happens on the filterwidget will fill out this struct, then forward it to the model, that in turn will activate the filter hiding some of the dives that matches on your divelist. Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
-rw-r--r--desktop-widgets/filterwidget2.cpp36
-rw-r--r--desktop-widgets/filterwidget2.h4
-rw-r--r--qt-models/filtermodels.cpp6
-rw-r--r--qt-models/filtermodels.h24
4 files changed, 64 insertions, 6 deletions
diff --git a/desktop-widgets/filterwidget2.cpp b/desktop-widgets/filterwidget2.cpp
index 9bf526a88..50cad019a 100644
--- a/desktop-widgets/filterwidget2.cpp
+++ b/desktop-widgets/filterwidget2.cpp
@@ -8,10 +8,17 @@ FilterWidget2::FilterWidget2(QWidget* parent)
, ui(new Ui::FilterWidget2())
{
ui->setupUi(this);
- ui->minRating->setCurrentStars(0);
- ui->maxRating->setCurrentStars(5);
- ui->minVisibility->setCurrentStars(0);
- ui->maxVisibility->setCurrentStars(5);
+
+ FilterData data;
+ ui->minRating->setCurrentStars(data.minRating);
+ ui->maxRating->setCurrentStars(data.maxRating);
+ ui->minVisibility->setCurrentStars(data.minVisibility);
+ ui->maxVisibility->setCurrentStars(data.maxVisibility);
+ ui->minAirTemp->setValue(data.minAirTemp);
+ ui->maxAirTemp->setValue(data.maxAirTemp);
+ ui->minWaterTemp->setValue(data.minWaterTemp);
+ ui->maxWaterTemp->setValue(data.maxWaterTemp);
+ ui->to->setDate(data.to.date());
connect(ui->maxRating, &StarWidget::valueChanged,
this, &FilterWidget2::updateFilter);
@@ -55,5 +62,24 @@ FilterWidget2::FilterWidget2(QWidget* parent)
void FilterWidget2::updateFilter()
{
-
+ FilterData data;
+
+ data.validFilter = true;
+ data.minVisibility = ui->minVisibility->currentStars();
+ data.maxVisibility = ui->maxVisibility->currentStars();
+ data.minRating = ui->minRating->currentStars();
+ data.maxRating = ui->maxRating->currentStars();
+ data.minWaterTemp = ui->minWaterTemp->value();
+ data.maxWaterTemp = ui->maxWaterTemp->value();
+ data.minAirTemp = ui->minAirTemp->value();
+ data.maxWaterTemp = ui->maxWaterTemp->value();
+ data.from = ui->from->dateTime();
+ data.to = ui->to->dateTime();
+ data.tags = ui->tags->text().split(",", QString::SkipEmptyParts);
+ data.people = ui->people->text().split(",", QString::SkipEmptyParts);
+ data.location = ui->location->text().split(",", QString::SkipEmptyParts);
+ data.equipment = ui->equipment->text().split(",", QString::SkipEmptyParts);
+ data.invertFilter = ui->invertFilter->isChecked();
+
+ emit filterDataChanged(data);
}
diff --git a/desktop-widgets/filterwidget2.h b/desktop-widgets/filterwidget2.h
index 70313c5d2..a9d976ec8 100644
--- a/desktop-widgets/filterwidget2.h
+++ b/desktop-widgets/filterwidget2.h
@@ -6,6 +6,7 @@
#include <memory>
#include "ui_filterwidget2.h"
+#include "qt-models/filtermodels.h"
namespace Ui {
class FilterWidget2;
@@ -13,12 +14,13 @@ namespace Ui {
class FilterWidget2 : public QWidget {
Q_OBJECT
+
public:
explicit FilterWidget2(QWidget *parent = 0);
void updateFilter();
signals:
- void filterUpdated();
+ void filterDataChanged(const FilterData& data);
private:
std::unique_ptr<Ui::FilterWidget2> ui;
diff --git a/qt-models/filtermodels.cpp b/qt-models/filtermodels.cpp
index 4063ba149..a6e80aa8f 100644
--- a/qt-models/filtermodels.cpp
+++ b/qt-models/filtermodels.cpp
@@ -711,3 +711,9 @@ bool MultiFilterSortModel::lessThan(const QModelIndex &i1, const QModelIndex &i2
// Hand sorting down to the source model.
return model->lessThan(i1, i2);
}
+
+void MultiFilterSortModel::filterDataChanged(const FilterData& data)
+{
+ filterData = data;
+ myInvalidate();
+}
diff --git a/qt-models/filtermodels.h b/qt-models/filtermodels.h
index 8830e99c3..6956146e1 100644
--- a/qt-models/filtermodels.h
+++ b/qt-models/filtermodels.h
@@ -6,6 +6,8 @@
#include <QStringListModel>
#include <QSortFilterProxyModel>
+#include <QDateTime>
+
#include <stdint.h>
#include <vector>
@@ -13,6 +15,25 @@ struct dive;
struct dive_trip;
class DiveTripModel;
+struct FilterData {
+ bool validFilter = false;
+ int minVisibility = 0;
+ int maxVisibility = 5;
+ int minRating = 0;
+ int maxRating = 5;
+ double minWaterTemp = 0;
+ double maxWaterTemp = 100;
+ double minAirTemp = 0;
+ double maxAirTemp = 100;
+ QDateTime from;
+ QDateTime to = QDateTime::currentDateTime();
+ QStringList tags;
+ QStringList people;
+ QStringList location;
+ QStringList equipment;
+ bool invertFilter;
+};
+
class FilterModelBase : public QAbstractListModel {
Q_OBJECT
private:
@@ -137,14 +158,17 @@ slots:
void stopFilterDiveSite();
void filterChanged(const QModelIndex &from, const QModelIndex &to, const QVector<int> &roles);
void setLayout(DiveTripModel::Layout layout);
+ void filterDataChanged(const FilterData& data);
signals:
void filterFinished();
+
private:
MultiFilterSortModel(QObject *parent = 0);
QList<FilterModelBase *> models;
struct dive_site *curr_dive_site;
DiveTripModel *model;
+ FilterData filterData;
};
#endif