-rw-r--r-- | noncore/tools/euroconv/calcdisplay.cpp | 188 | ||||
-rw-r--r-- | noncore/tools/euroconv/calcdisplay.h | 57 | ||||
-rw-r--r-- | noncore/tools/euroconv/calckeypad.cpp | 191 | ||||
-rw-r--r-- | noncore/tools/euroconv/calckeypad.h | 78 | ||||
-rw-r--r-- | noncore/tools/euroconv/config.in | 4 | ||||
-rw-r--r-- | noncore/tools/euroconv/currency.h | 20 | ||||
-rw-r--r-- | noncore/tools/euroconv/euroconv.pro | 12 | ||||
-rw-r--r-- | noncore/tools/euroconv/main.cpp | 39 | ||||
-rw-r--r-- | noncore/tools/euroconv/opie-euroconv.control | 9 |
9 files changed, 598 insertions, 0 deletions
diff --git a/noncore/tools/euroconv/calcdisplay.cpp b/noncore/tools/euroconv/calcdisplay.cpp new file mode 100644 index 0000000..06e5158 --- a/dev/null +++ b/noncore/tools/euroconv/calcdisplay.cpp @@ -0,0 +1,188 @@ +/**************************************************************************** + * + * File: calcdisplay.cpp + * + * Description: + * + * + * Authors: Eric Santonacci <Eric.Santonacci@talc.fr> + * + * Requirements: Qt + * + * $Id$ + * + ***************************************************************************/ + +#include <stdio.h> +#include <qvbox.h> + +#include "currency.h" +#include "calcdisplay.h" + + +LCDDisplay::LCDDisplay( QWidget *parent, const char *name ) + : QHBox( parent, name ){ + + +// Create display +QVBox *vbxlayout = new QVBox (this); + +grpbxTop = new QVGroupBox(vbxlayout, "grpbxTop"); +cbbxTop = new QComboBox(grpbxTop, "cbbxTop"); +lcdTop = new QLCDNumber(10, grpbxTop, "lcdTop"); +lcdTop->setMode( QLCDNumber::DEC ); +lcdTop->setSmallDecimalPoint(true); +lcdTop->setSegmentStyle(QLCDNumber::Flat); +cbbxTop->insertStrList(aCurrency); + +grpbxBottom = new QVGroupBox(vbxlayout, "grpbxBottom"); +cbbxBottom = new QComboBox(grpbxBottom, "cbbxBottom"); +lcdBottom = new QLCDNumber(10, grpbxBottom, "lcdBottom"); +lcdBottom->setMode( QLCDNumber::DEC ); +lcdBottom->setSmallDecimalPoint(true); +lcdBottom->setSegmentStyle(QLCDNumber::Flat); +cbbxBottom->insertStrList(aCurrency); + +// set combo box signals +connect(cbbxTop, SIGNAL(activated(int)), this, SLOT(cbbxChange())); +connect(cbbxBottom, SIGNAL(activated(int)), this, SLOT(cbbxChange())); + +btnSwap = new QPushButton("S",this, "swap"); +btnSwap->setMaximumSize(20,50); +btnSwap->setMinimumSize(20,50); +// set signal +connect(btnSwap, SIGNAL(clicked()), this, SLOT(swapLCD())); + +// set default LCD to top +iCurrentLCD = 0; + +//setValue(123.456); + +} + +/*********************************************************************** + * 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){ + dCurrentValue = lcdTop->value(); + iCurrentLCD = 1; +}else{ + dCurrentValue = lcdBottom->value(); + iCurrentLCD = 0; +} + +setValue(dCurrentValue); +} + +/*********************************************************************** + * SLOT: Currency change + **********************************************************************/ +void LCDDisplay::cbbxChange(void){ + +double dCurrentValue; + +printf("combo changes...\n"); + +// 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*FF); + break; + + case 2: // DM: Deutch Mark + return(dValue*DM); + break; +}//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/FF); + break; + + case 2: // DM: Deutch Mark + return(dValue/DM); + break; +}//switch (iIndex) +}// fct x2Euro diff --git a/noncore/tools/euroconv/calcdisplay.h b/noncore/tools/euroconv/calcdisplay.h new file mode 100644 index 0000000..17ce8f4 --- a/dev/null +++ b/noncore/tools/euroconv/calcdisplay.h @@ -0,0 +1,57 @@ +/**************************************************************************** + * + * File: calcdisplay.h + * + * Description: Header file for the class LCDDisplay + * + * + * Authors: Eric Santonacci <Eric.Santonacci@talc.fr> + * + * Requirements: Qt + * + * $Id$ + * + * + ***************************************************************************/ +#ifndef CALCDISPLAY_H +#define CALCDISPLAY_H + +#include <qhbox.h> +#include <qlcdnumber.h> +#include <qvgroupbox.h> +#include <qpushbutton.h> +#include <qcombobox.h> + +class LCDDisplay : public QHBox{ + +Q_OBJECT +public: + LCDDisplay( QWidget *parent=0, const char *name=0 ); + +public slots: + void setValue(double); + void swapLCD(void); + void cbbxChange(void); + +//signals: +// void valueChanged( int ); +private: + QVGroupBox *grpbxTop; + QComboBox *cbbxTop; + QLCDNumber *lcdTop; + + QVGroupBox *grpbxBottom; + QComboBox *cbbxBottom; + QLCDNumber *lcdBottom; + + QPushButton *btnSwap; + + int iCurrentLCD; // 0=top, 1=bottom + + double Euro2x(int iIndex, double dValue); + double x2Euro(int iIndex, double dValue); + + +}; + +#endif // CALCDISPLAY_H diff --git a/noncore/tools/euroconv/calckeypad.cpp b/noncore/tools/euroconv/calckeypad.cpp new file mode 100644 index 0000000..4156570 --- a/dev/null +++ b/noncore/tools/euroconv/calckeypad.cpp @@ -0,0 +1,191 @@ +/**************************************************************************** + * + * 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){ + + +// 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); + +// 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); + + +// 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) + dCurrent = i; +else if(!bIsDec){ + if(iLenCurrent > 9) + return; + 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){ + // key '=' pressed + dPreviousValue = 0; + iPreviousOperator = 0; + // We don't want to add digits + iLenCurrent = 100; +}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" ); +} diff --git a/noncore/tools/euroconv/calckeypad.h b/noncore/tools/euroconv/calckeypad.h new file mode 100644 index 0000000..42e7eb3 --- a/dev/null +++ b/noncore/tools/euroconv/calckeypad.h @@ -0,0 +1,78 @@ +/**************************************************************************** + * + * File: calckeypad.h + * + * Description: Header file for the class KeyPad + * + * + * Authors: Eric Santonacci <Eric.Santonacci@talc.fr> + * + * Requirements: Qt + * + * $Id$ + * + * + ***************************************************************************/ +#ifndef CALCKEYPAD_H +#define CALCKEYPAD_H + +#include <qpushbutton.h> +#include <qgrid.h> +#include <qbuttongroup.h> + +#include "calcdisplay.h" + +class KeyPad : public QGrid { + +Q_OBJECT +public: + KeyPad(LCDDisplay *LCD, QWidget *parent=0, const char *name=0 ); + +public slots: + void enterDigits(int); + void operatorPressed(int); + void clearLCD(void); + void aboutDialog(void); + void gotoDec(void); + +private: + LCDDisplay *display; + double dCurrent; + int iLenCurrent; + bool bIsDec; + double dDecCurrent; + int iPreviousOperator; + double dPreviousValue; + + QPushButton *btn0; + QPushButton *btn1; + QPushButton *btn2; + QPushButton *btn3; + QPushButton *btn4; + QPushButton *btn5; + QPushButton *btn6; + QPushButton *btn7; + QPushButton *btn8; + QPushButton *btn9; + QButtonGroup *grpbtnDigits; + + QPushButton *btnDot; + + QPushButton *btnClear; + + QPushButton *btnPlus; + QPushButton *btnMinus; + QPushButton *btnMultiply; + QPushButton *btnDivide; + QPushButton *btnEqual; + QPushButton *btnPercent; + QPushButton *btnF1; + QPushButton *btnAbout; + + QButtonGroup *grpbtnOperators; + + + +}; + +#endif // CALCKEYPAD_H diff --git a/noncore/tools/euroconv/config.in b/noncore/tools/euroconv/config.in new file mode 100644 index 0000000..f4f1d78 --- a/dev/null +++ b/noncore/tools/euroconv/config.in @@ -0,0 +1,4 @@ + config EUROCONV + boolean "euroconv" + default "y" + depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE diff --git a/noncore/tools/euroconv/currency.h b/noncore/tools/euroconv/currency.h new file mode 100644 index 0000000..90f5b57 --- a/dev/null +++ b/noncore/tools/euroconv/currency.h @@ -0,0 +1,20 @@ +/**************************************************************************** + * + * File: currency.h + * + * Description: define constant for currency compare Euro + * + * + * Authors: Eric Santonacci <Eric.Santonacci@talc.fr> + * + * + * $Id$ + * + ***************************************************************************/ + +// 1 Euro equal.... +#define EURO 1 // Euro +#define FF 6.55957 // French Francs +#define DM 1.96 // Deutch Mark + +static const char* aCurrency[] = { "Euro", "French Frs", "DM", 0 }; diff --git a/noncore/tools/euroconv/euroconv.pro b/noncore/tools/euroconv/euroconv.pro new file mode 100644 index 0000000..dd2f7af --- a/dev/null +++ b/noncore/tools/euroconv/euroconv.pro @@ -0,0 +1,12 @@ +TEMPLATE = app +CONFIG = qt warn_on release +HEADERS = calcdisplay.h \ + calckeypad.h +SOURCES = calcdisplay.cpp \ + calckeypad.cpp \ + main.cpp +INCLUDEPATH += $(OPIEDIR)/include +DEPENDPATH += $(OPIEDIR)/include +LIBS += -lqpe -lopie +DESTDIR = ${OPIEDIR}/bin +INTERFACES = diff --git a/noncore/tools/euroconv/main.cpp b/noncore/tools/euroconv/main.cpp new file mode 100644 index 0000000..2d97f4e --- a/dev/null +++ b/noncore/tools/euroconv/main.cpp @@ -0,0 +1,39 @@ +/**************************************************************************** + * + * File: main.cpp + * + * Description: main file for OPIE Euroconv aapp + * + * + * Authors: Eric Santonacci <Eric.Santonacci@talc.fr> + * + * Requirements: Qt + * + * $Id$ + * + ***************************************************************************/ + +#include <qpe/qpeapplication.h> +#include <qvbox.h> +//#include <qapplication.h> + +#include "calcdisplay.h" +#include "calckeypad.h" + + + +int main( int argc, char **argv ) { + + QPEApplication app( argc, argv ); + + QVBox *layout = new QVBox(0, "fond"); + + LCDDisplay lcd (layout, "lcd"); + KeyPad num(&lcd, layout, "keypad"); + app.setMainWidget(layout); + layout->setCaption("Euroconv"); + layout->showMaximized (); + layout->show(); + return app.exec(); +} + diff --git a/noncore/tools/euroconv/opie-euroconv.control b/noncore/tools/euroconv/opie-euroconv.control new file mode 100644 index 0000000..643637e --- a/dev/null +++ b/noncore/tools/euroconv/opie-euroconv.control @@ -0,0 +1,9 @@ +Files: bin/euroconv pics/euroconv/* apps/Applications/euroconv.desktop +Priority: optional +Section: opie/applications +Maintainer: Eric Santonacci <Eric.Santonacci@talc.fr> +Architecture: arm +Version: $QPE_VERSION-$SUB_VERSION +Depends: opie-base +Description: Euroconv + Converts currencies between different european formats |