diff options
author | Walter Bender <walter@sugarlabs.org> | 2010-09-30 07:30:03 (GMT) |
---|---|---|
committer | Walter Bender <walter@sugarlabs.org> | 2010-09-30 07:30:03 (GMT) |
commit | 2b84e9e5258b71136285f56a2bdd689102a160a6 (patch) | |
tree | 4ce71088107f842c4f4842f080ffb2e32aa7f637 /abacus_window.py | |
parent | c76e411c2c50224288f2cbe783c30e8ae0821cbd (diff) |
transform mixed fractions to float for inputting values
Diffstat (limited to 'abacus_window.py')
-rw-r--r-- | abacus_window.py | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/abacus_window.py b/abacus_window.py index 924eb83..c84d952 100644 --- a/abacus_window.py +++ b/abacus_window.py @@ -37,6 +37,7 @@ import os import locale from gettext import gettext as _ +import traceback import logging _logger = logging.getLogger("abacus-activity") @@ -329,6 +330,19 @@ class Abacus(): self.mode.reset_abacus() elif self.press == self.mode.bar: # prepare for typing in a value self.mode.label(self.generate_label(sum_only=True)+CURSOR) + number = self.press.labels[0].replace(CURSOR, '') + if '/' in number: # need to convert to decimal form + try: + userdefined = {} + exec "def f(): return " + number.replace(' ', '+')+'.' \ + in globals(), userdefined + value = userdefined.values()[0]() + number = str(value) + self.press.set_label( + number.replace('.', self.decimal_point) + CURSOR) + except: + traceback.print_exc() + number = '' self.press = None else: self.press = None @@ -366,8 +380,6 @@ class Abacus(): 'minus', 'Return', 'BackSpace', 'comma']: if self.last == self.mode.bar: self._process_numeric_input(self.last, k) - else: - print self.last, '!= bar', k elif k == 'r': self.mode.reset_abacus() return True @@ -682,7 +694,6 @@ class AbacusGeneric(): bead_value = self.beads[bead + self.top_beads].value if bead_value != 0: count = int(number / bead_value) - print rod, bead_value, count self.set_rod_value(rod, count) return count * bead_value @@ -1102,6 +1113,17 @@ class Schety(AbacusGeneric): r.type = "frame" return + def set_rod(self, rod, number): + """ Set a number of beads on a rod """ + bead = 0 + for r in range(rod): + bead += self.bead_count[r] + bead_value = self.beads[bead].value + if bead_value != 0: + count = int(number / bead_value) + self.set_rod_value(rod, count) + return count * bead_value + def move_bead(self, sprite, dy): """ Move a bead (or beads) up or down a rod. """ @@ -1176,7 +1198,6 @@ class Schety(AbacusGeneric): bead_index = 0 for r in range(rod): bead_index += self.bead_count[r] - # Clear the beads for i in range(self.bead_count[rod]): if self.beads[bead_index+i].get_state() == 1: |