mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	Filter out the dives that are not at dive_site.
Untested code to filter out dives that are not at the active dive_site. Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
		
							parent
							
								
									ee7e511372
								
							
						
					
					
						commit
						ffffccee93
					
				
					 4 changed files with 33 additions and 6 deletions
				
			
		|  | @ -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(); | ||||
|  |  | |||
|  | @ -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: | ||||
|  |  | |||
|  | @ -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); | ||||
| } | ||||
|  |  | |||
|  | @ -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; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue