summaryrefslogtreecommitdiff
authordrw <drw>2004-03-30 17:49:34 (UTC)
committer drw <drw>2004-03-30 17:49:34 (UTC)
commitc74a24cbd04cb74d832908eb2b373aed7b3cea71 (patch) (unidiff)
tree3ea474f4c8fa64495b8e0604f34ae5a1bd55ac56
parent2e5d236b647b1747dca61486ecdd85c8f3869487 (diff)
downloadopie-c74a24cbd04cb74d832908eb2b373aed7b3cea71.zip
opie-c74a24cbd04cb74d832908eb2b373aed7b3cea71.tar.gz
opie-c74a24cbd04cb74d832908eb2b373aed7b3cea71.tar.bz2
Fix drawing of account balance graph when balance < 0.0
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()
77 } 77 }
78 78
79 // Any common stuff here (titles, ???) 79 // Any common stuff here (titles, ???)
80 80
81 switch ( data->graphType() ) 81 switch ( data->graphType() )
82 { 82 {
83 case GraphInfo::BarChart : 83 case GraphInfo::BarChart :
84 { 84 {
85 drawBarChart( width(), height(), data->maxValue() ); 85 drawBarChart( width(), height(), data->maxValue(), data->minValue() );
86 } 86 }
87 break; 87 break;
88 case GraphInfo::PieChart : 88 case GraphInfo::PieChart :
89 { 89 {
90 drawPieChart( width(), height(), data->totalValue() ); 90 drawPieChart( width(), height(), data->totalValue() );
91 } 91 }
92 }; 92 };
93} 93}
94 94
95void Graph::drawBarChart( int width, int height, float max ) 95void Graph::drawBarChart( int width, int height, float max, float min )
96{ 96{
97 QPainter p( &graph ); 97 QPainter p( &graph );
98 98
99 // Try to set the font size smaller for text 99 // Try to set the font size smaller for text
100 QFont f = font(); 100 QFont f = font();
101 f.setPointSize( 8 ); 101 f.setPointSize( 8 );
102 p.setFont( f ); 102 p.setFont( f );
103 103
@@ -106,25 +106,28 @@ void Graph::drawBarChart( int width, int height, float max )
106 int n = data->numberDataPoints(); 106 int n = data->numberDataPoints();
107 QFontMetrics fm=fontMetrics(); 107 QFontMetrics fm=fontMetrics();
108 int fh = fm.height(); 108 int fh = fm.height();
109 int fw; 109 int fw;
110 110
111 QColor c( 0, 0, 255); 111 QColor c( 0, 0, 255);
112 p.setBrush( c ); 112 p.setBrush( c );
113 113
114 if ( min > 0 )
115 min = 0.0;
116
117 int bw = ( width - width / 4 ) / n;
118 int hoffset = int( ( height - height / 4 - 1 ) * ( min * -1 ) / ( max - min ) );
114 for (DataPointInfo *dp = data->firstDataPoint(); dp; dp = data->nextDataPoint() ) 119 for (DataPointInfo *dp = data->firstDataPoint(); dp; dp = data->nextDataPoint() )
115 { 120 {
116 int bw = ( width - width / 4 - x ) / ( n - i ); 121 int bh = int( ( height - height / 4 - 1 ) * dp->value() / ( max - min ) );
117 int bh = int( ( height - height / 4 - 1 ) * dp->value() / max ); 122 p.drawRect( width / 8 + x, height - height / 8 - 1 - hoffset - bh, bw, bh );
118 p.drawRect( width / 8 + x, height - height / 8 - 1 - bh, bw, bh );
119 fw = fm.width( dp->label() ); 123 fw = fm.width( dp->label() );
120 p.drawText( width / 8 + x - fw / 2 + bw / 2, height - height / 8, fw, 124 p.drawText( width / 8 + x - fw / 2 + bw / 2, height - height / 8 - hoffset, fw,
121 fh + height / 8, AlignTop | AlignHCenter, dp->label() ); 125 fh + height / 8, AlignTop | AlignHCenter, dp->label() );
122 // WordBreak | AlignTop | AlignHCenter, dp->label() );
123 i++; 126 i++;
124 x += bw; 127 x += bw;
125 } 128 }
126} 129}
127 130
128void Graph::drawPieChart( int width, int height, float sum ) 131void Graph::drawPieChart( int width, int height, float sum )
129{ 132{
130 QPainter p( &graph ); 133 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
51 void resizeEvent( QResizeEvent * ); 51 void resizeEvent( QResizeEvent * );
52 52
53 private: 53 private:
54 GraphInfo *data; 54 GraphInfo *data;
55 55
56 QPixmap graph; 56 QPixmap graph;
57 57
58 void initGraph(); 58 void initGraph();
59 void drawBarChart( int, int, float ); 59 void drawBarChart( int, int, float, float );
60 void drawPieChart( int, int, float ); 60 void drawPieChart( int, int, float );
61}; 61};
62 62
63#endif 63#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()
92 if ( data->value() > max ) 92 if ( data->value() > max )
93 { 93 {
94 max = data->value(); 94 max = data->value();
95 } 95 }
96 } 96 }
97 return max; 97 return max;
98} 98}
99 99
100float GraphInfo::minValue()
101{
102 float min = 0.0;
103 for ( DataPointInfo *data = d->first(); data; data = d->next() )
104 {
105 if ( data->value() < min )
106 {
107 min = data->value();
108 }
109 }
110 return min;
111}
112
100float GraphInfo::totalValue() 113float GraphInfo::totalValue()
101{ 114{
102 float sum = 0.0; 115 float sum = 0.0;
103 for ( DataPointInfo *data = d->first(); data; data = d->next() ) 116 for ( DataPointInfo *data = d->first(); data; data = d->next() )
104 { 117 {
105 sum += data->value(); 118 sum += data->value();
106 } 119 }
107 return sum; 120 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
37 public: 37 public:
38 DataPointInfo() 38 DataPointInfo()
39 : l( 0x0 ), v( 0.0 ) {} 39 : l( 0x0 ), v( 0.0 ) {}
40 DataPointInfo( const QString &label, float value ) 40 DataPointInfo( const QString &label, float value )
41 : l( label ), v( value ) {} 41 : l( label ), v( value ) {}
42 42
43 const QString &label() { return l; } 43 const QString &label() { return l; }
44 float value() { return v; } 44 float value() { return v; }
45 45
46 void addToValue( float value ) { v += value; } 46 void addToValue( float value ) { v += value; }
47 47
48 private: 48 private:
49 QString l; 49 QString l;
50 float v; 50 float v;
51}; 51};
52 52
53typedef QList<DataPointInfo> DataPointList; 53typedef QList<DataPointInfo> DataPointList;
@@ -66,16 +66,17 @@ class GraphInfo
66 66
67 DataPointList *dataPoints(); 67 DataPointList *dataPoints();
68 void setDataPoints( DataPointList * ); 68 void setDataPoints( DataPointList * );
69 DataPointInfo *firstDataPoint(); 69 DataPointInfo *firstDataPoint();
70 DataPointInfo *nextDataPoint(); 70 DataPointInfo *nextDataPoint();
71 int numberDataPoints(); 71 int numberDataPoints();
72 72
73 float maxValue(); 73 float maxValue();
74 float minValue();
74 float totalValue(); 75 float totalValue();
75 76
76 void setGraphTitle( const QString & ); 77 void setGraphTitle( const QString & );
77 void setXAxisTitle( const QString & ); 78 void setXAxisTitle( const QString & );
78 void setYAxisTitle( const QString & ); 79 void setYAxisTitle( const QString & );
79 80
80 private: 81 private:
81 GraphType t; 82 GraphType t;