From 3b2a02dffaeaa788e08c7ba07af14df7ef055489 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Wed, 8 Jul 2015 14:27:17 -0300 Subject: Get the selected dive site from the list Hooked up an 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 when processing 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 click on anything 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 Signed-off-by: Dirk Hohndel --- qt-ui/maintab.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'qt-ui/maintab.cpp') diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index 043fe0a6a..88b607d1b 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; } -- cgit v1.2.3-70-g09d2 From c658f2878b540407a65af8c57b3e1bb3cc7c78c4 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Mon, 13 Jul 2015 15:14:46 -0300 Subject: Select right divesite on click Signed-off-by: Tomaz Canabrava Signed-off-by: Dirk Hohndel --- qt-ui/locationinformation.cpp | 10 +++++++-- qt-ui/locationinformation.h | 1 + qt-ui/maintab.cpp | 48 +++++++++++++++++++++++++++++++++++-------- qt-ui/maintab.h | 1 + 4 files changed, 49 insertions(+), 11 deletions(-) (limited to 'qt-ui/maintab.cpp') diff --git a/qt-ui/locationinformation.cpp b/qt-ui/locationinformation.cpp index 0be4b1e65..b9d985bd7 100644 --- a/qt-ui/locationinformation.cpp +++ b/qt-ui/locationinformation.cpp @@ -332,7 +332,8 @@ bool LocationManagementEditHelper::eventFilter(QObject *obj, QEvent *ev) return false; if(ev->type() == QEvent::Show) { - last_uuid = displayed_dive_site.uuid; + last_uuid = 0; + qDebug() << "EventFilter: " << last_uuid; } if(ev->type() == QEvent::KeyPress) { @@ -356,5 +357,10 @@ void LocationManagementEditHelper::handleActivation(const QModelIndex& activated } void LocationManagementEditHelper::resetDiveSiteUuid() { - last_uuid = displayed_dive_site.uuid; + last_uuid = 0; + qDebug() << "Reset: " << last_uuid; +} + +uint32_t LocationManagementEditHelper::diveSiteUuid() const { + return last_uuid; } diff --git a/qt-ui/locationinformation.h b/qt-ui/locationinformation.h index 7027cd8fa..b1746f79e 100644 --- a/qt-ui/locationinformation.h +++ b/qt-ui/locationinformation.h @@ -71,6 +71,7 @@ public: bool eventFilter(QObject *obj, QEvent *ev); void handleActivation(const QModelIndex& activated); void resetDiveSiteUuid(); + uint32_t diveSiteUuid() const; private: uint32_t last_uuid; diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index 88b607d1b..c68138fae 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -23,6 +23,7 @@ #include "divelocationmodel.h" #include "divesite.h" #include "locationinformation.h" +#include "divesite.h" #if defined(FBSUPPORT) #include "socialnetworks.h" @@ -760,6 +761,7 @@ void MainTab::updateDiveInfo(bool clear) else ui.cylinders->view()->hideColumn(CylindersModel::USE); + qDebug() << "Set the current dive site:" << displayed_dive.dive_site_uuid; emit diveSiteChanged(displayed_dive.dive_site_uuid); } @@ -816,6 +818,36 @@ void MainTab::reload() mydive->what = displayed_dive.what; \ } +void MainTab::updateDisplayedDiveDiveSite() +{ + const QString new_name = ui.location->text(); + const QString orig_name = displayed_dive_site.name; + const uint32_t orig_uuid = displayed_dive_site.uuid; + const uint32_t new_uuid = locationManagementEditHelper->diveSiteUuid(); + + if(orig_uuid) { + if (new_uuid && orig_uuid != new_uuid) { + displayed_dive.dive_site_uuid = new_uuid; + copy_dive_site(get_dive_site_by_uuid(displayed_dive.dive_site_uuid), &displayed_dive_site); + } else if (new_name.count() && orig_name != new_name) { + displayed_dive.dive_site_uuid = find_or_create_dive_site_with_name(qPrintable(new_name)); + copy_dive_site(get_dive_site_by_uuid(displayed_dive.dive_site_uuid), &displayed_dive_site); + } else { + qDebug() << "Current divesite is the same as informed"; + } + } else { + if (new_uuid) { + displayed_dive.dive_site_uuid = new_uuid; + copy_dive_site(get_dive_site_by_uuid(displayed_dive.dive_site_uuid), &displayed_dive_site); + } else if (new_name.count()) { + displayed_dive.dive_site_uuid = find_or_create_dive_site_with_name(qPrintable(new_name)); + copy_dive_site(get_dive_site_by_uuid(displayed_dive.dive_site_uuid), &displayed_dive_site); + } else { + qDebug() << "No divesite will be set"; + } + } +} + void MainTab::acceptChanges() { int i, addedId = -1; @@ -834,12 +866,9 @@ void MainTab::acceptChanges() struct dive *added_dive = clone_dive(&displayed_dive); record_dive(added_dive); addedId = added_dive->id; - if (displayed_dive_site.uuid) - copy_dive_site(&displayed_dive_site, get_dive_site_by_uuid(displayed_dive_site.uuid)); - else if (ui.location->text().count()) { - uint32_t uuid = create_dive_site(qPrintable(ui.location->text())); - added_dive->dive_site_uuid = uuid; - } + updateDisplayedDiveDiveSite(); + get_dive_by_uniq_id(added_dive->id)->dive_site_uuid = displayed_dive_site.uuid; + // unselect everything as far as the UI is concerned and select the new // dive - we'll have to undo/redo this later after we resort the dive_table // but we need the dive selected for the middle part of this function - this @@ -895,6 +924,8 @@ void MainTab::acceptChanges() time_t offset = cd->when - displayed_dive.when; MODIFY_SELECTED_DIVES(mydive->when -= offset;); } + + updateDisplayedDiveDiveSite(); if (displayed_dive.dive_site_uuid != cd->dive_site_uuid) MODIFY_SELECTED_DIVES(EDIT_VALUE(dive_site_uuid)); @@ -903,9 +934,6 @@ void MainTab::acceptChanges() saveTaggedStrings(); saveTags(); - if (displayed_dive_site.uuid) - copy_dive_site(&displayed_dive_site, get_dive_site_by_uuid(displayed_dive_site.uuid)); - if (editMode != ADD && cylindersModel->changed) { mark_divelist_changed(true); MODIFY_SELECTED_DIVES( @@ -962,6 +990,8 @@ void MainTab::acceptChanges() cd->weightsystem[i].description = copy_string(displayed_dive.weightsystem[i].description); } } + + // each dive that was selected might have had the temperatures in its active divecomputer changed // so re-populate the temperatures - easiest way to do this is by calling fixup_dive for_each_dive (i, d) { diff --git a/qt-ui/maintab.h b/qt-ui/maintab.h index 7f0ba1ca3..6a6b9d16a 100644 --- a/qt-ui/maintab.h +++ b/qt-ui/maintab.h @@ -123,6 +123,7 @@ private: dive_trip_t displayedTrip; bool acceptingEdit; LocationManagementEditHelper *locationManagementEditHelper; + void updateDisplayedDiveDiveSite(); }; #endif // MAINTAB_H -- cgit v1.2.3-70-g09d2 From 1a68e7985b1aad038b0a0d337ab5d606aa43f64c Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Mon, 13 Jul 2015 15:38:46 -0300 Subject: Move code that handles location to a sane place Signed-off-by: Tomaz Canabrava Signed-off-by: Dirk Hohndel --- qt-ui/maintab.cpp | 70 ++++++++++++++----------------------------------------- qt-ui/maintab.h | 2 +- 2 files changed, 19 insertions(+), 53 deletions(-) (limited to 'qt-ui/maintab.cpp') diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index c68138fae..66e42e3c4 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -818,13 +818,24 @@ void MainTab::reload() mydive->what = displayed_dive.what; \ } -void MainTab::updateDisplayedDiveDiveSite() +void MainTab::updateDisplayedDiveSite() { const QString new_name = ui.location->text(); const QString orig_name = displayed_dive_site.name; const uint32_t orig_uuid = displayed_dive_site.uuid; const uint32_t new_uuid = locationManagementEditHelper->diveSiteUuid(); + qDebug() << "Updating Displayed Dive Site"; + if(current_dive) { + struct dive_site *ds_from_dive = get_dive_site_by_uuid(current_dive->dive_site_uuid); + if (!dive_site_has_gps_location(ds_from_dive) && + same_string(displayed_dive_site.notes, "SubsurfaceWebservice")) { + ds_from_dive->latitude = displayed_dive_site.latitude; + ds_from_dive->longitude = displayed_dive_site.longitude; + delete_dive_site(displayed_dive_site.uuid); + } + } + if(orig_uuid) { if (new_uuid && orig_uuid != new_uuid) { displayed_dive.dive_site_uuid = new_uuid; @@ -835,7 +846,7 @@ void MainTab::updateDisplayedDiveDiveSite() } else { qDebug() << "Current divesite is the same as informed"; } - } else { + } else if (!orig_uuid) { if (new_uuid) { displayed_dive.dive_site_uuid = new_uuid; copy_dive_site(get_dive_site_by_uuid(displayed_dive.dive_site_uuid), &displayed_dive_site); @@ -854,6 +865,10 @@ void MainTab::acceptChanges() struct dive *d; bool do_replot = false; + if(ui.location->hasFocus()) { + this->setFocus(); + } + acceptingEdit = true; tabBar()->setTabIcon(0, QIcon()); // Notes tabBar()->setTabIcon(1, QIcon()); // Equipment @@ -866,7 +881,6 @@ void MainTab::acceptChanges() struct dive *added_dive = clone_dive(&displayed_dive); record_dive(added_dive); addedId = added_dive->id; - updateDisplayedDiveDiveSite(); get_dive_by_uniq_id(added_dive->id)->dive_site_uuid = displayed_dive_site.uuid; // unselect everything as far as the UI is concerned and select the new @@ -925,7 +939,6 @@ void MainTab::acceptChanges() MODIFY_SELECTED_DIVES(mydive->when -= offset;); } - updateDisplayedDiveDiveSite(); if (displayed_dive.dive_site_uuid != cd->dive_site_uuid) MODIFY_SELECTED_DIVES(EDIT_VALUE(dive_site_uuid)); @@ -1406,54 +1419,7 @@ void MainTab::on_location_editingFinished() return; } - QString currText = ui.location->text(); - - struct dive_site *ds; - int idx; - bool found = false; - for_each_dive_site (idx,ds) { - if (same_string(ds->name, qPrintable(currText))) { - found = true; - break; - } - } - - if (!found) { - uint32_t uuid = create_dive_site(qPrintable(ui.location->text())); - ds = get_dive_site_by_uuid(uuid); - if (same_string(displayed_dive_site.notes, "SubsurfaceWebservice")) { - ds->latitude = displayed_dive_site.latitude; - ds->longitude = displayed_dive_site.longitude; - delete_dive_site(displayed_dive_site.uuid); - } - displayed_dive.dive_site_uuid = uuid; - copy_dive_site(get_dive_site_by_uuid(uuid), &displayed_dive_site); - markChangedWidget(ui.location); - - LocationInformationModel::instance()->update(); - emit diveSiteChanged(uuid); - return; - } - - if (!get_dive_site(idx)) - return; - - if (current_dive) { - struct dive_site *ds_from_dive = get_dive_site_by_uuid(displayed_dive.dive_site_uuid); - if(ds_from_dive && ui.location->text() == ds_from_dive->name) - return; - ds_from_dive = get_dive_site(idx); - if (!dive_site_has_gps_location(ds_from_dive) && - same_string(displayed_dive_site.notes, "SubsurfaceWebservice")) { - ds_from_dive->latitude = displayed_dive_site.latitude; - ds_from_dive->longitude = displayed_dive_site.longitude; - delete_dive_site(displayed_dive_site.uuid); - } - displayed_dive.dive_site_uuid = ds_from_dive->uuid; - copy_dive_site(get_dive_site_by_uuid(ds_from_dive->uuid), &displayed_dive_site); - markChangedWidget(ui.location); - emit diveSiteChanged(ds_from_dive->uuid); - } + updateDisplayedDiveSite(); } void MainTab::on_suit_textChanged(const QString &text) diff --git a/qt-ui/maintab.h b/qt-ui/maintab.h index 6a6b9d16a..1e3f95033 100644 --- a/qt-ui/maintab.h +++ b/qt-ui/maintab.h @@ -123,7 +123,7 @@ private: dive_trip_t displayedTrip; bool acceptingEdit; LocationManagementEditHelper *locationManagementEditHelper; - void updateDisplayedDiveDiveSite(); + void updateDisplayedDiveSite(); }; #endif // MAINTAB_H -- cgit v1.2.3-70-g09d2 From 49ab30ae8b65c3ad443a5824ae5f9554e88c7a39 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Mon, 13 Jul 2015 17:11:03 -0300 Subject: Change Location Management to make Linus Happy Do not overwrite a dive site if the name is the same as any other dive site, create a new one and duplicate the information. Signed-off-by: Tomaz Canabrava Signed-off-by: Dirk Hohndel --- qt-ui/maintab.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'qt-ui/maintab.cpp') diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index 66e42e3c4..2efaa520c 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -841,8 +841,15 @@ void MainTab::updateDisplayedDiveSite() displayed_dive.dive_site_uuid = new_uuid; copy_dive_site(get_dive_site_by_uuid(displayed_dive.dive_site_uuid), &displayed_dive_site); } else if (new_name.count() && orig_name != new_name) { - displayed_dive.dive_site_uuid = find_or_create_dive_site_with_name(qPrintable(new_name)); - copy_dive_site(get_dive_site_by_uuid(displayed_dive.dive_site_uuid), &displayed_dive_site); + // As per linus request.: If I enter the name of a dive site, + // do not select a new one, but "clone" the old one and copy + // the information of it, just changing it's name. + uint32_t new_ds_uuid = create_dive_site(NULL); + struct dive_site *new_ds = get_dive_site_by_uuid(new_ds_uuid); + copy_dive_site(&displayed_dive_site, new_ds); + new_ds->name = copy_string(qPrintable(new_name)); + displayed_dive.dive_site_uuid = new_ds->uuid; + copy_dive_site(new_ds, &displayed_dive_site); } else { qDebug() << "Current divesite is the same as informed"; } -- cgit v1.2.3-70-g09d2 From 9510f40db42c60d34577f79180d929a88d261781 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Tue, 14 Jul 2015 14:29:48 -0300 Subject: Remove quick edit dive site widget Voted down by common consent. Signed-off-by: Tomaz Canabrava Signed-off-by: Dirk Hohndel --- qt-ui/locationinformation.cpp | 98 ------------------------------------------- qt-ui/locationinformation.h | 21 ---------- qt-ui/maintab.cpp | 14 ------- qt-ui/maintab.h | 1 - qt-ui/maintab.ui | 27 ++++-------- qt-ui/simpledivesiteedit.ui | 68 ------------------------------ 6 files changed, 8 insertions(+), 221 deletions(-) delete mode 100644 qt-ui/simpledivesiteedit.ui (limited to 'qt-ui/maintab.cpp') diff --git a/qt-ui/locationinformation.cpp b/qt-ui/locationinformation.cpp index b9d985bd7..47ceb654e 100644 --- a/qt-ui/locationinformation.cpp +++ b/qt-ui/locationinformation.cpp @@ -227,104 +227,6 @@ void LocationInformationWidget::resetPallete() ui.diveSiteNotes->setPalette(p); } -SimpleDiveSiteEditDialog::SimpleDiveSiteEditDialog(QWidget *parent) : - QDialog(parent, Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::Popup), - ui(new Ui::SimpleDiveSiteEditDialog()), changed_dive_site(false) -{ - ui->setupUi(this); - ui->diveSiteDescription->installEventFilter(this); - ui->diveSiteNotes->installEventFilter(this); -} - -SimpleDiveSiteEditDialog::~SimpleDiveSiteEditDialog() -{ - delete ui; -} - -bool SimpleDiveSiteEditDialog::eventFilter(QObject *obj, QEvent *ev) -{ - if (ev->type() != QEvent::FocusOut) - return false; - - if (obj == ui->diveSiteDescription) { - diveSiteDescription_editingFinished(); - } else if (obj == ui->diveSiteNotes) { - diveSiteNotes_editingFinished(); - } - return false; -} - -void SimpleDiveSiteEditDialog::showEvent(QShowEvent *ev) -{ - const int heigth = 275; - const int width = 450; - - // Position. - QDialog::showEvent(ev); - QRect currGeometry = geometry(); - currGeometry.setX(QCursor::pos().x() + 15); - currGeometry.setY(QCursor::pos().y() - heigth / 2); - currGeometry.setWidth(width); - currGeometry.setHeight(heigth); - setGeometry(currGeometry); - ev->accept(); - - //Da - ui->diveSiteName->setText(displayed_dive_site.name); - ui->diveSiteNotes->setPlainText(displayed_dive_site.notes); - ui->diveSiteDescription->setPlainText(displayed_dive_site.description); - - const char *gps_text = printGPSCoords(displayed_dive_site.latitude.udeg, displayed_dive_site.longitude.udeg); - ui->diveSiteCoordinates->setText(QString(gps_text)); - free( (void*) gps_text); - - changed_dive_site = false; -} - -void SimpleDiveSiteEditDialog::on_diveSiteName_editingFinished() -{ - if (ui->diveSiteName->text() == displayed_dive_site.name) - return; - free(displayed_dive_site.name); - displayed_dive_site.name = copy_string(qPrintable(ui->diveSiteName->text())); - changed_dive_site = true; -} - -void SimpleDiveSiteEditDialog::on_diveSiteCoordinates_editingFinished() -{ - double lat, lon; - uint32_t uLat, uLon; - - parseGpsText(ui->diveSiteCoordinates->text(), &lat, &lon); - uLat = lat * 1000000; - uLon = lon * 1000000; - - if (uLat == displayed_dive_site.latitude.udeg && uLon == displayed_dive_site.longitude.udeg) - return; - - displayed_dive_site.latitude.udeg = uLat; - displayed_dive_site.longitude.udeg = uLon; - changed_dive_site = true; -} - -void SimpleDiveSiteEditDialog::diveSiteDescription_editingFinished() -{ - if (ui->diveSiteDescription->toPlainText() == displayed_dive_site.description) - return; - free(displayed_dive_site.description); - displayed_dive_site.description = copy_string(qPrintable(ui->diveSiteDescription->toPlainText())); - changed_dive_site = true; -} - -void SimpleDiveSiteEditDialog::diveSiteNotes_editingFinished() -{ - if (ui->diveSiteNotes->toPlainText() == displayed_dive_site.notes) - return; - free(displayed_dive_site.notes); - 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(obj); diff --git a/qt-ui/locationinformation.h b/qt-ui/locationinformation.h index b1746f79e..b37731969 100644 --- a/qt-ui/locationinformation.h +++ b/qt-ui/locationinformation.h @@ -44,27 +44,6 @@ private: mode current_mode; }; - -#include "ui_simpledivesiteedit.h" -class SimpleDiveSiteEditDialog : public QDialog { -Q_OBJECT -public: - SimpleDiveSiteEditDialog(QWidget *parent); - virtual ~SimpleDiveSiteEditDialog(); - bool changed_dive_site; - bool eventFilter(QObject *obj, QEvent *ev); -public slots: - void on_diveSiteName_editingFinished(); - void on_diveSiteCoordinates_editingFinished(); - void diveSiteDescription_editingFinished(); - void diveSiteNotes_editingFinished(); -protected: - void showEvent(QShowEvent *ev); -private: - Ui::SimpleDiveSiteEditDialog *ui; - -}; - class LocationManagementEditHelper : public QObject { Q_OBJECT public: diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index 2efaa520c..abb6af9bd 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -74,7 +74,6 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent), locationManagementEditHelper, &LocationManagementEditHelper::handleActivation); ui.location->setCompleter(completer); - connect(ui.addDiveSite, SIGNAL(clicked()), this, SLOT(showDiveSiteSimpleEdit())); connect(ui.geocodeButton, SIGNAL(clicked()), this, SLOT(reverseGeocode())); QAction *action = new QAction(tr("Apply changes"), this); @@ -250,27 +249,14 @@ void MainTab::setCurrentLocationIndex() } } -void MainTab::showDiveSiteSimpleEdit() -{ - if (ui.location->text().isEmpty()) - return; - SimpleDiveSiteEditDialog dlg(this); - dlg.exec(); - if (dlg.changed_dive_site) { - markChangedWidget(ui.location); - } -} - void MainTab::enableGeoLookupEdition() { ui.waitingSpinner->stop(); - ui.addDiveSite->show(); } void MainTab::disableGeoLookupEdition() { ui.waitingSpinner->start(); - ui.addDiveSite->hide(); } void MainTab::toggleTriggeredColumn() diff --git a/qt-ui/maintab.h b/qt-ui/maintab.h index 1e3f95033..bcfb3340e 100644 --- a/qt-ui/maintab.h +++ b/qt-ui/maintab.h @@ -98,7 +98,6 @@ slots: void enableGeoLookupEdition(); void disableGeoLookupEdition(); void setCurrentLocationIndex(); - void showDiveSiteSimpleEdit(); void reverseGeocode(); private: Ui::MainTab ui; diff --git a/qt-ui/maintab.ui b/qt-ui/maintab.ui index 3318bf788..c83d12ec3 100644 --- a/qt-ui/maintab.ui +++ b/qt-ui/maintab.ui @@ -56,7 +56,7 @@ 0 0 449 - 751 + 758 @@ -167,15 +167,15 @@ + + 0 + 5 5 - - 0 - @@ -208,17 +208,6 @@ - - - - ... - - - - :/edit:/edit - - - @@ -658,8 +647,8 @@ 0 0 - 286 - 300 + 317 + 365 @@ -999,8 +988,8 @@ 0 0 - 297 - 177 + 331 + 220 diff --git a/qt-ui/simpledivesiteedit.ui b/qt-ui/simpledivesiteedit.ui deleted file mode 100644 index 7153023da..000000000 --- a/qt-ui/simpledivesiteedit.ui +++ /dev/null @@ -1,68 +0,0 @@ - - - SimpleDiveSiteEditDialog - - - - 0 - 0 - 449 - 338 - - - - Dialog - - - - - - Name - - - - - - - - - - Coordinates - - - - - - - - - - Description - - - - - - - - - - - - - Notes - - - - - - - Dive site quick edit. Hit ESC or click outside to close - - - - - - - - -- cgit v1.2.3-70-g09d2 From cd3f10d5ad4124960b66112074797a16517117e9 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Tue, 14 Jul 2015 18:43:47 -0300 Subject: Offer an option to just complete the text Make the kids fight no more. Signed-off-by: Tomaz Canabrava Signed-off-by: Dirk Hohndel --- qt-models/divelocationmodel.cpp | 53 ++++++++++++++++++++++++++++++++++++----- qt-models/divelocationmodel.h | 4 ++++ qt-ui/maintab.cpp | 3 ++- qt-ui/modeldelegates.cpp | 22 +++++++++++++++-- 4 files changed, 73 insertions(+), 9 deletions(-) (limited to 'qt-ui/maintab.cpp') diff --git a/qt-models/divelocationmodel.cpp b/qt-models/divelocationmodel.cpp index 42af4f63a..bddca8f77 100644 --- a/qt-models/divelocationmodel.cpp +++ b/qt-models/divelocationmodel.cpp @@ -1,6 +1,8 @@ #include "divelocationmodel.h" #include "dive.h" #include +#include +#include bool dive_site_less_than(dive_site *a, dive_site *b) { @@ -13,7 +15,9 @@ LocationInformationModel *LocationInformationModel::instance() return self; } -LocationInformationModel::LocationInformationModel(QObject *obj) : QAbstractTableModel(obj), internalRowCount(0) +LocationInformationModel::LocationInformationModel(QObject *obj) : QAbstractTableModel(obj), + internalRowCount(0), + textField(NULL) { } @@ -25,19 +29,45 @@ int LocationInformationModel::columnCount(const QModelIndex &parent) const int LocationInformationModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent); - return internalRowCount; + return internalRowCount + 1; } QVariant LocationInformationModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); - struct dive_site *ds = get_dive_site(index.row()); + + // Special case to handle the 'create dive site' with name. + if (index.row() == 0) { + if (index.column() == UUID) + return 0; + switch(role) { + case Qt::DisplayRole : { + struct dive_site *ds; + int i; + for_each_dive_site(i, ds) { + QString dsName(ds->name); + if (dsName.startsWith(textField->text())) + return dsName; + } + return textField->text(); + } + case Qt::ToolTipRole : { + return QString(tr("Create dive site")); + } + case Qt::EditRole : return textField->text(); + case Qt::DecorationRole : return QIcon(":plus"); + } + } + + // The dive sites are -1 because of the first item. + struct dive_site *ds = get_dive_site(index.row()-1); if (!ds) return QVariant(); switch(role) { + case Qt::EditRole: case Qt::DisplayRole : switch(index.column()) { case UUID: return ds->uuid; @@ -52,11 +82,22 @@ QVariant LocationInformationModel::data(const QModelIndex &index, int role) cons case TAXONOMY_3: return "TODO"; } break; + case Qt::DecorationRole : { + if (dive_site_has_gps_location(ds)) + return QIcon(":geocode"); + else + return QVariant(); + } } return QVariant(); } +void LocationInformationModel::setFirstRowTextField(QLineEdit *t) +{ + textField = t; +} + void LocationInformationModel::update() { beginResetModel(); @@ -71,7 +112,7 @@ int32_t LocationInformationModel::addDiveSite(const QString& name, int lon, int latitude.udeg = lat; longitude.udeg = lon; - beginInsertRows(QModelIndex(), dive_site_table.nr, dive_site_table.nr); + beginInsertRows(QModelIndex(), dive_site_table.nr + 1, dive_site_table.nr + 1); uint32_t uuid = create_dive_site_with_gps(name.toUtf8().data(), latitude, longitude); qSort(dive_site_table.dive_sites, dive_site_table.dive_sites + dive_site_table.nr, dive_site_less_than); internalRowCount = dive_site_table.nr; @@ -81,7 +122,7 @@ int32_t LocationInformationModel::addDiveSite(const QString& name, int lon, int bool LocationInformationModel::setData(const QModelIndex &index, const QVariant &value, int role) { - if (!index.isValid()) + if (!index.isValid() || index.row() == 0) return false; if (role != Qt::EditRole) @@ -99,7 +140,7 @@ bool LocationInformationModel::removeRows(int row, int count, const QModelIndex if(row >= rowCount()) return false; - beginRemoveRows(QModelIndex(), row, row); + beginRemoveRows(QModelIndex(), row + 1, row + 1); struct dive_site *ds = get_dive_site(row); if (ds) delete_dive_site(ds->uuid); diff --git a/qt-models/divelocationmodel.h b/qt-models/divelocationmodel.h index 8cae3a08a..ee52d2ba4 100644 --- a/qt-models/divelocationmodel.h +++ b/qt-models/divelocationmodel.h @@ -5,6 +5,8 @@ #include #include +class QLineEdit; + class LocationInformationModel : public QAbstractTableModel { Q_OBJECT public: @@ -16,12 +18,14 @@ public: int32_t addDiveSite(const QString& name, int lat = 0, int lon = 0); bool setData(const QModelIndex &index, const QVariant &value, int role); bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex()); + void setFirstRowTextField(QLineEdit *textField); public slots: void update(); private: LocationInformationModel(QObject *obj = 0); int internalRowCount; + QLineEdit *textField; }; class GeoReferencingOptionsModel : public QStringListModel { diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index abb6af9bd..05196254a 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -61,10 +61,11 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent), QCompleter *completer = new QCompleter(); QListView *completerListview = new QListView(); + LocationInformationModel::instance()->setFirstRowTextField(ui.location); + completer->setPopup(completerListview); completer->setModel(LocationInformationModel::instance()); completer->setCompletionColumn(LocationInformationModel::NAME); - completer->setCompletionRole(Qt::DisplayRole); completer->setCaseSensitivity(Qt::CaseInsensitive); completerListview->setItemDelegate(new LocationFilterDelegate()); diff --git a/qt-ui/modeldelegates.cpp b/qt-ui/modeldelegates.cpp index 3357d3909..953c16b87 100644 --- a/qt-ui/modeldelegates.cpp +++ b/qt-ui/modeldelegates.cpp @@ -495,14 +495,22 @@ void LocationFilterDelegate::paint(QPainter *painter, const QStyleOptionViewItem QStyledItemDelegate::initStyleOption(&opt, index); QBrush bg; QString diveSiteName = index.data().toString(); - + QString bottomText; + QIcon icon = index.data(Qt::DecorationRole).value(); struct dive_site *ds = get_dive_site_by_uuid( index.model()->data(index.model()->index(index.row(),0)).toInt() ); + + //Special case: do not show name, but instead, show + if (index.row() == 0) { + diveSiteName = index.data().toString(); + bottomText = index.data(Qt::ToolTipRole).toString(); + goto print_part; + } + if (!ds) return; - QString bottomText; for (int i = 0; i < ds->taxonomy.nr; i++) { if(ds->taxonomy.category[i].category == TC_NONE) continue; @@ -517,11 +525,13 @@ void LocationFilterDelegate::paint(QPainter *painter, const QStyleOptionViewItem free( (void*) gpsCoords); } + print_part: fontBigger.setPointSize(fontBigger.pointSize() + 1); fontBigger.setBold(true); initStyleOption(&opt, index); opt.text = QString(); + opt.icon = QIcon(); qApp->style()->drawControl(QStyle::CE_ItemViewItem, &opt, painter, NULL); painter->save(); @@ -539,6 +549,14 @@ void LocationFilterDelegate::paint(QPainter *painter, const QStyleOptionViewItem painter->setBrush(option.palette.brightText()); painter->drawText(option.rect.x(),option.rect.y() + fmBigger.boundingRect("YH").height() * 2, bottomText); painter->restore(); + + if (!icon.isNull()) { + painter->save(); + painter->drawPixmap( + option.rect.x() + option.rect.width() - 24, + option.rect.y() + option.rect.height() - 24, icon.pixmap(20,20)); + painter->restore(); + } } QSize LocationFilterDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const -- cgit v1.2.3-70-g09d2 From 536469107d94f265a03e44fcc755b92b9016cbca Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Tue, 14 Jul 2015 19:09:37 -0300 Subject: Fix selecting the first index The way a QCompleter works is that it grabs whatever data it has in the completerRole and sets it back on the line edit. I Bypassed the QCompleter delegate to show something other than the completerRole (so, for instance, if you write 'B', you could get 'Blue Hole' as the returned text, but in fact the QCompleter has the 'B' as internal string (because of the weird - and wrong way in which we are dealing with completion - trying to complete for something that's not inside the model yet). So I hooked up a signal that will listen to the complete's index, and if it's the first row() it's surely the special case - then we bypass QCompleter return string and use our own. Signed-off-by: Tomaz Canabrava Signed-off-by: Dirk Hohndel --- qt-ui/locationinformation.cpp | 6 ++++++ qt-ui/locationinformation.h | 2 ++ qt-ui/maintab.cpp | 3 ++- 3 files changed, 10 insertions(+), 1 deletion(-) (limited to 'qt-ui/maintab.cpp') diff --git a/qt-ui/locationinformation.cpp b/qt-ui/locationinformation.cpp index 47ceb654e..39a8341cd 100644 --- a/qt-ui/locationinformation.cpp +++ b/qt-ui/locationinformation.cpp @@ -255,6 +255,12 @@ void LocationManagementEditHelper::handleActivation(const QModelIndex& activated QModelIndex uuidIdx = activated.model()->index( activated.row(), LocationInformationModel::UUID); last_uuid = uuidIdx.data().toInt(); + + // Special case: first option, add dive site. + if (activated.row() == 0) { + qDebug() << "Setting to " << activated.data().toString(); + emit setLineEditText(activated.data().toString()); + } qDebug() << "Selected dive_site: " << last_uuid; } diff --git a/qt-ui/locationinformation.h b/qt-ui/locationinformation.h index b37731969..b55a1b42c 100644 --- a/qt-ui/locationinformation.h +++ b/qt-ui/locationinformation.h @@ -51,6 +51,8 @@ public: void handleActivation(const QModelIndex& activated); void resetDiveSiteUuid(); uint32_t diveSiteUuid() const; +signals: + void setLineEditText(const QString& text); private: uint32_t last_uuid; diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index 05196254a..53d8e30b6 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -62,7 +62,6 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent), QCompleter *completer = new QCompleter(); QListView *completerListview = new QListView(); LocationInformationModel::instance()->setFirstRowTextField(ui.location); - completer->setPopup(completerListview); completer->setModel(LocationInformationModel::instance()); completer->setCompletionColumn(LocationInformationModel::NAME); @@ -70,6 +69,8 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent), completerListview->setItemDelegate(new LocationFilterDelegate()); locationManagementEditHelper = new LocationManagementEditHelper(); + connect(locationManagementEditHelper, &LocationManagementEditHelper::setLineEditText, + ui.location, &QLineEdit::setText); completerListview->installEventFilter(locationManagementEditHelper); connect(completerListview, &QAbstractItemView::activated, locationManagementEditHelper, &LocationManagementEditHelper::handleActivation); -- cgit v1.2.3-70-g09d2