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