diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
commit | 8362bf63dea22bbf6736609b0f49c152f975eb63 (patch) | |
tree | 0eea3928e39e50fae91d4e68b21b1e6cbae25604 /kspread/plugins/calculator/kcalc.cpp | |
download | koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip |
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kspread/plugins/calculator/kcalc.cpp')
-rw-r--r-- | kspread/plugins/calculator/kcalc.cpp | 1787 |
1 files changed, 1787 insertions, 0 deletions
diff --git a/kspread/plugins/calculator/kcalc.cpp b/kspread/plugins/calculator/kcalc.cpp new file mode 100644 index 00000000..1726653b --- /dev/null +++ b/kspread/plugins/calculator/kcalc.cpp @@ -0,0 +1,1787 @@ +/* + $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 <klocale.h> +#include <knotifyclient.h> +#include <qlayout.h> +#include <qobjectlist.h> +#include <qpushbutton.h> +#include <kapplication.h> +#include <kglobalsettings.h> +#include <qstyle.h> +#include <kdialog.h> +#include <kconfig.h> +#include <kglobal.h> +#include "kcalc.h" + +extern last_input_type last_input; +extern item_contents display_data; +extern num_base current_base; + +QPtrList<CALCAMNT> temp_stack; + +QtCalculator :: QtCalculator( Calculator *_corba, QWidget *parent, const char *name ) + : QDialog( parent, name ) +{ + + corba = _corba; + mInternalSpacing=4; + key_pressed = false; + selection_timer = new QTimer; + status_timer = new QTimer; + + connect(status_timer,SIGNAL(timeout()),this,SLOT(clear_status_label())); + connect(selection_timer,SIGNAL(timeout()),this,SLOT(selection_timed_out())); + + readSettings(); + + QFont buttonfont( KGlobalSettings::generalFont() ); + buttonfont.setStyleStrategy( QFont::PreferAntialias ); + + // Set the window caption/title + + // connect(kapp,SIGNAL(kdisplayPaletteChanged()),this,SLOT(set_colors())); + // setCaption( kapp->caption() ); + + // create help button + + QPushButton *pb; + + pb = new QPushButton( this, "helpbutton" ); + pb->setText( "kCalc" ); + pb->setFont( QFont("times",12,QFont::Bold,FALSE) ); + QToolTip::add( pb, i18n("KCalc Setup/Help") ); + + connect( pb, SIGNAL(clicked()), SLOT(configclicked()) ); + + // Create the display + calc_display = new DLabel( this, "display" ); + calc_display->setFrameStyle( QFrame::WinPanel | QFrame::Sunken ); + calc_display->setAlignment( AlignRight|AlignVCenter ); + calc_display->setFocus(); + calc_display->setFocusPolicy( QWidget::StrongFocus ); + + connect(calc_display,SIGNAL(clicked()),this,SLOT(display_selected())); + + statusINVLabel = new QLabel( this, "INV" ); + Q_CHECK_PTR( statusINVLabel ); + statusINVLabel->setFrameStyle( QFrame::Panel | QFrame::Sunken ); + statusINVLabel->setAlignment( AlignCenter ); + statusINVLabel->setText("NORM"); + + statusHYPLabel = new QLabel( this, "HYP" ); + Q_CHECK_PTR( statusHYPLabel ); + statusHYPLabel->setFrameStyle( QFrame::Panel | QFrame::Sunken ); + statusHYPLabel->setAlignment( AlignCenter ); + + statusERRORLabel = new QLabel( this, "ERROR" ); + Q_CHECK_PTR( statusERRORLabel ); + statusERRORLabel->setFrameStyle( QFrame::Panel | QFrame::Sunken ); + statusERRORLabel->setAlignment( AlignLeft|AlignVCenter ); + + // create angle button group + + QAccel *accel = new QAccel( this ); + + QButtonGroup *angle_group = new QButtonGroup( 3, Horizontal,this, "AngleButtons" ); + angle_group->setTitle(i18n( "Angle") ); + + anglebutton[0] = new QRadioButton( angle_group ); + anglebutton[0]->setText( "&Deg" ) ; + anglebutton[0]->setChecked( TRUE); + accel->connectItem( accel->insertItem(Key_D + ALT), this , + SLOT(Deg_Selected()) ); + + anglebutton[1] = new QRadioButton( angle_group ); + anglebutton[1]->setText( "&Rad" ); + accel->connectItem( accel->insertItem(Key_R + ALT), this , + SLOT(Rad_Selected()) ); + + anglebutton[2] = new QRadioButton( angle_group ); + anglebutton[2]->setText( "&Gra" ); + accel->connectItem( accel->insertItem(Key_G + ALT), this , + SLOT(Gra_Selected()) ); + + connect( angle_group, SIGNAL(clicked(int)), SLOT(angle_selected(int)) ); + + +////////////////////////////////////////////////////////////////////// +// +// Create Number Base Button Group +// + + + + QButtonGroup *base_group = new QButtonGroup( 4, Horizontal,this, "BaseButtons" ); + base_group->setTitle( i18n("Base") ); + + basebutton[0] = new QRadioButton( base_group ); + basebutton[0]->setText( "&Hex" ); + accel->connectItem( accel->insertItem(Key_H + ALT), this , + SLOT(Hex_Selected()) ); + + basebutton[1] = new QRadioButton( base_group ); + basebutton[1]->setText( "D&ec" ); + basebutton[1]->setChecked(TRUE); + accel->connectItem( accel->insertItem(Key_E + ALT), this , + SLOT(Dec_Selected()) ); + + basebutton[2] = new QRadioButton( base_group ); + basebutton[2]->setText( "&Oct" ); + accel->connectItem( accel->insertItem(Key_O + ALT), this , + SLOT(Oct_Selected()) ); + + basebutton[3] = new QRadioButton( base_group); + basebutton[3]->setText( "&Bin" ); + accel->connectItem( accel->insertItem(Key_B + ALT), this , + SLOT(Bin_Selected()) ); + + connect( base_group, SIGNAL(clicked(int)), SLOT(base_selected(int)) ); + +//////////////////////////////////////////////////////////////////////// +// +// Create Calculator Buttons +// + + + // First the widgets that are the parents of the buttons + mSmallPage = new QWidget(this); + mLargePage = new QWidget(this); + + pbhyp = new QPushButton("Hyp", mSmallPage, "hypbutton" ); + connect( pbhyp, SIGNAL(toggled(bool)), SLOT(pbhyptoggled(bool))); + pbhyp->setToggleButton(TRUE); + + pbinv = new QPushButton( "Inv", mSmallPage, "InverseButton" ); + connect( pbinv, SIGNAL(toggled(bool)), SLOT(pbinvtoggled(bool))); + pbinv->setToggleButton(TRUE); + + pbA = new QPushButton("A",mSmallPage, "Abutton" ); + connect( pbA, SIGNAL(toggled(bool)), SLOT(pbAtoggled(bool))); + pbA->setToggleButton(TRUE); + + pbSin = new QPushButton("Sin",mSmallPage, "Sinbutton" ); + connect( pbSin, SIGNAL(toggled(bool)), SLOT(pbSintoggled(bool))); + pbSin->setToggleButton(TRUE); + + pbplusminus = new QPushButton( "+/-", mSmallPage, "plusminusbutton" ); + connect( pbplusminus, SIGNAL(toggled(bool)), SLOT(pbplusminustoggled(bool))); + pbplusminus->setToggleButton(TRUE); + pbplusminus->setFont(buttonfont); + + pbB = new QPushButton("B", mSmallPage, "Bbutton" ); + connect( pbB, SIGNAL(toggled(bool)), SLOT(pbBtoggled(bool))); + pbB->setToggleButton(TRUE); + + pbCos = new QPushButton("Cos",mSmallPage, "Cosbutton" ); + pbCos->setText( "Cos" ); + connect( pbCos, SIGNAL(toggled(bool)), SLOT(pbCostoggled(bool))); + pbCos->setToggleButton(TRUE); + + + pbreci = new QPushButton("1/x",mSmallPage, "recibutton" ); + connect( pbreci, SIGNAL(toggled(bool)), SLOT(pbrecitoggled(bool))); + pbreci->setToggleButton(TRUE); + + pbC = new QPushButton( "C", mSmallPage, "Cbutton" ); + connect( pbC, SIGNAL(toggled(bool)), SLOT(pbCtoggled(bool))); + pbC->setToggleButton(TRUE); + + pbTan = new QPushButton("Tan" ,mSmallPage, "Tanbutton" ); + connect( pbTan, SIGNAL(toggled(bool)), SLOT(pbTantoggled(bool))); + pbTan->setToggleButton(TRUE); + + pbfactorial = new QPushButton("x!",mSmallPage, "factorialbutton" ); + connect( pbfactorial, SIGNAL(toggled(bool)), SLOT(pbfactorialtoggled(bool))); + pbfactorial->setToggleButton(TRUE); + + pbD = new QPushButton("D",mSmallPage, "Dbutton" ); + connect( pbD, SIGNAL(toggled(bool)), SLOT(pbDtoggled(bool))); + pbD->setToggleButton(TRUE); + + pblog = new QPushButton("Log",mSmallPage, "logbutton" ); + connect( pblog, SIGNAL(toggled(bool)), SLOT(pblogtoggled(bool))); + pblog->setToggleButton(TRUE); + + pbsquare = new QPushButton( "x^2", mSmallPage, "squarebutton" ); + connect( pbsquare, SIGNAL(toggled(bool)), SLOT(pbsquaretoggled(bool))); + pbsquare->setToggleButton(TRUE); + + pbE = new QPushButton("E",mSmallPage, "Ebutton" ); + connect( pbE, SIGNAL(toggled(bool)), SLOT(pbEtoggled(bool))); + pbE->setToggleButton(TRUE); + + + pbln = new QPushButton( "Ln", mSmallPage, "lnbutton" ); + connect( pbln, SIGNAL(toggled(bool)), SLOT(pblntoggled(bool))); + pbln->setToggleButton(TRUE); + + pbpower = new QPushButton("x^y",mSmallPage, "powerbutton" ); + connect( pbpower, SIGNAL(toggled(bool)), SLOT(pbpowertoggled(bool))); + pbpower->setToggleButton(TRUE); + + pbF = new QPushButton("F",mSmallPage, "Fbutton" ); + connect( pbF, SIGNAL(toggled(bool)), SLOT(pbFtoggled(bool))); + pbF->setToggleButton(TRUE); + + pbEE = new QPushButton("EE",mLargePage, "EEbutton" ); + pbEE->setToggleButton(TRUE); + connect( pbEE, SIGNAL(toggled(bool)), SLOT(EEtoggled(bool))); + + pbMR = new QPushButton("MR",mLargePage, "MRbutton" ); + connect( pbMR, SIGNAL(toggled(bool)), SLOT(pbMRtoggled(bool))); + pbMR->setToggleButton(TRUE); + pbMR->setFont(buttonfont); + + pbMplusminus = new QPushButton("M+-",mLargePage, "Mplusminusbutton" ); + connect( pbMplusminus, SIGNAL(toggled(bool)), SLOT(pbMplusminustoggled(bool))); + pbMplusminus->setToggleButton(TRUE); + + pbMC = new QPushButton("MC",mLargePage, "MCbutton" ); + connect( pbMC, SIGNAL(toggled(bool)), SLOT(pbMCtoggled(bool))); + pbMC->setToggleButton(TRUE); + + pbClear = new QPushButton("C",mLargePage, "Clearbutton" ); + connect( pbClear, SIGNAL(toggled(bool)), SLOT(pbCleartoggled(bool))); + pbClear->setToggleButton(TRUE); + + pbAC = new QPushButton("AC", mLargePage, "ACbutton" ); + connect( pbAC, SIGNAL(toggled(bool)), SLOT(pbACtoggled(bool))); + pbAC->setToggleButton(TRUE); + + pb7 = new QPushButton("7",mLargePage, "7button" ); + connect( pb7, SIGNAL(toggled(bool)), SLOT(pb7toggled(bool))); + pb7->setToggleButton(TRUE); + + pb8 = new QPushButton("8",mLargePage, "8button" ); + connect( pb8, SIGNAL(toggled(bool)), SLOT(pb8toggled(bool))); + pb8->setToggleButton(TRUE); + + pb9 = new QPushButton("9",mLargePage,"9button" ); + connect( pb9, SIGNAL(toggled(bool)), SLOT(pb9toggled(bool))); + pb9->setToggleButton(TRUE); + + pbparenopen = new QPushButton("(",mLargePage, "parenopenbutton" ); + connect( pbparenopen, SIGNAL(toggled(bool)), SLOT(pbparenopentoggled(bool))); + pbparenopen->setToggleButton(TRUE); + + pbparenclose = new QPushButton(")",mLargePage, "parenclosebutton" ); + connect( pbparenclose, SIGNAL(toggled(bool)), SLOT(pbparenclosetoggled(bool))); + pbparenclose->setToggleButton(TRUE); + + pband = new QPushButton("And",mLargePage, "andbutton" ); + connect( pband, SIGNAL(toggled(bool)), SLOT(pbandtoggled(bool))); + pband->setToggleButton(TRUE); + pband->setFont(buttonfont); + + pb4 = new QPushButton("4",mLargePage, "4button" ); + connect( pb4, SIGNAL(toggled(bool)), SLOT(pb4toggled(bool))); + pb4->setToggleButton(TRUE); + + pb5 = new QPushButton("5",mLargePage, "5button" ); + connect( pb5, SIGNAL(toggled(bool)), SLOT(pb5toggled(bool))); + pb5->setToggleButton(TRUE); + + pb6 = new QPushButton("6",mLargePage, "6button" ); + connect( pb6, SIGNAL(toggled(bool)), SLOT(pb6toggled(bool))); + pb6->setToggleButton(TRUE); + + pbX = new QPushButton("X",mLargePage, "Multiplybutton" ); + connect( pbX, SIGNAL(toggled(bool)), SLOT(pbXtoggled(bool))); + pbX->setToggleButton(TRUE); + + pbdivision = new QPushButton("/",mLargePage, "divisionbutton" ); + connect( pbdivision, SIGNAL(toggled(bool)), SLOT(pbdivisiontoggled(bool))); + pbdivision->setToggleButton(TRUE); + + pbor = new QPushButton("Or",mLargePage, "orbutton" ); + connect( pbor, SIGNAL(toggled(bool)), SLOT(pbortoggled(bool))); + pbor->setToggleButton(TRUE); + + pb1 = new QPushButton("1",mLargePage, "1button" ); + connect( pb1, SIGNAL(toggled(bool)), SLOT(pb1toggled(bool))); + pb1->setToggleButton(TRUE); + + pb2 = new QPushButton("2",mLargePage, "2button" ); + + connect( pb2, SIGNAL(toggled(bool)), SLOT(pb2toggled(bool))); + pb2->setToggleButton(TRUE); + + pb3 = new QPushButton("3",mLargePage, "3button" ); + connect( pb3, SIGNAL(toggled(bool)), SLOT(pb3toggled(bool))); + pb3->setToggleButton(TRUE); + + pbplus = new QPushButton("+",mLargePage, "plusbutton" ); + connect( pbplus, SIGNAL(toggled(bool)), SLOT(pbplustoggled(bool))); + pbplus->setToggleButton(TRUE); + + + pbminus = new QPushButton("-",mLargePage, "minusbutton" ); + connect( pbminus, SIGNAL(toggled(bool)), SLOT(pbminustoggled(bool))); + pbminus->setToggleButton(TRUE); + + pbshift = new QPushButton("Lsh",mLargePage, "shiftbutton" ); + connect( pbshift, SIGNAL(toggled(bool)), SLOT(pbshifttoggled(bool))); + pbshift->setToggleButton(TRUE); + + pbperiod = new QPushButton(".",mLargePage, "periodbutton" ); + connect( pbperiod, SIGNAL(toggled(bool)), SLOT(pbperiodtoggled(bool))); + pbperiod->setToggleButton(TRUE); + + pb0 = new QPushButton("0",mLargePage, "0button" ); + connect( pb0, SIGNAL(toggled(bool)), SLOT(pb0toggled(bool))); + pb0->setToggleButton(TRUE); + + pbequal = new QPushButton("=",mLargePage, "equalbutton" ); + connect( pbequal, SIGNAL(toggled(bool)), SLOT(pbequaltoggled(bool))); + pbequal->setToggleButton(TRUE); + + pbpercent = new QPushButton("%",mLargePage, "percentbutton" ); + connect( pbpercent, SIGNAL(toggled(bool)), SLOT(pbpercenttoggled(bool))); + pbpercent->setToggleButton(TRUE); + + pbnegate = new QPushButton("Cmp",mLargePage, "OneComplementbutton" ); + connect( pbnegate, SIGNAL(toggled(bool)), SLOT(pbnegatetoggled(bool))); + pbnegate->setToggleButton(TRUE); + + pbmod = new QPushButton("Mod",mLargePage, "modbutton" ); + connect( pbmod, SIGNAL(toggled(bool)), SLOT(pbmodtoggled(bool))); + pbmod->setToggleButton(TRUE); + + QGridLayout *smallBtnLayout = new QGridLayout(mSmallPage, 6, 3, 0, + mInternalSpacing); + QGridLayout *largeBtnLayout = new QGridLayout(mLargePage, 5, 6, 0, + mInternalSpacing); + + QHBoxLayout *topLayout = new QHBoxLayout(); + QHBoxLayout *radioLayout = new QHBoxLayout(); + QHBoxLayout *btnLayout = new QHBoxLayout(); + QHBoxLayout *statusLayout = new QHBoxLayout(); + + // bring them all together + QVBoxLayout *mainLayout = new QVBoxLayout(this, mInternalSpacing, + mInternalSpacing ); + + mainLayout->addLayout(topLayout ); + mainLayout->addLayout(radioLayout, 1); + mainLayout->addLayout(btnLayout); + mainLayout->addLayout(statusLayout); + + // button layout + btnLayout->addWidget(mSmallPage,0,AlignTop); + btnLayout->addSpacing(mInternalSpacing); + btnLayout->addWidget(mLargePage,0,AlignTop); + + // small button layout + 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 layout + 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 layout + radioLayout->addWidget(base_group); + radioLayout->addWidget(angle_group); + + // status layout + 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(); +} + +QtCalculator::~QtCalculator() +{ + delete selection_timer; + delete status_timer; + +} + +void QtCalculator::set_display_font() +{ + calc_display->setFont(kcalcdefaults.font); +} + +void QtCalculator::updateGeometry() +{ + QObjectList *l; + QSize s; + int margin; + + // + // Uppermost bar + // + calc_display->setMinimumWidth(calc_display->fontMetrics().maxWidth() * 15); + + // + // Button groups (base and angle) + // + //QButtonGroup *g; + //g = (QButtonGroup*)(anglebutton[0]->parentWidget()); + //g = (QButtonGroup*)(basebutton[0]->parentWidget()); + + // + // Calculator buttons + // + s.setWidth(mSmallPage->fontMetrics().width("MMM")); + s.setHeight(mSmallPage->fontMetrics().lineSpacing()); + + l = (QObjectList*)mSmallPage->children(); // silence please + + for(uint i=0; i < l->count(); i++) + { + QObject *o = l->at(i); + if( o->isWidgetType() ) + { + margin = QApplication::style(). + pixelMetric(QStyle::PM_ButtonMargin, ((QWidget *)o))*2; + ((QWidget*)o)->setMinimumSize(s.width()+margin, s.height()+margin); + ((QWidget*)o)->installEventFilter( this ); + ((QWidget*)o)->setAcceptDrops(true); + } + } + + l = (QObjectList*)mLargePage->children(); // silence please + + int h1 = pbF->minimumSize().height(); + int h2 = (int)((((float)h1 + 4.0) / 5.0)); + s.setWidth(mLargePage->fontMetrics().width("MMM") + + QApplication::style(). + pixelMetric(QStyle::PM_ButtonMargin, pbF)*2); + s.setHeight(h1 + h2); + + for(uint i = 0; i < l->count(); i++) + { + QObject *o = l->at(i); + if(o->isWidgetType()) + { + ((QWidget*)o)->setFixedSize(s); + ((QWidget*)o)->installEventFilter(this); + ((QWidget*)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(minimumSize()); +} + +void QtCalculator::exit() +{ + // QApplication::exit(); +} + +void QtCalculator::Hex_Selected() +{ + basebutton[0]->setChecked(TRUE); + basebutton[1]->setChecked(FALSE); + basebutton[2]->setChecked(FALSE); + basebutton[3]->setChecked(FALSE); + SetHex(); +} + + +void QtCalculator::Dec_Selected() +{ + basebutton[0]->setChecked(FALSE); + basebutton[1]->setChecked(TRUE); + basebutton[2]->setChecked(FALSE); + basebutton[3]->setChecked(FALSE); + SetDec(); +} + + +void QtCalculator::Oct_Selected() +{ + basebutton[0]->setChecked(FALSE); + basebutton[1]->setChecked(FALSE); + basebutton[2]->setChecked(TRUE); + basebutton[3]->setChecked(FALSE); + SetOct(); +} + + + +void QtCalculator::Bin_Selected() +{ + basebutton[0]->setChecked(FALSE); + basebutton[1]->setChecked(FALSE); + basebutton[2]->setChecked(FALSE); + basebutton[3]->setChecked(TRUE); + SetBin(); +} + +void QtCalculator::Deg_Selected() +{ + anglebutton[0]->setChecked(TRUE); + anglebutton[1]->setChecked(FALSE); + anglebutton[2]->setChecked(FALSE); + SetDeg(); +} + + +void QtCalculator::Rad_Selected() +{ + anglebutton[0]->setChecked(FALSE); + anglebutton[1]->setChecked(TRUE); + anglebutton[2]->setChecked(FALSE); + SetRad(); + +} + + +void QtCalculator::Gra_Selected() +{ + anglebutton[0]->setChecked(FALSE); + anglebutton[1]->setChecked(FALSE); + anglebutton[2]->setChecked(TRUE); + SetGra(); +} + + +void QtCalculator::helpclicked(){ +} + +void QtCalculator::keyPressEvent( QKeyEvent *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 QtCalculator::keyReleaseEvent( QKeyEvent *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 QtCalculator::clear_buttons(){ + +} + +void QtCalculator::EEtoggled(bool myboolean){ + + if(myboolean) + EE(); + if(pbEE->isOn() && (!key_pressed)) + pbEE->setOn(FALSE); +} + +void QtCalculator::pbinvtoggled(bool myboolean){ + if(myboolean) + SetInverse(); + if(pbinv->isOn() && (!key_pressed)) + pbinv->setOn(FALSE); +} + +void QtCalculator::pbhyptoggled(bool myboolean){ + if(myboolean) + EnterHyp(); + if(pbhyp->isOn() && (!key_pressed)) + pbhyp->setOn(FALSE); +} +void QtCalculator::pbMRtoggled(bool myboolean){ + if(myboolean) + MR(); + if(pbMR->isOn() && (!key_pressed)) + pbMR->setOn(FALSE); +} + +void QtCalculator::pbAtoggled(bool myboolean){ + if(myboolean) + buttonA(); + if(pbA->isOn() && (!key_pressed)) + pbA->setOn(FALSE); +} + +void QtCalculator::pbSintoggled(bool myboolean){ + if(myboolean) + ExecSin(); + if(pbSin->isOn() && (!key_pressed)) + pbSin->setOn(FALSE); +} +void QtCalculator::pbplusminustoggled(bool myboolean){ + if(myboolean) + EnterNegate(); + if(pbplusminus->isOn() && (!key_pressed)) + pbplusminus->setOn(FALSE); +} +void QtCalculator::pbMplusminustoggled(bool myboolean){ + if(myboolean) + Mplusminus(); + if(pbMplusminus->isOn() && (!key_pressed)) + pbMplusminus->setOn(FALSE); +} +void QtCalculator::pbBtoggled(bool myboolean){ + if(myboolean) + buttonB(); + if(pbB->isOn() && (!key_pressed)) + pbB->setOn(FALSE); +} +void QtCalculator::pbCostoggled(bool myboolean){ + if(myboolean) + ExecCos(); + if(pbCos->isOn() && (!key_pressed)) + pbCos->setOn(FALSE); +} +void QtCalculator::pbrecitoggled(bool myboolean){ + if(myboolean) + EnterRecip(); + if(pbreci->isOn() && (!key_pressed)) + pbreci->setOn(FALSE); +} +void QtCalculator::pbCtoggled(bool myboolean){ + if(myboolean) + buttonC(); + if(pbC->isOn() && (!key_pressed)) + pbC->setOn(FALSE); +} +void QtCalculator::pbTantoggled(bool myboolean){ + if(myboolean) + ExecTan(); + if(pbTan->isOn() && (!key_pressed)) + pbTan->setOn(FALSE); +} +void QtCalculator::pbfactorialtoggled(bool myboolean){ + if(myboolean) + EnterFactorial(); + if(pbfactorial->isOn() && (!key_pressed)) + pbfactorial->setOn(FALSE); +} +void QtCalculator::pbDtoggled(bool myboolean){ + if(myboolean) + buttonD(); + if(pbD->isOn() && (!key_pressed)) + pbD->setOn(FALSE); +} +void QtCalculator::pblogtoggled(bool myboolean){ + if(myboolean) + EnterLogr(); + if(pblog->isOn() && (!key_pressed)) + pblog->setOn(FALSE); +} +void QtCalculator::pbsquaretoggled(bool myboolean){ + if(myboolean) + EnterSquare(); + if(pbsquare->isOn() && (!key_pressed)) + pbsquare->setOn(FALSE); +} +void QtCalculator::pbEtoggled(bool myboolean){ + if(myboolean) + buttonE(); + if(pbE->isOn() && (!key_pressed)) + pbE->setOn(FALSE); +} +void QtCalculator::pblntoggled(bool myboolean){ + if(myboolean) + EnterLogn(); + if(pbln->isOn() && (!key_pressed)) + pbln->setOn(FALSE); +} +void QtCalculator::pbpowertoggled(bool myboolean){ + if(myboolean) + Power(); + if(pbpower->isOn() && (!key_pressed)) + pbpower->setOn(FALSE); +} +void QtCalculator::pbFtoggled(bool myboolean){ + if(myboolean) + buttonF(); + if(pbF->isOn() && (!key_pressed)) + pbF->setOn(FALSE); +} +void QtCalculator::pbMCtoggled(bool myboolean){ + if(myboolean) + MC(); + if(pbMC->isOn() && (!key_pressed)) + pbMC->setOn(FALSE); +} +void QtCalculator::pbCleartoggled(bool myboolean){ + if(myboolean) + Clear(); + if(pbClear->isOn() && (!key_pressed)) + pbClear->setOn(FALSE); +} +void QtCalculator::pbACtoggled(bool myboolean){ + if(myboolean) + ClearAll(); + if(pbAC->isOn() && (!key_pressed)) + pbAC->setOn(FALSE); +} +void QtCalculator::pb7toggled(bool myboolean){ + if(myboolean) + button7(); + if(pb7->isOn() && (!key_pressed)) + pb7->setOn(FALSE); +} +void QtCalculator::pb8toggled(bool myboolean){ + if(myboolean) + button8(); + if(pb8->isOn() && (!key_pressed)) + pb8->setOn(FALSE); +} +void QtCalculator::pb9toggled(bool myboolean){ + if(myboolean) + button9(); + if(pb9->isOn() && (!key_pressed)) + pb9->setOn(FALSE); +} +void QtCalculator::pbparenopentoggled(bool myboolean){ + if(myboolean) + EnterOpenParen(); + if(pbparenopen->isOn() && (!key_pressed)) + pbparenopen->setOn(FALSE); +} +void QtCalculator::pbparenclosetoggled(bool myboolean){ + if(myboolean) + EnterCloseParen(); + if(pbparenclose->isOn() && (!key_pressed)) + pbparenclose->setOn(FALSE); +} +void QtCalculator::pbandtoggled(bool myboolean){ + if(myboolean) + And(); + if(pband->isOn() && (!key_pressed)) + pband->setOn(FALSE); +} +void QtCalculator::pb4toggled(bool myboolean){ + if(myboolean) + button4(); + if(pb4->isOn() && (!key_pressed)) + pb4->setOn(FALSE); +} +void QtCalculator::pb5toggled(bool myboolean){ + if(myboolean) + button5(); + if(pb5->isOn() && (!key_pressed)) + pb5->setOn(FALSE); +} +void QtCalculator::pb6toggled(bool myboolean){ + if(myboolean) + button6(); + if(pb6->isOn() && (!key_pressed)) + pb6->setOn(FALSE); +} +void QtCalculator::pbXtoggled(bool myboolean){ + if(myboolean) + Multiply(); + if(pbX->isOn() && (!key_pressed)) + pbX->setOn(FALSE); +} +void QtCalculator::pbdivisiontoggled(bool myboolean){ + if(myboolean) + Divide(); + if(pbdivision->isOn() && (!key_pressed)) + pbdivision->setOn(FALSE); +} +void QtCalculator::pbortoggled(bool myboolean){ + if(myboolean) + Or(); + if(pbor->isOn() && (!key_pressed)) + pbor->setOn(FALSE); +} +void QtCalculator::pb1toggled(bool myboolean){ + if(myboolean) + button1(); + if(pb1->isOn() && (!key_pressed)) + pb1->setOn(FALSE); +} +void QtCalculator::pb2toggled(bool myboolean){ + if(myboolean) + button2(); + if(pb2->isOn() && (!key_pressed)) + pb2->setOn(FALSE); +} +void QtCalculator::pb3toggled(bool myboolean){ + if(myboolean) + button3(); + if(pb3->isOn() && (!key_pressed)) + pb3->setOn(FALSE); +} +void QtCalculator::pbplustoggled(bool myboolean){ + if(myboolean) + Plus(); + if(pbplus->isOn() && (!key_pressed)) + pbplus->setOn(FALSE); +} +void QtCalculator::pbminustoggled(bool myboolean){ + if(myboolean) + Minus(); + if(pbminus->isOn() && (!key_pressed)) + pbminus->setOn(FALSE); +} +void QtCalculator::pbshifttoggled(bool myboolean){ + if(myboolean) + Shift(); + if(pbshift->isOn() && (!key_pressed)) + pbshift->setOn(FALSE); +} +void QtCalculator::pbperiodtoggled(bool myboolean){ + if(myboolean) + EnterDecimal(); + if(pbperiod->isOn() && (!key_pressed)) + pbperiod->setOn(FALSE); +} +void QtCalculator::pb0toggled(bool myboolean){ + if(myboolean) + button0(); + if(pb0->isOn() && (!key_pressed)) + pb0->setOn(FALSE); +} +void QtCalculator::pbequaltoggled(bool myboolean){ + if(myboolean) + EnterEqual(); + if(pbequal->isOn() && (!key_pressed)) + pbequal->setOn(FALSE); +} +void QtCalculator::pbpercenttoggled(bool myboolean){ + if(myboolean) + EnterPercent(); + if(pbpercent->isOn() && (!key_pressed)) + pbpercent->setOn(FALSE); +} +void QtCalculator::pbnegatetoggled(bool myboolean){ + if(myboolean) + EnterNotCmp(); + if(pbnegate->isOn() && (!key_pressed)) + pbnegate->setOn(FALSE); +} +void QtCalculator::pbmodtoggled(bool myboolean) { + if(myboolean) + Mod(); + if(pbmod->isOn() && (!key_pressed)) + pbmod->setOn(FALSE); +} + +void QtCalculator::configclicked(){ + + + QTabDialog * tabdialog; + tabdialog = new QTabDialog(0,"tabdialog",TRUE); + + tabdialog->setCaption( i18n("KCalc Configuration") ); + tabdialog->resize( 360, 390 ); + tabdialog->setCancelButton( i18n("&Cancel") ); + tabdialog->setOKButton(i18n("&OK")); + + QWidget *about = new QWidget(tabdialog,"about"); + QVBoxLayout *lay1 = new QVBoxLayout( about ); + lay1->setMargin( KDialog::marginHint() ); + lay1->setSpacing( KDialog::spacingHint() ); + + QGroupBox *box = new QGroupBox(0,Qt::Vertical,about,"box"); + box->layout()->setSpacing(KDialog::spacingHint()); + box->layout()->setMargin(KDialog::marginHint()); + QGridLayout *grid1 = new QGridLayout(box->layout(),2,2); + QLabel *label = new QLabel(box,"label"); + QLabel *label2 = new QLabel(box,"label2"); + + box->setTitle(i18n("About")); + grid1->addWidget(label,0,1); + grid1->addMultiCellWidget(label2,2,2,0,1); + + QString labelstring = "KCalc "KCALCVERSION"\n"\ + "Bernd Johannes Wuebben\n"\ + "wuebben@math.cornell.edu\n"\ + "wuebben@kde.org\n"\ + "Copyright (C) 1996-98\n"\ + "\n\n"; + + QString 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->setAlignment(AlignLeft|WordBreak|ExpandTabs); + label->setText(labelstring); + + label2->setAlignment(AlignLeft|WordBreak|ExpandTabs); + label2->setText(labelstring2); + + // HACK + // QPixmap pm( BarIcon( "kcalclogo" ) ); + QPixmap pm; + QLabel *logo = new QLabel(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() == QDialog::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(minimumSize()); + } + delete configdlg; +} + + +void QtCalculator::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 QtCalculator::readSettings() +{ + QColor tmpC(189, 255, 180); + QColor 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 QtCalculator::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 QtCalculator::display_selected(){ + + if(calc_display->Button() == LeftButton){ + + if(calc_display->isLit()){ + + QClipboard *cb = QApplication::clipboard(); + cb->setText(calc_display->text()); + selection_timer->start(100); + + } + else{ + + selection_timer->stop(); + + } + + invertColors(); + } + else{ + + QClipboard *cb = QApplication::clipboard(); + + CALCAMNT result; + result = (CALCAMNT) cb->text().toDouble(); + // printf("%Lg\n",result); + last_input = PASTE; + DISPLAY_AMOUNT = result; + UpdateDisplay(); + } + +} + +void QtCalculator::selection_timed_out(){ + + // printf("selection timed out\n"); + selection_timer->stop(); + calc_display->setLit(FALSE); + invertColors(); + + +} + + +void QtCalculator::clear_status_label(){ + + statusERRORLabel->setText(""); + status_timer->stop(); +} + +void QtCalculator::setStatusLabel(const QString& string){ + + statusERRORLabel->setText(string); + status_timer->start(3000,TRUE); + +} + + +void QtCalculator::invertColors(){ + + QColor 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 QtCalculator::closeEvent( QCloseEvent*e ) +{ + writeSettings(); + e->accept(); +} + +void QtCalculator::set_colors(){ + + + QPalette mypalette = (calc_display->palette()).copy(); + + QColorGroup cgrp = mypalette.active(); + QColorGroup 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 QtCalculator::set_precision(){ + + UpdateDisplay(); +} + +void QtCalculator::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 QtCalculator::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" |