summaryrefslogtreecommitdiffstats
path: root/kspread/plugins/calculator/kcalc.h
diff options
context:
space:
mode:
Diffstat (limited to 'kspread/plugins/calculator/kcalc.h')
-rw-r--r--kspread/plugins/calculator/kcalc.h447
1 files changed, 447 insertions, 0 deletions
diff --git a/kspread/plugins/calculator/kcalc.h b/kspread/plugins/calculator/kcalc.h
new file mode 100644
index 000000000..752ae96e5
--- /dev/null
+++ b/kspread/plugins/calculator/kcalc.h
@@ -0,0 +1,447 @@
+/*
+ $Id: kcalc.h 466447 2005-10-02 17:54:10Z zander $
+
+ KCalc, a scientific calculator for the X window system using the
+ Qt widget libraries, available at no cost at http://www.troll.no
+
+ Copyright (C) 1996 Bernd Johannes Wuebben
+ wuebben@math.cornell.edu
+
+ 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.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+
+*/
+
+#ifndef QTCALC_H
+#define QTCALC_H
+
+#include <queue>
+using std::queue;
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#include <qlistbox.h>
+#include <qclipboard.h>
+#include <qptrlist.h>
+#include <qaccel.h>
+#include <qtabdialog.h>
+#include <qwidget.h>
+#include <qtimer.h>
+#include <qdialog.h>
+#include <qpixmap.h>
+#include <qapplication.h>
+#include <qfont.h>
+#include <qlabel.h>
+#include <qbuttongroup.h>
+#include <qcheckbox.h>
+#include <qframe.h>
+#include <qgroupbox.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qradiobutton.h>
+#include <qtooltip.h>
+#include <qstring.h>
+#include <qrect.h>
+
+
+#include "dlabel.h"
+#include "stats.h"
+
+// IMPORTANT this has to come after ../config.h
+#include "kcalctype.h"
+
+#define STACK_SIZE 100
+#define TEMP_STACK_SIZE 1000 // the number of numbers kept in the temp stack
+ // which are accessible with the up and down arrow
+ // key
+
+#define PRECEDENCE_INCR 20
+
+#define FUNC_NULL 0
+#define FUNC_OR 1
+#define FUNC_XOR 2
+#define FUNC_AND 3
+#define FUNC_LSH 4
+#define FUNC_RSH 5
+#define FUNC_ADD 6
+#define FUNC_SUBTRACT 7
+#define FUNC_MULTIPLY 8
+#define FUNC_DIVIDE 9
+#define FUNC_MOD 10
+#define FUNC_POWER 11
+#define FUNC_PWR_ROOT 12
+#define FUNC_INTDIV 13
+
+#define DEC_SIZE 19
+#define BOH_SIZE 16
+#define DSP_SIZE 50 //25
+
+#define DEG2RAD(x) (((2L*pi)/360L)*x)
+#define GRA2RAD(x) ((pi/200L)*x)
+#define RAD2DEG(x) ((360L/(2L*pi))*x)
+#define RAD2GRA(x) ((200L/pi)*x)
+#define POS_ZERO 1e-19L /* What we consider zero is */
+#define NEG_ZERO -1e-19L /* anything between these two */
+
+
+typedef CALCAMNT (*Arith)(CALCAMNT, CALCAMNT);
+typedef CALCAMNT (*Prcnt)(CALCAMNT, CALCAMNT, CALCAMNT);
+typedef CALCAMNT (*Trig)(CALCAMNT);
+
+typedef enum _last_input_type {
+ DIGIT = 1, OPERATION = 2, RECALL = 3, PASTE = 4
+} last_input_type;
+
+typedef enum _num_base {
+ NB_BINARY = 2, NB_OCTAL = 8, NB_DECIMAL = 10, NB_HEX = 16
+} num_base;
+
+typedef enum _angle_type {
+ ANG_DEGREE = 0, ANG_RADIAN = 1, ANG_GRADIENT = 2
+} angle_type;
+
+typedef enum _item_type {
+ ITEM_FUNCTION, ITEM_AMOUNT
+} item_type;
+
+typedef struct _func_data {
+ int item_function;
+ int item_precedence;
+} func_data;
+
+typedef union _item_data { /* The item data */
+ CALCAMNT item_amount; /* an amount */
+ func_data item_func_data; /* or a function */
+} item_data; /* called item_data */
+
+typedef struct _item_contents { /* The item contents */
+ item_type s_item_type; /* a type flag */
+ item_data s_item_data; /* and data */
+} item_contents;
+
+typedef struct stack_item *stack_ptr;
+
+typedef struct stack_item {
+
+ /* Contents of an item on the input stack */
+
+ stack_ptr prior_item; /* Pointer to prior item */
+ stack_ptr prior_type; /* Pointer to prior type */
+ item_contents item_value; /* The value of the item */
+
+} stack_item; /* all called stack_item */
+
+
+CALCAMNT ExecOr(CALCAMNT left_op, CALCAMNT right_op);
+CALCAMNT ExecXor(CALCAMNT left_op, CALCAMNT right_op);
+CALCAMNT ExecAnd(CALCAMNT left_op, CALCAMNT right_op);
+CALCAMNT ExecLsh(CALCAMNT left_op, CALCAMNT right_op);
+CALCAMNT ExecRsh(CALCAMNT left_op, CALCAMNT right_op);
+CALCAMNT ExecAdd(CALCAMNT left_op, CALCAMNT right_op);
+CALCAMNT ExecSubtract(CALCAMNT left_op, CALCAMNT right_op);
+CALCAMNT ExecMultiply(CALCAMNT left_op, CALCAMNT right_op);
+CALCAMNT ExecDivide(CALCAMNT left_op, CALCAMNT right_op);
+CALCAMNT ExecMod(CALCAMNT left_op, CALCAMNT right_op);
+CALCAMNT ExecPower(CALCAMNT left_op, CALCAMNT right_op);
+CALCAMNT ExecPwrRoot(CALCAMNT left_op, CALCAMNT right_op);
+CALCAMNT ExecIntDiv(CALCAMNT left_op, CALCAMNT right_op);
+
+CALCAMNT ExecAddSubP(CALCAMNT left_op, CALCAMNT right_op, CALCAMNT result);
+CALCAMNT ExecMultiplyP(CALCAMNT left_op, CALCAMNT right_op, CALCAMNT result);
+CALCAMNT ExecDivideP(CALCAMNT left_op, CALCAMNT right_op, CALCAMNT result);
+CALCAMNT ExecPowerP(CALCAMNT left_op, CALCAMNT right_op, CALCAMNT result);
+CALCAMNT ExecPwrRootP(CALCAMNT left_op, CALCAMNT right_op, CALCAMNT result);
+
+
+int UpdateStack(int run_precedence);
+CALCAMNT ExecFunction(CALCAMNT left_op, int function, CALCAMNT right_op);
+int cvb(char *out_str, long amount, int max_out);
+
+void PrintStack(void);
+void InitStack(void);
+void PushStack(item_contents *add_item);
+item_contents *PopStack(void);
+item_contents *TopOfStack(void);
+item_contents *TopTypeStack(item_type rqstd_type);
+
+
+#define DISPLAY_AMOUNT display_data.s_item_data.item_amount
+
+
+
+typedef struct _DefStruct{
+ QColor forecolor;
+ QColor backcolor;
+ int precision;
+ int fixedprecision;
+ int style;
+ bool fixed;
+ bool beep;
+ QFont font;
+}DefStruct;
+
+class Calculator;
+
+class QtCalculator : public QDialog
+{
+ Q_OBJECT
+
+public:
+
+ QtCalculator( Calculator* _corba, QWidget *parent=0, const char *name=0 );
+ ~QtCalculator();
+
+ void keyPressEvent( QKeyEvent *e );
+ void keyReleaseEvent( QKeyEvent *e );
+ void closeEvent( QCloseEvent *e );
+ void readSettings();
+ void writeSettings();
+ void set_precision();
+ void set_style();
+ void set_display_font();
+ void temp_stack_next();
+ void temp_stack_prev();
+ void ComputeMean();
+ void ComputeSin();
+ void ComputeStd();
+ void ComputeCos();
+ void ComputeMedean();
+ void ComputeTan();
+ void ComputeSum();
+ void ComputeMul();
+ void ComputeMin();
+ void ComputeMax();
+
+ void setLabel( const char *_text );
+ void setValue( double _value );
+ void setData( const QRect& _range, const char *_sheet );
+ void useData();
+
+public slots:
+
+ void helpclicked();
+ void set_colors();
+ void display_selected();
+ void invertColors();
+ void selection_timed_out();
+ void clear_buttons();
+ void clear_status_label();
+ void setStatusLabel(const QString&);
+ void EnterDigit(int data);
+ void EnterDecimal();
+ void EnterStackFunction(int data);
+ void EnterNegate();
+ void EnterOpenParen();
+ void EnterCloseParen();
+ void EnterRecip();
+ void EnterInt();
+ void EnterFactorial();
+ void EnterSquare();
+ void EnterNotCmp();
+ void EnterHyp();
+ void EnterPercent();
+ void EnterLogr();
+ void EnterLogn();
+ void SetDeg();
+ void SetGra();
+ void SetRad();
+ void SetHex();
+ void SetOct();
+ void SetBin();
+ void SetDec();
+ void Deg_Selected();
+ void Rad_Selected();
+ void Gra_Selected();
+ void Hex_Selected();
+ void Dec_Selected();
+ void Oct_Selected();
+ void Bin_Selected();
+ void SetInverse();
+ void EnterEqual();
+ void Clear();
+ void ClearAll();
+ void RefreshCalculator(void);
+ void InitializeCalculator(void);
+ void UpdateDisplay();
+ void ExecSin();
+ void ExecCos();
+ void ExecTan();
+ void button0();
+ void button1();
+ void button2();
+ void button3();
+ void button4();
+ void button5();
+ void button6();
+ void button7();
+ void button8();
+ void button9();
+ void buttonA();
+ void buttonB();
+ void buttonC();
+ void buttonD();
+ void buttonE();
+ void buttonF();
+ void base_selected(int number);
+ void angle_selected(int number);
+ void Or();
+ void And();
+ void Shift();
+ void Plus();
+ void Minus();
+ void Multiply();
+ void Divide();
+ void Mod();
+ void Power();
+ void EE();
+ void MR();
+ void Mplusminus();
+ void MC();
+ void exit();
+ void EEtoggled(bool myboolean);
+ void pbinvtoggled(bool myboolean);
+ void pbMRtoggled(bool myboolean);
+ void pbAtoggled(bool myboolean);
+ void pbSintoggled(bool myboolean);
+ void pbplusminustoggled(bool myboolean);
+ void pbMplusminustoggled(bool myboolean);
+ void pbBtoggled(bool myboolean);
+ void pbCostoggled(bool myboolean);
+ void pbrecitoggled(bool myboolean);
+ void pbCtoggled(bool myboolean);
+ void pbTantoggled(bool myboolean);
+ void pbfactorialtoggled(bool myboolean);
+ void pbDtoggled(bool myboolean);
+ void pblogtoggled(bool myboolean);
+ void pbsquaretoggled(bool myboolean);
+ void pbEtoggled(bool myboolean);
+ void pblntoggled(bool myboolean);
+ void pbpowertoggled(bool myboolean);
+ void pbFtoggled(bool myboolean);
+ void pbMCtoggled(bool myboolean);
+ void pbCleartoggled(bool myboolean);
+ void pbACtoggled(bool myboolean);
+ void pb7toggled(bool myboolean);
+ void pb8toggled(bool myboolean);
+ void pb9toggled(bool myboolean);
+ void pbparenopentoggled(bool myboolean);
+ void pbparenclosetoggled(bool myboolean);
+ void pbandtoggled(bool myboolean);
+ void pb4toggled(bool myboolean);
+ void pb5toggled(bool myboolean);
+ void pb6toggled(bool myboolean);
+ void pbXtoggled(bool myboolean);
+ void pbdivisiontoggled(bool myboolean);
+ void pbortoggled(bool myboolean);
+ void pb1toggled(bool myboolean);
+ void pb2toggled(bool myboolean);
+ void pb3toggled(bool myboolean);
+ void pbplustoggled(bool myboolean);
+ void pbminustoggled(bool myboolean);
+ void pbshifttoggled(bool myboolean);
+ void pbperiodtoggled(bool myboolean);
+ void pb0toggled(bool myboolean);
+ void pbequaltoggled(bool myboolean);
+ void pbpercenttoggled(bool myboolean);
+ void pbnegatetoggled(bool myboolean);
+ void pbmodtoggled(bool myboolean);
+ void pbhyptoggled(bool myboolean);
+ void configclicked();
+
+public:
+
+ DefStruct kcalcdefaults;
+
+private:
+ void updateGeometry();
+
+ QTimer* selection_timer;
+ QLabel* statusINVLabel;
+ QLabel* statusHYPLabel;
+ QLabel* statusERRORLabel;
+ DLabel* calc_display;
+ QRadioButton* anglebutton[3];
+ QRadioButton* basebutton[4];
+ QPushButton* pbhyp;
+ QPushButton* pbEE;
+ QPushButton* pbinv;
+ QPushButton* pbMR;
+ QPushButton* pbA;
+ QPushButton* pbSin;
+ QPushButton* pbplusminus;
+ QPushButton* pbMplusminus;
+ QPushButton* pbB;
+ QPushButton* pbCos;
+ QPushButton* pbreci;
+ QPushButton* pbC;
+ QPushButton* pbTan;
+ QPushButton* pbfactorial;
+ QPushButton* pbD;
+ QPushButton* pblog;
+ QPushButton* pbsquare;
+ QPushButton* pbE;
+ QPushButton* pbln;
+ QPushButton* pbpower;
+ QPushButton* pbF;
+ QPushButton* pbMC;
+ QPushButton* pbClear;
+ QPushButton* pbAC;
+ QPushButton* pb7;
+ QPushButton* pb8;
+ QPushButton* pb9;
+ QPushButton* pbparenopen;
+ QPushButton* pbparenclose;
+ QPushButton* pband;
+ QPushButton* pb4;
+ QPushButton* pb5;
+ QPushButton* pb6;
+ QPushButton* pbX;
+ QPushButton* pbdivision;
+ QPushButton* pbor;
+ QPushButton* pb1;
+ QPushButton* pb2;
+ QPushButton* pb3;
+ QPushButton* pbplus;
+ QPushButton* pbminus;
+ QPushButton* pbshift;
+ QPushButton* pbperiod;
+ QPushButton* pb0;
+ QPushButton* pbequal;
+ QPushButton* pbpercent;
+ QPushButton* pbnegate;
+ QPushButton* pbmod;
+
+ QPtrList<QPushButton> mNumButtonList;
+ QPtrList<QPushButton> mFunctionButtonList;
+ QPtrList<QPushButton> mHexButtonList;
+ QPtrList<QPushButton> mMemButtonList;
+ QPtrList<QPushButton> mOperationButtonList;
+
+ bool key_pressed;
+ KStats stats;
+ QListBox *paper;
+ QTimer *status_timer;
+
+ QRect sheet_range;
+ QString sheet_name;
+ Calculator* corba;
+ QWidget *mSmallPage;
+ QWidget *mLargePage;
+ int mInternalSpacing;
+};
+
+#endif //QTCLAC_H