summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/tools/euroconv/calckeypad.cpp29
1 files changed, 18 insertions, 11 deletions
diff --git a/noncore/tools/euroconv/calckeypad.cpp b/noncore/tools/euroconv/calckeypad.cpp
index f1d61c0..4d0c37f 100644
--- a/noncore/tools/euroconv/calckeypad.cpp
+++ b/noncore/tools/euroconv/calckeypad.cpp
@@ -21,187 +21,194 @@
21KeyPad::KeyPad(LCDDisplay *lcd, QWidget *parent, const char *name ) 21KeyPad::KeyPad(LCDDisplay *lcd, QWidget *parent, const char *name )
22 : QGrid(5, parent, name){ 22 : QGrid(5, parent, name){
23 23
24int i; 24int i;
25QButton *btnButton; 25QButton *btnButton;
26 26
27// save lcd at init 27// save lcd at init
28display = lcd; 28display = lcd;
29// Init variable 29// Init variable
30dCurrent = 0; 30dCurrent = 0;
31iLenCurrent = 1; 31iLenCurrent = 1;
32bIsDec = false; 32bIsDec = false;
33dDecCurrent = 0; 33dDecCurrent = 0;
34iPreviousOperator = 0; 34iPreviousOperator = 0;
35dPreviousValue = 0; 35dPreviousValue = 0;
36 36
37// First line 37// First line
38btnClear = new QPushButton("CE/C", this, "Clear"); 38btnClear = new QPushButton("CE/C", this, "Clear");
39btn7 = new QPushButton("7", this, "7"); 39btn7 = new QPushButton("7", this, "7");
40btn8 = new QPushButton("8", this, "8"); 40btn8 = new QPushButton("8", this, "8");
41btn9 = new QPushButton("9", this, "9"); 41btn9 = new QPushButton("9", this, "9");
42btnPlus = new QPushButton("+", this, "+"); 42btnPlus = new QPushButton("+", this, "+");
43// 2nd line 43// 2nd line
44btnPercent = new QPushButton("%", this, "percent"); 44btnPercent = new QPushButton("%", this, "percent");
45btn4 = new QPushButton("4", this, "4"); 45btn4 = new QPushButton("4", this, "4");
46btn5 = new QPushButton("5", this, "5"); 46btn5 = new QPushButton("5", this, "5");
47btn6 = new QPushButton("6", this, "6"); 47btn6 = new QPushButton("6", this, "6");
48btnMinus = new QPushButton("-", this, "-"); 48btnMinus = new QPushButton("-", this, "-");
49// 3rd line 49// 3rd line
50btnF1 = new QPushButton("",this, "F1"); 50btnF1 = new QPushButton("",this, "F1");
51btn1 = new QPushButton("1", this, "1"); 51btn1 = new QPushButton("1", this, "1");
52btn2 = new QPushButton("2", this, "2"); 52btn2 = new QPushButton("2", this, "2");
53btn3 = new QPushButton("3", this, "3"); 53btn3 = new QPushButton("3", this, "3");
54btnMultiply = new QPushButton("X", this, "X"); 54btnMultiply = new QPushButton("X", this, "X");
55// 4th line 55// 4th line
56btnAbout = new QPushButton("?", this, "About"); 56btnAbout = new QPushButton("?", this, "About");
57btn0 = new QPushButton("0", this, "0"); 57btn0 = new QPushButton("0", this, "0");
58btnDot = new QPushButton(".", this, "dot"); 58btnDot = new QPushButton(".", this, "dot");
59btnEqual = new QPushButton("=", this, "equal"); 59btnEqual = new QPushButton("=", this, "equal");
60btnDivide = new QPushButton("/", this, "divide"); 60btnDivide = new QPushButton("/", this, "divide");
61 61
62// Digit key 62// Digit key
63grpbtnDigits = new QButtonGroup(0, "digits"); 63grpbtnDigits = new QButtonGroup(0, "digits");
64grpbtnDigits->insert(btn0, 0); 64grpbtnDigits->insert(btn0, 0);
65grpbtnDigits->insert(btn1, 1); 65grpbtnDigits->insert(btn1, 1);
66grpbtnDigits->insert(btn2, 2); 66grpbtnDigits->insert(btn2, 2);
67grpbtnDigits->insert(btn3, 3); 67grpbtnDigits->insert(btn3, 3);
68grpbtnDigits->insert(btn4, 4); 68grpbtnDigits->insert(btn4, 4);
69grpbtnDigits->insert(btn5, 5); 69grpbtnDigits->insert(btn5, 5);
70grpbtnDigits->insert(btn6, 6); 70grpbtnDigits->insert(btn6, 6);
71grpbtnDigits->insert(btn7, 7); 71grpbtnDigits->insert(btn7, 7);
72grpbtnDigits->insert(btn8, 8); 72grpbtnDigits->insert(btn8, 8);
73grpbtnDigits->insert(btn9, 9); 73grpbtnDigits->insert(btn9, 9);
74 74
75// set appearance of buttons 75// set appearance of buttons
76for(i=0; i<10; i++){ 76for(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
82grpbtnOperators = new QButtonGroup(0, "operator"); 82grpbtnOperators = new QButtonGroup(0, "operator");
83grpbtnOperators->insert(btnPlus, 1); 83grpbtnOperators->insert(btnPlus, 1);
84grpbtnOperators->insert(btnMinus,2); 84grpbtnOperators->insert(btnMinus,2);
85grpbtnOperators->insert(btnMultiply,3); 85grpbtnOperators->insert(btnMultiply,3);
86grpbtnOperators->insert(btnDivide,4); 86grpbtnOperators->insert(btnDivide,4);
87grpbtnOperators->insert(btnEqual,5); 87grpbtnOperators->insert(btnEqual,5);
88// set appearance of buttons 88// set appearance of buttons
89for(i=1; i<6; i++){ 89for(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}
93btnClear->setFixedSize(30,30); 93btnClear->setFixedSize(30,30);
94btnClear->setPalette(QPalette( QColor(255, 99, 71) ) ); 94btnClear->setPalette(QPalette( QColor(255, 99, 71) ) );
95btnDot->setFixedSize(30,30); 95btnDot->setFixedSize(30,30);
96btnPercent->setFixedSize(30,30); 96btnPercent->setFixedSize(30,30);
97btnF1->setFixedSize(30,30); 97btnF1->setFixedSize(30,30);
98btnAbout->setFixedSize(30,30); 98btnAbout->setFixedSize(30,30);
99 99
100 100
101// SIGNALS AND SLOTS 101// SIGNALS AND SLOTS
102connect(grpbtnDigits, SIGNAL(clicked(int) ), this, SLOT(enterDigits(int))); 102connect(grpbtnDigits, SIGNAL(clicked(int) ), this, SLOT(enterDigits(int)));
103connect(grpbtnOperators, SIGNAL(clicked(int)), this, SLOT(operatorPressed(int))); 103connect(grpbtnOperators, SIGNAL(clicked(int)), this, SLOT(operatorPressed(int)));
104connect(btnClear, SIGNAL(clicked()), this, SLOT(clearLCD())); 104connect(btnClear, SIGNAL(clicked()), this, SLOT(clearLCD()));
105connect(btnAbout, SIGNAL(clicked()), this, SLOT(aboutDialog())); 105connect(btnAbout, SIGNAL(clicked()), this, SLOT(aboutDialog()));
106connect(btnDot, SIGNAL(clicked()), this, SLOT(gotoDec())); 106connect(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 **********************************************************************/
113void KeyPad::enterDigits(int i){ 113void KeyPad::enterDigits(int i){
114 114
115if(!dCurrent) 115if(!dCurrent)
116 dCurrent = i; 116 dCurrent = i;
117else if(!bIsDec){ 117else if(iLenCurrent > 9)
118 if(iLenCurrent > 9)
119 return; 118 return;
119else if(!bIsDec){
120 dCurrent *= 10; 120 dCurrent *= 10;
121 dCurrent += i; 121 dCurrent += i;
122 iLenCurrent++; 122 iLenCurrent++;
123}else{ 123}else{
124 dCurrent += i*dDecCurrent; 124 dCurrent += i*dDecCurrent;
125 dDecCurrent /= 10; 125 dDecCurrent /= 10;
126} 126}
127 127
128display->setValue(dCurrent); 128display->setValue(dCurrent);
129} 129}
130 130
131/*********************************************************************** 131/***********************************************************************
132 * SLOT: Operator has been pressed 132 * SLOT: Operator has been pressed
133 **********************************************************************/ 133 **********************************************************************/
134void KeyPad::operatorPressed(int i){ 134void KeyPad::operatorPressed(int i){
135 135
136if(iPreviousOperator){ 136if(iPreviousOperator){
137 switch(iPreviousOperator){ 137 switch(iPreviousOperator){
138 case 1: // Plus + 138 case 1: // Plus +
139 dCurrent += dPreviousValue; 139 dCurrent += dPreviousValue;
140 break; 140 break;
141 141
142 case 2: // Minus - 142 case 2: // Minus -
143 dCurrent = dPreviousValue - dCurrent; 143 dCurrent = dPreviousValue - dCurrent;
144 break; 144 break;
145 145
146 case 3: // Multiply * 146 case 3: // Multiply *
147 dCurrent *= dPreviousValue; 147 dCurrent *= dPreviousValue;
148 break; 148 break;
149 149
150 case 4: // Divide / 150 case 4: // Divide /
151 dCurrent = dPreviousValue / dCurrent; 151 dCurrent = dPreviousValue / dCurrent;
152 break; 152 break;
153 153
154 } 154 }
155 display->setValue(dCurrent); 155 display->setValue(dCurrent);
156} 156}
157 157
158dPreviousValue = dCurrent; 158if(i==5){
159iPreviousOperator = i; 159 // ensure we won't be able to enter more digits
160 160 iLenCurrent = 100;
161// reset LCD for next digit 161 iPreviousOperator = 0;
162dCurrent = 0; 162 dPreviousValue = 0;
163iLenCurrent = 1; 163}else{
164bIsDec = false; 164 dPreviousValue = dCurrent;
165dDecCurrent = 0; 165 iPreviousOperator = i;
166
167 // reset LCD for next digit
168 dCurrent = 0;
169 iLenCurrent = 1;
170 bIsDec = false;
171 dDecCurrent = 0;
172}
166} 173}
167/*********************************************************************** 174/***********************************************************************
168 * SLOT: clearLCD CE/C has been pressed 175 * SLOT: clearLCD CE/C has been pressed
169 **********************************************************************/ 176 **********************************************************************/
170void KeyPad::clearLCD(void){ 177void KeyPad::clearLCD(void){
171 178
172dCurrent = 0; 179dCurrent = 0;
173iLenCurrent = 1; 180iLenCurrent = 1;
174bIsDec = false; 181bIsDec = false;
175dDecCurrent = 0; 182dDecCurrent = 0;
176iPreviousOperator = 0; 183iPreviousOperator = 0;
177dPreviousValue = 0; 184dPreviousValue = 0;
178display->setValue(0); 185display->setValue(0);
179} 186}
180 187
181/*********************************************************************** 188/***********************************************************************
182 * SLOT: gotoDec Dot has been pressed 189 * SLOT: gotoDec Dot has been pressed
183 **********************************************************************/ 190 **********************************************************************/
184void KeyPad::gotoDec(void){ 191void KeyPad::gotoDec(void){
185 192
186bIsDec = true; 193bIsDec = true;
187dDecCurrent = 0.1; 194dDecCurrent = 0.1;
188} 195}
189 196
190 197
191 198
192/*********************************************************************** 199/***********************************************************************
193 * SLOT: Display About Dialog... 200 * SLOT: Display About Dialog...
194 **********************************************************************/ 201 **********************************************************************/
195void KeyPad::aboutDialog(void){ 202void KeyPad::aboutDialog(void){
196 203
197QMessageBox::about( this, "About Euroconv", 204QMessageBox::about( this, "About Euroconv",
198 "Euroconv is an Euro converter\n\n" 205 "Euroconv is an Euro converter\n\n"
199 "Copyright 2003 TALC Informatique.\n" 206 "Copyright 2003 TALC Informatique.\n"
200 "Under GPL license\n\n" 207 "Under GPL license\n\n"
201 "Written by Eric Santonacci for Opie\n" 208 "Written by Eric Santonacci for Opie\n"
202 "http://opie.handhelds.org\n\n" 209 "http://opie.handhelds.org\n\n"
203 "Version 0.2\n\n" 210 "Version 0.3\n\n"
204 "Any comment or feedback to:\n" 211 "Any comment or feedback to:\n"
205 "Eric.Santonacci@talc.fr\n"); 212 "Eric.Santonacci@talc.fr\n");
206 213
207} 214}