summaryrefslogtreecommitdiff
authorsimon <simon>2002-11-07 16:54:11 (UTC)
committer simon <simon>2002-11-07 16:54:11 (UTC)
commitd73b9f89f31f5b8c3cf89985a09c3b7af56cd6d6 (patch) (unidiff)
treef57a220cea859a0910e6032052b312b51ee40f2e
parente30087fa4347c60b622e35b8c99fab64d821bd2f (diff)
downloadopie-d73b9f89f31f5b8c3cf89985a09c3b7af56cd6d6.zip
opie-d73b9f89f31f5b8c3cf89985a09c3b7af56cd6d6.tar.gz
opie-d73b9f89f31f5b8c3cf89985a09c3b7af56cd6d6.tar.bz2
- include math.h for sin() and cos()
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/checkbook/graph.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/noncore/apps/checkbook/graph.cpp b/noncore/apps/checkbook/graph.cpp
index a0d8b78..0f25453 100644
--- a/noncore/apps/checkbook/graph.cpp
+++ b/noncore/apps/checkbook/graph.cpp
@@ -1,179 +1,181 @@
1/* 1/*
2                This file is part of the OPIE Project 2                This file is part of the OPIE Project
3 =. 3 =.
4             .=l. Copyright (c) 2002 Dan Williams <williamsdr@acm.org> 4             .=l. Copyright (c) 2002 Dan Williams <williamsdr@acm.org>
5           .>+-= 5           .>+-=
6 _;:,     .>    :=|. This file is free software; you can 6 _;:,     .>    :=|. This file is free software; you can
7.> <`_,   >  .   <= redistribute it and/or modify it under 7.> <`_,   >  .   <= redistribute it and/or modify it under
8:`=1 )Y*s>-.--   : the terms of the GNU General Public 8:`=1 )Y*s>-.--   : the terms of the GNU General Public
9.="- .-=="i,     .._ License as published by the Free Software 9.="- .-=="i,     .._ License as published by the Free Software
10 - .   .-<_>     .<> Foundation; either version 2 of the License, 10 - .   .-<_>     .<> Foundation; either version 2 of the License,
11     ._= =}       : or (at your option) any later version. 11     ._= =}       : or (at your option) any later version.
12    .%`+i>       _;_. 12    .%`+i>       _;_.
13    .i_,=:_.      -<s. This file is distributed in the hope that 13    .i_,=:_.      -<s. This file is distributed in the hope that
14     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 14     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
15    : ..    .:,     . . . without even the implied warranty of 15    : ..    .:,     . . . without even the implied warranty of
16    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 16    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
17  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General 17  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General
18..}^=.=       =       ; Public License for more details. 18..}^=.=       =       ; Public License for more details.
19++=   -.     .`     .: 19++=   -.     .`     .:
20 :     =  ...= . :.=- You should have received a copy of the GNU 20 :     =  ...= . :.=- You should have received a copy of the GNU
21 -.   .:....=;==+<; General Public License along with this file; 21 -.   .:....=;==+<; General Public License along with this file;
22  -_. . .   )=.  = see the file COPYING. If not, write to the 22  -_. . .   )=.  = see the file COPYING. If not, write to the
23    --        :-=` Free Software Foundation, Inc., 23    --        :-=` Free Software Foundation, Inc.,
24 59 Temple Place - Suite 330, 24 59 Temple Place - Suite 330,
25 Boston, MA 02111-1307, USA. 25 Boston, MA 02111-1307, USA.
26 26
27*/ 27*/
28 28
29#include "graph.h" 29#include "graph.h"
30#include "graphinfo.h" 30#include "graphinfo.h"
31 31
32#include <qcolor.h> 32#include <qcolor.h>
33#include <qfontmetrics.h> 33#include <qfontmetrics.h>
34#include <qpainter.h> 34#include <qpainter.h>
35 35
36#include <math.h>
37
36Graph::Graph( QWidget *parent, GraphInfo *d, const QString &name, int flags ) 38Graph::Graph( QWidget *parent, GraphInfo *d, const QString &name, int flags )
37 : QWidget( parent, name, flags ) 39 : QWidget( parent, name, flags )
38{ 40{
39 data = d; 41 data = d;
40 42
41 graph.setOptimization( QPixmap::BestOptim ); 43 graph.setOptimization( QPixmap::BestOptim );
42} 44}
43 45
44void Graph::setGraphInfo( GraphInfo *d ) 46void Graph::setGraphInfo( GraphInfo *d )
45{ 47{
46 data = d; 48 data = d;
47} 49}
48 50
49void Graph::drawGraph( bool regen ) 51void Graph::drawGraph( bool regen )
50{ 52{
51 if ( regen ) 53 if ( regen )
52 { 54 {
53 initGraph(); 55 initGraph();
54 } 56 }
55 QPainter p( this ); 57 QPainter p( this );
56 p.drawPixmap( 0, 0, graph ); 58 p.drawPixmap( 0, 0, graph );
57} 59}
58 60
59void Graph::paintEvent( QPaintEvent * ) 61void Graph::paintEvent( QPaintEvent * )
60{ 62{
61 drawGraph( FALSE ); 63 drawGraph( FALSE );
62} 64}
63 65
64void Graph::resizeEvent( QResizeEvent * ) 66void Graph::resizeEvent( QResizeEvent * )
65{ 67{
66 drawGraph( TRUE ); 68 drawGraph( TRUE );
67} 69}
68 70
69void Graph::initGraph() 71void Graph::initGraph()
70{ 72{
71 graph.resize( width(), height() ); 73 graph.resize( width(), height() );
72 graph.fill( QColor( 255, 255, 255 ) ); 74 graph.fill( QColor( 255, 255, 255 ) );
73 75
74 if ( !data ) 76 if ( !data )
75 { 77 {
76 return; 78 return;
77 } 79 }
78 80
79 // Any common stuff here (titles, ???) 81 // Any common stuff here (titles, ???)
80 82
81 switch ( data->graphType() ) 83 switch ( data->graphType() )
82 { 84 {
83 case GraphInfo::BarChart : 85 case GraphInfo::BarChart :
84 { 86 {
85 drawBarChart( width(), height(), data->maxValue() ); 87 drawBarChart( width(), height(), data->maxValue() );
86 } 88 }
87 break; 89 break;
88 case GraphInfo::LineChart : 90 case GraphInfo::LineChart :
89 { 91 {
90 //drawLineChart( p, s, min, max ); 92 //drawLineChart( p, s, min, max );
91 } 93 }
92 break; 94 break;
93 case GraphInfo::PieChart : 95 case GraphInfo::PieChart :
94 { 96 {
95 drawPieChart( width(), height(), data->totalValue() ); 97 drawPieChart( width(), height(), data->totalValue() );
96 } 98 }
97 }; 99 };
98} 100}
99 101
100void Graph::drawBarChart( int width, int height, float max ) 102void Graph::drawBarChart( int width, int height, float max )
101{ 103{
102 QPainter p( &graph ); 104 QPainter p( &graph );
103 105
104 // Try to set the font size smaller for text 106 // Try to set the font size smaller for text
105 QFont f = font(); 107 QFont f = font();
106 f.setPointSize( 8 ); 108 f.setPointSize( 8 );
107 p.setFont( f ); 109 p.setFont( f );
108 110
109 int x = 0; 111 int x = 0;
110 int i = 0; 112 int i = 0;
111 int n = data->numberDataPoints(); 113 int n = data->numberDataPoints();
112 QFontMetrics fm=fontMetrics(); 114 QFontMetrics fm=fontMetrics();
113 int fh = fm.height(); 115 int fh = fm.height();
114 int fw; 116 int fw;
115 117
116 QColor c( 0, 0, 255); 118 QColor c( 0, 0, 255);
117 p.setBrush( c ); 119 p.setBrush( c );
118 120
119 for (DataPointInfo *dp = data->firstDataPoint(); dp; dp = data->nextDataPoint() ) 121 for (DataPointInfo *dp = data->firstDataPoint(); dp; dp = data->nextDataPoint() )
120 { 122 {
121 int bw = ( width - width / 4 - x ) / ( n - i ); 123 int bw = ( width - width / 4 - x ) / ( n - i );
122 int bh = int( ( height - height / 4 - 1 ) * dp->value() / max ); 124 int bh = int( ( height - height / 4 - 1 ) * dp->value() / max );
123 p.drawRect( width / 8 + x, height - height / 8 - 1 - bh, bw, bh ); 125 p.drawRect( width / 8 + x, height - height / 8 - 1 - bh, bw, bh );
124 fw = fm.width( dp->label() ); 126 fw = fm.width( dp->label() );
125 p.drawText( width / 8 + x - fw / 2 + bw / 2, height - height / 8, fw, 127 p.drawText( width / 8 + x - fw / 2 + bw / 2, height - height / 8, fw,
126 fh + height / 8, AlignTop | AlignHCenter, dp->label() ); 128 fh + height / 8, AlignTop | AlignHCenter, dp->label() );
127 // WordBreak | AlignTop | AlignHCenter, dp->label() ); 129 // WordBreak | AlignTop | AlignHCenter, dp->label() );
128 i++; 130 i++;
129 x += bw; 131 x += bw;
130 } 132 }
131} 133}
132 134
133void Graph::drawLineChart( int width, int height, float max ) 135void Graph::drawLineChart( int width, int height, float max )
134{ 136{
135} 137}
136 138
137void Graph::drawPieChart( int width, int height, float sum ) 139void Graph::drawPieChart( int width, int height, float sum )
138{ 140{
139 QPainter p( &graph ); 141 QPainter p( &graph );
140 142
141 // Try to set the font size smaller for text 143 // Try to set the font size smaller for text
142 QFont f = font(); 144 QFont f = font();
143 f.setPointSize( 8 ); 145 f.setPointSize( 8 );
144 p.setFont( f ); 146 p.setFont( f );
145 147
146 int n = data->numberDataPoints(); 148 int n = data->numberDataPoints();
147 149
148 int apos = -90 * 16; 150 int apos = -90 * 16;
149 151
150 int xd = width - width / 5; 152 int xd = width - width / 5;
151 int yd = height - height / 5; 153 int yd = height - height / 5;
152 154
153 int i = 0; 155 int i = 0;
154 156
155 QColor c; 157 QColor c;
156 158
157 for (DataPointInfo *dp = data->firstDataPoint(); dp; dp = data->nextDataPoint() ) 159 for (DataPointInfo *dp = data->firstDataPoint(); dp; dp = data->nextDataPoint() )
158 { 160 {
159 c.setHsv( ( i *255) / n, 255, 255 ); 161 c.setHsv( ( i *255) / n, 255, 255 );
160 p.setBrush( c ); 162 p.setBrush( c );
161 163
162 int a = int( ( dp->value() * 360.0 ) / sum * 16.0 + 0.5 ); 164 int a = int( ( dp->value() * 360.0 ) / sum * 16.0 + 0.5 );
163 p.drawPie( width/10, height/10, xd, yd, -apos, -a ); 165 p.drawPie( width/10, height/10, xd, yd, -apos, -a );
164 apos += a; 166 apos += a;
165 i++; 167 i++;
166 } 168 }
167 169
168 double apos2 = -90 * 3.14159 / 180; 170 double apos2 = -90 * 3.14159 / 180;
169 for (DataPointInfo *dp = data->firstDataPoint(); dp; dp = data->nextDataPoint() ) 171 for (DataPointInfo *dp = data->firstDataPoint(); dp; dp = data->nextDataPoint() )
170 { 172 {
171 double a = dp->value() *360 / sum * 3.14159 / 180; 173 double a = dp->value() *360 / sum * 3.14159 / 180;
172 int x = int( cos( apos2 + a/2 ) * width * 5/16 + width/2 + 0.5 ); 174 int x = int( cos( apos2 + a/2 ) * width * 5/16 + width/2 + 0.5 );
173 int y = int( sin( apos2 + a/2 ) * height * 5/16 + height/2 + 0.5 ); 175 int y = int( sin( apos2 + a/2 ) * height * 5/16 + height/2 + 0.5 );
174 p.drawText( x - width/8, y - height/8, width/4, height/4, WordBreak | AlignCenter, 176 p.drawText( x - width/8, y - height/8, width/4, height/4, WordBreak | AlignCenter,
175 dp->label() ); 177 dp->label() );
176 apos2 += a; 178 apos2 += a;
177 } 179 }
178} 180}
179 181