annotate examples/widgets/calculator/calculator_d1.d @ 374:681af90e1d53

Removed debug writelns. Fixed build script.
author Max Samukha <maxter@spambox.com>
date Thu, 08 Jul 2010 22:21:56 +0300
parents 256ab6cb8e85
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
216
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
1 /****************************************************************************
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
2 **
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
4 ** Contact: Qt Software Information (qt-info@nokia.com)
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
5 **
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
6 ** This file is part of the example classes of the Qt Toolkit.
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
7 **
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
8 ** $QT_BEGIN_LICENSE:LGPL$
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
9 ** Commercial Usage
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
10 ** Licensees holding valid Qt Commercial licenses may use this file in
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
11 ** accordance with the Qt Commercial License Agreement provided with the
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
12 ** Software or, alternatively, in accordance with the terms contained in
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
13 ** a written agreement between you and Nokia.
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
14 **
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
15 ** GNU Lesser General Public License Usage
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
16 ** Alternatively, this file may be used under the terms of the GNU Lesser
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
17 ** General Public License version 2.1 as published by the Free Software
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
18 ** Foundation and appearing in the file LICENSE.LGPL included in the
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
19 ** packaging of this file. Please review the following information to
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
20 ** ensure the GNU Lesser General Public License version 2.1 requirements
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
21 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
22 **
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
23 ** In addition, as a special exception, Nokia gives you certain
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
24 ** additional rights. These rights are described in the Nokia Qt LGPL
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
25 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
26 ** package.
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
27 **
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
28 ** GNU General Public License Usage
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
29 ** Alternatively, this file may be used under the terms of the GNU
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
30 ** General Public License version 3.0 as published by the Free Software
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
31 ** Foundation and appearing in the file LICENSE.GPL included in the
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
32 ** packaging of this file. Please review the following information to
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
33 ** ensure the GNU General Public License version 3.0 requirements will be
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
34 ** met: http://www.gnu.org/copyleft/gpl.html.
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
35 **
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
36 ** If you are unsure which license is appropriate for your use, please
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
37 ** contact the sales department at qt-sales@nokia.com.
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
38 ** $QT_END_LICENSE$
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
39 **
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
40 ****************************************************************************/
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
41
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
42 module calculator_d1;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
43
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
44 import button;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
45 import qt.gui.QDialog;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
46 import qt.gui.QGridLayout;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
47 import qt.gui.QLineEdit;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
48 import qt.gui.QFont;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
49
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
50 import tango.math.Math;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
51 import tango.math.Math : pow, sqrt;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
52 import Float = tango.text.convert.Float;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
53 import Integer = tango.text.convert.Integer;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
54 import tango.core.Array;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
55
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
56 class Calculator : public QDialog
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
57 {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
58
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
59 public:
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
60
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
61 this(QWidget parent = null)
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
62 {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
63 super(parent);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
64
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
65 sumInMemory = 0.0;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
66 sumSoFar = 0.0;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
67 factorSoFar = 0.0;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
68 waitingForOperand = true;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
69
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
70 display = new QLineEdit("0");
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
71 display.setReadOnly(true);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
72 display.setAlignment(Qt.AlignRight);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
73 display.setMaxLength(15);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
74
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
75 auto font = new QFont(display.font());
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
76 font.setPointSize(font.pointSize() + 8);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
77 display.setFont(font);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
78
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
79 for (int i = 0; i < NumDigitButtons; ++i) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
80 digitButtons[i] = createButton(Integer.toString(i), &digitClicked);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
81 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
82
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
83 Button pointButton = createButton(tr("."), &pointClicked);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
84 Button changeSignButton = createButton(tr("+/-"), &changeSignClicked);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
85
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
86 Button backspaceButton = createButton(tr("Backspace"), &backspaceClicked);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
87 Button clearButton = createButton(tr("Clear"), &clear);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
88 Button clearAllButton = createButton(tr("Clear All"), &clearAll);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
89
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
90 Button clearMemoryButton = createButton(tr("MC"), &clearMemory);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
91 Button readMemoryButton = createButton(tr("MR"), &readMemory);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
92 Button setMemoryButton = createButton(tr("MS"), &setMemory);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
93 Button addToMemoryButton = createButton(tr("M+"), &addToMemory);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
94
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
95 Button divisionButton = createButton(tr("/"), &multiplicativeOperatorClicked);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
96 Button timesButton = createButton(tr("*"), &multiplicativeOperatorClicked);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
97 Button minusButton = createButton(tr("-"), &additiveOperatorClicked);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
98 Button plusButton = createButton(tr("+"), &additiveOperatorClicked);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
99
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
100 Button squareRootButton = createButton(tr("Sqrt"), &unaryOperatorClicked);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
101 Button powerButton = createButton(tr("x^2"), &unaryOperatorClicked);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
102 Button reciprocalButton = createButton(tr("1/x"), &unaryOperatorClicked);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
103 Button equalButton = createButton(tr("="), &equalClicked);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
104
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
105 QGridLayout mainLayout = new QGridLayout();
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
106
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
107 mainLayout.setSizeConstraint(QLayout.SetFixedSize);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
108
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
109 mainLayout.addWidget(display, 0, 0, 1, 6);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
110 mainLayout.addWidget(backspaceButton, 1, 0, 1, 2);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
111 mainLayout.addWidget(clearButton, 1, 2, 1, 2);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
112 mainLayout.addWidget(clearAllButton, 1, 4, 1, 2);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
113
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
114 mainLayout.addWidget(clearMemoryButton, 2, 0);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
115 mainLayout.addWidget(readMemoryButton, 3, 0);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
116 mainLayout.addWidget(setMemoryButton, 4, 0);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
117 mainLayout.addWidget(addToMemoryButton, 5, 0);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
118
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
119 for (int i = 1; i < NumDigitButtons; ++i) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
120 int row = ((9 - i) / 3) + 2;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
121 int column = ((i - 1) % 3) + 1;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
122 mainLayout.addWidget(digitButtons[i], row, column);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
123 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
124
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
125 mainLayout.addWidget(digitButtons[0], 5, 1);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
126 mainLayout.addWidget(pointButton, 5, 2);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
127 mainLayout.addWidget(changeSignButton, 5, 3);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
128
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
129 mainLayout.addWidget(divisionButton, 2, 4);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
130 mainLayout.addWidget(timesButton, 3, 4);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
131 mainLayout.addWidget(minusButton, 4, 4);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
132 mainLayout.addWidget(plusButton, 5, 4);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
133
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
134 mainLayout.addWidget(squareRootButton, 2, 5);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
135 mainLayout.addWidget(powerButton, 3, 5);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
136 mainLayout.addWidget(reciprocalButton, 4, 5);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
137 mainLayout.addWidget(equalButton, 5, 5);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
138 setLayout(mainLayout);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
139
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
140 setWindowTitle(tr("Calculator"));
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
141 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
142
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
143 //private slots:
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
144 void digitClicked()
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
145 {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
146 Button clickedButton = cast(Button) signalSender();
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
147 int digitValue = Integer.toInt(clickedButton.text);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
148 if (display.text() == "0" && digitValue == 0.0)
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
149 return;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
150
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
151 if (waitingForOperand) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
152 display.clear();
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
153 waitingForOperand = false;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
154 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
155 display.setText(display.text() ~ Integer.toString(digitValue));
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
156 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
157
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
158 void unaryOperatorClicked()
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
159 {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
160 Button clickedButton = cast(Button) signalSender();
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
161 string clickedOperator = clickedButton.text();
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
162 double operand = Float.toFloat(display.text);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
163 double result = 0.0;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
164
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
165 if (clickedOperator == tr("Sqrt")) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
166 if (operand < 0.0) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
167 abortOperation();
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
168 return;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
169 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
170 result = sqrt(operand);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
171 } else if (clickedOperator == tr("x^2")) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
172 result = pow(operand, 2.0);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
173 } else if (clickedOperator == tr("1/x")) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
174 if (operand == 0.0) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
175 abortOperation();
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
176 return;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
177 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
178 result = 1.0 / operand;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
179 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
180 display.setText(Float.toString(result, 4));
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
181 waitingForOperand = true;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
182 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
183
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
184 void additiveOperatorClicked()
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
185 {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
186 Button clickedButton = cast(Button) signalSender();
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
187 string clickedOperator = clickedButton.text();
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
188 double operand = Float.toFloat(display.text);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
189
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
190 if (pendingMultiplicativeOperator.length) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
191 if (!calculate(operand, pendingMultiplicativeOperator)) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
192 abortOperation();
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
193 return;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
194 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
195 display.setText(Float.toString(factorSoFar, 4));
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
196 operand = factorSoFar;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
197 factorSoFar = 0.0;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
198 pendingMultiplicativeOperator = null;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
199 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
200
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
201 if (pendingAdditiveOperator.length) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
202 if (!calculate(operand, pendingAdditiveOperator)) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
203 abortOperation();
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
204 return;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
205 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
206 display.setText(Float.toString(sumSoFar, 4));
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
207 } else {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
208 sumSoFar = operand;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
209 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
210
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
211 pendingAdditiveOperator = clickedOperator;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
212 waitingForOperand = true;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
213 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
214
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
215 void multiplicativeOperatorClicked()
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
216 {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
217 Button clickedButton = cast(Button) signalSender();
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
218 string clickedOperator = clickedButton.text();
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
219 double operand = Float.toFloat(display.text);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
220
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
221 if (pendingMultiplicativeOperator.length) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
222 if (!calculate(operand, pendingMultiplicativeOperator)) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
223 abortOperation();
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
224 return;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
225 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
226 display.setText(Float.toString(factorSoFar, 4));
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
227 } else {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
228 factorSoFar = operand;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
229 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
230
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
231 pendingMultiplicativeOperator = clickedOperator;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
232 waitingForOperand = true;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
233 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
234
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
235 void equalClicked()
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
236 {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
237 double operand = Float.toFloat(display.text);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
238
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
239 if (pendingMultiplicativeOperator.length) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
240 if (!calculate(operand, pendingMultiplicativeOperator)) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
241 abortOperation();
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
242 return;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
243 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
244 operand = factorSoFar;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
245 factorSoFar = 0.0;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
246 pendingMultiplicativeOperator = null;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
247 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
248 if (pendingAdditiveOperator.length) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
249 if (!calculate(operand, pendingAdditiveOperator)) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
250 abortOperation();
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
251 return;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
252 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
253 pendingAdditiveOperator = null;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
254 } else {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
255 sumSoFar = operand;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
256 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
257
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
258 display.setText(Float.toString(sumSoFar, 4));
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
259 sumSoFar = 0.0;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
260 waitingForOperand = true;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
261 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
262
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
263 void pointClicked()
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
264 {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
265 string text = display.text;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
266
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
267 if (waitingForOperand)
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
268 display.setText("0");
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
269
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
270 if (find(text, '.') >= text.length)
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
271 display.setText(text ~ tr("."));
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
272
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
273 waitingForOperand = false;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
274 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
275
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
276 void changeSignClicked()
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
277 {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
278 string text = display.text();
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
279 double value = Float.toFloat(text);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
280
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
281 if (value > 0.0) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
282 text = "-" ~ text;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
283 } else if (value < 0.0) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
284 text = text[1..$];
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
285 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
286 display.setText(text);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
287 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
288
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
289 void backspaceClicked()
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
290 {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
291 if (waitingForOperand)
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
292 return;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
293
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
294 string text = display.text();
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
295 text = text[0..$-1];
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
296 if (text.length == 0) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
297 text = "0";
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
298 waitingForOperand = true;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
299 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
300 display.setText(text);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
301 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
302
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
303
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
304 void clear()
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
305 {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
306 if (waitingForOperand)
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
307 return;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
308
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
309 display.setText("0");
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
310 waitingForOperand = true;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
311 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
312
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
313 void clearAll()
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
314 {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
315 sumSoFar = 0.0;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
316 factorSoFar = 0.0;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
317 pendingAdditiveOperator = null;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
318 pendingMultiplicativeOperator = null;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
319 display.setText("0");
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
320 waitingForOperand = true;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
321 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
322
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
323 void clearMemory()
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
324 {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
325 sumInMemory = 0.0;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
326 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
327
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
328 void readMemory()
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
329 {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
330 display.setText(Float.toString(sumInMemory, 4));
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
331 waitingForOperand = true;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
332 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
333
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
334 void setMemory()
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
335 {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
336 equalClicked();
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
337 sumInMemory = Float.toFloat(display.text);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
338 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
339
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
340 void addToMemory()
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
341 {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
342 equalClicked();
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
343 sumInMemory += Float.toFloat(display.text);
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
344 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
345
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
346 private:
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
347
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
348 Button createButton(string text, void delegate() member)
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
349 {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
350 Button button = new Button(text);
282
256ab6cb8e85 Signals look-up andNew syntax for connect. The old one will not work from now on. This will allow for the signals overload. Although changes are done for both D1 and D2 versions, D1 won't work because of compiler bugs. I am tired of waiting for fixes.
eldar
parents: 216
diff changeset
351 connect!("clicked")(button, member);
216
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
352 return button;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
353 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
354
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
355 void abortOperation()
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
356 {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
357 clearAll();
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
358 display.setText(tr("####"));
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
359 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
360
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
361 bool calculate(double rightOperand, string pendingOperator)
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
362 {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
363 if (pendingOperator == tr("+")) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
364 sumSoFar += rightOperand;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
365 } else if (pendingOperator == tr("-")) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
366 sumSoFar -= rightOperand;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
367 } else if (pendingOperator == tr("*")) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
368 factorSoFar *= rightOperand;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
369 } else if (pendingOperator == tr("/")) {
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
370 if (rightOperand == 0.0)
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
371 return false;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
372 factorSoFar /= rightOperand;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
373 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
374 return true;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
375 }
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
376
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
377 double sumInMemory;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
378 double sumSoFar;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
379 double factorSoFar;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
380 string pendingAdditiveOperator;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
381 string pendingMultiplicativeOperator;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
382 bool waitingForOperand;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
383
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
384 QLineEdit display;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
385
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
386 enum { NumDigitButtons = 10 };
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
387 Button[NumDigitButtons] digitButtons;
06e7d3219464 ups....
SokoL_SD
parents:
diff changeset
388 }