Function.prototype.bind=function() {
var func = this;
var thisObject = arguments[0];
var args = Array.prototype.slice.call(arguments, 1);
returnfunction() {
returnfunc.apply(thisObject, args);
}
}
functionCalculator(ui)
{
this.ui=ui;
this.pendingAdditiveOperator=Calculator.NO_OPERATOR;
this.pendingMultiplicativeOperator=Calculator.NO_OPERATOR;
this.sumInMemory=0;
this.sumSoFar=0;
this.factorSoFar=0;
this.waitingForOperand=true;
with (ui) {
display.text="0";
zeroButton.clicked.connect(this.digitClicked.bind(this, 0));
oneButton.clicked.connect(this.digitClicked.bind(this, 1));
twoButton.clicked.connect(this.digitClicked.bind(this, 2));
threeButton.clicked.connect(this.digitClicked.bind(this, 3));
fourButton.clicked.connect(this.digitClicked.bind(this, 4));
fiveButton.clicked.connect(this.digitClicked.bind(this, 5));
sixButton.clicked.connect(this.digitClicked.bind(this, 6));
sevenButton.clicked.connect(this.digitClicked.bind(this, 7));
eightButton.clicked.connect(this.digitClicked.bind(this, 8));
nineButton.clicked.connect(this.digitClicked.bind(this, 9));
pointButton.clicked.connect(this, "pointClicked");
changeSignButton.clicked.connect(this, "changeSignClicked");
backspaceButton.clicked.connect(this, "backspaceClicked");
clearButton.clicked.connect(this, "clear");
clearAllButton.clicked.connect(this, "clearAll");
clearMemoryButton.clicked.connect(this, "clearMemory");
readMemoryButton.clicked.connect(this, "readMemory");
setMemoryButton.clicked.connect(this, "setMemory");
addToMemoryButton.clicked.connect(this, "addToMemory");
divisionButton.clicked.connect(this.multiplicativeOperatorClicked.bind(this, Calculator.DIVISION_OPERATOR));
timesButton.clicked.connect(this.multiplicativeOperatorClicked.bind(this, Calculator.TIMES_OPERATOR));
minusButton.clicked.connect(this.additiveOperatorClicked.bind(this, Calculator.MINUS_OPERATOR));
plusButton.clicked.connect(this.additiveOperatorClicked.bind(this, Calculator.PLUS_OPERATOR));
squareRootButton.clicked.connect(this.unaryOperatorClicked.bind(this, Calculator.SQUARE_OPERATOR));
powerButton.clicked.connect(this.unaryOperatorClicked.bind(this, Calculator.POWER_OPERATOR));
reciprocalButton.clicked.connect(this.unaryOperatorClicked.bind(this, Calculator.RECIPROCAL_OPERATOR));
equalButton.clicked.connect(this, "equalClicked");
}
}
Calculator.NO_OPERATOR=0;
Calculator.SQUARE_OPERATOR=1;
Calculator.POWER_OPERATOR=2;
Calculator.RECIPROCAL_OPERATOR=3;
Calculator.DIVISION_OPERATOR=4;
Calculator.TIMES_OPERATOR=5;
Calculator.MINUS_OPERATOR=6;
Calculator.PLUS_OPERATOR=7;
Calculator.prototype.abortOperation=function()
{
this.clearAll();
this.ui.display.text="####";
}
Calculator.prototype.calculate=function(rightOperand, pendingOperator)
{
if (pendingOperator==Calculator.PLUS_OPERATOR) {
this.sumSoFar+=rightOperand;
} else if (pendingOperator==Calculator.MINUS_OPERATOR) {
this.sumSoFar-=rightOperand;
} else if (pendingOperator==Calculator.TIMES_OPERATOR) {
this.factorSoFar*=rightOperand;
} else if (pendingOperator==Calculator.DIVISION_OPERATOR) {
if (rightOperand==0)
returnfalse;
this.factorSoFar/=rightOperand;
}
returntrue;
}
Calculator.prototype.digitClicked=function(digitValue)
{
if ((digitValue==0) && (this.ui.display.text=="0"))
return;
if (this.waitingForOperand) {
this.ui.display.clear();
this.waitingForOperand=false;
}
this.ui.display.text+=digitValue;
}
Calculator.prototype.unaryOperatorClicked=function(op)
{
var operand = this.ui.display.text-0;
var result = 0;
if (op==Calculator.SQUARE_OPERATOR) {
if (operand<0) {
this.abortOperation();
return;
}
result=Math.sqrt(operand);
} else if (op==Calculator.POWER_OPERATOR) {
result=Math.pow(operand, 2);
} else if (op==Calculator.RECIPROCAL_OPERATOR) {
if (operand==0.0) {
this.abortOperation();
return;
}
result=1/operand;
}
this.ui.display.text=result+"";
this.waitingForOperand=true;
}
Calculator.prototype.additiveOperatorClicked=function(op)
{
var operand = this.ui.display.text-0;
if (this.pendingMultiplicativeOperator!=Calculator.NO_OPERATOR) {
if (!this.calculate(operand, this.pendingMultiplicativeOperator)) {
this.abortOperation();
return;
}
this.ui.display.text= this.factorSoFar+"";
operand= this.factorSoFar;
this.factorSoFar=0;
this.pendingMultiplicativeOperator=Calculator.NO_OPERATOR;
}
if (this.pendingAdditiveOperator!=Calculator.NO_OPERATOR) {
if (!this.calculate(operand, this.pendingAdditiveOperator)) {
this.abortOperation();
return;
}
this.ui.display.text= this.sumSoFar+"";
} else {
this.sumSoFar=operand;
}
this.pendingAdditiveOperator=op;
this.waitingForOperand=true;
}
Calculator.prototype.multiplicativeOperatorClicked=function(op)
{
var operand = this.ui.display.text-0;
if (this.pendingMultiplicativeOperator!=Calculator.NO_OPERATOR) {
if (!this.calculate(operand, this.pendingMultiplicativeOperator)) {
this.abortOperation();
return;
}
this.ui.display.text= this.factorSoFar+"";
} else {
this.factorSoFar=operand;
}
this.pendingMultiplicativeOperator=op;
this.waitingForOperand=true;
}
Calculator.prototype.equalClicked=function()
{
var operand = this.ui.display.text-0;
if (this.pendingMultiplicativeOperator!=Calculator.NO_OPERATOR) {
if (!this.calculate(operand, this.pendingMultiplicativeOperator)) {
this.abortOperation();
return;
}
operand= this.factorSoFar;
this.factorSoFar=0.0;
this.pendingMultiplicativeOperator=Calculator.NO_OPERATOR;
}
if (this.pendingAdditiveOperator!=Calculator.NO_OPERATOR) {
if (!this.calculate(operand, this.pendingAdditiveOperator)) {
this.abortOperation();
return;
}
this.pendingAdditiveOperator=Calculator.NO_OPERATOR;
} else {
this.sumSoFar=operand;
}
this.ui.display.text= this.sumSoFar+"";
this.sumSoFar=0.0;
this.waitingForOperand=true;
}
Calculator.prototype.pointClicked=function()
{
if (this.waitingForOperand)
this.ui.display.text="0";
if (this.ui.display.text.indexOf(".") == -1)
this.ui.display.text+=".";
this.waitingForOperand=false;
}
Calculator.prototype.changeSignClicked=function()
{
var text = this.ui.display.text;
var value = text-0;
if (value>0) {
text="-"+text;
} else if (value<0) {
text=text.slice(1);
}
this.ui.display.text=text;
}
Calculator.prototype.backspaceClicked=function()
{
if (this.waitingForOperand)
return;
var text = this.ui.display.text;
text=text.slice(0, -1);
if (text.length==0) {
text="0";
this.waitingForOperand=true;
}
this.ui.display.text=text;
}
Calculator.prototype.clear=function()
{
if (this.waitingForOperand)
return;
this.ui.display.text="0";
this.waitingForOperand=true;
}
Calculator.prototype.clearAll=function()
{
this.sumSoFar=0.0;
this.factorSoFar=0.0;
this.pendingAdditiveOperator=Calculator.NO_OPERATOR;
this.pendingMultiplicativeOperator=Calculator.NO_OPERATOR;
this.ui.display.text="0";
this.waitingForOperand=true;
}
Calculator.prototype.clearMemory=function()
{
this.sumInMemory=0.0;
}
Calculator.prototype.readMemory=function()
{
this.ui.display.text= this.sumInMemory+"";
this.waitingForOperand=true;
}
Calculator.prototype.setMemory=function()
{
this.equalClicked();
this.sumInMemory= this.ui.display.text-0;
}
Calculator.prototype.addToMemory=function()
{
this.equalClicked();
this.sumInMemory+= this.ui.display.text-0;
}
Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia.
Vous avez déniché une erreur ? Un bug ? Une redirection cassée ? Ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter
ou par MP !