?? advanced.cpp
字號(hào):
/******************************************************************************** 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#include "advanced.h"#include "../doubleinstruction.h"#include <QLayout>#include <QPainter>#include <QRadioButton>#include <QDesktopWidget>#include <qtopia/qtopiaapplication.h>static void drawRootOfX(QPainter *p, int x, int y, int fontSize){ int fontSize05 = fontSize / 2; p->drawText(x+fontSize05-2,y,"x"); p->drawLine(x-fontSize,y-fontSize05,x-fontSize05,y); p->drawLine(x-fontSize05,y,x,y-fontSize); p->drawLine(x,y-fontSize,x+fontSize+3,y-fontSize);} class PowerButton : public AdvancedButton {public: PowerButton(QWidget *p = 0) : AdvancedButton(p) { } void advancedDrawLabel( QPainter *p, int x, int y ) { if ( inv ) { p->drawText(x - 5, y - fontSize05 - 2, "y"); drawRootOfX(p, x + fontSize05 - 2, y + 2, fontSize10); } else { p->drawText(x, y, "x"); p->drawText(x + fontSize05, y - fontSize05, "y"); } }};class SquareButton : public AdvancedButton {public: SquareButton(QWidget *p = 0) : AdvancedButton(p) { } void advancedDrawLabel( QPainter *p, int x, int y ) { if ( inv ) { drawRootOfX(p, x, y, fontSize10); } else { p->drawText(x, y, "x"); p->drawText(x+fontSize05, y-fontSize05, "2"); } }}; class LnButton : public AdvancedButton {public: LnButton(QWidget *p = 0) : AdvancedButton(p) { } void advancedDrawLabel( QPainter *p, int x, int y ) { if ( inv ) { p->drawText(x, y, "e"); p->drawText(x+fontSize05, y-fontSize05, "x"); } else { p->drawText(x, y, "Ln"); } }};class OneOverButton : public AdvancedButton {public: OneOverButton(QWidget *p = 0) : AdvancedButton(p) { } void advancedDrawLabel( QPainter *p, int x, int y ) { p->drawText(x + fontSize05, y - fontSize05, "1"); int between = y + (fontSize05 / 2) - fontSize05; p->drawLine(x, between, x + fontSize10 + fontSize05, between); p->drawText(x + fontSize05, y + fontSize05, "x"); }}; FormAdvanced::FormAdvanced(QWidget *parent) : DecimalInputWidget(parent), IsInverse(false){ setWhatsThis(tr("The scientific calculator plugin provides the most comprehensive " "interface. Many buttons have a second mode which can be activated via <b>INV</b>.")); setObjectName( "FormAdvanced" ); InputWidgetLayout = new QGridLayout(this); InputWidgetLayout->setSpacing( 0 ); InputWidgetLayout->setMargin( 0 ); init(0, 0);}void FormAdvanced::init(int fromRow, int fromCol) { QWidget * gridWidget = new QWidget(this); QHBoxLayout *hlayout = new QHBoxLayout( gridWidget ); hlayout->setMargin( 0 ); hlayout->setSpacing( 0 ); gridWidget->setSizePolicy(sizePolicy()); degree = new QRadioButton(tr("Deg", "Degree mode")); hlayout->addWidget( degree ); degree->setWhatsThis(tr("Calculate in degree mode")); radians = new QRadioButton(tr("Rad", "Radian mode")); hlayout->addWidget( radians ); radians->setWhatsThis(tr("Calculate in radian mode")); gradians = new QRadioButton(tr("Gra", "Gradian mode")); hlayout->addWidget( gradians ); gradians->setWhatsThis(tr("Calculate in gradian mode")); degree->setChecked(true); connect(degree, SIGNAL(toggled(bool)), this, SLOT(DegreeMode(bool))); connect(radians, SIGNAL(toggled(bool)), this, SLOT(RadiansMode(bool))); connect(gradians, SIGNAL(toggled(bool)), this, SLOT(GradiansMode(bool))); QRect screenRect = QtopiaApplication::desktop()->availableGeometry(); bool portrait = screenRect.width() < screenRect.height(); if ( portrait) { //portrait InputWidgetLayout->addWidget(gridWidget, fromRow, fromCol, 1, 4); DecimalInputWidget::init(fromRow+6, fromCol); } else { //landscape InputWidgetLayout->addWidget(gridWidget, fromRow, fromCol, 1, 4); DecimalInputWidget::init(fromRow, fromCol+4); } PBMPlus = new QPushButton; PBMPlus->setSizePolicy(sizePolicy()); PBMPlus->setText(tr("M+")); PBMR = new QPushButton; PBMR->setSizePolicy(sizePolicy()); PBMR->setText(tr("MR")); PBMC = new QPushButton; PBMC->setSizePolicy(sizePolicy()); PBMC->setText(tr("MC")); PBC = new QPushButton; PBC->setSizePolicy(sizePolicy()); PBC->setText(tr("CE/C")); if (portrait) { InputWidgetLayout->addWidget(PBMPlus, fromRow+1, fromCol); InputWidgetLayout->addWidget(PBMR, fromRow + 1, fromCol+1); InputWidgetLayout->addWidget(PBMC, fromRow+1, fromCol+2); InputWidgetLayout->addWidget(PBC, fromRow+1, fromCol+3); } else { InputWidgetLayout->addWidget(PBMPlus, fromRow+3, fromCol+3); InputWidgetLayout->addWidget(PBMR, fromRow+4, fromCol+3); InputWidgetLayout->addWidget(PBMC, fromRow+2, fromCol+3); InputWidgetLayout->addWidget(PBC, fromRow+1, fromCol+3); } PBPi = new QPushButton; PBPi->setSizePolicy(sizePolicy()); PBPi->setText(tr("Pi")); PBE = new QPushButton; PBE->setSizePolicy(sizePolicy()); PBE->setText(tr("e")); PBSin = new QPushButton; PBSin->setSizePolicy(sizePolicy()); PBSin->setText(tr("Sin")); PBCos = new QPushButton; PBCos->setSizePolicy(sizePolicy()); PBCos->setText(tr("Cos")); PBTan = new QPushButton; PBTan->setSizePolicy(sizePolicy()); PBTan->setText(tr("Tan")); PBFactorial = new QPushButton; PBFactorial->setSizePolicy(sizePolicy()); PBFactorial->setText(tr("n!")); PBLn = (AdvancedButton*)new LnButton; PBLn->setSizePolicy(sizePolicy()); PBInverse = new QPushButton; PBInverse->setSizePolicy(sizePolicy()); PBInverse->setText(tr("INV", "inverse mode")); PBSquare = (AdvancedButton*)new SquareButton; PBSquare->setSizePolicy(sizePolicy()); PBPow = (AdvancedButton*)new PowerButton; PBPow->setSizePolicy(sizePolicy()); PBOneOverX = (QPushButton*)new OneOverButton; PBOneOverX->setSizePolicy(sizePolicy()); PBLog = new QPushButton; PBLog->setSizePolicy(sizePolicy()); PBLog->setText(tr("Log")); if (portrait) { InputWidgetLayout->addWidget(PBPi, fromRow+2, fromCol+2); InputWidgetLayout->addWidget(PBSin, fromRow+3, fromCol); InputWidgetLayout->addWidget(PBCos, fromRow+3, fromCol+1); InputWidgetLayout->addWidget(PBTan, fromRow+3, fromCol+2); InputWidgetLayout->addWidget(PBFactorial, fromRow+2, fromCol); InputWidgetLayout->addWidget(PBLn, fromRow+4, fromCol+3); InputWidgetLayout->addWidget(PBInverse, fromRow+2, fromCol+3); InputWidgetLayout->addWidget(PBE, fromRow+2, fromCol+1); InputWidgetLayout->addWidget(PBSquare, fromRow+4, fromCol); InputWidgetLayout->addWidget(PBPow, fromRow+4, fromCol+1); InputWidgetLayout->addWidget(PBLog, fromRow+3, fromCol+3); InputWidgetLayout->addWidget(PBOneOverX, fromRow+4, fromCol+2); } else { InputWidgetLayout->addWidget(PBPi, fromRow+1, fromCol+1); InputWidgetLayout->addWidget(PBSin, fromRow+2, fromCol); InputWidgetLayout->addWidget(PBCos, fromRow+2, fromCol+1); InputWidgetLayout->addWidget(PBTan, fromRow+2, fromCol+2); InputWidgetLayout->addWidget(PBFactorial, fromRow+4, fromCol+2); InputWidgetLayout->addWidget(PBLn, fromRow+3, fromCol+1); InputWidgetLayout->addWidget(PBInverse, fromRow+1, fromCol+2); InputWidgetLayout->addWidget(PBE, fromRow+1, fromCol);
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -