src/ui/multiplyfactordialog.cpp

changeset 88
14e51640c189
parent 81
62373840e33a
child 115
ed884a2fb009
equal deleted inserted replaced
87:93ec4d630346 88:14e51640c189
13 this->ui->previewGroupBox->layout()->addWidget(&this->preview); 13 this->ui->previewGroupBox->layout()->addWidget(&this->preview);
14 connect(this->ui->invert, &QCheckBox::clicked, this, &MultiplyFactorDialog::updatePreview); 14 connect(this->ui->invert, &QCheckBox::clicked, this, &MultiplyFactorDialog::updatePreview);
15 connect(this->ui->factor, qOverload<double>(&DoubleSpinBox::valueChanged), this, &MultiplyFactorDialog::updatePreview); 15 connect(this->ui->factor, qOverload<double>(&DoubleSpinBox::valueChanged), this, &MultiplyFactorDialog::updatePreview);
16 } 16 }
17 17
18 /**
19 * @brief empty destructor, necessary because std::unique_ptr is used with a forward declaration
20 */
18 MultiplyFactorDialog::~MultiplyFactorDialog() 21 MultiplyFactorDialog::~MultiplyFactorDialog()
19 { 22 {
20 } 23 }
21 24
25 /**
26 * @brief Computes the resulting vector
27 * @return the input vector multiplied by the specified vector
28 */
22 glm::vec3 MultiplyFactorDialog::value() const 29 glm::vec3 MultiplyFactorDialog::value() const
23 { 30 {
24 glm::vec3 result = baseVector; 31 glm::vec3 result = baseVector;
25 if (this->ui->invert->isChecked()) 32 if (this->ui->invert->isChecked())
26 { 33 {
27 result /= this->ui->factor->value(); 34 if (qFuzzyIsNull(this->ui->factor->value()))
35 {
36 constexpr double infinity = std::numeric_limits<double>::quiet_NaN();
37 result = {infinity, infinity, infinity};
38 }
39 else
40 {
41 result /= this->ui->factor->value();
42 }
28 } 43 }
29 else 44 else
30 { 45 {
31 result *= this->ui->factor->value(); 46 result *= this->ui->factor->value();
32 } 47 }
33 return result; 48 return result;
34 } 49 }
35 50
51 /**
52 * @brief Makes a string that is prefixed to the factor input.
53 * @param ui
54 * @return prefix string
55 */
56 QString prefixForFactorInput(const Ui::MultiplyFactorDialog& ui)
57 {
58 if (ui.invert->isChecked())
59 {
60 return "1 : ";
61 }
62 else
63 {
64 return "";
65 }
66 }
67
68 /**
69 * @brief Makes a string that is suffixed to the factor input.
70 * @param ui
71 * @return prefix string
72 */
73 QString suffixForFactorInput(const Ui::MultiplyFactorDialog& ui)
74 {
75 if (ui.invert->isChecked())
76 {
77 // render the actual factor that stuff gets effectively multiplied by
78 return " = " + QString::number(1.0 / (ui.factor->value()));
79 }
80 else
81 {
82 return "";
83 }
84 }
85
86 /**
87 * @brief Responds to changes in the value and updates previews accordingly
88 */
36 void MultiplyFactorDialog::updatePreview() 89 void MultiplyFactorDialog::updatePreview()
37 { 90 {
91 this->ui->factor->setPrefix(::prefixForFactorInput(*this->ui));
92 this->ui->factor->setSuffix(::suffixForFactorInput(*this->ui));
38 this->preview.setValue(this->value()); 93 this->preview.setValue(this->value());
39 } 94 }

mercurial