summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/checkbook/graph.cpp17
-rw-r--r--noncore/apps/checkbook/graph.h2
-rw-r--r--noncore/apps/checkbook/graphinfo.cpp13
-rw-r--r--noncore/apps/checkbook/graphinfo.h3
4 files changed, 26 insertions, 9 deletions
diff --git a/noncore/apps/checkbook/graph.cpp b/noncore/apps/checkbook/graph.cpp
index 389972e..72da738 100644
--- a/noncore/apps/checkbook/graph.cpp
+++ b/noncore/apps/checkbook/graph.cpp
@@ -77,27 +77,27 @@ void Graph::initGraph()
}
// Any common stuff here (titles, ???)
switch ( data->graphType() )
{
case GraphInfo::BarChart :
{
- drawBarChart( width(), height(), data->maxValue() );
+ drawBarChart( width(), height(), data->maxValue(), data->minValue() );
}
break;
case GraphInfo::PieChart :
{
drawPieChart( width(), height(), data->totalValue() );
}
};
}
-void Graph::drawBarChart( int width, int height, float max )
+void Graph::drawBarChart( int width, int height, float max, float min )
{
QPainter p( &graph );
// Try to set the font size smaller for text
QFont f = font();
f.setPointSize( 8 );
p.setFont( f );
@@ -106,25 +106,28 @@ void Graph::drawBarChart( int width, int height, float max )
int n = data->numberDataPoints();
QFontMetrics fm=fontMetrics();
int fh = fm.height();
int fw;
QColor c( 0, 0, 255);
p.setBrush( c );
+ if ( min > 0 )
+ min = 0.0;
+
+ int bw = ( width - width / 4 ) / n;
+ int hoffset = int( ( height - height / 4 - 1 ) * ( min * -1 ) / ( max - min ) );
for (DataPointInfo *dp = data->firstDataPoint(); dp; dp = data->nextDataPoint() )
{
- int bw = ( width - width / 4 - x ) / ( n - i );
- int bh = int( ( height - height / 4 - 1 ) * dp->value() / max );
- p.drawRect( width / 8 + x, height - height / 8 - 1 - bh, bw, bh );
+ int bh = int( ( height - height / 4 - 1 ) * dp->value() / ( max - min ) );
+ p.drawRect( width / 8 + x, height - height / 8 - 1 - hoffset - bh, bw, bh );
fw = fm.width( dp->label() );
- p.drawText( width / 8 + x - fw / 2 + bw / 2, height - height / 8, fw,
+ p.drawText( width / 8 + x - fw / 2 + bw / 2, height - height / 8 - hoffset, fw,
fh + height / 8, AlignTop | AlignHCenter, dp->label() );
-// WordBreak | AlignTop | AlignHCenter, dp->label() );
i++;
x += bw;
}
}
void Graph::drawPieChart( int width, int height, float sum )
{
QPainter p( &graph );
diff --git a/noncore/apps/checkbook/graph.h b/noncore/apps/checkbook/graph.h
index 340e910..616cbb6 100644
--- a/noncore/apps/checkbook/graph.h
+++ b/noncore/apps/checkbook/graph.h
@@ -51,13 +51,13 @@ class Graph : public QWidget
void resizeEvent( QResizeEvent * );
private:
GraphInfo *data;
QPixmap graph;
void initGraph();
- void drawBarChart( int, int, float );
+ void drawBarChart( int, int, float, float );
void drawPieChart( int, int, float );
};
#endif
diff --git a/noncore/apps/checkbook/graphinfo.cpp b/noncore/apps/checkbook/graphinfo.cpp
index fec6896..5b72c80 100644
--- a/noncore/apps/checkbook/graphinfo.cpp
+++ b/noncore/apps/checkbook/graphinfo.cpp
@@ -92,16 +92,29 @@ float GraphInfo::maxValue()
if ( data->value() > max )
{
max = data->value();
}
}
return max;
}
+float GraphInfo::minValue()
+{
+ float min = 0.0;
+ for ( DataPointInfo *data = d->first(); data; data = d->next() )
+ {
+ if ( data->value() < min )
+ {
+ min = data->value();
+ }
+ }
+ return min;
+}
+
float GraphInfo::totalValue()
{
float sum = 0.0;
for ( DataPointInfo *data = d->first(); data; data = d->next() )
{
sum += data->value();
}
return sum;
diff --git a/noncore/apps/checkbook/graphinfo.h b/noncore/apps/checkbook/graphinfo.h
index 41927b4..f7842c6 100644
--- a/noncore/apps/checkbook/graphinfo.h
+++ b/noncore/apps/checkbook/graphinfo.h
@@ -37,17 +37,17 @@ class DataPointInfo
public:
DataPointInfo()
: l( 0x0 ), v( 0.0 ) {}
DataPointInfo( const QString &label, float value )
: l( label ), v( value ) {}
const QString &label() { return l; }
float value() { return v; }
-
+
void addToValue( float value ) { v += value; }
private:
QString l;
float v;
};
typedef QList<DataPointInfo> DataPointList;
@@ -66,16 +66,17 @@ class GraphInfo
DataPointList *dataPoints();
void setDataPoints( DataPointList * );
DataPointInfo *firstDataPoint();
DataPointInfo *nextDataPoint();
int numberDataPoints();
float maxValue();
+ float minValue();
float totalValue();
void setGraphTitle( const QString & );
void setXAxisTitle( const QString & );
void setYAxisTitle( const QString & );
private:
GraphType t;