summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--core/dive.c12
-rw-r--r--core/dive.h2
-rw-r--r--desktop-widgets/filterwidget2.cpp22
-rw-r--r--desktop-widgets/filterwidget2.h6
-rw-r--r--desktop-widgets/filterwidget2.ui260
-rw-r--r--qt-models/filtermodels.cpp6
-rw-r--r--qt-models/filtermodels.h2
8 files changed, 191 insertions, 120 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a3746d168..d72f17cba 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,4 @@
+- Allow to filter for logged/planned dives
- Core, Windows: fix a bug related to non-ASCII characters in user names
- Shearwater import: add suppport for importing Shearwater Cloud logs
- Core, Mobile: all controller states other than powered off are valid [#1903]
diff --git a/core/dive.c b/core/dive.c
index 0ec9e381c..36d05dad5 100644
--- a/core/dive.c
+++ b/core/dive.c
@@ -3361,6 +3361,18 @@ bool is_dc_planner(const struct divecomputer *dc) {
return same_string(dc->model, "planned dive");
}
+// Does this dive have a dive computer for which is_dc_planner has value planned
+bool has_planned(const struct dive *dive, bool planned) {
+ const struct divecomputer *dc = &dive->dc;
+
+ while (dc) {
+ if (is_dc_planner(&dive->dc) == planned)
+ return true;
+ dc = dc->next;
+ }
+ return false;
+}
+
/*
* Merging two dives can be subtle, because there's two different ways
* of merging:
diff --git a/core/dive.h b/core/dive.h
index f447c88b5..a93020507 100644
--- a/core/dive.h
+++ b/core/dive.h
@@ -653,6 +653,8 @@ extern void vpmb_start_gradient(struct deco_state *ds);
extern void vpmb_next_gradient(struct deco_state *ds, double deco_time, double surface_pressure);
extern double tissue_tolerance_calc(struct deco_state *ds, const struct dive *dive, double pressure);
extern bool is_dc_planner(const struct divecomputer *dc);
+extern bool has_planned(const struct dive *dive, bool planned);
+
/* this should be converted to use our types */
struct divedatapoint {
diff --git a/desktop-widgets/filterwidget2.cpp b/desktop-widgets/filterwidget2.cpp
index d120ffe4d..b2f74d742 100644
--- a/desktop-widgets/filterwidget2.cpp
+++ b/desktop-widgets/filterwidget2.cpp
@@ -18,6 +18,8 @@ FilterWidget2::FilterWidget2(QWidget* parent)
ui->maxAirTemp->setValue(data.maxAirTemp);
ui->minWaterTemp->setValue(data.minWaterTemp);
ui->maxWaterTemp->setValue(data.maxWaterTemp);
+ ui->planned->setChecked(data.logged);
+ ui->planned->setChecked(data.planned);
// TODO: unhide this when we discover how to search for equipment.
ui->equipment->hide();
@@ -64,6 +66,11 @@ FilterWidget2::FilterWidget2(QWidget* parent)
connect(ui->location, &QLineEdit::textChanged,
this, &FilterWidget2::updateFilter);
+
+ connect(ui->logged, SIGNAL(stateChanged(int)), this, SLOT(updateLogged(int)));
+
+ connect(ui->planned, SIGNAL(stateChanged(int)), this, SLOT(updatePlanned(int)));
+
}
void FilterWidget2::updateFilter()
@@ -86,11 +93,26 @@ void FilterWidget2::updateFilter()
data.location = ui->location->text().split(",", QString::SkipEmptyParts);
data.equipment = ui->equipment->text().split(",", QString::SkipEmptyParts);
data.invertFilter = ui->invertFilter->isChecked();
+ data.logged = ui->logged->isChecked();
+ data.planned = ui->planned->isChecked();
filterData = data;
emit filterDataChanged(data);
}
+void FilterWidget2::updateLogged(int value) {
+ if (value == Qt::Unchecked)
+ ui->planned->setChecked(true);
+ updateFilter();
+}
+
+void FilterWidget2::updatePlanned(int value) {
+ if (value == Qt::Unchecked)
+ ui->logged->setChecked(true);
+ updateFilter();
+}
+
+
void FilterWidget2::showEvent(QShowEvent *event)
{
QWidget::showEvent(event);
diff --git a/desktop-widgets/filterwidget2.h b/desktop-widgets/filterwidget2.h
index 80629f0cc..fba012095 100644
--- a/desktop-widgets/filterwidget2.h
+++ b/desktop-widgets/filterwidget2.h
@@ -27,6 +27,12 @@ protected:
signals:
void filterDataChanged(const FilterData& data);
+public slots:
+ void updatePlanned(int value);
+ void updateLogged(int value);
+
+
+
private:
std::unique_ptr<Ui::FilterWidget2> ui;
FilterData filterData;
diff --git a/desktop-widgets/filterwidget2.ui b/desktop-widgets/filterwidget2.ui
index 978dafc6e..b8d5af48a 100644
--- a/desktop-widgets/filterwidget2.ui
+++ b/desktop-widgets/filterwidget2.ui
@@ -7,53 +7,34 @@
<x>0</x>
<y>0</y>
<width>510</width>
- <height>320</height>
+ <height>349</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
- <item row="3" column="1">
- <widget class="QLabel" name="label_12">
+ <item row="8" column="1" colspan="4">
+ <widget class="QLineEdit" name="tags"/>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="label_3">
<property name="text">
<string>Min</string>
</property>
</widget>
</item>
- <item row="2" column="4">
- <widget class="StarWidget" name="maxVisibility" native="true">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::TabFocus</enum>
- </property>
- </widget>
- </item>
- <item row="3" column="2">
- <widget class="QDoubleSpinBox" name="minWaterTemp"/>
- </item>
- <item row="2" column="2">
- <widget class="StarWidget" name="minVisibility" native="true">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::TabFocus</enum>
+ <item row="9" column="0">
+ <widget class="QLabel" name="label_8">
+ <property name="text">
+ <string>People</string>
</property>
</widget>
</item>
- <item row="7" column="0">
- <widget class="QLabel" name="label_7">
+ <item row="3" column="3">
+ <widget class="QLabel" name="label_13">
<property name="text">
- <string>Tags</string>
+ <string>Max</string>
</property>
</widget>
</item>
@@ -64,44 +45,17 @@
</property>
</widget>
</item>
- <item row="1" column="2">
- <widget class="StarWidget" name="minRating" native="true">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::TabFocus</enum>
- </property>
- </widget>
- </item>
<item row="8" column="0">
- <widget class="QLabel" name="label_8">
- <property name="text">
- <string>People</string>
- </property>
- </widget>
- </item>
- <item row="3" column="3">
- <widget class="QLabel" name="label_13">
- <property name="text">
- <string>Max</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLabel" name="label_3">
+ <widget class="QLabel" name="label_7">
<property name="text">
- <string>Min</string>
+ <string>Tags</string>
</property>
</widget>
</item>
- <item row="7" column="1" colspan="4">
- <widget class="QLineEdit" name="tags"/>
+ <item row="3" column="2">
+ <widget class="QDoubleSpinBox" name="minWaterTemp"/>
</item>
- <item row="11" column="1" colspan="4">
+ <item row="12" column="1" colspan="4">
<widget class="QCheckBox" name="invertFilter">
<property name="toolTip">
<string>Display dives that will not match the search, only applies to tags, people, location and equipment</string>
@@ -118,32 +72,48 @@
</property>
</widget>
</item>
- <item row="5" column="1" colspan="4">
- <widget class="QDateTimeEdit" name="from"/>
+ <item row="3" column="1">
+ <widget class="QLabel" name="label_12">
+ <property name="text">
+ <string>Min</string>
+ </property>
+ </widget>
</item>
- <item row="8" column="1" colspan="4">
- <widget class="QLineEdit" name="people"/>
+ <item row="5" column="0">
+ <widget class="QLabel" name="label_4">
+ <property name="text">
+ <string>From</string>
+ </property>
+ </widget>
</item>
- <item row="1" column="4">
- <widget class="StarWidget" name="maxRating" native="true">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
+ <item row="6" column="0">
+ <widget class="QLabel" name="label_6">
+ <property name="text">
+ <string>To</string>
</property>
- <property name="focusPolicy">
- <enum>Qt::TabFocus</enum>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QLabel" name="label_17">
+ <property name="text">
+ <string>Min</string>
</property>
</widget>
</item>
<item row="3" column="4">
<widget class="QDoubleSpinBox" name="maxWaterTemp"/>
</item>
- <item row="10" column="0">
- <widget class="QLabel" name="labelEquipment">
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_5">
<property name="text">
- <string>Equipment</string>
+ <string>Visibility</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLabel" name="label_14">
+ <property name="text">
+ <string>Min</string>
</property>
</widget>
</item>
@@ -154,83 +124,133 @@
</property>
</widget>
</item>
- <item row="9" column="0">
- <widget class="QLabel" name="label_9">
+ <item row="10" column="1" colspan="4">
+ <widget class="QLineEdit" name="location"/>
+ </item>
+ <item row="11" column="0">
+ <widget class="QLabel" name="labelEquipment">
<property name="text">
- <string>Location</string>
+ <string>Equipment</string>
</property>
</widget>
</item>
- <item row="9" column="1" colspan="4">
- <widget class="QLineEdit" name="location"/>
+ <item row="4" column="2">
+ <widget class="QDoubleSpinBox" name="minAirTemp"/>
</item>
- <item row="6" column="1" colspan="4">
- <widget class="QDateTimeEdit" name="to"/>
+ <item row="4" column="4">
+ <widget class="QDoubleSpinBox" name="maxAirTemp"/>
</item>
- <item row="10" column="1" colspan="4">
+ <item row="11" column="1" colspan="4">
<widget class="QLineEdit" name="equipment"/>
</item>
- <item row="5" column="0">
- <widget class="QLabel" name="label_4">
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_11">
<property name="text">
- <string>From</string>
+ <string>Water Temp</string>
</property>
</widget>
</item>
- <item row="6" column="0">
- <widget class="QLabel" name="label_6">
+ <item row="9" column="1" colspan="4">
+ <widget class="QLineEdit" name="people"/>
+ </item>
+ <item row="4" column="3">
+ <widget class="QLabel" name="label_18">
<property name="text">
- <string>To</string>
+ <string>Max</string>
</property>
</widget>
</item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_5">
+ <item row="5" column="1" colspan="4">
+ <widget class="QDateTimeEdit" name="from"/>
+ </item>
+ <item row="10" column="0">
+ <widget class="QLabel" name="label_9">
<property name="text">
- <string>Visibility</string>
+ <string>Location</string>
</property>
</widget>
</item>
- <item row="3" column="0">
- <widget class="QLabel" name="label_11">
+ <item row="6" column="1" colspan="4">
+ <widget class="QDateTimeEdit" name="to"/>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="label_2">
<property name="text">
- <string>Water Temp</string>
+ <string>Air Temp</string>
</property>
</widget>
</item>
- <item row="2" column="1">
- <widget class="QLabel" name="label_14">
- <property name="text">
- <string>Min</string>
+ <item row="2" column="4">
+ <widget class="StarWidget" name="maxVisibility" native="true">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
</property>
</widget>
</item>
- <item row="4" column="0">
- <widget class="QLabel" name="label_2">
- <property name="text">
- <string>Air Temp</string>
+ <item row="2" column="2">
+ <widget class="StarWidget" name="minVisibility" native="true">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
</property>
</widget>
</item>
- <item row="4" column="1">
- <widget class="QLabel" name="label_17">
- <property name="text">
- <string>Min</string>
+ <item row="1" column="2">
+ <widget class="StarWidget" name="minRating" native="true">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
</property>
</widget>
</item>
- <item row="4" column="3">
- <widget class="QLabel" name="label_18">
- <property name="text">
- <string>Max</string>
+ <item row="1" column="4">
+ <widget class="StarWidget" name="maxRating" native="true">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::TabFocus</enum>
</property>
</widget>
</item>
- <item row="4" column="2">
- <widget class="QDoubleSpinBox" name="minAirTemp"/>
+ <item row="7" column="1">
+ <widget class="QCheckBox" name="logged">
+ <property name="text">
+ <string>Logged</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
</item>
- <item row="4" column="4">
- <widget class="QDoubleSpinBox" name="maxAirTemp"/>
+ <item row="7" column="2">
+ <widget class="QCheckBox" name="planned">
+ <property name="text">
+ <string>Planned</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
</item>
</layout>
</widget>
diff --git a/qt-models/filtermodels.cpp b/qt-models/filtermodels.cpp
index 4e4134033..8609243b2 100644
--- a/qt-models/filtermodels.cpp
+++ b/qt-models/filtermodels.cpp
@@ -138,6 +138,12 @@ bool MultiFilterSortModel::showDive(const struct dive *d) const
if (!hasEquipment(filterData.equipment, d))
return false;
+ // Planned/Logged
+ if (!filterData.logged && !has_planned(d, true))
+ return false;
+ if (!filterData.planned && !has_planned(d, false))
+ return false;
+
return true;
}
diff --git a/qt-models/filtermodels.h b/qt-models/filtermodels.h
index a8a601ecc..b16ce4a3b 100644
--- a/qt-models/filtermodels.h
+++ b/qt-models/filtermodels.h
@@ -30,6 +30,8 @@ struct FilterData {
QStringList people;
QStringList location;
QStringList equipment;
+ bool logged = true;
+ bool planned = true;
bool invertFilter;
};