summaryrefslogtreecommitdiff
authoreric <eric>2003-02-21 10:39:29 (UTC)
committer eric <eric>2003-02-21 10:39:29 (UTC)
commit2d77abb5ff37abf61e04657431d7e0e1f5138d94 (patch) (side-by-side diff)
treec78d34380cb9e1722f41c56cda0bbbea394e2a1a
parentd25a16d1fd34374e4d2815dec4d11b25b2049432 (diff)
downloadopie-2d77abb5ff37abf61e04657431d7e0e1f5138d94.zip
opie-2d77abb5ff37abf61e04657431d7e0e1f5138d94.tar.gz
opie-2d77abb5ff37abf61e04657431d7e0e1f5138d94.tar.bz2
- Improve look 'n feel.
- fix a bug in '=' operation.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/tools/euroconv/calcdisplay.cpp50
-rw-r--r--noncore/tools/euroconv/calcdisplay.h38
-rw-r--r--noncore/tools/euroconv/calckeypad.cpp48
-rw-r--r--noncore/tools/euroconv/calckeypad.h2
-rw-r--r--noncore/tools/euroconv/currency.h4
5 files changed, 109 insertions, 33 deletions
diff --git a/noncore/tools/euroconv/calcdisplay.cpp b/noncore/tools/euroconv/calcdisplay.cpp
index 06e5158..1659858 100644
--- a/noncore/tools/euroconv/calcdisplay.cpp
+++ b/noncore/tools/euroconv/calcdisplay.cpp
@@ -1,188 +1,216 @@
/****************************************************************************
*
* 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);
-grpbxTop = new QVGroupBox(vbxlayout, "grpbxTop");
+/*************** 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->setSegmentStyle(QLCDNumber::Flat);
-cbbxTop->insertStrList(aCurrency);
-grpbxBottom = new QVGroupBox(vbxlayout, "grpbxBottom");
+/************** 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->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);
+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;
-//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){
+ // 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;
-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;
+
+ 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/FF);
break;
case 2: // DM: Deutch Mark
return(dValue/DM);
break;
}//switch (iIndex)
+
+// we shouldn't come here
+return 0;
+
}// fct x2Euro
diff --git a/noncore/tools/euroconv/calcdisplay.h b/noncore/tools/euroconv/calcdisplay.h
index 17ce8f4..d1902cf 100644
--- a/noncore/tools/euroconv/calcdisplay.h
+++ b/noncore/tools/euroconv/calcdisplay.h
@@ -1,57 +1,89 @@
/****************************************************************************
*
* 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 <qhgroupbox.h>
#include <qpushbutton.h>
#include <qcombobox.h>
+
+/* XPM */
+static char *swap_xpm[] = {
+/* width height num_colors chars_per_pixel */
+" 13 18 2 1",
+/* colors */
+". c None",
+"# c #000000",
+/* pixels */
+"..#######....",
+"..#####......",
+"..######.....",
+"..#...###....",
+"........##...",
+".........##..",
+"..........##.",
+"...........##",
+"...........##",
+"...........##",
+"...........##",
+"..........##.",
+".........##..",
+"........##...",
+"..#...###....",
+"..######.....",
+"..#####......",
+"..#######....",
+};
+
+
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;
+ int grpbxStyle;
+
+ QHGroupBox *grpbxTop;
QComboBox *cbbxTop;
QLCDNumber *lcdTop;
- QVGroupBox *grpbxBottom;
+ QHGroupBox *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
index 4156570..f1d61c0 100644
--- a/noncore/tools/euroconv/calckeypad.cpp
+++ b/noncore/tools/euroconv/calckeypad.cpp
@@ -1,191 +1,207 @@
/****************************************************************************
*
* 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)
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;
-}
+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" );
+ "http://opie.handhelds.org\n\n"
+ "Version 0.2\n\n"
+ "Any comment or feedback to:\n"
+ "Eric.Santonacci@talc.fr\n");
+
}
diff --git a/noncore/tools/euroconv/calckeypad.h b/noncore/tools/euroconv/calckeypad.h
index 42e7eb3..aac3f41 100644
--- a/noncore/tools/euroconv/calckeypad.h
+++ b/noncore/tools/euroconv/calckeypad.h
@@ -26,53 +26,53 @@ 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;
-
+ void setAppearance(void);
};
#endif // CALCKEYPAD_H
diff --git a/noncore/tools/euroconv/currency.h b/noncore/tools/euroconv/currency.h
index 90f5b57..d9ee75c 100644
--- a/noncore/tools/euroconv/currency.h
+++ b/noncore/tools/euroconv/currency.h
@@ -1,20 +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
+#define DM 1.9594 // Deutch Mark
-static const char* aCurrency[] = { "Euro", "French Frs", "DM", 0 };
+static const char* aCurrency[] = { "Euro", "FF", "DM", 0 };