/* $Id: kcalc.cpp 466447 2005-10-02 17:54:10Z zander $ kCalculator, a simple scientific calculator for KDE Copyright (C) 1996 Bernd Johannes Wuebben wuebben@math.cornell.edu This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include "configdlg.h" #include "version.h" #include #include #include #include #include #include #include #include #include #include #include #include "kcalc.h" extern last_input_type last_input; extern item_contents display_data; extern num_base current_base; TQPtrList temp_stack; TQtCalculator :: TQtCalculator( Calculator *_corba, TQWidget *tqparent, const char *name ) : TQDialog( tqparent, name ) { corba = _corba; mInternalSpacing=4; key_pressed = false; selection_timer = new TQTimer; status_timer = new TQTimer; connect(status_timer,TQT_SIGNAL(timeout()),this,TQT_SLOT(clear_status_label())); connect(selection_timer,TQT_SIGNAL(timeout()),this,TQT_SLOT(selection_timed_out())); readSettings(); TQFont buttonfont( KGlobalSettings::generalFont() ); buttonfont.setStyleStrategy( TQFont::PreferAntialias ); // Set the window caption/title // connect(kapp,TQT_SIGNAL(kdisplayPaletteChanged()),this,TQT_SLOT(set_colors())); // setCaption( kapp->caption() ); // create help button TQPushButton *pb; pb = new TQPushButton( this, "helpbutton" ); pb->setText( "kCalc" ); pb->setFont( TQFont("times",12,TQFont::Bold,FALSE) ); TQToolTip::add( pb, i18n("KCalc Setup/Help") ); connect( pb, TQT_SIGNAL(clicked()), TQT_SLOT(configclicked()) ); // Create the display calc_display = new DLabel( this, "display" ); calc_display->setFrameStyle( TQFrame::WinPanel | TQFrame::Sunken ); calc_display->tqsetAlignment( AlignRight|AlignVCenter ); calc_display->setFocus(); calc_display->setFocusPolicy( TQ_StrongFocus ); connect(calc_display,TQT_SIGNAL(clicked()),this,TQT_SLOT(display_selected())); statusINVLabel = new TQLabel( this, "INV" ); Q_CHECK_PTR( statusINVLabel ); statusINVLabel->setFrameStyle( TQFrame::Panel | TQFrame::Sunken ); statusINVLabel->tqsetAlignment( AlignCenter ); statusINVLabel->setText("NORM"); statusHYPLabel = new TQLabel( this, "HYP" ); Q_CHECK_PTR( statusHYPLabel ); statusHYPLabel->setFrameStyle( TQFrame::Panel | TQFrame::Sunken ); statusHYPLabel->tqsetAlignment( AlignCenter ); statusERRORLabel = new TQLabel( this, "ERROR" ); Q_CHECK_PTR( statusERRORLabel ); statusERRORLabel->setFrameStyle( TQFrame::Panel | TQFrame::Sunken ); statusERRORLabel->tqsetAlignment( AlignLeft|AlignVCenter ); // create angle button group TQAccel *accel = new TQAccel( this ); TQButtonGroup *angle_group = new TQButtonGroup( 3,Qt::Horizontal,this, "AngleButtons" ); angle_group->setTitle(i18n( "Angle") ); anglebutton[0] = new TQRadioButton( angle_group ); anglebutton[0]->setText( "&Deg" ) ; anglebutton[0]->setChecked( TRUE); accel->connectItem( accel->insertItem(Key_D + ALT), this , TQT_SLOT(Deg_Selected()) ); anglebutton[1] = new TQRadioButton( angle_group ); anglebutton[1]->setText( "&Rad" ); accel->connectItem( accel->insertItem(Key_R + ALT), this , TQT_SLOT(Rad_Selected()) ); anglebutton[2] = new TQRadioButton( angle_group ); anglebutton[2]->setText( "&Gra" ); accel->connectItem( accel->insertItem(Key_G + ALT), this , TQT_SLOT(Gra_Selected()) ); connect( angle_group, TQT_SIGNAL(clicked(int)), TQT_SLOT(angle_selected(int)) ); ////////////////////////////////////////////////////////////////////// // // Create Number Base Button Group // TQButtonGroup *base_group = new TQButtonGroup( 4,Qt::Horizontal,this, "BaseButtons" ); base_group->setTitle( i18n("Base") ); basebutton[0] = new TQRadioButton( base_group ); basebutton[0]->setText( "&Hex" ); accel->connectItem( accel->insertItem(Key_H + ALT), this , TQT_SLOT(Hex_Selected()) ); basebutton[1] = new TQRadioButton( base_group ); basebutton[1]->setText( "D&ec" ); basebutton[1]->setChecked(TRUE); accel->connectItem( accel->insertItem(Key_E + ALT), this , TQT_SLOT(Dec_Selected()) ); basebutton[2] = new TQRadioButton( base_group ); basebutton[2]->setText( "&Oct" ); accel->connectItem( accel->insertItem(Key_O + ALT), this , TQT_SLOT(Oct_Selected()) ); basebutton[3] = new TQRadioButton( base_group); basebutton[3]->setText( "&Bin" ); accel->connectItem( accel->insertItem(Key_B + ALT), this , TQT_SLOT(Bin_Selected()) ); connect( base_group, TQT_SIGNAL(clicked(int)), TQT_SLOT(base_selected(int)) ); //////////////////////////////////////////////////////////////////////// // // Create Calculator Buttons // // First the widgets that are the tqparents of the buttons mSmallPage = new TQWidget(this); mLargePage = new TQWidget(this); pbhyp = new TQPushButton("Hyp", mSmallPage, "hypbutton" ); connect( pbhyp, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbhyptoggled(bool))); pbhyp->setToggleButton(TRUE); pbinv = new TQPushButton( "Inv", mSmallPage, "InverseButton" ); connect( pbinv, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbinvtoggled(bool))); pbinv->setToggleButton(TRUE); pbA = new TQPushButton("A",mSmallPage, "Abutton" ); connect( pbA, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbAtoggled(bool))); pbA->setToggleButton(TRUE); pbSin = new TQPushButton("Sin",mSmallPage, "Sinbutton" ); connect( pbSin, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbSintoggled(bool))); pbSin->setToggleButton(TRUE); pbplusminus = new TQPushButton( "+/-", mSmallPage, "plusminusbutton" ); connect( pbplusminus, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbplusminustoggled(bool))); pbplusminus->setToggleButton(TRUE); pbplusminus->setFont(buttonfont); pbB = new TQPushButton("B", mSmallPage, "Bbutton" ); connect( pbB, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbBtoggled(bool))); pbB->setToggleButton(TRUE); pbCos = new TQPushButton("Cos",mSmallPage, "Cosbutton" ); pbCos->setText( "Cos" ); connect( pbCos, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbCostoggled(bool))); pbCos->setToggleButton(TRUE); pbreci = new TQPushButton("1/x",mSmallPage, "recibutton" ); connect( pbreci, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbrecitoggled(bool))); pbreci->setToggleButton(TRUE); pbC = new TQPushButton( "C", mSmallPage, "Cbutton" ); connect( pbC, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbCtoggled(bool))); pbC->setToggleButton(TRUE); pbTan = new TQPushButton("Tan" ,mSmallPage, "Tanbutton" ); connect( pbTan, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbTantoggled(bool))); pbTan->setToggleButton(TRUE); pbfactorial = new TQPushButton("x!",mSmallPage, "factorialbutton" ); connect( pbfactorial, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbfactorialtoggled(bool))); pbfactorial->setToggleButton(TRUE); pbD = new TQPushButton("D",mSmallPage, "Dbutton" ); connect( pbD, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbDtoggled(bool))); pbD->setToggleButton(TRUE); pblog = new TQPushButton("Log",mSmallPage, "logbutton" ); connect( pblog, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pblogtoggled(bool))); pblog->setToggleButton(TRUE); pbsquare = new TQPushButton( "x^2", mSmallPage, "squarebutton" ); connect( pbsquare, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbsquaretoggled(bool))); pbsquare->setToggleButton(TRUE); pbE = new TQPushButton("E",mSmallPage, "Ebutton" ); connect( pbE, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbEtoggled(bool))); pbE->setToggleButton(TRUE); pbln = new TQPushButton( "Ln", mSmallPage, "lnbutton" ); connect( pbln, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pblntoggled(bool))); pbln->setToggleButton(TRUE); pbpower = new TQPushButton("x^y",mSmallPage, "powerbutton" ); connect( pbpower, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbpowertoggled(bool))); pbpower->setToggleButton(TRUE); pbF = new TQPushButton("F",mSmallPage, "Fbutton" ); connect( pbF, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbFtoggled(bool))); pbF->setToggleButton(TRUE); pbEE = new TQPushButton("EE",mLargePage, "EEbutton" ); pbEE->setToggleButton(TRUE); connect( pbEE, TQT_SIGNAL(toggled(bool)), TQT_SLOT(EEtoggled(bool))); pbMR = new TQPushButton("MR",mLargePage, "MRbutton" ); connect( pbMR, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbMRtoggled(bool))); pbMR->setToggleButton(TRUE); pbMR->setFont(buttonfont); pbMplusminus = new TQPushButton("M+-",mLargePage, "Mplusminusbutton" ); connect( pbMplusminus, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbMplusminustoggled(bool))); pbMplusminus->setToggleButton(TRUE); pbMC = new TQPushButton("MC",mLargePage, "MCbutton" ); connect( pbMC, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbMCtoggled(bool))); pbMC->setToggleButton(TRUE); pbClear = new TQPushButton("C",mLargePage, "Clearbutton" ); connect( pbClear, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbCleartoggled(bool))); pbClear->setToggleButton(TRUE); pbAC = new TQPushButton("AC", mLargePage, "ACbutton" ); connect( pbAC, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbACtoggled(bool))); pbAC->setToggleButton(TRUE); pb7 = new TQPushButton("7",mLargePage, "7button" ); connect( pb7, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pb7toggled(bool))); pb7->setToggleButton(TRUE); pb8 = new TQPushButton("8",mLargePage, "8button" ); connect( pb8, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pb8toggled(bool))); pb8->setToggleButton(TRUE); pb9 = new TQPushButton("9",mLargePage,"9button" ); connect( pb9, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pb9toggled(bool))); pb9->setToggleButton(TRUE); pbparenopen = new TQPushButton("(",mLargePage, "parenopenbutton" ); connect( pbparenopen, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbparenopentoggled(bool))); pbparenopen->setToggleButton(TRUE); pbparenclose = new TQPushButton(")",mLargePage, "parenclosebutton" ); connect( pbparenclose, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbparenclosetoggled(bool))); pbparenclose->setToggleButton(TRUE); pband = new TQPushButton("And",mLargePage, "andbutton" ); connect( pband, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbandtoggled(bool))); pband->setToggleButton(TRUE); pband->setFont(buttonfont); pb4 = new TQPushButton("4",mLargePage, "4button" ); connect( pb4, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pb4toggled(bool))); pb4->setToggleButton(TRUE); pb5 = new TQPushButton("5",mLargePage, "5button" ); connect( pb5, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pb5toggled(bool))); pb5->setToggleButton(TRUE); pb6 = new TQPushButton("6",mLargePage, "6button" ); connect( pb6, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pb6toggled(bool))); pb6->setToggleButton(TRUE); pbX = new TQPushButton("X",mLargePage, "Multiplybutton" ); connect( pbX, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbXtoggled(bool))); pbX->setToggleButton(TRUE); pbdivision = new TQPushButton("/",mLargePage, "divisionbutton" ); connect( pbdivision, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbdivisiontoggled(bool))); pbdivision->setToggleButton(TRUE); pbor = new TQPushButton("Or",mLargePage, "orbutton" ); connect( pbor, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbortoggled(bool))); pbor->setToggleButton(TRUE); pb1 = new TQPushButton("1",mLargePage, "1button" ); connect( pb1, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pb1toggled(bool))); pb1->setToggleButton(TRUE); pb2 = new TQPushButton("2",mLargePage, "2button" ); connect( pb2, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pb2toggled(bool))); pb2->setToggleButton(TRUE); pb3 = new TQPushButton("3",mLargePage, "3button" ); connect( pb3, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pb3toggled(bool))); pb3->setToggleButton(TRUE); pbplus = new TQPushButton("+",mLargePage, "plusbutton" ); connect( pbplus, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbplustoggled(bool))); pbplus->setToggleButton(TRUE); pbminus = new TQPushButton("-",mLargePage, "minusbutton" ); connect( pbminus, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbminustoggled(bool))); pbminus->setToggleButton(TRUE); pbshift = new TQPushButton("Lsh",mLargePage, "shiftbutton" ); connect( pbshift, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbshifttoggled(bool))); pbshift->setToggleButton(TRUE); pbperiod = new TQPushButton(".",mLargePage, "periodbutton" ); connect( pbperiod, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbperiodtoggled(bool))); pbperiod->setToggleButton(TRUE); pb0 = new TQPushButton("0",mLargePage, "0button" ); connect( pb0, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pb0toggled(bool))); pb0->setToggleButton(TRUE); pbequal = new TQPushButton("=",mLargePage, "equalbutton" ); connect( pbequal, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbequaltoggled(bool))); pbequal->setToggleButton(TRUE); pbpercent = new TQPushButton("%",mLargePage, "percentbutton" ); connect( pbpercent, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbpercenttoggled(bool))); pbpercent->setToggleButton(TRUE); pbnegate = new TQPushButton("Cmp",mLargePage, "OneComplementbutton" ); connect( pbnegate, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbnegatetoggled(bool))); pbnegate->setToggleButton(TRUE); pbmod = new TQPushButton("Mod",mLargePage, "modbutton" ); connect( pbmod, TQT_SIGNAL(toggled(bool)), TQT_SLOT(pbmodtoggled(bool))); pbmod->setToggleButton(TRUE); TQGridLayout *smallBtnLayout = new TQGridLayout(mSmallPage, 6, 3, 0, mInternalSpacing); TQGridLayout *largeBtnLayout = new TQGridLayout(mLargePage, 5, 6, 0, mInternalSpacing); TQHBoxLayout *topLayout = new TQHBoxLayout(); TQHBoxLayout *radioLayout = new TQHBoxLayout(); TQHBoxLayout *btnLayout = new TQHBoxLayout(); TQHBoxLayout *statusLayout = new TQHBoxLayout(); // bring them all together TQVBoxLayout *mainLayout = new TQVBoxLayout(this, mInternalSpacing, mInternalSpacing ); mainLayout->addLayout(topLayout ); mainLayout->addLayout(radioLayout, 1); mainLayout->addLayout(btnLayout); mainLayout->addLayout(statusLayout); // button tqlayout btnLayout->addWidget(mSmallPage,0,AlignTop); btnLayout->addSpacing(mInternalSpacing); btnLayout->addWidget(mLargePage,0,AlignTop); // small button tqlayout smallBtnLayout->addWidget(pbhyp, 0, 0); smallBtnLayout->addWidget(pbinv, 0, 1); smallBtnLayout->addWidget(pbA, 0, 2); smallBtnLayout->addWidget(pbSin, 1, 0); smallBtnLayout->addWidget(pbplusminus, 1, 1); smallBtnLayout->addWidget(pbB, 1, 2); smallBtnLayout->addWidget(pbCos, 2, 0); smallBtnLayout->addWidget(pbreci, 2, 1); smallBtnLayout->addWidget(pbC, 2, 2); smallBtnLayout->addWidget(pbTan, 3, 0); smallBtnLayout->addWidget(pbfactorial, 3, 1); smallBtnLayout->addWidget(pbD, 3, 2); smallBtnLayout->addWidget(pblog, 4, 0); smallBtnLayout->addWidget(pbsquare, 4, 1); smallBtnLayout->addWidget(pbE, 4, 2); smallBtnLayout->addWidget(pbln, 5, 0); smallBtnLayout->addWidget(pbpower, 5, 1); smallBtnLayout->addWidget(pbF, 5, 2); smallBtnLayout->setRowStretch(0, 0); smallBtnLayout->setRowStretch(1, 0); smallBtnLayout->setRowStretch(2, 0); smallBtnLayout->setRowStretch(3, 0); smallBtnLayout->setRowStretch(4, 0); smallBtnLayout->setRowStretch(5, 0); // large button tqlayout largeBtnLayout->addWidget(pbEE, 0, 0); largeBtnLayout->addWidget(pbMR, 0, 1); largeBtnLayout->addWidget(pbMplusminus, 0, 2); largeBtnLayout->addWidget(pbMC, 0, 3); largeBtnLayout->addWidget(pbClear, 0, 4); largeBtnLayout->addWidget(pbAC, 0, 5); largeBtnLayout->addWidget(pb7, 1, 0); largeBtnLayout->addWidget(pb8, 1, 1); largeBtnLayout->addWidget(pb9, 1, 2); largeBtnLayout->addWidget(pbparenopen, 1, 3); largeBtnLayout->addWidget(pbparenclose, 1, 4); largeBtnLayout->addWidget(pband, 1, 5); largeBtnLayout->addWidget(pb4, 2, 0); largeBtnLayout->addWidget(pb5, 2, 1); largeBtnLayout->addWidget(pb6, 2, 2); largeBtnLayout->addWidget(pbX, 2, 3); largeBtnLayout->addWidget(pbdivision, 2, 4); largeBtnLayout->addWidget(pbor, 2, 5); largeBtnLayout->addWidget(pb1, 3, 0); largeBtnLayout->addWidget(pb2, 3, 1); largeBtnLayout->addWidget(pb3, 3, 2); largeBtnLayout->addWidget(pbplus, 3, 3); largeBtnLayout->addWidget(pbminus, 3, 4); largeBtnLayout->addWidget(pbshift, 3, 5); largeBtnLayout->addWidget(pbperiod, 4, 0); largeBtnLayout->addWidget(pb0, 4, 1); largeBtnLayout->addWidget(pbequal, 4, 2); largeBtnLayout->addWidget(pbpercent, 4, 3); largeBtnLayout->addWidget(pbnegate, 4, 4); largeBtnLayout->addWidget(pbmod, 4, 5); largeBtnLayout->addColSpacing(0,10); largeBtnLayout->addColSpacing(1,10); largeBtnLayout->addColSpacing(2,10); largeBtnLayout->addColSpacing(3,10); largeBtnLayout->addColSpacing(4,10); topLayout->addWidget(pb); topLayout->addWidget(calc_display, 10); // radiobutton tqlayout radioLayout->addWidget(base_group); radioLayout->addWidget(angle_group); // status tqlayout statusLayout->addWidget(statusINVLabel); statusLayout->addWidget(statusHYPLabel); statusLayout->addWidget(statusERRORLabel, 10); mNumButtonList.append(pb0); mNumButtonList.append(pb1); mNumButtonList.append(pb2); mNumButtonList.append(pb3); mNumButtonList.append(pb4); mNumButtonList.append(pb5); mNumButtonList.append(pb6); mNumButtonList.append(pb7); mNumButtonList.append(pb8); mNumButtonList.append(pb9); mFunctionButtonList.append(pbhyp); mFunctionButtonList.append(pbinv); mFunctionButtonList.append(pbSin); mFunctionButtonList.append(pbplusminus); mFunctionButtonList.append(pbCos); mFunctionButtonList.append(pbreci); mFunctionButtonList.append(pbTan); mFunctionButtonList.append(pbfactorial); mFunctionButtonList.append(pblog); mFunctionButtonList.append(pbsquare); mFunctionButtonList.append(pbln); mFunctionButtonList.append(pbpower); mHexButtonList.append(pbA); mHexButtonList.append(pbB); mHexButtonList.append(pbC); mHexButtonList.append(pbD); mHexButtonList.append(pbE); mHexButtonList.append(pbF); mMemButtonList.append(pbEE); mMemButtonList.append(pbMR); mMemButtonList.append(pbMplusminus); mMemButtonList.append(pbMC); mMemButtonList.append(pbClear); mMemButtonList.append(pbAC); mOperationButtonList.append(pbX); mOperationButtonList.append(pbparenopen); mOperationButtonList.append(pbparenclose); mOperationButtonList.append(pband); mOperationButtonList.append(pbdivision); mOperationButtonList.append(pbor); mOperationButtonList.append(pbplus); mOperationButtonList.append(pbminus); mOperationButtonList.append(pbshift); mOperationButtonList.append(pbperiod); mOperationButtonList.append(pbequal); mOperationButtonList.append(pbpercent); mOperationButtonList.append(pbnegate); mOperationButtonList.append(pbmod); set_colors(); set_precision(); set_style(); updateGeometry(); setFixedHeight(minimumHeight()); InitializeCalculator(); } TQtCalculator::~TQtCalculator() { delete selection_timer; delete status_timer; } void TQtCalculator::set_display_font() { calc_display->setFont(kcalcdefaults.font); } void TQtCalculator::updateGeometry() { TQObjectList *l; TQSize s; int margin; // // Uppermost bar // calc_display->setMinimumWidth(calc_display->fontMetrics().maxWidth() * 15); // // Button groups (base and angle) // //TQButtonGroup *g; //g = (TQButtonGroup*)(anglebutton[0]->tqparentWidget()); //g = (TQButtonGroup*)(basebutton[0]->tqparentWidget()); // // Calculator buttons // s.setWidth(mSmallPage->fontMetrics().width("MMM")); s.setHeight(mSmallPage->fontMetrics().lineSpacing()); l = (TQObjectList*)mSmallPage->tqchildren(); // silence please for(uint i=0; i < l->count(); i++) { TQObject *o = l->at(i); if( o->isWidgetType() ) { margin = TQApplication::style(). tqpixelMetric(TQStyle::PM_ButtonMargin, ((TQWidget *)o))*2; ((TQWidget*)o)->setMinimumSize(s.width()+margin, s.height()+margin); ((TQWidget*)o)->installEventFilter( this ); ((TQWidget*)o)->setAcceptDrops(true); } } l = (TQObjectList*)mLargePage->tqchildren(); // silence please int h1 = pbF->tqminimumSize().height(); int h2 = (int)((((float)h1 + 4.0) / 5.0)); s.setWidth(mLargePage->fontMetrics().width("MMM") + TQApplication::style(). tqpixelMetric(TQStyle::PM_ButtonMargin, pbF)*2); s.setHeight(h1 + h2); for(uint i = 0; i < l->count(); i++) { TQObject *o = l->at(i); if(o->isWidgetType()) { ((TQWidget*)o)->setFixedSize(s); ((TQWidget*)o)->installEventFilter(this); ((TQWidget*)o)->setAcceptDrops(true); } } // // The status bar // s.setWidth( statusINVLabel->fontMetrics().width("NORM") + statusINVLabel->frameWidth() * 2 + 10); statusINVLabel->setMinimumWidth(s.width()); statusHYPLabel->setMinimumWidth(s.width()); //setFixedSize(tqminimumSize()); } void TQtCalculator::exit() { // TQApplication::exit(); } void TQtCalculator::Hex_Selected() { basebutton[0]->setChecked(TRUE); basebutton[1]->setChecked(FALSE); basebutton[2]->setChecked(FALSE); basebutton[3]->setChecked(FALSE); SetHex(); } void TQtCalculator::Dec_Selected() { basebutton[0]->setChecked(FALSE); basebutton[1]->setChecked(TRUE); basebutton[2]->setChecked(FALSE); basebutton[3]->setChecked(FALSE); SetDec(); } void TQtCalculator::Oct_Selected() { basebutton[0]->setChecked(FALSE); basebutton[1]->setChecked(FALSE); basebutton[2]->setChecked(TRUE); basebutton[3]->setChecked(FALSE); SetOct(); } void TQtCalculator::Bin_Selected() { basebutton[0]->setChecked(FALSE); basebutton[1]->setChecked(FALSE); basebutton[2]->setChecked(FALSE); basebutton[3]->setChecked(TRUE); SetBin(); } void TQtCalculator::Deg_Selected() { anglebutton[0]->setChecked(TRUE); anglebutton[1]->setChecked(FALSE); anglebutton[2]->setChecked(FALSE); SetDeg(); } void TQtCalculator::Rad_Selected() { anglebutton[0]->setChecked(FALSE); anglebutton[1]->setChecked(TRUE); anglebutton[2]->setChecked(FALSE); SetRad(); } void TQtCalculator::Gra_Selected() { anglebutton[0]->setChecked(FALSE); anglebutton[1]->setChecked(FALSE); anglebutton[2]->setChecked(TRUE); SetGra(); } void TQtCalculator::helpclicked(){ } void TQtCalculator::keyPressEvent( TQKeyEvent *e ){ switch (e->key() ){ case Key_F1: helpclicked(); break; case Key_F2: configclicked(); break; case Key_F3: if(kcalcdefaults.style == 0) kcalcdefaults.style = 1; else if(kcalcdefaults.style == 1) kcalcdefaults.style = 2; else kcalcdefaults.style = 0; set_style(); break; case Key_Up: temp_stack_prev(); break; case Key_Down: temp_stack_next(); break; case Key_Next: key_pressed = TRUE; pbAC->setOn(TRUE); break; case Key_Prior: key_pressed = TRUE; pbClear->setOn(TRUE); break; case Key_H: key_pressed = TRUE; pbhyp->setOn(TRUE); break; case Key_I: key_pressed = TRUE; pbinv->setOn(TRUE); break; case Key_A: key_pressed = TRUE; pbA->setOn(TRUE); break; case Key_E: key_pressed = TRUE; if (current_base == NB_HEX) pbE->setOn(TRUE); else pbEE->setOn(TRUE); break; case Key_Escape: key_pressed = TRUE; pbClear->setOn(TRUE); break; case Key_Delete: key_pressed = TRUE; pbAC->setOn(TRUE); break; case Key_S: key_pressed = TRUE; pbSin->setOn(TRUE); break; case Key_Backslash: key_pressed = TRUE; pbplusminus->setOn(TRUE); break; case Key_B: key_pressed = TRUE; pbB->setOn(TRUE); break; case Key_7: key_pressed = TRUE; pb7->setOn(TRUE); break; case Key_8: key_pressed = TRUE; pb8->setOn(TRUE); break; case Key_9: key_pressed = TRUE; pb9->setOn(TRUE); break; case Key_ParenLeft: key_pressed = TRUE; pbparenopen->setOn(TRUE); break; case Key_ParenRight: key_pressed = TRUE; pbparenclose->setOn(TRUE); break; case Key_Ampersand: key_pressed = TRUE; pband->setOn(TRUE); break; case Key_C: key_pressed = TRUE; if (current_base == NB_HEX) pbC->setOn(TRUE); else pbCos->setOn(TRUE); break; case Key_4: key_pressed = TRUE; pb4->setOn(TRUE); break; case Key_5: key_pressed = TRUE; pb5->setOn(TRUE); break; case Key_6: key_pressed = TRUE; pb6->setOn(TRUE); break; case Key_Asterisk: key_pressed = TRUE; pbX->setOn(TRUE); break; case Key_Slash: key_pressed = TRUE; pbdivision->setOn(TRUE); break; case Key_O: key_pressed = TRUE; pbor->setOn(TRUE); break; case Key_T: key_pressed = TRUE; pbTan->setOn(TRUE); break; case Key_Exclam: key_pressed = TRUE; pbfactorial->setOn(TRUE); break; case Key_D: key_pressed = TRUE; if(kcalcdefaults.style == 0) pbD->setOn(TRUE); // trig mode else pblog->setOn(TRUE); // stat mode break; case Key_1: key_pressed = TRUE; pb1->setOn(TRUE); break; case Key_2: key_pressed = TRUE; pb2->setOn(TRUE); break; case Key_3: key_pressed = TRUE; pb3->setOn(TRUE); break; case Key_Plus: key_pressed = TRUE; pbplus->setOn(TRUE); break; case Key_Minus: key_pressed = TRUE; pbminus->setOn(TRUE); break; case Key_Less: key_pressed = TRUE; pbshift->setOn(TRUE); break; case Key_N: key_pressed = TRUE; pbln->setOn(TRUE); break; case Key_L: key_pressed = TRUE; pblog->setOn(TRUE); break; case Key_AsciiCircum: key_pressed = TRUE; pbpower->setOn(TRUE); break; case Key_F: key_pressed = TRUE; pbF->setOn(TRUE); break; case Key_Period: key_pressed = TRUE; pbperiod->setOn(TRUE); break; case Key_Comma: key_pressed = TRUE; pbperiod->setOn(TRUE); break; case Key_0: key_pressed = TRUE; pb0->setOn(TRUE); break; case Key_Equal: key_pressed = TRUE; pbequal->setOn(TRUE); break; case Key_Return: key_pressed = TRUE; pbequal->setOn(TRUE); break; case Key_Enter: key_pressed = TRUE; pbequal->setOn(TRUE); break; case Key_Percent: key_pressed = TRUE; pbpercent->setOn(TRUE); break; case Key_AsciiTilde: key_pressed = TRUE; pbnegate->setOn(TRUE); break; case Key_Colon: key_pressed = TRUE; pbmod->setOn(TRUE); break; case Key_BracketLeft: key_pressed = TRUE; pbsquare->setOn(TRUE); break; case Key_Backspace: key_pressed = TRUE; pbAC->setOn(TRUE); break; case Key_R: key_pressed = TRUE; pbreci->setOn(TRUE); break; } } void TQtCalculator::keyReleaseEvent( TQKeyEvent *e ){ switch (e->key() ){ case Key_Next: key_pressed = FALSE; pbAC->setOn(FALSE); break; case Key_Prior: key_pressed = FALSE; pbClear->setOn(FALSE); break; case Key_H: key_pressed = FALSE; pbhyp->setOn(FALSE); break; case Key_I: key_pressed = FALSE; pbinv->setOn(FALSE); break; case Key_A: key_pressed = FALSE; pbA->setOn(FALSE); break; case Key_E: key_pressed = FALSE; if (current_base == NB_HEX) pbE->setOn(FALSE); else pbEE->setOn(FALSE); break; case Key_Escape: key_pressed = FALSE; pbClear->setOn(FALSE); break; case Key_Delete: key_pressed = FALSE; pbAC->setOn(FALSE); break; case Key_S: key_pressed = FALSE; pbSin->setOn(FALSE); break; case Key_Backslash: key_pressed = FALSE; pbplusminus->setOn(FALSE); break; case Key_B: key_pressed = FALSE; pbB->setOn(FALSE); break; case Key_7: key_pressed = FALSE; pb7->setOn(FALSE); break; case Key_8: key_pressed = FALSE; pb8->setOn(FALSE); break; case Key_9: key_pressed = FALSE; pb9->setOn(FALSE); break; case Key_ParenLeft: key_pressed = FALSE; pbparenopen->setOn(FALSE); break; case Key_ParenRight: key_pressed = FALSE; pbparenclose->setOn(FALSE); break; case Key_Ampersand: key_pressed = FALSE; pband->setOn(FALSE); break; case Key_C: key_pressed = FALSE; if (current_base == NB_HEX) pbC->setOn(FALSE); else pbCos->setOn(FALSE); break; case Key_4: key_pressed = FALSE; pb4->setOn(FALSE); break; case Key_5: key_pressed = FALSE; pb5->setOn(FALSE); break; case Key_6: key_pressed = FALSE; pb6->setOn(FALSE); break; case Key_Asterisk: key_pressed = FALSE; pbX->setOn(FALSE); break; case Key_Slash: key_pressed = FALSE; pbdivision->setOn(FALSE); break; case Key_O: key_pressed = FALSE; pbor->setOn(FALSE); break; case Key_T: key_pressed = FALSE; pbTan->setOn(FALSE); break; case Key_Exclam: key_pressed = FALSE; pbfactorial->setOn(FALSE); break; case Key_D: key_pressed = FALSE; if(kcalcdefaults.style == 0) pbD->setOn(FALSE); // trig mode else pblog->setOn(FALSE);// stat mode break; case Key_1: key_pressed = FALSE; pb1->setOn(FALSE); break; case Key_2: key_pressed = FALSE; pb2->setOn(FALSE); break; case Key_3: key_pressed = FALSE; pb3->setOn(FALSE); break; case Key_Plus: key_pressed = FALSE; pbplus->setOn(FALSE); break; case Key_Minus: key_pressed = FALSE; pbminus->setOn(FALSE); break; case Key_Less: key_pressed = FALSE; pbshift->setOn(FALSE); break; case Key_N: key_pressed = FALSE; pbln->setOn(FALSE); break; case Key_L: key_pressed = FALSE; pblog->setOn(FALSE); break; case Key_AsciiCircum: key_pressed = FALSE; pbpower->setOn(FALSE); break; case Key_F: key_pressed = FALSE; pbF->setOn(FALSE); break; case Key_Period: key_pressed = FALSE; pbperiod->setOn(FALSE); break; case Key_Comma: key_pressed = FALSE; pbperiod->setOn(FALSE); break; case Key_0: key_pressed = FALSE; pb0->setOn(FALSE); break; case Key_Equal: key_pressed = FALSE; pbequal->setOn(FALSE); break; case Key_Return: key_pressed = FALSE; pbequal->setOn(FALSE); break; case Key_Enter: key_pressed = FALSE; pbequal->setOn(FALSE); break; case Key_Percent: key_pressed = FALSE; pbpercent->setOn(FALSE); break; case Key_AsciiTilde: key_pressed = FALSE; pbnegate->setOn(FALSE); break; case Key_Colon: key_pressed = FALSE; pbmod->setOn(FALSE); break; case Key_BracketLeft: key_pressed = FALSE; pbsquare->setOn(FALSE); break; case Key_Backspace: key_pressed = FALSE; pbAC->setOn(FALSE); break; case Key_R: key_pressed = FALSE; pbreci->setOn(FALSE); break; } clear_buttons(); } void TQtCalculator::clear_buttons(){ } void TQtCalculator::EEtoggled(bool myboolean){ if(myboolean) EE(); if(pbEE->isOn() && (!key_pressed)) pbEE->setOn(FALSE); } void TQtCalculator::pbinvtoggled(bool myboolean){ if(myboolean) SetInverse(); if(pbinv->isOn() && (!key_pressed)) pbinv->setOn(FALSE); } void TQtCalculator::pbhyptoggled(bool myboolean){ if(myboolean) EnterHyp(); if(pbhyp->isOn() && (!key_pressed)) pbhyp->setOn(FALSE); } void TQtCalculator::pbMRtoggled(bool myboolean){ if(myboolean) MR(); if(pbMR->isOn() && (!key_pressed)) pbMR->setOn(FALSE); } void TQtCalculator::pbAtoggled(bool myboolean){ if(myboolean) buttonA(); if(pbA->isOn() && (!key_pressed)) pbA->setOn(FALSE); } void TQtCalculator::pbSintoggled(bool myboolean){ if(myboolean) ExecSin(); if(pbSin->isOn() && (!key_pressed)) pbSin->setOn(FALSE); } void TQtCalculator::pbplusminustoggled(bool myboolean){ if(myboolean) EnterNegate(); if(pbplusminus->isOn() && (!key_pressed)) pbplusminus->setOn(FALSE); } void TQtCalculator::pbMplusminustoggled(bool myboolean){ if(myboolean) Mplusminus(); if(pbMplusminus->isOn() && (!key_pressed)) pbMplusminus->setOn(FALSE); } void TQtCalculator::pbBtoggled(bool myboolean){ if(myboolean) buttonB(); if(pbB->isOn() && (!key_pressed)) pbB->setOn(FALSE); } void TQtCalculator::pbCostoggled(bool myboolean){ if(myboolean) ExecCos(); if(pbCos->isOn() && (!key_pressed)) pbCos->setOn(FALSE); } void TQtCalculator::pbrecitoggled(bool myboolean){ if(myboolean) EnterRecip(); if(pbreci->isOn() && (!key_pressed)) pbreci->setOn(FALSE); } void TQtCalculator::pbCtoggled(bool myboolean){ if(myboolean) buttonC(); if(pbC->isOn() && (!key_pressed)) pbC->setOn(FALSE); } void TQtCalculator::pbTantoggled(bool myboolean){ if(myboolean) ExecTan(); if(pbTan->isOn() && (!key_pressed)) pbTan->setOn(FALSE); } void TQtCalculator::pbfactorialtoggled(bool myboolean){ if(myboolean) EnterFactorial(); if(pbfactorial->isOn() && (!key_pressed)) pbfactorial->setOn(FALSE); } void TQtCalculator::pbDtoggled(bool myboolean){ if(myboolean) buttonD(); if(pbD->isOn() && (!key_pressed)) pbD->setOn(FALSE); } void TQtCalculator::pblogtoggled(bool myboolean){ if(myboolean) EnterLogr(); if(pblog->isOn() && (!key_pressed)) pblog->setOn(FALSE); } void TQtCalculator::pbsquaretoggled(bool myboolean){ if(myboolean) EnterSquare(); if(pbsquare->isOn() && (!key_pressed)) pbsquare->setOn(FALSE); } void TQtCalculator::pbEtoggled(bool myboolean){ if(myboolean) buttonE(); if(pbE->isOn() && (!key_pressed)) pbE->setOn(FALSE); } void TQtCalculator::pblntoggled(bool myboolean){ if(myboolean) EnterLogn(); if(pbln->isOn() && (!key_pressed)) pbln->setOn(FALSE); } void TQtCalculator::pbpowertoggled(bool myboolean){ if(myboolean) Power(); if(pbpower->isOn() && (!key_pressed)) pbpower->setOn(FALSE); } void TQtCalculator::pbFtoggled(bool myboolean){ if(myboolean) buttonF(); if(pbF->isOn() && (!key_pressed)) pbF->setOn(FALSE); } void TQtCalculator::pbMCtoggled(bool myboolean){ if(myboolean) MC(); if(pbMC->isOn() && (!key_pressed)) pbMC->setOn(FALSE); } void TQtCalculator::pbCleartoggled(bool myboolean){ if(myboolean) Clear(); if(pbClear->isOn() && (!key_pressed)) pbClear->setOn(FALSE); } void TQtCalculator::pbACtoggled(bool myboolean){ if(myboolean) ClearAll(); if(pbAC->isOn() && (!key_pressed)) pbAC->setOn(FALSE); } void TQtCalculator::pb7toggled(bool myboolean){ if(myboolean) button7(); if(pb7->isOn() && (!key_pressed)) pb7->setOn(FALSE); } void TQtCalculator::pb8toggled(bool myboolean){ if(myboolean) button8(); if(pb8->isOn() && (!key_pressed)) pb8->setOn(FALSE); } void TQtCalculator::pb9toggled(bool myboolean){ if(myboolean) button9(); if(pb9->isOn() && (!key_pressed)) pb9->setOn(FALSE); } void TQtCalculator::pbparenopentoggled(bool myboolean){ if(myboolean) EnterOpenParen(); if(pbparenopen->isOn() && (!key_pressed)) pbparenopen->setOn(FALSE); } void TQtCalculator::pbparenclosetoggled(bool myboolean){ if(myboolean) EnterCloseParen(); if(pbparenclose->isOn() && (!key_pressed)) pbparenclose->setOn(FALSE); } void TQtCalculator::pbandtoggled(bool myboolean){ if(myboolean) And(); if(pband->isOn() && (!key_pressed)) pband->setOn(FALSE); } void TQtCalculator::pb4toggled(bool myboolean){ if(myboolean) button4(); if(pb4->isOn() && (!key_pressed)) pb4->setOn(FALSE); } void TQtCalculator::pb5toggled(bool myboolean){ if(myboolean) button5(); if(pb5->isOn() && (!key_pressed)) pb5->setOn(FALSE); } void TQtCalculator::pb6toggled(bool myboolean){ if(myboolean) button6(); if(pb6->isOn() && (!key_pressed)) pb6->setOn(FALSE); } void TQtCalculator::pbXtoggled(bool myboolean){ if(myboolean) Multiply(); if(pbX->isOn() && (!key_pressed)) pbX->setOn(FALSE); } void TQtCalculator::pbdivisiontoggled(bool myboolean){ if(myboolean) Divide(); if(pbdivision->isOn() && (!key_pressed)) pbdivision->setOn(FALSE); } void TQtCalculator::pbortoggled(bool myboolean){ if(myboolean) Or(); if(pbor->isOn() && (!key_pressed)) pbor->setOn(FALSE); } void TQtCalculator::pb1toggled(bool myboolean){ if(myboolean) button1(); if(pb1->isOn() && (!key_pressed)) pb1->setOn(FALSE); } void TQtCalculator::pb2toggled(bool myboolean){ if(myboolean) button2(); if(pb2->isOn() && (!key_pressed)) pb2->setOn(FALSE); } void TQtCalculator::pb3toggled(bool myboolean){ if(myboolean) button3(); if(pb3->isOn() && (!key_pressed)) pb3->setOn(FALSE); } void TQtCalculator::pbplustoggled(bool myboolean){ if(myboolean) Plus(); if(pbplus->isOn() && (!key_pressed)) pbplus->setOn(FALSE); } void TQtCalculator::pbminustoggled(bool myboolean){ if(myboolean) Minus(); if(pbminus->isOn() && (!key_pressed)) pbminus->setOn(FALSE); } void TQtCalculator::pbshifttoggled(bool myboolean){ if(myboolean) Shift(); if(pbshift->isOn() && (!key_pressed)) pbshift->setOn(FALSE); } void TQtCalculator::pbperiodtoggled(bool myboolean){ if(myboolean) EnterDecimal(); if(pbperiod->isOn() && (!key_pressed)) pbperiod->setOn(FALSE); } void TQtCalculator::pb0toggled(bool myboolean){ if(myboolean) button0(); if(pb0->isOn() && (!key_pressed)) pb0->setOn(FALSE); } void TQtCalculator::pbequaltoggled(bool myboolean){ if(myboolean) EnterEqual(); if(pbequal->isOn() && (!key_pressed)) pbequal->setOn(FALSE); } void TQtCalculator::pbpercenttoggled(bool myboolean){ if(myboolean) EnterPercent(); if(pbpercent->isOn() && (!key_pressed)) pbpercent->setOn(FALSE); } void TQtCalculator::pbnegatetoggled(bool myboolean){ if(myboolean) EnterNotCmp(); if(pbnegate->isOn() && (!key_pressed)) pbnegate->setOn(FALSE); } void TQtCalculator::pbmodtoggled(bool myboolean) { if(myboolean) Mod(); if(pbmod->isOn() && (!key_pressed)) pbmod->setOn(FALSE); } void TQtCalculator::configclicked(){ TQTabDialog * tabdialog; tabdialog = new TQTabDialog(0,"tabdialog",TRUE); tabdialog->setCaption( i18n("KCalc Configuration") ); tabdialog->resize( 360, 390 ); tabdialog->setCancelButton( i18n("&Cancel") ); tabdialog->setOKButton(i18n("&OK")); TQWidget *about = new TQWidget(tabdialog,"about"); TQVBoxLayout *lay1 = new TQVBoxLayout( about ); lay1->setMargin( KDialog::marginHint() ); lay1->setSpacing( KDialog::spacingHint() ); TQGroupBox *box = new TQGroupBox(0,Qt::Vertical,about,"box"); box->tqlayout()->setSpacing(KDialog::spacingHint()); box->tqlayout()->setMargin(KDialog::marginHint()); TQGridLayout *grid1 = new TQGridLayout(box->tqlayout(),2,2); TQLabel *label = new TQLabel(box,"label"); TQLabel *label2 = new TQLabel(box,"label2"); box->setTitle(i18n("About")); grid1->addWidget(label,0,1); grid1->addMultiCellWidget(label2,2,2,0,1); TQString labelstring = "KCalc "KCALCVERSION"\n"\ "Bernd Johannes Wuebben\n"\ "wuebben@math.cornell.edu\n"\ "wuebben@kde.org\n"\ "Copyright (C) 1996-98\n"\ "\n\n"; TQString labelstring2 = #ifdef HAVE_LONG_DOUBLE i18n( "Base type: long double\n"); #else i18n( "Due to broken glibc's everywhere, "\ "I had to reduce KCalc's precision from 'long double' "\ "to 'double'. "\ "Owners of systems with a working libc "\ "should recompile KCalc with 'long double' precision "\ "enabled. See the README for details."); #endif label->tqsetAlignment(AlignLeft|WordBreak|ExpandTabs); label->setText(labelstring); label2->tqsetAlignment(AlignLeft|WordBreak|ExpandTabs); label2->setText(labelstring2); // HACK // TQPixmap pm( BarIcon( "kcalclogo" ) ); TQPixmap pm; TQLabel *logo = new TQLabel(box); logo->setPixmap(pm); grid1->addWidget(logo,0,0); lay1->addWidget(box); DefStruct newdefstruct; newdefstruct.forecolor = kcalcdefaults.forecolor; newdefstruct.backcolor = kcalcdefaults.backcolor; newdefstruct.precision = kcalcdefaults.precision; newdefstruct.fixedprecision = kcalcdefaults.fixedprecision; newdefstruct.fixed = kcalcdefaults.fixed; newdefstruct.style = kcalcdefaults.style; newdefstruct.beep = kcalcdefaults.beep; ConfigDlg *configdlg; configdlg = new ConfigDlg(tabdialog,"configdlg",&newdefstruct); tabdialog->addTab(configdlg,i18n("Defaults")); tabdialog->addTab(about,i18n("About")); if(tabdialog->exec() == TQDialog::Accepted){ kcalcdefaults.forecolor = newdefstruct.forecolor; kcalcdefaults.backcolor = newdefstruct.backcolor; kcalcdefaults.precision = newdefstruct.precision; kcalcdefaults.fixedprecision = newdefstruct.fixedprecision; kcalcdefaults.fixed = newdefstruct.fixed; kcalcdefaults.style = newdefstruct.style; kcalcdefaults.beep = newdefstruct.beep; set_colors(); set_precision(); set_style(); updateGeometry(); resize(tqminimumSize()); } delete configdlg; } void TQtCalculator::set_style(){ switch(kcalcdefaults.style){ case 0:{ pbhyp->setText( "Hyp" ); pbSin->setText( "Sin" ); pbCos->setText( "Cos" ); pbTan->setText( "Tan" ); pblog->setText( "Log" ); pbln ->setText( "Ln" ); break; } case 1:{ pbhyp->setText( "N" ); pbSin->setText( "Mea" ); pbCos->setText( "Std" ); pbTan->setText( "Med" ); pblog->setText( "Dat" ); pbln ->setText( "CSt" ); break; } case 2:{ pbhyp->setText( "N" ); pbSin->setText( "Min" ); pbCos->setText( "Max" ); pbTan->setText( "Med" ); pblog->setText( "Sum" ); pbln ->setText( "Mul" ); break; } default: break; } } void TQtCalculator::readSettings() { TQColor tmpC(189, 255, 180); TQColor blackC(0,0,0); KConfig *config = KGlobal::config(); config->setGroup("CalcPlugin"); kcalcdefaults.forecolor = config->readColorEntry("ForeColor", &blackC); kcalcdefaults.backcolor = config->readColorEntry("BackColor", &tmpC); #ifdef HAVE_LONG_DOUBLE kcalcdefaults.precision = config->readNumEntry("precision", (int)14); #else kcalcdefaults.precision = config->readNumEntry("precision", (int)10); #endif kcalcdefaults.fixedprecision = config->readNumEntry("fixedprecision", (int)2); kcalcdefaults.fixed = config->readBoolEntry("fixed", false); kcalcdefaults.style = config->readNumEntry("style", (int)0); kcalcdefaults.beep = config->readBoolEntry("beep", true); } void TQtCalculator::writeSettings() { KConfig *config = KGlobal::config(); config->setGroup("CalcPlugin"); config->writeEntry("ForeColor",kcalcdefaults.forecolor); config->writeEntry("BackColor",kcalcdefaults.backcolor); config->writeEntry("precision", kcalcdefaults.precision); config->writeEntry("fixedprecision", kcalcdefaults.fixedprecision); config->writeEntry("fixed", kcalcdefaults.fixed); config->writeEntry("style",(int)kcalcdefaults.style); config->writeEntry("beep", kcalcdefaults.beep); config->sync(); } void TQtCalculator::display_selected(){ if(calc_display->Button() == LeftButton){ if(calc_display->isLit()){ TQClipboard *cb = TQApplication::tqclipboard(); cb->setText(calc_display->text()); selection_timer->start(100); } else{ selection_timer->stop(); } invertColors(); } else{ TQClipboard *cb = TQApplication::tqclipboard(); CALCAMNT result; result = (CALCAMNT) cb->text().toDouble(); // printf("%Lg\n",result); last_input = PASTE; DISPLAY_AMOUNT = result; UpdateDisplay(); } } void TQtCalculator::selection_timed_out(){ // printf("selection timed out\n"); selection_timer->stop(); calc_display->setLit(FALSE); invertColors(); } void TQtCalculator::clear_status_label(){ statusERRORLabel->setText(""); status_timer->stop(); } void TQtCalculator::setStatusLabel(const TQString& string){ statusERRORLabel->setText(string); status_timer->start(3000,TRUE); } void TQtCalculator::invertColors(){ TQColor tmpcolor; if(calc_display->isLit()){ tmpcolor = kcalcdefaults.backcolor; kcalcdefaults.backcolor = kcalcdefaults.forecolor; kcalcdefaults.forecolor = tmpcolor; set_colors(); tmpcolor = kcalcdefaults.backcolor; kcalcdefaults.backcolor = kcalcdefaults.forecolor; kcalcdefaults.forecolor = tmpcolor; } else{ set_colors(); //printf("normal Colors\n"); } } void TQtCalculator::closeEvent( TQCloseEvent*e ) { writeSettings(); e->accept(); } void TQtCalculator::set_colors(){ TQPalette mypalette = (calc_display->palette()).copy(); TQColorGroup cgrp = mypalette.active(); TQColorGroup ncgrp(kcalcdefaults.forecolor, cgrp.background(), cgrp.light(), cgrp.dark(), cgrp.mid(), kcalcdefaults.forecolor, kcalcdefaults.backcolor); mypalette.setActive(ncgrp); mypalette.setDisabled(ncgrp); mypalette.setActive(ncgrp); calc_display->setPalette(mypalette); calc_display->setBackgroundColor(kcalcdefaults.backcolor); } void TQtCalculator::set_precision(){ UpdateDisplay(); } void TQtCalculator::temp_stack_next(){ CALCAMNT *number; if( temp_stack.current() == temp_stack.getLast()){ KNotifyClient::beep(); return; } number = temp_stack.next(); if(number == NULL){ KNotifyClient::beep(); return; } else{ // printf("Number: %Lg\n",*number); last_input = RECALL; DISPLAY_AMOUNT = *number; UpdateDisplay(); } } void TQtCalculator::temp_stack_prev(){ CALCAMNT *number; if( temp_stack.current() == temp_stack.getFirst()){ KNotifyClient::beep(); return; } number = temp_stack.prev(); if(number == NULL){ KNotifyClient::beep(); return; } else{ // printf("Number: %Lg\n",*number); last_input = RECALL; DISPLAY_AMOUNT = *number; UpdateDisplay(); } } #include "kcalc.moc"