author | eric <eric> | 2003-04-15 07:42:19 (UTC) |
---|---|---|
committer | eric <eric> | 2003-04-15 07:42:19 (UTC) |
commit | e263613e83b64fa93b5f3c1b904715daf076cc78 (patch) (unidiff) | |
tree | 2c41969e72ec324cb60e0c34516b945832f89c10 | |
parent | 99b059a9d6f16f1e30b0088d35deacf8b9384f28 (diff) | |
download | opie-e263613e83b64fa93b5f3c1b904715daf076cc78.zip opie-e263613e83b64fa93b5f3c1b904715daf076cc78.tar.gz opie-e263613e83b64fa93b5f3c1b904715daf076cc78.tar.bz2 |
- Fix a bug with numbers between 0 and 1.
-rw-r--r-- | noncore/tools/euroconv/calcdisplay.cpp | 4 | ||||
-rw-r--r-- | noncore/tools/euroconv/calckeypad.cpp | 13 |
2 files changed, 11 insertions, 6 deletions
diff --git a/noncore/tools/euroconv/calcdisplay.cpp b/noncore/tools/euroconv/calcdisplay.cpp index 898de81..e5a49e6 100644 --- a/noncore/tools/euroconv/calcdisplay.cpp +++ b/noncore/tools/euroconv/calcdisplay.cpp | |||
@@ -1,248 +1,248 @@ | |||
1 | /**************************************************************************** | 1 | /**************************************************************************** |
2 | * | 2 | * |
3 | * File: calcdisplay.cpp | 3 | * File: calcdisplay.cpp |
4 | * | 4 | * |
5 | * Description: | 5 | * Description: |
6 | * | 6 | * |
7 | * | 7 | * |
8 | * Authors: Eric Santonacci <Eric.Santonacci@talc.fr> | 8 | * Authors: Eric Santonacci <Eric.Santonacci@talc.fr> |
9 | * | 9 | * |
10 | * Requirements: Qt | 10 | * Requirements: Qt |
11 | * | 11 | * |
12 | * $Id$ | 12 | * $Id$ |
13 | * | 13 | * |
14 | ***************************************************************************/ | 14 | ***************************************************************************/ |
15 | 15 | ||
16 | #include <stdio.h> | 16 | #include <stdio.h> |
17 | #include <qvbox.h> | 17 | #include <qvbox.h> |
18 | #include <qpixmap.h> | 18 | #include <qpixmap.h> |
19 | 19 | ||
20 | #include "currency.h" | 20 | #include "currency.h" |
21 | #include "calcdisplay.h" | 21 | #include "calcdisplay.h" |
22 | 22 | ||
23 | 23 | ||
24 | LCDDisplay::LCDDisplay( QWidget *parent, const char *name ) | 24 | LCDDisplay::LCDDisplay( QWidget *parent, const char *name ) |
25 | : QHBox( parent, name ){ | 25 | : QHBox( parent, name ){ |
26 | 26 | ||
27 | 27 | ||
28 | 28 | ||
29 | this->setMargin(5); | 29 | this->setMargin(5); |
30 | this->setSpacing(5); | 30 | this->setSpacing(5); |
31 | 31 | ||
32 | // Create display | 32 | // Create display |
33 | QVBox *vbxlayout = new QVBox (this); | 33 | QVBox *vbxlayout = new QVBox (this); |
34 | 34 | ||
35 | /*************** Top LCD ***********************/ | 35 | /*************** Top LCD ***********************/ |
36 | grpbxTop = new QHGroupBox(vbxlayout, "grpbxTop"); | 36 | grpbxTop = new QHGroupBox(vbxlayout, "grpbxTop"); |
37 | grpbxStyle = grpbxTop->frameStyle(); | 37 | grpbxStyle = grpbxTop->frameStyle(); |
38 | grpbxTop->setMaximumHeight(48); | 38 | grpbxTop->setMaximumHeight(48); |
39 | 39 | ||
40 | cbbxTop = new QComboBox(grpbxTop, "cbbxTop"); | 40 | cbbxTop = new QComboBox(grpbxTop, "cbbxTop"); |
41 | cbbxTop->setMaximumWidth(50); | 41 | cbbxTop->setMaximumWidth(50); |
42 | cbbxTop->insertStrList(aCurrency); | 42 | cbbxTop->insertStrList(aCurrency); |
43 | 43 | ||
44 | lcdTop = new QLCDNumber(10, grpbxTop, "lcdTop"); | 44 | lcdTop = new QLCDNumber(10, grpbxTop, "lcdTop"); |
45 | lcdTop->setMode( QLCDNumber::DEC ); | 45 | lcdTop->setMode( QLCDNumber::DEC ); |
46 | lcdTop->setSmallDecimalPoint(true); | 46 | lcdTop->setSmallDecimalPoint(false); |
47 | lcdTop->setSegmentStyle(QLCDNumber::Flat); | 47 | lcdTop->setSegmentStyle(QLCDNumber::Flat); |
48 | 48 | ||
49 | /************** Bottom LCD ************************/ | 49 | /************** Bottom LCD ************************/ |
50 | grpbxBottom = new QHGroupBox(vbxlayout, "grpbxBottom"); | 50 | grpbxBottom = new QHGroupBox(vbxlayout, "grpbxBottom"); |
51 | grpbxBottom->setMaximumHeight(46); | 51 | grpbxBottom->setMaximumHeight(46); |
52 | grpbxBottom->setFrameStyle(0); | 52 | grpbxBottom->setFrameStyle(0); |
53 | grpbxBottom->setFrameShadow(QFrame::MShadow); | 53 | grpbxBottom->setFrameShadow(QFrame::MShadow); |
54 | 54 | ||
55 | cbbxBottom = new QComboBox(grpbxBottom, "cbbxBottom"); | 55 | cbbxBottom = new QComboBox(grpbxBottom, "cbbxBottom"); |
56 | cbbxBottom->setMaximumWidth(50); | 56 | cbbxBottom->setMaximumWidth(50); |
57 | cbbxBottom->insertStrList(aCurrency); | 57 | cbbxBottom->insertStrList(aCurrency); |
58 | 58 | ||
59 | lcdBottom = new QLCDNumber(10, grpbxBottom, "lcdBottom"); | 59 | lcdBottom = new QLCDNumber(10, grpbxBottom, "lcdBottom"); |
60 | lcdBottom->setMode( QLCDNumber::DEC ); | 60 | lcdBottom->setMode( QLCDNumber::DEC ); |
61 | lcdBottom->setSmallDecimalPoint(true); | 61 | lcdBottom->setSmallDecimalPoint(false); |
62 | lcdBottom->setSegmentStyle(QLCDNumber::Flat); | 62 | lcdBottom->setSegmentStyle(QLCDNumber::Flat); |
63 | 63 | ||
64 | // set combo box signals | 64 | // set combo box signals |
65 | connect(cbbxTop, SIGNAL(activated(int)), this, SLOT(cbbxChange())); | 65 | connect(cbbxTop, SIGNAL(activated(int)), this, SLOT(cbbxChange())); |
66 | connect(cbbxBottom, SIGNAL(activated(int)), this, SLOT(cbbxChange())); | 66 | connect(cbbxBottom, SIGNAL(activated(int)), this, SLOT(cbbxChange())); |
67 | 67 | ||
68 | btnSwap = new QPushButton(this, "swap"); | 68 | btnSwap = new QPushButton(this, "swap"); |
69 | QPixmap imgSwap((const char**) swap_xpm); | 69 | QPixmap imgSwap((const char**) swap_xpm); |
70 | btnSwap->setPixmap(imgSwap); | 70 | btnSwap->setPixmap(imgSwap); |
71 | btnSwap->setFixedSize(20,40); | 71 | btnSwap->setFixedSize(20,40); |
72 | // set signal | 72 | // set signal |
73 | connect(btnSwap, SIGNAL(clicked()), this, SLOT(swapLCD())); | 73 | connect(btnSwap, SIGNAL(clicked()), this, SLOT(swapLCD())); |
74 | 74 | ||
75 | // set default LCD to top | 75 | // set default LCD to top |
76 | iCurrentLCD = 0; | 76 | iCurrentLCD = 0; |
77 | 77 | ||
78 | } | 78 | } |
79 | 79 | ||
80 | /*********************************************************************** | 80 | /*********************************************************************** |
81 | * SLOT: Display value in the correct LCD | 81 | * SLOT: Display value in the correct LCD |
82 | **********************************************************************/ | 82 | **********************************************************************/ |
83 | void LCDDisplay::setValue(double dSrcValue){ | 83 | void LCDDisplay::setValue(double dSrcValue){ |
84 | 84 | ||
85 | double dDstValue=0; | 85 | double dDstValue=0; |
86 | 86 | ||
87 | int iSrcIndex; | 87 | int iSrcIndex; |
88 | int iDstIndex; | 88 | int iDstIndex; |
89 | 89 | ||
90 | 90 | ||
91 | // get item index of the focused | 91 | // get item index of the focused |
92 | if(!iCurrentLCD){ | 92 | if(!iCurrentLCD){ |
93 | iSrcIndex = cbbxTop->currentItem(); | 93 | iSrcIndex = cbbxTop->currentItem(); |
94 | iDstIndex = cbbxBottom->currentItem(); | 94 | iDstIndex = cbbxBottom->currentItem(); |
95 | }else{ | 95 | }else{ |
96 | iSrcIndex = cbbxBottom->currentItem(); | 96 | iSrcIndex = cbbxBottom->currentItem(); |
97 | iDstIndex = cbbxTop->currentItem(); | 97 | iDstIndex = cbbxTop->currentItem(); |
98 | } | 98 | } |
99 | 99 | ||
100 | if(iSrcIndex == iDstIndex) | 100 | if(iSrcIndex == iDstIndex) |
101 | dDstValue = dSrcValue; | 101 | dDstValue = dSrcValue; |
102 | else{ | 102 | else{ |
103 | if(iSrcIndex){ | 103 | if(iSrcIndex){ |
104 | // we are NOT in Euro as iDstIndex <> 0 | 104 | // we are NOT in Euro as iDstIndex <> 0 |
105 | // Convert to Euro | 105 | // Convert to Euro |
106 | dDstValue = x2Euro(iSrcIndex, dSrcValue); | 106 | dDstValue = x2Euro(iSrcIndex, dSrcValue); |
107 | dDstValue = Euro2x(iDstIndex, dDstValue); | 107 | dDstValue = Euro2x(iDstIndex, dDstValue); |
108 | }else | 108 | }else |
109 | // We are in Euro | 109 | // We are in Euro |
110 | dDstValue = Euro2x(iDstIndex, dSrcValue); | 110 | dDstValue = Euro2x(iDstIndex, dSrcValue); |
111 | } | 111 | } |
112 | 112 | ||
113 | 113 | ||
114 | if(!iCurrentLCD){ | 114 | if(!iCurrentLCD){ |
115 | lcdTop->display(dSrcValue); | 115 | lcdTop->display(dSrcValue); |
116 | lcdBottom->display(dDstValue); | 116 | lcdBottom->display(dDstValue); |
117 | }else{ | 117 | }else{ |
118 | lcdBottom->display(dSrcValue); | 118 | lcdBottom->display(dSrcValue); |
119 | lcdTop->display(dDstValue); | 119 | lcdTop->display(dDstValue); |
120 | } | 120 | } |
121 | 121 | ||
122 | } | 122 | } |
123 | 123 | ||
124 | /*********************************************************************** | 124 | /*********************************************************************** |
125 | * SLOT: Swap output keypad between LCD displays | 125 | * SLOT: Swap output keypad between LCD displays |
126 | **********************************************************************/ | 126 | **********************************************************************/ |
127 | void LCDDisplay::swapLCD(void){ | 127 | void LCDDisplay::swapLCD(void){ |
128 | 128 | ||
129 | double dCurrentValue; | 129 | double dCurrentValue; |
130 | 130 | ||
131 | // get current value | 131 | // get current value |
132 | if(!iCurrentLCD){ | 132 | if(!iCurrentLCD){ |
133 | // iCurrentLCD = 0, lcdTop has current focus and is going to loose | 133 | // iCurrentLCD = 0, lcdTop has current focus and is going to loose |
134 | // it | 134 | // it |
135 | dCurrentValue = lcdTop->value(); | 135 | dCurrentValue = lcdTop->value(); |
136 | iCurrentLCD = 1; | 136 | iCurrentLCD = 1; |
137 | grpbxTop->setFrameStyle(0); | 137 | grpbxTop->setFrameStyle(0); |
138 | grpbxBottom->setFrameStyle(grpbxStyle); | 138 | grpbxBottom->setFrameStyle(grpbxStyle); |
139 | }else{ | 139 | }else{ |
140 | dCurrentValue = lcdBottom->value(); | 140 | dCurrentValue = lcdBottom->value(); |
141 | iCurrentLCD = 0; | 141 | iCurrentLCD = 0; |
142 | grpbxTop->setFrameStyle(grpbxStyle); | 142 | grpbxTop->setFrameStyle(grpbxStyle); |
143 | grpbxBottom->setFrameStyle(0); | 143 | grpbxBottom->setFrameStyle(0); |
144 | } | 144 | } |
145 | 145 | ||
146 | setValue(dCurrentValue); | 146 | setValue(dCurrentValue); |
147 | } | 147 | } |
148 | 148 | ||
149 | /*********************************************************************** | 149 | /*********************************************************************** |
150 | * SLOT: Currency change | 150 | * SLOT: Currency change |
151 | **********************************************************************/ | 151 | **********************************************************************/ |
152 | void LCDDisplay::cbbxChange(void){ | 152 | void LCDDisplay::cbbxChange(void){ |
153 | 153 | ||
154 | double dCurrentValue; | 154 | double dCurrentValue; |
155 | 155 | ||
156 | // get current value | 156 | // get current value |
157 | if(!iCurrentLCD){ | 157 | if(!iCurrentLCD){ |
158 | dCurrentValue = lcdTop->value(); | 158 | dCurrentValue = lcdTop->value(); |
159 | }else{ | 159 | }else{ |
160 | dCurrentValue = lcdBottom->value(); | 160 | dCurrentValue = lcdBottom->value(); |
161 | } | 161 | } |
162 | 162 | ||
163 | setValue(dCurrentValue); | 163 | setValue(dCurrentValue); |
164 | } | 164 | } |
165 | 165 | ||
166 | 166 | ||
167 | /*********************************************************************** | 167 | /*********************************************************************** |
168 | * Euro2x converts dValue from Euro to the currency which combo box | 168 | * Euro2x converts dValue from Euro to the currency which combo box |
169 | * index is provided in iIndex. | 169 | * index is provided in iIndex. |
170 | **********************************************************************/ | 170 | **********************************************************************/ |
171 | double LCDDisplay::Euro2x(int iIndex, double dValue){ | 171 | double LCDDisplay::Euro2x(int iIndex, double dValue){ |
172 | 172 | ||
173 | switch (iIndex){ | 173 | switch (iIndex){ |
174 | case 0: // Euro | 174 | case 0: // Euro |
175 | return(dValue); | 175 | return(dValue); |
176 | break; | 176 | break; |
177 | 177 | ||
178 | case 1: // FF: French Francs | 178 | case 1: // FF: French Francs |
179 | return(dValue*FRF); | 179 | return(dValue*FRF); |
180 | break; | 180 | break; |
181 | 181 | ||
182 | case 2: // DM: Deutch Mark | 182 | case 2: // DM: Deutch Mark |
183 | return(dValue*DEM); | 183 | return(dValue*DEM); |
184 | break; | 184 | break; |
185 | 185 | ||
186 | case 3: // BEL Belgium Francs | 186 | case 3: // BEL Belgium Francs |
187 | return(dValue*BEF); | 187 | return(dValue*BEF); |
188 | break; | 188 | break; |
189 | 189 | ||
190 | case 4: // ITL Itialian Lire | 190 | case 4: // ITL Itialian Lire |
191 | return(dValue*ITL); | 191 | return(dValue*ITL); |
192 | break; | 192 | break; |
193 | 193 | ||
194 | case 5: // LUF Luxemburg | 194 | case 5: // LUF Luxemburg |
195 | return(dValue*LUF); | 195 | return(dValue*LUF); |
196 | break; | 196 | break; |
197 | 197 | ||
198 | case 6: // IEP Irish Pound | 198 | case 6: // IEP Irish Pound |
199 | return(dValue*IEP); | 199 | return(dValue*IEP); |
200 | break; | 200 | break; |
201 | 201 | ||
202 | default: | 202 | default: |
203 | return 0; | 203 | return 0; |
204 | }//switch (iIndex) | 204 | }//switch (iIndex) |
205 | }// fct Eur2x | 205 | }// fct Eur2x |
206 | 206 | ||
207 | 207 | ||
208 | 208 | ||
209 | /*********************************************************************** | 209 | /*********************************************************************** |
210 | * x2Euro converts dValue to Euro from the currency which combo box | 210 | * x2Euro converts dValue to Euro from the currency which combo box |
211 | * index is provided in iIndex. | 211 | * index is provided in iIndex. |
212 | **********************************************************************/ | 212 | **********************************************************************/ |
213 | double LCDDisplay::x2Euro(int iIndex, double dValue){ | 213 | double LCDDisplay::x2Euro(int iIndex, double dValue){ |
214 | 214 | ||
215 | switch (iIndex){ | 215 | switch (iIndex){ |
216 | case 0: // Euro | 216 | case 0: // Euro |
217 | return(dValue); | 217 | return(dValue); |
218 | break; | 218 | break; |
219 | 219 | ||
220 | case 1: // FF: French Francs | 220 | case 1: // FF: French Francs |
221 | return(dValue/FRF); | 221 | return(dValue/FRF); |
222 | break; | 222 | break; |
223 | 223 | ||
224 | case 2: // DM: Deutch Mark | 224 | case 2: // DM: Deutch Mark |
225 | return(dValue/DEM); | 225 | return(dValue/DEM); |
226 | break; | 226 | break; |
227 | 227 | ||
228 | case 3: // BEL Belgium Francs | 228 | case 3: // BEL Belgium Francs |
229 | return(dValue/BEF); | 229 | return(dValue/BEF); |
230 | break; | 230 | break; |
231 | 231 | ||
232 | case 4: // ITL Itialian Lire | 232 | case 4: // ITL Itialian Lire |
233 | return(dValue/ITL); | 233 | return(dValue/ITL); |
234 | break; | 234 | break; |
235 | 235 | ||
236 | case 5: // LUF Luxemburg | 236 | case 5: // LUF Luxemburg |
237 | return(dValue/LUF); | 237 | return(dValue/LUF); |
238 | break; | 238 | break; |
239 | 239 | ||
240 | case 6: // IEP Irish Pound | 240 | case 6: // IEP Irish Pound |
241 | return(dValue/IEP); | 241 | return(dValue/IEP); |
242 | break; | 242 | break; |
243 | }//switch (iIndex) | 243 | }//switch (iIndex) |
244 | 244 | ||
245 | // we shouldn't come here | 245 | // we shouldn't come here |
246 | return 0; | 246 | return 0; |
247 | 247 | ||
248 | }// fct x2Euro | 248 | }// fct x2Euro |
diff --git a/noncore/tools/euroconv/calckeypad.cpp b/noncore/tools/euroconv/calckeypad.cpp index 1678095..e4898a3 100644 --- a/noncore/tools/euroconv/calckeypad.cpp +++ b/noncore/tools/euroconv/calckeypad.cpp | |||
@@ -1,214 +1,219 @@ | |||
1 | /**************************************************************************** | 1 | /**************************************************************************** |
2 | * | 2 | * |
3 | * File: calckeypad.cpp | 3 | * File: calckeypad.cpp |
4 | * | 4 | * |
5 | * Description: | 5 | * Description: |
6 | * | 6 | * |
7 | * | 7 | * |
8 | * Authors: Eric Santonacci <Eric.Santonacci@talc.fr> | 8 | * Authors: Eric Santonacci <Eric.Santonacci@talc.fr> |
9 | * | 9 | * |
10 | * Requirements: Qt | 10 | * Requirements: Qt |
11 | * | 11 | * |
12 | * $Id$ | 12 | * $Id$ |
13 | * | 13 | * |
14 | ***************************************************************************/ | 14 | ***************************************************************************/ |
15 | 15 | ||
16 | #include <qmessagebox.h> | 16 | #include <qmessagebox.h> |
17 | 17 | ||
18 | #include "calckeypad.h" | 18 | #include "calckeypad.h" |
19 | 19 | ||
20 | 20 | ||
21 | KeyPad::KeyPad(LCDDisplay *lcd, QWidget *parent, const char *name ) | 21 | KeyPad::KeyPad(LCDDisplay *lcd, QWidget *parent, const char *name ) |
22 | : QGrid(5, parent, name){ | 22 | : QGrid(5, parent, name){ |
23 | 23 | ||
24 | int i; | 24 | int i; |
25 | QButton *btnButton; | 25 | QButton *btnButton; |
26 | 26 | ||
27 | // save lcd at init | 27 | // save lcd at init |
28 | display = lcd; | 28 | display = lcd; |
29 | // Init variable | 29 | // Init variable |
30 | dCurrent = 0; | 30 | dCurrent = 0; |
31 | iLenCurrent = 1; | 31 | iLenCurrent = 1; |
32 | bIsDec = false; | 32 | bIsDec = false; |
33 | dDecCurrent = 0; | 33 | dDecCurrent = 0; |
34 | iPreviousOperator = 0; | 34 | iPreviousOperator = 0; |
35 | dPreviousValue = 0; | 35 | dPreviousValue = 0; |
36 | 36 | ||
37 | // First line | 37 | // First line |
38 | btnClear = new QPushButton("CE/C", this, "Clear"); | 38 | btnClear = new QPushButton("CE/C", this, "Clear"); |
39 | btn7 = new QPushButton("7", this, "7"); | 39 | btn7 = new QPushButton("7", this, "7"); |
40 | btn8 = new QPushButton("8", this, "8"); | 40 | btn8 = new QPushButton("8", this, "8"); |
41 | btn9 = new QPushButton("9", this, "9"); | 41 | btn9 = new QPushButton("9", this, "9"); |
42 | btnPlus = new QPushButton("+", this, "+"); | 42 | btnPlus = new QPushButton("+", this, "+"); |
43 | // 2nd line | 43 | // 2nd line |
44 | btnPercent = new QPushButton("%", this, "percent"); | 44 | btnPercent = new QPushButton("%", this, "percent"); |
45 | btn4 = new QPushButton("4", this, "4"); | 45 | btn4 = new QPushButton("4", this, "4"); |
46 | btn5 = new QPushButton("5", this, "5"); | 46 | btn5 = new QPushButton("5", this, "5"); |
47 | btn6 = new QPushButton("6", this, "6"); | 47 | btn6 = new QPushButton("6", this, "6"); |
48 | btnMinus = new QPushButton("-", this, "-"); | 48 | btnMinus = new QPushButton("-", this, "-"); |
49 | // 3rd line | 49 | // 3rd line |
50 | btnF1 = new QPushButton("",this, "F1"); | 50 | btnF1 = new QPushButton("",this, "F1"); |
51 | btn1 = new QPushButton("1", this, "1"); | 51 | btn1 = new QPushButton("1", this, "1"); |
52 | btn2 = new QPushButton("2", this, "2"); | 52 | btn2 = new QPushButton("2", this, "2"); |
53 | btn3 = new QPushButton("3", this, "3"); | 53 | btn3 = new QPushButton("3", this, "3"); |
54 | btnMultiply = new QPushButton("X", this, "X"); | 54 | btnMultiply = new QPushButton("X", this, "X"); |
55 | // 4th line | 55 | // 4th line |
56 | btnAbout = new QPushButton("?", this, "About"); | 56 | btnAbout = new QPushButton("?", this, "About"); |
57 | btn0 = new QPushButton("0", this, "0"); | 57 | btn0 = new QPushButton("0", this, "0"); |
58 | btnDot = new QPushButton(".", this, "dot"); | 58 | btnDot = new QPushButton(".", this, "dot"); |
59 | btnEqual = new QPushButton("=", this, "equal"); | 59 | btnEqual = new QPushButton("=", this, "equal"); |
60 | btnDivide = new QPushButton("/", this, "divide"); | 60 | btnDivide = new QPushButton("/", this, "divide"); |
61 | 61 | ||
62 | // Digit key | 62 | // Digit key |
63 | grpbtnDigits = new QButtonGroup(0, "digits"); | 63 | grpbtnDigits = new QButtonGroup(0, "digits"); |
64 | grpbtnDigits->insert(btn0, 0); | 64 | grpbtnDigits->insert(btn0, 0); |
65 | grpbtnDigits->insert(btn1, 1); | 65 | grpbtnDigits->insert(btn1, 1); |
66 | grpbtnDigits->insert(btn2, 2); | 66 | grpbtnDigits->insert(btn2, 2); |
67 | grpbtnDigits->insert(btn3, 3); | 67 | grpbtnDigits->insert(btn3, 3); |
68 | grpbtnDigits->insert(btn4, 4); | 68 | grpbtnDigits->insert(btn4, 4); |
69 | grpbtnDigits->insert(btn5, 5); | 69 | grpbtnDigits->insert(btn5, 5); |
70 | grpbtnDigits->insert(btn6, 6); | 70 | grpbtnDigits->insert(btn6, 6); |
71 | grpbtnDigits->insert(btn7, 7); | 71 | grpbtnDigits->insert(btn7, 7); |
72 | grpbtnDigits->insert(btn8, 8); | 72 | grpbtnDigits->insert(btn8, 8); |
73 | grpbtnDigits->insert(btn9, 9); | 73 | grpbtnDigits->insert(btn9, 9); |
74 | 74 | ||
75 | // set appearance of buttons | 75 | // set appearance of buttons |
76 | for(i=0; i<10; i++){ | 76 | for(i=0; i<10; i++){ |
77 | btnButton = grpbtnDigits->find(i); | 77 | btnButton = grpbtnDigits->find(i); |
78 | btnButton->setFixedSize(30,30); | 78 | btnButton->setFixedSize(30,30); |
79 | } | 79 | } |
80 | 80 | ||
81 | // Operator key | 81 | // Operator key |
82 | grpbtnOperators = new QButtonGroup(0, "operator"); | 82 | grpbtnOperators = new QButtonGroup(0, "operator"); |
83 | grpbtnOperators->insert(btnPlus, 1); | 83 | grpbtnOperators->insert(btnPlus, 1); |
84 | grpbtnOperators->insert(btnMinus,2); | 84 | grpbtnOperators->insert(btnMinus,2); |
85 | grpbtnOperators->insert(btnMultiply,3); | 85 | grpbtnOperators->insert(btnMultiply,3); |
86 | grpbtnOperators->insert(btnDivide,4); | 86 | grpbtnOperators->insert(btnDivide,4); |
87 | grpbtnOperators->insert(btnEqual,5); | 87 | grpbtnOperators->insert(btnEqual,5); |
88 | // set appearance of buttons | 88 | // set appearance of buttons |
89 | for(i=1; i<6; i++){ | 89 | for(i=1; i<6; i++){ |
90 | btnButton = grpbtnOperators->find(i); | 90 | btnButton = grpbtnOperators->find(i); |
91 | btnButton->setFixedSize(30,30); | 91 | btnButton->setFixedSize(30,30); |
92 | } | 92 | } |
93 | btnClear->setFixedSize(30,30); | 93 | btnClear->setFixedSize(30,30); |
94 | btnClear->setPalette(QPalette( QColor(255, 99, 71) ) ); | 94 | btnClear->setPalette(QPalette( QColor(255, 99, 71) ) ); |
95 | btnDot->setFixedSize(30,30); | 95 | btnDot->setFixedSize(30,30); |
96 | btnPercent->setFixedSize(30,30); | 96 | btnPercent->setFixedSize(30,30); |
97 | btnF1->setFixedSize(30,30); | 97 | btnF1->setFixedSize(30,30); |
98 | btnAbout->setFixedSize(30,30); | 98 | btnAbout->setFixedSize(30,30); |
99 | 99 | ||
100 | 100 | ||
101 | // SIGNALS AND SLOTS | 101 | // SIGNALS AND SLOTS |
102 | connect(grpbtnDigits, SIGNAL(clicked(int) ), this, SLOT(enterDigits(int))); | 102 | connect(grpbtnDigits, SIGNAL(clicked(int) ), this, SLOT(enterDigits(int))); |
103 | connect(grpbtnOperators, SIGNAL(clicked(int)), this, SLOT(operatorPressed(int))); | 103 | connect(grpbtnOperators, SIGNAL(clicked(int)), this, SLOT(operatorPressed(int))); |
104 | connect(btnClear, SIGNAL(clicked()), this, SLOT(clearLCD())); | 104 | connect(btnClear, SIGNAL(clicked()), this, SLOT(clearLCD())); |
105 | connect(btnAbout, SIGNAL(clicked()), this, SLOT(aboutDialog())); | 105 | connect(btnAbout, SIGNAL(clicked()), this, SLOT(aboutDialog())); |
106 | connect(btnDot, SIGNAL(clicked()), this, SLOT(gotoDec())); | 106 | connect(btnDot, SIGNAL(clicked()), this, SLOT(gotoDec())); |
107 | } | 107 | } |
108 | 108 | ||
109 | 109 | ||
110 | /*********************************************************************** | 110 | /*********************************************************************** |
111 | * SLOT: enterDigits calculates the value to display and display it. | 111 | * SLOT: enterDigits calculates the value to display and display it. |
112 | **********************************************************************/ | 112 | **********************************************************************/ |
113 | void KeyPad::enterDigits(int i){ | 113 | void KeyPad::enterDigits(int i){ |
114 | 114 | ||
115 | if(!dCurrent) | 115 | if(!dCurrent) |
116 | dCurrent = i; | 116 | if(bIsDec) { |
117 | dCurrent = i*dDecCurrent; | ||
118 | dDecCurrent /= 10; | ||
119 | } | ||
120 | else | ||
121 | dCurrent = i; | ||
117 | else if(iLenCurrent > 9) | 122 | else if(iLenCurrent > 9) |
118 | return; | 123 | return; |
119 | else if(!bIsDec){ | 124 | else if(!bIsDec){ |
120 | dCurrent *= 10; | 125 | dCurrent *= 10; |
121 | dCurrent += i; | 126 | dCurrent += i; |
122 | iLenCurrent++; | 127 | iLenCurrent++; |
123 | }else{ | 128 | }else{ |
124 | dCurrent += i*dDecCurrent; | 129 | dCurrent += i*dDecCurrent; |
125 | dDecCurrent /= 10; | 130 | dDecCurrent /= 10; |
126 | } | 131 | } |
127 | 132 | ||
128 | display->setValue(dCurrent); | 133 | display->setValue(dCurrent); |
129 | } | 134 | } |
130 | 135 | ||
131 | /*********************************************************************** | 136 | /*********************************************************************** |
132 | * SLOT: Operator has been pressed | 137 | * SLOT: Operator has been pressed |
133 | **********************************************************************/ | 138 | **********************************************************************/ |
134 | void KeyPad::operatorPressed(int i){ | 139 | void KeyPad::operatorPressed(int i){ |
135 | 140 | ||
136 | if(iPreviousOperator){ | 141 | if(iPreviousOperator){ |
137 | switch(iPreviousOperator){ | 142 | switch(iPreviousOperator){ |
138 | case 1: // Plus + | 143 | case 1: // Plus + |
139 | dCurrent += dPreviousValue; | 144 | dCurrent += dPreviousValue; |
140 | break; | 145 | break; |
141 | 146 | ||
142 | case 2: // Minus - | 147 | case 2: // Minus - |
143 | dCurrent = dPreviousValue - dCurrent; | 148 | dCurrent = dPreviousValue - dCurrent; |
144 | break; | 149 | break; |
145 | 150 | ||
146 | case 3: // Multiply * | 151 | case 3: // Multiply * |
147 | dCurrent *= dPreviousValue; | 152 | dCurrent *= dPreviousValue; |
148 | break; | 153 | break; |
149 | 154 | ||
150 | case 4: // Divide / | 155 | case 4: // Divide / |
151 | dCurrent = dPreviousValue / dCurrent; | 156 | dCurrent = dPreviousValue / dCurrent; |
152 | break; | 157 | break; |
153 | 158 | ||
154 | } | 159 | } |
155 | display->setValue(dCurrent); | 160 | display->setValue(dCurrent); |
156 | } | 161 | } |
157 | 162 | ||
158 | if(i==5){ | 163 | if(i==5){ |
159 | // ensure we won't be able to enter more digits | 164 | // ensure we won't be able to enter more digits |
160 | iLenCurrent = 100; | 165 | iLenCurrent = 100; |
161 | iPreviousOperator = 0; | 166 | iPreviousOperator = 0; |
162 | dPreviousValue = 0; | 167 | dPreviousValue = 0; |
163 | }else{ | 168 | }else{ |
164 | dPreviousValue = dCurrent; | 169 | dPreviousValue = dCurrent; |
165 | iPreviousOperator = i; | 170 | iPreviousOperator = i; |
166 | 171 | ||
167 | // reset LCD for next digit | 172 | // reset LCD for next digit |
168 | dCurrent = 0; | 173 | dCurrent = 0; |
169 | iLenCurrent = 1; | 174 | iLenCurrent = 1; |
170 | bIsDec = false; | 175 | bIsDec = false; |
171 | dDecCurrent = 0; | 176 | dDecCurrent = 0; |
172 | } | 177 | } |
173 | } | 178 | } |
174 | /*********************************************************************** | 179 | /*********************************************************************** |
175 | * SLOT: clearLCD CE/C has been pressed | 180 | * SLOT: clearLCD CE/C has been pressed |
176 | **********************************************************************/ | 181 | **********************************************************************/ |
177 | void KeyPad::clearLCD(void){ | 182 | void KeyPad::clearLCD(void){ |
178 | 183 | ||
179 | dCurrent = 0; | 184 | dCurrent = 0; |
180 | iLenCurrent = 1; | 185 | iLenCurrent = 1; |
181 | bIsDec = false; | 186 | bIsDec = false; |
182 | dDecCurrent = 0; | 187 | dDecCurrent = 0; |
183 | iPreviousOperator = 0; | 188 | iPreviousOperator = 0; |
184 | dPreviousValue = 0; | 189 | dPreviousValue = 0; |
185 | display->setValue(0); | 190 | display->setValue(0); |
186 | } | 191 | } |
187 | 192 | ||
188 | /*********************************************************************** | 193 | /*********************************************************************** |
189 | * SLOT: gotoDec Dot has been pressed | 194 | * SLOT: gotoDec Dot has been pressed |
190 | **********************************************************************/ | 195 | **********************************************************************/ |
191 | void KeyPad::gotoDec(void){ | 196 | void KeyPad::gotoDec(void){ |
192 | 197 | ||
193 | bIsDec = true; | 198 | bIsDec = true; |
194 | dDecCurrent = 0.1; | 199 | dDecCurrent = 0.1; |
195 | } | 200 | } |
196 | 201 | ||
197 | 202 | ||
198 | 203 | ||
199 | /*********************************************************************** | 204 | /*********************************************************************** |
200 | * SLOT: Display About Dialog... | 205 | * SLOT: Display About Dialog... |
201 | **********************************************************************/ | 206 | **********************************************************************/ |
202 | void KeyPad::aboutDialog(void){ | 207 | void KeyPad::aboutDialog(void){ |
203 | 208 | ||
204 | QMessageBox::about( this, "About Euroconv", | 209 | QMessageBox::about( this, "About Euroconv", |
205 | "Euroconv is an Euro converter\n\n" | 210 | "Euroconv is an Euro converter\n\n" |
206 | "Copyright 2003 TALC Informatique.\n" | 211 | "Copyright 2003 TALC Informatique.\n" |
207 | "Under GPL license\n\n" | 212 | "Under GPL license\n\n" |
208 | "Written by Eric Santonacci for Opie\n" | 213 | "Written by Eric Santonacci for Opie\n" |
209 | "http://opie.handhelds.org\n\n" | 214 | "http://opie.handhelds.org\n\n" |
210 | "Version 0.4\n\n" | 215 | "Version 0.5\n\n" |
211 | "Any comment or feedback to:\n" | 216 | "Any comment or feedback to:\n" |
212 | "Eric.Santonacci@talc.fr\n"); | 217 | "Eric.Santonacci@talc.fr\n"); |
213 | 218 | ||
214 | } | 219 | } |