aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2020-02-26 22:32:04 +0100
committerGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2020-04-07 00:13:35 +0200
commit04ce908e8ed6239b8f143b3892da0dcdaa6e8262 (patch)
treecaddf0b570a6b24cfffeabb5932bcbcaf672ec6b
parent75f37a7d10b4c650552a344770c92a2038e9db34 (diff)
downloadsubsurface-04ce908e8ed6239b8f143b3892da0dcdaa6e8262.tar.gz
CylindersModel: listen and react to signals
React to signals from the undo-commands and update the model accordingly. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
-rw-r--r--qt-models/cylindermodel.cpp31
-rw-r--r--qt-models/cylindermodel.h3
2 files changed, 34 insertions, 0 deletions
diff --git a/qt-models/cylindermodel.cpp b/qt-models/cylindermodel.cpp
index 7864da76c..8938bfbff 100644
--- a/qt-models/cylindermodel.cpp
+++ b/qt-models/cylindermodel.cpp
@@ -19,6 +19,9 @@ CylindersModel::CylindersModel(QObject *parent) : CleanerTableModel(parent),
<< tr("Deco switch at") <<tr("Bot. MOD") <<tr("MND") << tr("Use"));
connect(&diveListNotifier, &DiveListNotifier::cylindersReset, this, &CylindersModel::cylindersReset);
+ connect(&diveListNotifier, &DiveListNotifier::cylinderAdded, this, &CylindersModel::cylinderAdded);
+ connect(&diveListNotifier, &DiveListNotifier::cylinderRemoved, this, &CylindersModel::cylinderRemoved);
+ connect(&diveListNotifier, &DiveListNotifier::cylinderEdited, this, &CylindersModel::cylinderEdited);
}
QVariant CylindersModel::headerData(int section, Qt::Orientation orientation, int role) const
@@ -521,6 +524,34 @@ void CylindersModel::remove(QModelIndex index)
changed = true;
}
+void CylindersModel::cylinderAdded(struct dive *changed, int pos)
+{
+ if (d != changed)
+ return;
+
+ // The row was already inserted by the undo command. Just inform the model.
+ beginInsertRows(QModelIndex(), pos, pos);
+ endInsertRows();
+}
+
+void CylindersModel::cylinderRemoved(struct dive *changed, int pos)
+{
+ if (d != changed)
+ return;
+
+ // The row was already deleted by the undo command. Just inform the model.
+ beginRemoveRows(QModelIndex(), pos, pos);
+ endRemoveRows();
+}
+
+void CylindersModel::cylinderEdited(struct dive *changed, int pos)
+{
+ if (d != changed)
+ return;
+
+ dataChanged(index(pos, TYPE), index(pos, USE));
+}
+
void CylindersModel::moveAtFirst(int cylid)
{
if (!d)
diff --git a/qt-models/cylindermodel.h b/qt-models/cylindermodel.h
index 40eaf98a1..85a59c9f5 100644
--- a/qt-models/cylindermodel.h
+++ b/qt-models/cylindermodel.h
@@ -54,6 +54,9 @@ public
slots:
void remove(QModelIndex index);
void cylindersReset(const QVector<dive *> &dives);
+ void cylinderAdded(dive *d, int pos);
+ void cylinderRemoved(dive *d, int pos);
+ void cylinderEdited(dive *d, int pos);
private:
dive *d;