Mercurial > projects > qtd
annotate examples/dialogs/standarddialogs/dialog.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 | 4e31cbd9e20c |
children |
rev | line source |
---|---|
143 | 1 /**************************************************************************** |
2 ** | |
3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). | |
4 ** Contact: Qt Software Information (qt-info@nokia.com) | |
5 ** | |
6 ** This file is part of the examples of the Qt Toolkit. | |
7 ** | |
8 ** $QT_BEGIN_LICENSE:LGPL$ | |
9 ** Commercial Usage | |
10 ** Licensees holding valid Qt Commercial licenses may use this file in | |
11 ** accordance with the Qt Commercial License Agreement provided with the | |
12 ** Software or, alternatively, in accordance with the terms contained in | |
13 ** a written agreement between you and Nokia. | |
14 ** | |
15 ** GNU Lesser General Public License Usage | |
16 ** Alternatively, this file may be used under the terms of the GNU Lesser | |
17 ** General Public License version 2.1 as published by the Free Software | |
18 ** Foundation and appearing in the file LICENSE.LGPL included in the | |
19 ** packaging of this file. Please review the following information to | |
20 ** ensure the GNU Lesser General Public License version 2.1 requirements | |
21 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. | |
22 ** | |
23 ** In addition, as a special exception, Nokia gives you certain | |
24 ** additional rights. These rights are described in the Nokia Qt LGPL | |
25 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this | |
26 ** package. | |
27 ** | |
28 ** GNU General Public License Usage | |
29 ** Alternatively, this file may be used under the terms of the GNU | |
30 ** General Public License version 3.0 as published by the Free Software | |
31 ** Foundation and appearing in the file LICENSE.GPL included in the | |
32 ** packaging of this file. Please review the following information to | |
33 ** ensure the GNU General Public License version 3.0 requirements will be | |
34 ** met: http://www.gnu.org/copyleft/gpl.html. | |
35 ** | |
36 ** If you are unsure which license is appropriate for your use, please | |
37 ** contact the sales department at qt-sales@nokia.com. | |
38 ** $QT_END_LICENSE$ | |
39 ** | |
40 ****************************************************************************/ | |
41 module dialog; | |
42 | |
43 import qt.gui.QDialog; | |
44 import qt.gui.QCheckBox; | |
45 import qt.gui.QLabel; | |
46 import qt.gui.QMessageBox; | |
47 import qt.gui.QGridLayout; | |
48 import qt.gui.QErrorMessage; | |
49 import qt.gui.QFileDialog; | |
50 import qt.gui.QLineEdit; | |
51 import qt.gui.QInputDialog; | |
52 import qt.gui.QColorDialog; | |
53 import qt.gui.QFontDialog; | |
54 import qt.gui.QFileDialog; | |
55 import qt.core.QFile; | |
56 | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
339
diff
changeset
|
57 import std.string : format, join; |
143 | 58 |
211 | 59 string MESSAGE = tr("<p>Message boxes have a caption, a text, " |
143 | 60 "and any number of buttons, each with standard or custom texts." |
61 "<p>Click a button to close the message box. Pressing the Esc button " | |
62 "will activate the detected escape button (if any)."); | |
63 | |
64 | |
65 class Dialog : public QDialog | |
66 { | |
67 public: | |
68 | |
69 this(QWidget parent = null) | |
70 { | |
71 super(parent); | |
72 errorMessageDialog = new QErrorMessage(this); | |
73 | |
74 int frameStyle = QFrame.Sunken | QFrame.Panel; | |
75 | |
76 integerLabel = new QLabel; | |
77 integerLabel.setFrameStyle(frameStyle); | |
78 QPushButton integerButton = new QPushButton(tr("QInputget&Int()")); | |
79 | |
80 doubleLabel = new QLabel; | |
81 doubleLabel.setFrameStyle(frameStyle); | |
82 QPushButton doubleButton = new QPushButton(tr("QInputget&Double()")); | |
83 | |
84 itemLabel = new QLabel; | |
85 itemLabel.setFrameStyle(frameStyle); | |
86 QPushButton itemButton = new QPushButton(tr("QInputgetIte&m()")); | |
87 | |
88 textLabel = new QLabel; | |
89 textLabel.setFrameStyle(frameStyle); | |
90 QPushButton textButton = new QPushButton(tr("QInputget&Text()")); | |
91 | |
92 colorLabel = new QLabel; | |
93 colorLabel.setFrameStyle(frameStyle); | |
94 QPushButton colorButton = new QPushButton(tr("QColorget&Color()")); | |
95 | |
96 fontLabel = new QLabel; | |
97 fontLabel.setFrameStyle(frameStyle); | |
98 QPushButton fontButton = new QPushButton(tr("QFontget&Font()")); | |
99 | |
100 directoryLabel = new QLabel; | |
101 directoryLabel.setFrameStyle(frameStyle); | |
102 QPushButton directoryButton = new QPushButton(tr("QFilegetE&xistingDirectory()")); | |
103 | |
104 openFileNameLabel = new QLabel; | |
105 openFileNameLabel.setFrameStyle(frameStyle); | |
106 QPushButton openFileNameButton = new QPushButton(tr("QFileget&OpenFileName()")); | |
107 | |
108 openFileNamesLabel = new QLabel; | |
109 openFileNamesLabel.setFrameStyle(frameStyle); | |
110 QPushButton openFileNamesButton = new QPushButton(tr("QFile&getOpenFileNames()")); | |
111 | |
112 saveFileNameLabel = new QLabel; | |
113 saveFileNameLabel.setFrameStyle(frameStyle); | |
114 QPushButton saveFileNameButton = new QPushButton(tr("QFileget&SaveFileName()")); | |
115 | |
116 criticalLabel = new QLabel; | |
117 criticalLabel.setFrameStyle(frameStyle); | |
118 QPushButton criticalButton = new QPushButton(tr("QMessageBox.critica&l()")); | |
119 | |
120 informationLabel = new QLabel; | |
121 informationLabel.setFrameStyle(frameStyle); | |
122 QPushButton informationButton = new QPushButton(tr("QMessageBox.i&nformation()")); | |
123 | |
124 questionLabel = new QLabel; | |
125 questionLabel.setFrameStyle(frameStyle); | |
126 QPushButton questionButton = new QPushButton(tr("QMessageBox.&question()")); | |
127 | |
128 warningLabel = new QLabel; | |
129 warningLabel.setFrameStyle(frameStyle); | |
130 QPushButton warningButton = new QPushButton(tr("QMessageBox.&warning()")); | |
131 | |
132 errorLabel = new QLabel; | |
133 errorLabel.setFrameStyle(frameStyle); | |
134 QPushButton errorButton = new QPushButton(tr("QErrorMessage.show&M&essage()")); | |
135 | |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
136 connect(integerButton, "clicked", this, "setInteger"); |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
137 connect(doubleButton, "clicked", this, "setDouble"); |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
138 connect(itemButton, "clicked", this, "setItem"); |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
139 connect(textButton, "clicked", this, "setText"); |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
140 connect(colorButton, "clicked", this, "setColor"); |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
141 connect(fontButton, "clicked", this, "setFont"); |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
142 connect(directoryButton, "clicked", this, "setExistingDirectory"); |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
143 connect(openFileNameButton, "clicked", this, "setOpenFileName"); |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
144 connect(openFileNamesButton, "clicked", this, "setOpenFileNames"); |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
145 connect(saveFileNameButton, "clicked", this, "setSaveFileName"); |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
146 connect(criticalButton, "clicked", this, "criticalMessage"); |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
147 connect(informationButton, "clicked", this, "informationMessage"); |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
148 connect(questionButton, "clicked", this, "questionMessage"); |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
149 connect(warningButton, "clicked", this, "warningMessage"); |
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
150 connect(errorButton, "clicked", this, "errorMessage"); |
143 | 151 |
152 native = new QCheckBox(this); | |
153 native.setText("Use native file dialog."); | |
154 native.setChecked(true); | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
339
diff
changeset
|
155 |
143 | 156 version(windows) {} else |
157 { | |
158 version(mac) {} else | |
159 { | |
160 native.hide(); | |
161 } | |
162 } | |
163 | |
164 QGridLayout layout = new QGridLayout; | |
165 layout.setColumnStretch(1, 1); | |
166 layout.setColumnMinimumWidth(1, 250); | |
167 layout.addWidget(integerButton, 0, 0); | |
168 layout.addWidget(integerLabel, 0, 1); | |
169 layout.addWidget(doubleButton, 1, 0); | |
170 layout.addWidget(doubleLabel, 1, 1); | |
171 layout.addWidget(itemButton, 2, 0); | |
172 layout.addWidget(itemLabel, 2, 1); | |
173 layout.addWidget(textButton, 3, 0); | |
174 layout.addWidget(textLabel, 3, 1); | |
175 layout.addWidget(colorButton, 4, 0); | |
176 layout.addWidget(colorLabel, 4, 1); | |
177 layout.addWidget(fontButton, 5, 0); | |
178 layout.addWidget(fontLabel, 5, 1); | |
179 layout.addWidget(directoryButton, 6, 0); | |
180 layout.addWidget(directoryLabel, 6, 1); | |
181 layout.addWidget(openFileNameButton, 7, 0); | |
182 layout.addWidget(openFileNameLabel, 7, 1); | |
183 layout.addWidget(openFileNamesButton, 8, 0); | |
184 layout.addWidget(openFileNamesLabel, 8, 1); | |
185 layout.addWidget(saveFileNameButton, 9, 0); | |
186 layout.addWidget(saveFileNameLabel, 9, 1); | |
187 layout.addWidget(criticalButton, 10, 0); | |
188 layout.addWidget(criticalLabel, 10, 1); | |
189 layout.addWidget(informationButton, 11, 0); | |
190 layout.addWidget(informationLabel, 11, 1); | |
191 layout.addWidget(questionButton, 12, 0); | |
192 layout.addWidget(questionLabel, 12, 1); | |
193 layout.addWidget(warningButton, 13, 0); | |
194 layout.addWidget(warningLabel, 13, 1); | |
195 layout.addWidget(errorButton, 14, 0); | |
196 layout.addWidget(errorLabel, 14, 1); | |
197 layout.addWidget(native, 15, 0); | |
198 setLayout(layout); | |
199 | |
200 setWindowTitle(tr("Standard Dialogs")); | |
201 } | |
202 | |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
203 private: // slots |
143 | 204 |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
205 void slot_setInteger() |
143 | 206 { |
207 bool ok; | |
208 int i = QInputDialog.getInt(this, tr("QInputgetInteger()"), tr("Percentage:"), 25, 0, 100, 1, ok); | |
209 if (ok) | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
339
diff
changeset
|
210 integerLabel.setText(format("%d", i)); |
143 | 211 } |
212 | |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
213 void slot_setDouble() |
143 | 214 { |
215 bool ok; | |
216 double d = QInputDialog.getDouble(this, tr("QInputgetDouble()"), | |
217 tr("Amount:"), 37.56, -10000, 10000, 2, ok); | |
218 if (ok) | |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
339
diff
changeset
|
219 doubleLabel.setText(format("%g", d)); |
143 | 220 } |
221 | |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
222 void slot_setItem() |
143 | 223 { |
224 string[] items = [tr("Spring"), tr("Summer"), tr("Fall"), tr("Winter")]; | |
225 | |
226 bool ok; | |
227 string item = QInputDialog.getItem(this, tr("QInputgetItem()"), | |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
228 tr("Season:"), items.toQList, 0, false, ok); |
143 | 229 if (ok && item.length) |
230 itemLabel.setText(item); | |
231 } | |
232 | |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
233 void slot_setText() |
143 | 234 { |
235 bool ok; | |
236 string text = QInputDialog.getText(this, tr("QInputgetText()"), | |
339
4e31cbd9e20c
fix enumeration problems. requires patched dmd
Eldar Insafutdinov
parents:
323
diff
changeset
|
237 tr("User name:"), QLineEdit.EchoMode.Normal, |
143 | 238 QDir.home().dirName(), ok); |
239 if (ok && text.length) | |
240 textLabel.setText(text); | |
241 } | |
242 | |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
243 void slot_setColor() |
143 | 244 { |
245 QColor color = QColorDialog.getColor(QColor.Green, this); | |
246 if (color.isValid()) { | |
247 colorLabel.setText(color.name()); | |
248 colorLabel.setPalette(new QPalette(color)); | |
249 colorLabel.setAutoFillBackground(true); | |
250 } | |
251 } | |
252 | |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
253 void slot_setFont() |
143 | 254 { |
255 bool ok; | |
256 QFont font = QFontDialog.getFont(&ok, new QFont(fontLabel.text()), this); | |
257 if (ok) { | |
258 fontLabel.setText(font.key()); | |
259 fontLabel.setFont(font); | |
260 } | |
261 } | |
262 | |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
263 void slot_setExistingDirectory() |
143 | 264 { |
339
4e31cbd9e20c
fix enumeration problems. requires patched dmd
Eldar Insafutdinov
parents:
323
diff
changeset
|
265 int options = QFileDialog.Option.DontResolveSymlinks | QFileDialog.Option.ShowDirsOnly; |
143 | 266 if (!native.isChecked()) |
339
4e31cbd9e20c
fix enumeration problems. requires patched dmd
Eldar Insafutdinov
parents:
323
diff
changeset
|
267 options |= QFileDialog.Option.DontUseNativeDialog; |
143 | 268 string directory = QFileDialog.getExistingDirectory(this, |
269 tr("QFilegetExistingDirectory()"), | |
270 directoryLabel.text(), | |
271 options); | |
272 if (directory.length) | |
273 directoryLabel.setText(directory); | |
274 } | |
275 | |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
276 void slot_setOpenFileName() |
143 | 277 { |
278 int options; | |
279 if (!native.isChecked()) | |
339
4e31cbd9e20c
fix enumeration problems. requires patched dmd
Eldar Insafutdinov
parents:
323
diff
changeset
|
280 options |= QFileDialog.Option.DontUseNativeDialog; |
143 | 281 string selectedFilter; |
282 string fileName = QFileDialog.getOpenFileName(this, | |
283 tr("QFilegetOpenFileName()"), | |
284 openFileNameLabel.text(), | |
285 tr("All Files (*);;Text Files (*.txt)"), | |
286 selectedFilter, | |
287 options); | |
288 if (fileName.length) | |
289 openFileNameLabel.setText(fileName); | |
290 } | |
291 | |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
292 void slot_setOpenFileNames() |
143 | 293 { |
294 int options; | |
295 if (!native.isChecked()) | |
339
4e31cbd9e20c
fix enumeration problems. requires patched dmd
Eldar Insafutdinov
parents:
323
diff
changeset
|
296 options |= QFileDialog.Option.DontUseNativeDialog; |
143 | 297 string selectedFilter; |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
298 auto files = QFileDialog.getOpenFileNames( |
143 | 299 this, tr("QFilegetOpenFileNames()"), |
300 openFilesPath, | |
301 tr("All Files (*);;Text Files (*.txt)"), | |
302 selectedFilter, | |
303 options); | |
304 if (files.length) { | |
305 openFilesPath = files[0]; | |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
306 openFileNamesLabel.setText(join(files.toArray, "; ")); |
143 | 307 } |
308 } | |
309 | |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
310 void slot_setSaveFileName() |
143 | 311 { |
312 int options; | |
313 if (!native.isChecked()) | |
339
4e31cbd9e20c
fix enumeration problems. requires patched dmd
Eldar Insafutdinov
parents:
323
diff
changeset
|
314 options |= QFileDialog.Option.DontUseNativeDialog; |
143 | 315 string selectedFilter; |
316 string fileName = QFileDialog.getSaveFileName(this, | |
317 tr("QFilegetSaveFileName()"), | |
318 saveFileNameLabel.text(), | |
319 tr("All Files (*);;Text Files (*.txt)"), | |
320 selectedFilter, | |
321 options); | |
322 if (fileName.length) | |
323 saveFileNameLabel.setText(fileName); | |
324 } | |
325 | |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
326 void slot_criticalMessage() |
143 | 327 { |
328 QMessageBox.StandardButton reply; | |
329 reply = QMessageBox.critical(this, tr("QMessageBox.critical()"), | |
330 MESSAGE, | |
331 QMessageBox.Abort | QMessageBox.Retry | QMessageBox.Ignore); | |
332 if (reply == QMessageBox.Abort) | |
333 criticalLabel.setText(tr("Abort")); | |
334 else if (reply == QMessageBox.Retry) | |
335 criticalLabel.setText(tr("Retry")); | |
336 else | |
337 criticalLabel.setText(tr("Ignore")); | |
338 } | |
339 | |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
340 void slot_informationMessage() |
143 | 341 { |
342 QMessageBox.StandardButton reply; | |
343 reply = QMessageBox.information(this, tr("QMessageBox.information()"), MESSAGE); | |
344 if (reply == QMessageBox.Ok) | |
345 informationLabel.setText(tr("OK")); | |
346 else | |
347 informationLabel.setText(tr("Escape")); | |
348 } | |
349 | |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
350 void slot_questionMessage() |
143 | 351 { |
352 QMessageBox.StandardButton reply; | |
353 reply = QMessageBox.question(this, tr("QMessageBox.question()"), | |
354 MESSAGE, | |
355 QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel); | |
356 if (reply == QMessageBox.Yes) | |
357 questionLabel.setText(tr("Yes")); | |
358 else if (reply == QMessageBox.No) | |
359 questionLabel.setText(tr("No")); | |
360 else | |
361 questionLabel.setText(tr("Cancel")); | |
362 } | |
363 | |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
364 void slot_warningMessage() |
143 | 365 { |
366 auto msgBox = new QMessageBox(QMessageBox.Warning, tr("QMessageBox.warning()"), MESSAGE, 0, this); | |
367 msgBox.addButton(tr("Save &Again"), QMessageBox.AcceptRole); | |
368 msgBox.addButton(tr("&Continue"), QMessageBox.RejectRole); | |
369 if (msgBox.exec() == QMessageBox.AcceptRole) | |
370 warningLabel.setText(tr("Save Again")); | |
371 else | |
372 warningLabel.setText(tr("Continue")); | |
373 } | |
374 | |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
375 void slot_errorMessage() |
143 | 376 { |
377 errorMessageDialog.showMessage( | |
378 tr("This dialog shows and remembers error messages. " | |
379 "If the checkbox is checked (as it is by default), " | |
380 "the shown message will be shown again, " | |
381 "but if the user unchecks the box the message " | |
382 "will not appear again if QErrorMessage.showMessage() " | |
383 "is called with the same message.")); | |
384 errorLabel.setText(tr("If the box is unchecked, the message won't appear again.")); | |
385 } | |
386 | |
387 private: | |
388 | |
389 QCheckBox native; | |
390 QLabel integerLabel; | |
391 QLabel doubleLabel; | |
392 QLabel itemLabel; | |
393 QLabel textLabel; | |
394 QLabel colorLabel; | |
395 QLabel fontLabel; | |
396 QLabel directoryLabel; | |
397 QLabel openFileNameLabel; | |
398 QLabel openFileNamesLabel; | |
399 QLabel saveFileNameLabel; | |
400 QLabel criticalLabel; | |
401 QLabel informationLabel; | |
402 QLabel questionLabel; | |
403 QLabel warningLabel; | |
404 QLabel errorLabel; | |
405 QErrorMessage errorMessageDialog; | |
406 | |
211 | 407 string openFilesPath; |
350
31520b2c0b3c
Removed dependency on parent trait and stringof
Max Samukha <maxter@spambox.com>
parents:
339
diff
changeset
|
408 |
323
7a3c43424dca
make all examples compile with new signals/slots
eldar_ins@eldar-laptop
parents:
282
diff
changeset
|
409 mixin Q_OBJECT; |
143 | 410 } |