From 8ed09c48bf7276c73dc327735a5cbbe5586c2ad5 Mon Sep 17 00:00:00 2001 From: twanvl Date: Wed, 21 Jul 2010 19:13:19 +0000 Subject: [PATCH] Fixed #24: nullptr error in graph code git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@1453 0fc631ac-6414-0410-93d0-97cfa31319b6 --- src/gui/control/graph.cpp | 30 +++++++++++++++++++++++++----- src/gui/control/graph.hpp | 1 + 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/gui/control/graph.cpp b/src/gui/control/graph.cpp index 115057a5..03f3564c 100644 --- a/src/gui/control/graph.cpp +++ b/src/gui/control/graph.cpp @@ -284,12 +284,24 @@ bool Graph1D::findItem(const RealPoint& pos, const RealRect& rect, bool tight, v } } +void Graph1D::setData(const GraphDataP& d) { + if (d->axes.size() <= axis) { + Graph::setData(GraphDataP()); // invalid + } else { + Graph::setData(d); + } + +} + // ----------------------------------------------------------------------------- : Graph2D void Graph2D::setData(const GraphDataP& d) { - Graph::setData(d); - if (data->axes.size() <= max(axis1,axis2)) return; - d->crossAxis(axis1,axis2,values); + if (d->axes.size() <= max(axis1,axis2)) { + Graph::setData(GraphDataP()); // invalid + } else { + Graph::setData(d); + d->crossAxis(axis1,axis2,values); + } } // ----------------------------------------------------------------------------- : Bar Graph @@ -620,6 +632,7 @@ bool ScatterGraph::findItem(const RealPoint& pos, const RealRect& rect, bool tig void ScatterGraph::setData(const GraphDataP& d) { Graph2D::setData(d); + if (!data) return; if (values.empty()) return; // find maximum max_value = 0; @@ -656,13 +669,17 @@ void ScatterGraph::setData(const GraphDataP& d) { void ScatterGraphPlus::setData(const GraphDataP& d) { ScatterGraph::setData(d); - if (data->axes.size() <= max(max(axis1,axis2),axis3)) return; - d->crossAxis(axis1,axis2,axis3,values3D); + if (!data || data->axes.size() <= max(max(axis1,axis2),axis3)) { + data = GraphDataP(); // invalid + return; + } + data->crossAxis(axis1,axis2,axis3,values3D); } // ----------------------------------------------------------------------------- : Scatter Pie graph void ScatterPieGraph::draw(RotatedDC& dc, const vector& current, DrawLayer layer) const { + if (!data) return; if (data->axes.size() <= max(max(axis1,axis2),axis3)) return; if (layer == LAYER_SELECTION) { ScatterGraph::draw(dc, current, layer); @@ -711,6 +728,7 @@ void ScatterPieGraph::draw(RotatedDC& dc, const vector& current, DrawLayer void GraphStats::setData(const GraphDataP& d) { Graph1D::setData(d); + if (!data) return; // update values GraphAxis& axis = axis_data(); values.clear(); @@ -822,6 +840,7 @@ int GraphLegend::findItem(const RealPoint& pos, const RealRect& rect, bool tight // ----------------------------------------------------------------------------- : Graph label axis void GraphLabelAxis::draw(RotatedDC& dc, int current, DrawLayer layer) const { + if (!data) return; RealRect rect = dc.getInternalRect(); GraphAxis& axis = axis_data(); int count = int(axis.groups.size()); @@ -901,6 +920,7 @@ void GraphLabelAxis::draw(RotatedDC& dc, int current, DrawLayer layer) const { } } int GraphLabelAxis::findItem(const RealPoint& pos, const RealRect& rect, bool tight) const { + if (!data) return -1; GraphAxis& axis = axis_data(); int col; if (direction == HORIZONTAL) { diff --git a/src/gui/control/graph.hpp b/src/gui/control/graph.hpp index 822a0339..95cd4365 100644 --- a/src/gui/control/graph.hpp +++ b/src/gui/control/graph.hpp @@ -160,6 +160,7 @@ class Graph1D : public Graph { inline Graph1D(size_t axis) : axis(axis) {} virtual void draw(RotatedDC& dc, const vector& current, DrawLayer layer) const; virtual bool findItem(const RealPoint& pos, const RealRect& rect, bool tight, vector& out) const; + virtual void setData(const GraphDataP& d); protected: size_t axis; /// Find an item, return the position along the axis, or -1 if not found