From 2cc65cd4b2c33e453d9c1e393d94e8cd3abe31b1 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Wed, 8 Jul 2015 14:27:17 -0300
Subject: [PATCH] Get the selected dive site from the list

Hooked a eventFilter on the QListView that displays our
dive sites so it would filter the keys enter and space,
storing the current dive_site uuid when that happens.

Also it stores the uuid on clicks.

Now we need to get that information on the acceptedChanges
and check if the uuid stored there == displayed_dive_site.uuid
and also if text != displayed_dive_site.name, because if the
user didn't clicked on anythign but only wrote stuff on
the LineEdit no dive site would be selected and so
uuid == displayed_dive_site.uuid ( wich would mean 'no changes')

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/locationinformation.cpp | 34 ++++++++++++++++++++++++++++++++++
 qt-ui/locationinformation.h   | 11 +++++++++++
 qt-ui/maintab.cpp             |  6 ++++++
 qt-ui/maintab.h               |  2 ++
 4 files changed, 53 insertions(+)

diff --git a/qt-ui/locationinformation.cpp b/qt-ui/locationinformation.cpp
index b3907a8..0be4b1e 100644
--- a/qt-ui/locationinformation.cpp
+++ b/qt-ui/locationinformation.cpp
@@ -324,3 +324,37 @@ void SimpleDiveSiteEditDialog::diveSiteNotes_editingFinished()
 	displayed_dive_site.notes = copy_string(qPrintable(ui->diveSiteNotes->toPlainText()));
 	changed_dive_site = true;
 }
+
+bool LocationManagementEditHelper::eventFilter(QObject *obj, QEvent *ev)
+{
+	QListView *view = qobject_cast<QListView*>(obj);
+	if(!view)
+		return false;
+
+	if(ev->type() == QEvent::Show) {
+		last_uuid = displayed_dive_site.uuid;
+	}
+
+	if(ev->type() == QEvent::KeyPress) {
+		QKeyEvent *keyEv = (QKeyEvent*) ev;
+		if(keyEv->key() == Qt::Key_Space || keyEv->key() == Qt::Key_Return) {
+			handleActivation(view->currentIndex());
+		}
+
+	}
+	return false;
+}
+
+void LocationManagementEditHelper::handleActivation(const QModelIndex& activated)
+{
+	if (!activated.isValid())
+		return;
+	QModelIndex  uuidIdx = activated.model()->index(
+		activated.row(), LocationInformationModel::UUID);
+	last_uuid = uuidIdx.data().toInt();
+	qDebug() << "Selected dive_site: " << last_uuid;
+}
+
+void LocationManagementEditHelper::resetDiveSiteUuid() {
+	last_uuid = displayed_dive_site.uuid;
+}
diff --git a/qt-ui/locationinformation.h b/qt-ui/locationinformation.h
index 42e4d5a..7027cd8 100644
--- a/qt-ui/locationinformation.h
+++ b/qt-ui/locationinformation.h
@@ -64,4 +64,15 @@ private:
 	Ui::SimpleDiveSiteEditDialog *ui;
 
 };
+
+class LocationManagementEditHelper : public QObject {
+Q_OBJECT
+public:
+	bool eventFilter(QObject *obj, QEvent *ev);
+	void handleActivation(const QModelIndex& activated);
+	void resetDiveSiteUuid();
+private:
+	uint32_t last_uuid;
+
+};
 #endif
diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp
index 0ff44ae..6c44346 100644
--- a/qt-ui/maintab.cpp
+++ b/qt-ui/maintab.cpp
@@ -67,6 +67,11 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent),
 	completer->setCaseSensitivity(Qt::CaseInsensitive);
 	completerListview->setItemDelegate(new LocationFilterDelegate());
 
+	locationManagementEditHelper = new LocationManagementEditHelper();
+	completerListview->installEventFilter(locationManagementEditHelper);
+	connect(completerListview, &QAbstractItemView::activated,
+		locationManagementEditHelper, &LocationManagementEditHelper::handleActivation);
+
 	ui.location->setCompleter(completer);
 	connect(ui.addDiveSite, SIGNAL(clicked()), this, SLOT(showDiveSiteSimpleEdit()));
 	connect(ui.geocodeButton, SIGNAL(clicked()), this, SLOT(reverseGeocode()));
@@ -386,6 +391,7 @@ void MainTab::enableEdition(EditMode newEditMode)
 			displayMessage(tr("Multiple dives are being edited."));
 		} else {
 			displayMessage(tr("This dive is being edited."));
+			locationManagementEditHelper->resetDiveSiteUuid();
 		}
 		editMode = newEditMode != NONE ? newEditMode : DIVE;
 	}
diff --git a/qt-ui/maintab.h b/qt-ui/maintab.h
index 306aee6..7f0ba1c 100644
--- a/qt-ui/maintab.h
+++ b/qt-ui/maintab.h
@@ -22,6 +22,7 @@ class CylindersModel;
 class ExtraDataModel;
 class DivePictureModel;
 class QCompleter;
+class LocationManagementEditHelper;
 
 struct Completers {
 	QCompleter *divemaster;
@@ -121,6 +122,7 @@ private:
 	dive_trip_t *currentTrip;
 	dive_trip_t displayedTrip;
 	bool acceptingEdit;
+	LocationManagementEditHelper *locationManagementEditHelper;
 };
 
 #endif // MAINTAB_H
-- 
2.4.5

_______________________________________________
subsurface mailing list
[email protected]
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to