diff --git a/desktop-widgets/tab-widgets/maintab.cpp b/desktop-widgets/tab-widgets/maintab.cpp index adb73526c..244c6465a 100644 --- a/desktop-widgets/tab-widgets/maintab.cpp +++ b/desktop-widgets/tab-widgets/maintab.cpp @@ -21,8 +21,10 @@ #include "qt-models/weightmodel.h" #include "qt-models/divecomputerextradatamodel.h" #include "qt-models/divelocationmodel.h" +#include "qt-models/filtermodels.h" #include "core/divesite.h" #include "desktop-widgets/locationinformation.h" +#include "desktop-widgets/locationinformation.h" #include "TabDiveExtraInfo.h" #include "TabDiveInformation.h" @@ -201,6 +203,7 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent), connect(ui.diveNotesMessage, &KMessageWidget::showAnimationFinished, ui.location, &DiveLocationLineEdit::fixPopupPosition); + connect(this, SIGNAL(diveSiteAdded(const QString &)), LocationFilterModel::instance(), SLOT(addName(const QString &))); // enable URL clickability in notes: new TextHyperlinkEventFilter(ui.notes);//destroyed when ui.notes is destroyed @@ -703,8 +706,10 @@ uint32_t MainTab::updateDiveSite(uint32_t pickedUuid, int divenr) return origUuid; if (pickedUuid == RECENTLY_ADDED_DIVESITE) { - pickedUuid = create_dive_site(ui.location->text().isEmpty() ? qPrintable(tr("New dive site")) : qPrintable(ui.location->text()), displayed_dive.when); + QString name = ui.location->text().isEmpty() ? tr("New dive site") : ui.location->text(); + pickedUuid = create_dive_site(qPrintable(name), displayed_dive.when); createdNewDive = true; + emit diveSiteAdded(name); } newDs = get_dive_site_by_uuid(pickedUuid); diff --git a/desktop-widgets/tab-widgets/maintab.h b/desktop-widgets/tab-widgets/maintab.h index 03eb5f320..74872ea08 100644 --- a/desktop-widgets/tab-widgets/maintab.h +++ b/desktop-widgets/tab-widgets/maintab.h @@ -60,6 +60,7 @@ signals: void addDiveFinished(); void dateTimeChanged(); void diveSiteChanged(struct dive_site * ds); + void diveSiteAdded(const QString &); public slots: void addCylinder_clicked(); diff --git a/qt-models/filtermodels.cpp b/qt-models/filtermodels.cpp index 568fcd9e2..07ec1a250 100644 --- a/qt-models/filtermodels.cpp +++ b/qt-models/filtermodels.cpp @@ -333,6 +333,20 @@ void LocationFilterModel::changeName(const QString &oldName, const QString &newN checkState[newIndex] = true; } +void LocationFilterModel::addName(const QString &newName) +{ + // If any item is checked and a new location is added, add the name + // of the new location in front of the list and mark it as checked. + // Thus, on subsequent repopulation of the list, the new entry will + // be registered as already checked. + QStringList list = stringList(); + if (!anyChecked || newName.isEmpty() || list.indexOf(newName) >= 0) + return; + list.prepend(newName); + setStringList(list); + checkState.insert(checkState.begin(), true); +} + MultiFilterSortModel::MultiFilterSortModel(QObject *parent) : QSortFilterProxyModel(parent), divesDisplayed(0), diff --git a/qt-models/filtermodels.h b/qt-models/filtermodels.h index 45f820984..671ac1d19 100644 --- a/qt-models/filtermodels.h +++ b/qt-models/filtermodels.h @@ -69,6 +69,7 @@ public slots: void repopulate(); void changeName(const QString &oldName, const QString &newName); + void addName(const QString &newName); private: explicit LocationFilterModel(QObject *parent = 0);