www.pudn.com > calculator.rar > stdinputwidgets.cpp
/****************************************************************************
**
** Copyright (C) 2000-2006 TROLLTECH ASA. All rights reserved.
**
** This file is part of the Phone Edition of the Qtopia Toolkit.
**
** Licensees holding a valid license agreement from Trolltech or any of its
** authorized distributors may use this file in accordance with
** the License Agreement provided with the Licensed Software.
**
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
** information about Trolltech's Commercial License Agreements.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**
**
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
****************************************************************************/
#include "stdinputwidgets.h"
extern Engine *systemEngine;
InputWidget::InputWidget( QWidget* parent, Qt::WFlags fl )
: CalcUserInterface( parent, fl)
{
setWhatsThis( tr("Click to enter digit or operator") );
QSizePolicy mySizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
setSizePolicy(mySizePolicy);
}
void InputWidget::evalClicked() {
systemEngine->evaluate();
}
void InputWidget::val1Clicked ()
{
systemEngine->push('1');
}
void InputWidget::val2Clicked ()
{
systemEngine->push('2');
}
void InputWidget::val3Clicked ()
{
systemEngine->push('3');
}
void InputWidget::val4Clicked ()
{
systemEngine->push('4');
}
void InputWidget::val5Clicked ()
{
systemEngine->push('5');
}
void InputWidget::val6Clicked ()
{
systemEngine->push('6');
}
void InputWidget::val7Clicked ()
{
systemEngine->push('7');
}
void InputWidget::val8Clicked ()
{
systemEngine->push('8');
}
void InputWidget::val9Clicked ()
{
systemEngine->push('9');
}
void InputWidget::val0Clicked ()
{
systemEngine->push('0');
}
void InputWidget::addClicked () {
systemEngine->pushInstruction("Add"); // No tr
}
void InputWidget::subClicked () {
systemEngine->pushInstruction("Subtract"); // No tr
}
void InputWidget::mulClicked () {
systemEngine->pushInstruction("Multiply"); // No tr
}
void InputWidget::divClicked () {
systemEngine->pushInstruction("Divide"); // No tr
}
void InputWidget::negClicked () {
systemEngine->pushInstruction("Negate"); // No tr
}
void InputWidget::bsClicked () {
systemEngine->delChar();
}
void InputWidget::init( int fromRow, int fromCol )
{
QFont big(font());
#ifndef QTOPIA_PHONE
big.setPointSize(qMin(big.pointSize()*2,14));
#else
big.setPointSize(qMin(big.pointSize()*2,14));
#endif
// First column
PBBS = new QPushButton;
PBBS->setSizePolicy(sizePolicy());
PBBS->setFont(big);
PBBS->setText( tr("<-") );
InputWidgetLayout->addWidget( PBBS, fromRow, fromCol );
PB7 = new QPushButton;
PB7->setSizePolicy(sizePolicy());
PB7->setFont(big);
PB7->setText( tr( "7" ) );
InputWidgetLayout->addWidget( PB7, fromRow+1, fromCol );
PB4 = new QPushButton( this );
PB4->setSizePolicy(sizePolicy());
PB4->setFont(big);
PB4->setText( tr( "4" ) );
InputWidgetLayout->addWidget( PB4, fromRow+2, fromCol );
PB1 = new QPushButton( this );
PB1->setSizePolicy(sizePolicy());
PB1->setFont(big);
PB1->setText( tr( "1" ) );
InputWidgetLayout->addWidget( PB1, fromRow+3, fromCol );
PB0 = new QPushButton( this );
PB0->setSizePolicy(sizePolicy());
PB0->setFont(big);
PB0->setText( tr( "0" ) );
InputWidgetLayout->addWidget( PB0, fromRow+4, fromCol );
// Second column
PBDiv = new QPushButton( this );
PBDiv->setSizePolicy(sizePolicy());
PBDiv->setFont(big);
PBDiv->setText(QString(QChar(0xF7)));
InputWidgetLayout->addWidget( PBDiv, fromRow, fromCol+1 );
PB8 = new QPushButton( this );
PB8->setSizePolicy(sizePolicy());
PB8->setFont(big);
PB8->setText( tr( "8" ) );
InputWidgetLayout->addWidget( PB8, fromRow+1, fromCol+1 );
PB5 = new QPushButton( this );
PB5->setSizePolicy(sizePolicy());
PB5->setFont(big);
PB5->setText( tr( "5" ) );
InputWidgetLayout->addWidget( PB5, fromRow+2, fromCol+1 );
PB2 = new QPushButton( this );
PB2->setSizePolicy(sizePolicy());
PB2->setFont(big);
PB2->setText( tr( "2" ) );
InputWidgetLayout->addWidget( PB2, fromRow+3, fromCol+1 );
// Thrid column
PBTimes = new QPushButton( this );
PBTimes->setSizePolicy(sizePolicy());
PBTimes->setFont(big);
PBTimes->setText( tr( "x", "times" ) );
InputWidgetLayout->addWidget( PBTimes, fromRow, fromCol+2 );
PB9 = new QPushButton( this );
PB9->setSizePolicy(sizePolicy());
PB9->setFont(big);
PB9->setText( tr( "9" ) );
InputWidgetLayout->addWidget( PB9, fromRow+1, fromCol+2 );
PB6 = new QPushButton( this );
PB6->setSizePolicy(sizePolicy());
PB6->setFont(big);
PB6->setText( tr( "6" ) );
InputWidgetLayout->addWidget( PB6, fromRow+2, fromCol+2 );
PB3 = new QPushButton( this );
PB3->setSizePolicy(sizePolicy());
PB3->setFont(big);
PB3->setText( tr( "3" ) );
InputWidgetLayout->addWidget( PB3, fromRow+3, fromCol+2 );
PBNegate = new QPushButton( this );
PBNegate->setFont(big);
PBNegate->setSizePolicy(sizePolicy());
PBNegate->setText( tr("+/-") );
InputWidgetLayout->addWidget( PBNegate, fromRow+4, fromCol+2 );
// Forth column
PBMinus = new QPushButton( this );
PBMinus->setSizePolicy(sizePolicy());
PBMinus->setFont(big);
PBMinus->setText( tr( "-" ) );
InputWidgetLayout->addWidget( PBMinus, fromRow, fromCol+3 );
PBPlus = new QPushButton( this );
PBPlus->setSizePolicy(sizePolicy());
PBPlus->setFont(big);
PBPlus->setText( tr( "+" ) );
InputWidgetLayout->addWidget( PBPlus, fromRow+1, fromCol+3, 2, 1 );
PBEval = new QPushButton( this );
PBEval->setSizePolicy(sizePolicy());
PBEval->setFont(big);
PBEval->setText( tr( "=" ) );
InputWidgetLayout->addWidget( PBEval, fromRow+3, fromCol+3, 2, 1 );
#ifndef QTOPIA_PHONE
PB0->setFocusPolicy(Qt::TabFocus);
PB1->setFocusPolicy(Qt::TabFocus);
PB2->setFocusPolicy(Qt::TabFocus);
PB3->setFocusPolicy(Qt::TabFocus);
PB4->setFocusPolicy(Qt::TabFocus);
PB5->setFocusPolicy(Qt::TabFocus);
PB6->setFocusPolicy(Qt::TabFocus);
PB7->setFocusPolicy(Qt::TabFocus);
PB8->setFocusPolicy(Qt::TabFocus);
PB9->setFocusPolicy(Qt::TabFocus);
PBEval->setFocusPolicy(Qt::TabFocus);
PBDiv->setFocusPolicy(Qt::TabFocus);
PBPlus->setFocusPolicy(Qt::TabFocus);
PBMinus->setFocusPolicy(Qt::TabFocus);
PBTimes->setFocusPolicy(Qt::TabFocus);
PBNegate->setFocusPolicy(Qt::TabFocus);
PBBS->setFocusPolicy(Qt::TabFocus);
setTabOrder(PB0,PB1);
setTabOrder(PB1,PB2);
setTabOrder(PB2,PB3);
setTabOrder(PB3,PB4);
setTabOrder(PB4,PB5);
setTabOrder(PB5,PB6);
setTabOrder(PB6,PB7);
setTabOrder(PB7,PB8);
setTabOrder(PB8,PB9);
setTabOrder(PB9,PBBS);
setTabOrder(PBBS,PBDiv);
setTabOrder(PBDiv,PBTimes);
setTabOrder(PBTimes,PBMinus);
setTabOrder(PBMinus,PBPlus);
setTabOrder(PBPlus,PBEval);
setTabOrder(PBEval,PBNegate);
#endif
// Connect
connect (PB0, SIGNAL(clicked()), this, SLOT(val0Clicked()));
connect (PB1, SIGNAL(clicked()), this, SLOT(val1Clicked()));
connect (PB2, SIGNAL(clicked()), this, SLOT(val2Clicked()));
connect (PB3, SIGNAL(clicked()), this, SLOT(val3Clicked()));
connect (PB4, SIGNAL(clicked()), this, SLOT(val4Clicked()));
connect (PB5, SIGNAL(clicked()), this, SLOT(val5Clicked()));
connect (PB6, SIGNAL(clicked()), this, SLOT(val6Clicked()));
connect (PB7, SIGNAL(clicked()), this, SLOT(val7Clicked()));
connect (PB8, SIGNAL(clicked()), this, SLOT(val8Clicked()));
connect (PB9, SIGNAL(clicked()), this, SLOT(val9Clicked()));
connect (PBEval, SIGNAL(clicked()), this, SLOT(evalClicked()));
connect (PBPlus, SIGNAL(clicked()), this, SLOT(addClicked()));
connect (PBMinus, SIGNAL(clicked()), this, SLOT(subClicked()));
connect (PBTimes, SIGNAL(clicked()), this, SLOT(mulClicked()));
connect (PBDiv, SIGNAL(clicked()), this, SLOT(divClicked()));
connect (PBNegate, SIGNAL(clicked()), this, SLOT(negClicked()));
connect (PBBS, SIGNAL(clicked()), this, SLOT(bsClicked()));
}
// DECIMAL input widget
DecimalInputWidget::DecimalInputWidget( QWidget* parent, Qt::WFlags fl )
: InputWidget( parent, fl )
{
}
void DecimalInputWidget::init(int fromRow, int fromCol) {
InputWidget::init(fromRow, fromCol);
QFont big(font());
#ifndef QTOPIA_PHONE
big.setPointSize(qMin(big.pointSize()*2,18));
#else
big.setPointSize(qMin(big.pointSize()*2,16));
#endif
PBDecimal = new QPushButton( this );
PBDecimal->setSizePolicy(sizePolicy());
PBDecimal->setText( tr( ".", "decimal point" ) );
#ifndef QTOPIA_PHONE
PBDecimal->setFocusPolicy(Qt::TabFocus);
#endif
PBDecimal->setFont(big);
InputWidgetLayout->addWidget( PBDecimal, fromRow + 4, fromCol + 1);
connect (PBDecimal, SIGNAL(clicked()), this, SLOT(decimalClicked()));
}
void DecimalInputWidget::decimalClicked () {
systemEngine->push('.');
}
// FRACTION input widget
FractionInputWidget::FractionInputWidget( QWidget* parent, Qt::WFlags fl )
: InputWidget( parent, fl )
{
}
void FractionInputWidget::fractionClicked () {
systemEngine->push('/');
}
void FractionInputWidget::init(int fromRow, int fromCol) {
InputWidget::init(fromRow, fromCol);
QFont big(font());
big.setPointSize(qMin(big.pointSize()*2,18));
PBFraction = new QPushButton( this );
PBFraction->setSizePolicy(sizePolicy());
PBFraction->setFocusPolicy(Qt::TabFocus);
PBFraction->setFont(big);
PBFraction->setText( tr( "/" , "seperator numerator - denominator") );
InputWidgetLayout->addWidget( PBFraction, fromRow+4, fromCol+1);
connect (PBFraction, SIGNAL(clicked()), this, SLOT(fractionClicked()));
}