Wed, 29 Jun 2022 16:19:05 +0300
simplify a bit
|
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 | } |