kspread

kcalc.cpp
1/*
2 $Id: kcalc.cpp 466447 2005-10-02 17:54:10Z zander $
3
4 kCalculator, a simple scientific calculator for KDE
5
6 Copyright (C) 1996 Bernd Johannes Wuebben wuebben@math.cornell.edu
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301, USA.
22
23*/
24
25#include "configdlg.h"
26#include "version.h"
27#include <tdelocale.h>
28#include <knotifyclient.h>
29#include <tqlayout.h>
30#include <tqobjectlist.h>
31#include <tqpushbutton.h>
32#include <tdeapplication.h>
33#include <tdeglobalsettings.h>
34#include <tqstyle.h>
35#include <kdialog.h>
36#include <tdeconfig.h>
37#include <tdeglobal.h>
38#include "kcalc.h"
39
40extern last_input_type last_input;
41extern item_contents display_data;
42extern num_base current_base;
43
44TQPtrList<CALCAMNT> temp_stack;
45
46TQtCalculator :: TQtCalculator( Calculator *_corba, TQWidget *parent, const char *name )
47 : TQDialog( parent, name )
48{
49
50 corba = _corba;
51 mInternalSpacing=4;
52 key_pressed = false;
53 selection_timer = new TQTimer;
54 status_timer = new TQTimer;
55
56 connect(status_timer,TQ_SIGNAL(timeout()),this,TQ_SLOT(clear_status_label()));
57 connect(selection_timer,TQ_SIGNAL(timeout()),this,TQ_SLOT(selection_timed_out()));
58
59 readSettings();
60
61 TQFont buttonfont( TDEGlobalSettings::generalFont() );
62 buttonfont.setStyleStrategy( TQFont::PreferAntialias );
63
64 // Set the window caption/title
65
66 // connect(kapp,TQ_SIGNAL(tdedisplayPaletteChanged()),this,TQ_SLOT(set_colors()));
67 // setCaption( kapp->caption() );
68
69 // create help button
70
71 TQPushButton *pb;
72
73 pb = new TQPushButton( this, "helpbutton" );
74 pb->setText( "kCalc" );
75 pb->setFont( TQFont("times",12,TQFont::Bold,false) );
76 TQToolTip::add( pb, i18n("KCalc Setup/Help") );
77
78 connect( pb, TQ_SIGNAL(clicked()), TQ_SLOT(configclicked()) );
79
80 // Create the display
81 calc_display = new DLabel( this, "display" );
82 calc_display->setFrameStyle( TQFrame::WinPanel | TQFrame::Sunken );
83 calc_display->setAlignment( AlignRight|AlignVCenter );
84 calc_display->setFocus();
85 calc_display->setFocusPolicy( TQWidget::StrongFocus );
86
87 connect(calc_display,TQ_SIGNAL(clicked()),this,TQ_SLOT(display_selected()));
88
89 statusINVLabel = new TQLabel( this, "INV" );
90 TQ_CHECK_PTR( statusINVLabel );
91 statusINVLabel->setFrameStyle( TQFrame::Panel | TQFrame::Sunken );
92 statusINVLabel->setAlignment( AlignCenter );
93 statusINVLabel->setText("NORM");
94
95 statusHYPLabel = new TQLabel( this, "HYP" );
96 TQ_CHECK_PTR( statusHYPLabel );
97 statusHYPLabel->setFrameStyle( TQFrame::Panel | TQFrame::Sunken );
98 statusHYPLabel->setAlignment( AlignCenter );
99
100 statusERRORLabel = new TQLabel( this, "ERROR" );
101 TQ_CHECK_PTR( statusERRORLabel );
102 statusERRORLabel->setFrameStyle( TQFrame::Panel | TQFrame::Sunken );
103 statusERRORLabel->setAlignment( AlignLeft|AlignVCenter );
104
105 // create angle button group
106
107 TQAccel *accel = new TQAccel( this );
108
109 TQButtonGroup *angle_group = new TQButtonGroup( 3,TQt::Horizontal,this, "AngleButtons" );
110 angle_group->setTitle(i18n( "Angle") );
111
112 anglebutton[0] = new TQRadioButton( angle_group );
113 anglebutton[0]->setText( "&Deg" ) ;
114 anglebutton[0]->setChecked( true);
115 accel->connectItem( accel->insertItem(Key_D + ALT), this ,
116 TQ_SLOT(Deg_Selected()) );
117
118 anglebutton[1] = new TQRadioButton( angle_group );
119 anglebutton[1]->setText( "&Rad" );
120 accel->connectItem( accel->insertItem(Key_R + ALT), this ,
121 TQ_SLOT(Rad_Selected()) );
122
123 anglebutton[2] = new TQRadioButton( angle_group );
124 anglebutton[2]->setText( "&Gra" );
125 accel->connectItem( accel->insertItem(Key_G + ALT), this ,
126 TQ_SLOT(Gra_Selected()) );
127
128 connect( angle_group, TQ_SIGNAL(clicked(int)), TQ_SLOT(angle_selected(int)) );
129
130
132//
133// Create Number Base Button Group
134//
135
136
137
138 TQButtonGroup *base_group = new TQButtonGroup( 4,TQt::Horizontal,this, "BaseButtons" );
139 base_group->setTitle( i18n("Base") );
140
141 basebutton[0] = new TQRadioButton( base_group );
142 basebutton[0]->setText( "&Hex" );
143 accel->connectItem( accel->insertItem(Key_H + ALT), this ,
144 TQ_SLOT(Hex_Selected()) );
145
146 basebutton[1] = new TQRadioButton( base_group );
147 basebutton[1]->setText( "D&ec" );
148 basebutton[1]->setChecked(true);
149 accel->connectItem( accel->insertItem(Key_E + ALT), this ,
150 TQ_SLOT(Dec_Selected()) );
151
152 basebutton[2] = new TQRadioButton( base_group );
153 basebutton[2]->setText( "&Oct" );
154 accel->connectItem( accel->insertItem(Key_O + ALT), this ,
155 TQ_SLOT(Oct_Selected()) );
156
157 basebutton[3] = new TQRadioButton( base_group);
158 basebutton[3]->setText( "&Bin" );
159 accel->connectItem( accel->insertItem(Key_B + ALT), this ,
160 TQ_SLOT(Bin_Selected()) );
161
162 connect( base_group, TQ_SIGNAL(clicked(int)), TQ_SLOT(base_selected(int)) );
163
165//
166// Create Calculator Buttons
167//
168
169
170 // First the widgets that are the parents of the buttons
171 mSmallPage = new TQWidget(this);
172 mLargePage = new TQWidget(this);
173
174 pbhyp = new TQPushButton("Hyp", mSmallPage, "hypbutton" );
175 connect( pbhyp, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbhyptoggled(bool)));
176 pbhyp->setToggleButton(true);
177
178 pbinv = new TQPushButton( "Inv", mSmallPage, "InverseButton" );
179 connect( pbinv, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbinvtoggled(bool)));
180 pbinv->setToggleButton(true);
181
182 pbA = new TQPushButton("A",mSmallPage, "Abutton" );
183 connect( pbA, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbAtoggled(bool)));
184 pbA->setToggleButton(true);
185
186 pbSin = new TQPushButton("Sin",mSmallPage, "Sinbutton" );
187 connect( pbSin, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbSintoggled(bool)));
188 pbSin->setToggleButton(true);
189
190 pbplusminus = new TQPushButton( "+/-", mSmallPage, "plusminusbutton" );
191 connect( pbplusminus, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbplusminustoggled(bool)));
192 pbplusminus->setToggleButton(true);
193 pbplusminus->setFont(buttonfont);
194
195 pbB = new TQPushButton("B", mSmallPage, "Bbutton" );
196 connect( pbB, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbBtoggled(bool)));
197 pbB->setToggleButton(true);
198
199 pbCos = new TQPushButton("Cos",mSmallPage, "Cosbutton" );
200 pbCos->setText( "Cos" );
201 connect( pbCos, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbCostoggled(bool)));
202 pbCos->setToggleButton(true);
203
204
205 pbreci = new TQPushButton("1/x",mSmallPage, "recibutton" );
206 connect( pbreci, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbrecitoggled(bool)));
207 pbreci->setToggleButton(true);
208
209 pbC = new TQPushButton( "C", mSmallPage, "Cbutton" );
210 connect( pbC, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbCtoggled(bool)));
211 pbC->setToggleButton(true);
212
213 pbTan = new TQPushButton("Tan" ,mSmallPage, "Tanbutton" );
214 connect( pbTan, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbTantoggled(bool)));
215 pbTan->setToggleButton(true);
216
217 pbfactorial = new TQPushButton("x!",mSmallPage, "factorialbutton" );
218 connect( pbfactorial, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbfactorialtoggled(bool)));
219 pbfactorial->setToggleButton(true);
220
221 pbD = new TQPushButton("D",mSmallPage, "Dbutton" );
222 connect( pbD, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbDtoggled(bool)));
223 pbD->setToggleButton(true);
224
225 pblog = new TQPushButton("Log",mSmallPage, "logbutton" );
226 connect( pblog, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pblogtoggled(bool)));
227 pblog->setToggleButton(true);
228
229 pbsquare = new TQPushButton( "x^2", mSmallPage, "squarebutton" );
230 connect( pbsquare, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbsquaretoggled(bool)));
231 pbsquare->setToggleButton(true);
232
233 pbE = new TQPushButton("E",mSmallPage, "Ebutton" );
234 connect( pbE, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbEtoggled(bool)));
235 pbE->setToggleButton(true);
236
237
238 pbln = new TQPushButton( "Ln", mSmallPage, "lnbutton" );
239 connect( pbln, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pblntoggled(bool)));
240 pbln->setToggleButton(true);
241
242 pbpower = new TQPushButton("x^y",mSmallPage, "powerbutton" );
243 connect( pbpower, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbpowertoggled(bool)));
244 pbpower->setToggleButton(true);
245
246 pbF = new TQPushButton("F",mSmallPage, "Fbutton" );
247 connect( pbF, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbFtoggled(bool)));
248 pbF->setToggleButton(true);
249
250 pbEE = new TQPushButton("EE",mLargePage, "EEbutton" );
251 pbEE->setToggleButton(true);
252 connect( pbEE, TQ_SIGNAL(toggled(bool)), TQ_SLOT(EEtoggled(bool)));
253
254 pbMR = new TQPushButton("MR",mLargePage, "MRbutton" );
255 connect( pbMR, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbMRtoggled(bool)));
256 pbMR->setToggleButton(true);
257 pbMR->setFont(buttonfont);
258
259 pbMplusminus = new TQPushButton("M+-",mLargePage, "Mplusminusbutton" );
260 connect( pbMplusminus, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbMplusminustoggled(bool)));
261 pbMplusminus->setToggleButton(true);
262
263 pbMC = new TQPushButton("MC",mLargePage, "MCbutton" );
264 connect( pbMC, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbMCtoggled(bool)));
265 pbMC->setToggleButton(true);
266
267 pbClear = new TQPushButton("C",mLargePage, "Clearbutton" );
268 connect( pbClear, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbCleartoggled(bool)));
269 pbClear->setToggleButton(true);
270
271 pbAC = new TQPushButton("AC", mLargePage, "ACbutton" );
272 connect( pbAC, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbACtoggled(bool)));
273 pbAC->setToggleButton(true);
274
275 pb7 = new TQPushButton("7",mLargePage, "7button" );
276 connect( pb7, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pb7toggled(bool)));
277 pb7->setToggleButton(true);
278
279 pb8 = new TQPushButton("8",mLargePage, "8button" );
280 connect( pb8, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pb8toggled(bool)));
281 pb8->setToggleButton(true);
282
283 pb9 = new TQPushButton("9",mLargePage,"9button" );
284 connect( pb9, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pb9toggled(bool)));
285 pb9->setToggleButton(true);
286
287 pbparenopen = new TQPushButton("(",mLargePage, "parenopenbutton" );
288 connect( pbparenopen, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbparenopentoggled(bool)));
289 pbparenopen->setToggleButton(true);
290
291 pbparenclose = new TQPushButton(")",mLargePage, "parenclosebutton" );
292 connect( pbparenclose, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbparenclosetoggled(bool)));
293 pbparenclose->setToggleButton(true);
294
295 pband = new TQPushButton("And",mLargePage, "andbutton" );
296 connect( pband, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbandtoggled(bool)));
297 pband->setToggleButton(true);
298 pband->setFont(buttonfont);
299
300 pb4 = new TQPushButton("4",mLargePage, "4button" );
301 connect( pb4, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pb4toggled(bool)));
302 pb4->setToggleButton(true);
303
304 pb5 = new TQPushButton("5",mLargePage, "5button" );
305 connect( pb5, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pb5toggled(bool)));
306 pb5->setToggleButton(true);
307
308 pb6 = new TQPushButton("6",mLargePage, "6button" );
309 connect( pb6, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pb6toggled(bool)));
310 pb6->setToggleButton(true);
311
312 pbX = new TQPushButton("X",mLargePage, "Multiplybutton" );
313 connect( pbX, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbXtoggled(bool)));
314 pbX->setToggleButton(true);
315
316 pbdivision = new TQPushButton("/",mLargePage, "divisionbutton" );
317 connect( pbdivision, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbdivisiontoggled(bool)));
318 pbdivision->setToggleButton(true);
319
320 pbor = new TQPushButton("Or",mLargePage, "orbutton" );
321 connect( pbor, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbortoggled(bool)));
322 pbor->setToggleButton(true);
323
324 pb1 = new TQPushButton("1",mLargePage, "1button" );
325 connect( pb1, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pb1toggled(bool)));
326 pb1->setToggleButton(true);
327
328 pb2 = new TQPushButton("2",mLargePage, "2button" );
329
330 connect( pb2, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pb2toggled(bool)));
331 pb2->setToggleButton(true);
332
333 pb3 = new TQPushButton("3",mLargePage, "3button" );
334 connect( pb3, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pb3toggled(bool)));
335 pb3->setToggleButton(true);
336
337 pbplus = new TQPushButton("+",mLargePage, "plusbutton" );
338 connect( pbplus, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbplustoggled(bool)));
339 pbplus->setToggleButton(true);
340
341
342 pbminus = new TQPushButton("-",mLargePage, "minusbutton" );
343 connect( pbminus, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbminustoggled(bool)));
344 pbminus->setToggleButton(true);
345
346 pbshift = new TQPushButton("Lsh",mLargePage, "shiftbutton" );
347 connect( pbshift, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbshifttoggled(bool)));
348 pbshift->setToggleButton(true);
349
350 pbperiod = new TQPushButton(".",mLargePage, "periodbutton" );
351 connect( pbperiod, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbperiodtoggled(bool)));
352 pbperiod->setToggleButton(true);
353
354 pb0 = new TQPushButton("0",mLargePage, "0button" );
355 connect( pb0, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pb0toggled(bool)));
356 pb0->setToggleButton(true);
357
358 pbequal = new TQPushButton("=",mLargePage, "equalbutton" );
359 connect( pbequal, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbequaltoggled(bool)));
360 pbequal->setToggleButton(true);
361
362 pbpercent = new TQPushButton("%",mLargePage, "percentbutton" );
363 connect( pbpercent, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbpercenttoggled(bool)));
364 pbpercent->setToggleButton(true);
365
366 pbnegate = new TQPushButton("Cmp",mLargePage, "OneComplementbutton" );
367 connect( pbnegate, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbnegatetoggled(bool)));
368 pbnegate->setToggleButton(true);
369
370 pbmod = new TQPushButton("Mod",mLargePage, "modbutton" );
371 connect( pbmod, TQ_SIGNAL(toggled(bool)), TQ_SLOT(pbmodtoggled(bool)));
372 pbmod->setToggleButton(true);
373
374 TQGridLayout *smallBtnLayout = new TQGridLayout(mSmallPage, 6, 3, 0,
375 mInternalSpacing);
376 TQGridLayout *largeBtnLayout = new TQGridLayout(mLargePage, 5, 6, 0,
377 mInternalSpacing);
378
379 TQHBoxLayout *topLayout = new TQHBoxLayout();
380 TQHBoxLayout *radioLayout = new TQHBoxLayout();
381 TQHBoxLayout *btnLayout = new TQHBoxLayout();
382 TQHBoxLayout *statusLayout = new TQHBoxLayout();
383
384 // bring them all together
385 TQVBoxLayout *mainLayout = new TQVBoxLayout(this, mInternalSpacing,
386 mInternalSpacing );
387
388 mainLayout->addLayout(topLayout );
389 mainLayout->addLayout(radioLayout, 1);
390 mainLayout->addLayout(btnLayout);
391 mainLayout->addLayout(statusLayout);
392
393 // button layout
394 btnLayout->addWidget(mSmallPage,0,AlignTop);
395 btnLayout->addSpacing(mInternalSpacing);
396 btnLayout->addWidget(mLargePage,0,AlignTop);
397
398 // small button layout
399 smallBtnLayout->addWidget(pbhyp, 0, 0);
400 smallBtnLayout->addWidget(pbinv, 0, 1);
401 smallBtnLayout->addWidget(pbA, 0, 2);
402
403 smallBtnLayout->addWidget(pbSin, 1, 0);
404 smallBtnLayout->addWidget(pbplusminus, 1, 1);
405 smallBtnLayout->addWidget(pbB, 1, 2);
406
407 smallBtnLayout->addWidget(pbCos, 2, 0);
408 smallBtnLayout->addWidget(pbreci, 2, 1);
409 smallBtnLayout->addWidget(pbC, 2, 2);
410
411 smallBtnLayout->addWidget(pbTan, 3, 0);
412 smallBtnLayout->addWidget(pbfactorial, 3, 1);
413 smallBtnLayout->addWidget(pbD, 3, 2);
414
415 smallBtnLayout->addWidget(pblog, 4, 0);
416 smallBtnLayout->addWidget(pbsquare, 4, 1);
417 smallBtnLayout->addWidget(pbE, 4, 2);
418
419 smallBtnLayout->addWidget(pbln, 5, 0);
420 smallBtnLayout->addWidget(pbpower, 5, 1);
421 smallBtnLayout->addWidget(pbF, 5, 2);
422
423 smallBtnLayout->setRowStretch(0, 0);
424 smallBtnLayout->setRowStretch(1, 0);
425 smallBtnLayout->setRowStretch(2, 0);
426 smallBtnLayout->setRowStretch(3, 0);
427 smallBtnLayout->setRowStretch(4, 0);
428 smallBtnLayout->setRowStretch(5, 0);
429
430 // large button layout
431 largeBtnLayout->addWidget(pbEE, 0, 0);
432 largeBtnLayout->addWidget(pbMR, 0, 1);
433 largeBtnLayout->addWidget(pbMplusminus, 0, 2);
434 largeBtnLayout->addWidget(pbMC, 0, 3);
435 largeBtnLayout->addWidget(pbClear, 0, 4);
436 largeBtnLayout->addWidget(pbAC, 0, 5);
437
438 largeBtnLayout->addWidget(pb7, 1, 0);
439 largeBtnLayout->addWidget(pb8, 1, 1);
440 largeBtnLayout->addWidget(pb9, 1, 2);
441 largeBtnLayout->addWidget(pbparenopen, 1, 3);
442 largeBtnLayout->addWidget(pbparenclose, 1, 4);
443 largeBtnLayout->addWidget(pband, 1, 5);
444
445 largeBtnLayout->addWidget(pb4, 2, 0);
446 largeBtnLayout->addWidget(pb5, 2, 1);
447 largeBtnLayout->addWidget(pb6, 2, 2);
448 largeBtnLayout->addWidget(pbX, 2, 3);
449 largeBtnLayout->addWidget(pbdivision, 2, 4);
450 largeBtnLayout->addWidget(pbor, 2, 5);
451
452 largeBtnLayout->addWidget(pb1, 3, 0);
453 largeBtnLayout->addWidget(pb2, 3, 1);
454 largeBtnLayout->addWidget(pb3, 3, 2);
455 largeBtnLayout->addWidget(pbplus, 3, 3);
456 largeBtnLayout->addWidget(pbminus, 3, 4);
457 largeBtnLayout->addWidget(pbshift, 3, 5);
458
459 largeBtnLayout->addWidget(pbperiod, 4, 0);
460 largeBtnLayout->addWidget(pb0, 4, 1);
461 largeBtnLayout->addWidget(pbequal, 4, 2);
462 largeBtnLayout->addWidget(pbpercent, 4, 3);
463 largeBtnLayout->addWidget(pbnegate, 4, 4);
464 largeBtnLayout->addWidget(pbmod, 4, 5);
465
466 largeBtnLayout->addColSpacing(0,10);
467 largeBtnLayout->addColSpacing(1,10);
468 largeBtnLayout->addColSpacing(2,10);
469 largeBtnLayout->addColSpacing(3,10);
470 largeBtnLayout->addColSpacing(4,10);
471 topLayout->addWidget(pb);
472 topLayout->addWidget(calc_display, 10);
473
474
475 // radiobutton layout
476 radioLayout->addWidget(base_group);
477 radioLayout->addWidget(angle_group);
478
479 // status layout
480 statusLayout->addWidget(statusINVLabel);
481 statusLayout->addWidget(statusHYPLabel);
482 statusLayout->addWidget(statusERRORLabel, 10);
483
484 mNumButtonList.append(pb0);
485 mNumButtonList.append(pb1);
486 mNumButtonList.append(pb2);
487 mNumButtonList.append(pb3);
488 mNumButtonList.append(pb4);
489 mNumButtonList.append(pb5);
490 mNumButtonList.append(pb6);
491 mNumButtonList.append(pb7);
492 mNumButtonList.append(pb8);
493 mNumButtonList.append(pb9);
494
495 mFunctionButtonList.append(pbhyp);
496 mFunctionButtonList.append(pbinv);
497 mFunctionButtonList.append(pbSin);
498 mFunctionButtonList.append(pbplusminus);
499 mFunctionButtonList.append(pbCos);
500 mFunctionButtonList.append(pbreci);
501 mFunctionButtonList.append(pbTan);
502 mFunctionButtonList.append(pbfactorial);
503 mFunctionButtonList.append(pblog);
504 mFunctionButtonList.append(pbsquare);
505 mFunctionButtonList.append(pbln);
506 mFunctionButtonList.append(pbpower);
507
508 mHexButtonList.append(pbA);
509 mHexButtonList.append(pbB);
510 mHexButtonList.append(pbC);
511 mHexButtonList.append(pbD);
512 mHexButtonList.append(pbE);
513 mHexButtonList.append(pbF);
514
515 mMemButtonList.append(pbEE);
516 mMemButtonList.append(pbMR);
517 mMemButtonList.append(pbMplusminus);
518 mMemButtonList.append(pbMC);
519 mMemButtonList.append(pbClear);
520 mMemButtonList.append(pbAC);
521
522 mOperationButtonList.append(pbX);
523 mOperationButtonList.append(pbparenopen);
524 mOperationButtonList.append(pbparenclose);
525 mOperationButtonList.append(pband);
526 mOperationButtonList.append(pbdivision);
527 mOperationButtonList.append(pbor);
528 mOperationButtonList.append(pbplus);
529 mOperationButtonList.append(pbminus);
530 mOperationButtonList.append(pbshift);
531 mOperationButtonList.append(pbperiod);
532 mOperationButtonList.append(pbequal);
533 mOperationButtonList.append(pbpercent);
534 mOperationButtonList.append(pbnegate);
535 mOperationButtonList.append(pbmod);
536
537 set_colors();
538 set_precision();
539 set_style();
540 updateGeometry();
541 setFixedHeight(minimumHeight());
542 InitializeCalculator();
543}
544
545TQtCalculator::~TQtCalculator()
546{
547 delete selection_timer;
548 delete status_timer;
549
550}
551
552void TQtCalculator::set_display_font()
553{
554 calc_display->setFont(kcalcdefaults.font);
555}
556
557void TQtCalculator::updateGeometry()
558{
559 TQObjectList *l;
560 TQSize s;
561 int margin;
562
563 //
564 // Uppermost bar
565 //
566 calc_display->setMinimumWidth(calc_display->fontMetrics().maxWidth() * 15);
567
568 //
569 // Button groups (base and angle)
570 //
571 //TQButtonGroup *g;
572 //g = (TQButtonGroup*)(anglebutton[0]->parentWidget());
573 //g = (TQButtonGroup*)(basebutton[0]->parentWidget());
574
575 //
576 // Calculator buttons
577 //
578 s.setWidth(mSmallPage->fontMetrics().width("MMM"));
579 s.setHeight(mSmallPage->fontMetrics().lineSpacing());
580
581 l = (TQObjectList*)mSmallPage->children(); // silence please
582
583 for(uint i=0; i < l->count(); i++)
584 {
585 TQObject *o = l->at(i);
586 if( o->isWidgetType() )
587 {
588 margin = TQApplication::style().
589 pixelMetric(TQStyle::PM_ButtonMargin, ((TQWidget *)o))*2;
590 ((TQWidget*)o)->setMinimumSize(s.width()+margin, s.height()+margin);
591 ((TQWidget*)o)->installEventFilter( this );
592 ((TQWidget*)o)->setAcceptDrops(true);
593 }
594 }
595
596 l = (TQObjectList*)mLargePage->children(); // silence please
597
598 int h1 = pbF->minimumSize().height();
599 int h2 = (int)((((float)h1 + 4.0) / 5.0));
600 s.setWidth(mLargePage->fontMetrics().width("MMM") +
601 TQApplication::style().
602 pixelMetric(TQStyle::PM_ButtonMargin, pbF)*2);
603 s.setHeight(h1 + h2);
604
605 for(uint i = 0; i < l->count(); i++)
606 {
607 TQObject *o = l->at(i);
608 if(o->isWidgetType())
609 {
610 ((TQWidget*)o)->setFixedSize(s);
611 ((TQWidget*)o)->installEventFilter(this);
612 ((TQWidget*)o)->setAcceptDrops(true);
613 }
614 }
615
616 //
617 // The status bar
618 //
619 s.setWidth( statusINVLabel->fontMetrics().width("NORM") +
620 statusINVLabel->frameWidth() * 2 + 10);
621 statusINVLabel->setMinimumWidth(s.width());
622 statusHYPLabel->setMinimumWidth(s.width());
623
624 //setFixedSize(minimumSize());
625}
626
627void TQtCalculator::exit()
628{
629 // TQApplication::exit();
630}
631
632void TQtCalculator::Hex_Selected()
633{
634 basebutton[0]->setChecked(true);
635 basebutton[1]->setChecked(false);
636 basebutton[2]->setChecked(false);
637 basebutton[3]->setChecked(false);
638 SetHex();
639}
640
641
642void TQtCalculator::Dec_Selected()
643{
644 basebutton[0]->setChecked(false);
645 basebutton[1]->setChecked(true);
646 basebutton[2]->setChecked(false);
647 basebutton[3]->setChecked(false);
648 SetDec();
649}
650
651
652void TQtCalculator::Oct_Selected()
653{
654 basebutton[0]->setChecked(false);
655 basebutton[1]->setChecked(false);
656 basebutton[2]->setChecked(true);
657 basebutton[3]->setChecked(false);
658 SetOct();
659}
660
661
662
663void TQtCalculator::Bin_Selected()
664{
665 basebutton[0]->setChecked(false);
666 basebutton[1]->setChecked(false);
667 basebutton[2]->setChecked(false);
668 basebutton[3]->setChecked(true);
669 SetBin();
670}
671
672void TQtCalculator::Deg_Selected()
673{
674 anglebutton[0]->setChecked(true);
675 anglebutton[1]->setChecked(false);
676 anglebutton[2]->setChecked(false);
677 SetDeg();
678}
679
680
681void TQtCalculator::Rad_Selected()
682{
683 anglebutton[0]->setChecked(false);
684 anglebutton[1]->setChecked(true);
685 anglebutton[2]->setChecked(false);
686 SetRad();
687
688}
689
690
691void TQtCalculator::Gra_Selected()
692{
693 anglebutton[0]->setChecked(false);
694 anglebutton[1]->setChecked(false);
695 anglebutton[2]->setChecked(true);
696 SetGra();
697}
698
699
700void TQtCalculator::helpclicked(){
701}
702
703void TQtCalculator::keyPressEvent( TQKeyEvent *e ){
704
705 switch (e->key() ){
706
707 case Key_F1:
708 helpclicked();
709 break;
710 case Key_F2:
711 configclicked();
712 break;
713 case Key_F3:
714 if(kcalcdefaults.style == 0)
715 kcalcdefaults.style = 1;
716 else if(kcalcdefaults.style == 1)
717 kcalcdefaults.style = 2;
718 else
719 kcalcdefaults.style = 0;
720 set_style();
721 break;
722 case Key_Up:
723 temp_stack_prev();
724 break;
725 case Key_Down:
726 temp_stack_next();
727 break;
728
729 case Key_Next:
730 key_pressed = true;
731 pbAC->setOn(true);
732 break;
733 case Key_Prior:
734 key_pressed = true;
735 pbClear->setOn(true);
736 break;
737
738 case Key_H:
739 key_pressed = true;
740 pbhyp->setOn(true);
741 break;
742 case Key_I:
743 key_pressed = true;
744 pbinv->setOn(true);
745 break;
746 case Key_A:
747 key_pressed = true;
748 pbA->setOn(true);
749
750 break;
751 case Key_E:
752 key_pressed = true;
753 if (current_base == NB_HEX)
754 pbE->setOn(true);
755 else
756 pbEE->setOn(true);
757 break;
758 case Key_Escape:
759 key_pressed = true;
760 pbClear->setOn(true);
761 break;
762 case Key_Delete:
763 key_pressed = true;
764 pbAC->setOn(true);
765 break;
766 case Key_S:
767 key_pressed = true;
768 pbSin->setOn(true);
769 break;
770 case Key_Backslash:
771 key_pressed = true;
772 pbplusminus->setOn(true);
773 break;
774 case Key_B:
775 key_pressed = true;
776 pbB->setOn(true);
777 break;
778 case Key_7:
779 key_pressed = true;
780 pb7->setOn(true);
781 break;
782 case Key_8:
783 key_pressed = true;
784 pb8->setOn(true);
785 break;
786 case Key_9:
787 key_pressed = true;
788 pb9->setOn(true);
789 break;
790 case Key_ParenLeft:
791 key_pressed = true;
792 pbparenopen->setOn(true);
793 break;
794 case Key_ParenRight:
795 key_pressed = true;
796 pbparenclose->setOn(true);
797 break;
798 case Key_Ampersand:
799 key_pressed = true;
800 pband->setOn(true);
801 break;
802 case Key_C:
803 key_pressed = true;
804 if (current_base == NB_HEX)
805 pbC->setOn(true);
806 else
807 pbCos->setOn(true);
808 break;
809 case Key_4:
810 key_pressed = true;
811 pb4->setOn(true);
812 break;
813 case Key_5:
814 key_pressed = true;
815 pb5->setOn(true);
816 break;
817 case Key_6:
818 key_pressed = true;
819 pb6->setOn(true);
820 break;
821 case Key_Asterisk:
822 key_pressed = true;
823 pbX->setOn(true);
824 break;
825 case Key_Slash:
826 key_pressed = true;
827 pbdivision->setOn(true);
828 break;
829 case Key_O:
830 key_pressed = true;
831 pbor->setOn(true);
832 break;
833 case Key_T:
834 key_pressed = true;
835 pbTan->setOn(true);
836 break;
837 case Key_Exclam:
838 key_pressed = true;
839 pbfactorial->setOn(true);
840 break;
841 case Key_D:
842 key_pressed = true;
843 if(kcalcdefaults.style == 0)
844 pbD->setOn(true); // trig mode
845 else
846 pblog->setOn(true); // stat mode
847 break;
848 case Key_1:
849 key_pressed = true;
850 pb1->setOn(true);
851 break;
852 case Key_2:
853 key_pressed = true;
854 pb2->setOn(true);
855 break;
856 case Key_3:
857 key_pressed = true;
858 pb3->setOn(true);
859 break;
860 case Key_Plus:
861 key_pressed = true;
862 pbplus->setOn(true);
863 break;
864 case Key_Minus:
865 key_pressed = true;
866 pbminus->setOn(true);
867 break;
868 case Key_Less:
869 key_pressed = true;
870 pbshift->setOn(true);
871 break;
872 case Key_N:
873 key_pressed = true;
874 pbln->setOn(true);
875 break;
876 case Key_L:
877 key_pressed = true;
878 pblog->setOn(true);
879 break;
880 case Key_AsciiCircum:
881 key_pressed = true;
882 pbpower->setOn(true);
883 break;
884 case Key_F:
885 key_pressed = true;
886 pbF->setOn(true);
887 break;
888 case Key_Period:
889 key_pressed = true;
890 pbperiod->setOn(true);
891 break;
892 case Key_Comma:
893 key_pressed = true;
894 pbperiod->setOn(true);
895 break;
896 case Key_0:
897 key_pressed = true;
898 pb0->setOn(true);
899 break;
900 case Key_Equal:
901 key_pressed = true;
902 pbequal->setOn(true);
903 break;
904 case Key_Return:
905 key_pressed = true;
906 pbequal->setOn(true);
907 break;
908 case Key_Enter:
909 key_pressed = true;
910 pbequal->setOn(true);
911 break;
912 case Key_Percent:
913 key_pressed = true;
914 pbpercent->setOn(true);
915 break;
916 case Key_AsciiTilde:
917 key_pressed = true;
918 pbnegate->setOn(true);
919 break;
920 case Key_Colon:
921 key_pressed = true;
922 pbmod->setOn(true);
923 break;
924 case Key_BracketLeft:
925 key_pressed = true;
926 pbsquare->setOn(true);
927 break;
928 case Key_Backspace:
929 key_pressed = true;
930 pbAC->setOn(true);
931 break;
932 case Key_R:
933 key_pressed = true;
934 pbreci->setOn(true);
935 break;
936 }
937}
938
939void TQtCalculator::keyReleaseEvent( TQKeyEvent *e ){
940 switch (e->key() ){
941
942 case Key_Next:
943 key_pressed = false;
944 pbAC->setOn(false);
945 break;
946 case Key_Prior:
947 key_pressed = false;
948 pbClear->setOn(false);
949 break;
950
951 case Key_H:
952 key_pressed = false;
953 pbhyp->setOn(false);
954 break;
955 case Key_I:
956 key_pressed = false;
957 pbinv->setOn(false);
958 break;
959 case Key_A:
960 key_pressed = false;
961 pbA->setOn(false);
962 break;
963 case Key_E:
964 key_pressed = false;
965 if (current_base == NB_HEX)
966 pbE->setOn(false);
967 else
968 pbEE->setOn(false);
969 break;
970 case Key_Escape:
971 key_pressed = false;
972 pbClear->setOn(false);
973 break;
974 case Key_Delete:
975 key_pressed = false;
976 pbAC->setOn(false);
977 break;
978 case Key_S:
979 key_pressed = false;
980 pbSin->setOn(false);
981 break;
982 case Key_Backslash:
983 key_pressed = false;
984 pbplusminus->setOn(false);
985 break;
986 case Key_B:
987 key_pressed = false;
988 pbB->setOn(false);
989 break;
990 case Key_7:
991 key_pressed = false;
992 pb7->setOn(false);
993 break;
994 case Key_8:
995 key_pressed = false;
996 pb8->setOn(false);
997 break;
998 case Key_9:
999 key_pressed = false;
1000 pb9->setOn(false);
1001 break;
1002 case Key_ParenLeft:
1003 key_pressed = false;
1004 pbparenopen->setOn(false);
1005 break;
1006 case Key_ParenRight:
1007 key_pressed = false;
1008 pbparenclose->setOn(false);
1009 break;
1010 case Key_Ampersand:
1011 key_pressed = false;
1012 pband->setOn(false);
1013 break;
1014 case Key_C:
1015 key_pressed = false;
1016 if (current_base == NB_HEX)
1017 pbC->setOn(false);
1018 else
1019 pbCos->setOn(false);
1020 break;
1021 case Key_4:
1022 key_pressed = false;
1023 pb4->setOn(false);
1024 break;
1025 case Key_5:
1026 key_pressed = false;
1027 pb5->setOn(false);
1028 break;
1029 case Key_6:
1030 key_pressed = false;
1031 pb6->setOn(false);
1032 break;
1033 case Key_Asterisk:
1034 key_pressed = false;
1035 pbX->setOn(false);
1036 break;
1037 case Key_Slash:
1038 key_pressed = false;
1039 pbdivision->setOn(false);
1040 break;
1041 case Key_O:
1042 key_pressed = false;
1043 pbor->setOn(false);
1044 break;
1045 case Key_T:
1046 key_pressed = false;
1047 pbTan->setOn(false);
1048 break;
1049 case Key_Exclam:
1050 key_pressed = false;
1051 pbfactorial->setOn(false);
1052 break;
1053 case Key_D:
1054 key_pressed = false;
1055 if(kcalcdefaults.style == 0)
1056 pbD->setOn(false); // trig mode
1057 else
1058 pblog->setOn(false);// stat mode
1059 break;
1060 case Key_1:
1061 key_pressed = false;
1062 pb1->setOn(false);
1063 break;
1064 case Key_2:
1065 key_pressed = false;
1066 pb2->setOn(false);
1067 break;
1068 case Key_3:
1069 key_pressed = false;
1070 pb3->setOn(false);
1071 break;
1072 case Key_Plus:
1073 key_pressed = false;
1074 pbplus->setOn(false);
1075 break;
1076 case Key_Minus:
1077 key_pressed = false;
1078 pbminus->setOn(false);
1079 break;
1080 case Key_Less:
1081 key_pressed = false;
1082 pbshift->setOn(false);
1083 break;
1084 case Key_N:
1085 key_pressed = false;
1086 pbln->setOn(false);
1087 break;
1088 case Key_L:
1089 key_pressed = false;
1090 pblog->setOn(false);
1091 break;
1092 case Key_AsciiCircum:
1093 key_pressed = false;
1094 pbpower->setOn(false);
1095 break;
1096 case Key_F:
1097 key_pressed = false;
1098 pbF->setOn(false);
1099 break;
1100 case Key_Period:
1101 key_pressed = false;
1102 pbperiod->setOn(false);
1103 break;
1104 case Key_Comma:
1105 key_pressed = false;
1106 pbperiod->setOn(false);
1107 break;
1108 case Key_0:
1109 key_pressed = false;
1110 pb0->setOn(false);
1111 break;
1112 case Key_Equal:
1113 key_pressed = false;
1114 pbequal->setOn(false);
1115 break;
1116 case Key_Return:
1117 key_pressed = false;
1118 pbequal->setOn(false);
1119 break;
1120 case Key_Enter:
1121 key_pressed = false;
1122 pbequal->setOn(false);
1123 break;
1124 case Key_Percent:
1125 key_pressed = false;
1126 pbpercent->setOn(false);
1127 break;
1128 case Key_AsciiTilde:
1129 key_pressed = false;
1130 pbnegate->setOn(false);
1131 break;
1132 case Key_Colon:
1133 key_pressed = false;
1134 pbmod->setOn(false);
1135 break;
1136 case Key_BracketLeft:
1137 key_pressed = false;
1138 pbsquare->setOn(false);
1139 break;
1140 case Key_Backspace:
1141 key_pressed = false;
1142 pbAC->setOn(false);
1143 break;
1144 case Key_R:
1145 key_pressed = false;
1146 pbreci->setOn(false);
1147 break;
1148 }
1149
1150 clear_buttons();
1151}
1152
1153void TQtCalculator::clear_buttons(){
1154
1155}
1156
1157void TQtCalculator::EEtoggled(bool myboolean){
1158
1159 if(myboolean)
1160 EE();
1161 if(pbEE->isOn() && (!key_pressed))
1162 pbEE->setOn(false);
1163}
1164
1165void TQtCalculator::pbinvtoggled(bool myboolean){
1166 if(myboolean)
1167 SetInverse();
1168 if(pbinv->isOn() && (!key_pressed))
1169 pbinv->setOn(false);
1170}
1171
1172void TQtCalculator::pbhyptoggled(bool myboolean){
1173 if(myboolean)
1174 EnterHyp();
1175 if(pbhyp->isOn() && (!key_pressed))
1176 pbhyp->setOn(false);
1177}
1178void TQtCalculator::pbMRtoggled(bool myboolean){
1179 if(myboolean)
1180 MR();
1181 if(pbMR->isOn() && (!key_pressed))
1182 pbMR->setOn(false);
1183}
1184
1185void TQtCalculator::pbAtoggled(bool myboolean){
1186 if(myboolean)
1187 buttonA();
1188 if(pbA->isOn() && (!key_pressed))
1189 pbA->setOn(false);
1190}
1191
1192void TQtCalculator::pbSintoggled(bool myboolean){
1193 if(myboolean)
1194 ExecSin();
1195 if(pbSin->isOn() && (!key_pressed))
1196 pbSin->setOn(false);
1197}
1198void TQtCalculator::pbplusminustoggled(bool myboolean){
1199 if(myboolean)
1200 EnterNegate();
1201 if(pbplusminus->isOn() && (!key_pressed))
1202 pbplusminus->setOn(false);
1203}
1204void TQtCalculator::pbMplusminustoggled(bool myboolean){
1205 if(myboolean)
1206 Mplusminus();
1207 if(pbMplusminus->isOn() && (!key_pressed))
1208 pbMplusminus->setOn(false);
1209}
1210void TQtCalculator::pbBtoggled(bool myboolean){
1211 if(myboolean)
1212 buttonB();
1213 if(pbB->isOn() && (!key_pressed))
1214 pbB->setOn(false);
1215}
1216void TQtCalculator::pbCostoggled(bool myboolean){
1217 if(myboolean)
1218 ExecCos();
1219 if(pbCos->isOn() && (!key_pressed))
1220 pbCos->setOn(false);
1221}
1222void TQtCalculator::pbrecitoggled(bool myboolean){
1223 if(myboolean)
1224 EnterRecip();
1225 if(pbreci->isOn() && (!key_pressed))
1226 pbreci->setOn(false);
1227}
1228void TQtCalculator::pbCtoggled(bool myboolean){
1229 if(myboolean)
1230 buttonC();
1231 if(pbC->isOn() && (!key_pressed))
1232 pbC->setOn(false);
1233}
1234void TQtCalculator::pbTantoggled(bool myboolean){
1235 if(myboolean)
1236 ExecTan();
1237 if(pbTan->isOn() && (!key_pressed))
1238 pbTan->setOn(false);
1239}
1240void TQtCalculator::pbfactorialtoggled(bool myboolean){
1241 if(myboolean)
1242 EnterFactorial();
1243 if(pbfactorial->isOn() && (!key_pressed))
1244 pbfactorial->setOn(false);
1245}
1246void TQtCalculator::pbDtoggled(bool myboolean){
1247 if(myboolean)
1248 buttonD();
1249 if(pbD->isOn() && (!key_pressed))
1250 pbD->setOn(false);
1251}
1252void TQtCalculator::pblogtoggled(bool myboolean){
1253 if(myboolean)
1254 EnterLogr();
1255 if(pblog->isOn() && (!key_pressed))
1256 pblog->setOn(false);
1257}
1258void TQtCalculator::pbsquaretoggled(bool myboolean){
1259 if(myboolean)
1260 EnterSquare();
1261 if(pbsquare->isOn() && (!key_pressed))
1262 pbsquare->setOn(false);
1263}
1264void TQtCalculator::pbEtoggled(bool myboolean){
1265 if(myboolean)
1266 buttonE();
1267 if(pbE->isOn() && (!key_pressed))
1268 pbE->setOn(false);
1269}
1270void TQtCalculator::pblntoggled(bool myboolean){
1271 if(myboolean)
1272 EnterLogn();
1273 if(pbln->isOn() && (!key_pressed))
1274 pbln->setOn(false);
1275}
1276void TQtCalculator::pbpowertoggled(bool myboolean){
1277 if(myboolean)
1278 Power();
1279 if(pbpower->isOn() && (!key_pressed))
1280 pbpower->setOn(false);
1281}
1282void TQtCalculator::pbFtoggled(bool myboolean){
1283 if(myboolean)
1284 buttonF();
1285 if(pbF->isOn() && (!key_pressed))
1286 pbF->setOn(false);
1287}
1288void TQtCalculator::pbMCtoggled(bool myboolean){
1289 if(myboolean)
1290 MC();
1291 if(pbMC->isOn() && (!key_pressed))
1292 pbMC->setOn(false);
1293}
1294void TQtCalculator::pbCleartoggled(bool myboolean){
1295 if(myboolean)
1296 Clear();
1297 if(pbClear->isOn() && (!key_pressed))
1298 pbClear->setOn(false);
1299}
1300void TQtCalculator::pbACtoggled(bool myboolean){
1301 if(myboolean)
1302 ClearAll();
1303 if(pbAC->isOn() && (!key_pressed))
1304 pbAC->setOn(false);
1305}
1306void TQtCalculator::pb7toggled(bool myboolean){
1307 if(myboolean)
1308 button7();
1309 if(pb7->isOn() && (!key_pressed))
1310 pb7->setOn(false);
1311}
1312void TQtCalculator::pb8toggled(bool myboolean){
1313 if(myboolean)
1314 button8();
1315 if(pb8->isOn() && (!key_pressed))
1316 pb8->setOn(false);
1317}
1318void TQtCalculator::pb9toggled(bool myboolean){
1319 if(myboolean)
1320 button9();
1321 if(pb9->isOn() && (!key_pressed))
1322 pb9->setOn(false);
1323}
1324void TQtCalculator::pbparenopentoggled(bool myboolean){
1325 if(myboolean)
1326 EnterOpenParen();
1327 if(pbparenopen->isOn() && (!key_pressed))
1328 pbparenopen->setOn(false);
1329}
1330void TQtCalculator::pbparenclosetoggled(bool myboolean){
1331 if(myboolean)
1332 EnterCloseParen();
1333 if(pbparenclose->isOn() && (!key_pressed))
1334 pbparenclose->setOn(false);
1335}
1336void TQtCalculator::pbandtoggled(bool myboolean){
1337 if(myboolean)
1338 And();
1339 if(pband->isOn() && (!key_pressed))
1340 pband->setOn(false);
1341}
1342void TQtCalculator::pb4toggled(bool myboolean){
1343 if(myboolean)
1344 button4();
1345 if(pb4->isOn() && (!key_pressed))
1346 pb4->setOn(false);
1347}
1348void TQtCalculator::pb5toggled(bool myboolean){
1349 if(myboolean)
1350 button5();
1351 if(pb5->isOn() && (!key_pressed))
1352 pb5->setOn(false);
1353}
1354void TQtCalculator::pb6toggled(bool myboolean){
1355 if(myboolean)
1356 button6();
1357 if(pb6->isOn() && (!key_pressed))
1358 pb6->setOn(false);
1359}
1360void TQtCalculator::pbXtoggled(bool myboolean){
1361 if(myboolean)
1362 Multiply();
1363 if(pbX->isOn() && (!key_pressed))
1364 pbX->setOn(false);
1365}
1366void TQtCalculator::pbdivisiontoggled(bool myboolean){
1367 if(myboolean)
1368 Divide();
1369 if(pbdivision->isOn() && (!key_pressed))
1370 pbdivision->setOn(false);
1371}
1372void TQtCalculator::pbortoggled(bool myboolean){
1373 if(myboolean)
1374 Or();
1375 if(pbor->isOn() && (!key_pressed))
1376 pbor->setOn(false);
1377}
1378void TQtCalculator::pb1toggled(bool myboolean){
1379 if(myboolean)
1380 button1();
1381 if(pb1->isOn() && (!key_pressed))
1382 pb1->setOn(false);
1383}
1384void TQtCalculator::pb2toggled(bool myboolean){
1385 if(myboolean)
1386 button2();
1387 if(pb2->isOn() && (!key_pressed))
1388 pb2->setOn(false);
1389}
1390void TQtCalculator::pb3toggled(bool myboolean){
1391 if(myboolean)
1392 button3();
1393 if(pb3->isOn() && (!key_pressed))
1394 pb3->setOn(false);
1395}
1396void TQtCalculator::pbplustoggled(bool myboolean){
1397 if(myboolean)
1398 Plus();
1399 if(pbplus->isOn() && (!key_pressed))
1400 pbplus->setOn(false);
1401}
1402void TQtCalculator::pbminustoggled(bool myboolean){
1403 if(myboolean)
1404 Minus();
1405 if(pbminus->isOn() && (!key_pressed))
1406 pbminus->setOn(false);
1407}
1408void TQtCalculator::pbshifttoggled(bool myboolean){
1409 if(myboolean)
1410 Shift();
1411 if(pbshift->isOn() && (!key_pressed))
1412 pbshift->setOn(false);
1413}
1414void TQtCalculator::pbperiodtoggled(bool myboolean){
1415 if(myboolean)
1416 EnterDecimal();
1417 if(pbperiod->isOn() && (!key_pressed))
1418 pbperiod->setOn(false);
1419}
1420void TQtCalculator::pb0toggled(bool myboolean){
1421 if(myboolean)
1422 button0();
1423 if(pb0->isOn() && (!key_pressed))
1424 pb0->setOn(false);
1425}
1426void TQtCalculator::pbequaltoggled(bool myboolean){
1427 if(myboolean)
1428 EnterEqual();
1429 if(pbequal->isOn() && (!key_pressed))
1430 pbequal->setOn(false);
1431}
1432void TQtCalculator::pbpercenttoggled(bool myboolean){
1433 if(myboolean)
1434 EnterPercent();
1435 if(pbpercent->isOn() && (!key_pressed))
1436 pbpercent->setOn(false);
1437}
1438void TQtCalculator::pbnegatetoggled(bool myboolean){
1439 if(myboolean)
1440 EnterNotCmp();
1441 if(pbnegate->isOn() && (!key_pressed))
1442 pbnegate->setOn(false);
1443}
1444void TQtCalculator::pbmodtoggled(bool myboolean) {
1445 if(myboolean)
1446 Mod();
1447 if(pbmod->isOn() && (!key_pressed))
1448 pbmod->setOn(false);
1449}
1450
1451void TQtCalculator::configclicked(){
1452
1453
1454 TQTabDialog * tabdialog;
1455 tabdialog = new TQTabDialog(0,"tabdialog",true);
1456
1457 tabdialog->setCaption( i18n("KCalc Configuration") );
1458 tabdialog->resize( 360, 390 );
1459 tabdialog->setCancelButton( i18n("&Cancel") );
1460 tabdialog->setOKButton(i18n("&OK"));
1461
1462 TQWidget *about = new TQWidget(tabdialog,"about");
1463 TQVBoxLayout *lay1 = new TQVBoxLayout( about );
1464 lay1->setMargin( KDialog::marginHint() );
1465 lay1->setSpacing( KDialog::spacingHint() );
1466
1467 TQGroupBox *box = new TQGroupBox(0,TQt::Vertical,about,"box");
1468 box->layout()->setSpacing(KDialog::spacingHint());
1469 box->layout()->setMargin(KDialog::marginHint());
1470 TQGridLayout *grid1 = new TQGridLayout(box->layout(),2,2);
1471 TQLabel *label = new TQLabel(box,"label");
1472 TQLabel *label2 = new TQLabel(box,"label2");
1473
1474 box->setTitle(i18n("About"));
1475 grid1->addWidget(label,0,1);
1476 grid1->addMultiCellWidget(label2,2,2,0,1);
1477
1478 TQString labelstring = "KCalc "KCALCVERSION"\n"\
1479 "Bernd Johannes Wuebben\n"\
1480 "wuebben@math.cornell.edu\n"\
1481 "wuebben@kde.org\n"\
1482 "Copyright (C) 1996-98\n"\
1483 "\n\n";
1484
1485 TQString labelstring2 =
1486#ifdef HAVE_LONG_DOUBLE
1487 i18n( "Base type: long double\n");
1488#else
1489 i18n( "Due to broken glibc's everywhere, "\
1490 "I had to reduce KCalc's precision from 'long double' "\
1491 "to 'double'. "\
1492 "Owners of systems with a working libc "\
1493 "should recompile KCalc with 'long double' precision "\
1494 "enabled. See the README for details.");
1495#endif
1496
1497 label->setAlignment(AlignLeft|WordBreak|ExpandTabs);
1498 label->setText(labelstring);
1499
1500 label2->setAlignment(AlignLeft|WordBreak|ExpandTabs);
1501 label2->setText(labelstring2);
1502
1503 // HACK
1504 // TQPixmap pm( BarIcon( "kcalclogo" ) );
1505 TQPixmap pm;
1506 TQLabel *logo = new TQLabel(box);
1507 logo->setPixmap(pm);
1508 grid1->addWidget(logo,0,0);
1509 lay1->addWidget(box);
1510
1511
1512 DefStruct newdefstruct;
1513 newdefstruct.forecolor = kcalcdefaults.forecolor;
1514 newdefstruct.backcolor = kcalcdefaults.backcolor;
1515 newdefstruct.precision = kcalcdefaults.precision;
1516 newdefstruct.fixedprecision = kcalcdefaults.fixedprecision;
1517 newdefstruct.fixed = kcalcdefaults.fixed;
1518 newdefstruct.style = kcalcdefaults.style;
1519 newdefstruct.beep = kcalcdefaults.beep;
1520
1521 ConfigDlg *configdlg;
1522 configdlg = new ConfigDlg(tabdialog,"configdlg",&newdefstruct);
1523
1524 tabdialog->addTab(configdlg,i18n("Defaults"));
1525 tabdialog->addTab(about,i18n("About"));
1526
1527
1528 if(tabdialog->exec() == TQDialog::Accepted){
1529
1530
1531 kcalcdefaults.forecolor = newdefstruct.forecolor;
1532 kcalcdefaults.backcolor = newdefstruct.backcolor;
1533 kcalcdefaults.precision = newdefstruct.precision;
1534 kcalcdefaults.fixedprecision = newdefstruct.fixedprecision;
1535 kcalcdefaults.fixed = newdefstruct.fixed;
1536 kcalcdefaults.style = newdefstruct.style;
1537 kcalcdefaults.beep = newdefstruct.beep;
1538
1539 set_colors();
1540 set_precision();
1541 set_style();
1542 updateGeometry();
1543 resize(minimumSize());
1544 }
1545 delete configdlg;
1546}
1547
1548
1549void TQtCalculator::set_style(){
1550
1551 switch(kcalcdefaults.style){
1552 case 0:{
1553 pbhyp->setText( "Hyp" );
1554 pbSin->setText( "Sin" );
1555 pbCos->setText( "Cos" );
1556 pbTan->setText( "Tan" );
1557 pblog->setText( "Log" );
1558 pbln ->setText( "Ln" );
1559 break;
1560 }
1561 case 1:{
1562 pbhyp->setText( "N" );
1563 pbSin->setText( "Mea" );
1564 pbCos->setText( "Std" );
1565 pbTan->setText( "Med" );
1566 pblog->setText( "Dat" );
1567 pbln ->setText( "CSt" );
1568 break;
1569 }
1570 case 2:{
1571 pbhyp->setText( "N" );
1572 pbSin->setText( "Min" );
1573 pbCos->setText( "Max" );
1574 pbTan->setText( "Med" );
1575 pblog->setText( "Sum" );
1576 pbln ->setText( "Mul" );
1577 break;
1578 }
1579
1580 default:
1581 break;
1582 }
1583}
1584
1585void TQtCalculator::readSettings()
1586{
1587 TQColor tmpC(189, 255, 180);
1588 TQColor blackC(0,0,0);
1589
1590 TDEConfig *config = TDEGlobal::config();
1591 config->setGroup("CalcPlugin");
1592 kcalcdefaults.forecolor = config->readColorEntry("ForeColor", &blackC);
1593 kcalcdefaults.backcolor = config->readColorEntry("BackColor", &tmpC);
1594
1595#ifdef HAVE_LONG_DOUBLE
1596 kcalcdefaults.precision = config->readNumEntry("precision", (int)14);
1597#else
1598 kcalcdefaults.precision = config->readNumEntry("precision", (int)10);
1599#endif
1600 kcalcdefaults.fixedprecision = config->readNumEntry("fixedprecision", (int)2);
1601 kcalcdefaults.fixed = config->readBoolEntry("fixed", false);
1602
1603 kcalcdefaults.style = config->readNumEntry("style", (int)0);
1604 kcalcdefaults.beep = config->readBoolEntry("beep", true);
1605}
1606
1607void TQtCalculator::writeSettings()
1608{
1609 TDEConfig *config = TDEGlobal::config();
1610
1611 config->setGroup("CalcPlugin");
1612 config->writeEntry("ForeColor",kcalcdefaults.forecolor);
1613 config->writeEntry("BackColor",kcalcdefaults.backcolor);
1614
1615 config->writeEntry("precision", kcalcdefaults.precision);
1616 config->writeEntry("fixedprecision", kcalcdefaults.fixedprecision);
1617 config->writeEntry("fixed", kcalcdefaults.fixed);
1618
1619 config->writeEntry("style",(int)kcalcdefaults.style);
1620 config->writeEntry("beep", kcalcdefaults.beep);
1621
1622 config->sync();
1623}
1624
1625void TQtCalculator::display_selected(){
1626
1627 if(calc_display->Button() == LeftButton){
1628
1629 if(calc_display->isLit()){
1630
1631 TQClipboard *cb = TQApplication::clipboard();
1632 cb->setText(calc_display->text());
1633 selection_timer->start(100);
1634
1635 }
1636 else{
1637
1638 selection_timer->stop();
1639
1640 }
1641
1642 invertColors();
1643 }
1644 else{
1645
1646 TQClipboard *cb = TQApplication::clipboard();
1647
1648 CALCAMNT result;
1649 result = (CALCAMNT) cb->text().toDouble();
1650 // printf("%Lg\n",result);
1651 last_input = PASTE;
1652 DISPLAY_AMOUNT = result;
1653 UpdateDisplay();
1654 }
1655
1656}
1657
1658void TQtCalculator::selection_timed_out(){
1659
1660 // printf("selection timed out\n");
1661 selection_timer->stop();
1662 calc_display->setLit(false);
1663 invertColors();
1664
1665
1666}
1667
1668
1669void TQtCalculator::clear_status_label(){
1670
1671 statusERRORLabel->setText("");
1672 status_timer->stop();
1673}
1674
1675void TQtCalculator::setStatusLabel(const TQString& string){
1676
1677 statusERRORLabel->setText(string);
1678 status_timer->start(3000,true);
1679
1680}
1681
1682
1683void TQtCalculator::invertColors(){
1684
1685 TQColor tmpcolor;
1686
1687 if(calc_display->isLit()){
1688 tmpcolor = kcalcdefaults.backcolor;
1689 kcalcdefaults.backcolor = kcalcdefaults.forecolor;
1690 kcalcdefaults.forecolor = tmpcolor;
1691 set_colors();
1692 tmpcolor = kcalcdefaults.backcolor;
1693 kcalcdefaults.backcolor = kcalcdefaults.forecolor;
1694 kcalcdefaults.forecolor = tmpcolor;
1695 }
1696 else{
1697 set_colors();
1698 //printf("normal Colors\n");
1699 }
1700}
1701
1702void TQtCalculator::closeEvent( TQCloseEvent*e )
1703{
1704 writeSettings();
1705 e->accept();
1706}
1707
1708void TQtCalculator::set_colors(){
1709
1710
1711 TQPalette mypalette = (calc_display->palette()).copy();
1712
1713 TQColorGroup cgrp = mypalette.active();
1714 TQColorGroup ncgrp(kcalcdefaults.forecolor,
1715 cgrp.background(),
1716 cgrp.light(),
1717 cgrp.dark(),
1718 cgrp.mid(),
1719 kcalcdefaults.forecolor,
1720 kcalcdefaults.backcolor);
1721
1722 mypalette.setActive(ncgrp);
1723 mypalette.setDisabled(ncgrp);
1724 mypalette.setActive(ncgrp);
1725
1726 calc_display->setPalette(mypalette);
1727 calc_display->setBackgroundColor(kcalcdefaults.backcolor);
1728
1729}
1730
1731void TQtCalculator::set_precision(){
1732
1733 UpdateDisplay();
1734}
1735
1736void TQtCalculator::temp_stack_next(){
1737
1738 CALCAMNT *number;
1739
1740 if( temp_stack.current() == temp_stack.getLast()){
1741 KNotifyClient::beep();
1742 return;
1743 }
1744
1745 number = temp_stack.next();
1746
1747 if(number == NULL){
1748 KNotifyClient::beep();
1749 return;
1750 }
1751 else{
1752 // printf("Number: %Lg\n",*number);
1753 last_input = RECALL;
1754 DISPLAY_AMOUNT = *number;
1755 UpdateDisplay();
1756
1757 }
1758
1759
1760}
1761
1762void TQtCalculator::temp_stack_prev(){
1763
1764 CALCAMNT *number;
1765
1766 if( temp_stack.current() == temp_stack.getFirst()){
1767 KNotifyClient::beep();
1768 return;
1769 }
1770
1771 number = temp_stack.prev();
1772
1773 if(number == NULL){
1774 KNotifyClient::beep();
1775 return;
1776 }
1777 else{
1778 // printf("Number: %Lg\n",*number);
1779 last_input = RECALL;
1780 DISPLAY_AMOUNT = *number;
1781 UpdateDisplay();
1782
1783 }
1784
1785}
1786
1787#include "kcalc.moc"