aboutsummaryrefslogtreecommitdiffstats
path: root/qt-ui/profile
diff options
context:
space:
mode:
authorGravatar Tomaz Canabrava <tomaz.canabrava@intel.com>2014-02-27 16:28:19 -0300
committerGravatar Dirk Hohndel <dirk@hohndel.org>2014-02-27 12:03:34 -0800
commit0a24e134696577dfc967f7e2ad1b4f0ab87740d6 (patch)
tree96129bb86afd665dcb434f0c0abd189ebd8b518d /qt-ui/profile
parent0d62efaa39388637dccf52cd432425dfdfc9a2d0 (diff)
downloadsubsurface-0a24e134696577dfc967f7e2ad1b4f0ab87740d6.tar.gz
Remove the pInfo pointer, make it a real structure instead.
This fixes the invalid pointer stage crash. Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui/profile')
-rw-r--r--qt-ui/profile/ruleritem.cpp34
-rw-r--r--qt-ui/profile/ruleritem.h10
2 files changed, 27 insertions, 17 deletions
diff --git a/qt-ui/profile/ruleritem.cpp b/qt-ui/profile/ruleritem.cpp
index e3362adea..3c53d3d43 100644
--- a/qt-ui/profile/ruleritem.cpp
+++ b/qt-ui/profile/ruleritem.cpp
@@ -9,7 +9,7 @@
#include "profile.h"
#include "display.h"
-RulerNodeItem2::RulerNodeItem2() : entry(NULL) , ruler(NULL)
+RulerNodeItem2::RulerNodeItem2(struct plot_info& info) : pInfo(info), entry(NULL) , ruler(NULL)
{
setRect(QRect(QPoint(-8,8),QPoint(8,-8)));
setBrush(QColor(0xff, 0, 0, 127));
@@ -26,17 +26,17 @@ void RulerNodeItem2::setRuler(RulerItem2 *r)
void RulerNodeItem2::recalculate()
{
- struct plot_data *data = pInfo->entry+(pInfo->nr-1);
+ struct plot_data *data = pInfo.entry+(pInfo.nr-1);
uint16_t count = 0;
if (x() < 0) {
setPos(0, y());
} else if (x() > timeAxis->posAtValue(data->sec)) {
setPos(timeAxis->posAtValue(data->sec), y());
} else {
- data = pInfo->entry;
+ data = pInfo.entry;
count=0;
- while (timeAxis->posAtValue(data->sec) < x() && count < pInfo->nr) {
- data = pInfo->entry+count;
+ while (timeAxis->posAtValue(data->sec) < x() && count < pInfo.nr) {
+ data = pInfo.entry+count;
count++;
}
setPos(timeAxis->posAtValue(data->sec), depthAxis->posAtValue(data->depth));
@@ -58,13 +58,12 @@ QVariant RulerNodeItem2::itemChange(GraphicsItemChange change, const QVariant &v
}
RulerItem2::RulerItem2():
- pInfo(NULL),
timeAxis(NULL),
depthAxis(NULL),
- source(new RulerNodeItem2()),
- dest(new RulerNodeItem2())
+ source(new RulerNodeItem2(pInfo)),
+ dest(new RulerNodeItem2(pInfo))
{
-
+ memset(&pInfo, 0, sizeof(pInfo));
source->setRuler(this);
dest->setRuler(this);
}
@@ -76,7 +75,7 @@ void RulerItem2::recalculate()
QFont font;
QFontMetrics fm(font);
- if (timeAxis == NULL || depthAxis == NULL || pInfo == NULL)
+ if (timeAxis == NULL || depthAxis == NULL || pInfo.nr == 0)
return;
prepareGeometryChange();
@@ -168,10 +167,19 @@ QPainterPath RulerItem2::shape() const
return path;
}
-void RulerItem2::setPlotInfo(plot_info* info)
+void RulerItem2::setPlotInfo(plot_info info)
{
pInfo = info;
- dest->pInfo = info;
- source->pInfo = info;
+ recalculate();
+}
+
+void RulerItem2::setAxis(DiveCartesianAxis* time, DiveCartesianAxis* depth)
+{
+ timeAxis = time;
+ depthAxis = depth;
+ dest->depthAxis = depth;
+ dest->timeAxis = time;
+ source->depthAxis = depth;
+ source->timeAxis = time;
recalculate();
}
diff --git a/qt-ui/profile/ruleritem.h b/qt-ui/profile/ruleritem.h
index 29b79231d..714bf09f9 100644
--- a/qt-ui/profile/ruleritem.h
+++ b/qt-ui/profile/ruleritem.h
@@ -5,6 +5,7 @@
#include <QGraphicsEllipseItem>
#include <QGraphicsObject>
#include "divecartesianaxis.h"
+#include "display.h"
struct plot_data;
class RulerItem2;
@@ -14,7 +15,7 @@ class RulerNodeItem2 : public QObject, public QGraphicsEllipseItem
Q_OBJECT
friend class RulerItem2;
public:
- explicit RulerNodeItem2();
+ explicit RulerNodeItem2(struct plot_info& info);
void setRuler(RulerItem2 *r);
void recalculate();
@@ -22,7 +23,7 @@ protected:
QVariant itemChange(GraphicsItemChange change, const QVariant & value );
private:
- struct plot_info *pInfo;
+ struct plot_info &pInfo;
struct plot_data *entry;
RulerItem2* ruler;
DiveCartesianAxis *timeAxis;
@@ -36,15 +37,16 @@ public:
explicit RulerItem2();
void recalculate();
- void setPlotInfo(struct plot_info *pInfo);
+ void setPlotInfo(struct plot_info pInfo);
RulerNodeItem2* sourceNode() const;
RulerNodeItem2* destNode() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget * widget = 0);
QRectF boundingRect() const;
QPainterPath shape() const;
+ void setAxis(DiveCartesianAxis *time, DiveCartesianAxis *depth);
private:
- struct plot_info *pInfo;
+ struct plot_info pInfo;
QPointF startPoint, endPoint;
RulerNodeItem2 *source, *dest;
QString text;