11 #include <QColorDialog>
12 #include <QDialogButtonBox>
13 #include <QDoubleSpinBox>
14 #include <QFormLayout>
16 #include <QHBoxLayout>
19 #include <QPushButton>
20 #include <QVBoxLayout>
25 : QDialog(parent), m_currentColor(127, 127, 127) {
26 setWindowTitle(title);
28 setWindowModality(Qt::NonModal);
29 setWindowFlags(
Qt::Window | Qt::WindowTitleHint |
30 Qt::WindowCloseButtonHint | Qt::WindowStaysOnTopHint);
33 setMinimumHeight(500);
38 void ecvAxesGridDialog::setupUI() {
39 QVBoxLayout* mainLayout =
new QVBoxLayout(
this);
40 mainLayout->setSpacing(8);
41 mainLayout->setContentsMargins(10, 10, 10, 10);
44 QGroupBox* titleTextsGroup =
new QGroupBox(tr(
"Title Texts"),
this);
45 QFormLayout* titleTextsLayout =
new QFormLayout(titleTextsGroup);
46 titleTextsLayout->setContentsMargins(8, 12, 8, 8);
48 m_xTitleEdit =
new QLineEdit(
"X Axis",
this);
49 titleTextsLayout->addRow(tr(
"X Title:"), m_xTitleEdit);
51 m_yTitleEdit =
new QLineEdit(
"Y Axis",
this);
52 titleTextsLayout->addRow(tr(
"Y Title:"), m_yTitleEdit);
54 m_zTitleEdit =
new QLineEdit(
"Z Axis",
this);
55 titleTextsLayout->addRow(tr(
"Z Title:"), m_zTitleEdit);
57 mainLayout->addWidget(titleTextsGroup);
60 QGroupBox* facePropertiesGroup =
new QGroupBox(tr(
"Face Properties"),
this);
61 QFormLayout* faceLayout =
new QFormLayout(facePropertiesGroup);
62 faceLayout->setContentsMargins(8, 12, 8, 8);
64 m_gridColorButton =
new QPushButton(
this);
65 m_gridColorButton->setFixedSize(80, 24);
67 connect(m_gridColorButton, &QPushButton::clicked,
this,
68 &ecvAxesGridDialog::onColorButtonClicked);
69 faceLayout->addRow(tr(
"Grid Color:"), m_gridColorButton);
71 m_showGridCheckBox =
new QCheckBox(
this);
72 m_showGridCheckBox->setChecked(
false);
73 faceLayout->addRow(tr(
"Show Grid:"), m_showGridCheckBox);
75 mainLayout->addWidget(facePropertiesGroup);
78 m_xAxisGroup =
new QGroupBox(tr(
"X Axis Label Properties"),
this);
79 QVBoxLayout* xAxisLayout =
new QVBoxLayout(m_xAxisGroup);
80 xAxisLayout->setContentsMargins(8, 12, 8, 8);
82 m_xAxisUseCustomLabelsCheckBox =
83 new QCheckBox(tr(
"X Axis Use Custom Labels"),
this);
84 xAxisLayout->addWidget(m_xAxisUseCustomLabelsCheckBox);
87 m_xAxisCustomLabelsWidget->setVisible(
false);
88 xAxisLayout->addWidget(m_xAxisCustomLabelsWidget);
90 connect(m_xAxisUseCustomLabelsCheckBox, &QCheckBox::toggled,
this,
91 &ecvAxesGridDialog::onXAxisUseCustomLabelsToggled);
93 mainLayout->addWidget(m_xAxisGroup);
96 m_yAxisGroup =
new QGroupBox(tr(
"Y Axis Label Properties"),
this);
97 QVBoxLayout* yAxisLayout =
new QVBoxLayout(m_yAxisGroup);
98 yAxisLayout->setContentsMargins(8, 12, 8, 8);
100 m_yAxisUseCustomLabelsCheckBox =
101 new QCheckBox(tr(
"Y Axis Use Custom Labels"),
this);
102 yAxisLayout->addWidget(m_yAxisUseCustomLabelsCheckBox);
105 m_yAxisCustomLabelsWidget->setVisible(
false);
106 yAxisLayout->addWidget(m_yAxisCustomLabelsWidget);
108 connect(m_yAxisUseCustomLabelsCheckBox, &QCheckBox::toggled,
this,
109 &ecvAxesGridDialog::onYAxisUseCustomLabelsToggled);
111 mainLayout->addWidget(m_yAxisGroup);
114 m_zAxisGroup =
new QGroupBox(tr(
"Z Axis Label Properties"),
this);
115 QVBoxLayout* zAxisLayout =
new QVBoxLayout(m_zAxisGroup);
116 zAxisLayout->setContentsMargins(8, 12, 8, 8);
118 m_zAxisUseCustomLabelsCheckBox =
119 new QCheckBox(tr(
"Z Axis Use Custom Labels"),
this);
120 zAxisLayout->addWidget(m_zAxisUseCustomLabelsCheckBox);
123 m_zAxisCustomLabelsWidget->setVisible(
false);
124 zAxisLayout->addWidget(m_zAxisCustomLabelsWidget);
126 connect(m_zAxisUseCustomLabelsCheckBox, &QCheckBox::toggled,
this,
127 &ecvAxesGridDialog::onZAxisUseCustomLabelsToggled);
129 mainLayout->addWidget(m_zAxisGroup);
132 QGroupBox* boundsGroup =
new QGroupBox(tr(
"Bounds"),
this);
133 QVBoxLayout* boundsLayout =
new QVBoxLayout(boundsGroup);
134 boundsLayout->setContentsMargins(8, 12, 8, 8);
136 m_useCustomBoundsCheckBox =
new QCheckBox(tr(
"Use Custom Bounds"),
this);
137 boundsLayout->addWidget(m_useCustomBoundsCheckBox);
141 m_customBoundsWidget =
new QWidget(
this);
142 QFormLayout* boundsInputLayout =
new QFormLayout(m_customBoundsWidget);
143 boundsInputLayout->setContentsMargins(20, 8, 8,
146 m_xMinSpinBox =
new QDoubleSpinBox(m_customBoundsWidget);
147 m_xMinSpinBox->setRange(-1e10, 1e10);
148 m_xMinSpinBox->setDecimals(3);
149 m_xMinSpinBox->setValue(0.0);
150 boundsInputLayout->addRow(tr(
"X Min:"), m_xMinSpinBox);
152 m_xMaxSpinBox =
new QDoubleSpinBox(m_customBoundsWidget);
153 m_xMaxSpinBox->setRange(-1e10, 1e10);
154 m_xMaxSpinBox->setDecimals(3);
155 m_xMaxSpinBox->setValue(1.0);
156 boundsInputLayout->addRow(tr(
"X Max:"), m_xMaxSpinBox);
158 m_yMinSpinBox =
new QDoubleSpinBox(m_customBoundsWidget);
159 m_yMinSpinBox->setRange(-1e10, 1e10);
160 m_yMinSpinBox->setDecimals(3);
161 m_yMinSpinBox->setValue(0.0);
162 boundsInputLayout->addRow(tr(
"Y Min:"), m_yMinSpinBox);
164 m_yMaxSpinBox =
new QDoubleSpinBox(m_customBoundsWidget);
165 m_yMaxSpinBox->setRange(-1e10, 1e10);
166 m_yMaxSpinBox->setDecimals(3);
167 m_yMaxSpinBox->setValue(1.0);
168 boundsInputLayout->addRow(tr(
"Y Max:"), m_yMaxSpinBox);
170 m_zMinSpinBox =
new QDoubleSpinBox(m_customBoundsWidget);
171 m_zMinSpinBox->setRange(-1e10, 1e10);
172 m_zMinSpinBox->setDecimals(3);
173 m_zMinSpinBox->setValue(0.0);
174 boundsInputLayout->addRow(tr(
"Z Min:"), m_zMinSpinBox);
176 m_zMaxSpinBox =
new QDoubleSpinBox(m_customBoundsWidget);
177 m_zMaxSpinBox->setRange(-1e10, 1e10);
178 m_zMaxSpinBox->setDecimals(3);
179 m_zMaxSpinBox->setValue(1.0);
180 boundsInputLayout->addRow(tr(
"Z Max:"), m_zMaxSpinBox);
182 m_customBoundsWidget->setVisible(
184 boundsLayout->addWidget(m_customBoundsWidget);
186 connect(m_useCustomBoundsCheckBox, &QCheckBox::toggled,
this,
187 &ecvAxesGridDialog::onUseCustomBoundsToggled);
189 mainLayout->addWidget(boundsGroup);
192 QDialogButtonBox* buttonBox =
new QDialogButtonBox(
this);
193 QPushButton* applyButton = buttonBox->addButton(QDialogButtonBox::Apply);
195 buttonBox->addButton(QDialogButtonBox::Cancel);
196 buttonBox->addButton(QDialogButtonBox::Ok);
198 connect(applyButton, &QPushButton::clicked,
this,
199 &ecvAxesGridDialog::onApply);
200 connect(resetButton, &QPushButton::clicked,
this,
201 &ecvAxesGridDialog::onReset);
202 connect(buttonBox, &QDialogButtonBox::accepted,
this, &QDialog::accept);
203 connect(buttonBox, &QDialogButtonBox::rejected,
this, &QDialog::reject);
205 mainLayout->addWidget(buttonBox);
207 storeInitialValues();
210 void ecvAxesGridDialog::updateColorButton() {
211 QString styleSheet = QString(
"QPushButton { background-color: rgb(%1, %2, "
212 "%3); border: 1px solid #999; }")
213 .arg(m_currentColor.red())
214 .arg(m_currentColor.green())
215 .arg(m_currentColor.blue());
216 m_gridColorButton->setStyleSheet(styleSheet);
219 void ecvAxesGridDialog::onColorButtonClicked() {
220 QColor newColor = QColorDialog::getColor(m_currentColor,
this,
221 tr(
"Select Grid Color"));
222 if (newColor.isValid()) {
223 m_currentColor = newColor;
228 void ecvAxesGridDialog::storeInitialValues() {
229 m_initialXTitle = m_xTitleEdit->text();
230 m_initialYTitle = m_yTitleEdit->text();
231 m_initialZTitle = m_zTitleEdit->text();
232 m_initialColor = m_currentColor;
233 m_initialShowGrid = m_showGridCheckBox->isChecked();
234 m_initialXCustomLabels = m_xAxisUseCustomLabelsCheckBox->isChecked();
235 m_initialYCustomLabels = m_yAxisUseCustomLabelsCheckBox->isChecked();
236 m_initialZCustomLabels = m_zAxisUseCustomLabelsCheckBox->isChecked();
237 m_initialXLabels = m_xAxisCustomLabelsWidget->
getLabels();
238 m_initialYLabels = m_yAxisCustomLabelsWidget->
getLabels();
239 m_initialZLabels = m_zAxisCustomLabelsWidget->
getLabels();
240 m_initialCustomBounds = m_useCustomBoundsCheckBox->isChecked();
243 m_initialXMin = m_xMinSpinBox->value();
244 m_initialXMax = m_xMaxSpinBox->value();
245 m_initialYMin = m_yMinSpinBox->value();
246 m_initialYMax = m_yMaxSpinBox->value();
247 m_initialZMin = m_zMinSpinBox->value();
248 m_initialZMax = m_zMaxSpinBox->value();
251 void ecvAxesGridDialog::restoreInitialValues() {
252 m_xTitleEdit->setText(m_initialXTitle);
253 m_yTitleEdit->setText(m_initialYTitle);
254 m_zTitleEdit->setText(m_initialZTitle);
255 m_currentColor = m_initialColor;
257 m_showGridCheckBox->setChecked(m_initialShowGrid);
258 m_xAxisUseCustomLabelsCheckBox->setChecked(m_initialXCustomLabels);
259 m_yAxisUseCustomLabelsCheckBox->setChecked(m_initialYCustomLabels);
260 m_zAxisUseCustomLabelsCheckBox->setChecked(m_initialZCustomLabels);
261 m_xAxisCustomLabelsWidget->
setLabels(m_initialXLabels);
262 m_yAxisCustomLabelsWidget->
setLabels(m_initialYLabels);
263 m_zAxisCustomLabelsWidget->
setLabels(m_initialZLabels);
264 m_useCustomBoundsCheckBox->setChecked(m_initialCustomBounds);
267 m_xMinSpinBox->setValue(m_initialXMin);
268 m_xMaxSpinBox->setValue(m_initialXMax);
269 m_yMinSpinBox->setValue(m_initialYMin);
270 m_yMaxSpinBox->setValue(m_initialYMax);
271 m_zMinSpinBox->setValue(m_initialZMin);
272 m_zMaxSpinBox->setValue(m_initialZMax);
275 void ecvAxesGridDialog::onApply() {
280 void ecvAxesGridDialog::onReset() {
281 restoreInitialValues();
286 void ecvAxesGridDialog::onXAxisUseCustomLabelsToggled(
bool checked) {
287 m_xAxisCustomLabelsWidget->setVisible(checked);
291 void ecvAxesGridDialog::onYAxisUseCustomLabelsToggled(
bool checked) {
292 m_yAxisCustomLabelsWidget->setVisible(checked);
296 void ecvAxesGridDialog::onZAxisUseCustomLabelsToggled(
bool checked) {
297 m_zAxisCustomLabelsWidget->setVisible(checked);
304 m_xTitleEdit->setText(title);
308 m_yTitleEdit->setText(title);
312 m_zTitleEdit->setText(title);
317 m_currentColor =
color;
321 return m_showGridCheckBox->isChecked();
324 m_showGridCheckBox->setChecked(show);
328 return m_xAxisUseCustomLabelsCheckBox->isChecked();
331 m_xAxisUseCustomLabelsCheckBox->setChecked(use);
334 return m_xAxisCustomLabelsWidget->
getLabels();
337 const QList<QPair<double, QString>>& labels) {
338 m_xAxisCustomLabelsWidget->
setLabels(labels);
342 return m_yAxisUseCustomLabelsCheckBox->isChecked();
345 m_yAxisUseCustomLabelsCheckBox->setChecked(use);
348 return m_yAxisCustomLabelsWidget->
getLabels();
351 const QList<QPair<double, QString>>& labels) {
352 m_yAxisCustomLabelsWidget->
setLabels(labels);
356 return m_zAxisUseCustomLabelsCheckBox->isChecked();
359 m_zAxisUseCustomLabelsCheckBox->setChecked(use);
362 return m_zAxisCustomLabelsWidget->
getLabels();
365 const QList<QPair<double, QString>>& labels) {
366 m_zAxisCustomLabelsWidget->
setLabels(labels);
370 return m_useCustomBoundsCheckBox->isChecked();
373 m_useCustomBoundsCheckBox->setChecked(use);
376 void ecvAxesGridDialog::onUseCustomBoundsToggled(
bool checked) {
377 m_customBoundsWidget->setVisible(checked);
383 m_xMinSpinBox->setValue(value);
387 m_xMaxSpinBox->setValue(value);
391 m_yMinSpinBox->setValue(value);
395 m_yMaxSpinBox->setValue(value);
399 m_zMinSpinBox->setValue(value);
403 m_zMaxSpinBox->setValue(value);
bool getZAxisUseCustomLabels() const
bool getYAxisUseCustomLabels() const
void setZTitle(const QString &title)
void setZMin(double value)
void setZMax(double value)
QString getXTitle() const
void setXAxisCustomLabels(const QList< QPair< double, QString >> &labels)
void setZAxisUseCustomLabels(bool use)
void setXTitle(const QString &title)
QList< QPair< double, QString > > getZAxisCustomLabels() const
void setXMin(double value)
bool getXAxisUseCustomLabels() const
QList< QPair< double, QString > > getXAxisCustomLabels() const
void setXMax(double value)
void setGridColor(const QColor &color)
void setZAxisCustomLabels(const QList< QPair< double, QString >> &labels)
void setYMax(double value)
void setYAxisUseCustomLabels(bool use)
void setUseCustomBounds(bool use)
bool getUseCustomBounds() const
QString getYTitle() const
QString getZTitle() const
ecvAxesGridDialog(const QString &title, QWidget *parent=nullptr)
void setYMin(double value)
void setYTitle(const QString &title)
void setYAxisCustomLabels(const QList< QPair< double, QString >> &labels)
void setShowGrid(bool show)
QList< QPair< double, QString > > getYAxisCustomLabels() const
QColor getGridColor() const
~ecvAxesGridDialog() override
void setXAxisUseCustomLabels(bool use)