summaryrefslogtreecommitdiffstats
path: root/qt-ui
diff options
context:
space:
mode:
Diffstat (limited to 'qt-ui')
-rw-r--r--qt-ui/filtermodels.cpp22
-rw-r--r--qt-ui/filtermodels.h3
-rw-r--r--qt-ui/locationinformation.cpp12
-rw-r--r--qt-ui/locationinformation.h2
4 files changed, 33 insertions, 6 deletions
diff --git a/qt-ui/filtermodels.cpp b/qt-ui/filtermodels.cpp
index aba480dd9..20bb6312e 100644
--- a/qt-ui/filtermodels.cpp
+++ b/qt-ui/filtermodels.cpp
@@ -298,14 +298,28 @@ MultiFilterSortModel::MultiFilterSortModel(QObject *parent) : QSortFilterProxyMo
bool MultiFilterSortModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
{
- if (justCleared || models.isEmpty())
- return true;
-
bool shouldShow = true;
QModelIndex index0 = sourceModel()->index(source_row, 0, source_parent);
QVariant diveVariant = sourceModel()->data(index0, DiveTripModel::DIVE_ROLE);
struct dive *d = (struct dive *)diveVariant.value<void *>();
+ if (curr_dive_site) {
+ if (!d) { // It's a trip, only show the ones that have dives to be shown.
+ bool showTrip = false;
+ for (int i = 0; i < sourceModel()->rowCount(index0); i++) {
+ QModelIndex child = sourceModel()->index(i, 0, index0);
+ d = (struct dive *) sourceModel()->data(child, DiveTripModel::DIVE_ROLE).value<void*>();
+ if ( d->dive_site_uuid == curr_dive_site->uuid )
+ showTrip = true; // do not shortcircuit the loop or the counts will be wrong
+ }
+ return showTrip;
+ }
+ return d->dive_site_uuid == curr_dive_site->uuid;
+ }
+
+ if (justCleared || models.isEmpty())
+ return true;
+
if (!d) { // It's a trip, only show the ones that have dives to be shown.
bool showTrip = false;
for (int i = 0; i < sourceModel()->rowCount(index0); i++) {
@@ -389,7 +403,7 @@ void MultiFilterSortModel::clearFilter()
myInvalidate();
}
-void MultiFilterSortModel::startFilterDiveSite(int32_t uuid)
+void MultiFilterSortModel::startFilterDiveSite(uint32_t uuid)
{
curr_dive_site = get_dive_site_by_uuid(uuid);
myInvalidate();
diff --git a/qt-ui/filtermodels.h b/qt-ui/filtermodels.h
index f9eb700dd..3403b3031 100644
--- a/qt-ui/filtermodels.h
+++ b/qt-ui/filtermodels.h
@@ -3,6 +3,7 @@
#include <QStringListModel>
#include <QSortFilterProxyModel>
+#include <stdint.h>
class MultiFilterInterface {
public:
@@ -93,7 +94,7 @@ public
slots:
void myInvalidate();
void clearFilter();
- void startFilterDiveSite(int32_t uuid);
+ void startFilterDiveSite(uint32_t uuid);
void stopFilterDiveSite();
signals:
diff --git a/qt-ui/locationinformation.cpp b/qt-ui/locationinformation.cpp
index 7c7e5e297..6e996954b 100644
--- a/qt-ui/locationinformation.cpp
+++ b/qt-ui/locationinformation.cpp
@@ -4,6 +4,7 @@
#include "divelistview.h"
#include "qthelper.h"
#include "globe.h"
+#include "filtermodels.h"
#include <QDebug>
#include <QShowEvent>
@@ -69,6 +70,8 @@ LocationInformationWidget::LocationInformationWidget(QWidget *parent) : QGroupBo
ui.currentLocation->setModel(new LocationInformationModel());
connect(ui.currentLocation, SIGNAL(currentIndexChanged(int)), this, SLOT(setCurrentDiveSite(int)));
+ connect(this, SIGNAL(startFilterDiveSite(uint32_t)), MultiFilterSortModel::instance(), SLOT(startFilterDiveSite(uint32_t)));
+ connect(this, SIGNAL(stopFilterDiveSite()), MultiFilterSortModel::instance(), SLOT(stopFilterDiveSite()));
}
void LocationInformationWidget::setCurrentDiveSite(int dive_nr)
@@ -91,7 +94,11 @@ void LocationInformationWidget::setLocationId(uint32_t uuid)
if(!currentDs)
return;
+ if (displayed_dive_site.uuid == currentDs->uuid)
+ return;
+
displayed_dive_site = *currentDs;
+
if (ui.currentLocation->currentText() != displayed_dive_site.name) {
// this will trigger setCurrentDiveSite again, and thus,
// will gethere with the correct uuid.
@@ -115,6 +122,8 @@ void LocationInformationWidget::setLocationId(uint32_t uuid)
ui.diveSiteCoordinates->setText(printGPSCoords(displayed_dive_site.latitude.udeg, displayed_dive_site.longitude.udeg));
else
ui.diveSiteCoordinates->clear();
+
+ emit startFilterDiveSite(displayed_dive_site.uuid);
}
void LocationInformationWidget::updateGpsCoordinates()
@@ -125,6 +134,7 @@ void LocationInformationWidget::updateGpsCoordinates()
void LocationInformationWidget::acceptChanges()
{
+ emit stopFilterDiveSite();
char *uiString;
currentDs->latitude = displayed_dive_site.latitude;
currentDs->longitude = displayed_dive_site.longitude;
@@ -156,6 +166,7 @@ void LocationInformationWidget::acceptChanges()
void LocationInformationWidget::rejectChanges()
{
+ emit stopFilterDiveSite();
Q_ASSERT(currentDs != NULL);
if (dive_site_is_empty(currentDs)) {
delete_dive_site(currentDs->uuid);
@@ -169,6 +180,7 @@ void LocationInformationWidget::rejectChanges()
void LocationInformationWidget::showEvent(QShowEvent *ev)
{
+ emit startFilterDiveSite(displayed_dive_site.uuid);
ui.diveSiteMessage->setCloseButtonVisible(false);
QGroupBox::showEvent(ev);
}
diff --git a/qt-ui/locationinformation.h b/qt-ui/locationinformation.h
index 49db2ce47..1fb6e8d43 100644
--- a/qt-ui/locationinformation.h
+++ b/qt-ui/locationinformation.h
@@ -41,7 +41,7 @@ signals:
void informationManagementEnded();
void coordinatesChanged();
void startFilterDiveSite(uint32_t uuid);
- void stopFilterFiveSite();
+ void stopFilterDiveSite();
private:
struct dive_site *currentDs;
Ui::LocationInformation ui;