Tue, 11 Apr 2023 22:39:18 +0300
Split GL preferences that affect GL build to a new build preferences structure, modifying that requires rebuild, modifying render preferences does not
264
76a025db4948
Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
1 | #include "src/ui/circletooloptionswidget.h" |
233 | 2 | |
3 | static QString circularPrimitiveTypeName(CircularPrimitive::Type type) | |
4 | { | |
5 | switch (type) { | |
6 | case CircularPrimitive::Circle: | |
7 | return CircleToolOptionsWidget::tr("Circle"); | |
8 | case CircularPrimitive::Disc: | |
9 | return CircleToolOptionsWidget::tr("Disc"); | |
10 | case CircularPrimitive::Cylinder: | |
11 | return CircleToolOptionsWidget::tr("Cylinder"); | |
12 | case CircularPrimitive::CylinderOpen: | |
13 | return CircleToolOptionsWidget::tr("Cylinder open"); | |
14 | case CircularPrimitive::CylinderClosed: | |
15 | return CircleToolOptionsWidget::tr("Cylinder closed"); | |
16 | case CircularPrimitive::DiscNegative: | |
17 | return CircleToolOptionsWidget::tr("Disc negative"); | |
18 | case CircularPrimitive::Chord: | |
19 | return CircleToolOptionsWidget::tr("Chord"); | |
20 | } | |
21 | return ""; | |
22 | } | |
23 | ||
24 | CircleToolOptionsWidget::CircleToolOptionsWidget(QWidget *parent) : | |
25 | QWidget{parent} | |
26 | { | |
27 | this->ui.setupUi(this); | |
28 | for (int i = 0; i < CircularPrimitive::NUM_TYPES; ++i) { | |
29 | const auto type = static_cast<CircularPrimitive::Type>(i); | |
30 | this->ui.type->addItem(circularPrimitiveTypeName(type), type); | |
31 | } | |
32 | connect(ui.segments, qOverload<int>(&QSpinBox::valueChanged), this, &CircleToolOptionsWidget::handleInputChange); | |
33 | connect(ui.divisions, &QComboBox::currentTextChanged, this, &CircleToolOptionsWidget::handleInputChange); | |
34 | connect(ui.type, &QComboBox::currentTextChanged, this, &CircleToolOptionsWidget::handleInputChange); | |
35 | } | |
36 | ||
37 | CircleToolOptionsWidget::~CircleToolOptionsWidget() | |
38 | { | |
39 | } | |
40 | ||
41 | unsigned int CircleToolOptionsWidget::segments() const | |
42 | { | |
250
2837b549e616
I felt that the compiler was too kind to me, so I enabled a big pile of warnings
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
233
diff
changeset
|
43 | return unsigned_cast(this->ui.segments->value()); |
233 | 44 | } |
45 | ||
46 | unsigned int CircleToolOptionsWidget::divisions() const | |
47 | { | |
48 | bool ok; | |
250
2837b549e616
I felt that the compiler was too kind to me, so I enabled a big pile of warnings
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
233
diff
changeset
|
49 | const unsigned int divs = this->ui.divisions->currentText().toUInt(&ok); |
233 | 50 | if (ok) { |
51 | return divs; | |
52 | } | |
53 | else { | |
54 | return 16; | |
55 | } | |
56 | } | |
57 | ||
58 | CircularPrimitive::Type CircleToolOptionsWidget::type() const | |
59 | { | |
60 | return this->ui.type->currentData().value<CircularPrimitive::Type>(); | |
61 | } | |
62 | ||
63 | void CircleToolOptionsWidget::handleInputChange() | |
64 | { | |
250
2837b549e616
I felt that the compiler was too kind to me, so I enabled a big pile of warnings
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
233
diff
changeset
|
65 | const unsigned int olddivs = unsigned_cast(this->ui.segments->maximum()); |
2837b549e616
I felt that the compiler was too kind to me, so I enabled a big pile of warnings
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
233
diff
changeset
|
66 | const unsigned int newdivs = this->divisions(); |
233 | 67 | if (olddivs != newdivs) { |
250
2837b549e616
I felt that the compiler was too kind to me, so I enabled a big pile of warnings
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
233
diff
changeset
|
68 | this->ui.segments->setMaximum(signed_cast(newdivs)); |
2837b549e616
I felt that the compiler was too kind to me, so I enabled a big pile of warnings
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
233
diff
changeset
|
69 | this->ui.segments->setValue(signed_cast(this->segments() * newdivs / olddivs)); |
233 | 70 | } |
71 | const qreal ratio = static_cast<qreal>(this->segments()) / newdivs; | |
72 | this->ui.ratio->setText(QString::number(ratio, 'g', 4)); | |
73 | Q_EMIT this->optionsChanged(CircleToolOptions{ | |
74 | .fraction = CircularFraction{this->segments(), this->divisions()}, | |
75 | .type = this->type(), | |
76 | }); | |
77 | } |