1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the Qt Data Visualization module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:GPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU
19** General Public License version 3 or (at your option) any later version
20** approved by the KDE Free Qt Foundation. The licenses are as published by
21** the Free Software Foundation and appearing in the file LICENSE.GPL3
22** included in the packaging of this file. Please review the following
23** information to ensure the GNU General Public License requirements will
24** be met: https://www.gnu.org/licenses/gpl-3.0.html.
25**
26** $QT_END_LICENSE$
27**
28****************************************************************************/
29
30#include "chart.h"
31
32#include <QApplication>
33#include <QWidget>
34#include <QHBoxLayout>
35#include <QVBoxLayout>
36#include <QPushButton>
37#include <QCheckBox>
38#include <QSlider>
39#include <QFontComboBox>
40#include <QLabel>
41#include <QScreen>
42#include <QFontDatabase>
43#include <QLinearGradient>
44#include <QPainter>
45#include <QColorDialog>
46#include <QLineEdit>
47#include <QSpinBox>
48#include <QtGui/QOpenGLContext>
49#include <QtDataVisualization/QCustom3DItem>
50#include <QtDataVisualization/QCustom3DLabel>
51#include <QtDataVisualization/QCustom3DVolume>
52
53int main(int argc, char **argv)
54{
55 QApplication app(argc, argv);
56
57 // Test creating custom items before graph is created
58 QCustom3DItem customItem;
59 QCustom3DLabel customLabel;
60 QCustom3DVolume customVolume;
61
62 QWidget *widget = new QWidget;
63 QHBoxLayout *hLayout = new QHBoxLayout(widget);
64 QVBoxLayout *vLayout = new QVBoxLayout();
65 QVBoxLayout *vLayout2 = new QVBoxLayout();
66 QVBoxLayout *vLayout3 = new QVBoxLayout();
67
68 // For testing custom surface format
69 QSurfaceFormat surfaceFormat;
70 surfaceFormat.setDepthBufferSize(24);
71 surfaceFormat.setSamples(8);
72
73 Q3DBars *widgetchart = new Q3DBars(&surfaceFormat);
74 QSize screenSize = widgetchart->screen()->size();
75
76 QWidget *container = QWidget::createWindowContainer(window: widgetchart);
77 container->setMinimumSize(QSize(screenSize.width() / 3, screenSize.height() / 3));
78 container->setMaximumSize(screenSize);
79 container->setSizePolicy(hor: QSizePolicy::Expanding, ver: QSizePolicy::Expanding);
80 container->setFocusPolicy(Qt::StrongFocus);
81
82 widget->setWindowTitle(QStringLiteral("Average temperatures in Oulu, Finland (2006-2012)"));
83
84 hLayout->addWidget(container, stretch: 1);
85 hLayout->addLayout(layout: vLayout);
86 hLayout->addLayout(layout: vLayout2);
87 hLayout->addLayout(layout: vLayout3);
88
89 QPushButton *addSeriesButton = new QPushButton(widget);
90 addSeriesButton->setText(QStringLiteral("Add / Remove a series"));
91 addSeriesButton->setEnabled(true);
92
93 QPushButton *addDataButton = new QPushButton(widget);
94 addDataButton->setText(QStringLiteral("Add a row of data"));
95 addDataButton->setEnabled(false);
96
97 QPushButton *addMultiDataButton = new QPushButton(widget);
98 addMultiDataButton->setText(QStringLiteral("Add many rows of data"));
99 addMultiDataButton->setEnabled(false);
100
101 QPushButton *insertDataButton = new QPushButton(widget);
102 insertDataButton->setText(QStringLiteral("Insert a row of data"));
103 insertDataButton->setEnabled(false);
104
105 QPushButton *insertMultiDataButton = new QPushButton(widget);
106 insertMultiDataButton->setText(QStringLiteral("Insert many rows of data"));
107 insertMultiDataButton->setEnabled(false);
108
109 QPushButton *changeSingleDataButton = new QPushButton(widget);
110 changeSingleDataButton->setText(QStringLiteral("Change selected bar value"));
111 changeSingleDataButton->setEnabled(false);
112
113 QPushButton *changeRowButton = new QPushButton(widget);
114 changeRowButton->setText(QStringLiteral("Change selected row values"));
115 changeRowButton->setEnabled(false);
116
117 QPushButton *changeRowsButton = new QPushButton(widget);
118 changeRowsButton->setText(QStringLiteral("Change three rows from selected"));
119 changeRowsButton->setEnabled(false);
120
121 QPushButton *removeRowButton = new QPushButton(widget);
122 removeRowButton->setText(QStringLiteral("Remove selected row"));
123 removeRowButton->setEnabled(false);
124
125 QPushButton *removeRowsButton = new QPushButton(widget);
126 removeRowsButton->setText(QStringLiteral("Remove three rows before selected"));
127 removeRowsButton->setEnabled(false);
128
129 QPushButton *massiveArrayButton = new QPushButton(widget);
130 massiveArrayButton->setText(QStringLiteral("Create massive array"));
131 massiveArrayButton->setEnabled(false);
132
133 QPushButton *themeButton = new QPushButton(widget);
134 themeButton->setText(QStringLiteral("Change theme"));
135
136 QPushButton *labelButton = new QPushButton(widget);
137 labelButton->setText(QStringLiteral("Change label style"));
138
139 QPushButton *multiScaleButton = new QPushButton(widget);
140 multiScaleButton->setText(QStringLiteral("Change multiseries scaling"));
141
142 QPushButton *styleButton = new QPushButton(widget);
143 styleButton->setText(QStringLiteral("Change bar style"));
144
145 QPushButton *cameraButton = new QPushButton(widget);
146 cameraButton->setText(QStringLiteral("Change camera preset"));
147
148 QPushButton *selectionButton = new QPushButton(widget);
149 selectionButton->setText(QStringLiteral("Change selection mode"));
150
151 QPushButton *setSelectedBarButton = new QPushButton(widget);
152 setSelectedBarButton->setText(QStringLiteral("Select/deselect bar at (5,5)"));
153
154 QPushButton *swapAxisButton = new QPushButton(widget);
155 swapAxisButton->setText(QStringLiteral("Swap value axis"));
156 swapAxisButton->setEnabled(false);
157
158 QPushButton *insertRemoveTestButton = new QPushButton(widget);
159 insertRemoveTestButton->setText(QStringLiteral("Toggle insert/remove cycle"));
160 insertRemoveTestButton->setEnabled(true);
161
162 QPushButton *releaseAxesButton = new QPushButton(widget);
163 releaseAxesButton->setText(QStringLiteral("Release all axes"));
164 releaseAxesButton->setEnabled(true);
165
166 QPushButton *releaseProxiesButton = new QPushButton(widget);
167 releaseProxiesButton->setText(QStringLiteral("Release all proxies"));
168 releaseProxiesButton->setEnabled(true);
169
170 QPushButton *flipViewsButton = new QPushButton(widget);
171 flipViewsButton->setText(QStringLiteral("Flip views"));
172 flipViewsButton->setEnabled(true);
173
174 QPushButton *showFiveSeriesButton = new QPushButton(widget);
175 showFiveSeriesButton->setText(QStringLiteral("Try 5 series"));
176 showFiveSeriesButton->setEnabled(true);
177
178 QPushButton *changeColorStyleButton = new QPushButton(widget);
179 changeColorStyleButton->setText(QStringLiteral("Change color style"));
180 changeColorStyleButton->setEnabled(true);
181
182 QPushButton *ownThemeButton = new QPushButton(widget);
183 ownThemeButton->setText(QStringLiteral("Use own theme"));
184 ownThemeButton->setEnabled(true);
185
186 QPushButton *primarySeriesTestsButton = new QPushButton(widget);
187 primarySeriesTestsButton->setText(QStringLiteral("Test primary series"));
188 primarySeriesTestsButton->setEnabled(true);
189
190 QPushButton *toggleRotationButton = new QPushButton(widget);
191 toggleRotationButton->setText(QStringLiteral("Toggle rotation"));
192 toggleRotationButton->setEnabled(true);
193
194 QPushButton *logAxisButton = new QPushButton(widget);
195 logAxisButton->setText(QStringLiteral("Use Log Axis"));
196 logAxisButton->setEnabled(true);
197
198 QPushButton *testItemAndRowChangesButton = new QPushButton(widget);
199 testItemAndRowChangesButton->setText(QStringLiteral("Test Item/Row changing"));
200 testItemAndRowChangesButton->setEnabled(true);
201
202 QColorDialog *colorDialog = new QColorDialog(widget);
203
204 QLinearGradient grBtoY(0, 0, 100, 0);
205 grBtoY.setColorAt(pos: 1.0, color: Qt::black);
206 grBtoY.setColorAt(pos: 0.67, color: Qt::blue);
207 grBtoY.setColorAt(pos: 0.33, color: Qt::red);
208 grBtoY.setColorAt(pos: 0.0, color: Qt::yellow);
209 QPixmap pm(100, 24);
210 QPainter pmp(&pm);
211 pmp.setBrush(QBrush(grBtoY));
212 pmp.setPen(Qt::NoPen);
213 pmp.drawRect(x: 0, y: 0, w: 100, h: 24);
214 QPushButton *gradientBtoYPB = new QPushButton(widget);
215 gradientBtoYPB->setIcon(QIcon(pm));
216 gradientBtoYPB->setIconSize(QSize(100, 24));
217
218 QLabel *fpsLabel = new QLabel(QStringLiteral(""));
219
220 QCheckBox *fpsCheckBox = new QCheckBox(widget);
221 fpsCheckBox->setText(QStringLiteral("Measure Fps"));
222 fpsCheckBox->setChecked(false);
223
224 QCheckBox *reverseValueAxisCheckBox = new QCheckBox(widget);
225 reverseValueAxisCheckBox->setText(QStringLiteral("Reverse value axis"));
226 reverseValueAxisCheckBox->setChecked(false);
227
228 QCheckBox *backgroundCheckBox = new QCheckBox(widget);
229 backgroundCheckBox->setText(QStringLiteral("Show background"));
230 backgroundCheckBox->setChecked(true);
231
232 QCheckBox *gridCheckBox = new QCheckBox(widget);
233 gridCheckBox->setText(QStringLiteral("Show grid"));
234 gridCheckBox->setChecked(true);
235
236 QCheckBox *rotationCheckBox = new QCheckBox(widget);
237 rotationCheckBox->setText("Rotate with slider");
238
239 QCheckBox *staticCheckBox = new QCheckBox(widget);
240 staticCheckBox->setText("Use dynamic data");
241 staticCheckBox->setChecked(false);
242
243 QCheckBox *inputHandlerRotationCheckBox = new QCheckBox(widget);
244 inputHandlerRotationCheckBox->setText("IH: Allow rotation");
245 inputHandlerRotationCheckBox->setChecked(true);
246
247 QCheckBox *inputHandlerZoomCheckBox = new QCheckBox(widget);
248 inputHandlerZoomCheckBox->setText("IH: Allow zoom");
249 inputHandlerZoomCheckBox->setChecked(true);
250
251 QCheckBox *inputHandlerSelectionCheckBox = new QCheckBox(widget);
252 inputHandlerSelectionCheckBox->setText("IH: Allow selection");
253 inputHandlerSelectionCheckBox->setChecked(true);
254
255 QCheckBox *inputHandlerZoomAtTargetCheckBox = new QCheckBox(widget);
256 inputHandlerZoomAtTargetCheckBox->setText("IH: setZoomAtTarget");
257 inputHandlerZoomAtTargetCheckBox->setChecked(true);
258
259 QSlider *rotationSliderX = new QSlider(Qt::Horizontal, widget);
260 rotationSliderX->setTickInterval(1);
261 rotationSliderX->setMinimum(-180);
262 rotationSliderX->setValue(0);
263 rotationSliderX->setMaximum(180);
264 rotationSliderX->setEnabled(false);
265 QSlider *rotationSliderY = new QSlider(Qt::Horizontal, widget);
266 rotationSliderY->setTickInterval(1);
267 rotationSliderY->setMinimum(0);
268 rotationSliderY->setValue(0);
269 rotationSliderY->setMaximum(90);
270 rotationSliderY->setEnabled(false);
271
272 QSlider *ratioSlider = new QSlider(Qt::Horizontal, widget);
273 ratioSlider->setTickInterval(1);
274 ratioSlider->setMinimum(10);
275 ratioSlider->setValue(30);
276 ratioSlider->setMaximum(100);
277
278 QCheckBox *reflectionCheckBox = new QCheckBox(widget);
279 reflectionCheckBox->setText(QStringLiteral("Show reflections"));
280 reflectionCheckBox->setChecked(false);
281
282 QSlider *reflectivitySlider = new QSlider(Qt::Horizontal, widget);
283 reflectivitySlider->setMinimum(0);
284 reflectivitySlider->setValue(50);
285 reflectivitySlider->setMaximum(100);
286
287 QSlider *floorLevelSlider = new QSlider(Qt::Horizontal, widget);
288 floorLevelSlider->setMinimum(-50);
289 floorLevelSlider->setValue(0);
290 floorLevelSlider->setMaximum(50);
291
292 QPushButton *toggleCustomItemButton = new QPushButton(widget);
293 toggleCustomItemButton->setText(QStringLiteral("Toggle Custom Item"));
294
295 QSlider *spacingSliderX = new QSlider(Qt::Horizontal, widget);
296 spacingSliderX->setTickInterval(1);
297 spacingSliderX->setMinimum(0);
298 spacingSliderX->setValue(10);
299 spacingSliderX->setMaximum(200);
300 QSlider *spacingSliderZ = new QSlider(Qt::Horizontal, widget);
301 spacingSliderZ->setTickInterval(1);
302 spacingSliderZ->setMinimum(0);
303 spacingSliderZ->setValue(10);
304 spacingSliderZ->setMaximum(200);
305
306 QSlider *sampleSliderX = new QSlider(Qt::Horizontal, widget);
307 sampleSliderX->setTickInterval(1);
308 sampleSliderX->setMinimum(1);
309 sampleSliderX->setValue(21);
310 sampleSliderX->setMaximum(200);
311 sampleSliderX->setEnabled(false);
312 QSlider *sampleSliderZ = new QSlider(Qt::Horizontal, widget);
313 sampleSliderZ->setTickInterval(1);
314 sampleSliderZ->setMinimum(1);
315 sampleSliderZ->setValue(21);
316 sampleSliderZ->setMaximum(200);
317 sampleSliderZ->setEnabled(false);
318
319 QSlider *minSliderX = new QSlider(Qt::Horizontal, widget);
320 minSliderX->setTickInterval(10);
321 minSliderX->setTickPosition(QSlider::TicksBelow);
322 minSliderX->setMinimum(0);
323 minSliderX->setValue(0);
324 minSliderX->setMaximum(200);
325 minSliderX->setEnabled(false);
326 QSlider *minSliderZ = new QSlider(Qt::Horizontal, widget);
327 minSliderZ->setTickInterval(10);
328 minSliderZ->setTickPosition(QSlider::TicksAbove);
329 minSliderZ->setMinimum(0);
330 minSliderZ->setValue(0);
331 minSliderZ->setMaximum(200);
332 minSliderZ->setEnabled(false);
333 QSlider *minSliderY = new QSlider(Qt::Horizontal, widget);
334 minSliderY->setTickInterval(10);
335 minSliderY->setTickPosition(QSlider::TicksBelow);
336 minSliderY->setMinimum(-100);
337 minSliderY->setValue(0);
338 minSliderY->setMaximum(100);
339 minSliderY->setEnabled(false);
340 QSlider *maxSliderY = new QSlider(Qt::Horizontal, widget);
341 maxSliderY->setTickInterval(10);
342 maxSliderY->setTickPosition(QSlider::TicksAbove);
343 maxSliderY->setMinimum(-50);
344 maxSliderY->setValue(100);
345 maxSliderY->setMaximum(200);
346 maxSliderY->setEnabled(false);
347
348 QSlider *fontSizeSlider = new QSlider(Qt::Horizontal, widget);
349 fontSizeSlider->setTickInterval(1);
350 fontSizeSlider->setMinimum(1);
351 fontSizeSlider->setValue(20);
352 fontSizeSlider->setMaximum(100);
353
354 QFontComboBox *fontList = new QFontComboBox(widget);
355
356 QComboBox *shadowQuality = new QComboBox(widget);
357 shadowQuality->addItem(QStringLiteral("None"));
358 shadowQuality->addItem(QStringLiteral("Low"));
359 shadowQuality->addItem(QStringLiteral("Medium"));
360 shadowQuality->addItem(QStringLiteral("High"));
361 shadowQuality->addItem(QStringLiteral("Low Soft"));
362 shadowQuality->addItem(QStringLiteral("Medium Soft"));
363 shadowQuality->addItem(QStringLiteral("High Soft"));
364 shadowQuality->setCurrentIndex(5);
365
366 QLineEdit *valueAxisFormatEdit = new QLineEdit(widget);
367 QLineEdit *logBaseEdit = new QLineEdit(widget);
368 QSpinBox *valueAxisSegmentsSpin = new QSpinBox(widget);
369 valueAxisSegmentsSpin->setMinimum(1);
370 valueAxisSegmentsSpin->setMaximum(100);
371 valueAxisSegmentsSpin->setValue(10);
372
373 QSlider *cameraTargetSliderX = new QSlider(Qt::Horizontal, widget);
374 cameraTargetSliderX->setTickInterval(1);
375 cameraTargetSliderX->setMinimum(-100);
376 cameraTargetSliderX->setValue(0);
377 cameraTargetSliderX->setMaximum(100);
378 QSlider *cameraTargetSliderY = new QSlider(Qt::Horizontal, widget);
379 cameraTargetSliderY->setTickInterval(1);
380 cameraTargetSliderY->setMinimum(-100);
381 cameraTargetSliderY->setValue(0);
382 cameraTargetSliderY->setMaximum(100);
383 QSlider *cameraTargetSliderZ = new QSlider(Qt::Horizontal, widget);
384 cameraTargetSliderZ->setTickInterval(1);
385 cameraTargetSliderZ->setMinimum(-100);
386 cameraTargetSliderZ->setValue(0);
387 cameraTargetSliderZ->setMaximum(100);
388
389 QSlider *marginSlider = new QSlider(Qt::Horizontal, widget);
390 marginSlider->setMinimum(-1);
391 marginSlider->setValue(-1);
392 marginSlider->setMaximum(100);
393
394 vLayout->addWidget(addSeriesButton, stretch: 0, alignment: Qt::AlignTop);
395 vLayout->addWidget(addDataButton, stretch: 0, alignment: Qt::AlignTop);
396 vLayout->addWidget(addMultiDataButton, stretch: 0, alignment: Qt::AlignTop);
397 vLayout->addWidget(insertDataButton, stretch: 0, alignment: Qt::AlignTop);
398 vLayout->addWidget(insertMultiDataButton, stretch: 0, alignment: Qt::AlignTop);
399 vLayout->addWidget(changeSingleDataButton, stretch: 0, alignment: Qt::AlignTop);
400 vLayout->addWidget(changeRowButton, stretch: 0, alignment: Qt::AlignTop);
401 vLayout->addWidget(changeRowsButton, stretch: 0, alignment: Qt::AlignTop);
402 vLayout->addWidget(removeRowButton, stretch: 0, alignment: Qt::AlignTop);
403 vLayout->addWidget(removeRowsButton, stretch: 0, alignment: Qt::AlignTop);
404 vLayout->addWidget(massiveArrayButton, stretch: 0, alignment: Qt::AlignTop);
405 vLayout->addWidget(showFiveSeriesButton, stretch: 0, alignment: Qt::AlignTop);
406 vLayout->addWidget(themeButton, stretch: 0, alignment: Qt::AlignTop);
407 vLayout->addWidget(labelButton, stretch: 0, alignment: Qt::AlignTop);
408 vLayout->addWidget(multiScaleButton, stretch: 0, alignment: Qt::AlignTop);
409 vLayout->addWidget(styleButton, stretch: 0, alignment: Qt::AlignTop);
410 vLayout->addWidget(cameraButton, stretch: 0, alignment: Qt::AlignTop);
411 vLayout->addWidget(selectionButton, stretch: 0, alignment: Qt::AlignTop);
412 vLayout->addWidget(setSelectedBarButton, stretch: 0, alignment: Qt::AlignTop);
413 vLayout->addWidget(swapAxisButton, stretch: 0, alignment: Qt::AlignTop);
414 vLayout->addWidget(insertRemoveTestButton, stretch: 0, alignment: Qt::AlignTop);
415 vLayout->addWidget(releaseAxesButton, stretch: 0, alignment: Qt::AlignTop);
416 vLayout->addWidget(releaseProxiesButton, stretch: 1, alignment: Qt::AlignTop);
417
418 vLayout2->addWidget(flipViewsButton, stretch: 0, alignment: Qt::AlignTop);
419 vLayout2->addWidget(changeColorStyleButton, stretch: 0, alignment: Qt::AlignTop);
420 vLayout2->addWidget(ownThemeButton, stretch: 0, alignment: Qt::AlignTop);
421 vLayout2->addWidget(primarySeriesTestsButton, stretch: 0, alignment: Qt::AlignTop);
422 vLayout2->addWidget(toggleRotationButton, stretch: 0, alignment: Qt::AlignTop);
423 vLayout2->addWidget(gradientBtoYPB, stretch: 0, alignment: Qt::AlignTop);
424 vLayout2->addWidget(logAxisButton, stretch: 0, alignment: Qt::AlignTop);
425 vLayout2->addWidget(testItemAndRowChangesButton, stretch: 0, alignment: Qt::AlignTop);
426 vLayout2->addWidget(staticCheckBox, stretch: 0, alignment: Qt::AlignTop);
427 vLayout2->addWidget(rotationCheckBox, stretch: 0, alignment: Qt::AlignTop);
428 vLayout2->addWidget(rotationSliderX, stretch: 0, alignment: Qt::AlignTop);
429 vLayout2->addWidget(rotationSliderY, stretch: 0, alignment: Qt::AlignTop);
430 vLayout2->addWidget(new QLabel(QStringLiteral("Adjust relative bar size")), stretch: 0, alignment: Qt::AlignTop);
431 vLayout2->addWidget(ratioSlider, stretch: 0, alignment: Qt::AlignTop);
432 vLayout2->addWidget(new QLabel(QStringLiteral("Adjust relative bar spacing")), stretch: 0, alignment: Qt::AlignTop);
433 vLayout2->addWidget(spacingSliderX, stretch: 0, alignment: Qt::AlignTop);
434 vLayout2->addWidget(spacingSliderZ, stretch: 0, alignment: Qt::AlignTop);
435 vLayout2->addWidget(new QLabel(QStringLiteral("Adjust sample count")), stretch: 0, alignment: Qt::AlignTop);
436 vLayout2->addWidget(sampleSliderX, stretch: 0, alignment: Qt::AlignTop);
437 vLayout2->addWidget(sampleSliderZ, stretch: 0, alignment: Qt::AlignTop);
438 vLayout2->addWidget(new QLabel(QStringLiteral("Adjust data window minimums")), stretch: 0, alignment: Qt::AlignTop);
439 vLayout2->addWidget(minSliderX, stretch: 0, alignment: Qt::AlignTop);
440 vLayout2->addWidget(minSliderZ, stretch: 0, alignment: Qt::AlignTop);
441 vLayout2->addWidget(minSliderY, stretch: 0, alignment: Qt::AlignTop);
442 vLayout2->addWidget(maxSliderY, stretch: 1, alignment: Qt::AlignTop);
443
444 vLayout3->addWidget(fpsLabel, stretch: 0, alignment: Qt::AlignTop);
445 vLayout3->addWidget(fpsCheckBox, stretch: 0, alignment: Qt::AlignTop);
446 vLayout3->addWidget(reverseValueAxisCheckBox, stretch: 0, alignment: Qt::AlignTop);
447 vLayout3->addWidget(backgroundCheckBox, stretch: 0, alignment: Qt::AlignTop);
448 vLayout3->addWidget(gridCheckBox, stretch: 0, alignment: Qt::AlignTop);
449 vLayout3->addWidget(inputHandlerRotationCheckBox, stretch: 0, alignment: Qt::AlignTop);
450 vLayout3->addWidget(inputHandlerZoomCheckBox, stretch: 0, alignment: Qt::AlignTop);
451 vLayout3->addWidget(inputHandlerSelectionCheckBox, stretch: 0, alignment: Qt::AlignTop);
452 vLayout3->addWidget(inputHandlerZoomAtTargetCheckBox, stretch: 0, alignment: Qt::AlignTop);
453 vLayout3->addWidget(new QLabel(QStringLiteral("Adjust shadow quality")), stretch: 0, alignment: Qt::AlignTop);
454 vLayout3->addWidget(shadowQuality, stretch: 0, alignment: Qt::AlignTop);
455 vLayout3->addWidget(new QLabel(QStringLiteral("Change font")), stretch: 0, alignment: Qt::AlignTop);
456 vLayout3->addWidget(fontList, stretch: 0, alignment: Qt::AlignTop);
457 vLayout3->addWidget(new QLabel(QStringLiteral("Adjust font size")), stretch: 0, alignment: Qt::AlignTop);
458 vLayout3->addWidget(fontSizeSlider, stretch: 0, alignment: Qt::AlignTop);
459 vLayout3->addWidget(new QLabel(QStringLiteral("Value axis format")), stretch: 0, alignment: Qt::AlignTop);
460 vLayout3->addWidget(valueAxisFormatEdit, stretch: 0, alignment: Qt::AlignTop);
461 vLayout3->addWidget(new QLabel(QStringLiteral("Log axis base")), stretch: 0, alignment: Qt::AlignTop);
462 vLayout3->addWidget(logBaseEdit, stretch: 0, alignment: Qt::AlignTop);
463 vLayout3->addWidget(new QLabel(QStringLiteral("Value axis segments")), stretch: 0, alignment: Qt::AlignTop);
464 vLayout3->addWidget(valueAxisSegmentsSpin, stretch: 0, alignment: Qt::AlignTop);
465 vLayout3->addWidget(new QLabel(QStringLiteral("Camera target")), stretch: 0, alignment: Qt::AlignTop);
466 vLayout3->addWidget(cameraTargetSliderX, stretch: 0, alignment: Qt::AlignTop);
467 vLayout3->addWidget(cameraTargetSliderY, stretch: 0, alignment: Qt::AlignTop);
468 vLayout3->addWidget(cameraTargetSliderZ, stretch: 0, alignment: Qt::AlignTop);
469 vLayout3->addWidget(reflectionCheckBox, stretch: 0, alignment: Qt::AlignTop);
470 vLayout3->addWidget(reflectivitySlider, stretch: 0, alignment: Qt::AlignTop);
471 vLayout3->addWidget(toggleCustomItemButton, stretch: 0, alignment: Qt::AlignTop);
472 vLayout3->addWidget(new QLabel(QStringLiteral("Adjust floor level")), stretch: 0, alignment: Qt::AlignTop);
473 vLayout3->addWidget(floorLevelSlider, stretch: 0, alignment: Qt::AlignTop);
474 vLayout3->addWidget(new QLabel(QStringLiteral("Adjust margin")), stretch: 0, alignment: Qt::AlignTop);
475 vLayout3->addWidget(marginSlider, stretch: 1, alignment: Qt::AlignTop);
476
477 widget->show();
478
479 GraphModifier *modifier = new GraphModifier(widgetchart, colorDialog);
480
481 QObject::connect(sender: rotationSliderX, signal: &QSlider::valueChanged, receiver: modifier, slot: &GraphModifier::rotateX);
482 QObject::connect(sender: rotationSliderY, signal: &QSlider::valueChanged, receiver: modifier, slot: &GraphModifier::rotateY);
483
484 QObject::connect(sender: ratioSlider, signal: &QSlider::valueChanged, receiver: modifier, slot: &GraphModifier::setSpecsRatio);
485
486 QObject::connect(sender: spacingSliderX, signal: &QSlider::valueChanged, receiver: modifier,
487 slot: &GraphModifier::setSpacingSpecsX);
488 QObject::connect(sender: spacingSliderZ, signal: &QSlider::valueChanged, receiver: modifier,
489 slot: &GraphModifier::setSpacingSpecsZ);
490
491 QObject::connect(sender: sampleSliderX, signal: &QSlider::valueChanged, receiver: modifier,
492 slot: &GraphModifier::setSampleCountX);
493 QObject::connect(sender: sampleSliderZ, signal: &QSlider::valueChanged, receiver: modifier,
494 slot: &GraphModifier::setSampleCountZ);
495 QObject::connect(sender: minSliderX, signal: &QSlider::valueChanged, receiver: modifier,
496 slot: &GraphModifier::setMinX);
497 QObject::connect(sender: minSliderZ, signal: &QSlider::valueChanged, receiver: modifier,
498 slot: &GraphModifier::setMinZ);
499 QObject::connect(sender: minSliderY, signal: &QSlider::valueChanged, receiver: modifier,
500 slot: &GraphModifier::setMinY);
501 QObject::connect(sender: maxSliderY, signal: &QSlider::valueChanged, receiver: modifier,
502 slot: &GraphModifier::setMaxY);
503 QObject::connect(sender: cameraTargetSliderX, signal: &QSlider::valueChanged, receiver: modifier,
504 slot: &GraphModifier::setCameraTargetX);
505 QObject::connect(sender: cameraTargetSliderY, signal: &QSlider::valueChanged, receiver: modifier,
506 slot: &GraphModifier::setCameraTargetY);
507 QObject::connect(sender: cameraTargetSliderZ, signal: &QSlider::valueChanged, receiver: modifier,
508 slot: &GraphModifier::setCameraTargetZ);
509
510 QObject::connect(sender: shadowQuality, SIGNAL(currentIndexChanged(int)), receiver: modifier,
511 SLOT(changeShadowQuality(int)));
512 QObject::connect(sender: modifier, signal: &GraphModifier::shadowQualityChanged, receiver: shadowQuality,
513 slot: &QComboBox::setCurrentIndex);
514 QObject::connect(sender: fontSizeSlider, signal: &QSlider::valueChanged, receiver: modifier,
515 slot: &GraphModifier::changeFontSize);
516 QObject::connect(sender: valueAxisFormatEdit, signal: &QLineEdit::textEdited, receiver: modifier,
517 slot: &GraphModifier::changeValueAxisFormat);
518 QObject::connect(sender: logBaseEdit, signal: &QLineEdit::textEdited, receiver: modifier,
519 slot: &GraphModifier::changeLogBase);
520 QObject::connect(sender: valueAxisSegmentsSpin, SIGNAL(valueChanged(int)), receiver: modifier,
521 SLOT(changeValueAxisSegments(int)));
522
523 QObject::connect(sender: multiScaleButton, signal: &QPushButton::clicked, receiver: modifier,
524 slot: &GraphModifier::toggleMultiseriesScaling);
525 QObject::connect(sender: styleButton, signal: &QPushButton::clicked, receiver: modifier, slot: &GraphModifier::changeStyle);
526 QObject::connect(sender: cameraButton, signal: &QPushButton::clicked, receiver: modifier,
527 slot: &GraphModifier::changePresetCamera);
528 QObject::connect(sender: themeButton, signal: &QPushButton::clicked, receiver: modifier, slot: &GraphModifier::changeTheme);
529 QObject::connect(sender: labelButton, signal: &QPushButton::clicked, receiver: modifier,
530 slot: &GraphModifier::changeLabelStyle);
531 QObject::connect(sender: addDataButton, signal: &QPushButton::clicked, receiver: modifier, slot: &GraphModifier::addRow);
532 QObject::connect(sender: addSeriesButton, signal: &QPushButton::clicked, receiver: modifier, slot: &GraphModifier::addRemoveSeries);
533 QObject::connect(sender: addMultiDataButton, signal: &QPushButton::clicked, receiver: modifier, slot: &GraphModifier::addRows);
534 QObject::connect(sender: insertDataButton, signal: &QPushButton::clicked, receiver: modifier, slot: &GraphModifier::insertRow);
535 QObject::connect(sender: insertMultiDataButton, signal: &QPushButton::clicked, receiver: modifier, slot: &GraphModifier::insertRows);
536 QObject::connect(sender: changeSingleDataButton, signal: &QPushButton::clicked, receiver: modifier, slot: &GraphModifier::changeItem);
537 QObject::connect(sender: changeRowButton, signal: &QPushButton::clicked, receiver: modifier, slot: &GraphModifier::changeRow);
538 QObject::connect(sender: changeRowsButton, signal: &QPushButton::clicked, receiver: modifier, slot: &GraphModifier::changeRows);
539 QObject::connect(sender: removeRowButton, signal: &QPushButton::clicked, receiver: modifier, slot: &GraphModifier::removeRow);
540 QObject::connect(sender: removeRowsButton, signal: &QPushButton::clicked, receiver: modifier, slot: &GraphModifier::removeRows);
541 QObject::connect(sender: massiveArrayButton, signal: &QPushButton::clicked, receiver: modifier, slot: &GraphModifier::createMassiveArray);
542 QObject::connect(sender: showFiveSeriesButton, signal: &QPushButton::clicked, receiver: modifier, slot: &GraphModifier::showFiveSeries);
543 QObject::connect(sender: selectionButton, signal: &QPushButton::clicked, receiver: modifier,
544 slot: &GraphModifier::changeSelectionMode);
545 QObject::connect(sender: setSelectedBarButton, signal: &QPushButton::clicked, receiver: modifier,
546 slot: &GraphModifier::selectBar);
547 QObject::connect(sender: swapAxisButton, signal: &QPushButton::clicked, receiver: modifier,
548 slot: &GraphModifier::swapAxis);
549 QObject::connect(sender: insertRemoveTestButton, signal: &QPushButton::clicked, receiver: modifier,
550 slot: &GraphModifier::insertRemoveTestToggle);
551 QObject::connect(sender: releaseAxesButton, signal: &QPushButton::clicked, receiver: modifier,
552 slot: &GraphModifier::releaseAxes);
553 QObject::connect(sender: releaseProxiesButton, signal: &QPushButton::clicked, receiver: modifier,
554 slot: &GraphModifier::releaseSeries);
555
556 QObject::connect(sender: flipViewsButton, signal: &QPushButton::clicked, receiver: modifier,
557 slot: &GraphModifier::flipViews);
558 QObject::connect(sender: changeColorStyleButton, signal: &QPushButton::clicked, receiver: modifier,
559 slot: &GraphModifier::changeColorStyle);
560 QObject::connect(sender: ownThemeButton, signal: &QPushButton::clicked, receiver: modifier,
561 slot: &GraphModifier::useOwnTheme);
562 QObject::connect(sender: primarySeriesTestsButton, signal: &QPushButton::clicked, receiver: modifier,
563 slot: &GraphModifier::primarySeriesTest);
564 QObject::connect(sender: toggleRotationButton, signal: &QPushButton::clicked, receiver: modifier,
565 slot: &GraphModifier::toggleRotation);
566 QObject::connect(sender: logAxisButton, signal: &QPushButton::clicked, receiver: modifier,
567 slot: &GraphModifier::useLogAxis);
568 QObject::connect(sender: testItemAndRowChangesButton, signal: &QPushButton::clicked, receiver: modifier,
569 slot: &GraphModifier::testItemAndRowChanges);
570 QObject::connect(sender: colorDialog, signal: &QColorDialog::currentColorChanged, receiver: modifier,
571 slot: &GraphModifier::changeBaseColor);
572 QObject::connect(sender: gradientBtoYPB, signal: &QPushButton::clicked, receiver: modifier,
573 slot: &GraphModifier::setGradient);
574
575 QObject::connect(sender: fontList, signal: &QFontComboBox::currentFontChanged, receiver: modifier,
576 slot: &GraphModifier::changeFont);
577
578 QObject::connect(sender: fpsCheckBox, signal: &QCheckBox::stateChanged, receiver: modifier,
579 slot: &GraphModifier::setFpsMeasurement);
580 QObject::connect(sender: reverseValueAxisCheckBox, signal: &QCheckBox::stateChanged, receiver: modifier,
581 slot: &GraphModifier::reverseValueAxis);
582 QObject::connect(sender: backgroundCheckBox, signal: &QCheckBox::stateChanged, receiver: modifier,
583 slot: &GraphModifier::setBackgroundEnabled);
584 QObject::connect(sender: gridCheckBox, signal: &QCheckBox::stateChanged, receiver: modifier,
585 slot: &GraphModifier::setGridEnabled);
586 QObject::connect(sender: inputHandlerRotationCheckBox, signal: &QCheckBox::stateChanged, receiver: modifier,
587 slot: &GraphModifier::setInputHandlerRotationEnabled);
588 QObject::connect(sender: inputHandlerZoomCheckBox, signal: &QCheckBox::stateChanged, receiver: modifier,
589 slot: &GraphModifier::setInputHandlerZoomEnabled);
590 QObject::connect(sender: inputHandlerSelectionCheckBox, signal: &QCheckBox::stateChanged, receiver: modifier,
591 slot: &GraphModifier::setInputHandlerSelectionEnabled);
592 QObject::connect(sender: inputHandlerZoomAtTargetCheckBox, signal: &QCheckBox::stateChanged, receiver: modifier,
593 slot: &GraphModifier::setInputHandlerZoomAtTargetEnabled);
594 QObject::connect(sender: rotationCheckBox, signal: &QCheckBox::stateChanged, receiver: modifier,
595 slot: &GraphModifier::setUseNullInputHandler);
596
597 QObject::connect(sender: rotationCheckBox, signal: &QCheckBox::stateChanged, receiver: rotationSliderX,
598 slot: &QSlider::setEnabled);
599 QObject::connect(sender: rotationCheckBox, signal: &QCheckBox::stateChanged, receiver: rotationSliderX,
600 slot: &QSlider::setValue);
601 QObject::connect(sender: rotationCheckBox, signal: &QCheckBox::stateChanged, receiver: rotationSliderY,
602 slot: &QSlider::setEnabled);
603 QObject::connect(sender: rotationCheckBox, signal: &QCheckBox::stateChanged, receiver: rotationSliderY,
604 slot: &QSlider::setValue);
605
606 QObject::connect(sender: reflectionCheckBox, signal: &QCheckBox::stateChanged, receiver: modifier,
607 slot: &GraphModifier::setReflection);
608 QObject::connect(sender: reflectivitySlider, signal: &QSlider::valueChanged, receiver: modifier,
609 slot: &GraphModifier::setReflectivity);
610 QObject::connect(sender: floorLevelSlider, signal: &QSlider::valueChanged, receiver: modifier,
611 slot: &GraphModifier::setFloorLevel);
612 QObject::connect(sender: marginSlider, signal: &QSlider::valueChanged, receiver: modifier,
613 slot: &GraphModifier::setGraphMargin);
614 QObject::connect(sender: toggleCustomItemButton, signal: &QPushButton::clicked, receiver: modifier,
615 slot: &GraphModifier::toggleCustomItem);
616
617 QObject::connect(sender: staticCheckBox, signal: &QCheckBox::stateChanged, receiver: addDataButton,
618 slot: &QPushButton::setEnabled);
619 QObject::connect(sender: staticCheckBox, signal: &QCheckBox::stateChanged, receiver: addMultiDataButton,
620 slot: &QPushButton::setEnabled);
621 QObject::connect(sender: staticCheckBox, signal: &QCheckBox::stateChanged, receiver: insertDataButton,
622 slot: &QPushButton::setEnabled);
623 QObject::connect(sender: staticCheckBox, signal: &QCheckBox::stateChanged, receiver: insertMultiDataButton,
624 slot: &QPushButton::setEnabled);
625 QObject::connect(sender: staticCheckBox, signal: &QCheckBox::stateChanged, receiver: changeSingleDataButton,
626 slot: &QPushButton::setEnabled);
627 QObject::connect(sender: staticCheckBox, signal: &QCheckBox::stateChanged, receiver: changeRowButton,
628 slot: &QPushButton::setEnabled);
629 QObject::connect(sender: staticCheckBox, signal: &QCheckBox::stateChanged, receiver: changeRowsButton,
630 slot: &QPushButton::setEnabled);
631 QObject::connect(sender: staticCheckBox, signal: &QCheckBox::stateChanged, receiver: removeRowButton,
632 slot: &QPushButton::setEnabled);
633 QObject::connect(sender: staticCheckBox, signal: &QCheckBox::stateChanged, receiver: removeRowsButton,
634 slot: &QPushButton::setEnabled);
635 QObject::connect(sender: staticCheckBox, signal: &QCheckBox::stateChanged, receiver: massiveArrayButton,
636 slot: &QPushButton::setEnabled);
637 QObject::connect(sender: staticCheckBox, signal: &QCheckBox::stateChanged, receiver: sampleSliderX,
638 slot: &QSlider::setEnabled);
639 QObject::connect(sender: staticCheckBox, signal: &QCheckBox::stateChanged, receiver: sampleSliderZ,
640 slot: &QSlider::setEnabled);
641 QObject::connect(sender: staticCheckBox, signal: &QCheckBox::stateChanged, receiver: minSliderX,
642 slot: &QSlider::setEnabled);
643 QObject::connect(sender: staticCheckBox, signal: &QCheckBox::stateChanged, receiver: minSliderZ,
644 slot: &QSlider::setEnabled);
645 QObject::connect(sender: staticCheckBox, signal: &QCheckBox::stateChanged, receiver: minSliderY,
646 slot: &QSlider::setEnabled);
647 QObject::connect(sender: staticCheckBox, signal: &QCheckBox::stateChanged, receiver: maxSliderY,
648 slot: &QSlider::setEnabled);
649 QObject::connect(sender: staticCheckBox, signal: &QCheckBox::stateChanged, receiver: swapAxisButton,
650 slot: &QSlider::setEnabled);
651 QObject::connect(sender: staticCheckBox, signal: &QCheckBox::stateChanged, receiver: modifier, slot: &GraphModifier::restart);
652
653 modifier->setFpsLabel(fpsLabel);
654
655 modifier->start();
656
657 return app.exec();
658}
659

source code of qtdatavis3d/tests/manual/barstest/main.cpp