| 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 "scatterchart.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 <QComboBox> |
| 40 | #include <QFontComboBox> |
| 41 | #include <QLabel> |
| 42 | #include <QScreen> |
| 43 | #include <QFontDatabase> |
| 44 | #include <QLinearGradient> |
| 45 | #include <QPainter> |
| 46 | |
| 47 | int main(int argc, char **argv) |
| 48 | { |
| 49 | QApplication app(argc, argv); |
| 50 | //QCoreApplication::setAttribute(Qt::AA_UseOpenGLES); |
| 51 | |
| 52 | QWidget *widget = new QWidget; |
| 53 | QHBoxLayout *hLayout = new QHBoxLayout(widget); |
| 54 | QVBoxLayout *vLayout = new QVBoxLayout(); |
| 55 | QVBoxLayout *vLayout2 = new QVBoxLayout(); |
| 56 | QVBoxLayout *vLayout3 = new QVBoxLayout(); |
| 57 | |
| 58 | Q3DScatter *chart = new Q3DScatter(); |
| 59 | QSize screenSize = chart->screen()->size(); |
| 60 | |
| 61 | QWidget *container = QWidget::createWindowContainer(window: chart); |
| 62 | container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 2)); |
| 63 | container->setMaximumSize(screenSize); |
| 64 | container->setSizePolicy(hor: QSizePolicy::Expanding, ver: QSizePolicy::Expanding); |
| 65 | container->setFocusPolicy(Qt::StrongFocus); |
| 66 | |
| 67 | widget->setWindowTitle(QStringLiteral("values of some things in something" )); |
| 68 | |
| 69 | hLayout->addWidget(container, stretch: 1); |
| 70 | hLayout->addLayout(layout: vLayout); |
| 71 | hLayout->addLayout(layout: vLayout2); |
| 72 | hLayout->addLayout(layout: vLayout3); |
| 73 | |
| 74 | QPushButton *themeButton = new QPushButton(widget); |
| 75 | themeButton->setText(QStringLiteral("Change theme" )); |
| 76 | |
| 77 | QPushButton *labelButton = new QPushButton(widget); |
| 78 | labelButton->setText(QStringLiteral("Change label style" )); |
| 79 | |
| 80 | QPushButton *styleButton = new QPushButton(widget); |
| 81 | styleButton->setText(QStringLiteral("Change item style" )); |
| 82 | |
| 83 | QPushButton *cameraButton = new QPushButton(widget); |
| 84 | cameraButton->setText(QStringLiteral("Change camera preset" )); |
| 85 | |
| 86 | QPushButton *clearButton = new QPushButton(widget); |
| 87 | clearButton->setText(QStringLiteral("Clear chart" )); |
| 88 | |
| 89 | QPushButton *resetButton = new QPushButton(widget); |
| 90 | resetButton->setText(QStringLiteral("Reset axes" )); |
| 91 | |
| 92 | QPushButton *addOneButton = new QPushButton(widget); |
| 93 | addOneButton->setText(QStringLiteral("Add item" )); |
| 94 | |
| 95 | QPushButton *addBunchButton = new QPushButton(widget); |
| 96 | addBunchButton->setText(QStringLiteral("Add bunch of items" )); |
| 97 | |
| 98 | QPushButton *insertOneButton = new QPushButton(widget); |
| 99 | insertOneButton->setText(QStringLiteral("Insert item" )); |
| 100 | |
| 101 | QPushButton *insertBunchButton = new QPushButton(widget); |
| 102 | insertBunchButton->setText(QStringLiteral("Insert bunch of items" )); |
| 103 | |
| 104 | QPushButton *changeOneButton = new QPushButton(widget); |
| 105 | changeOneButton->setText(QStringLiteral("Change selected item" )); |
| 106 | |
| 107 | QPushButton *changeBunchButton = new QPushButton(widget); |
| 108 | changeBunchButton->setText(QStringLiteral("Change bunch of items" )); |
| 109 | |
| 110 | QPushButton *removeOneButton = new QPushButton(widget); |
| 111 | removeOneButton->setText(QStringLiteral("Remove selected item" )); |
| 112 | |
| 113 | QPushButton *removeBunchButton = new QPushButton(widget); |
| 114 | removeBunchButton->setText(QStringLiteral("Remove bunch of items" )); |
| 115 | |
| 116 | QPushButton *setSelectedItemButton = new QPushButton(widget); |
| 117 | setSelectedItemButton->setText(QStringLiteral("Select/deselect item 3" )); |
| 118 | |
| 119 | QPushButton *clearSeriesDataButton = new QPushButton(widget); |
| 120 | clearSeriesDataButton->setText(QStringLiteral("Clear series data" )); |
| 121 | |
| 122 | QPushButton *addSeriesButton = new QPushButton(widget); |
| 123 | addSeriesButton->setText(QStringLiteral("Add Series" )); |
| 124 | |
| 125 | QPushButton *removeSeriesButton = new QPushButton(widget); |
| 126 | removeSeriesButton->setText(QStringLiteral("Remove Series" )); |
| 127 | |
| 128 | QPushButton *toggleSeriesVisibilityButton = new QPushButton(widget); |
| 129 | toggleSeriesVisibilityButton->setText(QStringLiteral("Toggle visibility" )); |
| 130 | |
| 131 | QPushButton *changeSeriesNameButton = new QPushButton(widget); |
| 132 | changeSeriesNameButton->setText(QStringLiteral("Series name" )); |
| 133 | |
| 134 | QPushButton *startTimerButton = new QPushButton(widget); |
| 135 | startTimerButton->setText(QStringLiteral("Start/stop timer" )); |
| 136 | |
| 137 | QPushButton *massiveDataTestButton = new QPushButton(widget); |
| 138 | massiveDataTestButton->setText(QStringLiteral("Massive data test" )); |
| 139 | |
| 140 | QPushButton *testItemChangesButton = new QPushButton(widget); |
| 141 | testItemChangesButton->setText(QStringLiteral("Test Item changing" )); |
| 142 | |
| 143 | QPushButton *testReverseButton = new QPushButton(widget); |
| 144 | testReverseButton->setText(QStringLiteral("Test Axis Reversing" )); |
| 145 | |
| 146 | QPushButton *renderToImageButton = new QPushButton(widget); |
| 147 | renderToImageButton->setText(QStringLiteral("Render the graph to an image" )); |
| 148 | |
| 149 | QLinearGradient grBtoY(0, 0, 100, 0); |
| 150 | grBtoY.setColorAt(pos: 1.0, color: Qt::black); |
| 151 | grBtoY.setColorAt(pos: 0.67, color: Qt::blue); |
| 152 | grBtoY.setColorAt(pos: 0.33, color: Qt::red); |
| 153 | grBtoY.setColorAt(pos: 0.0, color: Qt::yellow); |
| 154 | QPixmap pm(100, 24); |
| 155 | QPainter pmp(&pm); |
| 156 | pmp.setBrush(QBrush(grBtoY)); |
| 157 | pmp.setPen(Qt::NoPen); |
| 158 | pmp.drawRect(x: 0, y: 0, w: 100, h: 24); |
| 159 | QPushButton *gradientBtoYPB = new QPushButton(widget); |
| 160 | gradientBtoYPB->setIcon(QIcon(pm)); |
| 161 | gradientBtoYPB->setIconSize(QSize(100, 24)); |
| 162 | |
| 163 | QLabel *fpsLabel = new QLabel(QStringLiteral("" )); |
| 164 | |
| 165 | QCheckBox *fpsCheckBox = new QCheckBox(widget); |
| 166 | fpsCheckBox->setText(QStringLiteral("Measure Fps" )); |
| 167 | fpsCheckBox->setChecked(false); |
| 168 | |
| 169 | QCheckBox *backgroundCheckBox = new QCheckBox(widget); |
| 170 | backgroundCheckBox->setText(QStringLiteral("Show background" )); |
| 171 | backgroundCheckBox->setChecked(true); |
| 172 | |
| 173 | QCheckBox *gridCheckBox = new QCheckBox(widget); |
| 174 | gridCheckBox->setText(QStringLiteral("Show grid" )); |
| 175 | gridCheckBox->setChecked(true); |
| 176 | |
| 177 | QComboBox *shadowQuality = new QComboBox(widget); |
| 178 | shadowQuality->addItem(QStringLiteral("None" )); |
| 179 | shadowQuality->addItem(QStringLiteral("Low" )); |
| 180 | shadowQuality->addItem(QStringLiteral("Medium" )); |
| 181 | shadowQuality->addItem(QStringLiteral("High" )); |
| 182 | shadowQuality->addItem(QStringLiteral("Low Soft" )); |
| 183 | shadowQuality->addItem(QStringLiteral("Medium Soft" )); |
| 184 | shadowQuality->addItem(QStringLiteral("High Soft" )); |
| 185 | shadowQuality->setCurrentIndex(0); |
| 186 | |
| 187 | QFontComboBox *fontList = new QFontComboBox(widget); |
| 188 | |
| 189 | QSlider *fontSizeSlider = new QSlider(Qt::Horizontal, widget); |
| 190 | fontSizeSlider->setTickInterval(15); |
| 191 | fontSizeSlider->setTickPosition(QSlider::TicksBelow); |
| 192 | fontSizeSlider->setMinimum(1); |
| 193 | fontSizeSlider->setValue(30); |
| 194 | fontSizeSlider->setMaximum(200); |
| 195 | |
| 196 | QSlider *pointSizeSlider = new QSlider(Qt::Horizontal, widget); |
| 197 | pointSizeSlider->setTickInterval(15); |
| 198 | pointSizeSlider->setTickPosition(QSlider::TicksBelow); |
| 199 | pointSizeSlider->setMinimum(1); |
| 200 | pointSizeSlider->setValue(30); |
| 201 | pointSizeSlider->setMaximum(100); |
| 202 | |
| 203 | QSlider *minSliderX = new QSlider(Qt::Horizontal, widget); |
| 204 | minSliderX->setTickInterval(50); |
| 205 | minSliderX->setTickPosition(QSlider::TicksBelow); |
| 206 | minSliderX->setMinimum(-100); |
| 207 | minSliderX->setValue(-50); |
| 208 | minSliderX->setMaximum(100); |
| 209 | |
| 210 | QSlider *minSliderY = new QSlider(Qt::Horizontal, widget); |
| 211 | minSliderY->setTickInterval(100); |
| 212 | minSliderY->setTickPosition(QSlider::TicksBelow); |
| 213 | minSliderY->setMinimum(-200); |
| 214 | minSliderY->setValue(-100); |
| 215 | minSliderY->setMaximum(200); |
| 216 | |
| 217 | QSlider *minSliderZ = new QSlider(Qt::Horizontal, widget); |
| 218 | minSliderZ->setTickInterval(50); |
| 219 | minSliderZ->setTickPosition(QSlider::TicksBelow); |
| 220 | minSliderZ->setMinimum(-100); |
| 221 | minSliderZ->setValue(-50); |
| 222 | minSliderZ->setMaximum(100); |
| 223 | |
| 224 | QSlider *maxSliderX = new QSlider(Qt::Horizontal, widget); |
| 225 | maxSliderX->setTickInterval(50); |
| 226 | maxSliderX->setTickPosition(QSlider::TicksAbove); |
| 227 | maxSliderX->setMinimum(-100); |
| 228 | maxSliderX->setValue(50); |
| 229 | maxSliderX->setMaximum(100); |
| 230 | |
| 231 | QSlider *maxSliderY = new QSlider(Qt::Horizontal, widget); |
| 232 | maxSliderY->setTickInterval(100); |
| 233 | maxSliderY->setTickPosition(QSlider::TicksAbove); |
| 234 | maxSliderY->setMinimum(-200); |
| 235 | maxSliderY->setValue(120); |
| 236 | maxSliderY->setMaximum(200); |
| 237 | |
| 238 | QSlider *maxSliderZ = new QSlider(Qt::Horizontal, widget); |
| 239 | maxSliderZ->setTickInterval(50); |
| 240 | maxSliderZ->setTickPosition(QSlider::TicksAbove); |
| 241 | maxSliderZ->setMinimum(-100); |
| 242 | maxSliderZ->setValue(50); |
| 243 | maxSliderZ->setMaximum(100); |
| 244 | |
| 245 | QSlider *aspectRatioSlider = new QSlider(Qt::Horizontal, widget); |
| 246 | aspectRatioSlider->setTickInterval(10); |
| 247 | aspectRatioSlider->setTickPosition(QSlider::TicksBelow); |
| 248 | aspectRatioSlider->setMinimum(1); |
| 249 | aspectRatioSlider->setValue(20); |
| 250 | aspectRatioSlider->setMaximum(100); |
| 251 | |
| 252 | QSlider *horizontalAspectRatioSlider = new QSlider(Qt::Horizontal, widget); |
| 253 | horizontalAspectRatioSlider->setTickInterval(30); |
| 254 | horizontalAspectRatioSlider->setTickPosition(QSlider::TicksBelow); |
| 255 | horizontalAspectRatioSlider->setMinimum(0); |
| 256 | horizontalAspectRatioSlider->setValue(0); |
| 257 | horizontalAspectRatioSlider->setMaximum(300); |
| 258 | |
| 259 | QCheckBox *optimizationStaticCB = new QCheckBox(widget); |
| 260 | optimizationStaticCB->setText(QStringLiteral("Static optimization" )); |
| 261 | optimizationStaticCB->setChecked(false); |
| 262 | |
| 263 | QCheckBox *orthoCB = new QCheckBox(widget); |
| 264 | orthoCB->setText(QStringLiteral("Orthographic projection" )); |
| 265 | orthoCB->setChecked(false); |
| 266 | |
| 267 | QCheckBox *polarCB = new QCheckBox(widget); |
| 268 | polarCB->setText(QStringLiteral("Polar graph" )); |
| 269 | polarCB->setChecked(false); |
| 270 | |
| 271 | QCheckBox *axisTitlesVisibleCB = new QCheckBox(widget); |
| 272 | axisTitlesVisibleCB->setText(QStringLiteral("Axis titles visible" )); |
| 273 | axisTitlesVisibleCB->setChecked(false); |
| 274 | |
| 275 | QCheckBox *axisTitlesFixedCB = new QCheckBox(widget); |
| 276 | axisTitlesFixedCB->setText(QStringLiteral("Axis titles fixed" )); |
| 277 | axisTitlesFixedCB->setChecked(true); |
| 278 | |
| 279 | QSlider *axisLabelRotationSlider = new QSlider(Qt::Horizontal, widget); |
| 280 | axisLabelRotationSlider->setTickInterval(10); |
| 281 | axisLabelRotationSlider->setTickPosition(QSlider::TicksBelow); |
| 282 | axisLabelRotationSlider->setMinimum(0); |
| 283 | axisLabelRotationSlider->setValue(0); |
| 284 | axisLabelRotationSlider->setMaximum(90); |
| 285 | |
| 286 | QSlider *radialLabelSlider = new QSlider(Qt::Horizontal, widget); |
| 287 | radialLabelSlider->setTickInterval(10); |
| 288 | radialLabelSlider->setTickPosition(QSlider::TicksBelow); |
| 289 | radialLabelSlider->setMinimum(0); |
| 290 | radialLabelSlider->setValue(100); |
| 291 | radialLabelSlider->setMaximum(150); |
| 292 | |
| 293 | QSlider *cameraTargetSliderX = new QSlider(Qt::Horizontal, widget); |
| 294 | cameraTargetSliderX->setTickInterval(1); |
| 295 | cameraTargetSliderX->setMinimum(-100); |
| 296 | cameraTargetSliderX->setValue(0); |
| 297 | cameraTargetSliderX->setMaximum(100); |
| 298 | QSlider *cameraTargetSliderY = new QSlider(Qt::Horizontal, widget); |
| 299 | cameraTargetSliderY->setTickInterval(1); |
| 300 | cameraTargetSliderY->setMinimum(-100); |
| 301 | cameraTargetSliderY->setValue(0); |
| 302 | cameraTargetSliderY->setMaximum(100); |
| 303 | QSlider *cameraTargetSliderZ = new QSlider(Qt::Horizontal, widget); |
| 304 | cameraTargetSliderZ->setTickInterval(1); |
| 305 | cameraTargetSliderZ->setMinimum(-100); |
| 306 | cameraTargetSliderZ->setValue(0); |
| 307 | cameraTargetSliderZ->setMaximum(100); |
| 308 | |
| 309 | QSlider *marginSlider = new QSlider(Qt::Horizontal, widget); |
| 310 | marginSlider->setMinimum(-1); |
| 311 | marginSlider->setValue(-1); |
| 312 | marginSlider->setMaximum(100); |
| 313 | |
| 314 | vLayout->addWidget(themeButton, stretch: 0, alignment: Qt::AlignTop); |
| 315 | vLayout->addWidget(labelButton, stretch: 0, alignment: Qt::AlignTop); |
| 316 | vLayout->addWidget(styleButton, stretch: 0, alignment: Qt::AlignTop); |
| 317 | vLayout->addWidget(cameraButton, stretch: 0, alignment: Qt::AlignTop); |
| 318 | vLayout->addWidget(clearButton, stretch: 0, alignment: Qt::AlignTop); |
| 319 | vLayout->addWidget(resetButton, stretch: 0, alignment: Qt::AlignTop); |
| 320 | vLayout->addWidget(addOneButton, stretch: 0, alignment: Qt::AlignTop); |
| 321 | vLayout->addWidget(addBunchButton, stretch: 0, alignment: Qt::AlignTop); |
| 322 | vLayout->addWidget(insertOneButton, stretch: 0, alignment: Qt::AlignTop); |
| 323 | vLayout->addWidget(insertBunchButton, stretch: 0, alignment: Qt::AlignTop); |
| 324 | vLayout->addWidget(changeOneButton, stretch: 0, alignment: Qt::AlignTop); |
| 325 | vLayout->addWidget(changeBunchButton, stretch: 0, alignment: Qt::AlignTop); |
| 326 | vLayout->addWidget(removeOneButton, stretch: 0, alignment: Qt::AlignTop); |
| 327 | vLayout->addWidget(removeBunchButton, stretch: 0, alignment: Qt::AlignTop); |
| 328 | vLayout->addWidget(setSelectedItemButton, stretch: 0, alignment: Qt::AlignTop); |
| 329 | vLayout->addWidget(clearSeriesDataButton, stretch: 0, alignment: Qt::AlignTop); |
| 330 | vLayout->addWidget(addSeriesButton, stretch: 0, alignment: Qt::AlignTop); |
| 331 | vLayout->addWidget(removeSeriesButton, stretch: 0, alignment: Qt::AlignTop); |
| 332 | vLayout->addWidget(toggleSeriesVisibilityButton, stretch: 0, alignment: Qt::AlignTop); |
| 333 | vLayout->addWidget(changeSeriesNameButton, stretch: 0, alignment: Qt::AlignTop); |
| 334 | vLayout->addWidget(startTimerButton, stretch: 0, alignment: Qt::AlignTop); |
| 335 | vLayout->addWidget(massiveDataTestButton, stretch: 0, alignment: Qt::AlignTop); |
| 336 | vLayout->addWidget(testItemChangesButton, stretch: 0, alignment: Qt::AlignTop); |
| 337 | vLayout->addWidget(testReverseButton, stretch: 0, alignment: Qt::AlignTop); |
| 338 | vLayout->addWidget(renderToImageButton, stretch: 1, alignment: Qt::AlignTop); |
| 339 | |
| 340 | vLayout2->addWidget(gradientBtoYPB, stretch: 0, alignment: Qt::AlignTop); |
| 341 | vLayout2->addWidget(fpsLabel, stretch: 0, alignment: Qt::AlignTop); |
| 342 | vLayout2->addWidget(fpsCheckBox, stretch: 0, alignment: Qt::AlignTop); |
| 343 | vLayout2->addWidget(backgroundCheckBox); |
| 344 | vLayout2->addWidget(gridCheckBox); |
| 345 | vLayout2->addWidget(new QLabel(QStringLiteral("Adjust shadow quality" ))); |
| 346 | vLayout2->addWidget(shadowQuality, stretch: 0, alignment: Qt::AlignTop); |
| 347 | vLayout2->addWidget(new QLabel(QStringLiteral("Adjust point size" ))); |
| 348 | vLayout2->addWidget(pointSizeSlider, stretch: 0, alignment: Qt::AlignTop); |
| 349 | vLayout2->addWidget(new QLabel(QStringLiteral("Adjust data window" ))); |
| 350 | vLayout2->addWidget(minSliderX, stretch: 0, alignment: Qt::AlignTop); |
| 351 | vLayout2->addWidget(maxSliderX, stretch: 0, alignment: Qt::AlignTop); |
| 352 | vLayout2->addWidget(minSliderY, stretch: 0, alignment: Qt::AlignTop); |
| 353 | vLayout2->addWidget(maxSliderY, stretch: 0, alignment: Qt::AlignTop); |
| 354 | vLayout2->addWidget(minSliderZ, stretch: 0, alignment: Qt::AlignTop); |
| 355 | vLayout2->addWidget(maxSliderZ, stretch: 0, alignment: Qt::AlignTop); |
| 356 | vLayout2->addWidget(new QLabel(QStringLiteral("Change font" ))); |
| 357 | vLayout2->addWidget(fontList); |
| 358 | vLayout2->addWidget(new QLabel(QStringLiteral("Adjust font size" ))); |
| 359 | vLayout2->addWidget(fontSizeSlider); |
| 360 | vLayout2->addWidget(new QLabel(QStringLiteral("Adjust vertical aspect ratio" ))); |
| 361 | vLayout2->addWidget(aspectRatioSlider); |
| 362 | vLayout2->addWidget(new QLabel(QStringLiteral("Adjust horizontal aspect ratio" ))); |
| 363 | vLayout2->addWidget(horizontalAspectRatioSlider, stretch: 1, alignment: Qt::AlignTop); |
| 364 | |
| 365 | vLayout3->addWidget(optimizationStaticCB); |
| 366 | vLayout3->addWidget(orthoCB); |
| 367 | vLayout3->addWidget(polarCB); |
| 368 | vLayout3->addWidget(axisTitlesVisibleCB); |
| 369 | vLayout3->addWidget(axisTitlesFixedCB); |
| 370 | vLayout3->addWidget(new QLabel(QStringLiteral("Axis label rotation" ))); |
| 371 | vLayout3->addWidget(axisLabelRotationSlider); |
| 372 | vLayout3->addWidget(new QLabel(QStringLiteral("Radial label offset" ))); |
| 373 | vLayout3->addWidget(radialLabelSlider, stretch: 0, alignment: Qt::AlignTop); |
| 374 | vLayout3->addWidget(new QLabel(QStringLiteral("Camera target" )), stretch: 0, alignment: Qt::AlignTop); |
| 375 | vLayout3->addWidget(cameraTargetSliderX, stretch: 0, alignment: Qt::AlignTop); |
| 376 | vLayout3->addWidget(cameraTargetSliderY, stretch: 0, alignment: Qt::AlignTop); |
| 377 | vLayout3->addWidget(cameraTargetSliderZ, stretch: 0, alignment: Qt::AlignTop); |
| 378 | vLayout3->addWidget(new QLabel(QStringLiteral("Adjust margin" )), stretch: 0, alignment: Qt::AlignTop); |
| 379 | vLayout3->addWidget(marginSlider, stretch: 1, alignment: Qt::AlignTop); |
| 380 | |
| 381 | ScatterDataModifier *modifier = new ScatterDataModifier(chart); |
| 382 | |
| 383 | QObject::connect(sender: fontSizeSlider, signal: &QSlider::valueChanged, receiver: modifier, |
| 384 | slot: &ScatterDataModifier::changeFontSize); |
| 385 | QObject::connect(sender: pointSizeSlider, signal: &QSlider::valueChanged, receiver: modifier, |
| 386 | slot: &ScatterDataModifier::changePointSize); |
| 387 | |
| 388 | QObject::connect(sender: styleButton, signal: &QPushButton::clicked, receiver: modifier, |
| 389 | slot: &ScatterDataModifier::changeStyle); |
| 390 | QObject::connect(sender: cameraButton, signal: &QPushButton::clicked, receiver: modifier, |
| 391 | slot: &ScatterDataModifier::changePresetCamera); |
| 392 | QObject::connect(sender: clearButton, signal: &QPushButton::clicked, receiver: modifier, |
| 393 | slot: &ScatterDataModifier::clear); |
| 394 | QObject::connect(sender: resetButton, signal: &QPushButton::clicked, receiver: modifier, |
| 395 | slot: &ScatterDataModifier::resetAxes); |
| 396 | QObject::connect(sender: addOneButton, signal: &QPushButton::clicked, receiver: modifier, |
| 397 | slot: &ScatterDataModifier::addOne); |
| 398 | QObject::connect(sender: addBunchButton, signal: &QPushButton::clicked, receiver: modifier, |
| 399 | slot: &ScatterDataModifier::addBunch); |
| 400 | QObject::connect(sender: insertOneButton, signal: &QPushButton::clicked, receiver: modifier, |
| 401 | slot: &ScatterDataModifier::insertOne); |
| 402 | QObject::connect(sender: insertBunchButton, signal: &QPushButton::clicked, receiver: modifier, |
| 403 | slot: &ScatterDataModifier::insertBunch); |
| 404 | QObject::connect(sender: changeOneButton, signal: &QPushButton::clicked, receiver: modifier, |
| 405 | slot: &ScatterDataModifier::changeOne); |
| 406 | QObject::connect(sender: changeBunchButton, signal: &QPushButton::clicked, receiver: modifier, |
| 407 | slot: &ScatterDataModifier::changeBunch); |
| 408 | QObject::connect(sender: removeOneButton, signal: &QPushButton::clicked, receiver: modifier, |
| 409 | slot: &ScatterDataModifier::removeOne); |
| 410 | QObject::connect(sender: removeBunchButton, signal: &QPushButton::clicked, receiver: modifier, |
| 411 | slot: &ScatterDataModifier::removeBunch); |
| 412 | QObject::connect(sender: setSelectedItemButton, signal: &QPushButton::clicked, receiver: modifier, |
| 413 | slot: &ScatterDataModifier::selectItem); |
| 414 | QObject::connect(sender: clearSeriesDataButton, signal: &QPushButton::clicked, receiver: modifier, |
| 415 | slot: &ScatterDataModifier::clearSeriesData); |
| 416 | QObject::connect(sender: addSeriesButton, signal: &QPushButton::clicked, receiver: modifier, |
| 417 | slot: &ScatterDataModifier::addSeries); |
| 418 | QObject::connect(sender: removeSeriesButton, signal: &QPushButton::clicked, receiver: modifier, |
| 419 | slot: &ScatterDataModifier::removeSeries); |
| 420 | QObject::connect(sender: toggleSeriesVisibilityButton, signal: &QPushButton::clicked, receiver: modifier, |
| 421 | slot: &ScatterDataModifier::toggleSeriesVisibility); |
| 422 | QObject::connect(sender: changeSeriesNameButton, signal: &QPushButton::clicked, receiver: modifier, |
| 423 | slot: &ScatterDataModifier::changeSeriesName); |
| 424 | QObject::connect(sender: startTimerButton, signal: &QPushButton::clicked, receiver: modifier, |
| 425 | slot: &ScatterDataModifier::startStopTimer); |
| 426 | QObject::connect(sender: massiveDataTestButton, signal: &QPushButton::clicked, receiver: modifier, |
| 427 | slot: &ScatterDataModifier::massiveDataTest); |
| 428 | QObject::connect(sender: testItemChangesButton, signal: &QPushButton::clicked, receiver: modifier, |
| 429 | slot: &ScatterDataModifier::testItemChanges); |
| 430 | QObject::connect(sender: testReverseButton, signal: &QPushButton::clicked, receiver: modifier, |
| 431 | slot: &ScatterDataModifier::testAxisReverse); |
| 432 | QObject::connect(sender: renderToImageButton, signal: &QPushButton::clicked, receiver: modifier, |
| 433 | slot: &ScatterDataModifier::renderToImage); |
| 434 | QObject::connect(sender: gradientBtoYPB, signal: &QPushButton::clicked, receiver: modifier, |
| 435 | slot: &ScatterDataModifier::setGradient); |
| 436 | QObject::connect(sender: themeButton, signal: &QPushButton::clicked, receiver: modifier, |
| 437 | slot: &ScatterDataModifier::changeTheme); |
| 438 | QObject::connect(sender: labelButton, signal: &QPushButton::clicked, receiver: modifier, |
| 439 | slot: &ScatterDataModifier::changeLabelStyle); |
| 440 | |
| 441 | QObject::connect(sender: shadowQuality, SIGNAL(currentIndexChanged(int)), receiver: modifier, |
| 442 | SLOT(changeShadowQuality(int))); |
| 443 | QObject::connect(sender: modifier, signal: &ScatterDataModifier::shadowQualityChanged, receiver: shadowQuality, |
| 444 | slot: &QComboBox::setCurrentIndex); |
| 445 | QObject::connect(sender: fontList, signal: &QFontComboBox::currentFontChanged, receiver: modifier, |
| 446 | slot: &ScatterDataModifier::changeFont); |
| 447 | |
| 448 | QObject::connect(sender: fpsCheckBox, signal: &QCheckBox::stateChanged, receiver: modifier, |
| 449 | slot: &ScatterDataModifier::setFpsMeasurement); |
| 450 | QObject::connect(sender: backgroundCheckBox, signal: &QCheckBox::stateChanged, receiver: modifier, |
| 451 | slot: &ScatterDataModifier::setBackgroundEnabled); |
| 452 | QObject::connect(sender: gridCheckBox, signal: &QCheckBox::stateChanged, receiver: modifier, |
| 453 | slot: &ScatterDataModifier::setGridEnabled); |
| 454 | |
| 455 | QObject::connect(sender: minSliderX, signal: &QSlider::valueChanged, receiver: modifier, |
| 456 | slot: &ScatterDataModifier::setMinX); |
| 457 | QObject::connect(sender: minSliderY, signal: &QSlider::valueChanged, receiver: modifier, |
| 458 | slot: &ScatterDataModifier::setMinY); |
| 459 | QObject::connect(sender: minSliderZ, signal: &QSlider::valueChanged, receiver: modifier, |
| 460 | slot: &ScatterDataModifier::setMinZ); |
| 461 | QObject::connect(sender: maxSliderX, signal: &QSlider::valueChanged, receiver: modifier, |
| 462 | slot: &ScatterDataModifier::setMaxX); |
| 463 | QObject::connect(sender: maxSliderY, signal: &QSlider::valueChanged, receiver: modifier, |
| 464 | slot: &ScatterDataModifier::setMaxY); |
| 465 | QObject::connect(sender: maxSliderZ, signal: &QSlider::valueChanged, receiver: modifier, |
| 466 | slot: &ScatterDataModifier::setMaxZ); |
| 467 | QObject::connect(sender: optimizationStaticCB, signal: &QCheckBox::stateChanged, receiver: modifier, |
| 468 | slot: &ScatterDataModifier::toggleStatic); |
| 469 | QObject::connect(sender: orthoCB, signal: &QCheckBox::stateChanged, receiver: modifier, |
| 470 | slot: &ScatterDataModifier::toggleOrtho); |
| 471 | QObject::connect(sender: polarCB, signal: &QCheckBox::stateChanged, receiver: modifier, |
| 472 | slot: &ScatterDataModifier::togglePolar); |
| 473 | QObject::connect(sender: axisTitlesVisibleCB, signal: &QCheckBox::stateChanged, receiver: modifier, |
| 474 | slot: &ScatterDataModifier::toggleAxisTitleVisibility); |
| 475 | QObject::connect(sender: axisTitlesFixedCB, signal: &QCheckBox::stateChanged, receiver: modifier, |
| 476 | slot: &ScatterDataModifier::toggleAxisTitleFixed); |
| 477 | QObject::connect(sender: axisLabelRotationSlider, signal: &QSlider::valueChanged, receiver: modifier, |
| 478 | slot: &ScatterDataModifier::changeLabelRotation); |
| 479 | QObject::connect(sender: aspectRatioSlider, signal: &QSlider::valueChanged, receiver: modifier, |
| 480 | slot: &ScatterDataModifier::setAspectRatio); |
| 481 | QObject::connect(sender: horizontalAspectRatioSlider, signal: &QSlider::valueChanged, receiver: modifier, |
| 482 | slot: &ScatterDataModifier::setHorizontalAspectRatio); |
| 483 | QObject::connect(sender: radialLabelSlider, signal: &QSlider::valueChanged, receiver: modifier, |
| 484 | slot: &ScatterDataModifier::changeRadialLabelOffset); |
| 485 | QObject::connect(sender: cameraTargetSliderX, signal: &QSlider::valueChanged, receiver: modifier, |
| 486 | slot: &ScatterDataModifier::setCameraTargetX); |
| 487 | QObject::connect(sender: cameraTargetSliderY, signal: &QSlider::valueChanged, receiver: modifier, |
| 488 | slot: &ScatterDataModifier::setCameraTargetY); |
| 489 | QObject::connect(sender: cameraTargetSliderZ, signal: &QSlider::valueChanged, receiver: modifier, |
| 490 | slot: &ScatterDataModifier::setCameraTargetZ); |
| 491 | QObject::connect(sender: marginSlider, signal: &QSlider::valueChanged, receiver: modifier, |
| 492 | slot: &ScatterDataModifier::setGraphMargin); |
| 493 | |
| 494 | modifier->setFpsLabel(fpsLabel); |
| 495 | |
| 496 | chart->setGeometry(QRect(0, 0, 800, 800)); |
| 497 | |
| 498 | modifier->start(); |
| 499 | //modifier->renderToImage(); // Initial hidden render |
| 500 | |
| 501 | widget->show(); |
| 502 | |
| 503 | return app.exec(); |
| 504 | } |
| 505 | |