diff options
Diffstat (limited to 'qt-ui')
-rw-r--r-- | qt-ui/filtermodels.cpp | 22 | ||||
-rw-r--r-- | qt-ui/filtermodels.h | 3 | ||||
-rw-r--r-- | qt-ui/locationinformation.cpp | 12 | ||||
-rw-r--r-- | qt-ui/locationinformation.h | 2 |
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; |