mirror of https://github.com/qt/qtgraphs.git
198 lines
7.8 KiB
C++
198 lines
7.8 KiB
C++
// Copyright (C) 2023 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
|
|
#include "scattergraph.h"
|
|
|
|
#include <QtWidgets/qboxlayout.h>
|
|
#include <QtWidgets/qcheckbox.h>
|
|
#include <QtWidgets/qcombobox.h>
|
|
#include <QtWidgets/qcommandlinkbutton.h>
|
|
#include <QtWidgets/qlabel.h>
|
|
|
|
using namespace Qt::StringLiterals;
|
|
|
|
ScatterGraph::ScatterGraph()
|
|
{
|
|
m_scatterGraph = new Q3DScatter();
|
|
initialize();
|
|
}
|
|
|
|
void ScatterGraph::initialize()
|
|
{
|
|
m_scatterWidget = new QWidget;
|
|
auto *hLayout = new QHBoxLayout(m_scatterWidget);
|
|
QSize screenSize = m_scatterGraph->screen()->size();
|
|
m_scatterGraph->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 1.75));
|
|
m_scatterGraph->setMaximumSize(screenSize);
|
|
m_scatterGraph->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
|
m_scatterGraph->setFocusPolicy(Qt::StrongFocus);
|
|
hLayout->addWidget(m_scatterGraph, 1);
|
|
|
|
auto *vLayout = new QVBoxLayout();
|
|
hLayout->addLayout(vLayout);
|
|
|
|
auto *cameraButton = new QCommandLinkButton(m_scatterWidget);
|
|
cameraButton->setText(u"Change camera preset"_s);
|
|
cameraButton->setDescription(u"Switch between a number of preset camera positions"_s);
|
|
cameraButton->setIconSize(QSize(0, 0));
|
|
|
|
auto *itemCountButton = new QCommandLinkButton(m_scatterWidget);
|
|
itemCountButton->setText(u"Toggle item count"_s);
|
|
itemCountButton->setDescription(u"Switch between 900 and 10000 data points"_s);
|
|
itemCountButton->setIconSize(QSize(0, 0));
|
|
|
|
auto *rangeButton = new QCommandLinkButton(m_scatterWidget);
|
|
rangeButton->setText(u"Toggle axis ranges"_s);
|
|
rangeButton->setDescription(u"Switch between automatic axis ranges and preset ranges"_s);
|
|
rangeButton->setIconSize(QSize(0, 0));
|
|
|
|
auto *rangeMinSlider = new QSlider(m_scatterWidget);
|
|
rangeMinSlider->setOrientation(Qt::Horizontal);
|
|
rangeMinSlider->setMinimum(-10);
|
|
rangeMinSlider->setMaximum(1);
|
|
rangeMinSlider->setValue(-10);
|
|
|
|
auto *rangeMaxSlider = new QSlider(m_scatterWidget);
|
|
rangeMaxSlider->setOrientation(Qt::Horizontal);
|
|
rangeMaxSlider->setMinimum(1);
|
|
rangeMaxSlider->setMaximum(10);
|
|
rangeMaxSlider->setValue(10);
|
|
|
|
auto *backgroundCheckBox = new QCheckBox(m_scatterWidget);
|
|
backgroundCheckBox->setText(u"Show graph background"_s);
|
|
backgroundCheckBox->setChecked(true);
|
|
|
|
auto *gridCheckBox = new QCheckBox(m_scatterWidget);
|
|
gridCheckBox->setText(u"Show grid"_s);
|
|
gridCheckBox->setChecked(true);
|
|
|
|
auto *smoothCheckBox = new QCheckBox(m_scatterWidget);
|
|
smoothCheckBox->setText(u"Smooth dots"_s);
|
|
smoothCheckBox->setChecked(true);
|
|
|
|
auto *itemStyleList = new QComboBox(m_scatterWidget);
|
|
const QMetaObject &metaObj = QAbstract3DSeries::staticMetaObject;
|
|
int index = metaObj.indexOfEnumerator("Mesh");
|
|
QMetaEnum metaEnum = metaObj.enumerator(index);
|
|
itemStyleList->addItem(u"Sphere"_s,
|
|
metaEnum.value(static_cast<int>(QAbstract3DSeries::Mesh::Sphere)));
|
|
itemStyleList->addItem(u"Cube"_s,
|
|
metaEnum.value(static_cast<int>(QAbstract3DSeries::Mesh::Cube)));
|
|
itemStyleList->addItem(u"Minimal"_s,
|
|
metaEnum.value(static_cast<int>(QAbstract3DSeries::Mesh::Minimal)));
|
|
itemStyleList->addItem(u"Point"_s,
|
|
metaEnum.value(static_cast<int>(QAbstract3DSeries::Mesh::Point)));
|
|
itemStyleList->setCurrentIndex(0);
|
|
|
|
auto *themeList = new QComboBox(m_scatterWidget);
|
|
themeList->addItem(u"QtGreen"_s);
|
|
themeList->addItem(u"QtGreenNeon"_s);
|
|
themeList->addItem(u"MixSeries"_s);
|
|
themeList->addItem(u"OrangeSeries"_s);
|
|
themeList->addItem(u"YellowSeries"_s);
|
|
themeList->addItem(u"BlueSeries"_s);
|
|
themeList->addItem(u"PurpleSeries"_s);
|
|
themeList->addItem(u"GreySeries"_s);
|
|
themeList->addItem(u"UserDefined"_s);
|
|
themeList->setCurrentIndex(2);
|
|
|
|
auto *shadowQuality = new QComboBox(m_scatterWidget);
|
|
shadowQuality->addItem(u"None"_s);
|
|
shadowQuality->addItem(u"Low"_s);
|
|
shadowQuality->addItem(u"Medium"_s);
|
|
shadowQuality->addItem(u"High"_s);
|
|
shadowQuality->addItem(u"Low Soft"_s);
|
|
shadowQuality->addItem(u"Medium Soft"_s);
|
|
shadowQuality->addItem(u"High Soft"_s);
|
|
shadowQuality->setCurrentIndex(6);
|
|
|
|
vLayout->addWidget(cameraButton);
|
|
vLayout->addWidget(itemCountButton);
|
|
vLayout->addWidget(rangeButton);
|
|
vLayout->addWidget(new QLabel(u"Adjust axis ranges"_s));
|
|
vLayout->addWidget(rangeMinSlider);
|
|
vLayout->addWidget(rangeMaxSlider);
|
|
vLayout->addWidget(backgroundCheckBox);
|
|
vLayout->addWidget(gridCheckBox);
|
|
vLayout->addWidget(smoothCheckBox);
|
|
vLayout->addWidget(new QLabel(u"Change dot style"_s));
|
|
vLayout->addWidget(itemStyleList);
|
|
vLayout->addWidget(new QLabel(u"Change theme"_s));
|
|
vLayout->addWidget(themeList);
|
|
vLayout->addWidget(new QLabel(u"Adjust shadow quality"_s));
|
|
vLayout->addWidget(shadowQuality, 1, Qt::AlignTop);
|
|
|
|
// Raise the graph to the top of the widget stack, to hide UI if resized smaller
|
|
m_scatterGraph->raise();
|
|
|
|
m_modifier = new ScatterDataModifier(m_scatterGraph, this);
|
|
m_modifier->changeTheme(themeList->currentIndex());
|
|
|
|
QObject::connect(cameraButton,
|
|
&QCommandLinkButton::clicked,
|
|
m_modifier,
|
|
&ScatterDataModifier::changePresetCamera);
|
|
QObject::connect(itemCountButton,
|
|
&QCommandLinkButton::clicked,
|
|
m_modifier,
|
|
&ScatterDataModifier::toggleItemCount);
|
|
QObject::connect(rangeButton,
|
|
&QCommandLinkButton::clicked,
|
|
m_modifier,
|
|
&ScatterDataModifier::toggleRanges);
|
|
|
|
QObject::connect(rangeMinSlider,
|
|
&QSlider::valueChanged,
|
|
m_modifier,
|
|
&ScatterDataModifier::adjustMinimumRange);
|
|
QObject::connect(rangeMaxSlider,
|
|
&QSlider::valueChanged,
|
|
m_modifier,
|
|
&ScatterDataModifier::adjustMaximumRange);
|
|
|
|
QObject::connect(backgroundCheckBox,
|
|
&QCheckBox::checkStateChanged,
|
|
m_modifier,
|
|
&ScatterDataModifier::setBackgroundEnabled);
|
|
QObject::connect(gridCheckBox,
|
|
&QCheckBox::checkStateChanged,
|
|
m_modifier,
|
|
&ScatterDataModifier::setGridEnabled);
|
|
QObject::connect(smoothCheckBox,
|
|
&QCheckBox::checkStateChanged,
|
|
m_modifier,
|
|
&ScatterDataModifier::setSmoothDots);
|
|
|
|
QObject::connect(m_modifier,
|
|
&ScatterDataModifier::backgroundEnabledChanged,
|
|
backgroundCheckBox,
|
|
&QCheckBox::setChecked);
|
|
QObject::connect(m_modifier,
|
|
&ScatterDataModifier::gridEnabledChanged,
|
|
gridCheckBox,
|
|
&QCheckBox::setChecked);
|
|
QObject::connect(itemStyleList,
|
|
&QComboBox::currentIndexChanged,
|
|
m_modifier,
|
|
&ScatterDataModifier::changeStyle);
|
|
|
|
QObject::connect(themeList,
|
|
&QComboBox::currentIndexChanged,
|
|
m_modifier,
|
|
&ScatterDataModifier::changeTheme);
|
|
|
|
QObject::connect(shadowQuality,
|
|
&QComboBox::currentIndexChanged,
|
|
m_modifier,
|
|
&ScatterDataModifier::changeShadowQuality);
|
|
|
|
QObject::connect(m_modifier,
|
|
&ScatterDataModifier::shadowQualityChanged,
|
|
shadowQuality,
|
|
&QComboBox::setCurrentIndex);
|
|
QObject::connect(m_scatterGraph,
|
|
&Q3DScatter::shadowQualityChanged,
|
|
m_modifier,
|
|
&ScatterDataModifier::shadowQualityUpdatedByVisual);
|
|
}
|