|
|
|
/***************************************************************************
|
|
|
|
kmymoneycalculator.h - description
|
|
|
|
-------------------
|
|
|
|
begin : Sat Oct 19 2002
|
|
|
|
copyright : (C) 2000-2002 by Michael Edwardes
|
|
|
|
email : mte@users.sourceforge.net
|
|
|
|
Javier Campos Morales <javi_c@users.sourceforge.net>
|
|
|
|
Felix Rodriguez <frodriguez@users.sourceforge.net>
|
|
|
|
John C <thetacoturtle@users.sourceforge.net>
|
|
|
|
Thomas Baumgart <ipwizard@users.sourceforge.net>
|
|
|
|
Kevin Tambascio <ktambascio@users.sourceforge.net>
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
* *
|
|
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
|
|
* it under the terms of the GNU General Public License as published by *
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
|
|
* (at your option) any later version. *
|
|
|
|
* *
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
#ifndef KMYMONEYCALCULATOR_H
|
|
|
|
#define KMYMONEYCALCULATOR_H
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// QT Includes
|
|
|
|
|
|
|
|
#include <tqwidget.h>
|
|
|
|
#include <tqframe.h>
|
|
|
|
#include <tqlayout.h>
|
|
|
|
#include <tqgrid.h>
|
|
|
|
#include <tqlcdnumber.h>
|
|
|
|
#include <tqlineedit.h>
|
|
|
|
#include <tqlabel.h>
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// KDE Includes
|
|
|
|
|
|
|
|
#include <kpushbutton.h>
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// Project Includes
|
|
|
|
|
|
|
|
/**
|
|
|
|
*@author Thomas Baumgart
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This class implements a simple electronic calculator with the
|
|
|
|
* ability of addition, subtraction, multiplication and division
|
|
|
|
* and percentage calculation. Memory locations are not available.
|
|
|
|
*
|
|
|
|
* The first operand and operation can be loaded from an external
|
|
|
|
* source to switch from an edit-widget to the calculator widget
|
|
|
|
* without having the user to re-type the data. See setInitialValues()
|
|
|
|
* for details.
|
|
|
|
*/
|
|
|
|
class kMyMoneyCalculator : public TQFrame {
|
|
|
|
TQ_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
kMyMoneyCalculator(TQWidget* parent = 0, const char *name = 0);
|
|
|
|
~kMyMoneyCalculator();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This methods is used to extract the result of the last
|
|
|
|
* calculation. The fractional part is separated from the
|
|
|
|
* integral part by the character setup using setComma().
|
|
|
|
*
|
|
|
|
* @return TQString representing the result of the
|
|
|
|
* last operation
|
|
|
|
*/
|
|
|
|
const TQString result(void) const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method is used to set the character to be used
|
|
|
|
* as the separator between the integer and fractional part
|
|
|
|
* of an operand. Upon creation of the object, m_comma is
|
|
|
|
* set to the current locale setting of KDE's decimalSymbol.
|
|
|
|
*
|
|
|
|
* @param ch TQChar representing the character to be used
|
|
|
|
*/
|
|
|
|
void setComma(const TQChar ch) { m_comma = ch; };
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method is used to preset the first operand and start
|
|
|
|
* execution of an operation. This method is currently used
|
|
|
|
* by kMyMoneyEdit. If @p ev is 0, then no operation will be
|
|
|
|
* started.
|
|
|
|
*
|
|
|
|
* @param value reference to TQString representing the operands value
|
|
|
|
* @param ev pointer to TQKeyEvent representing the operation's key
|
|
|
|
*/
|
|
|
|
void setInitialValues(const TQString& value, TQKeyEvent* ev);
|
|
|
|
|
|
|
|
signals:
|
|
|
|
/**
|
|
|
|
* This signal is emitted, when a new result is available
|
|
|
|
*/
|
|
|
|
void signalResultAvailable();
|
|
|
|
|
|
|
|
protected:
|
|
|
|
void keyPressEvent(TQKeyEvent* ev);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method is used to transform a double into a TQString
|
|
|
|
* and removing any trailing 0's and decimal seperators
|
|
|
|
*
|
|
|
|
* @param val reference to double value to be converted
|
|
|
|
* @return TQString object containing the converted value
|
|
|
|
*/
|
|
|
|
TQString normalizeString(const double& val);
|
|
|
|
|
|
|
|
protected slots:
|
|
|
|
/**
|
|
|
|
* This method appends the digit represented by the parameter
|
|
|
|
* to the current operand
|
|
|
|
*
|
|
|
|
* @param button integer value of the digit to be added in the
|
|
|
|
* range [0..9]
|
|
|
|
*/
|
|
|
|
void digitClicked(int button);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This methods starts the operation contained in the parameter
|
|
|
|
*
|
|
|
|
* @param button The TQt::Keycode for the button pressed or clicked
|
|
|
|
*/
|
|
|
|
void calculationClicked(int button);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method appends a period (comma) to initialize the fractional
|
|
|
|
* part of an operand. The period is only appended once.
|
|
|
|
*/
|
|
|
|
void commaClicked(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method reverses the sign of the current operand
|
|
|
|
*/
|
|
|
|
void plusminusClicked(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method clears the current operand
|
|
|
|
*/
|
|
|
|
void clearClicked(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method clears all registers
|
|
|
|
*/
|
|
|
|
void clearAllClicked(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method executes the percent operation
|
|
|
|
*/
|
|
|
|
void percentClicked(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method updates the display of the calculator with
|
|
|
|
* the text passed as argument
|
|
|
|
*
|
|
|
|
* @param str reference to TQString containing the new display contents
|
|
|
|
*/
|
|
|
|
void changeDisplay(const TQString& str);
|
|
|
|
|
|
|
|
private:
|
|
|
|
/**
|
|
|
|
* This member variable stores the current (second) operand
|
|
|
|
*/
|
|
|
|
TQString operand;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This member variable stores the last result
|
|
|
|
*/
|
|
|
|
TQString m_result;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This member variable stores the representation of the
|
|
|
|
* character to be used to separate the integer and fractional
|
|
|
|
* part of numbers. The internal representation is always a period.
|
|
|
|
*/
|
|
|
|
TQChar m_comma;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The numeric representation of a stacked first operand
|
|
|
|
*/
|
|
|
|
double op0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The numeric representation of the first operand
|
|
|
|
*/
|
|
|
|
double op1;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This member stores the operation to be performed between
|
|
|
|
* the first and the second operand.
|
|
|
|
*/
|
|
|
|
int op;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This member stores a pending addition operation
|
|
|
|
*/
|
|
|
|
int stackedOp;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This member stores a pointer to the display area
|
|
|
|
*/
|
|
|
|
TQLabel *display;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This member array stores the pointers to the various
|
|
|
|
* buttons of the calculator. It is setup during the
|
|
|
|
* constructor of this object
|
|
|
|
*/
|
|
|
|
KPushButton *buttons[20];
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This enumeration type stores the values used for the
|
|
|
|
* various keys internally
|
|
|
|
*/
|
|
|
|
enum {
|
|
|
|
/* 0-9 are used by digits */
|
|
|
|
COMMA = 10,
|
|
|
|
/*
|
|
|
|
* make sure, that PLUS through EQUAL remain in
|
|
|
|
* the order they are. Otherwise, check the calculation
|
|
|
|
* signal mapper
|
|
|
|
*/
|
|
|
|
PLUS,
|
|
|
|
MINUS,
|
|
|
|
SLASH,
|
|
|
|
STAR,
|
|
|
|
EQUAL,
|
|
|
|
PLUSMINUS,
|
|
|
|
PERCENT,
|
|
|
|
CLEAR,
|
|
|
|
CLEARALL,
|
|
|
|
/* insert new buttons before this line */
|
|
|
|
MAX_BUTTONS
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This flag signals, if the operand should be replaced upon
|
|
|
|
* a digit key pressure. Defaults to false and will be set, if
|
|
|
|
* setInitialValues() is called without an operation.
|
|
|
|
*/
|
|
|
|
bool m_clearOperandOnDigit;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|