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
