summaryrefslogtreecommitdiffstats
path: root/qt-ui/profile/diveprofileitem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qt-ui/profile/diveprofileitem.cpp')
-rw-r--r--qt-ui/profile/diveprofileitem.cpp73
1 files changed, 48 insertions, 25 deletions
diff --git a/qt-ui/profile/diveprofileitem.cpp b/qt-ui/profile/diveprofileitem.cpp
index 335d5ecf6..05791eed5 100644
--- a/qt-ui/profile/diveprofileitem.cpp
+++ b/qt-ui/profile/diveprofileitem.cpp
@@ -43,7 +43,7 @@ void AbstractProfilePolygonItem::setHorizontalDataColumn(int column)
void AbstractProfilePolygonItem::setModel(DivePlotDataModel* model)
{
dataModel = model;
- connect(dataModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(modelDataChanged()));
+ connect(dataModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(modelDataChanged(QModelIndex, QModelIndex)));
modelDataChanged();
}
@@ -61,11 +61,26 @@ void AbstractProfilePolygonItem::setVerticalDataColumn(int column)
modelDataChanged();
}
-void AbstractProfilePolygonItem::modelDataChanged()
+bool AbstractProfilePolygonItem::shouldCalculateStuff(const QModelIndex& topLeft, const QModelIndex& bottomRight)
+{
+ if (!hAxis || !vAxis)
+ return false;
+ if (!dataModel || dataModel->rowCount() == 0)
+ return false;
+ if (hDataColumn == -1 || vDataColumn == -1)
+ return false;
+ if ( topLeft.isValid() && bottomRight.isValid()){
+ if ((topLeft.column() >= vDataColumn || topLeft.column() >= hDataColumn ) &&
+ (bottomRight.column() <= vDataColumn || topLeft.column() <= hDataColumn )){
+ return true;
+ }
+ }
+ return true;
+}
+
+void AbstractProfilePolygonItem::modelDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight)
{
// We don't have enougth data to calculate things, quit.
- if (!hAxis || !vAxis || !dataModel || hDataColumn == -1 || vDataColumn == -1)
- return;
// Calculate the polygon. This is the polygon that will be painted on screen
// on the ::paint method. Here we calculate the correct position of the points
@@ -107,12 +122,12 @@ void DiveProfileItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* o
}
}
-void DiveProfileItem::modelDataChanged()
+void DiveProfileItem::modelDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight)
{
- if (!hAxis || !vAxis || !dataModel || hDataColumn == -1 || vDataColumn == -1 || dataModel->rowCount() == 0)
+ if(!shouldCalculateStuff(topLeft, bottomRight))
return;
- AbstractProfilePolygonItem::modelDataChanged();
+ AbstractProfilePolygonItem::modelDataChanged(topLeft, bottomRight);
if (polygon().isEmpty())
return;
@@ -122,7 +137,7 @@ void DiveProfileItem::modelDataChanged()
/* Show any ceiling we may have encountered */
if (prefs.profile_dc_ceiling && !prefs.profile_red_ceiling) {
QPolygonF p = polygon();
- plot_data *entry = dataModel->data() + dataModel->rowCount()-1;
+ plot_data *entry = dataModel->data().entry + dataModel->rowCount()-1;
for (int i = dataModel->rowCount() - 1; i >= 0; i--, entry--) {
if (!entry->in_deco) {
/* not in deco implies this is a safety stop, no ceiling */
@@ -146,7 +161,7 @@ void DiveProfileItem::modelDataChanged()
int last = -1;
for (int i = 0, count = dataModel->rowCount(); i < count; i++) {
- struct plot_data *entry = dataModel->data()+i;
+ struct plot_data *entry = dataModel->data().entry+i;
if (entry->depth < 2000)
continue;
@@ -194,10 +209,10 @@ DiveTemperatureItem::DiveTemperatureItem()
setPen(pen);
}
-void DiveTemperatureItem::modelDataChanged()
+void DiveTemperatureItem::modelDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight)
{
// We don't have enougth data to calculate things, quit.
- if (!hAxis || !vAxis || !dataModel || hDataColumn == -1 || vDataColumn == -1 || dataModel->rowCount() == 0)
+ if (!shouldCalculateStuff(topLeft, bottomRight))
return;
qDeleteAll(texts);
@@ -260,10 +275,10 @@ void DiveTemperatureItem::paint(QPainter* painter, const QStyleOptionGraphicsIte
painter->drawPolyline(polygon());
}
-void DiveGasPressureItem::modelDataChanged()
+void DiveGasPressureItem::modelDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight)
{
// We don't have enougth data to calculate things, quit.
- if (!hAxis || !vAxis || !dataModel || hDataColumn == -1 || vDataColumn == -1 || dataModel->rowCount() == 0)
+ if (!shouldCalculateStuff(topLeft, bottomRight))
return;
int last_index = -1;
int lift_pen = false;
@@ -272,7 +287,7 @@ void DiveGasPressureItem::modelDataChanged()
polygons.clear();
for (int i = 0, count = dataModel->rowCount(); i < count; i++) {
- plot_data* entry = dataModel->data() + i;
+ plot_data* entry = dataModel->data().entry + i;
int mbar = GET_PRESSURE(entry);
if (entry->cylinderindex != last_index) {
@@ -300,7 +315,7 @@ void DiveGasPressureItem::modelDataChanged()
cyl = -1;
for (int i = 0, count = dataModel->rowCount(); i < count; i++) {
- entry = dataModel->data() + i;
+ entry = dataModel->data().entry + i;
mbar = GET_PRESSURE(entry);
if (!mbar)
@@ -357,7 +372,7 @@ void DiveGasPressureItem::paint(QPainter* painter, const QStyleOptionGraphicsIte
pen.setCosmetic(true);
pen.setWidth(2);
struct dive *d = getDiveById(dataModel->id());
- struct plot_data *entry = dataModel->data();
+ struct plot_data *entry = dataModel->data().entry;
Q_FOREACH(const QPolygonF& poly, polygons) {
for (int i = 1, count = poly.count(); i < count; i++, entry++) {
pen.setBrush(getSacColor(entry->sac, d->sac));
@@ -376,12 +391,12 @@ DiveCalculatedCeiling::DiveCalculatedCeiling()
preferencesChanged();
}
-void DiveCalculatedCeiling::modelDataChanged()
+void DiveCalculatedCeiling::modelDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight)
{
// We don't have enougth data to calculate things, quit.
- if (!hAxis || !vAxis || !dataModel || hDataColumn == -1 || vDataColumn == -1)
+ if (!shouldCalculateStuff(topLeft, bottomRight))
return;
- AbstractProfilePolygonItem::modelDataChanged();
+ AbstractProfilePolygonItem::modelDataChanged(topLeft, bottomRight);
// Add 2 points to close the polygon.
QPolygonF poly = polygon();
if (poly.isEmpty())
@@ -420,14 +435,14 @@ void DiveCalculatedTissue::preferencesChanged()
setVisible(s.value("calcalltissues").toBool());
}
-void DiveReportedCeiling::modelDataChanged()
+void DiveReportedCeiling::modelDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight)
{
- if (!hAxis || !vAxis || !dataModel || hDataColumn == -1 || vDataColumn == -1)
+ if(!shouldCalculateStuff(topLeft, bottomRight))
return;
QPolygonF p;
p.append(QPointF(hAxis->posAtValue(0), vAxis->posAtValue(0)));
- plot_data *entry = dataModel->data();
+ plot_data *entry = dataModel->data().entry;
for (int i = 0, count = dataModel->rowCount(); i < count; i++, entry++) {
if (entry->in_deco && entry->stopdepth) {
if (entry->stopdepth < entry->depth) {
@@ -451,6 +466,14 @@ void DiveCalculatedCeiling::preferencesChanged()
{
QSettings s;
s.beginGroup("TecDetails");
+
+ bool shouldShow3mIncrement = s.value("calcceiling3m").toBool();
+ if ( dataModel && is3mIncrement != shouldShow3mIncrement){
+ // recalculate that part.
+ dataModel->calculateDecompression();
+ is3mIncrement = shouldShow3mIncrement;
+ }
+
setVisible(s.value("calcceiling").toBool());
}
@@ -491,13 +514,13 @@ void MeanDepthLine::setMeanDepth(int value)
rightText->setText(get_depth_string(value, false, false));
}
-void PartialPressureGasItem::modelDataChanged()
+void PartialPressureGasItem::modelDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight)
{
//AbstractProfilePolygonItem::modelDataChanged();
- if (!hAxis || !vAxis || !dataModel || hDataColumn == -1 || vDataColumn == -1 || dataModel->rowCount() == 0)
+ if (!shouldCalculateStuff(topLeft, bottomRight))
return;
- plot_data *entry = dataModel->data();
+ plot_data *entry = dataModel->data().entry;
QPolygonF poly;
alertPoly.clear();
QSettings s;