diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2019-10-06 21:31:39 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2019-10-26 11:36:23 -0700 |
commit | 5c4d163a41c69538c8a658db82dde1a7486b6759 (patch) | |
tree | 909076a4b790ae6c90f29e8e4497bb4c9f7698c6 /desktop-widgets | |
parent | c479c5ca36648e54f58f782d7af2935f77c693b1 (diff) | |
download | subsurface-5c4d163a41c69538c8a658db82dde1a7486b6759.tar.gz |
Undo: update statistics if dive changed
On undo/redo, the dive statistics tab was not updated even
if a selected dive was changed. Fix that.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets')
-rw-r--r-- | desktop-widgets/tab-widgets/TabDiveStatistics.cpp | 24 | ||||
-rw-r--r-- | desktop-widgets/tab-widgets/TabDiveStatistics.h | 4 |
2 files changed, 28 insertions, 0 deletions
diff --git a/desktop-widgets/tab-widgets/TabDiveStatistics.cpp b/desktop-widgets/tab-widgets/TabDiveStatistics.cpp index 2de8a8013..3719363df 100644 --- a/desktop-widgets/tab-widgets/TabDiveStatistics.cpp +++ b/desktop-widgets/tab-widgets/TabDiveStatistics.cpp @@ -21,6 +21,8 @@ TabDiveStatistics::TabDiveStatistics(QWidget *parent) : TabBase(parent), ui(new ui->timeLimits->overrideMinToolTipText(tr("Shortest dive")); ui->timeLimits->overrideAvgToolTipText(tr("Average length of all selected dives")); + connect(&diveListNotifier, &DiveListNotifier::divesChanged, this, &TabDiveStatistics::divesChanged); + const auto l = findChildren<QLabel *>(QString(), Qt::FindDirectChildrenOnly); for (QLabel *label: l) { label->setAlignment(Qt::AlignHCenter); @@ -42,6 +44,28 @@ void TabDiveStatistics::clear() ui->timeLimits->clear(); } +// This function gets called if a field gets updated by an undo command. +// Refresh the corresponding UI field. +void TabDiveStatistics::divesChanged(const QVector<dive *> &dives, DiveField field) +{ + // If none of the changed dives is selected, do nothing + if (std::none_of(dives.begin(), dives.end(), [] (const dive *d) { return d->selected; })) + return; + + // TODO: make this more fine grained. Currently, the core can only calculate *all* statistics. + switch(field) { + case DiveField::DURATION: + case DiveField::DEPTH: + case DiveField::MODE: + case DiveField::AIR_TEMP: + case DiveField::WATER_TEMP: + updateData(); + break; + default: + break; + } +} + void TabDiveStatistics::updateData() { stats_t stats_selection; diff --git a/desktop-widgets/tab-widgets/TabDiveStatistics.h b/desktop-widgets/tab-widgets/TabDiveStatistics.h index c763b2e88..2fb4ebc85 100644 --- a/desktop-widgets/tab-widgets/TabDiveStatistics.h +++ b/desktop-widgets/tab-widgets/TabDiveStatistics.h @@ -3,6 +3,7 @@ #define TAB_DIVE_STATISTICS_H #include "TabBase.h" +#include "core/subsurface-qt/DiveListNotifier.h" namespace Ui { class TabDiveStatistics; @@ -16,6 +17,9 @@ public: void updateData() override; void clear() override; +private slots: + void divesChanged(const QVector<dive *> &dives, DiveField field); + private: Ui::TabDiveStatistics *ui; }; |