Tue, 28 Jun 2022 19:49:45 +0300
Move earcut.h outside src/ directory
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 | } |