diff options
-rw-r--r-- | desktop-widgets/tab-widgets/TabDiveSite.cpp | 14 | ||||
-rw-r--r-- | desktop-widgets/tab-widgets/TabDiveSite.h | 1 |
2 files changed, 15 insertions, 0 deletions
diff --git a/desktop-widgets/tab-widgets/TabDiveSite.cpp b/desktop-widgets/tab-widgets/TabDiveSite.cpp index 5b65015da..815627e2b 100644 --- a/desktop-widgets/tab-widgets/TabDiveSite.cpp +++ b/desktop-widgets/tab-widgets/TabDiveSite.cpp @@ -21,6 +21,10 @@ TabDiveSite::TabDiveSite(QWidget *parent) : TabBase(parent) ui.diveSites->view()->setColumnHidden(i, true); connect(ui.diveSites, &TableView::addButtonClicked, this, &TabDiveSite::add); + + // Subtle: We depend on this slot being executed after the slot in the model. + // This is realized because the model was constructed as a member object and connects in the constructor. + connect(&diveListNotifier, &DiveListNotifier::diveSiteChanged, this, &TabDiveSite::diveSiteChanged); } void TabDiveSite::updateData() @@ -53,3 +57,13 @@ void TabDiveSite::diveSiteAdded(struct dive_site *, int idx) ui.diveSites->view()->setCurrentIndex(localIdx); ui.diveSites->view()->edit(localIdx); } + +void TabDiveSite::diveSiteChanged(struct dive_site *ds, int field) +{ + int idx = get_divesite_idx(ds, &dive_site_table); + if (idx < 0) + return; + QModelIndex globalIdx = LocationInformationModel::instance()->index(idx, field); + QModelIndex localIdx = model.mapFromSource(globalIdx); + ui.diveSites->view()->scrollTo(localIdx); +} diff --git a/desktop-widgets/tab-widgets/TabDiveSite.h b/desktop-widgets/tab-widgets/TabDiveSite.h index 32badadc3..a31b1629d 100644 --- a/desktop-widgets/tab-widgets/TabDiveSite.h +++ b/desktop-widgets/tab-widgets/TabDiveSite.h @@ -15,6 +15,7 @@ public: private slots: void add(); void diveSiteAdded(struct dive_site *, int idx); + void diveSiteChanged(struct dive_site *ds, int field); private: Ui::TabDiveSite ui; DiveSiteSortedModel model; |