00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include <qmessagebox.h>
00017
00018 #include "calckeypad.h"
00019
00020
00021 KeyPad::KeyPad(LCDDisplay *lcd, QWidget *parent, const char *name )
00022 : QGrid(5, parent, name){
00023
00024 int i;
00025 QButton *btnButton;
00026
00027
00028 display = lcd;
00029
00030 dCurrent = 0;
00031 iLenCurrent = 1;
00032 bIsDec = false;
00033 dDecCurrent = 0;
00034 iPreviousOperator = 0;
00035 dPreviousValue = 0;
00036
00037
00038 btnClear = new QPushButton("CE/C", this, "Clear");
00039 btn7 = new QPushButton("7", this, "7");
00040 btn8 = new QPushButton("8", this, "8");
00041 btn9 = new QPushButton("9", this, "9");
00042 btnPlus = new QPushButton("+", this, "+");
00043
00044 btnPercent = new QPushButton("%", this, "percent");
00045 btn4 = new QPushButton("4", this, "4");
00046 btn5 = new QPushButton("5", this, "5");
00047 btn6 = new QPushButton("6", this, "6");
00048 btnMinus = new QPushButton("-", this, "-");
00049
00050 btnF1 = new QPushButton("",this, "F1");
00051 btn1 = new QPushButton("1", this, "1");
00052 btn2 = new QPushButton("2", this, "2");
00053 btn3 = new QPushButton("3", this, "3");
00054 btnMultiply = new QPushButton("X", this, "X");
00055
00056 btnAbout = new QPushButton("?", this, "About");
00057 btn0 = new QPushButton("0", this, "0");
00058 btnDot = new QPushButton(".", this, "dot");
00059 btnEqual = new QPushButton("=", this, "equal");
00060 btnDivide = new QPushButton("/", this, "divide");
00061
00062
00063 grpbtnDigits = new QButtonGroup(0, "digits");
00064 grpbtnDigits->insert(btn0, 0);
00065 grpbtnDigits->insert(btn1, 1);
00066 grpbtnDigits->insert(btn2, 2);
00067 grpbtnDigits->insert(btn3, 3);
00068 grpbtnDigits->insert(btn4, 4);
00069 grpbtnDigits->insert(btn5, 5);
00070 grpbtnDigits->insert(btn6, 6);
00071 grpbtnDigits->insert(btn7, 7);
00072 grpbtnDigits->insert(btn8, 8);
00073 grpbtnDigits->insert(btn9, 9);
00074
00075
00076 for(i=0; i<10; i++){
00077 btnButton = grpbtnDigits->find(i);
00078 btnButton->setFixedSize(30,30);
00079 }
00080
00081
00082 grpbtnOperators = new QButtonGroup(0, "operator");
00083 grpbtnOperators->insert(btnPlus, 1);
00084 grpbtnOperators->insert(btnMinus,2);
00085 grpbtnOperators->insert(btnMultiply,3);
00086 grpbtnOperators->insert(btnDivide,4);
00087 grpbtnOperators->insert(btnEqual,5);
00088
00089 for(i=1; i<6; i++){
00090 btnButton = grpbtnOperators->find(i);
00091 btnButton->setFixedSize(30,30);
00092 }
00093 btnClear->setFixedSize(30,30);
00094 btnClear->setPalette(QPalette( QColor(255, 99, 71) ) );
00095 btnDot->setFixedSize(30,30);
00096 btnPercent->setFixedSize(30,30);
00097 btnF1->setFixedSize(30,30);
00098 btnAbout->setFixedSize(30,30);
00099
00100
00101
00102 connect(grpbtnDigits, SIGNAL(clicked(int) ), this, SLOT(enterDigits(int)));
00103 connect(grpbtnOperators, SIGNAL(clicked(int)), this, SLOT(operatorPressed(int)));
00104 connect(btnClear, SIGNAL(clicked()), this, SLOT(clearLCD()));
00105 connect(btnAbout, SIGNAL(clicked()), this, SLOT(aboutDialog()));
00106 connect(btnDot, SIGNAL(clicked()), this, SLOT(gotoDec()));
00107 }
00108
00109
00110
00111
00112
00113 void KeyPad::enterDigits(int i){
00114
00115 if(!dCurrent)
00116 if(bIsDec) {
00117 dCurrent = i*dDecCurrent;
00118 dDecCurrent /= 10;
00119 }
00120 else
00121 dCurrent = i;
00122 else if(iLenCurrent > 9)
00123 return;
00124 else if(!bIsDec){
00125 dCurrent *= 10;
00126 dCurrent += i;
00127 iLenCurrent++;
00128 }else{
00129 dCurrent += i*dDecCurrent;
00130 dDecCurrent /= 10;
00131 }
00132
00133 display->setValue(dCurrent);
00134 }
00135
00136
00137
00138
00139 void KeyPad::operatorPressed(int i){
00140
00141 if(iPreviousOperator){
00142 switch(iPreviousOperator){
00143 case 1:
00144 dCurrent += dPreviousValue;
00145 break;
00146
00147 case 2:
00148 dCurrent = dPreviousValue - dCurrent;
00149 break;
00150
00151 case 3:
00152 dCurrent *= dPreviousValue;
00153 break;
00154
00155 case 4:
00156 dCurrent = dPreviousValue / dCurrent;
00157 break;
00158
00159 }
00160 display->setValue(dCurrent);
00161 }
00162
00163 if(i==5){
00164
00165 iLenCurrent = 100;
00166 iPreviousOperator = 0;
00167 dPreviousValue = 0;
00168 }else{
00169 dPreviousValue = dCurrent;
00170 iPreviousOperator = i;
00171
00172
00173 dCurrent = 0;
00174 iLenCurrent = 1;
00175 bIsDec = false;
00176 dDecCurrent = 0;
00177 }
00178 }
00179
00180
00181
00182 void KeyPad::clearLCD(void){
00183
00184 dCurrent = 0;
00185 iLenCurrent = 1;
00186 bIsDec = false;
00187 dDecCurrent = 0;
00188 iPreviousOperator = 0;
00189 dPreviousValue = 0;
00190 display->setValue(0);
00191 }
00192
00193
00194
00195
00196 void KeyPad::gotoDec(void){
00197
00198 bIsDec = true;
00199 dDecCurrent = 0.1;
00200 }
00201
00202
00203
00204
00205
00206
00207 void KeyPad::aboutDialog(void){
00208
00209 QMessageBox::about( this, "About Euroconv",
00210 "Euroconv is an Euro converter\n\n"
00211 "Copyright 2003 TALC Informatique.\n"
00212 "Under GPL license\n\n"
00213 "Written by Eric Santonacci for Opie\n"
00214 "http://opie.handhelds.org\n\n"
00215 "Version 0.5\n\n"
00216 "Any comment or feedback to:\n"
00217 "Eric.Santonacci@talc.fr\n");
00218
00219 }