summaryrefslogtreecommitdiffstats
path: root/qt-ui/maintab.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qt-ui/maintab.cpp')
-rw-r--r--qt-ui/maintab.cpp141
1 files changed, 69 insertions, 72 deletions
diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp
index 043fe0a6a..53d8e30b6 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"
@@ -60,15 +61,21 @@ 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());
+ locationManagementEditHelper = new LocationManagementEditHelper();
+ connect(locationManagementEditHelper, &LocationManagementEditHelper::setLineEditText,
+ ui.location, &QLineEdit::setText);
+ 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()));
QAction *action = new QAction(tr("Apply changes"), this);
@@ -244,27 +251,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()
@@ -386,6 +380,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;
}
@@ -754,6 +749,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);
}
@@ -810,12 +806,64 @@ void MainTab::reload()
mydive->what = displayed_dive.what; \
}
+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;
+ 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) {
+ // 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";
+ }
+ } 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);
+ } 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;
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
@@ -828,12 +876,8 @@ 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;
- }
+ 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
@@ -889,6 +933,7 @@ void MainTab::acceptChanges()
time_t offset = cd->when - displayed_dive.when;
MODIFY_SELECTED_DIVES(mydive->when -= offset;);
}
+
if (displayed_dive.dive_site_uuid != cd->dive_site_uuid)
MODIFY_SELECTED_DIVES(EDIT_VALUE(dive_site_uuid));
@@ -897,9 +942,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(
@@ -956,6 +998,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) {
@@ -1370,54 +1414,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)