author | eric <eric> | 2003-04-15 07:42:19 (UTC) |
---|---|---|
committer | eric <eric> | 2003-04-15 07:42:19 (UTC) |
commit | e263613e83b64fa93b5f3c1b904715daf076cc78 (patch) (side-by-side diff) | |
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 | 7 |
2 files changed, 8 insertions, 3 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 @@ /**************************************************************************** * * File: calcdisplay.cpp * * Description: * * * Authors: Eric Santonacci <Eric.Santonacci@talc.fr> * * Requirements: Qt * * $Id$ * ***************************************************************************/ #include <stdio.h> #include <qvbox.h> #include <qpixmap.h> #include "currency.h" #include "calcdisplay.h" LCDDisplay::LCDDisplay( QWidget *parent, const char *name ) : QHBox( parent, name ){ this->setMargin(5); this->setSpacing(5); // Create display QVBox *vbxlayout = new QVBox (this); /*************** Top LCD ***********************/ grpbxTop = new QHGroupBox(vbxlayout, "grpbxTop"); grpbxStyle = grpbxTop->frameStyle(); grpbxTop->setMaximumHeight(48); cbbxTop = new QComboBox(grpbxTop, "cbbxTop"); cbbxTop->setMaximumWidth(50); cbbxTop->insertStrList(aCurrency); lcdTop = new QLCDNumber(10, grpbxTop, "lcdTop"); lcdTop->setMode( QLCDNumber::DEC ); -lcdTop->setSmallDecimalPoint(true); +lcdTop->setSmallDecimalPoint(false); lcdTop->setSegmentStyle(QLCDNumber::Flat); /************** Bottom LCD ************************/ grpbxBottom = new QHGroupBox(vbxlayout, "grpbxBottom"); grpbxBottom->setMaximumHeight(46); grpbxBottom->setFrameStyle(0); grpbxBottom->setFrameShadow(QFrame::MShadow); cbbxBottom = new QComboBox(grpbxBottom, "cbbxBottom"); cbbxBottom->setMaximumWidth(50); cbbxBottom->insertStrList(aCurrency); lcdBottom = new QLCDNumber(10, grpbxBottom, "lcdBottom"); lcdBottom->setMode( QLCDNumber::DEC ); -lcdBottom->setSmallDecimalPoint(true); +lcdBottom->setSmallDecimalPoint(false); lcdBottom->setSegmentStyle(QLCDNumber::Flat); // set combo box signals connect(cbbxTop, SIGNAL(activated(int)), this, SLOT(cbbxChange())); connect(cbbxBottom, SIGNAL(activated(int)), this, SLOT(cbbxChange())); btnSwap = new QPushButton(this, "swap"); QPixmap imgSwap((const char**) swap_xpm); btnSwap->setPixmap(imgSwap); btnSwap->setFixedSize(20,40); // set signal connect(btnSwap, SIGNAL(clicked()), this, SLOT(swapLCD())); // set default LCD to top iCurrentLCD = 0; } /*********************************************************************** * SLOT: Display value in the correct LCD **********************************************************************/ void LCDDisplay::setValue(double dSrcValue){ double dDstValue=0; int iSrcIndex; int iDstIndex; // get item index of the focused if(!iCurrentLCD){ iSrcIndex = cbbxTop->currentItem(); iDstIndex = cbbxBottom->currentItem(); }else{ iSrcIndex = cbbxBottom->currentItem(); iDstIndex = cbbxTop->currentItem(); } if(iSrcIndex == iDstIndex) dDstValue = dSrcValue; else{ if(iSrcIndex){ // we are NOT in Euro as iDstIndex <> 0 // Convert to Euro dDstValue = x2Euro(iSrcIndex, dSrcValue); dDstValue = Euro2x(iDstIndex, dDstValue); }else // We are in Euro dDstValue = Euro2x(iDstIndex, dSrcValue); } if(!iCurrentLCD){ lcdTop->display(dSrcValue); lcdBottom->display(dDstValue); }else{ lcdBottom->display(dSrcValue); lcdTop->display(dDstValue); } } /*********************************************************************** * SLOT: Swap output keypad between LCD displays **********************************************************************/ void LCDDisplay::swapLCD(void){ double dCurrentValue; // get current value if(!iCurrentLCD){ // iCurrentLCD = 0, lcdTop has current focus and is going to loose // it dCurrentValue = lcdTop->value(); iCurrentLCD = 1; grpbxTop->setFrameStyle(0); grpbxBottom->setFrameStyle(grpbxStyle); }else{ dCurrentValue = lcdBottom->value(); iCurrentLCD = 0; grpbxTop->setFrameStyle(grpbxStyle); grpbxBottom->setFrameStyle(0); } setValue(dCurrentValue); } /*********************************************************************** * SLOT: Currency change **********************************************************************/ void LCDDisplay::cbbxChange(void){ double dCurrentValue; // get current value if(!iCurrentLCD){ dCurrentValue = lcdTop->value(); }else{ dCurrentValue = lcdBottom->value(); } setValue(dCurrentValue); } /*********************************************************************** * Euro2x converts dValue from Euro to the currency which combo box * index is provided in iIndex. **********************************************************************/ double LCDDisplay::Euro2x(int iIndex, double dValue){ switch (iIndex){ case 0: // Euro return(dValue); break; case 1: // FF: French Francs return(dValue*FRF); break; case 2: // DM: Deutch Mark return(dValue*DEM); break; case 3: // BEL Belgium Francs return(dValue*BEF); break; case 4: // ITL Itialian Lire return(dValue*ITL); break; case 5: // LUF Luxemburg return(dValue*LUF); break; case 6: // IEP Irish Pound return(dValue*IEP); break; default: return 0; }//switch (iIndex) }// fct Eur2x /*********************************************************************** * x2Euro converts dValue to Euro from the currency which combo box * index is provided in iIndex. **********************************************************************/ double LCDDisplay::x2Euro(int iIndex, double dValue){ switch (iIndex){ case 0: // Euro return(dValue); break; case 1: // FF: French Francs return(dValue/FRF); break; case 2: // DM: Deutch Mark return(dValue/DEM); break; case 3: // BEL Belgium Francs return(dValue/BEF); break; case 4: // ITL Itialian Lire return(dValue/ITL); break; case 5: // LUF Luxemburg return(dValue/LUF); break; case 6: // IEP Irish Pound return(dValue/IEP); break; }//switch (iIndex) // we shouldn't come here return 0; }// 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 @@ /**************************************************************************** * * File: calckeypad.cpp * * Description: * * * Authors: Eric Santonacci <Eric.Santonacci@talc.fr> * * Requirements: Qt * * $Id$ * ***************************************************************************/ #include <qmessagebox.h> #include "calckeypad.h" KeyPad::KeyPad(LCDDisplay *lcd, QWidget *parent, const char *name ) : QGrid(5, parent, name){ int i; QButton *btnButton; // save lcd at init display = lcd; // Init variable dCurrent = 0; iLenCurrent = 1; bIsDec = false; dDecCurrent = 0; iPreviousOperator = 0; dPreviousValue = 0; // First line btnClear = new QPushButton("CE/C", this, "Clear"); btn7 = new QPushButton("7", this, "7"); btn8 = new QPushButton("8", this, "8"); btn9 = new QPushButton("9", this, "9"); btnPlus = new QPushButton("+", this, "+"); // 2nd line btnPercent = new QPushButton("%", this, "percent"); btn4 = new QPushButton("4", this, "4"); btn5 = new QPushButton("5", this, "5"); btn6 = new QPushButton("6", this, "6"); btnMinus = new QPushButton("-", this, "-"); // 3rd line btnF1 = new QPushButton("",this, "F1"); btn1 = new QPushButton("1", this, "1"); btn2 = new QPushButton("2", this, "2"); btn3 = new QPushButton("3", this, "3"); btnMultiply = new QPushButton("X", this, "X"); // 4th line btnAbout = new QPushButton("?", this, "About"); btn0 = new QPushButton("0", this, "0"); btnDot = new QPushButton(".", this, "dot"); btnEqual = new QPushButton("=", this, "equal"); btnDivide = new QPushButton("/", this, "divide"); // Digit key grpbtnDigits = new QButtonGroup(0, "digits"); grpbtnDigits->insert(btn0, 0); grpbtnDigits->insert(btn1, 1); grpbtnDigits->insert(btn2, 2); grpbtnDigits->insert(btn3, 3); grpbtnDigits->insert(btn4, 4); grpbtnDigits->insert(btn5, 5); grpbtnDigits->insert(btn6, 6); grpbtnDigits->insert(btn7, 7); grpbtnDigits->insert(btn8, 8); grpbtnDigits->insert(btn9, 9); // set appearance of buttons for(i=0; i<10; i++){ btnButton = grpbtnDigits->find(i); btnButton->setFixedSize(30,30); } // Operator key grpbtnOperators = new QButtonGroup(0, "operator"); grpbtnOperators->insert(btnPlus, 1); grpbtnOperators->insert(btnMinus,2); grpbtnOperators->insert(btnMultiply,3); grpbtnOperators->insert(btnDivide,4); grpbtnOperators->insert(btnEqual,5); // set appearance of buttons for(i=1; i<6; i++){ btnButton = grpbtnOperators->find(i); btnButton->setFixedSize(30,30); } btnClear->setFixedSize(30,30); btnClear->setPalette(QPalette( QColor(255, 99, 71) ) ); btnDot->setFixedSize(30,30); btnPercent->setFixedSize(30,30); btnF1->setFixedSize(30,30); btnAbout->setFixedSize(30,30); // SIGNALS AND SLOTS connect(grpbtnDigits, SIGNAL(clicked(int) ), this, SLOT(enterDigits(int))); connect(grpbtnOperators, SIGNAL(clicked(int)), this, SLOT(operatorPressed(int))); connect(btnClear, SIGNAL(clicked()), this, SLOT(clearLCD())); connect(btnAbout, SIGNAL(clicked()), this, SLOT(aboutDialog())); connect(btnDot, SIGNAL(clicked()), this, SLOT(gotoDec())); } /*********************************************************************** * SLOT: enterDigits calculates the value to display and display it. **********************************************************************/ void KeyPad::enterDigits(int i){ if(!dCurrent) + if(bIsDec) { + dCurrent = i*dDecCurrent; + dDecCurrent /= 10; + } + else dCurrent = i; else if(iLenCurrent > 9) return; else if(!bIsDec){ dCurrent *= 10; dCurrent += i; iLenCurrent++; }else{ dCurrent += i*dDecCurrent; dDecCurrent /= 10; } display->setValue(dCurrent); } /*********************************************************************** * SLOT: Operator has been pressed **********************************************************************/ void KeyPad::operatorPressed(int i){ if(iPreviousOperator){ switch(iPreviousOperator){ case 1: // Plus + dCurrent += dPreviousValue; break; case 2: // Minus - dCurrent = dPreviousValue - dCurrent; break; case 3: // Multiply * dCurrent *= dPreviousValue; break; case 4: // Divide / dCurrent = dPreviousValue / dCurrent; break; } display->setValue(dCurrent); } if(i==5){ // ensure we won't be able to enter more digits iLenCurrent = 100; iPreviousOperator = 0; dPreviousValue = 0; }else{ dPreviousValue = dCurrent; iPreviousOperator = i; // reset LCD for next digit dCurrent = 0; iLenCurrent = 1; bIsDec = false; dDecCurrent = 0; } } /*********************************************************************** * SLOT: clearLCD CE/C has been pressed **********************************************************************/ void KeyPad::clearLCD(void){ dCurrent = 0; iLenCurrent = 1; bIsDec = false; dDecCurrent = 0; iPreviousOperator = 0; dPreviousValue = 0; display->setValue(0); } /*********************************************************************** * SLOT: gotoDec Dot has been pressed **********************************************************************/ void KeyPad::gotoDec(void){ bIsDec = true; dDecCurrent = 0.1; } /*********************************************************************** * SLOT: Display About Dialog... **********************************************************************/ void KeyPad::aboutDialog(void){ QMessageBox::about( this, "About Euroconv", "Euroconv is an Euro converter\n\n" "Copyright 2003 TALC Informatique.\n" "Under GPL license\n\n" "Written by Eric Santonacci for Opie\n" "http://opie.handhelds.org\n\n" - "Version 0.4\n\n" + "Version 0.5\n\n" "Any comment or feedback to:\n" "Eric.Santonacci@talc.fr\n"); } |