38#include <tqclipboard.h>
41#include <tqtabdialog.h>
46#include <tqapplication.h>
49#include <tqbuttongroup.h>
50#include <tqcheckbox.h>
52#include <tqgroupbox.h>
53#include <tqlineedit.h>
54#include <tqpushbutton.h>
55#include <tqradiobutton.h>
68#define TEMP_STACK_SIZE 1000
72#define PRECEDENCE_INCR 20
81#define FUNC_SUBTRACT 7
82#define FUNC_MULTIPLY 8
86#define FUNC_PWR_ROOT 12
93#define DEG2RAD(x) (((2L*pi)/360L)*x)
94#define GRA2RAD(x) ((pi/200L)*x)
95#define RAD2DEG(x) ((360L/(2L*pi))*x)
96#define RAD2GRA(x) ((200L/pi)*x)
97#define POS_ZERO 1e-19L
98#define NEG_ZERO -1e-19L
101typedef CALCAMNT (*Arith)(CALCAMNT, CALCAMNT);
102typedef CALCAMNT (*Prcnt)(CALCAMNT, CALCAMNT, CALCAMNT);
103typedef CALCAMNT (*Trig)(CALCAMNT);
105typedef enum _last_input_type {
106 DIGIT = 1, OPERATION = 2, RECALL = 3, PASTE = 4
109typedef enum _num_base {
110 NB_BINARY = 2, NB_OCTAL = 8, NB_DECIMAL = 10, NB_HEX = 16
113typedef enum _angle_type {
114 ANG_DEGREE = 0, ANG_RADIAN = 1, ANG_GRADIENT = 2
117typedef enum _item_type {
118 ITEM_FUNCTION, ITEM_AMOUNT
121typedef struct _func_data {
126typedef union _item_data {
127 CALCAMNT item_amount;
128 func_data item_func_data;
131typedef struct _item_contents {
132 item_type s_item_type;
133 item_data s_item_data;
136typedef struct stack_item *stack_ptr;
138typedef struct stack_item {
142 stack_ptr prior_item;
143 stack_ptr prior_type;
144 item_contents item_value;
149CALCAMNT ExecOr(CALCAMNT left_op, CALCAMNT right_op);
150CALCAMNT ExecXor(CALCAMNT left_op, CALCAMNT right_op);
151CALCAMNT ExecAnd(CALCAMNT left_op, CALCAMNT right_op);
152CALCAMNT ExecLsh(CALCAMNT left_op, CALCAMNT right_op);
153CALCAMNT ExecRsh(CALCAMNT left_op, CALCAMNT right_op);
154CALCAMNT ExecAdd(CALCAMNT left_op, CALCAMNT right_op);
155CALCAMNT ExecSubtract(CALCAMNT left_op, CALCAMNT right_op);
156CALCAMNT ExecMultiply(CALCAMNT left_op, CALCAMNT right_op);
157CALCAMNT ExecDivide(CALCAMNT left_op, CALCAMNT right_op);
158CALCAMNT ExecMod(CALCAMNT left_op, CALCAMNT right_op);
159CALCAMNT ExecPower(CALCAMNT left_op, CALCAMNT right_op);
160CALCAMNT ExecPwrRoot(CALCAMNT left_op, CALCAMNT right_op);
161CALCAMNT ExecIntDiv(CALCAMNT left_op, CALCAMNT right_op);
163CALCAMNT ExecAddSubP(CALCAMNT left_op, CALCAMNT right_op, CALCAMNT result);
164CALCAMNT ExecMultiplyP(CALCAMNT left_op, CALCAMNT right_op, CALCAMNT result);
165CALCAMNT ExecDivideP(CALCAMNT left_op, CALCAMNT right_op, CALCAMNT result);
166CALCAMNT ExecPowerP(CALCAMNT left_op, CALCAMNT right_op, CALCAMNT result);
167CALCAMNT ExecPwrRootP(CALCAMNT left_op, CALCAMNT right_op, CALCAMNT result);
170int UpdateStack(
int run_precedence);
171CALCAMNT ExecFunction(CALCAMNT left_op,
int function, CALCAMNT right_op);
172int cvb(
char *out_str,
long amount,
int max_out);
174void PrintStack(
void);
176void PushStack(item_contents *add_item);
177item_contents *PopStack(
void);
178item_contents *TopOfStack(
void);
179item_contents *TopTypeStack(item_type rqstd_type);
182#define DISPLAY_AMOUNT display_data.s_item_data.item_amount
186typedef struct _DefStruct{
199class TQtCalculator :
public TQDialog
206 TQtCalculator( Calculator* _corba, TQWidget *parent=0,
const char *name=0 );
209 void keyPressEvent( TQKeyEvent *e );
210 void keyReleaseEvent( TQKeyEvent *e );
211 void closeEvent( TQCloseEvent *e );
213 void writeSettings();
214 void set_precision();
216 void set_display_font();
217 void temp_stack_next();
218 void temp_stack_prev();
223 void ComputeMedean();
230 void setLabel(
const char *_text );
231 void setValue(
double _value );
232 void setData(
const TQRect& _range,
const char *_sheet );
239 void display_selected();
241 void selection_timed_out();
242 void clear_buttons();
243 void clear_status_label();
244 void setStatusLabel(
const TQString&);
245 void EnterDigit(
int data);
247 void EnterStackFunction(
int data);
249 void EnterOpenParen();
250 void EnterCloseParen();
253 void EnterFactorial();
278 void RefreshCalculator(
void);
279 void InitializeCalculator(
void);
280 void UpdateDisplay();
300 void base_selected(
int number);
301 void angle_selected(
int number);
316 void EEtoggled(
bool myboolean);
317 void pbinvtoggled(
bool myboolean);
318 void pbMRtoggled(
bool myboolean);
319 void pbAtoggled(
bool myboolean);
320 void pbSintoggled(
bool myboolean);
321 void pbplusminustoggled(
bool myboolean);
322 void pbMplusminustoggled(
bool myboolean);
323 void pbBtoggled(
bool myboolean);
324 void pbCostoggled(
bool myboolean);
325 void pbrecitoggled(
bool myboolean);
326 void pbCtoggled(
bool myboolean);
327 void pbTantoggled(
bool myboolean);
328 void pbfactorialtoggled(
bool myboolean);
329 void pbDtoggled(
bool myboolean);
330 void pblogtoggled(
bool myboolean);
331 void pbsquaretoggled(
bool myboolean);
332 void pbEtoggled(
bool myboolean);
333 void pblntoggled(
bool myboolean);
334 void pbpowertoggled(
bool myboolean);
335 void pbFtoggled(
bool myboolean);
336 void pbMCtoggled(
bool myboolean);
337 void pbCleartoggled(
bool myboolean);
338 void pbACtoggled(
bool myboolean);
339 void pb7toggled(
bool myboolean);
340 void pb8toggled(
bool myboolean);
341 void pb9toggled(
bool myboolean);
342 void pbparenopentoggled(
bool myboolean);
343 void pbparenclosetoggled(
bool myboolean);
344 void pbandtoggled(
bool myboolean);
345 void pb4toggled(
bool myboolean);
346 void pb5toggled(
bool myboolean);
347 void pb6toggled(
bool myboolean);
348 void pbXtoggled(
bool myboolean);
349 void pbdivisiontoggled(
bool myboolean);
350 void pbortoggled(
bool myboolean);
351 void pb1toggled(
bool myboolean);
352 void pb2toggled(
bool myboolean);
353 void pb3toggled(
bool myboolean);
354 void pbplustoggled(
bool myboolean);
355 void pbminustoggled(
bool myboolean);
356 void pbshifttoggled(
bool myboolean);
357 void pbperiodtoggled(
bool myboolean);
358 void pb0toggled(
bool myboolean);
359 void pbequaltoggled(
bool myboolean);
360 void pbpercenttoggled(
bool myboolean);
361 void pbnegatetoggled(
bool myboolean);
362 void pbmodtoggled(
bool myboolean);
363 void pbhyptoggled(
bool myboolean);
364 void configclicked();
368 DefStruct kcalcdefaults;
371 void updateGeometry();
373 TQTimer* selection_timer;
374 TQLabel* statusINVLabel;
375 TQLabel* statusHYPLabel;
376 TQLabel* statusERRORLabel;
377 DLabel* calc_display;
378 TQRadioButton* anglebutton[3];
379 TQRadioButton* basebutton[4];
386 TQPushButton* pbplusminus;
387 TQPushButton* pbMplusminus;
390 TQPushButton* pbreci;
393 TQPushButton* pbfactorial;
396 TQPushButton* pbsquare;
399 TQPushButton* pbpower;
402 TQPushButton* pbClear;
407 TQPushButton* pbparenopen;
408 TQPushButton* pbparenclose;
414 TQPushButton* pbdivision;
419 TQPushButton* pbplus;
420 TQPushButton* pbminus;
421 TQPushButton* pbshift;
422 TQPushButton* pbperiod;
424 TQPushButton* pbequal;
425 TQPushButton* pbpercent;
426 TQPushButton* pbnegate;
429 TQPtrList<TQPushButton> mNumButtonList;
430 TQPtrList<TQPushButton> mFunctionButtonList;
431 TQPtrList<TQPushButton> mHexButtonList;
432 TQPtrList<TQPushButton> mMemButtonList;
433 TQPtrList<TQPushButton> mOperationButtonList;
438 TQTimer *status_timer;
443 TQWidget *mSmallPage;
444 TQWidget *mLargePage;
445 int mInternalSpacing;