annotate examples/widgets/calculator/calculator.d @ 350:31520b2c0b3c

Removed dependency on parent trait and stringof
author Max Samukha <maxter@spambox.com>
date Thu, 20 May 2010 15:49:08 +0300
parents 7a3c43424dca
children
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;
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 323
diff changeset
52 import std.string : format, indexOf;
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 {
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 323
diff changeset
56
1
e78566595089 initial import
mandel
parents:
diff changeset
57 public:
e78566595089 initial import
mandel
parents:
diff changeset
58 this(QWidget parent = null)
e78566595089 initial import
mandel
parents:
diff changeset
59 {
e78566595089 initial import
mandel
parents:
diff changeset
60 super(parent);
e78566595089 initial import
mandel
parents:
diff changeset
61
e78566595089 initial import
mandel
parents:
diff changeset
62 sumInMemory = 0.0;
e78566595089 initial import
mandel
parents:
diff changeset
63 sumSoFar = 0.0;
e78566595089 initial import
mandel
parents:
diff changeset
64 factorSoFar = 0.0;
e78566595089 initial import
mandel
parents:
diff changeset
65 waitingForOperand = true;
e78566595089 initial import
mandel
parents:
diff changeset
66
e78566595089 initial import
mandel
parents:
diff changeset
67 display = new QLineEdit("0");
e78566595089 initial import
mandel
parents:
diff changeset
68 display.setReadOnly(true);
e78566595089 initial import
mandel
parents:
diff changeset
69 display.setAlignment(Qt.AlignRight);
e78566595089 initial import
mandel
parents:
diff changeset
70 display.setMaxLength(15);
e78566595089 initial import
mandel
parents:
diff changeset
71
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 323
diff changeset
72 auto font = new QFont(display.font());
1
e78566595089 initial import
mandel
parents:
diff changeset
73 font.setPointSize(font.pointSize() + 8);
e78566595089 initial import
mandel
parents:
diff changeset
74 display.setFont(font);
e78566595089 initial import
mandel
parents:
diff changeset
75
e78566595089 initial import
mandel
parents:
diff changeset
76 for (int i = 0; i < NumDigitButtons; ++i) {
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
77 digitButtons[i] = createButton(format("%d", i), "digitClicked");
1
e78566595089 initial import
mandel
parents:
diff changeset
78 }
e78566595089 initial import
mandel
parents:
diff changeset
79
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
80 Button pointButton = createButton(tr("."), "pointClicked");
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
81 Button changeSignButton = createButton(tr("+/-"), "changeSignClicked");
1
e78566595089 initial import
mandel
parents:
diff changeset
82
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
83 Button backspaceButton = createButton(tr("Backspace"), "backspaceClicked");
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
84 Button clearButton = createButton(tr("Clear"), "clear");
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
85 Button clearAllButton = createButton(tr("Clear All"), "clearAll");
1
e78566595089 initial import
mandel
parents:
diff changeset
86
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
87 Button clearMemoryButton = createButton(tr("MC"), "clearMemory");
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
88 Button readMemoryButton = createButton(tr("MR"), "readMemory");
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
89 Button setMemoryButton = createButton(tr("MS"), "setMemory");
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
90 Button addToMemoryButton = createButton(tr("M+"), "addToMemory");
1
e78566595089 initial import
mandel
parents:
diff changeset
91
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
92 Button divisionButton = createButton(tr("/"), "multiplicativeOperatorClicked");
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
93 Button timesButton = createButton(tr("*"), "multiplicativeOperatorClicked");
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
94 Button minusButton = createButton(tr("-"), "additiveOperatorClicked");
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
95 Button plusButton = createButton(tr("+"), "additiveOperatorClicked");
1
e78566595089 initial import
mandel
parents:
diff changeset
96
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
97 Button squareRootButton = createButton(tr("Sqrt"), "unaryOperatorClicked");
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
98 Button powerButton = createButton(tr("x^2"), "unaryOperatorClicked");
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
99 Button reciprocalButton = createButton(tr("1/x"), "unaryOperatorClicked");
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
100 Button equalButton = createButton(tr("="), "equalClicked");
1
e78566595089 initial import
mandel
parents:
diff changeset
101
e78566595089 initial import
mandel
parents:
diff changeset
102 QGridLayout mainLayout = new QGridLayout();
e78566595089 initial import
mandel
parents:
diff changeset
103
e78566595089 initial import
mandel
parents:
diff changeset
104 mainLayout.setSizeConstraint(QLayout.SetFixedSize);
e78566595089 initial import
mandel
parents:
diff changeset
105
e78566595089 initial import
mandel
parents:
diff changeset
106 mainLayout.addWidget(display, 0, 0, 1, 6);
e78566595089 initial import
mandel
parents:
diff changeset
107 mainLayout.addWidget(backspaceButton, 1, 0, 1, 2);
e78566595089 initial import
mandel
parents:
diff changeset
108 mainLayout.addWidget(clearButton, 1, 2, 1, 2);
e78566595089 initial import
mandel
parents:
diff changeset
109 mainLayout.addWidget(clearAllButton, 1, 4, 1, 2);
e78566595089 initial import
mandel
parents:
diff changeset
110
e78566595089 initial import
mandel
parents:
diff changeset
111 mainLayout.addWidget(clearMemoryButton, 2, 0);
e78566595089 initial import
mandel
parents:
diff changeset
112 mainLayout.addWidget(readMemoryButton, 3, 0);
e78566595089 initial import
mandel
parents:
diff changeset
113 mainLayout.addWidget(setMemoryButton, 4, 0);
e78566595089 initial import
mandel
parents:
diff changeset
114 mainLayout.addWidget(addToMemoryButton, 5, 0);
e78566595089 initial import
mandel
parents:
diff changeset
115
e78566595089 initial import
mandel
parents:
diff changeset
116 for (int i = 1; i < NumDigitButtons; ++i) {
e78566595089 initial import
mandel
parents:
diff changeset
117 int row = ((9 - i) / 3) + 2;
e78566595089 initial import
mandel
parents:
diff changeset
118 int column = ((i - 1) % 3) + 1;
e78566595089 initial import
mandel
parents:
diff changeset
119 mainLayout.addWidget(digitButtons[i], row, column);
e78566595089 initial import
mandel
parents:
diff changeset
120 }
e78566595089 initial import
mandel
parents:
diff changeset
121
e78566595089 initial import
mandel
parents:
diff changeset
122 mainLayout.addWidget(digitButtons[0], 5, 1);
e78566595089 initial import
mandel
parents:
diff changeset
123 mainLayout.addWidget(pointButton, 5, 2);
e78566595089 initial import
mandel
parents:
diff changeset
124 mainLayout.addWidget(changeSignButton, 5, 3);
e78566595089 initial import
mandel
parents:
diff changeset
125
e78566595089 initial import
mandel
parents:
diff changeset
126 mainLayout.addWidget(divisionButton, 2, 4);
e78566595089 initial import
mandel
parents:
diff changeset
127 mainLayout.addWidget(timesButton, 3, 4);
e78566595089 initial import
mandel
parents:
diff changeset
128 mainLayout.addWidget(minusButton, 4, 4);
e78566595089 initial import
mandel
parents:
diff changeset
129 mainLayout.addWidget(plusButton, 5, 4);
e78566595089 initial import
mandel
parents:
diff changeset
130
e78566595089 initial import
mandel
parents:
diff changeset
131 mainLayout.addWidget(squareRootButton, 2, 5);
e78566595089 initial import
mandel
parents:
diff changeset
132 mainLayout.addWidget(powerButton, 3, 5);
e78566595089 initial import
mandel
parents:
diff changeset
133 mainLayout.addWidget(reciprocalButton, 4, 5);
e78566595089 initial import
mandel
parents:
diff changeset
134 mainLayout.addWidget(equalButton, 5, 5);
e78566595089 initial import
mandel
parents:
diff changeset
135 setLayout(mainLayout);
e78566595089 initial import
mandel
parents:
diff changeset
136
e78566595089 initial import
mandel
parents:
diff changeset
137 setWindowTitle(tr("Calculator"));
e78566595089 initial import
mandel
parents:
diff changeset
138 }
e78566595089 initial import
mandel
parents:
diff changeset
139
e78566595089 initial import
mandel
parents:
diff changeset
140 //private slots:
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
141 void slot_digitClicked()
1
e78566595089 initial import
mandel
parents:
diff changeset
142 {
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
143 Button clickedButton = cast(Button) sender();
215
8aaa84d48451 Improve examples.
SokoL_SD
parents: 211
diff changeset
144 int digitValue = to!int(clickedButton.text);
1
e78566595089 initial import
mandel
parents:
diff changeset
145 if (display.text() == "0" && digitValue == 0.0)
e78566595089 initial import
mandel
parents:
diff changeset
146 return;
e78566595089 initial import
mandel
parents:
diff changeset
147
e78566595089 initial import
mandel
parents:
diff changeset
148 if (waitingForOperand) {
e78566595089 initial import
mandel
parents:
diff changeset
149 display.clear();
e78566595089 initial import
mandel
parents:
diff changeset
150 waitingForOperand = false;
e78566595089 initial import
mandel
parents:
diff changeset
151 }
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 323
diff changeset
152
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 323
diff changeset
153 display.setText(display.text() ~ format("%s", digitValue));
1
e78566595089 initial import
mandel
parents:
diff changeset
154 }
e78566595089 initial import
mandel
parents:
diff changeset
155
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
156 void slot_unaryOperatorClicked()
1
e78566595089 initial import
mandel
parents:
diff changeset
157 {
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
158 Button clickedButton = cast(Button) sender();
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
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
182 void slot_additiveOperatorClicked()
1
e78566595089 initial import
mandel
parents:
diff changeset
183 {
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
184 Button clickedButton = cast(Button) sender();
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
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
213 void slot_multiplicativeOperatorClicked()
1
e78566595089 initial import
mandel
parents:
diff changeset
214 {
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
215 Button clickedButton = cast(Button) sender();
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
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
233 void slot_equalClicked()
1
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
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
261 void slot_pointClicked()
1
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("."));
350
31520b2c0b3c Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents: 323
diff changeset
270
1
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
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
274 void slot_changeSignClicked()
1
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
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
287 void slot_backspaceClicked()
1
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
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
302 void slot_clear()
1
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
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
311 void slot_clearAll()
1
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
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
321 void slot_clearMemory()
1
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
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
326 void slot_readMemory()
1
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
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
332 void slot_setMemory()
1
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
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
338 void slot_addToMemory()
1
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
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
346 Button createButton(string text, string member)
1
e78566595089 initial import
mandel
parents:
diff changeset
347 {
e78566595089 initial import
mandel
parents:
diff changeset
348 Button button = new Button(text);
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
349 connect(button, "clicked", this, 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;
323
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
386
7a3c43424dca make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents: 282
diff changeset
387 mixin Q_OBJECT;
1
e78566595089 initial import
mandel
parents:
diff changeset
388 }