summaryrefslogtreecommitdiffstats
path: root/pokemodr/FractionWidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'pokemodr/FractionWidget.cpp')
-rw-r--r--pokemodr/FractionWidget.cpp37
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);
}