Filter: quick implementation of negation

Add negate buttons to the Tags, People, Location and Equipment
filters. Currently, if nothing is entered the filter is ignored
whether negate is on or off. One might think about filtering all
dives without tags, etc. instead.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2019-01-22 09:32:39 +01:00 committed by Dirk Hohndel
parent c383079626
commit de4e6792c6
4 changed files with 81 additions and 33 deletions

View file

@ -20,8 +20,8 @@ FilterWidget2::FilterWidget2(QWidget* parent) : QWidget(parent), ignoreSignal(fa
// TODO: unhide this when we discover how to search for equipment.
ui.equipment->hide();
ui.equipmentNegate->hide();
ui.labelEquipment->hide();
ui.invertFilter->hide();
ui.fromDate->setDisplayFormat(prefs.date_format);
ui.fromTime->setDisplayFormat(prefs.time_format);
@ -77,12 +77,21 @@ FilterWidget2::FilterWidget2(QWidget* parent) : QWidget(parent), ignoreSignal(fa
connect(ui.tags, &QLineEdit::textChanged,
this, &FilterWidget2::updateFilter);
connect(ui.tagsNegate, &QToolButton::toggled,
this, &FilterWidget2::updateFilter);
connect(ui.people, &QLineEdit::textChanged,
this, &FilterWidget2::updateFilter);
connect(ui.peopleNegate, &QToolButton::toggled,
this, &FilterWidget2::updateFilter);
connect(ui.location, &QLineEdit::textChanged,
this, &FilterWidget2::updateFilter);
connect(ui.locationNegate, &QToolButton::toggled,
this, &FilterWidget2::updateFilter);
connect(ui.logged, SIGNAL(stateChanged(int)), this, SLOT(updateLogged(int)));
connect(ui.planned, SIGNAL(stateChanged(int)), this, SLOT(updatePlanned(int)));
@ -121,6 +130,10 @@ void FilterWidget2::clearFilter()
ui.fromTime->setTime(filterData.fromTime);
ui.toDate->setDate(filterData.toDate.date());
ui.toTime->setTime(filterData.toTime);
ui.tagsNegate->setChecked(filterData.tagsNegate);
ui.peopleNegate->setChecked(filterData.peopleNegate);
ui.locationNegate->setChecked(filterData.locationNegate);
ui.equipmentNegate->setChecked(filterData.equipmentNegate);
ignoreSignal = false;
filterDataChanged(filterData);
@ -162,7 +175,10 @@ void FilterWidget2::updateFilter()
filterData.people = ui.people->text().split(",", QString::SkipEmptyParts);
filterData.location = ui.location->text().split(",", QString::SkipEmptyParts);
filterData.equipment = ui.equipment->text().split(",", QString::SkipEmptyParts);
filterData.invertFilter = ui.invertFilter->isChecked();
filterData.tagsNegate = ui.tagsNegate->isChecked();
filterData.peopleNegate = ui.peopleNegate->isChecked();
filterData.locationNegate = ui.locationNegate->isChecked();
filterData.equipmentNegate = ui.equipmentNegate->isChecked();
filterData.logged = ui.logged->isChecked();
filterData.planned = ui.planned->isChecked();

View file

@ -21,7 +21,7 @@
</property>
</widget>
</item>
<item row="8" column="2" colspan="7">
<item row="8" column="2" colspan="6">
<widget class="QLineEdit" name="tags"/>
</item>
<item row="1" column="2">
@ -62,16 +62,6 @@
<item row="3" column="6">
<widget class="QDoubleSpinBox" name="minWaterTemp"/>
</item>
<item row="12" column="2" colspan="7">
<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>
</property>
<property name="text">
<string>Invert filter</string>
</property>
</widget>
</item>
<item row="2" column="7">
<widget class="QLabel" name="label_16">
<property name="text">
@ -131,7 +121,7 @@
</property>
</widget>
</item>
<item row="10" column="2" colspan="7">
<item row="10" column="2" colspan="6">
<widget class="QLineEdit" name="location"/>
</item>
<item row="11" column="0">
@ -147,7 +137,7 @@
<item row="4" column="8">
<widget class="QDoubleSpinBox" name="maxAirTemp"/>
</item>
<item row="11" column="2" colspan="7">
<item row="11" column="2" colspan="6">
<widget class="QLineEdit" name="equipment"/>
</item>
<item row="3" column="0">
@ -157,7 +147,7 @@
</property>
</widget>
</item>
<item row="9" column="2" colspan="7">
<item row="9" column="2" colspan="6">
<widget class="QLineEdit" name="people"/>
</item>
<item row="4" column="7">
@ -301,6 +291,46 @@
</property>
</widget>
</item>
<item row="8" column="8">
<widget class="QToolButton" name="tagsNegate">
<property name="text">
<string>¬</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="9" column="8">
<widget class="QToolButton" name="peopleNegate">
<property name="text">
<string>¬</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="10" column="8">
<widget class="QToolButton" name="locationNegate">
<property name="text">
<string>¬</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="11" column="8">
<widget class="QToolButton" name="equipmentNegate">
<property name="text">
<string>¬</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
@ -326,7 +356,6 @@
<tabstop>people</tabstop>
<tabstop>location</tabstop>
<tabstop>equipment</tabstop>
<tabstop>invertFilter</tabstop>
</tabstops>
<resources/>
<connections/>