diff options
Diffstat (limited to 'pokemodr/FractionWidget.cpp')
-rw-r--r-- | pokemodr/FractionWidget.cpp | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/pokemodr/FractionWidget.cpp b/pokemodr/FractionWidget.cpp index 16eac461..873bf567 100644 --- a/pokemodr/FractionWidget.cpp +++ b/pokemodr/FractionWidget.cpp @@ -19,12 +19,15 @@ #include "FractionWidget.h" Pokemodr::FractionWidget::FractionWidget(QWidget* parent, const Pokemod::Fraction& value) : - QWidget(parent) + QWidget(parent), + m_behavior(Any), + m_value(value) { setupUi(this); connect(this, SIGNAL(valueChanged(const Pokemod::Fraction&)), SLOT(updateValue())); connect(this, SIGNAL(valueChanged(const Pokemod::Fraction&)), SLOT(resetRanges())); - setValue(value); + connect(this, SIGNAL(behaviorChanged(const Behavior)), SLOT(resetRanges())); + resetRanges(); } Pokemodr::FractionWidget::Behavior Pokemodr::FractionWidget::behavior() const @@ -40,7 +43,7 @@ Pokemod::Fraction Pokemodr::FractionWidget::value() const void Pokemodr::FractionWidget::setBehavior(const Behavior behavior) { m_behavior = behavior; - resetRanges(); + emit(behaviorChanged(m_behavior)); } void Pokemodr::FractionWidget::setValue(const Pokemod::Fraction& value) @@ -71,13 +74,25 @@ void Pokemodr::FractionWidget::on_varDenominator_valueChanged(const int denomina void Pokemodr::FractionWidget::resetRanges() { varNumerator->setValue(m_value.numerator()); - if (m_behavior != Proper) - varNumerator->setMaximum(INT_MAX); - else - varNumerator->setMaximum(m_value.denominator()); varDenominator->setValue(m_value.denominator()); - if (m_behavior != Improper) - varDenominator->setMaximum(INT_MAX); - else - varDenominator->setMaximum(m_value.numerator()); + int numMin = 0; + int numMax = INT_MAX; + int denomMin = 1; + int denomMax = INT_MAX; + switch (m_behavior) + { + case NonZero: + numMin = 1; + case Proper: + numMax = m_value.denominator(); + break; + case Improper: + denomMax = m_value.numerator(); + case AnyButZero: + numMin = 1; + default: + break; + } + varNumerator->setRange(numMin, numMax); + varDenominator->setRange(denomMin, denomMax); } |