From ab7b5fe2906867093370c1d6756edbcc486f0a28 Mon Sep 17 00:00:00 2001 From: Sai Vineet Date: Wed, 20 Nov 2013 14:47:14 +0000 Subject: Filter Chart Inputs Problem: Error when inputting value with preceding "$" causes a problem - Invalid value The value must be a number (integer or decimal) - the wording is too advanced for primary school students to understand, need to implement a filter to prevent such vales from being entered. Solution: Implement a filter to extract the most probable input the user wants. If there is not probable input, like "dscsdc", then display error message. Fixes #4588 Signed-off-by: Agustin Zubiaga --- (limited to 'activity.py') diff --git a/activity.py b/activity.py index a977b24..f9d1fd0 100644 --- a/activity.py +++ b/activity.py @@ -24,6 +24,7 @@ from gi.repository import Gtk from gi.repository import Gdk from gi.repository import GObject import os +import re # for extracting values from invalid inputs. try: import json @@ -101,6 +102,16 @@ def _invalid_number_alert(activity): activity.add_alert(alert) alert.show() +def _extract_value(value): + decimals_found = re.findall("\d+\.\d+", str(value)) + integers_found = re.findall("\d+", str(value)) + + if decimals_found != []: + return decimals_found[0] + elif integers_found != []: + return integers_found[0] + return None + class ChartArea(Gtk.DrawingArea): @@ -1112,8 +1123,17 @@ class ChartData(Gtk.TreeView): self.emit('value-changed', str(path), number) - elif not is_number: - _invalid_number_alert(activity) + else: + if _extract_value(number) is not None: + number = str(_extract_value(number)) + + decimals = utils.get_decimals(str(float(number))) + new_text = locale.format('%.' + decimals + 'f', float(number)) + model[path][1] = str(new_text) + + self.emit('value-changed', str(path), number) + else: + _invalid_number_alert(activity) class Entry(Gtk.ToolItem): -- cgit v0.9.1