From: <jb...@us...> - 2010-11-07 21:40:46
|
Revision: 683 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=683&view=rev Author: jblance Date: 2010-11-07 21:40:39 +0000 (Sun, 07 Nov 2010) Log Message: ----------- New units/conversion helper functions from Arnd - WIP Modified Paths: -------------- pytrainer/trunk/pytrainer/gui/windowrecord.py pytrainer/trunk/pytrainer/lib/unitsconversor.py pytrainer/trunk/pytrainer/main.py Modified: pytrainer/trunk/pytrainer/gui/windowrecord.py =================================================================== --- pytrainer/trunk/pytrainer/gui/windowrecord.py 2010-11-07 21:14:30 UTC (rev 682) +++ pytrainer/trunk/pytrainer/gui/windowrecord.py 2010-11-07 21:40:39 UTC (rev 683) @@ -24,6 +24,7 @@ from filechooser import FileChooser from pytrainer.lib.date import Date +from pytrainer.lib.unitsconversor import * import pytrainer.record import dateutil.parser from dateutil.tz import * # for tzutc() @@ -33,6 +34,8 @@ logging.debug(">>") self.parent = parent self.pytrainer_main = parent.pytrainer_main + self.us = self.pytrainer_main.profile.prf_us_system + logging.debug("Using US system: "+ str(self.us)) self.data_path = data_path glade_path="glade/newrecord.glade" root = "newrecord" @@ -74,7 +77,8 @@ if title != None: self.rcd_title.set_text(title) if distance != None: - self.rcd_distance.set_text(distance) + #self.rcd_distance.set_text(distance) + myset_text(rcd_distance, 'distance', distance, us=self.us, round=2) if time != None: self.setTime(time) if distance!=None and time!=None: @@ -85,6 +89,13 @@ self.rcd_unegative.set_text(unegative) if calories != None: self.rcd_calories.set_text(calories) + #populate labels with units + # test only + if self.us: + self.label8.set_text('Distance (mi)') + else: + self.label8.set_text('Distance (km)') + self._init_equipment(equipment, equipment_service) logging.debug("<<") @@ -324,7 +335,8 @@ self.rcd_min.set_value(m) self.rcd_second.set_value(s) self.rcd_date.set_text(activity.date) - self.rcd_distance.set_text("%.2f"%activity.distance) + #self.rcd_distance.set_text("%.2f"%activity.distance) + myset_text(self.rcd_distance, 'distance', activity.distance, us=self.us, round=2) self.rcd_average.set_text("%.2f"%activity.average) self.rcd_calories.set_text("%s"%activity.calories) self.rcd_beats.set_text("%s"%activity.beats) @@ -643,7 +655,8 @@ pass def set_distance(self,distance): - self.rcd_distance.set_text("%0.2f" %distance) + #self.rcd_distance.set_text("%0.2f" %distance) + myset_text(rcd_distance, 'distance', distance, us=self.us, round=2) def set_maxspeed(self,vel): self.rcd_maxvel.set_text("%0.2f" %vel) Modified: pytrainer/trunk/pytrainer/lib/unitsconversor.py =================================================================== --- pytrainer/trunk/pytrainer/lib/unitsconversor.py 2010-11-07 21:14:30 UTC (rev 682) +++ pytrainer/trunk/pytrainer/lib/unitsconversor.py 2010-11-07 21:40:39 UTC (rev 683) @@ -16,6 +16,19 @@ #along with this program; if not, write to the Free Software #Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +'''def _set_units(self): + if self.us_system: + self.distance_unit = _("miles") + self.speed_unit = _("miles/h") + self.pace_unit = _("min/mile") + self.height_unit = _("feet") + else: + self.distance_unit = _("km") + self.speed_unit = _("km/h") + self.pace_unit = _("min/km") + self.height_unit = _("m") + self.units = { 'distance': self.distance_unit, 'average': self.speed_unit, 'upositive': self.height_unit, 'unegative': self.height_unit, 'maxspeed': self.speed_unit, 'pace': self.pace_unit, 'maxpace': self.pace_unit }''' + def km2miles(kilometers): try: km = float(kilometers) @@ -71,3 +84,98 @@ return m/2.20462262 except Exception as e: return 0.0 + +def myset_text(gtkentry, quantity, value, **kwargs): + _us = False + _round = False + _value = value + + if kwargs.has_key('us'): + if kwargs['us'] == True: + _us = True + if kwargs.has_key('units'): + if kwargs['units']: + _units = True + if kwargs.has_key('round'): + _round = True + _round_digits = kwargs['round'] + + print 'set_text via myset_text()' + print quantity, _value + # quantity=physical quantitiy like 'distance' or 'speed' + # here we should call the universal 'conversion prepare for output' filter + # need the same for get_text + _value = filter_inout(quantity, _value, 'out', us=_us, round=_round_digits) + _value = str(_value) + gtkentry.set_text(_value) + +def myget_text(gtkentry, quantity, **kwargs): + _us = False + _round = False + _value = gtkentry.get_text() + + if kwargs.has_key('us'): + if kwargs['us'] == True: + _us = True + if kwargs.has_key('units'): + if kwargs['units']: + _units = True + if kwargs.has_key('round'): + _round = True + _round_digits = kwargs['round'] + + _value = float(_value) + _value = filter_inout(quantity, _value, 'in', us=_us) + return float(_value) + +def filter_inout(param, values, direction,**kwargs): + """ """ + units = {'distance' : ['km','mi'] , 'speed' : ['km/h', 'mph'], + 'pace' : ['min/km','min/mi'], 'height' : ['m', 'ft']} + + if direction == 'out': #all comes from metric + myexp = 1 + else: + myexp = -1 + if not type(values) == list: + _list = False + values_return = [values] + else: + _list = True + values_return = values + _units = False + _round = False + _round_digits = 99 + #print kwargs + _us = False + if kwargs.has_key('us'): + if kwargs['us'] == True: + _us = True + if kwargs.has_key('units'): + if kwargs['units']: + _units = True + if kwargs.has_key('round'): + _round = True + _round_digits = kwargs['round'] + + if _us: #if us: + if param in ['distance', 'speed']: + values_return = [x * (0.6213711**myexp) for x in values_return] + elif param in ['pace']: + values_return = [x * (1.609344**myexp) for x in values_return] + elif param in ['height']: + values_return = [x * (3.2808399**myexp) for x in values_return] + + if _round: + values_return = [round(x, _round_digits) for x in values_return] + + if _units: + if _us: + values_return = [str(x) + ' ' + units[param][1] for x in values_return] + else: + values_return = [str(x) + ' ' + units[param][0] for x in values_return] + + if not _list: + return values_return[0] + else: + return values_return Modified: pytrainer/trunk/pytrainer/main.py =================================================================== --- pytrainer/trunk/pytrainer/main.py 2010-11-07 21:14:30 UTC (rev 682) +++ pytrainer/trunk/pytrainer/main.py 2010-11-07 21:40:39 UTC (rev 683) @@ -50,7 +50,7 @@ class pyTrainer: def __init__(self,filename = None, data_path = None): #Version constants - self.version ="1.7.2_svn#682" + self.version ="1.7.2_svn#683" self.DB_version = 6 #Process command line options self.startup_options = self.get_options() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |