summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2020-12-29 23:04:12 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2021-01-10 15:57:39 -0800
commit0104b0a91588cff613b74d36bff66ac54f5cd1a3 (patch)
treea1b3f731b896ebd907dd8612d1725a22aa08441d
parentdd0939b6f5c9c7399183f2a36b2be77521886ef0 (diff)
downloadsubsurface-0104b0a91588cff613b74d36bff66ac54f5cd1a3.tar.gz
profile: explicitly update profile items
Instead of listening to the dive-data-model changed and axis changed signals, update the profile items explicitly once per plot() call. This avoids double replotting of the dive items. The old code had at least two replots per plot() call: one after profileYAxis()->setMaximum() and one after dataModel->emitDataChanged(). Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
-rw-r--r--profile-widget/diveprofileitem.cpp5
-rw-r--r--profile-widget/profilewidget2.cpp6
-rw-r--r--qt-models/diveplotdatamodel.cpp5
-rw-r--r--qt-models/diveplotdatamodel.h1
4 files changed, 5 insertions, 12 deletions
diff --git a/profile-widget/diveprofileitem.cpp b/profile-widget/diveprofileitem.cpp
index 54acee86b..b91b7ef92 100644
--- a/profile-widget/diveprofileitem.cpp
+++ b/profile-widget/diveprofileitem.cpp
@@ -17,10 +17,6 @@ AbstractProfilePolygonItem::AbstractProfilePolygonItem(const DivePlotDataModel &
hAxis(horizontal), vAxis(vertical), dataModel(model), hDataColumn(hColumn), vDataColumn(vColumn)
{
setCacheMode(DeviceCoordinateCache);
- connect(&dataModel, &DivePlotDataModel::dataChanged, this, &AbstractProfilePolygonItem::modelDataChanged);
- connect(&hAxis, &DiveCartesianAxis::sizeChanged, this, &AbstractProfilePolygonItem::replot);
- connect(&vAxis, &DiveCartesianAxis::sizeChanged, this, &AbstractProfilePolygonItem::replot);
- connect(&vAxis, &DiveCartesianAxis::maxChanged, this, &AbstractProfilePolygonItem::replot);
}
void AbstractProfilePolygonItem::clear()
@@ -880,7 +876,6 @@ void DiveReportedCeiling::paint(QPainter *painter, const QStyleOptionGraphicsIte
void PartialPressureGasItem::modelDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
{
- //AbstractProfilePolygonItem::modelDataChanged();
if (!shouldCalculateStuff(topLeft, bottomRight))
return;
diff --git a/profile-widget/profilewidget2.cpp b/profile-widget/profilewidget2.cpp
index 737fdf306..f5d4fd889 100644
--- a/profile-widget/profilewidget2.cpp
+++ b/profile-widget/profilewidget2.cpp
@@ -735,7 +735,11 @@ void ProfileWidget2::plotDive(const struct dive *d, bool force, bool doClearPict
tankItem->setData(&plotInfo, &displayed_dive);
gasYAxis->update();
- dataModel->emitDataChanged();
+
+ // Replot dive items
+ for (AbstractProfilePolygonItem *item: profileItems)
+ item->replot();
+
// The event items are a bit special since we don't know how many events are going to
// exist on a dive, so I cant create cache items for that. that's why they are here
// while all other items are up there on the constructor.
diff --git a/qt-models/diveplotdatamodel.cpp b/qt-models/diveplotdatamodel.cpp
index 6c008139e..954efc652 100644
--- a/qt-models/diveplotdatamodel.cpp
+++ b/qt-models/diveplotdatamodel.cpp
@@ -223,8 +223,3 @@ double DivePlotDataModel::po2Max() const
{
return max_gas(pInfo, &gas_pressures::o2);
}
-
-void DivePlotDataModel::emitDataChanged()
-{
- emit dataChanged(QModelIndex(), QModelIndex());
-}
diff --git a/qt-models/diveplotdatamodel.h b/qt-models/diveplotdatamodel.h
index 36b41ac56..110cff5fc 100644
--- a/qt-models/diveplotdatamodel.h
+++ b/qt-models/diveplotdatamodel.h
@@ -85,7 +85,6 @@ public:
double pheMax() const;
double pn2Max() const;
double po2Max() const;
- void emitDataChanged();
private:
struct plot_info pInfo;