src/ui/circletooloptionswidget.cpp

Thu, 15 Jun 2023 16:18:03 +0300

author
Teemu Piippo <teemu.s.piippo@gmail.com>
date
Thu, 15 Jun 2023 16:18:03 +0300
changeset 383
530d23cd4e97
parent 379
8d88adffb779
permissions
-rw-r--r--

Refactor, make selecting elements from the model select the corresponding line from the editor as well

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
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
2
379
8d88adffb779 Circular primitive type is now an enum class
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 264
diff changeset
3 static QString circularPrimitiveTypeName(circular_primitive_type_e type)
233
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
4 {
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
5 switch (type) {
379
8d88adffb779 Circular primitive type is now an enum class
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 264
diff changeset
6 case circular_primitive_type_e::circle:
233
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
7 return CircleToolOptionsWidget::tr("Circle");
379
8d88adffb779 Circular primitive type is now an enum class
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 264
diff changeset
8 case circular_primitive_type_e::disc:
233
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
9 return CircleToolOptionsWidget::tr("Disc");
379
8d88adffb779 Circular primitive type is now an enum class
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 264
diff changeset
10 case circular_primitive_type_e::cylinder:
233
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
11 return CircleToolOptionsWidget::tr("Cylinder");
379
8d88adffb779 Circular primitive type is now an enum class
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 264
diff changeset
12 case circular_primitive_type_e::cylinder_open:
233
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
13 return CircleToolOptionsWidget::tr("Cylinder open");
379
8d88adffb779 Circular primitive type is now an enum class
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 264
diff changeset
14 case circular_primitive_type_e::cylinder_closed:
233
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
15 return CircleToolOptionsWidget::tr("Cylinder closed");
379
8d88adffb779 Circular primitive type is now an enum class
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 264
diff changeset
16 case circular_primitive_type_e::disc_negative:
233
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
17 return CircleToolOptionsWidget::tr("Disc negative");
379
8d88adffb779 Circular primitive type is now an enum class
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 264
diff changeset
18 case circular_primitive_type_e::chord:
233
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
19 return CircleToolOptionsWidget::tr("Chord");
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
20 }
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
21 return "";
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
22 }
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
23
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
24 CircleToolOptionsWidget::CircleToolOptionsWidget(QWidget *parent) :
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
25 QWidget{parent}
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
26 {
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
27 this->ui.setupUi(this);
379
8d88adffb779 Circular primitive type is now an enum class
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 264
diff changeset
28 for (int i = 0; i < circular_primitive::NUM_TYPES; ++i) {
8d88adffb779 Circular primitive type is now an enum class
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 264
diff changeset
29 const auto type = static_cast<circular_primitive_type_e>(i);
8d88adffb779 Circular primitive type is now an enum class
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 264
diff changeset
30 this->ui.type->addItem(circularPrimitiveTypeName(type), QVariant::fromValue(type));
233
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
31 }
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
32 connect(ui.segments, qOverload<int>(&QSpinBox::valueChanged), this, &CircleToolOptionsWidget::handleInputChange);
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
33 connect(ui.divisions, &QComboBox::currentTextChanged, this, &CircleToolOptionsWidget::handleInputChange);
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
34 connect(ui.type, &QComboBox::currentTextChanged, this, &CircleToolOptionsWidget::handleInputChange);
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
35 }
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
36
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
37 CircleToolOptionsWidget::~CircleToolOptionsWidget()
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
38 {
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
39 }
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
40
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
41 unsigned int CircleToolOptionsWidget::segments() const
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
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
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
44 }
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
45
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
46 unsigned int CircleToolOptionsWidget::divisions() const
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
47 {
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
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
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
50 if (ok) {
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
51 return divs;
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
52 }
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
53 else {
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
54 return 16;
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
55 }
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
56 }
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
57
379
8d88adffb779 Circular primitive type is now an enum class
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 264
diff changeset
58 circular_primitive_type_e CircleToolOptionsWidget::type() const
233
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
59 {
379
8d88adffb779 Circular primitive type is now an enum class
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 264
diff changeset
60 return this->ui.type->currentData().value<circular_primitive_type_e>();
233
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
61 }
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
62
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
63 void CircleToolOptionsWidget::handleInputChange()
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
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
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
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
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
70 }
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
71 const qreal ratio = static_cast<qreal>(this->segments()) / newdivs;
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
72 this->ui.ratio->setText(QString::number(ratio, 'g', 4));
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
73 Q_EMIT this->optionsChanged(CircleToolOptions{
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
74 .fraction = CircularFraction{this->segments(), this->divisions()},
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
75 .type = this->type(),
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
76 });
5509bec02c81 fix various things
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
77 }

mercurial