28#include <knotifyclient.h>
30#include <tqobjectlist.h>
31#include <tqpushbutton.h>
32#include <tdeapplication.h>
33#include <tdeglobalsettings.h>
40extern last_input_type last_input;
41extern item_contents display_data;
42extern num_base current_base;
44TQPtrList<CALCAMNT> temp_stack;
46TQtCalculator :: TQtCalculator( Calculator *_corba, TQWidget *parent,
const char *name )
47 : TQDialog( parent, name )
53 selection_timer =
new TQTimer;
54 status_timer =
new TQTimer;
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()));
61 TQFont buttonfont( TDEGlobalSettings::generalFont() );
62 buttonfont.setStyleStrategy( TQFont::PreferAntialias );
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") );
78 connect( pb, TQ_SIGNAL(clicked()), TQ_SLOT(configclicked()) );
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 );
87 connect(calc_display,TQ_SIGNAL(clicked()),
this,TQ_SLOT(display_selected()));
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");
95 statusHYPLabel =
new TQLabel(
this,
"HYP" );
96 TQ_CHECK_PTR( statusHYPLabel );
97 statusHYPLabel->setFrameStyle( TQFrame::Panel | TQFrame::Sunken );
98 statusHYPLabel->setAlignment( AlignCenter );
100 statusERRORLabel =
new TQLabel(
this,
"ERROR" );
101 TQ_CHECK_PTR( statusERRORLabel );
102 statusERRORLabel->setFrameStyle( TQFrame::Panel | TQFrame::Sunken );
103 statusERRORLabel->setAlignment( AlignLeft|AlignVCenter );
107 TQAccel *accel =
new TQAccel(
this );
109 TQButtonGroup *angle_group =
new TQButtonGroup( 3,TQt::Horizontal,
this,
"AngleButtons" );
110 angle_group->setTitle(i18n(
"Angle") );
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()) );
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()) );
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()) );
128 connect( angle_group, TQ_SIGNAL(clicked(
int)), TQ_SLOT(angle_selected(
int)) );
138 TQButtonGroup *base_group =
new TQButtonGroup( 4,TQt::Horizontal,
this,
"BaseButtons" );
139 base_group->setTitle( i18n(
"Base") );
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()) );
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()) );
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()) );
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()) );
162 connect( base_group, TQ_SIGNAL(clicked(
int)), TQ_SLOT(base_selected(
int)) );
171 mSmallPage =
new TQWidget(
this);
172 mLargePage =
new TQWidget(
this);
174 pbhyp =
new TQPushButton(
"Hyp", mSmallPage,
"hypbutton" );
175 connect( pbhyp, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbhyptoggled(
bool)));
176 pbhyp->setToggleButton(
true);
178 pbinv =
new TQPushButton(
"Inv", mSmallPage,
"InverseButton" );
179 connect( pbinv, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbinvtoggled(
bool)));
180 pbinv->setToggleButton(
true);
182 pbA =
new TQPushButton(
"A",mSmallPage,
"Abutton" );
183 connect( pbA, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbAtoggled(
bool)));
184 pbA->setToggleButton(
true);
186 pbSin =
new TQPushButton(
"Sin",mSmallPage,
"Sinbutton" );
187 connect( pbSin, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbSintoggled(
bool)));
188 pbSin->setToggleButton(
true);
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);
195 pbB =
new TQPushButton(
"B", mSmallPage,
"Bbutton" );
196 connect( pbB, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbBtoggled(
bool)));
197 pbB->setToggleButton(
true);
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);
205 pbreci =
new TQPushButton(
"1/x",mSmallPage,
"recibutton" );
206 connect( pbreci, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbrecitoggled(
bool)));
207 pbreci->setToggleButton(
true);
209 pbC =
new TQPushButton(
"C", mSmallPage,
"Cbutton" );
210 connect( pbC, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbCtoggled(
bool)));
211 pbC->setToggleButton(
true);
213 pbTan =
new TQPushButton(
"Tan" ,mSmallPage,
"Tanbutton" );
214 connect( pbTan, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbTantoggled(
bool)));
215 pbTan->setToggleButton(
true);
217 pbfactorial =
new TQPushButton(
"x!",mSmallPage,
"factorialbutton" );
218 connect( pbfactorial, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbfactorialtoggled(
bool)));
219 pbfactorial->setToggleButton(
true);
221 pbD =
new TQPushButton(
"D",mSmallPage,
"Dbutton" );
222 connect( pbD, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbDtoggled(
bool)));
223 pbD->setToggleButton(
true);
225 pblog =
new TQPushButton(
"Log",mSmallPage,
"logbutton" );
226 connect( pblog, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pblogtoggled(
bool)));
227 pblog->setToggleButton(
true);
229 pbsquare =
new TQPushButton(
"x^2", mSmallPage,
"squarebutton" );
230 connect( pbsquare, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbsquaretoggled(
bool)));
231 pbsquare->setToggleButton(
true);
233 pbE =
new TQPushButton(
"E",mSmallPage,
"Ebutton" );
234 connect( pbE, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbEtoggled(
bool)));
235 pbE->setToggleButton(
true);
238 pbln =
new TQPushButton(
"Ln", mSmallPage,
"lnbutton" );
239 connect( pbln, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pblntoggled(
bool)));
240 pbln->setToggleButton(
true);
242 pbpower =
new TQPushButton(
"x^y",mSmallPage,
"powerbutton" );
243 connect( pbpower, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbpowertoggled(
bool)));
244 pbpower->setToggleButton(
true);
246 pbF =
new TQPushButton(
"F",mSmallPage,
"Fbutton" );
247 connect( pbF, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbFtoggled(
bool)));
248 pbF->setToggleButton(
true);
250 pbEE =
new TQPushButton(
"EE",mLargePage,
"EEbutton" );
251 pbEE->setToggleButton(
true);
252 connect( pbEE, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(EEtoggled(
bool)));
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);
259 pbMplusminus =
new TQPushButton(
"M+-",mLargePage,
"Mplusminusbutton" );
260 connect( pbMplusminus, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbMplusminustoggled(
bool)));
261 pbMplusminus->setToggleButton(
true);
263 pbMC =
new TQPushButton(
"MC",mLargePage,
"MCbutton" );
264 connect( pbMC, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbMCtoggled(
bool)));
265 pbMC->setToggleButton(
true);
267 pbClear =
new TQPushButton(
"C",mLargePage,
"Clearbutton" );
268 connect( pbClear, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbCleartoggled(
bool)));
269 pbClear->setToggleButton(
true);
271 pbAC =
new TQPushButton(
"AC", mLargePage,
"ACbutton" );
272 connect( pbAC, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbACtoggled(
bool)));
273 pbAC->setToggleButton(
true);
275 pb7 =
new TQPushButton(
"7",mLargePage,
"7button" );
276 connect( pb7, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pb7toggled(
bool)));
277 pb7->setToggleButton(
true);
279 pb8 =
new TQPushButton(
"8",mLargePage,
"8button" );
280 connect( pb8, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pb8toggled(
bool)));
281 pb8->setToggleButton(
true);
283 pb9 =
new TQPushButton(
"9",mLargePage,
"9button" );
284 connect( pb9, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pb9toggled(
bool)));
285 pb9->setToggleButton(
true);
287 pbparenopen =
new TQPushButton(
"(",mLargePage,
"parenopenbutton" );
288 connect( pbparenopen, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbparenopentoggled(
bool)));
289 pbparenopen->setToggleButton(
true);
291 pbparenclose =
new TQPushButton(
")",mLargePage,
"parenclosebutton" );
292 connect( pbparenclose, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbparenclosetoggled(
bool)));
293 pbparenclose->setToggleButton(
true);
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);
300 pb4 =
new TQPushButton(
"4",mLargePage,
"4button" );
301 connect( pb4, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pb4toggled(
bool)));
302 pb4->setToggleButton(
true);
304 pb5 =
new TQPushButton(
"5",mLargePage,
"5button" );
305 connect( pb5, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pb5toggled(
bool)));
306 pb5->setToggleButton(
true);
308 pb6 =
new TQPushButton(
"6",mLargePage,
"6button" );
309 connect( pb6, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pb6toggled(
bool)));
310 pb6->setToggleButton(
true);
312 pbX =
new TQPushButton(
"X",mLargePage,
"Multiplybutton" );
313 connect( pbX, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbXtoggled(
bool)));
314 pbX->setToggleButton(
true);
316 pbdivision =
new TQPushButton(
"/",mLargePage,
"divisionbutton" );
317 connect( pbdivision, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbdivisiontoggled(
bool)));
318 pbdivision->setToggleButton(
true);
320 pbor =
new TQPushButton(
"Or",mLargePage,
"orbutton" );
321 connect( pbor, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbortoggled(
bool)));
322 pbor->setToggleButton(
true);
324 pb1 =
new TQPushButton(
"1",mLargePage,
"1button" );
325 connect( pb1, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pb1toggled(
bool)));
326 pb1->setToggleButton(
true);
328 pb2 =
new TQPushButton(
"2",mLargePage,
"2button" );
330 connect( pb2, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pb2toggled(
bool)));
331 pb2->setToggleButton(
true);
333 pb3 =
new TQPushButton(
"3",mLargePage,
"3button" );
334 connect( pb3, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pb3toggled(
bool)));
335 pb3->setToggleButton(
true);
337 pbplus =
new TQPushButton(
"+",mLargePage,
"plusbutton" );
338 connect( pbplus, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbplustoggled(
bool)));
339 pbplus->setToggleButton(
true);
342 pbminus =
new TQPushButton(
"-",mLargePage,
"minusbutton" );
343 connect( pbminus, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbminustoggled(
bool)));
344 pbminus->setToggleButton(
true);
346 pbshift =
new TQPushButton(
"Lsh",mLargePage,
"shiftbutton" );
347 connect( pbshift, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbshifttoggled(
bool)));
348 pbshift->setToggleButton(
true);
350 pbperiod =
new TQPushButton(
".",mLargePage,
"periodbutton" );
351 connect( pbperiod, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbperiodtoggled(
bool)));
352 pbperiod->setToggleButton(
true);
354 pb0 =
new TQPushButton(
"0",mLargePage,
"0button" );
355 connect( pb0, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pb0toggled(
bool)));
356 pb0->setToggleButton(
true);
358 pbequal =
new TQPushButton(
"=",mLargePage,
"equalbutton" );
359 connect( pbequal, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbequaltoggled(
bool)));
360 pbequal->setToggleButton(
true);
362 pbpercent =
new TQPushButton(
"%",mLargePage,
"percentbutton" );
363 connect( pbpercent, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbpercenttoggled(
bool)));
364 pbpercent->setToggleButton(
true);
366 pbnegate =
new TQPushButton(
"Cmp",mLargePage,
"OneComplementbutton" );
367 connect( pbnegate, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbnegatetoggled(
bool)));
368 pbnegate->setToggleButton(
true);
370 pbmod =
new TQPushButton(
"Mod",mLargePage,
"modbutton" );
371 connect( pbmod, TQ_SIGNAL(toggled(
bool)), TQ_SLOT(pbmodtoggled(
bool)));
372 pbmod->setToggleButton(
true);
374 TQGridLayout *smallBtnLayout =
new TQGridLayout(mSmallPage, 6, 3, 0,
376 TQGridLayout *largeBtnLayout =
new TQGridLayout(mLargePage, 5, 6, 0,
379 TQHBoxLayout *topLayout =
new TQHBoxLayout();
380 TQHBoxLayout *radioLayout =
new TQHBoxLayout();
381 TQHBoxLayout *btnLayout =
new TQHBoxLayout();
382 TQHBoxLayout *statusLayout =
new TQHBoxLayout();
385 TQVBoxLayout *mainLayout =
new TQVBoxLayout(
this, mInternalSpacing,
388 mainLayout->addLayout(topLayout );
389 mainLayout->addLayout(radioLayout, 1);
390 mainLayout->addLayout(btnLayout);
391 mainLayout->addLayout(statusLayout);
394 btnLayout->addWidget(mSmallPage,0,AlignTop);
395 btnLayout->addSpacing(mInternalSpacing);
396 btnLayout->addWidget(mLargePage,0,AlignTop);
399 smallBtnLayout->addWidget(pbhyp, 0, 0);
400 smallBtnLayout->addWidget(pbinv, 0, 1);
401 smallBtnLayout->addWidget(pbA, 0, 2);
403 smallBtnLayout->addWidget(pbSin, 1, 0);
404 smallBtnLayout->addWidget(pbplusminus, 1, 1);
405 smallBtnLayout->addWidget(pbB, 1, 2);
407 smallBtnLayout->addWidget(pbCos, 2, 0);
408 smallBtnLayout->addWidget(pbreci, 2, 1);
409 smallBtnLayout->addWidget(pbC, 2, 2);
411 smallBtnLayout->addWidget(pbTan, 3, 0);
412 smallBtnLayout->addWidget(pbfactorial, 3, 1);
413 smallBtnLayout->addWidget(pbD, 3, 2);
415 smallBtnLayout->addWidget(pblog, 4, 0);
416 smallBtnLayout->addWidget(pbsquare, 4, 1);
417 smallBtnLayout->addWidget(pbE, 4, 2);
419 smallBtnLayout->addWidget(pbln, 5, 0);
420 smallBtnLayout->addWidget(pbpower, 5, 1);
421 smallBtnLayout->addWidget(pbF, 5, 2);
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);
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);
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);
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);
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);
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);
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);
476 radioLayout->addWidget(base_group);
477 radioLayout->addWidget(angle_group);
480 statusLayout->addWidget(statusINVLabel);
481 statusLayout->addWidget(statusHYPLabel);
482 statusLayout->addWidget(statusERRORLabel, 10);
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);
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);
508 mHexButtonList.append(pbA);
509 mHexButtonList.append(pbB);
510 mHexButtonList.append(pbC);
511 mHexButtonList.append(pbD);
512 mHexButtonList.append(pbE);
513 mHexButtonList.append(pbF);
515 mMemButtonList.append(pbEE);
516 mMemButtonList.append(pbMR);
517 mMemButtonList.append(pbMplusminus);
518 mMemButtonList.append(pbMC);
519 mMemButtonList.append(pbClear);
520 mMemButtonList.append(pbAC);
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);
541 setFixedHeight(minimumHeight());
542 InitializeCalculator();
545TQtCalculator::~TQtCalculator()
547 delete selection_timer;
552void TQtCalculator::set_display_font()
554 calc_display->setFont(kcalcdefaults.font);
557void TQtCalculator::updateGeometry()
566 calc_display->setMinimumWidth(calc_display->fontMetrics().maxWidth() * 15);
578 s.setWidth(mSmallPage->fontMetrics().width(
"MMM"));
579 s.setHeight(mSmallPage->fontMetrics().lineSpacing());
581 l = (TQObjectList*)mSmallPage->children();
583 for(uint i=0; i < l->count(); i++)
585 TQObject *o = l->at(i);
586 if( o->isWidgetType() )
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);
596 l = (TQObjectList*)mLargePage->children();
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);
605 for(uint i = 0; i < l->count(); i++)
607 TQObject *o = l->at(i);
608 if(o->isWidgetType())
610 ((TQWidget*)o)->setFixedSize(s);
611 ((TQWidget*)o)->installEventFilter(
this);
612 ((TQWidget*)o)->setAcceptDrops(
true);
619 s.setWidth( statusINVLabel->fontMetrics().width(
"NORM") +
620 statusINVLabel->frameWidth() * 2 + 10);
621 statusINVLabel->setMinimumWidth(s.width());
622 statusHYPLabel->setMinimumWidth(s.width());
627void TQtCalculator::exit()
632void TQtCalculator::Hex_Selected()
634 basebutton[0]->setChecked(
true);
635 basebutton[1]->setChecked(
false);
636 basebutton[2]->setChecked(
false);
637 basebutton[3]->setChecked(
false);
642void TQtCalculator::Dec_Selected()
644 basebutton[0]->setChecked(
false);
645 basebutton[1]->setChecked(
true);
646 basebutton[2]->setChecked(
false);
647 basebutton[3]->setChecked(
false);
652void TQtCalculator::Oct_Selected()
654 basebutton[0]->setChecked(
false);
655 basebutton[1]->setChecked(
false);
656 basebutton[2]->setChecked(
true);
657 basebutton[3]->setChecked(
false);
663void TQtCalculator::Bin_Selected()
665 basebutton[0]->setChecked(
false);
666 basebutton[1]->setChecked(
false);
667 basebutton[2]->setChecked(
false);
668 basebutton[3]->setChecked(
true);
672void TQtCalculator::Deg_Selected()
674 anglebutton[0]->setChecked(
true);
675 anglebutton[1]->setChecked(
false);
676 anglebutton[2]->setChecked(
false);
681void TQtCalculator::Rad_Selected()
683 anglebutton[0]->setChecked(
false);
684 anglebutton[1]->setChecked(
true);
685 anglebutton[2]->setChecked(
false);
691void TQtCalculator::Gra_Selected()
693 anglebutton[0]->setChecked(
false);
694 anglebutton[1]->setChecked(
false);
695 anglebutton[2]->setChecked(
true);
700void TQtCalculator::helpclicked(){
703void TQtCalculator::keyPressEvent( TQKeyEvent *e ){
714 if(kcalcdefaults.style == 0)
715 kcalcdefaults.style = 1;
716 else if(kcalcdefaults.style == 1)
717 kcalcdefaults.style = 2;
719 kcalcdefaults.style = 0;
735 pbClear->setOn(
true);
753 if (current_base == NB_HEX)
760 pbClear->setOn(
true);
772 pbplusminus->setOn(
true);
792 pbparenopen->setOn(
true);
796 pbparenclose->setOn(
true);
804 if (current_base == NB_HEX)
827 pbdivision->setOn(
true);
839 pbfactorial->setOn(
true);
843 if(kcalcdefaults.style == 0)
866 pbminus->setOn(
true);
870 pbshift->setOn(
true);
880 case Key_AsciiCircum:
882 pbpower->setOn(
true);
890 pbperiod->setOn(
true);
894 pbperiod->setOn(
true);
902 pbequal->setOn(
true);
906 pbequal->setOn(
true);
910 pbequal->setOn(
true);
914 pbpercent->setOn(
true);
918 pbnegate->setOn(
true);
924 case Key_BracketLeft:
926 pbsquare->setOn(
true);
939void TQtCalculator::keyReleaseEvent( TQKeyEvent *e ){
948 pbClear->setOn(
false);
965 if (current_base == NB_HEX)
972 pbClear->setOn(
false);
984 pbplusminus->setOn(
false);
1003 key_pressed =
false;
1004 pbparenopen->setOn(
false);
1006 case Key_ParenRight:
1007 key_pressed =
false;
1008 pbparenclose->setOn(
false);
1011 key_pressed =
false;
1012 pband->setOn(
false);
1015 key_pressed =
false;
1016 if (current_base == NB_HEX)
1019 pbCos->setOn(
false);
1022 key_pressed =
false;
1026 key_pressed =
false;
1030 key_pressed =
false;
1034 key_pressed =
false;
1038 key_pressed =
false;
1039 pbdivision->setOn(
false);
1042 key_pressed =
false;
1046 key_pressed =
false;
1047 pbTan->setOn(
false);
1050 key_pressed =
false;
1051 pbfactorial->setOn(
false);
1054 key_pressed =
false;
1055 if(kcalcdefaults.style == 0)
1058 pblog->setOn(
false);
1061 key_pressed =
false;
1065 key_pressed =
false;
1069 key_pressed =
false;
1073 key_pressed =
false;
1074 pbplus->setOn(
false);
1077 key_pressed =
false;
1078 pbminus->setOn(
false);
1081 key_pressed =
false;
1082 pbshift->setOn(
false);
1085 key_pressed =
false;
1089 key_pressed =
false;
1090 pblog->setOn(
false);
1092 case Key_AsciiCircum:
1093 key_pressed =
false;
1094 pbpower->setOn(
false);
1097 key_pressed =
false;
1101 key_pressed =
false;
1102 pbperiod->setOn(
false);
1105 key_pressed =
false;
1106 pbperiod->setOn(
false);
1109 key_pressed =
false;
1113 key_pressed =
false;
1114 pbequal->setOn(
false);
1117 key_pressed =
false;
1118 pbequal->setOn(
false);
1121 key_pressed =
false;
1122 pbequal->setOn(
false);
1125 key_pressed =
false;
1126 pbpercent->setOn(
false);
1128 case Key_AsciiTilde:
1129 key_pressed =
false;
1130 pbnegate->setOn(
false);
1133 key_pressed =
false;
1134 pbmod->setOn(
false);
1136 case Key_BracketLeft:
1137 key_pressed =
false;
1138 pbsquare->setOn(
false);
1141 key_pressed =
false;
1145 key_pressed =
false;
1146 pbreci->setOn(
false);
1153void TQtCalculator::clear_buttons(){
1157void TQtCalculator::EEtoggled(
bool myboolean){
1161 if(pbEE->isOn() && (!key_pressed))
1165void TQtCalculator::pbinvtoggled(
bool myboolean){
1168 if(pbinv->isOn() && (!key_pressed))
1169 pbinv->setOn(
false);
1172void TQtCalculator::pbhyptoggled(
bool myboolean){
1175 if(pbhyp->isOn() && (!key_pressed))
1176 pbhyp->setOn(
false);
1178void TQtCalculator::pbMRtoggled(
bool myboolean){
1181 if(pbMR->isOn() && (!key_pressed))
1185void TQtCalculator::pbAtoggled(
bool myboolean){
1188 if(pbA->isOn() && (!key_pressed))
1192void TQtCalculator::pbSintoggled(
bool myboolean){
1195 if(pbSin->isOn() && (!key_pressed))
1196 pbSin->setOn(
false);
1198void TQtCalculator::pbplusminustoggled(
bool myboolean){
1201 if(pbplusminus->isOn() && (!key_pressed))
1202 pbplusminus->setOn(
false);
1204void TQtCalculator::pbMplusminustoggled(
bool myboolean){
1207 if(pbMplusminus->isOn() && (!key_pressed))
1208 pbMplusminus->setOn(
false);
1210void TQtCalculator::pbBtoggled(
bool myboolean){
1213 if(pbB->isOn() && (!key_pressed))
1216void TQtCalculator::pbCostoggled(
bool myboolean){
1219 if(pbCos->isOn() && (!key_pressed))
1220 pbCos->setOn(
false);
1222void TQtCalculator::pbrecitoggled(
bool myboolean){
1225 if(pbreci->isOn() && (!key_pressed))
1226 pbreci->setOn(
false);
1228void TQtCalculator::pbCtoggled(
bool myboolean){
1231 if(pbC->isOn() && (!key_pressed))
1234void TQtCalculator::pbTantoggled(
bool myboolean){
1237 if(pbTan->isOn() && (!key_pressed))
1238 pbTan->setOn(
false);
1240void TQtCalculator::pbfactorialtoggled(
bool myboolean){
1243 if(pbfactorial->isOn() && (!key_pressed))
1244 pbfactorial->setOn(
false);
1246void TQtCalculator::pbDtoggled(
bool myboolean){
1249 if(pbD->isOn() && (!key_pressed))
1252void TQtCalculator::pblogtoggled(
bool myboolean){
1255 if(pblog->isOn() && (!key_pressed))
1256 pblog->setOn(
false);
1258void TQtCalculator::pbsquaretoggled(
bool myboolean){
1261 if(pbsquare->isOn() && (!key_pressed))
1262 pbsquare->setOn(
false);
1264void TQtCalculator::pbEtoggled(
bool myboolean){
1267 if(pbE->isOn() && (!key_pressed))
1270void TQtCalculator::pblntoggled(
bool myboolean){
1273 if(pbln->isOn() && (!key_pressed))
1276void TQtCalculator::pbpowertoggled(
bool myboolean){
1279 if(pbpower->isOn() && (!key_pressed))
1280 pbpower->setOn(
false);
1282void TQtCalculator::pbFtoggled(
bool myboolean){
1285 if(pbF->isOn() && (!key_pressed))
1288void TQtCalculator::pbMCtoggled(
bool myboolean){
1291 if(pbMC->isOn() && (!key_pressed))
1294void TQtCalculator::pbCleartoggled(
bool myboolean){
1297 if(pbClear->isOn() && (!key_pressed))
1298 pbClear->setOn(
false);
1300void TQtCalculator::pbACtoggled(
bool myboolean){
1303 if(pbAC->isOn() && (!key_pressed))
1306void TQtCalculator::pb7toggled(
bool myboolean){
1309 if(pb7->isOn() && (!key_pressed))
1312void TQtCalculator::pb8toggled(
bool myboolean){
1315 if(pb8->isOn() && (!key_pressed))
1318void TQtCalculator::pb9toggled(
bool myboolean){
1321 if(pb9->isOn() && (!key_pressed))
1324void TQtCalculator::pbparenopentoggled(
bool myboolean){
1327 if(pbparenopen->isOn() && (!key_pressed))
1328 pbparenopen->setOn(
false);
1330void TQtCalculator::pbparenclosetoggled(
bool myboolean){
1333 if(pbparenclose->isOn() && (!key_pressed))
1334 pbparenclose->setOn(
false);
1336void TQtCalculator::pbandtoggled(
bool myboolean){
1339 if(pband->isOn() && (!key_pressed))
1340 pband->setOn(
false);
1342void TQtCalculator::pb4toggled(
bool myboolean){
1345 if(pb4->isOn() && (!key_pressed))
1348void TQtCalculator::pb5toggled(
bool myboolean){
1351 if(pb5->isOn() && (!key_pressed))
1354void TQtCalculator::pb6toggled(
bool myboolean){
1357 if(pb6->isOn() && (!key_pressed))
1360void TQtCalculator::pbXtoggled(
bool myboolean){
1363 if(pbX->isOn() && (!key_pressed))
1366void TQtCalculator::pbdivisiontoggled(
bool myboolean){
1369 if(pbdivision->isOn() && (!key_pressed))
1370 pbdivision->setOn(
false);
1372void TQtCalculator::pbortoggled(
bool myboolean){
1375 if(pbor->isOn() && (!key_pressed))
1378void TQtCalculator::pb1toggled(
bool myboolean){
1381 if(pb1->isOn() && (!key_pressed))
1384void TQtCalculator::pb2toggled(
bool myboolean){
1387 if(pb2->isOn() && (!key_pressed))
1390void TQtCalculator::pb3toggled(
bool myboolean){
1393 if(pb3->isOn() && (!key_pressed))
1396void TQtCalculator::pbplustoggled(
bool myboolean){
1399 if(pbplus->isOn() && (!key_pressed))
1400 pbplus->setOn(
false);
1402void TQtCalculator::pbminustoggled(
bool myboolean){
1405 if(pbminus->isOn() && (!key_pressed))
1406 pbminus->setOn(
false);
1408void TQtCalculator::pbshifttoggled(
bool myboolean){
1411 if(pbshift->isOn() && (!key_pressed))
1412 pbshift->setOn(
false);
1414void TQtCalculator::pbperiodtoggled(
bool myboolean){
1417 if(pbperiod->isOn() && (!key_pressed))
1418 pbperiod->setOn(
false);
1420void TQtCalculator::pb0toggled(
bool myboolean){
1423 if(pb0->isOn() && (!key_pressed))
1426void TQtCalculator::pbequaltoggled(
bool myboolean){
1429 if(pbequal->isOn() && (!key_pressed))
1430 pbequal->setOn(
false);
1432void TQtCalculator::pbpercenttoggled(
bool myboolean){
1435 if(pbpercent->isOn() && (!key_pressed))
1436 pbpercent->setOn(
false);
1438void TQtCalculator::pbnegatetoggled(
bool myboolean){
1441 if(pbnegate->isOn() && (!key_pressed))
1442 pbnegate->setOn(
false);
1444void TQtCalculator::pbmodtoggled(
bool myboolean) {
1447 if(pbmod->isOn() && (!key_pressed))
1448 pbmod->setOn(
false);
1451void TQtCalculator::configclicked(){
1454 TQTabDialog * tabdialog;
1455 tabdialog =
new TQTabDialog(0,
"tabdialog",
true);
1457 tabdialog->setCaption( i18n(
"KCalc Configuration") );
1458 tabdialog->resize( 360, 390 );
1459 tabdialog->setCancelButton( i18n(
"&Cancel") );
1460 tabdialog->setOKButton(i18n(
"&OK"));
1462 TQWidget *about =
new TQWidget(tabdialog,
"about");
1463 TQVBoxLayout *lay1 =
new TQVBoxLayout( about );
1464 lay1->setMargin( KDialog::marginHint() );
1465 lay1->setSpacing( KDialog::spacingHint() );
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");
1474 box->setTitle(i18n(
"About"));
1475 grid1->addWidget(label,0,1);
1476 grid1->addMultiCellWidget(label2,2,2,0,1);
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"\
1485 TQString labelstring2 =
1486#ifdef HAVE_LONG_DOUBLE
1487 i18n(
"Base type: long double\n");
1489 i18n(
"Due to broken glibc's everywhere, "\
1490 "I had to reduce KCalc's precision from 'long double' "\
1492 "Owners of systems with a working libc "\
1493 "should recompile KCalc with 'long double' precision "\
1494 "enabled. See the README for details.");
1497 label->setAlignment(AlignLeft|WordBreak|ExpandTabs);
1498 label->setText(labelstring);
1500 label2->setAlignment(AlignLeft|WordBreak|ExpandTabs);
1501 label2->setText(labelstring2);
1506 TQLabel *logo =
new TQLabel(box);
1507 logo->setPixmap(pm);
1508 grid1->addWidget(logo,0,0);
1509 lay1->addWidget(box);
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;
1521 ConfigDlg *configdlg;
1522 configdlg =
new ConfigDlg(tabdialog,
"configdlg",&newdefstruct);
1524 tabdialog->addTab(configdlg,i18n(
"Defaults"));
1525 tabdialog->addTab(about,i18n(
"About"));
1528 if(tabdialog->exec() == TQDialog::Accepted){
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;
1543 resize(minimumSize());
1549void TQtCalculator::set_style(){
1551 switch(kcalcdefaults.style){
1553 pbhyp->setText(
"Hyp" );
1554 pbSin->setText(
"Sin" );
1555 pbCos->setText(
"Cos" );
1556 pbTan->setText(
"Tan" );
1557 pblog->setText(
"Log" );
1558 pbln ->setText(
"Ln" );
1562 pbhyp->setText(
"N" );
1563 pbSin->setText(
"Mea" );
1564 pbCos->setText(
"Std" );
1565 pbTan->setText(
"Med" );
1566 pblog->setText(
"Dat" );
1567 pbln ->setText(
"CSt" );
1571 pbhyp->setText(
"N" );
1572 pbSin->setText(
"Min" );
1573 pbCos->setText(
"Max" );
1574 pbTan->setText(
"Med" );
1575 pblog->setText(
"Sum" );
1576 pbln ->setText(
"Mul" );
1585void TQtCalculator::readSettings()
1587 TQColor tmpC(189, 255, 180);
1588 TQColor blackC(0,0,0);
1590 TDEConfig *config = TDEGlobal::config();
1591 config->setGroup(
"CalcPlugin");
1592 kcalcdefaults.forecolor = config->readColorEntry(
"ForeColor", &blackC);
1593 kcalcdefaults.backcolor = config->readColorEntry(
"BackColor", &tmpC);
1595#ifdef HAVE_LONG_DOUBLE
1596 kcalcdefaults.precision = config->readNumEntry(
"precision", (
int)14);
1598 kcalcdefaults.precision = config->readNumEntry(
"precision", (
int)10);
1600 kcalcdefaults.fixedprecision = config->readNumEntry(
"fixedprecision", (
int)2);
1601 kcalcdefaults.fixed = config->readBoolEntry(
"fixed",
false);
1603 kcalcdefaults.style = config->readNumEntry(
"style", (
int)0);
1604 kcalcdefaults.beep = config->readBoolEntry(
"beep",
true);
1607void TQtCalculator::writeSettings()
1609 TDEConfig *config = TDEGlobal::config();
1611 config->setGroup(
"CalcPlugin");
1612 config->writeEntry(
"ForeColor",kcalcdefaults.forecolor);
1613 config->writeEntry(
"BackColor",kcalcdefaults.backcolor);
1615 config->writeEntry(
"precision", kcalcdefaults.precision);
1616 config->writeEntry(
"fixedprecision", kcalcdefaults.fixedprecision);
1617 config->writeEntry(
"fixed", kcalcdefaults.fixed);
1619 config->writeEntry(
"style",(
int)kcalcdefaults.style);
1620 config->writeEntry(
"beep", kcalcdefaults.beep);
1625void TQtCalculator::display_selected(){
1627 if(calc_display->Button() == LeftButton){
1629 if(calc_display->isLit()){
1631 TQClipboard *cb = TQApplication::clipboard();
1632 cb->setText(calc_display->text());
1633 selection_timer->start(100);
1638 selection_timer->stop();
1646 TQClipboard *cb = TQApplication::clipboard();
1649 result = (CALCAMNT) cb->text().toDouble();
1652 DISPLAY_AMOUNT = result;
1658void TQtCalculator::selection_timed_out(){
1661 selection_timer->stop();
1662 calc_display->setLit(
false);
1669void TQtCalculator::clear_status_label(){
1671 statusERRORLabel->setText(
"");
1672 status_timer->stop();
1675void TQtCalculator::setStatusLabel(
const TQString&
string){
1677 statusERRORLabel->setText(
string);
1678 status_timer->start(3000,
true);
1683void TQtCalculator::invertColors(){
1687 if(calc_display->isLit()){
1688 tmpcolor = kcalcdefaults.backcolor;
1689 kcalcdefaults.backcolor = kcalcdefaults.forecolor;
1690 kcalcdefaults.forecolor = tmpcolor;
1692 tmpcolor = kcalcdefaults.backcolor;
1693 kcalcdefaults.backcolor = kcalcdefaults.forecolor;
1694 kcalcdefaults.forecolor = tmpcolor;
1702void TQtCalculator::closeEvent( TQCloseEvent*e )
1708void TQtCalculator::set_colors(){
1711 TQPalette mypalette = (calc_display->palette()).copy();
1713 TQColorGroup cgrp = mypalette.active();
1714 TQColorGroup ncgrp(kcalcdefaults.forecolor,
1719 kcalcdefaults.forecolor,
1720 kcalcdefaults.backcolor);
1722 mypalette.setActive(ncgrp);
1723 mypalette.setDisabled(ncgrp);
1724 mypalette.setActive(ncgrp);
1726 calc_display->setPalette(mypalette);
1727 calc_display->setBackgroundColor(kcalcdefaults.backcolor);
1731void TQtCalculator::set_precision(){
1736void TQtCalculator::temp_stack_next(){
1740 if( temp_stack.current() == temp_stack.getLast()){
1741 KNotifyClient::beep();
1745 number = temp_stack.next();
1748 KNotifyClient::beep();
1753 last_input = RECALL;
1754 DISPLAY_AMOUNT = *number;
1762void TQtCalculator::temp_stack_prev(){
1766 if( temp_stack.current() == temp_stack.getFirst()){
1767 KNotifyClient::beep();
1771 number = temp_stack.prev();
1774 KNotifyClient::beep();
1779 last_input = RECALL;
1780 DISPLAY_AMOUNT = *number;