summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/tools/euroconv/calcdisplay.cpp188
-rw-r--r--noncore/tools/euroconv/calcdisplay.h57
-rw-r--r--noncore/tools/euroconv/calckeypad.cpp191
-rw-r--r--noncore/tools/euroconv/calckeypad.h78
-rw-r--r--noncore/tools/euroconv/config.in4
-rw-r--r--noncore/tools/euroconv/currency.h20
-rw-r--r--noncore/tools/euroconv/euroconv.pro12
-rw-r--r--noncore/tools/euroconv/main.cpp39
-rw-r--r--noncore/tools/euroconv/opie-euroconv.control9
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