Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/calculate.py
diff options
context:
space:
mode:
authorReinier Heeres <reinier@heeres.eu>2007-09-16 21:25:59 (GMT)
committer Reinier Heeres <reinier@heeres.eu>2007-09-16 21:25:59 (GMT)
commitdbf0042e81535529026aa94d0fe158809a3c054c (patch)
tree6dfa28517ab99fec38bc90441ddb68c1110cc04f /calculate.py
parentd3a7798fbd50c43cc70787483be0cdde42876e13 (diff)
Function exceptions get caught.
Diffstat (limited to 'calculate.py')
-rw-r--r--calculate.py45
1 files changed, 29 insertions, 16 deletions
diff --git a/calculate.py b/calculate.py
index 61b57d4..90b46c7 100644
--- a/calculate.py
+++ b/calculate.py
@@ -46,6 +46,8 @@ from mathlib import MathLib
from eqnparser import EqnParser
from svgimage import SVGImage
+from decimal import Decimal
+
class Equation:
def __init__(self, label=None, eqn=None, res=None, col=None, owner=None, str=None):
if str is not None:
@@ -79,6 +81,13 @@ class Equation:
if l[2].startswith("<svg>"):
l[2] = SVGImage(data=base64.b64decode(l[2][5:]))
+# Should figure out how to use MathLib directly in a non-hacky way
+ else:
+ try:
+ l[2] = Decimal(l[2])
+ except Exception, inst:
+ pass
+
self.set(l[0], l[1], l[2], XoColor(color_string=l[3]), l[4])
class Calculate(activity.Activity):
@@ -216,7 +225,7 @@ class Calculate(activity.Activity):
if len(eqn.label) > 0:
text = eqn.label
else:
- text = str(eqn.result)
+ text = self.parser.ml.format_number(eqn.result)
self.button_pressed(self.TYPE_TEXT, text)
return True
@@ -281,15 +290,16 @@ class Calculate(activity.Activity):
range = (range[0] + offset, range[1] + offset)
text += "\n" + self.parser.ps.format_error()
- self.lat_eq_sig = self.layout.last_eq.connect('button-press-event', \
- lambda a1, a2: True)
-
self.last_eq.set_text(text)
self.format_last_eq_buf(self.last_eq, eqn.result, range)
def set_error_equation(self, eqn):
self.set_last_equation(eqn)
+ def clear_equations(self):
+ self.helper_old_eqs = []
+ self.showing_version = 0
+
def add_equation(self, eq, prepend=False):
"""Insert equation in the history list and set variable if assignment"""
@@ -303,6 +313,8 @@ class Calculate(activity.Activity):
self.helper_old_eqs.append(eq)
self.set_variables(eq)
+ self.showing_version = len(self.helper_old_eqs)
+
def process(self):
"""Parse the equation entered and show the result"""
@@ -511,7 +523,7 @@ class Calculate(activity.Activity):
if l[2] != l[3]:
self.text_entry.select_region(int(l[2]), int(l[3]))
- self.helper_old_eqs = []
+ self.clear_equations()
for str in f:
eq = Equation(str=str)
self.add_equation(eq)
@@ -664,19 +676,20 @@ class Calculate(activity.Activity):
return f(self)
return True
-
+
def get_older(self):
- self.showing_version = min(len(self.helper_old_eqs), self.showing_version + 1)
- if self.showing_version == 1:
+ self.showing_version = max(0, self.showing_version - 1)
+ if self.showing_version == len(self.helper_old_eqs) - 1:
self.buffer = self.text_entry.get_text()
- self.text_entry.set_text(self.helper_old_eqs[self.showing_version - 1].equation)
-
+ if len(self.helper_old_eqs) > 0:
+ self.text_entry.set_text(self.helper_old_eqs[self.showing_version].equation)
+
def get_newer(self):
- self.showing_version = max(0, self.showing_version - 1)
- if self.showing_version == 0:
+ self.showing_version = min(len(self.helper_old_eqs), self.showing_version + 1)
+ if self.showing_version == len(self.helper_old_eqs):
self.text_entry.set_text(self.buffer)
- return
- self.text_entry.set_text(self.helper_old_eqs[self.showing_version - 1].equation)
+ else:
+ self.text_entry.set_text(self.helper_old_eqs[self.showing_version].equation)
def add_text(self, str):
self.button_pressed(self.TYPE_TEXT, str)
@@ -732,7 +745,7 @@ class Calculate(activity.Activity):
# logic better? (str not in self.parser.get_pre_operators() or str == '+'):
ans = self.parser.ml.format_number(self.parser.get_var('Ans'))
self.text_entry.set_text(ans + str)
- self.text_entry.set_position(3 + len(str))
+ self.text_entry.set_position(len(ans) + len(str))
elif len(sel) is 2:
self.text_entry.set_text(text[:start] + str + text[end:])
self.text_entry.set_position(pos + start - end + len(str))
@@ -755,7 +768,7 @@ class Calculate(activity.Activity):
self.helper.send_message("sync", data)
elif msg == "sync":
tmp = []
- self.helper_old_eqs = []
+ self.clear_equations()
for eq_str in val:
_logger.info('receive_message: %s', str(eq_str))
self.add_equation(Equation(str=str(eq_str)))