www.pudn.com > calculator.rar > advanced.h


/****************************************************************************
**
** 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.
**
****************************************************************************/
#ifdef ENABLE_SCIENCE

#ifndef ADVANCEDIMPL_H
#define ADVANCEDIMPL_H

#include 
#include 


#include "../engine.h"
#include "stdinputwidgets.h"


class QRadioButton;


class AdvancedButton : public QPushButton {
public:
    AdvancedButton(QWidget *p = 0) : QPushButton(p), inv(false) {
	fontChange( font() );
    }
    void fontChange( const QFont &f ) {
	QFontMetrics fm( f );
	int fontHeight = fm.height();
	setMinimumHeight( fontHeight * 2 );
	fontSize10 = f.pixelSize();
        if (fontSize10 == -1 )
	    fontSize10 = f.pointSize();
	fontSize05 = fontSize10 / 2;
	ascent = fm.ascent();
    }
    
    virtual void advancedDrawLabel( QPainter *p, int x, int y ) = 0;
    void setInversed(bool i) { inv = i; update(); repaint();}
    
    void paintEvent(QPaintEvent *pe)
    {
        QPushButton::paintEvent(pe);
        QPainter p(this);
        
        int x = (width() - fontSize10) / 2;
	int y = ((height() - fontSize10) / 2) + ascent;
	if ( isDown() )
	    x++, y++;
	advancedDrawLabel(&p, x, y);
    }

protected:
    bool inv;
    int fontSize05, fontSize10, ascent;
};


class FormAdvanced:public DecimalInputWidget{
    Q_OBJECT
public:
	FormAdvanced(QWidget * parent = 0);
	virtual ~FormAdvanced();

        QString interfaceName() { return QString(tr("Scientific")); };


protected:
        void init(int fromRow, int fromCol);
        void showEvent ( QShowEvent * );

private:
	QPushButton *PBDel,*PBC;
	QPushButton *PBMR,*PBMC,*PBMPlus;
	QPushButton *PBPi, *PBE;
	QPushButton *PBSin,*PBCos,*PBTan,*PBOneOverX;
	QPushButton *PBLog,*PBFactorial;
	AdvancedButton *PBLn,*PBSquare,*PBPow;
        QPushButton *PBInverse;

        QRadioButton *degree, *radians, *gradians;
        bool IsInverse;

private slots:
	void DelClicked();
	void CClicked();
	void MRClicked();
	void MPlusClicked();
	void MCClicked();
	void SinDegClicked();
	void CosDegClicked();
	void TanDegClicked();
	void SinRadClicked();
	void CosRadClicked();
	void TanRadClicked();
	void SinGraClicked();
	void CosGraClicked();
	void TanGraClicked();
	void OneOverXClicked();
	void LnClicked();
	void FactorialClicked();
	void SquareClicked();
	void PowClicked();
	void PiClicked();
        void EClicked();
        void LogClicked();
        void InverseClicked();
        void DegreeMode(bool);
        void RadiansMode(bool);
        void GradiansMode(bool);
};

#endif //ADVANCEDIMPL_H
#endif //ENABLE_SCIENCE