Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

calckeypad.cpp

Go to the documentation of this file.
00001 /****************************************************************************
00002  *
00003  * File:        calckeypad.cpp
00004  *
00005  * Description:  
00006  *              
00007  *               
00008  * Authors:     Eric Santonacci <Eric.Santonacci@talc.fr>
00009  *
00010  * Requirements:    Qt
00011  *
00012  * $Id: calckeypad.cpp,v 1.5 2003/04/15 07:42:19 eric Exp $
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 // save lcd at init
00028 display     = lcd;
00029 // Init variable
00030 dCurrent    = 0;
00031 iLenCurrent = 1;
00032 bIsDec      = false;
00033 dDecCurrent = 0;
00034 iPreviousOperator   = 0;
00035 dPreviousValue      = 0;
00036 
00037 // First line
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 // 2nd line
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 // 3rd line
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 // 4th line
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 // Digit key
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 // set appearance of buttons
00076 for(i=0; i<10; i++){
00077     btnButton = grpbtnDigits->find(i);
00078     btnButton->setFixedSize(30,30);
00079 }
00080 
00081 // Operator key
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 // set appearance of buttons
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 // SIGNALS AND SLOTS
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  * SLOT: enterDigits calculates the value to display and display it.
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  * SLOT: Operator has been pressed
00138  **********************************************************************/
00139 void KeyPad::operatorPressed(int i){
00140 
00141 if(iPreviousOperator){
00142     switch(iPreviousOperator){
00143         case 1: // Plus +
00144             dCurrent += dPreviousValue;
00145             break;
00146 
00147         case 2: // Minus -
00148             dCurrent = dPreviousValue - dCurrent;
00149             break;
00150 
00151         case 3: // Multiply *
00152             dCurrent *= dPreviousValue;
00153             break;
00154 
00155         case 4: // Divide /
00156             dCurrent = dPreviousValue / dCurrent;
00157             break;
00158             
00159     }
00160     display->setValue(dCurrent);
00161 }
00162 
00163 if(i==5){
00164     // ensure we won't be able to enter more digits
00165     iLenCurrent = 100;
00166     iPreviousOperator   = 0;
00167     dPreviousValue      = 0;
00168 }else{
00169     dPreviousValue      = dCurrent;
00170     iPreviousOperator   = i;
00171 
00172     // reset LCD for next digit
00173     dCurrent            = 0;
00174     iLenCurrent         = 1;
00175     bIsDec              = false;
00176     dDecCurrent         = 0;
00177 }
00178 }
00179 /***********************************************************************
00180  * SLOT: clearLCD  CE/C has been pressed
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  * SLOT: gotoDec Dot has been pressed
00195  **********************************************************************/
00196 void KeyPad::gotoDec(void){
00197 
00198     bIsDec      = true;
00199     dDecCurrent = 0.1;
00200 }
00201 
00202 
00203 
00204 /***********************************************************************
00205  * SLOT: Display About Dialog...
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 }

Generated on Sat Nov 5 16:18:01 2005 for OPIE by  doxygen 1.4.2