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 } |