You can subscribe to this list here.
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2009 |
Jan
|
Feb
(1) |
Mar
(15) |
Apr
(20) |
May
(2) |
Jun
(9) |
Jul
(3) |
Aug
(2) |
Sep
(17) |
Oct
(16) |
Nov
(38) |
Dec
(40) |
2010 |
Jan
(51) |
Feb
(11) |
Mar
(24) |
Apr
(31) |
May
(24) |
Jun
(3) |
Jul
(9) |
Aug
(1) |
Sep
(29) |
Oct
(33) |
Nov
(81) |
Dec
(6) |
2011 |
Jan
(2) |
Feb
(4) |
Mar
(13) |
Apr
(4) |
May
(24) |
Jun
(4) |
Jul
(19) |
Aug
(46) |
Sep
(10) |
Oct
(28) |
Nov
(31) |
Dec
|
From: <dg...@us...> - 2010-11-25 09:41:03
|
Revision: 743 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=743&view=rev Author: dgranda Date: 2010-11-25 09:40:54 +0000 (Thu, 25 Nov 2010) Log Message: ----------- Minor typo in language credits Modified Paths: -------------- pytrainer/trunk/pytrainer/gui/aboutdialog.py Modified: pytrainer/trunk/pytrainer/gui/aboutdialog.py =================================================================== --- pytrainer/trunk/pytrainer/gui/aboutdialog.py 2010-11-24 22:03:43 UTC (rev 742) +++ pytrainer/trunk/pytrainer/gui/aboutdialog.py 2010-11-25 09:40:54 UTC (rev 743) @@ -33,8 +33,8 @@ def run(self): authors = ["Fiz Vázquez <vu...@si...>\nDavid García Granda <dg...@gm...>\nJohn Blance <joh...@gm...>\nArnd Zapletal <a.z...@gm...>\nNathan Jones <na...@nc...>\n\n-Package maintainers:\n\nRedHat/Fedora: Douglas E. Warner <sil...@si...>\nDebian: Noèl Köthe <no...@de...>\nUbuntu: Kevin Dwyer <ke...@ph...>, Alessio Treglia <qua...@ub...>"] - translator_credits = "Euskara: Jabier Santamaria <men...@gm...>\nCatalà: Eloi Crespillo Itchart <el...@ik...>\nČeština: Lobus Pokorny <sp...@se...>\nFrançais: Dj <dj...@dj...>, Pierre Gaigé <pg...@fr...>\nNorsk: Havard Davidsen <hav...@gm...>\nPolski: Seweryn Kokot <sk...@po...>\nDeutsch: Aleks <al...@sc...>, Noèl Köthe <no...@de...>\nEspañol: Fiz Vázquez <vu...@si...>, David García Granda <dg...@gm...>" - license = "PyTrainer - The free sport tracking center\nCopyright (C) 2005-10 Fiz Vázquez\n\nThis program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" + translator_credits = "Euskara: Jabier Santamaria <men...@gm...>\nCatalà: Eloi Crespillo Itchart <el...@ik...>\nČesky: Lobus Pokorny <sp...@se...>\nFrançais: Dj <dj...@dj...>, Pierre Gaigé <pg...@fr...>\nNorsk: Havard Davidsen <hav...@gm...>\nPolski: Seweryn Kokot <sk...@po...>\nDeutsch: Aleks <al...@sc...>, Noèl Köthe <no...@de...>\nEspañol: Fiz Vázquez <vu...@si...>, David García Granda <dg...@gm...>" + license = "PyTrainer - The free sport tracking center\nCopyright (C) 2005-09 Fiz Vázquez\n\nThis program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" about_dialog = gtk.AboutDialog() about_dialog.set_destroy_with_parent(True) about_dialog.set_name("pyTrainer") This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jb...@us...> - 2010-11-24 22:03:49
|
Revision: 742 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=742&view=rev Author: jblance Date: 2010-11-24 22:03:43 +0000 (Wed, 24 Nov 2010) Log Message: ----------- fix list view so default sort is not applied on right click Modified Paths: -------------- pytrainer/trunk/pytrainer/gui/windowmain.py pytrainer/trunk/pytrainer/main.py Modified: pytrainer/trunk/pytrainer/gui/windowmain.py =================================================================== --- pytrainer/trunk/pytrainer/gui/windowmain.py 2010-11-24 21:38:20 UTC (rev 741) +++ pytrainer/trunk/pytrainer/gui/windowmain.py 2010-11-24 22:03:43 UTC (rev 742) @@ -1619,7 +1619,7 @@ selected,iter = treeview.get_selection().get_selected() #Por si hay un registro (malo) sin fecha, pa poder borrarlo try: - date = self.parent.date.setDate(selected.get_value(iter,2)) + date = self.parent.date.getDate(selected.get_value(iter,2)) except: pass self.popup.show(selected.get_value(iter,0), event.button, time) Modified: pytrainer/trunk/pytrainer/main.py =================================================================== --- pytrainer/trunk/pytrainer/main.py 2010-11-24 21:38:20 UTC (rev 741) +++ pytrainer/trunk/pytrainer/main.py 2010-11-24 22:03:43 UTC (rev 742) @@ -53,7 +53,7 @@ class pyTrainer: def __init__(self,filename = None, data_path = None): #Version constants - self.version ="1.7.2_svn#740" + self.version ="1.7.2_svn#742" 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. |
From: <jb...@us...> - 2010-11-24 21:38:27
|
Revision: 741 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=741&view=rev Author: jblance Date: 2010-11-24 21:38:20 +0000 (Wed, 24 Nov 2010) Log Message: ----------- Test for pace values in DB check logic Modified Paths: -------------- pytrainer/trunk/pytrainer/lib/ddbb.py Modified: pytrainer/trunk/pytrainer/lib/ddbb.py =================================================================== --- pytrainer/trunk/pytrainer/lib/ddbb.py 2010-11-24 15:28:25 UTC (rev 740) +++ pytrainer/trunk/pytrainer/lib/ddbb.py 2010-11-24 21:38:20 UTC (rev 741) @@ -360,14 +360,17 @@ def populate_duration_from_time(self): ''' Populate duration from time field - only for empty durations and where time can be parsed as an int + only for time can be parsed as an int + + also check pace value ''' logging.debug('--') #listOfRecords = self.select_dict("records",('id_record','time'), "duration is NULL") #logging.debug("Found %d records in DB without date_time_local field populated" % (len(listOfRecords) ) ) - listOfRecords = self.select_dict("records",('id_record','time', 'duration')) + listOfRecords = self.select_dict("records",('id_record','time', 'duration', 'pace', 'average', 'maxspeed', 'maxpace')) logging.debug("Found %d records in DB" % (len(listOfRecords) ) ) for record in listOfRecords: + data = {} try: duration = int(record['time']) except Exception as e: @@ -375,7 +378,32 @@ continue if duration != record['duration']: logging.debug("setting record %s duration to %d" % (record['id_record'], duration)) - data = {'duration': duration} + data['duration'] = duration + #Check pace + try: + db_avg_speed = float(record['average']) #km/hr + db_pace = float(record['pace']) #min/km + db_max_speed = float(record['maxspeed']) + db_max_pace = float(record['maxpace']) + calc_pace = 60 / db_avg_speed + calc_max_pace = 60 / db_max_speed + #Update DB if db_pace != calc_pace + if "%.2f" % db_pace != "%.2f" % calc_pace: + print "DB Pace: %.2f, Calc: %.2f" % (db_pace, calc_pace) + #data['pace'] = calc_pace + else: + print "Pace ok: %.2f" % db_pace + #Update DB if db_max_pace != calc_max_pace + if "%.2f" % db_max_pace != "%.2f" % calc_max_pace: + print "DB Max Pace: %.2f, Calc: %.2f" % (db_max_pace, calc_max_pace) + #data['max_pace'] = calc_max_pace + else: + print "Max pace ok: %.2f" % db_max_pace + except Exception as e: + #print type(e), e + logging.debug("Error with converting pace (%s), average speed(%s), max speed (%s), max pace(%s)" % (record['pace'], record['average'], record['maxspeed'], record['maxpace'])) + #Update DB if any changes + if len(data) > 0: self.update_dict("records",data ,"id_record = %d"%record['id_record']) def populate_date_time_local(self): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dg...@us...> - 2010-11-24 15:28:32
|
Revision: 740 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=740&view=rev Author: dgranda Date: 2010-11-24 15:28:25 +0000 (Wed, 24 Nov 2010) Log Message: ----------- Adding authors to credits Modified Paths: -------------- pytrainer/trunk/pytrainer/gui/aboutdialog.py pytrainer/trunk/pytrainer/main.py Modified: pytrainer/trunk/pytrainer/gui/aboutdialog.py =================================================================== --- pytrainer/trunk/pytrainer/gui/aboutdialog.py 2010-11-24 14:20:10 UTC (rev 739) +++ pytrainer/trunk/pytrainer/gui/aboutdialog.py 2010-11-24 15:28:25 UTC (rev 740) @@ -32,8 +32,8 @@ self.version = version def run(self): - authors = ["Fiz Vázquez <vu...@si...>\nDavid García Granda <dg...@gm...>\nJohn Blance <joh...@gm...>\n\n-Package maintainers:\n\nRedHat/Fedora: Douglas E. Warner <sil...@si...>\nDebian: Noèl Köthe <no...@de...>\nUbuntu: Kevin Dwyer <ke...@ph...>, Alessio Treglia <qua...@ub...>"] - translator_credits = "Basque: Jabier Santamaria <men...@gm...>\nCatalan: Eloi Crespillo Itchart <el...@ik...>\nCzech: Lobus Pokorny <sp...@se...>\nFrench: Dj <dj...@dj...>, Pierre Gaigé <pg...@fr...>\nNorwegian: Havard Davidsen <hav...@gm...>\nPolish: Seweryn Kokot <sk...@po...>\nGerman: Aleks <al...@sc...>, Noèl Köthe <no...@de...>\nSpanish: Fiz Vázquez <vu...@si...>, David García Granda <dg...@gm...>" + authors = ["Fiz Vázquez <vu...@si...>\nDavid García Granda <dg...@gm...>\nJohn Blance <joh...@gm...>\nArnd Zapletal <a.z...@gm...>\nNathan Jones <na...@nc...>\n\n-Package maintainers:\n\nRedHat/Fedora: Douglas E. Warner <sil...@si...>\nDebian: Noèl Köthe <no...@de...>\nUbuntu: Kevin Dwyer <ke...@ph...>, Alessio Treglia <qua...@ub...>"] + translator_credits = "Euskara: Jabier Santamaria <men...@gm...>\nCatalà: Eloi Crespillo Itchart <el...@ik...>\nČeština: Lobus Pokorny <sp...@se...>\nFrançais: Dj <dj...@dj...>, Pierre Gaigé <pg...@fr...>\nNorsk: Havard Davidsen <hav...@gm...>\nPolski: Seweryn Kokot <sk...@po...>\nDeutsch: Aleks <al...@sc...>, Noèl Köthe <no...@de...>\nEspañol: Fiz Vázquez <vu...@si...>, David García Granda <dg...@gm...>" license = "PyTrainer - The free sport tracking center\nCopyright (C) 2005-10 Fiz Vázquez\n\nThis program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" about_dialog = gtk.AboutDialog() about_dialog.set_destroy_with_parent(True) Modified: pytrainer/trunk/pytrainer/main.py =================================================================== --- pytrainer/trunk/pytrainer/main.py 2010-11-24 14:20:10 UTC (rev 739) +++ pytrainer/trunk/pytrainer/main.py 2010-11-24 15:28:25 UTC (rev 740) @@ -53,7 +53,7 @@ class pyTrainer: def __init__(self,filename = None, data_path = None): #Version constants - self.version ="1.7.2_svn#739" + self.version ="1.7.2_svn#740" 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. |
From: <aza...@us...> - 2010-11-24 14:20:16
|
Revision: 739 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=739&view=rev Author: azapletal Date: 2010-11-24 14:20:10 +0000 (Wed, 24 Nov 2010) Log Message: ----------- See 738; further integration of pace Modified Paths: -------------- pytrainer/trunk/pytrainer/gui/windowrecord.py pytrainer/trunk/pytrainer/lib/uc.py pytrainer/trunk/pytrainer/main.py Modified: pytrainer/trunk/pytrainer/gui/windowrecord.py =================================================================== --- pytrainer/trunk/pytrainer/gui/windowrecord.py 2010-11-24 07:45:09 UTC (rev 738) +++ pytrainer/trunk/pytrainer/gui/windowrecord.py 2010-11-24 14:20:10 UTC (rev 739) @@ -259,16 +259,16 @@ list_options["rcd_sport"] = self.rcd_sport.get_active_text() list_options["rcd_distance"] = self.uc.usr2sys_str('distance', self.rcd_distance.get_text()) list_options["rcd_beats"] = self.rcd_beats.get_text() - list_options["rcd_average"] = self.uc.usr2sys_str('speed',self.rcd_average.get_text()) + list_options["rcd_average"] = self.uc.usr2sys_str('speed', self.rcd_average.get_text()) list_options["rcd_calories"] = self.rcd_calories.get_text() list_options["rcd_title"] = self.rcd_title.get_text().replace("\"","'") list_options["rcd_gpxfile"] = self.rcd_gpxfile.get_text() - list_options["rcd_upositive"] = self.uc.usr2sys_str('height',self.rcd_upositive.get_text()) - list_options["rcd_unegative"] = self.uc.usr2sys_str('height',self.rcd_unegative.get_text()) + list_options["rcd_upositive"] = self.uc.usr2sys_str('height', self.rcd_upositive.get_text()) + list_options["rcd_unegative"] = self.uc.usr2sys_str('height', self.rcd_unegative.get_text()) list_options["rcd_maxbeats"] = self.rcd_maxbeats.get_text() - list_options["rcd_pace"] = self.rcd_pace.get_text() - list_options["rcd_maxpace"] = self.rcd_maxpace.get_text() - list_options["rcd_maxvel"] = self.uc.usr2sys_str('speed',self.rcd_maxvel.get_text()) + list_options["rcd_pace"] = self.uc.usr2sys_str('pace', self.rcd_pace.get_text()) + list_options["rcd_maxpace"] = self.uc.usr2sys_str('pace', self.rcd_maxpace.get_text()) + list_options["rcd_maxvel"] = self.uc.usr2sys_str('speed', self.rcd_maxvel.get_text()) list_options["rcd_time"] = [self.rcd_hour.get_value_as_int(),self.rcd_min.get_value_as_int(),self.rcd_second.get_value_as_int()] buffer = self.rcd_comments.get_buffer() start,end = buffer.get_bounds() Modified: pytrainer/trunk/pytrainer/lib/uc.py =================================================================== --- pytrainer/trunk/pytrainer/lib/uc.py 2010-11-24 07:45:09 UTC (rev 738) +++ pytrainer/trunk/pytrainer/lib/uc.py 2010-11-24 14:20:10 UTC (rev 739) @@ -25,6 +25,31 @@ uc_factors = {'distance' : 0.621371192, 'speed': 0.621371192, 'pace':1.609344, 'height': 3.2808399, 'weight': 2.204624} +def pace2float(pace_str): + if pace_str.count(':') != 1: + return 0.0 + else: + _prts = pace_str.split(':') + try: + _p_min = int(_prts[0]) + _p_sec = int(_prts[1]) + return float( _p_min + (_p_sec/60.0)) + except: + return 0.0 + +def float2pace(pace_flt): + try: + _pace = float(pace_flt) + except: + return "" + _p_int = int(_pace) + _p_frc = round((_pace - _p_int) * 60.0) + if _p_frc == 60: + _p_int += 1 + _p_frc = 0 + _pace_str = "%d:%02d" % (_p_int, _p_frc) + return _pace_str + class UC(Singleton): """ When instantiated first time us is assigned to False. @@ -80,15 +105,24 @@ return _val def usr2sys_str(self, quantity, val_str): - """ Similar to usr2sys but I/O is string representing a float""" + """ Similar to usr2sys but I/O is string representing a float. + Necessary until we have proper input validation in windowrecord. + Escpecially pace fix here should be eliminated asap. + """ if not self.us: return val_str + + if quantity == 'pace': + _pace_dec = pace2float(val_str) + _pace_uc = self.usr2sys('pace', _pace_dec) + return float2pace(_pace_uc) else: try: _val = float(val_str) except (ValueError, TypeError): return "" return str( self.usr2sys(quantity, _val)) + """ Aliases for sys2usr """ def distance(self, value): Modified: pytrainer/trunk/pytrainer/main.py =================================================================== --- pytrainer/trunk/pytrainer/main.py 2010-11-24 07:45:09 UTC (rev 738) +++ pytrainer/trunk/pytrainer/main.py 2010-11-24 14:20:10 UTC (rev 739) @@ -53,7 +53,7 @@ class pyTrainer: def __init__(self,filename = None, data_path = None): #Version constants - self.version ="1.7.2_svn#738" + self.version ="1.7.2_svn#739" 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. |
From: <aza...@us...> - 2010-11-24 07:45:15
|
Revision: 738 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=738&view=rev Author: azapletal Date: 2010-11-24 07:45:09 +0000 (Wed, 24 Nov 2010) Log Message: ----------- Re-introduced uc usage in windowrecord. Modified Paths: -------------- pytrainer/trunk/pytrainer/gui/windowrecord.py pytrainer/trunk/pytrainer/lib/uc.py pytrainer/trunk/pytrainer/main.py Modified: pytrainer/trunk/pytrainer/gui/windowrecord.py =================================================================== --- pytrainer/trunk/pytrainer/gui/windowrecord.py 2010-11-24 02:57:23 UTC (rev 737) +++ pytrainer/trunk/pytrainer/gui/windowrecord.py 2010-11-24 07:45:09 UTC (rev 738) @@ -257,18 +257,18 @@ trackSummary = {} list_options["rcd_date"] = self.rcd_date.get_text() list_options["rcd_sport"] = self.rcd_sport.get_active_text() - list_options["rcd_distance"] = self.rcd_distance.get_text() + list_options["rcd_distance"] = self.uc.usr2sys_str('distance', self.rcd_distance.get_text()) list_options["rcd_beats"] = self.rcd_beats.get_text() - list_options["rcd_average"] = self.rcd_average.get_text() + list_options["rcd_average"] = self.uc.usr2sys_str('speed',self.rcd_average.get_text()) list_options["rcd_calories"] = self.rcd_calories.get_text() list_options["rcd_title"] = self.rcd_title.get_text().replace("\"","'") list_options["rcd_gpxfile"] = self.rcd_gpxfile.get_text() - list_options["rcd_upositive"] = self.rcd_upositive.get_text() - list_options["rcd_unegative"] = self.rcd_unegative.get_text() + list_options["rcd_upositive"] = self.uc.usr2sys_str('height',self.rcd_upositive.get_text()) + list_options["rcd_unegative"] = self.uc.usr2sys_str('height',self.rcd_unegative.get_text()) list_options["rcd_maxbeats"] = self.rcd_maxbeats.get_text() list_options["rcd_pace"] = self.rcd_pace.get_text() list_options["rcd_maxpace"] = self.rcd_maxpace.get_text() - list_options["rcd_maxvel"] = self.rcd_maxvel.get_text() + list_options["rcd_maxvel"] = self.uc.usr2sys_str('speed',self.rcd_maxvel.get_text()) list_options["rcd_time"] = [self.rcd_hour.get_value_as_int(),self.rcd_min.get_value_as_int(),self.rcd_second.get_value_as_int()] buffer = self.rcd_comments.get_buffer() start,end = buffer.get_bounds() Modified: pytrainer/trunk/pytrainer/lib/uc.py =================================================================== --- pytrainer/trunk/pytrainer/lib/uc.py 2010-11-24 02:57:23 UTC (rev 737) +++ pytrainer/trunk/pytrainer/lib/uc.py 2010-11-24 07:45:09 UTC (rev 738) @@ -79,6 +79,17 @@ else: return _val + def usr2sys_str(self, quantity, val_str): + """ Similar to usr2sys but I/O is string representing a float""" + if not self.us: + return val_str + else: + try: + _val = float(val_str) + except (ValueError, TypeError): + return "" + return str( self.usr2sys(quantity, _val)) + """ Aliases for sys2usr """ def distance(self, value): return self.sys2usr('distance', value) Modified: pytrainer/trunk/pytrainer/main.py =================================================================== --- pytrainer/trunk/pytrainer/main.py 2010-11-24 02:57:23 UTC (rev 737) +++ pytrainer/trunk/pytrainer/main.py 2010-11-24 07:45:09 UTC (rev 738) @@ -53,7 +53,7 @@ class pyTrainer: def __init__(self,filename = None, data_path = None): #Version constants - self.version ="1.7.2_svn#737" + self.version ="1.7.2_svn#738" 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. |
From: <jb...@us...> - 2010-11-24 02:57:31
|
Revision: 737 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=737&view=rev Author: jblance Date: 2010-11-24 02:57:23 +0000 (Wed, 24 Nov 2010) Log Message: ----------- French localizations from Pierre Modified Paths: -------------- pytrainer/trunk/locale/fr/LC_MESSAGES/pytrainer.mo pytrainer/trunk/locale/fr/LC_MESSAGES/pytrainer_fr.po pytrainer/trunk/pytrainer/main.py Modified: pytrainer/trunk/locale/fr/LC_MESSAGES/pytrainer.mo =================================================================== (Binary files differ) Modified: pytrainer/trunk/locale/fr/LC_MESSAGES/pytrainer_fr.po =================================================================== --- pytrainer/trunk/locale/fr/LC_MESSAGES/pytrainer_fr.po 2010-11-24 02:51:29 UTC (rev 736) +++ pytrainer/trunk/locale/fr/LC_MESSAGES/pytrainer_fr.po 2010-11-24 02:57:23 UTC (rev 737) @@ -9,10 +9,11 @@ msgstr "" "Project-Id-Version: pytrainer_fr\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-12 08:56+0200\n" -"PO-Revision-Date: 2010-04-12 08:57+0100\n" +"POT-Creation-Date: 2010-11-23 21:42+0100\n" +"PO-Revision-Date: 2010-11-23 21:43+0100\n" "Last-Translator: Pierre Gaigé <pg...@fr...>\n" "Language-Team: <fr...@li...>\n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -25,8 +26,54 @@ msgid "Calendar" msgstr "Calendrier" +#: glade/equipment.glade:109 +msgid "<b>Equipment List</b>" +msgstr "<b>Liste d'équipements</b>" + +#: glade/equipment.glade:149 +#: glade/equipment.glade:406 +msgid "Description" +msgstr "Description" + +#: glade/equipment.glade:174 +#: glade/equipment.glade:431 +msgid "Life Expectancy" +msgstr "Durée de vie" + +#: glade/equipment.glade:211 +#: glade/equipment.glade:467 +msgid "Prior Usage" +msgstr "Utilisation précédente" + +#: glade/equipment.glade:243 +#: glade/equipment.glade:499 +msgid "Active" +msgstr "Actif" + +#: glade/equipment.glade:277 +#: glade/equipment.glade:533 +#: pytrainer/gui/windowimportdata.py:352 +msgid "Notes" +msgstr "Notes" + +#: glade/equipment.glade:366 +msgid "<b>Add New Equipment</b>" +msgstr "<b>Ajouter un équipement</b>" + +#: glade/equipment.glade:622 +msgid "<b>Edit Equipment</b>" +msgstr "<b>Éditer un équipement</b>" + +#: glade/equipment.glade:651 +msgid "Really delete the equipment item?" +msgstr "Voulez vous vraiment détruire cet équipement?" + +#: glade/equipment.glade:704 +msgid "<b>Delete Equipment</b>" +msgstr "<b>Supprimer un équipement</b>" + #: glade/extensions.glade:9 -#: glade/pytrainer.glade:162 +#: glade/pytrainer.glade:163 msgid "Extensions" msgstr "Extensions" @@ -40,7 +87,8 @@ #: glade/extensions.glade:82 #: glade/plugins.glade:144 -#: glade/profile.glade:744 +#: glade/profile.glade:727 +#: glade/pytrainer.glade:5161 msgid "Name:" msgstr "Nom:" @@ -51,7 +99,7 @@ #: glade/extensions.glade:110 #: glade/plugins.glade:86 -#: glade/pytrainer.glade:4728 +#: glade/pytrainer.glade:5690 msgid "Description:" msgstr "Description:" @@ -66,110 +114,288 @@ msgstr "Description:" #: glade/importdata.glade:7 -#: glade/importdata.glade:329 +#: glade/importdata.glade:325 msgid "Import" msgstr "Importer" -#: glade/importdata.glade:37 +#: glade/importdata.glade:36 msgid "" "Test 1\n" "Test 2" msgstr "" -#: glade/importdata.glade:47 +#: glade/importdata.glade:46 msgid "<b>Select your GPS device</b>" msgstr "<b>Sélectionnez votre périphérique GPS</b>" -#: glade/importdata.glade:65 +#: glade/importdata.glade:64 msgid "Import from GPS Device is not yet implemented" -msgstr "Import à partir du périphérique GPS pas encore implémenté" +msgstr "L'importation à partir du périphérique GPS n'est pas encore implémenté" -#: glade/importdata.glade:94 +#: glade/importdata.glade:92 msgid "<b>Tools</b>" msgstr "<b>Outils:</b>" -#: glade/importdata.glade:113 +#: glade/importdata.glade:111 msgid "Rescan" msgstr "Re-scan" -#: glade/importdata.glade:117 +#: glade/importdata.glade:115 msgid "Rescan system for available tools" msgstr "Re-scan le système pour trouver les outils disponibles" -#: glade/importdata.glade:170 +#: glade/importdata.glade:168 msgid "<b>Import from GPS Device</b>" msgstr "<b>Importer à partir du périphérique GPS</b>" -#: glade/importdata.glade:225 +#: glade/importdata.glade:221 msgid "Remove selected files and the associated activities" msgstr "Supprimer les fichiers et les activités associées" -#: glade/importdata.glade:243 +#: glade/importdata.glade:239 msgid "Add files to import activities from" msgstr "Ajouter des fichiers pour récupérer les activités" -#: glade/importdata.glade:268 +#: glade/importdata.glade:264 msgid "<b>Add file(s) to import activities from</b>" msgstr "<b>Ajouter des fichiers pour récupérer les activités</b>" -#: glade/importdata.glade:311 +#: glade/importdata.glade:307 msgid "<b>Select activities to import</b>" -msgstr "<b>Sélectionnez une activité à importer</b>" +msgstr "<b>Sélectionnez les activités à importer</b>" -#: glade/importdata.glade:334 +#: glade/importdata.glade:330 msgid "Import selected activities" -msgstr "Importer les activités selectionnées" +msgstr "Importer les activités sélectionnées" -#: glade/importdata.glade:351 +#: glade/importdata.glade:347 msgid "Close Import dialog" -msgstr "Fermer la fenêtre d'import" +msgstr "Fermer la fenêtre d'importation" -#: glade/importdata.glade:391 +#: glade/importdata.glade:387 msgid "<b>Import from File</b>" msgstr "<b>Importer à partir d'un fichier</b>" -#: glade/importdata.glade:470 +#: glade/importdata.glade:464 msgid "<b>Plugins</b>" msgstr "<b>Plugins</b>" -#: glade/importdata.glade:499 +#: glade/importdata.glade:491 msgid "Import from GPS Device" msgstr "Importer à partir du périphérique GPS" -#: glade/importdata.glade:518 +#: glade/importdata.glade:510 msgid "Import from File" msgstr "Importer à partir d'un fichier" -#: glade/importdata.glade:533 +#: glade/importdata.glade:525 msgid "Launch 'File Select' on start" msgstr "Lancer 'Fichier ouvrir' au démarrage" -#: glade/importdata.glade:538 +#: glade/importdata.glade:530 msgid "Automatically start the file selection dialog" msgstr "Démarre automatiquement le sélecteur de fichiers" -#: glade/importdata.glade:554 +#: glade/importdata.glade:546 #: glade/plugins.glade:9 msgid "Plugins" msgstr "Plugins" -#: glade/importdata.glade:580 +#: glade/importdata.glade:572 msgid "<b>Default to Tab</b>" msgstr "<b>Onglet par défaut</b>" -#: glade/importdata.glade:603 +#: glade/importdata.glade:595 msgid "Reset" msgstr "Réinitialiser" -#: glade/importdata.glade:619 +#: glade/importdata.glade:611 msgid "Save" msgstr "Sauvegarder" -#: glade/importdata.glade:678 +#: glade/importdata.glade:670 msgid "<b>Options</b>" msgstr "<b>Options</b>" +#: glade/importdata.glade:702 +msgid "<b>Select file to import from</b>" +msgstr "<b>Sélectionnez un fichier à partir duquel importer</b>" + +#: glade/importdata.glade:731 +msgid "Tab" +msgstr "Tabulation" + +#: glade/importdata.glade:746 +msgid "Comma" +msgstr "Virgule" + +#: glade/importdata.glade:763 +msgid "Other" +msgstr "Autre" + +#: glade/importdata.glade:799 +msgid "Read File" +msgstr "Lire le fichier" + +#: glade/importdata.glade:820 +msgid "<b>File delimiter</b>" +msgstr "<b>Délimiteur de champs</b>" + +#: glade/importdata.glade:864 +#: pytrainer/gui/windowmain.py:109 +#: pytrainer/gui/windowmain.py:124 +#: pytrainer/gui/windowmain.py:1132 +#: pytrainer/gui/dialogselecttrack.py:40 +msgid "Date" +msgstr "Date" + +#: glade/importdata.glade:877 +#: glade/importdata.glade:918 +#: glade/importdata.glade:933 +#: glade/importdata.glade:1128 +#: glade/importdata.glade:1143 +#: glade/importdata.glade:1158 +#: glade/importdata.glade:1173 +#: glade/importdata.glade:1188 +#: glade/importdata.glade:1203 +#: glade/importdata.glade:1218 +#: glade/importdata.glade:1233 +#: glade/importdata.glade:1248 +#: glade/importdata.glade:1263 +#: glade/importdata.glade:1278 +#: glade/importdata.glade:1293 +msgid "Exclude" +msgstr "Exclure" + +#: glade/importdata.glade:892 +#: pytrainer/monthgraph.py:70 +#: pytrainer/heartrategraph.py:36 +#: pytrainer/recordgraph.py:134 +#: pytrainer/recordgraph.py:136 +#: pytrainer/recordgraph.py:138 +#: pytrainer/recordgraph.py:140 +#: pytrainer/recordgraph.py:142 +#: pytrainer/recordgraph.py:144 +#: pytrainer/recordgraph.py:146 +#: pytrainer/weekgraph.py:115 +#: pytrainer/yeargraph.py:70 +#: pytrainer/daygraph.py:52 +#: pytrainer/daygraph.py:54 +#: pytrainer/daygraph.py:56 +msgid "Distance (km)" +msgstr "Distance (km) " + +#: glade/importdata.glade:905 +msgid "Duration (sec)" +msgstr "Durée (s)" + +#: glade/importdata.glade:947 +msgid "<b>PyTrainer Field</b>" +msgstr "<b>Champs pytrainer</b>" + +#: glade/importdata.glade:958 +msgid "<b>File Column</b>" +msgstr "<b>Colonne du fichier</b>" + +#: glade/importdata.glade:972 +#: pytrainer/gui/windowmain.py:108 +#: pytrainer/gui/windowmain.py:1131 +msgid "Title" +msgstr "Titre" + +#: glade/importdata.glade:985 +msgid "Descent (m)" +msgstr "Dénivelé Négatif (m)" + +#: glade/importdata.glade:998 +msgid "Accent (m)" +msgstr "Dénivelé Positif (m)" + +#: glade/importdata.glade:1011 +msgid "Calories (kcal)" +msgstr "Calories (kcal)" + +#: glade/importdata.glade:1024 +msgid "Max Speed (km/h)" +msgstr "Vitesse Max (km/h)" + +#: glade/importdata.glade:1037 +#: pytrainer/monthgraph.py:76 +#: pytrainer/weekgraph.py:121 +#: pytrainer/yeargraph.py:76 +msgid "Average Speed (km/h)" +msgstr "Vitesse moyenne (km/h)" + +#: glade/importdata.glade:1050 +#: glade/pytrainer.glade:277 +#: pytrainer/gui/windowmain.py:103 +#: pytrainer/gui/windowmain.py:111 +#: pytrainer/gui/windowmain.py:1134 +#: pytrainer/gui/windowimportdata.py:352 +#: pytrainer/gui/windowprofile.py:59 +#: pytrainer/gui/windowrecord.py:210 +msgid "Sport" +msgstr "Sport" + +#: glade/importdata.glade:1063 +msgid "Average Heartrate (bpm)" +msgstr "FC moyenne (bpm)" + +#: glade/importdata.glade:1076 +msgid "Max Heartrate (bpm)" +msgstr "FC Max (bpm)" + +#: glade/importdata.glade:1089 +#: pytrainer/recordgraph.py:138 +msgid "Pace (min/km)" +msgstr "Cadence (min/km)" + +#: glade/importdata.glade:1102 +msgid "Max Pace (min/km)" +msgstr "Cadence Max (min/km)" + +#: glade/importdata.glade:1115 +#: glade/newrecord.glade:1095 +msgid "Comments" +msgstr "Commentaires" + +#: glade/importdata.glade:1309 +msgid "Force sport to:" +msgstr "Forcer le sport à:" + +#: glade/importdata.glade:1323 +#: glade/newrecord.glade:406 +msgid " " +msgstr " " + +#: glade/importdata.glade:1394 +msgid "<b>Map Columns</b>" +msgstr "<b>Associer les colonnes</b>" + +#: glade/importdata.glade:1414 +msgid "" +"<small>This is an experiemental import for delimited files\n" +"1) Select a file\n" +"2) Click 'Read File' to analyse the file\n" +"3) Map columns in the file to pytrainer data elements (Date is required)\n" +"4) Click 'Import Data'</small>" +msgstr "" +"<small>Ceci est un essai pour l'importation de fichiers CSV\n" +"1) Sélectionnez un fichier\n" +"2) Cliquez sur 'Lire le fichier' pour l'analyser\n" +"3) Associez les colonnes du fichier aux données de Pytrainer (La date est nécessaire)\n" +"4) Cliquez sur 'Importer les données'</small>" + +#: glade/importdata.glade:1427 +msgid "Import Data" +msgstr "Importer les données" + +#: glade/importdata.glade:1467 +msgid "<b>Import from CSV</b>" +msgstr "<b>Importer à partir d'un fichier CSV</b>" + #: glade/newrecord.glade:7 +#: pytrainer/gui/windowmain.py:1744 msgid "New Entry" msgstr "Nouvelle entrée" @@ -202,7 +428,7 @@ #: glade/newrecord.glade:560 #: glade/newrecord.glade:698 #: glade/newrecord.glade:959 -#: glade/profile.glade:1404 +#: glade/profile.glade:1462 msgid "Calculate" msgstr "Calculer" @@ -212,16 +438,6 @@ #: glade/newrecord.glade:281 #: glade/newrecord.glade:308 -#: glade/pytrainer.glade:833 -#: glade/pytrainer.glade:855 -#: glade/pytrainer.glade:2038 -#: glade/pytrainer.glade:2060 -#: glade/pytrainer.glade:2651 -#: glade/pytrainer.glade:2673 -#: glade/pytrainer.glade:3276 -#: glade/pytrainer.glade:3298 -#: glade/pytrainer.glade:3976 -#: glade/pytrainer.glade:3998 msgid ":" msgstr ":" @@ -229,12 +445,6 @@ msgid "Date:" msgstr "Date:" -#: glade/newrecord.glade:406 -#: glade/pytrainer.glade:2843 -#: glade/pytrainer.glade:3468 -msgid " " -msgstr " " - #: glade/newrecord.glade:447 msgid "Start Time:" msgstr "Début:" @@ -244,7 +454,7 @@ msgstr "" #: glade/newrecord.glade:488 -#: glade/profile.glade:1442 +#: glade/profile.glade:1500 msgid "<b>General</b>" msgstr "<b>Général:</b>" @@ -297,9 +507,10 @@ msgstr "Fréquence Cardiaque:" #: glade/newrecord.glade:903 -#: pytrainer/gui/windowmain.py:755 -#: pytrainer/monthgraph.py:77 +#: pytrainer/monthgraph.py:78 #: pytrainer/weekgraph.py:123 +#: pytrainer/gui/windowmain.py:115 +#: pytrainer/gui/windowmain.py:1138 #: pytrainer/yeargraph.py:78 msgid "Calories" msgstr "Calories" @@ -320,10 +531,19 @@ msgid "<b>Comments</b>" msgstr "<b>Commentaires</b>" -#: glade/newrecord.glade:1095 -msgid "Comments" -msgstr "Commentaires" +#: glade/newrecord.glade:1135 +msgid "<i>There are no active equipment items.</i>" +msgstr "<i>Il n'y a aucun article d'équipement actif.</i>" +#: glade/newrecord.glade:1189 +msgid "<b>Associated Equipment</b>" +msgstr "<b>Équipement associé</b>" + +#: glade/newrecord.glade:1204 +#: glade/profile.glade:1360 +msgid "Equipment" +msgstr "Équipement" + #: glade/plugins.glade:53 msgid "<b>Plugin Details</b>" msgstr "<b>Détail du plugin</b>" @@ -341,116 +561,126 @@ msgid "Preferences" msgstr "Préférences" -#: glade/profile.glade:43 +#: glade/profile.glade:37 msgid "Metric system" msgstr "Système Métrique" -#: glade/profile.glade:57 +#: glade/profile.glade:53 msgid "U.S. customary units" msgstr "Unités U.S." -#: glade/profile.glade:79 +#: glade/profile.glade:74 msgid "<b>System of Measurement</b>" msgstr "<b>Système de Mesure</b>" -#: glade/profile.glade:115 +#: glade/profile.glade:103 +#: glade/pytrainer.glade:2023 +msgid "Google" +msgstr "" + +#: glade/profile.glade:118 +#: glade/pytrainer.glade:2006 +msgid "Open Street Map" +msgstr "Open Street Map" + +#: glade/profile.glade:140 +msgid "<b>Default Map Viewer</b>" +msgstr "<b>Visualiseur de cartes par défaut</b>" + +#: glade/profile.glade:176 msgid "Database type:" msgstr "Type de Base de Données:" -#: glade/profile.glade:126 +#: glade/profile.glade:187 msgid "Database host:" msgstr "Hôte de la Base de Données:" -#: glade/profile.glade:152 +#: glade/profile.glade:213 msgid "Database name:" msgstr "Nom de la Base de Données:" -#: glade/profile.glade:191 +#: glade/profile.glade:252 msgid "Database user:" msgstr "Utilisateur de la Base de Données:" -#: glade/profile.glade:206 +#: glade/profile.glade:267 msgid "Database pass:" msgstr "Mot de passe de la Base de Données:" -#: glade/profile.glade:257 +#: glade/profile.glade:318 msgid "<b>Database</b>" msgstr "<b>Base de données</b>" -#: glade/profile.glade:293 -msgid "Use this port for internal connections: " -msgstr "Utiliser ce port pour les connexions internes:" - -#: glade/profile.glade:318 -msgid "<small><b>Note:</b> Change this only if you know what you are doing</small>" -msgstr "<small><b>Note:</b> Changez cette valeur uniquement si vous savez ce que vous faites</small>" - -#: glade/profile.glade:336 -msgid "<b>Port Connnection</b>" -msgstr "<b>Port de Connexion:</b>" - -#: glade/profile.glade:355 +#: glade/profile.glade:340 msgid "General" msgstr "Général" -#: glade/profile.glade:384 +#: glade/profile.glade:369 msgid "User name:" msgstr "Nom d'Utilisateur:" -#: glade/profile.glade:395 +#: glade/profile.glade:380 msgid "Gender:" msgstr "Sexe:" -#: glade/profile.glade:422 +#: glade/profile.glade:407 +#: glade/pytrainer.glade:5186 msgid "Height:" msgstr "Taille:" -#: glade/profile.glade:462 +#: glade/profile.glade:447 +#: glade/pytrainer.glade:5173 msgid "Date of birth:" msgstr "Date de Naissance:" -#: glade/profile.glade:535 +#: glade/profile.glade:520 msgid "Weight:" msgstr "Poids:" -#: glade/profile.glade:557 +#: glade/profile.glade:542 +#: glade/pytrainer.glade:5248 msgid "<b>Athlete Details</b>" msgstr "<b>Détail de l'Athlète</b>" -#: glade/profile.glade:572 +#: glade/profile.glade:557 +#: glade/pytrainer.glade:5351 msgid "Athlete" msgstr "Athlète" -#: glade/profile.glade:687 +#: glade/profile.glade:671 msgid "<b>Sport List</b>" msgstr "<b>Liste des Sports</b>" -#: glade/profile.glade:699 +#: glade/profile.glade:683 msgid "llist" msgstr "" -#: glade/profile.glade:755 +#: glade/profile.glade:738 msgid "M.E.T.:" msgstr "M.E.T.:" -#: glade/profile.glade:782 +#: glade/profile.glade:765 msgid "Extra Weight:" msgstr "Poids Additionnel:" -#: glade/profile.glade:818 -#: glade/profile.glade:1171 +#: glade/profile.glade:801 +#: glade/profile.glade:1181 msgid "More information on determining yor M.E.T sport coefficient on Wikipedia" msgstr "Plus d'information pour déterminer le coefficient M.E.T du sport sur Wikipedia" -#: glade/profile.glade:900 +#: glade/profile.glade:821 +msgid "Maximum Pace:" +msgstr "Cadence Max:" + +#: glade/profile.glade:913 msgid "<b>Add New Sport</b>" msgstr "<b>Ajouter un Sport</b>" -#: glade/profile.glade:915 +#: glade/profile.glade:928 msgid "new" msgstr "nouveau" -#: glade/profile.glade:948 +#: glade/profile.glade:959 msgid "" "Deleting a sport removes associated records.\n" "Continue?" @@ -458,94 +688,96 @@ "Détruire un sport supprime les enregistrements associés.\n" "Continuer?" -#: glade/profile.glade:1030 +#: glade/profile.glade:1041 msgid "<b>Delete Sport</b>" msgstr "<b>Supprimer un Sport</b>" -#: glade/profile.glade:1041 -#: glade/pytrainer.glade:1884 -#: glade/pytrainer.glade:4857 -msgid "label-2147483648" -msgstr "label-2147483648" - -#: glade/profile.glade:1062 +#: glade/profile.glade:1073 msgid "delete" msgstr "supprimer" -#: glade/profile.glade:1096 +#: glade/profile.glade:1106 msgid "Name" msgstr "Nom" -#: glade/profile.glade:1119 +#: glade/profile.glade:1129 msgid "M.E.T." msgstr "M.E.T." -#: glade/profile.glade:1146 -#: pytrainer/gui/windowprofile.py:71 +#: glade/profile.glade:1156 +#: pytrainer/gui/windowprofile.py:59 msgid "Extra Weight" msgstr "Poids Additionnel" -#: glade/profile.glade:1252 +#: glade/profile.glade:1201 +msgid "Maxiumum Pace" +msgstr "Cadence Max" + +#: glade/profile.glade:1289 msgid "<b>Edit Sport</b>" msgstr "<b>Éditer un sport</b>" -#: glade/profile.glade:1263 +#: glade/profile.glade:1300 msgid "<b>lalaal</b>" msgstr "<b>Base de données</b>" -#: glade/profile.glade:1285 +#: glade/profile.glade:1322 msgid "edit" msgstr "édition" -#: glade/profile.glade:1301 +#: glade/profile.glade:1338 msgid "Sports" msgstr "Sports" -#: glade/profile.glade:1335 +#: glade/profile.glade:1393 msgid "Maximum heart rate:" msgstr "Fréquence Cardiaque Maximale:" -#: glade/profile.glade:1346 +#: glade/profile.glade:1404 msgid "Resting heart rate:" msgstr "Fréquence Cardiaque au Repos:" -#: glade/profile.glade:1391 +#: glade/profile.glade:1449 msgid "<small><b>Note:</b> Maximum heart rate is calculated by subtracting the number 220 minus your age. </small>" msgstr "<small><b>Note:</b> Le calcul de votre fréquence cardiaque maximale est effectué grâce à la formule 220 moins votre âge. </small>" -#: glade/profile.glade:1478 +#: glade/profile.glade:1536 msgid "<small><b>NOTE:</b> in order to use the Karvonen method you must cover the Resting hr field.</small>" msgstr "<small><b>Note:</b> Afin d'utiliser la méthode de Karvonen vous devez obligatoirement renseigner le champ «Fréquence Cardiaque au Repos».</small>" -#: glade/profile.glade:1491 +#: glade/profile.glade:1549 msgid "Percentages based method" msgstr "Méthode basée sur des pourcentages" -#: glade/profile.glade:1507 -#: pytrainer/gui/windowmain.py:308 +#: glade/profile.glade:1565 +#: pytrainer/gui/windowmain.py:599 msgid "Karvonen method" msgstr "Méthode de Karvonen" -#: glade/profile.glade:1528 +#: glade/profile.glade:1586 msgid "Select how to calculate your heart rate zones." msgstr "Sélectionnez la méthode appropriée pour définir les zones cardiaque." -#: glade/profile.glade:1567 +#: glade/profile.glade:1625 msgid "<b>Heart Rate Zones</b>" msgstr "<b>Zones Cardiaque:</b>" -#: glade/profile.glade:1589 +#: glade/profile.glade:1647 +#: pytrainer/heartrategraph.py:36 +#: pytrainer/recordgraph.py:140 #: pytrainer/daygraph.py:56 -#: pytrainer/recordgraph.py:120 -#: pytrainer/heartrategraph.py:38 +#: pytrainer/lib/activity.py:430 +#: pytrainer/lib/activity.py:432 +#: pytrainer/lib/activity.py:442 +#: pytrainer/lib/activity.py:512 msgid "Heart Rate" msgstr "Fréquence Cardiaque" -#: glade/profile.glade:1616 +#: glade/profile.glade:1673 msgid "Log Level" msgstr "Niveau de Log" -#: glade/profile.glade:1624 +#: glade/profile.glade:1681 msgid "" "Error\n" "Warning\n" @@ -557,300 +789,235 @@ "Info\n" "Debug" -#: glade/profile.glade:1642 +#: glade/profile.glade:1699 msgid "<small>What level of detail is written to the log?</small>" msgstr "<small>Niveau de détail du fichier log?</small>" -#: glade/profile.glade:1656 +#: glade/profile.glade:1713 msgid "Validate" msgstr "Valider" -#: glade/profile.glade:1665 -msgid "--valid" -msgstr "" - -#: glade/profile.glade:1686 +#: glade/profile.glade:1743 msgid "<small>Do the plugins attempt to validate the input file before processing?</small>" msgstr "<small>Le plugin doit-il essayer de valider le fichier d'entrée avant d'effectuer le traitement?</small>" -#: glade/profile.glade:1702 +#: glade/profile.glade:1759 msgid "Check" msgstr "Vérifier" -#: glade/profile.glade:1711 -msgid "--check" -msgstr "" - -#: glade/profile.glade:1731 +#: glade/profile.glade:1788 msgid "<small>Was a configuration and database check requested?</small>" msgstr "<small>La vérification de la configuration et de la base de données est-elle activée?</small>" -#: glade/profile.glade:1747 -msgid "Googlemaps v3" -msgstr "" - -#: glade/profile.glade:1757 -msgid "--gmaps2*" -msgstr "" - -#: glade/profile.glade:1779 -msgid "<small>Is the Googlemaps API version 3 in use?</small>" -msgstr "<small>Googlemaps utilise t-il l'API version 3?</small>" - -#: glade/profile.glade:1795 -msgid "Unified Import" -msgstr "Import unifié" - #: glade/profile.glade:1804 -msgid "--testimport" -msgstr "" +msgid "New Graph" +msgstr "Nouveau Graphe" -#: glade/profile.glade:1825 -msgid "<small>Is the Unified Importer active?</small>" -msgstr "<small>L'import unifié est-il activé?</small>" +#: glade/profile.glade:1833 +msgid "<small>Want to use experimental new approach to graphing?</small>" +msgstr "<small>Voulez vous expérimenter un nouveau mode pour les graphes?</small>" -#: glade/profile.glade:1850 +#: glade/profile.glade:1876 msgid "<small>This screen shows the state of command line configurable options for pytrainer. These options can be changed here which will affect the current instance of pytrainer, they will not be remembered next time though</small>" msgstr "<small>Cet écran montre l'état des options configurables de la ligne de commande de pytrainer. Ces options peuvent être changées ici pour la session en cours, elles ne seront toutefois pas conservées au prochain démarrage.</small>" -#: glade/profile.glade:1866 -msgid "<small>* Note Googlemaps API version 3 is on by default, use --gmaps2 to switch it off</small>" -msgstr "<small>* Notez que l'API version 3 de Googlemaps est activée par défaut, utilisez --gmaps2 pour la déactiver</small>" - -#: glade/profile.glade:1882 +#: glade/profile.glade:1897 msgid "Startup Parameters" msgstr "Paramètres de démarrage" -#: glade/pytrainer.glade:7 -msgid "window1" -msgstr "fenêtre1" - #: glade/pytrainer.glade:24 msgid "_File" msgstr "_Fichier" -#: glade/pytrainer.glade:93 +#: glade/pytrainer.glade:39 +#, fuzzy +msgid "_Import" +msgstr "Importer" + +#: glade/pytrainer.glade:60 +msgid "_Export as Text Separated by Commas" +msgstr "_Exporter un Fichier Texte séparé par des virgules" + +#: glade/pytrainer.glade:94 msgid "_Edit" msgstr "_Édition" -#: glade/pytrainer.glade:113 +#: glade/pytrainer.glade:114 msgid "_View" msgstr "_Vue" -#: glade/pytrainer.glade:120 +#: glade/pytrainer.glade:121 msgid " _Classic View" msgstr "_Vue classique" -#: glade/pytrainer.glade:130 +#: glade/pytrainer.glade:131 msgid " _List View" msgstr "_Vue en liste" -#: glade/pytrainer.glade:140 +#: glade/pytrainer.glade:141 msgid " _Waypoints Editor" msgstr "_Vue d'édition des Points de Localisation" -#: glade/pytrainer.glade:154 +#: glade/pytrainer.glade:155 msgid "Tools" msgstr "Outils" -#: glade/pytrainer.glade:171 +#: glade/pytrainer.glade:172 msgid "GPS Device Plugins" msgstr "Plugins pour les Périphériques GPS" -#: glade/pytrainer.glade:184 +#: glade/pytrainer.glade:185 msgid "_Help" msgstr "_Aide" -#: glade/pytrainer.glade:276 -#: pytrainer/gui/windowprofile.py:71 -#: pytrainer/gui/windowmain.py:65 -#: pytrainer/gui/windowmain.py:68 -#: pytrainer/gui/windowmain.py:751 -#: pytrainer/gui/windowrecord.py:147 -#: pytrainer/gui/windowimportdata.py:333 -msgid "Sport" -msgstr "Sport" - -#: glade/pytrainer.glade:288 +#: glade/pytrainer.glade:290 +#: glade/pytrainer.glade:5467 msgid "All Sports" msgstr "Tous les Sports" -#: glade/pytrainer.glade:395 +#: glade/pytrainer.glade:396 msgid "<b>Sport:</b>" msgstr "<b>Sport:</b>" -#: glade/pytrainer.glade:407 -#: glade/pytrainer.glade:2013 -#: glade/pytrainer.glade:2626 -#: glade/pytrainer.glade:3251 -#: glade/pytrainer.glade:3952 +#: glade/pytrainer.glade:408 +#: glade/pytrainer.glade:2726 +#: glade/pytrainer.glade:3337 +#: glade/pytrainer.glade:3960 +#: glade/pytrainer.glade:4659 msgid "<b>Duration:</b>" msgstr "<b>Durée:</b>" -#: glade/pytrainer.glade:422 -#: glade/pytrainer.glade:2103 -#: glade/pytrainer.glade:2705 -#: glade/pytrainer.glade:3330 -#: glade/pytrainer.glade:4054 +#: glade/pytrainer.glade:423 +#: glade/pytrainer.glade:2816 +#: glade/pytrainer.glade:3416 +#: glade/pytrainer.glade:4039 +#: glade/pytrainer.glade:4761 msgid "<b>Speed:</b>" msgstr "<b>Vitesse:</b>" -#: glade/pytrainer.glade:436 -#: glade/pytrainer.glade:2271 -#: glade/pytrainer.glade:2900 -#: glade/pytrainer.glade:3525 -#: glade/pytrainer.glade:4149 +#: glade/pytrainer.glade:437 +#: glade/pytrainer.glade:2984 +#: glade/pytrainer.glade:3611 +#: glade/pytrainer.glade:4234 +#: glade/pytrainer.glade:4856 msgid "<b>Pace:</b>" msgstr "<b>Cadence:</b>" -#: glade/pytrainer.glade:450 +#: glade/pytrainer.glade:451 msgid "<b>Ascent:</b>" msgstr "<b>Dénivelé Pos.:</b>" -#: glade/pytrainer.glade:464 +#: glade/pytrainer.glade:465 msgid "<b>Calories:</b>" msgstr "<b>Calories:</b>" -#: glade/pytrainer.glade:478 +#: glade/pytrainer.glade:479 msgid "<b>Comments:</b>" msgstr "<b>Commentaires:</b>" -#: glade/pytrainer.glade:493 -#: glade/pytrainer.glade:890 -#: glade/pytrainer.glade:2133 -#: glade/pytrainer.glade:2166 -#: glade/pytrainer.glade:2735 -#: glade/pytrainer.glade:2828 -#: glade/pytrainer.glade:3360 -#: glade/pytrainer.glade:3453 -#: glade/pytrainer.glade:4084 -#: glade/pytrainer.glade:4100 -#: pytrainer/gui/windowmain.py:192 -#: pytrainer/gui/windowmain.py:193 -#: pytrainer/gui/windowmain.py:328 -#: pytrainer/gui/windowmain.py:329 -#: pytrainer/gui/windowmain.py:432 -#: pytrainer/gui/windowmain.py:433 -#: pytrainer/gui/windowmain.py:510 -#: pytrainer/gui/windowmain.py:511 -msgid "km/h" -msgstr "km/h" - -#: glade/pytrainer.glade:509 -#: glade/pytrainer.glade:721 -#: glade/pytrainer.glade:2286 -#: glade/pytrainer.glade:2318 -#: glade/pytrainer.glade:2931 -#: glade/pytrainer.glade:2947 -#: glade/pytrainer.glade:3556 -#: glade/pytrainer.glade:3572 -#: glade/pytrainer.glade:4181 -#: glade/pytrainer.glade:4197 -#: pytrainer/gui/windowmain.py:194 -#: pytrainer/gui/windowmain.py:195 -#: pytrainer/gui/windowmain.py:330 -#: pytrainer/gui/windowmain.py:331 -#: pytrainer/gui/windowmain.py:434 -#: pytrainer/gui/windowmain.py:435 -#: pytrainer/gui/windowmain.py:512 -#: pytrainer/gui/windowmain.py:513 -msgid "min/km" -msgstr "min/km" - -#: glade/pytrainer.glade:525 -#: glade/pytrainer.glade:752 -#: pytrainer/gui/windowmain.py:196 -#: pytrainer/gui/windowmain.py:197 -#: pytrainer/gui/windowmain.py:1047 -#: pytrainer/gui/windowmain.py:1049 -msgid "m" -msgstr "m" - -#: glade/pytrainer.glade:613 +#: glade/pytrainer.glade:614 msgid "<b>Date:</b>" msgstr "<b>Date:</b>" -#: glade/pytrainer.glade:627 -#: glade/pytrainer.glade:1999 -#: glade/pytrainer.glade:2612 -#: glade/pytrainer.glade:3237 -#: glade/pytrainer.glade:3938 +#: glade/pytrainer.glade:628 +#: glade/pytrainer.glade:2712 +#: glade/pytrainer.glade:3323 +#: glade/pytrainer.glade:3946 +#: glade/pytrainer.glade:4645 msgid "<b>Distance:</b>" msgstr "<b>Distance:</b>" -#: glade/pytrainer.glade:644 +#: glade/pytrainer.glade:645 msgid "<b>Max Speed</b>" msgstr "<b>Vit. Max:</b>" -#: glade/pytrainer.glade:660 -#: glade/pytrainer.glade:2301 -#: glade/pytrainer.glade:2914 -#: glade/pytrainer.glade:3539 -#: glade/pytrainer.glade:4164 +#: glade/pytrainer.glade:661 +#: glade/pytrainer.glade:3014 +#: glade/pytrainer.glade:3625 +#: glade/pytrainer.glade:4248 +#: glade/pytrainer.glade:4871 msgid "<b>Max Pace:</b>" msgstr "<b>Cad. Max:</b>" -#: glade/pytrainer.glade:676 +#: glade/pytrainer.glade:677 msgid "<b>Descent:</b>" msgstr "<b>Dénivelé Nég.:</b>" -#: glade/pytrainer.glade:768 -#: glade/pytrainer.glade:2211 -#: glade/pytrainer.glade:2780 -#: glade/pytrainer.glade:3405 -#: glade/pytrainer.glade:3864 +#: glade/pytrainer.glade:769 +#: glade/pytrainer.glade:2924 +#: glade/pytrainer.glade:3491 +#: glade/pytrainer.glade:4114 +#: glade/pytrainer.glade:4571 msgid "Cal" msgstr "Cal" -#: glade/pytrainer.glade:807 -#: glade/pytrainer.glade:1973 -#: glade/pytrainer.glade:2586 -#: glade/pytrainer.glade:3211 -#: glade/pytrainer.glade:4041 +#: glade/pytrainer.glade:808 +#: glade/pytrainer.glade:2686 +#: glade/pytrainer.glade:3297 +#: glade/pytrainer.glade:3920 +#: glade/pytrainer.glade:4748 +#: pytrainer/gui/windowmain.py:102 msgid "Km" msgstr "km" -#: glade/pytrainer.glade:824 -#: glade/pytrainer.glade:844 -#: glade/pytrainer.glade:867 -#: glade/pytrainer.glade:2028 -#: glade/pytrainer.glade:2049 -#: glade/pytrainer.glade:2071 -#: glade/pytrainer.glade:2662 -#: glade/pytrainer.glade:2684 -#: glade/pytrainer.glade:3287 -#: glade/pytrainer.glade:3309 -#: glade/pytrainer.glade:3987 -#: glade/pytrainer.glade:4009 -msgid "00" -msgstr "" +#: glade/pytrainer.glade:823 +#: glade/pytrainer.glade:2846 +#: glade/pytrainer.glade:2879 +#: glade/pytrainer.glade:3446 +#: glade/pytrainer.glade:3539 +#: glade/pytrainer.glade:4069 +#: glade/pytrainer.glade:4162 +#: glade/pytrainer.glade:4791 +#: glade/pytrainer.glade:4807 +#: pytrainer/gui/windowmain.py:616 +#: pytrainer/gui/windowmain.py:617 +#: pytrainer/gui/windowmain.py:739 +#: pytrainer/gui/windowmain.py:740 +#: pytrainer/gui/windowmain.py:817 +#: pytrainer/gui/windowmain.py:818 +#: pytrainer/lib/activity.py:199 +msgid "km/h" +msgstr "km/h" -#: glade/pytrainer.glade:1041 +#: glade/pytrainer.glade:838 +msgid "<b>Equipment:</b>" +msgstr "<b>Équipement:</b>" + +#: glade/pytrainer.glade:1014 msgid " <b>Title:</b>" msgstr " <b>Titre:</b>" -#: glade/pytrainer.glade:1098 +#: glade/pytrainer.glade:1064 +#: pytrainer/gui/windowmain.py:1350 +msgid "Show graph display options" +msgstr "Montrer les réglages du graphe" + +#: glade/pytrainer.glade:1082 msgid "" "Profile\n" "Speed\n" "Pace\n" "Heart Rate\n" -"Cadence" +"Cadence\n" +"Percentage\n" +"Zone" msgstr "" "Profil\n" "Vitesse\n" "Cadence\n" "Fréquence Cardiaque\n" -"Rythme" +"Rythme\n" +"Pourcentage\n" +"Zone" -#: glade/pytrainer.glade:1113 -#: glade/pytrainer.glade:3121 -#: glade/pytrainer.glade:3746 -#: glade/pytrainer.glade:4370 +#: glade/pytrainer.glade:1099 +#: glade/pytrainer.glade:3831 +#: glade/pytrainer.glade:4454 +#: glade/pytrainer.glade:5076 msgid "Versus" -msgstr "" +msgstr "Versus" -#: glade/pytrainer.glade:1124 +#: glade/pytrainer.glade:1110 msgid "" "None\n" "Profile\n" @@ -866,131 +1033,199 @@ "Fréquence Cardiaque\n" "Rythme\n" -#: glade/pytrainer.glade:1141 +#: glade/pytrainer.glade:1257 +msgid "<small>Graph Display Options</small>" +msgstr "<small>Options d'affichage des graphiques</small>" + +#: glade/pytrainer.glade:1282 +#: glade/pytrainer.glade:1497 +#: glade/pytrainer.glade:1717 +msgid "<small>Limits</small>" +msgstr "<small>Limites</small>" + +#: glade/pytrainer.glade:1294 +#: glade/pytrainer.glade:1509 +#: glade/pytrainer.glade:1763 +msgid "<small>Min</small>" +msgstr "<small>Min</small>" + +#: glade/pytrainer.glade:1306 +#: glade/pytrainer.glade:1521 +#: glade/pytrainer.glade:1775 +msgid "<small>Max</small>" +msgstr "<small>Max</small>" + +#: glade/pytrainer.glade:1355 +#: glade/pytrainer.glade:1577 +msgid "<small>Color</small>" +msgstr "<small>Couleur</small>" + +#: glade/pytrainer.glade:1386 +#: glade/pytrainer.glade:1590 +msgid "<small>Weight</small>" +msgstr "<small>Poids</small>" + +#: glade/pytrainer.glade:1416 +msgid "Y1" +msgstr "" + +#: glade/pytrainer.glade:1427 +#: glade/pytrainer.glade:1638 +msgid "<small>Smoothing</small>" +msgstr "<small>Lissage</small>" + +#: glade/pytrainer.glade:1567 +msgid "Y2" +msgstr "" + +#: glade/pytrainer.glade:1707 +msgid "X" +msgstr "" + +#: glade/pytrainer.glade:1788 +msgid "<small>Distance</small>" +msgstr "<small>Distance</small>" + +#: glade/pytrainer.glade:1817 +msgid "<small>Time</small>" +msgstr "<small>Temps</small>" + +#: glade/pytrainer.glade:1878 msgid "Show Laps" msgstr "Montrer les tours" -#: glade/pytrainer.glade:1199 -msgid "<small>Y Axis</small>" -msgstr "<small>Axe Y</small>" - -#: glade/pytrainer.glade:1248 -msgid "<small>Graph Display Options</small>" -msgstr "<small>Options d'affichage des graphiques</small>" - -#: glade/pytrainer.glade:1258 +#: glade/pytrainer.glade:1917 msgid "Reset Graph" msgstr "Réinitialiser le Graphe" -#: glade/pytrainer.glade:1262 -msgid "Reset Graph display to original settings" -msgstr "Revenir aux réglages initiaux pour l'affichage du graphe " +#: glade/pytrainer.glade:1979 +msgid "Redraw Map" +msgstr "Redessiner la carte" -#: glade/pytrainer.glade:1381 +#: glade/pytrainer.glade:1995 +msgid "<small>Display map using:</small>" +msgstr "<small>Afficher la carte avec:</small>" + +#: glade/pytrainer.glade:2097 msgid "<b>Beats:</b>" msgstr "<b>FC Moy:</b>" -#: glade/pytrainer.glade:1393 -#: glade/pytrainer.glade:2181 -#: glade/pytrainer.glade:2750 -#: glade/pytrainer.glade:3375 -#: glade/pytrainer.glade:3834 +#: glade/pytrainer.glade:2109 +#: glade/pytrainer.glade:2894 +#: glade/pytrainer.glade:3461 +#: glade/pytrainer.glade:4084 +#: glade/pytrainer.glade:4541 msgid "<b>Calories: </b>" msgstr "<b>Calories:</b>" -#: glade/pytrainer.glade:1407 -#: glade/pytrainer.glade:2333 -#: glade/pytrainer.glade:2978 -#: glade/pytrainer.glade:3603 -#: glade/pytrainer.glade:4212 +#: glade/pytrainer.glade:2123 +#: glade/pytrainer.glade:3046 +#: glade/pytrainer.glade:3689 +#: glade/pytrainer.glade:4312 +#: glade/pytrainer.glade:4919 msgid "<b>Max Beats:</b>" msgstr "<b>FC Max:</b>" -#: glade/pytrainer.glade:1421 +#: glade/pytrainer.glade:2137 msgid "<b>HR Zones Method:</b>" msgstr "<b>Calcul des zones de FC :</b>" -#: glade/pytrainer.glade:1436 +#: glade/pytrainer.glade:2152 msgid "<b>HR Zone5:</b>" msgstr "<b>Zone FC5:</b>" -#: glade/pytrainer.glade:1451 -#: glade/pytrainer.glade:1650 +#: glade/pytrainer.glade:2167 +#: glade/pytrainer.glade:2366 msgid " bpm" msgstr " bpm" -#: glade/pytrainer.glade:1467 +#: glade/pytrainer.glade:2183 msgid " Cal" msgstr " Cal" -#: glade/pytrainer.glade:1525 +#: glade/pytrainer.glade:2241 msgid "<b>HR Zone4:</b>" msgstr "<b>Zone FC4:</b>" -#: glade/pytrainer.glade:1541 +#: glade/pytrainer.glade:2257 msgid "<b>HR Zone3:</b>" msgstr "<b>Zone FC3:</b>" -#: glade/pytrainer.glade:1557 +#: glade/pytrainer.glade:2273 msgid "<b>HR Zone2:</b>" msgstr "<b>Zone FC2:</b>" -#: glade/pytrainer.glade:1573 +#: glade/pytrainer.glade:2289 msgid "<b>HR Zone1:</b>" msgstr "<b>Zone FC1:</b>" -#: glade/pytrainer.glade:1675 -#: glade/pytrainer.glade:1687 -#: glade/pytrainer.glade:1702 -#: glade/pytrainer.glade:1717 -#: glade/pytrainer.glade:1732 -#: glade/pytrainer.glade:2256 -#: glade/pytrainer.glade:2350 -#: glade/pytrainer.glade:2885 -#: glade/pytrainer.glade:2963 -#: glade/pytrainer.glade:3510 -#: glade/pytrainer.glade:3588 -#: glade/pytrainer.glade:3909 -#: glade/pytrainer.glade:4116 +#: glade/pytrainer.glade:2391 +#: glade/pytrainer.glade:2403 +#: glade/pytrainer.glade:2418 +#: glade/pytrainer.glade:2433 +#: glade/pytrainer.glade:2448 +#: glade/pytrainer.glade:2969 +#: glade/pytrainer.glade:3063 +#: glade/pytrainer.glade:3596 +#: glade/pytrainer.glade:3674 +#: glade/pytrainer.glade:4219 +#: glade/pytrainer.glade:4297 +#: glade/pytrainer.glade:4616 +#: glade/pytrainer.glade:4823 +#: pytrainer/lib/activity.py:432 +#: pytrainer/lib/activity.py:512 msgid "bpm" msgstr "bpm" -#: glade/pytrainer.glade:1777 +#: glade/pytrainer.glade:2493 msgid " <b>Heart Rate:</b>" msgstr " <b>Fréquence Cardiaque:</b>" -#: glade/pytrainer.glade:1905 -#, fuzzy -msgid "label-2147483647" -msgstr "label-2147483648" - -#: glade/pytrainer.glade:1939 +#: glade/pytrainer.glade:2653 msgid "Record" msgstr "Enregistrement" -#: glade/pytrainer.glade:2149 -#: glade/pytrainer.glade:2796 -#: glade/pytrainer.glade:3421 -#: glade/pytrainer.glade:4132 +#: glade/pytrainer.glade:2862 +#: glade/pytrainer.glade:3507 +#: glade/pytrainer.glade:4130 +#: glade/pytrainer.glade:4839 msgid "<b>Max Speed:</b>" msgstr "<b>Vit. Max:</b>" -#: glade/pytrainer.glade:2226 -#: glade/pytrainer.glade:2855 -#: glade/pytrainer.glade:3480 -#: glade/pytrainer.glade:3879 +#: glade/pytrainer.glade:2939 +#: glade/pytrainer.glade:3566 +#: glade/pytrainer.glade:4189 +#: glade/pytrainer.glade:4586 msgid "<b>Beats avg:</b>" msgstr "<b>FC Moy:</b>" -#: glade/pytrainer.glade:2440 +#: glade/pytrainer.glade:2999 +#: glade/pytrainer.glade:3031 +#: glade/pytrainer.glade:3642 +#: glade/pytrainer.glade:3658 +#: glade/pytrainer.glade:4265 +#: glade/pytrainer.glade:4281 +#: glade/pytrainer.glade:4888 +#: glade/pytrainer.glade:4904 +#: pytrainer/gui/windowmain.py:618 +#: pytrainer/gui/windowmain.py:619 +#: pytrainer/gui/windowmain.py:741 +#: pytrainer/gui/windowmain.py:742 +#: pytrainer/gui/windowmain.py:819 +#: pytrainer/gui/windowmain.py:820 +#: pytrainer/lib/activity.py:200 +msgid "min/km" +msgstr "min/km" + +#: glade/pytrainer.glade:3153 msgid " <b>Date:</b>" msgstr " <b>Date:</b>" -#: glade/pytrainer.glade:2484 +#: glade/pytrainer.glade:3196 msgid "Value" msgstr "Valeur" -#: glade/pytrainer.glade:2495 +#: glade/pytrainer.glade:3207 msgid "" "Stage Profile\n" "Stage Velocity\n" @@ -1000,23 +1235,17 @@ "Vitesse de la sortie\n" "Profil de la sortie/Vitesse" -#: glade/pytrainer.glade:2551 +#: glade/pytrainer.glade:3263 msgid "Day" msgstr "Jour" -#: glade/pytrainer.glade:2641 -#: glade/pytrainer.glade:3266 -#: glade/pytrainer.glade:3966 -msgid "000" -msgstr "" - -#: glade/pytrainer.glade:3054 +#: glade/pytrainer.glade:3765 msgid " <b>Week:</b>" msgstr "<b>Semaine:</b>" -#: glade/pytrainer.glade:3106 -#: glade/pytrainer.glade:3731 -#: glade/pytrainer.glade:4355 +#: glade/pytrainer.glade:3816 +#: glade/pytrainer.glade:4439 +#: glade/pytrainer.glade:5061 msgid "" "Distance\n" "Time\n" @@ -1030,9 +1259,9 @@ "Vitesse moyenne\n" "Calories" -#: glade/pytrainer.glade:3132 -#: glade/pytrainer.glade:3757 -#: glade/pytrainer.glade:4381 +#: glade/pytrainer.glade:3842 +#: glade/pytrainer.glade:4465 +#: glade/pytrainer.glade:5087 msgid "" "None\n" "Distance\n" @@ -1048,51 +1277,71 @@ "Vitesse moyenne\n" "Calories" -#: glade/pytrainer.glade:3176 +#: glade/pytrainer.glade:3886 msgid "Week" msgstr "Semaine" -#: glade/pytrainer.glade:3679 +#: glade/pytrainer.glade:4388 msgid " <b>Month:</b>" msgstr " <b>Mois:</b>" -#: glade/pytrainer.glade:3800 +#: glade/pytrainer.glade:4508 msgid "Month" msgstr "Mois" -#: glade/pytrainer.glade:4303 +#: glade/pytrainer.glade:5010 msgid " <b>Year:</b>" msgstr " <b>Année:</b>" -#: glade/pytrainer.glade:4424 +#: glade/pytrainer.glade:5130 msgid "Year" msgstr "Année" -#: glade/pytrainer.glade:4447 -msgid "label154" -msgstr "label154" +#: glade/pytrainer.glade:5284 +msgid "<b>Graph</b>" +msgstr "<b>Graphe:</b>" -#: glade/pytrainer.glade:4467 +#: glade/pytrainer.glade:5325 +msgid "<b>History</b>" +msgstr "<b>Historique</b>" + +#: glade/pytrainer.glade:5389 msgid "<b>Title:</b>" msgstr "<b>Titre:</b>" -#: glade/pytrainer.glade:4490 +#: glade/pytrainer.glade:5412 msgid "Search" msgstr "Rechercher" -#: glade/pytrainer.glade:4517 +#: glade/pytrainer.glade:5436 +msgid "All Distances" +msgstr "Toutes les distances" + +#: glade/pytrainer.glade:5445 +msgid "All Durations" +msgstr "Toutes les durées" + +#: glade/pytrainer.glade:5455 +msgid "" +"All time\n" +"Last 4 weeks\n" +"Last 6 months\n" +"Last 12 months" +msgstr "" +"Toutes les dates\n" +"Les 4 dernières semaines\n" +"Les 6 derniers mois\n" +"Les 12 derniers moiss" + +#: glade/pytrainer.glade:5492 msgid "Columns" msgstr "Colonnes" -#: glade/pytrainer.glade:4573 -msgid "label155" -msgstr "label155" - -#: glade/pytrainer.glade:4657 +#: glade/pytrainer.glade:5619 msgid "Type:" msgstr "Type:" -#: glade/pytrainer.glade:4670 +#: glade/pytrainer.glade:5632 msgid "" "Font\n" "Restaurant\n" @@ -1104,30 +1353,34 @@ "Vue Panoramique\n" "Sommet" -#: glade/pytrainer.glade:4686 +#: glade/pytrainer.glade:5648 msgid "Latitude: " msgstr "Latitude:" -#: glade/pytrainer.glade:4700 +#: glade/pytrainer.glade:5662 msgid " Name:" msgstr "Nom:" -#: glade/pytrainer.glade:4712 +#: glade/pytrainer.glade:5674 msgid "Longitude:" msgstr " Longitude:" -#: glade/pytrainer.glade:4804 +#: glade/pytrainer.glade:5766 msgid "<b> Waypoint: </b>" msgstr "<b> Point de localisation:</b>" -#: glade/pytrainer.glade:4885 -msgid "label162" -msgstr "label162" +#: glade/pytrainer.glade:5950 +msgid "Edit Record" +msgstr "Éditer un enregistrement" -#: glade/pytrainer.glade:4972 -msgid "label163" -msgstr "label163" +#: glade/pytrainer.glade:5964 +msgid "Show graph in classic view" +msgstr "Montrer le graphe dans la vue classique" +#: glade/pytrainer.glade:5978 +msgid "Merge tracks" +msgstr "Fusionner les traces" + #: glade/selecttrackdialog.glade:7 msgid "Select track record" msgstr "Sélectionnez un Circuit" @@ -1137,15 +1390,51 @@ msgid "Warning" msgstr "Attention" -#: extensions/openstreetmap/openstreetmap.py:27 +#: import/file_kml20.py:47 +msgid "Geodistance kml version 2.0 file" +msgstr "Fichier Geodistance kml version 2.0" + +#: import/file_gpxplus.py:41 +msgid "GPS eXchange file" +msgstr "Fichier de type GPX" + +#: import/tool_gpsbabel.py:37 +msgid "GPSBabel" +msgstr "GPSBabel" + +#: import/tool_garmintools.py:37 +msgid "Garmintools" +msgstr "Garmintools" + +#: import/file_garmintcxv1.py:45 +msgid "Garmin training center database file version 1" +msgstr "Fichier de base de données Garmin training center version 1" + +#: import/file_gpxplusNokia.py:41 +msgid "Nokia Export - GPS eXchange file" +msgstr "Export Nokia- GPS eXchange file" + +#: import/tool_gant.py:37 +msgid "Gant" +msgstr "Gant" + +#: import/file_garmintools.py:44 +msgid "Garmin tools dump file" +msgstr "Fichier de dump Garmin tools" + +#: import/file_garmintcxv2.py:43 +msgid "Garmin training center database file version 2" +msgstr "Fichier de base de données Garmin training center version 2" + +#: extensions/openstreetmap/openstreetmap.py:30 msgid "Must have username and password configured" msgstr "Un nom d'utilisateur et un mot de passe doivent être configurés" -#: extensions/openstreetmap/openstreetmap.py:29 +#: extensions/openstreetmap/openstreetmap.py:32 msgid "Openstreetmap Extension Error" msgstr "Erreur d'extension Openstreetmap" -#: extensions/openstreetmap/openstreetmap.py:66 +#: extensions/openstreetmap/openstreetmap.py:79 msgid "" "Posting GPX trace to Openstreetmap\n" "\n" @@ -1155,353 +1444,555 @@ "\n" "Merci d'attendre la fin du processus qui peut prendre quelques minutes" -#: extensions/openstreetmap/openstreetmap.py:68 +#: extensions/openstreetmap/openstreetmap.py:81 msgid "Openstreetmap Extension Processing" msgstr "Traitement de l'extension Openstreetmap" -#: extensions/openstreetmap/openstreetmap.py:86 +#: extensions/openstreetmap/openstreetmap.py:99 msgid "Openstreetmap Extension Upload Complete" msgstr "Chargement sur Openstreetmap effectué" -#: extensions/openstreetmap/openstreetmap.py:96 +#: extensions/openstreetmap/openstreetmap.py:109 msgid "Please add any additional information for this upload" msgstr "Merci de Compléter les informations pour ce chargement" -#: pytrainer/gui/windowprofile.py:53 -msgid "Male" -msgstr "Homme" +#: extensions/fixelevation/fixelevation.py:94 +msgid "Elevation Correction Complete" +msgstr "Correction d'élévation terminée" -#: pytrainer/gui/windowprofile.py:54 -msgid "Female" -msgstr "Femme" +#: extensions/wordpress/wordpress.py:46 +msgid "Posting to Wordpress blog" +msgstr "Poster sur le blog Wordpress" -#: pytrainer/gui/windowprofile.py:71 -msgid "MET" -msgstr "MET" +#: extensions/wordpress/wordpress.py:48 +msgid "Wordpress Extension Processing" +msgstr "Traitement de l'extension Wordpress" -#: pytrainer/gui/windowplugins.py:69 -#: pytrainer/gui/windowplugins.py:96 -#: pytrainer/gui/windowextensions.py:72 -#: pytrainer/gui/windowimportdata.py:542 -msgid "Enable" -msgstr "Activé" +#: extensions/wordpress/wordpress.py:144 +msgid "Wordpress Extension Upload Complete" +msgstr "Chargement sur Wordpress effectué" -#: pytrainer/gui/windowplugins.py:71 -#: pytrainer/gui/windowplugins.py:95 -#: pytrainer/gui/windowextensions.py:70 -#: pytrainer/gui/windowimportdata.py:541 -msgid "Disable" -msgstr "Désactivé" +#: pytrainer/record.py:63 +#: pytrainer/gui/windowmain.py:1740 +msgid "Edit Entry" +msgstr "Entrée Rapide" -#: pytrainer/gui/windowplugins.py:80 -#: pytrainer/gui/windowextensions.py:81 -#: pytrainer/gui/windowimportdata.py:526 -#, python-format -msgid "%s settings" -msgstr "" +#: pytrainer/record.py:513 +msgid "pyTrainer can't import data from your gpx file" +msgstr "pyTrainer ne peut pas importer de données depuis le fichier GPX" -#: pytrainer/gui/windowplugins.py:103 -#: pytrainer/gui/windowimportdata.py:549 -msgid "Ok" -msgstr "Ok" +#: pytrainer/monthgraph.py:70 +#: pytrainer/monthgraph.py:72 +#: pytrainer/monthgraph.py:74 +#: pytrainer/monthgraph.py:76 +#: pytrainer/monthgraph.py:78 +msgid "day" +msgstr "jour" -#: pytrainer/gui/windowmain.py:65 -#: pytrainer/gui/windowmain.py:68 -#: pytrainer/gui/windowmain.py:72 -msgid "id" -msgstr "id" +#: pytrainer/monthgraph.py:70 +#: pytrainer/weekgraph.py:115 +msgid "Daily Distance" +msgstr "Distance Journalière" -#: pytrainer/gui/windowmain.py:65 -msgid "Start" -msgstr "Début" +#: pytrainer/monthgraph.py:72 +#: pytrainer/weekgraph.py:117 +#: pytrainer/yeargraph.py:72 +msgid "Time (hours)" +msgstr "Durée (Heures)" -#: pytrainer/gui/windowmain.py:65 -msgid "Kilometer" -msgstr "Kilomètres" +#: pytrainer/monthgraph.py:72 +#: pytrainer/weekgraph.py:117 +msgid "Daily Time" +msgstr "Durée Journalière" -#: pytrainer/gui/windowmain.py:68 -#: pytrainer/gui/windowmain.py:748 -msgid "Title" -msgstr "Titre" +#: pytrainer/monthgraph.py:74 +#: pytrainer/weekgraph.py:119 +#: pytrainer/yeargraph.py:74 +msgid "Average Heart Rate (bpm)" +msgstr "FC moyenne (bpm):" -#: pytrainer/gui/windowmain.py:68 -#: pytrainer/gui/windowmain.py:749 -#: pytrainer/gui/dialogselecttrack.py:40 -msgid "Date" -msgstr "Date" +#: pytrainer/monthgraph.py:74 +#: pytrainer/weekgraph.py:119 +msgid "Daily Average Heart Rate" +msgstr "FC moyenne Journalière" -#: pytrainer/gui/windowmain.py:68 -#: pytrainer/gui/windowmain.py:750 -#: pytrainer/gui/windowrecord.py:147 -#: pytrainer/gui/windowimportdata.py:333 -#: pytrainer/extensions/googlemaps.py:93 -msgid "Distance" -msgstr "Distance" +#: pytrainer/monthgraph.py:76 +#: pytrainer/weekgraph.py:121 +msgid "Daily Average Speed" +msgstr "Vitesse moyenne Journalière" -#: pytrainer/gui/windowmain.py:68 -#: pytrainer/gui/windowmain.py:752 -#: pytrainer/extensions/googlemaps.py:93 -msgid "Time" -msgstr "Temps" +#: pytrainer/monthgraph.py:78 +#: pytrainer/weekgraph.py:123 +msgid "Daily Calories" +msgstr "Calories Journalière" -#: pytrainer/gui/windowmain.py:68 -#: pytrainer/gui/windowmain.py:753 +#: pytrainer/heartrategraph.py:36 +#: pytrainer/recordgraph.py:140 +#: pytrainer/daygraph.py:56 +msgid "Beats (bpm)" +msgstr "Pulsations (bpm)" + +#: pytrainer/recordgraph.py:134 +#: pytrainer/daygraph.py:52 +msgid "Height (m)" +msgstr "Altitude (m)" + +#: pytrainer/recordgraph.py:134 +#: pytrainer/daygraph.py:52 +msgid "Stage Profile" +msgstr "Profil de la sortie" + +#: pytrainer/recordgraph.py:136 +msgid "Speed (Km/h)" +msgstr "Vitesse (km/h)" + +#: pytrainer/recordgraph.py:136 +#: pytrainer/lib/activity.py:322 +#: pytrainer/lib/activity.py:412 +#: pytrainer/lib/activity.py:414 +msgid "Speed" +msgstr "Vitesse" + +#: pytrainer/recordgraph.py:138 +#: pytrainer/lib/activity.py:311 +#: pytrainer/lib/activity.py:421 +#: pytrainer/lib/activity.py:423 +msgid "Pace" +msgstr "Cadence" + +#: pytrainer/recordgraph.py:142 +msgid "Cadence (rpm)" +msgstr "Rythme (rpm) " + +#: pytrainer/recordgraph.py:142 +#: pytrainer/lib/activity.py:449 +#: pytrainer/lib/activity.py:451 +msgid "Cadence" +msgstr "Rythme" + +#: pytrainer/recordgraph.py:144 +msgid "Beats (%)" +msgstr "Pulsations (%)" + +#: pytrainer/recordgraph.py:144 +#: pytrainer/gui/windowmain.py:1136 msgid "Beats" msgstr "Pulsations" -#: pytrainer/gui/windowmain.py:68 -#: pytrainer/gui/windowmain.py:754 -msgid "Average" -msgstr "Moyenne" +#: pytrainer/recordgraph.py:146 +msgid "Zone" +msgstr "Zone" -#: pytrainer/gui/windowmain.py:72 +#: pytrainer/waypoint.py:87 +msgid "The gpx file seems to be a several days records. Perhaps you will need to edit your gpx file" +msgstr "Ce fichier GPX semble contenir plusieurs jours d'enregistrements. Vous devrez peut-être au préalable éditer celui-ci." + +#: pytrainer/extensions/googlemaps.py:69 +#: pytrainer/extensions/osm.py:48 +#: pytrainer/gui/windowmain.py:1654 +#: pytrainer/gui/drawArea.py:165 +msgid "h" +msgstr "h" + +#: pytrainer/extensions/googlemaps.py:69 +#: pytrainer/extensions/osm.py:48 +#: pytrainer/gui/drawArea.py:166 +msgid "min" +msgstr "min" + +#: pytrainer/extensions/googlemaps.py:71 +#: pytrainer/extensions/osm.py:50 +#: pytrainer/gui/windowmain.py:112 +#: pytrainer/gui/windowmain.py:393 +#: pytrainer/gui/windowmain.py:1135 +msgid "Time" +msgstr "Temps" + +#: pytrainer/extensions/googlemaps.py:71 +#: pytrainer/extensions/osm.py:50 +#: pytrainer/gui/windowmain.py:110 +#: pytrainer/gui/windowmain.py:392 +#: pytrainer/gui/windowmain.py:1133 +#: pytrainer/gui/windowimportdata.py:352 +#: pytrainer/gui/windowrecord.py:210 +#: pytrainer/lib/activity.py:310 +#: pytrainer/lib/activity.py:321 +#: pytrainer/lib/activity.py:393 +#: pytrainer/lib/activity.py:404 +#: pytrainer/lib/activity.py:413 +#: pytrainer/lib/activity.py:422 +#: pytrainer/lib/activity.py:431 +#: pytrainer/lib/activity.py:441 +#: pytrainer/lib/activity.py:450 +#: pytrainer/lib/activity.py:511 +msgid "Distance" +msgstr "Distance" + +#: pytrainer/gui/drawGraph.py:164 +msgid "Athlete Data" +msgstr "Données de l'athlète" + +#: pytrainer/gui/windowmain.py:100 +msgid "Miles" +msgstr "Miles" + +#: pytrainer/gui/windowmain.py:103 +#: pytrainer/gui/windowmain.py:107 +#: pytrainer/gui/windowmain.py:120 +#: pytrainer/gui/windowmain.py:123 +msgid "id" +msgstr "id" + +#: pytrainer/gui/windowmain.py:103 +msgid "Start" +msgstr "Début" + +#: pytrainer/gui/windowmain.py:113 +msgid "⌀ HR" +msgstr "FC" + +#: pytrainer/gui/windowmain.py:114 +msgid "⌀ Speed" +msgstr "Vitesse" + +#: pytrainer/gui/windowmain.py:120 msgid "Waypoint" msgstr "Point de Localisation" -#: pytrainer/gui/windowmain.py:183 -#: pytrainer/gui/windowmain.py:321 -#: pytrainer/gui/windowmain.py:425 -#: pytrainer/gui/windowmain.py:503 +#: pytrainer/gui/windowmain.py:125 +msgid "Weight" +msgstr "Poids" + +#: pytrainer/gui/windowmain.py:126 +msgid "Body Fat %" +msgstr "% de Masse Grasse" + +#: pytrainer/gui/windowmain.py:127 +msgid "Resting HR" +msgstr "Fréquence de repos" + +#: pytrainer/gui/windowmain.py:128 +msgid "Max HR" +msgstr "FC Max" + +#: pytrainer/gui/windowmain.py:394 +msgid "Laps" +msgstr "Tours" + +#: pytrainer/gui/windowmain.py:446 +msgid "Reset Limits" +msgstr "Réinitialiser les limites" + +#: pytrainer/gui/windowmain.py:448 +msgid "Set Limits" +msgstr "Fixer les limites" + +#: pytrainer/gui/windowmain.py:601 +msgid "Percentages method" +msgstr "Méthode basée sur des pourcentages" + +#: pytrainer/gui/windowmain.py:609 +#: pytrainer/gui/windowmain.py:732 +#: pytrainer/gui/windowmain.py:810 +#: pytrainer/lib/activity.py:193 msgid "miles" msgstr "miles" -#: pytrainer/gui/windowmain.py:184 -#: pytrainer/gui/windowmain.py:185 -#: pytrainer/gui/windowmain.py:322 -#: pytrainer/gui/windowmain.py:323 -#: pytrainer/gui/windowmain.py:426 -#: pytrainer/gui/windowmain.py:427 -#: pytrainer/gui/windowmain.py:504 -#: pytrainer/gui/windowmain.py:505 +#: pytrainer/gui/windowmain.py:610 +#: pytrainer/gui/windowmain.py:611 +#: pytrainer/gui/windowmain.py:733 +#: pytrainer/gui/windowmain.py:734 +#: pytrainer/gui/windowmain.py:811 +#: pytrainer/gui/windowmain.py:812 +#: pytrainer/lib/activity.py:194 msgid "miles/h" -msgstr "" +msgstr "miles/h" -#: pytrainer/gui/windowmain.py:186 -#: pytrainer/gui/windowmain.py:187 -#: pytrainer/gui/windowmain.py:324 -#: pytrainer/gui/windowmain.py:325 -#: pytrainer/gui/windowmain.py:428 -#: pytrainer/gui/windowmain.py:429 -#: pytrainer/gui/windowmain.py:506 -#: pytrainer/gui/windowmain.py:507 +#: pytrainer/gui/windowmain.py:612 +#: pytrainer/gui/windowmain.py:613 +#: pytrainer/gui/windowmain.py:735 +#: pytrainer/gui/windowmain.py:736 +#: pytrainer/gui/windowmain.py:813 +#: pytrainer/gui/windowmain.py:814 +#: pytrainer/lib/activity.py:195 msgid "min/mile" msgstr "min/mile" -#: pytrainer/gui/windowmain.py:188 -#: pytrainer/gui/windowmain.py:189 -msgid "feet" -msgstr "pieds" - -#: pytrainer/gui/windowmain.py:191 -#: pytrainer/gui/windowmain.py:327 -#: pytrainer/gui/windowmain.py:431 -#: pytrainer/gui/windowmain.py:509 -#: pytrainer/extensions/googlemaps.py:93 +#: pytrainer/gui/windowmain.py:615 +#: pytrainer/gui/windowmain.py:738 +#: pytrainer/gui/windowmain.py:816 +#: pytrainer/lib/activity.py:198 msgid "km" msgstr "km" -#: pytrainer/gui/windowmain.py:310 -msgid "Percentages method" -msgstr "Méthode basée sur des pourcentages" +#: pytrainer/gui/windowmain.py:1137 +msgid "Average" +msgstr "Moyenne" -#: pytrainer/gui/windowmain.py:1041 +#: pytrainer/gui/windowmain.py:1346 +msgid "Hide graph display options" +msgstr "Cacher les réglages du graphe " + +#: pytrainer/gui/windowmain.py:1644 msgid "lap" msgstr "tour " -#: pytrainer/gui/windowmain.py:1047 -#: pytrainer/gui/drawArea.py:143 -#: pytrainer/extensions/googlemaps.py:91 -msgid "h" -msgstr "" +#: pytrainer/gui/windowmain.py:1654 +#: pytrainer/gui/windowmain.py:1656 +#: pytrainer/lib/activity.py:201 +msgid "m" +msgstr "m" -#: pytrainer/gui/windowmain.py:1047 -#: pytrainer/gui/windowmain.py:1049 +#: pytrainer/gui/windowmain.py:1654 +#: pytrainer/gui/windowmain.py:1656 msgid "s" -msgstr "" +msgstr "s" -#: pytrainer/gui/dialogselecttrack.py:40 -msgid "Track Name" -msgstr "Nom du Circuit" +#: pytrainer/gui/windowmain.py:1751 +msgid "Delete Entry" +msgstr "Détruire l'entrée" -#: pytrainer/gui/drawArea.py:144 -#: pytrainer/extensions/googlemaps.py:91 -msgid "min" -msgstr "min" +#: pytrainer/gui/windowmain.py:1775 +msgid "Create Athlete Entry" +msgstr "Créer une entrée Athlète" -#: pytrainer/gui/windowrecord.py:147 -#: pytrainer/gui/windowimportdata.py:333 -msgid "Start Time" -msgstr "Heure de début" +#: pytrainer/gui/windowmain.py:1779 +msgid "Edit Athlete Entry" +msgstr "Éditer les données de l'athlète" -#: pytrainer/gui/windowrecord.py:147 -#: pytrainer/gui/windowimportdata.py:333 -msgid "Duration" -msgstr "Durée" +#: pytrainer/gui/windowmain.py:1860 +#: pytrainer/main.py:433 +msgid "Delete this database entry?" +msgstr "Supprimer cette entrée de la Base de Données?" -#: pytrainer/gui/windowrecord.py:147 -msgid "GPX File" -msgstr "Fichier GPX" +#: pytrainer/gui/windowmain.py:1862 +msgid "Are you sure?" +msgstr "Êtes vous sûr?" +#: pytrainer/gui/windowextensions.py:70 +#: pytrainer/gui/windowimportdata.py:560 +#: pytrainer/gui/windowplugins.py:71 +#: pytrainer/gui/windowplugins.py:95 +msgid "Disable" +msgstr "Désactivé" + +#: pytrainer/gui/windowextensions.py:72 +#: pytrainer/gui/windowimportdata.py:561 +#: pytrainer/gui/windowplugins.py:69 +#: pytrainer/gui/windowplugins.py:96 +msgid "Enable" +msgstr "Activé" + +#: pytrainer/gui/windowextensions.py:81 +#: pytrainer/gui/windowimportdata.py:545 +#: pytrainer/gui/windowplugins.py:80 +#, python-format +msgid "%s settings" +msgstr "" + #: pytrainer/gui/windowextensions.py:112 #: pytrainer/gui/windowextensions.py:125 msgid "OK" msgstr "OK" -#: pytrainer/gui/windowimportdata.py:110 +#: pytrainer/gui/windowimportdata.py:116 msgid "No file selected" msgstr "Pas de fichier sélectionné" -#: pytrainer/gui/windowimportdata.py:155 +#: pytrainer/gui/windowimportdata.py:161 msgid "Configure" msgstr "Configurer" -#: pytrainer/gui/windowimportdata.py:156 +#: pytrainer/gui/windowimportdata.py:162 msgid "Run" msgstr "" -#: pytrainer/gui/windowimportdata.py:164 +#: pytrainer/gui/windowimportdata.py:170 msgid "Disabled" msgstr "Désactivé" -#: pytrainer/gui/windowimportdata.py:166 +#: pytrainer/gui/windowimportdata.py:172 msgid "Enabled" msgstr "Activé" -#: pytrainer/gui/windowimportdata.py:233 +#: pytrainer/gui/windowimportdata.py:252 msgid "GPS device found" msgstr "Périphérique GPS trouvé" -#: pytrainer/gui/windowimportdata.py:236 +#: pytrainer/gui/windowimportdata.py:255 msgid "GPS device <b>not</b> found" msgstr "Périphérique GPS <b>non</b> trouvé" -#: pytrainer/gui/windowimportdata.py:243 +#: pytrainer/gui/windowimportdata.py:262 msgid "This tool was not found on the system" msgstr "Cet outil n'est pas installé sur votre système" -#: pytrainer/gui/windowimportdata.py:245 +#: pytrainer/gui/windowimportdata.py:264 msgid " Homepage" msgstr "Page d'accueil" -#: pytrainer/gui/windowimportdata.py:298 +#: pytrainer/gui/windowimportdata.py:317 msgid "File" msgstr "Fichier" -#: pytrainer/gui/windowimportdata.py:298 +#: pytrainer/gui/windowimportdata.py:317 msgid "Type" msgstr "Type" -#: pytrainer/gui/windowimportdata.py:298 +#: pytrainer/gui/windowimportdata.py:317 msgid "Activities" msgstr "Activités" -#: pytrainer/gui/windowimportdata.py:333 -msgid "Notes" -msgstr "" +#: pytrainer/gui/windowimportdata.py:352 +#: pytrainer/gui/windowrecord.py:210 +msgid "Start Time" +msgstr "Heure de début" -#: pytrainer/gui/windowimportdata.py:482 +#: pytrainer/gui/windowimportdata.py:352 +#: pytrainer/gui/windowrecord.py:210 +msgid "Duration" +msgstr "Durée" + +#: pytrainer/gui/windowimportdata.py:501 msgid "Imported into database" msgstr "Importé dans la base" -#: pytrainer/gui/windowimportdata.py:609 +#: pytrainer/gui/windowimportdata.py:568 +#: pytrainer/gui/windowplugins.py:103 +msgid "Ok" +msgstr "Ok" + +#: pytrainer/gui/windowimportdata.py:628 msgid "Saving options" msgstr "Sauvegarde des options" -#: pytrainer/gui/windowimportdata.py:611 +#: pytrainer/gui/windowimportdata.py:630 msgid "Options saved" msgstr "Options sauvegardées" -#: pytrainer/gui/windowimportdata.py:636 +#: pytrainer/gui/windowimportdata.py:655 msgid "Importing one activity" msgstr "Importation d'une activité" -#: pytrainer/gui/windowimportdata.py:637 +#: pytrainer/gui/windowimportdata.py:656 msgid "Imported one activity" msgstr "Une activité importée" -#: pytrainer/gui/windowimportdata.py:639 +#: pytrainer/gui/windowimportdata.py:658 #, python-format msgid "Importing %d activities" -msgstr "Import de %d activités" +msgstr "Importation de %d activités" -#: pytrainer/gui/windowimportdata.py:640 +#: pytrainer/gui/windowimportdata.py:659 #, python-format msgid "Imported %d activities" msgstr "%d activités importées" -#: pytrainer/gui/windowimportdata.py:659 +#: pytrainer/gui/windowimportdata.py:678 msgid "Choose a file (or files) to import activities from" -msgstr "Choisir un fichier pour importer vos activitées" +msgstr "Choisir un fichier pour importer vos activités" -#: pytrainer/gui/windowimp... [truncated message content] |
From: <jb...@us...> - 2010-11-24 02:51:37
|
Revision: 736 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=736&view=rev Author: jblance Date: 2010-11-24 02:51:29 +0000 (Wed, 24 Nov 2010) Log Message: ----------- Update DB check to ensure time == duration Modified Paths: -------------- pytrainer/trunk/pytrainer/lib/ddbb.py pytrainer/trunk/pytrainer/main.py Modified: pytrainer/trunk/pytrainer/lib/ddbb.py =================================================================== --- pytrainer/trunk/pytrainer/lib/ddbb.py 2010-11-24 02:31:49 UTC (rev 735) +++ pytrainer/trunk/pytrainer/lib/ddbb.py 2010-11-24 02:51:29 UTC (rev 736) @@ -363,17 +363,20 @@ only for empty durations and where time can be parsed as an int ''' logging.debug('--') - listOfRecords = self.select_dict("records",('id_record','time'), "duration is NULL") - logging.debug("Found %d records in DB without date_time_local field populated" % (len(listOfRecords) ) ) + #listOfRecords = self.select_dict("records",('id_record','time'), "duration is NULL") + #logging.debug("Found %d records in DB without date_time_local field populated" % (len(listOfRecords) ) ) + listOfRecords = self.select_dict("records",('id_record','time', 'duration')) + logging.debug("Found %d records in DB" % (len(listOfRecords) ) ) for record in listOfRecords: try: duration = int(record['time']) except Exception as e: logging.info( "Error parsing time (%s) as int for record_id: %s" % (record['time'], record['id_record'])) continue - logging.debug("setting record %s duration to %d" % (record['id_record'], duration)) - data = {'duration': duration} - self.update_dict("records",data ,"id_record = %d"%record['id_record']) + if duration != record['duration']: + logging.debug("setting record %s duration to %d" % (record['id_record'], duration)) + data = {'duration': duration} + self.update_dict("records",data ,"id_record = %d"%record['id_record']) def populate_date_time_local(self): ''' Populate date_time_local and date from date_time_utc Modified: pytrainer/trunk/pytrainer/main.py =================================================================== --- pytrainer/trunk/pytrainer/main.py 2010-11-24 02:31:49 UTC (rev 735) +++ pytrainer/trunk/pytrainer/main.py 2010-11-24 02:51:29 UTC (rev 736) @@ -53,7 +53,7 @@ class pyTrainer: def __init__(self,filename = None, data_path = None): #Version constants - self.version ="1.7.2_svn#735" + self.version ="1.7.2_svn#736" 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. |
From: <jb...@us...> - 2010-11-24 02:31:55
|
Revision: 735 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=735&view=rev Author: jblance Date: 2010-11-24 02:31:49 +0000 (Wed, 24 Nov 2010) Log Message: ----------- Fix sort of listview Modified Paths: -------------- pytrainer/trunk/pytrainer/main.py pytrainer/trunk/pytrainer/record.py Modified: pytrainer/trunk/pytrainer/main.py =================================================================== --- pytrainer/trunk/pytrainer/main.py 2010-11-24 02:26:44 UTC (rev 734) +++ pytrainer/trunk/pytrainer/main.py 2010-11-24 02:31:49 UTC (rev 735) @@ -53,7 +53,7 @@ class pyTrainer: def __init__(self,filename = None, data_path = None): #Version constants - self.version ="1.7.2_svn#734" + self.version ="1.7.2_svn#735" self.DB_version = 6 #Process command line options self.startup_options = self.get_options() Modified: pytrainer/trunk/pytrainer/record.py =================================================================== --- pytrainer/trunk/pytrainer/record.py 2010-11-24 02:26:44 UTC (rev 734) +++ pytrainer/trunk/pytrainer/record.py 2010-11-24 02:31:49 UTC (rev 735) @@ -477,7 +477,7 @@ logging.debug("condition: %s" % condition) return self.pytrainer_main.ddbb.select("records,sports", "date,distance,average,title,sports.name,id_record,time,beats,calories", - "sports.id_sports = records.sport and %s" %condition) + "sports.id_sports = records.sport and %s order by date desc" %condition) def getRecordDayList(self,date, id_sport=None): logging.debug('>>') This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jb...@us...> - 2010-11-24 02:26:50
|
Revision: 734 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=734&view=rev Author: jblance Date: 2010-11-24 02:26:44 +0000 (Wed, 24 Nov 2010) Log Message: ----------- Display heartrate as integer in day, week, month and year views Modified Paths: -------------- pytrainer/trunk/pytrainer/gui/windowmain.py pytrainer/trunk/pytrainer/main.py Modified: pytrainer/trunk/pytrainer/gui/windowmain.py =================================================================== --- pytrainer/trunk/pytrainer/gui/windowmain.py 2010-11-24 02:21:00 UTC (rev 733) +++ pytrainer/trunk/pytrainer/gui/windowmain.py 2010-11-24 02:26:44 UTC (rev 734) @@ -607,8 +607,8 @@ self.record_zone5.set_text("%s-%s" %(zones[0][0],zones[0][1])) beats = activity.beats maxbeats = activity.maxbeats - self.record_beats.set_text("%0.2f" %beats) - self.record_maxbeats.set_text("%0.2f" %maxbeats) + self.record_beats.set_text("%0.0f" %beats) + self.record_maxbeats.set_text("%0.0f" %maxbeats) self.record_calories2.set_text("%0.0f" %activity.calories) if is_karvonen_method=="True": self.record_zonesmethod.set_text(_("Karvonen method")) @@ -676,10 +676,10 @@ self.day_minute.set_text("%02d" %min) self.day_second.set_text("%02d" %sec) if tbeats: - self.day_beats.set_text("%0.2f" %tbeats) + self.day_beats.set_text("%0.0f" %tbeats) else: self.day_beats.set_text("") - self.day_maxbeats.set_text("%0.2f" %maxbeats) + self.day_maxbeats.set_text("%0.0f" %maxbeats) if average: self.day_average.set_text("%0.2f" %average) else: @@ -796,8 +796,8 @@ self.weeka_hour.set_text("%d" %hour) self.weeka_minute.set_text("%02d" %min) self.weeka_second.set_text("%02d" %sec) - self.weeka_maxbeats.set_text("%0.2f" %(maxbeats)) - self.weeka_beats.set_text("%0.2f" %(tbeats)) + self.weeka_maxbeats.set_text("%0.0f" %(maxbeats)) + self.weeka_beats.set_text("%0.0f" %(tbeats)) self.weeka_average.set_text("%0.2f" %average) self.weeka_maxspeed.set_text("%0.2f" %maxspeed) self.weeka_pace.set_text(pace) @@ -874,8 +874,8 @@ self.montha_hour.set_text("%d" %hour) self.montha_minute.set_text("%02d" %min) self.montha_second.set_text("%02d" %sec) - self.montha_maxbeats.set_text("%0.2f" %(maxbeats)) - self.montha_beats.set_text("%0.2f" %(tbeats)) + self.montha_maxbeats.set_text("%0.0f" %(maxbeats)) + self.montha_beats.set_text("%0.0f" %(tbeats)) self.montha_average.set_text("%0.2f" %average) self.montha_maxspeed.set_text("%0.2f" %maxspeed) self.montha_pace.set_text(pace) @@ -937,8 +937,8 @@ self.yeara_hour.set_text("%d" %hour) self.yeara_minute.set_text("%02d" %min) self.yeara_second.set_text("%02d" %sec) - self.yeara_beats.set_text("%0.2f" %tbeats) - self.yeara_maxbeats.set_text("%0.2f" %(maxbeats)) + self.yeara_beats.set_text("%0.0f" %tbeats) + self.yeara_maxbeats.set_text("%0.0f" %(maxbeats)) self.yeara_average.set_text("%0.2f" %average) self.yeara_maxspeed.set_text("%0.2f" %maxspeed) self.yeara_pace.set_text(pace) Modified: pytrainer/trunk/pytrainer/main.py =================================================================== --- pytrainer/trunk/pytrainer/main.py 2010-11-24 02:21:00 UTC (rev 733) +++ pytrainer/trunk/pytrainer/main.py 2010-11-24 02:26:44 UTC (rev 734) @@ -53,7 +53,7 @@ class pyTrainer: def __init__(self,filename = None, data_path = None): #Version constants - self.version ="1.7.2_svn#733" + self.version ="1.7.2_svn#734" 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. |
From: <jb...@us...> - 2010-11-24 02:21:06
|
Revision: 733 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=733&view=rev Author: jblance Date: 2010-11-24 02:21:00 +0000 (Wed, 24 Nov 2010) Log Message: ----------- Grid lines for graph functionality (to match old graphing) Modified Paths: -------------- pytrainer/trunk/pytrainer/gui/drawGraph.py pytrainer/trunk/pytrainer/gui/windowmain.py pytrainer/trunk/pytrainer/lib/activity.py pytrainer/trunk/pytrainer/main.py Modified: pytrainer/trunk/pytrainer/gui/drawGraph.py =================================================================== --- pytrainer/trunk/pytrainer/gui/drawGraph.py 2010-11-23 21:56:40 UTC (rev 732) +++ pytrainer/trunk/pytrainer/gui/drawGraph.py 2010-11-24 02:21:00 UTC (rev 733) @@ -35,7 +35,7 @@ self.ax2 = None logging.debug('<<') - def draw(self, datalist = None, box = None, figure = None, title = None, y2 = False): + def draw(self, datalist=None, box=None, figure=None, title=None, y2=False, xgrid=False, ygrid=False): ''' Draw a graph using supplied information into supplied gtk.box @@ -80,6 +80,12 @@ plt.xlabel(datalist.xlabel) if title is not None: plt.title(title) + #Display grid + if y2 and ygrid: + self.ax2.grid(True) + elif self.ax1 and ygrid: + self.ax1.grid(True) + plt.gca().xaxis.grid(xgrid) #Removed as now in legend #plt.ylabel(datalist.ylabel) @@ -190,10 +196,10 @@ for item in activity.distance_data: if activity.distance_data[item].show_on_y1: y1count += 1 - figure = self.draw(activity.distance_data[item], box=box, figure=figure, title=_title) + figure = self.draw(activity.distance_data[item], box=box, figure=figure, title=_title, xgrid=activity.x_grid, ygrid=activity.y1_grid) if activity.distance_data[item].show_on_y2: y2count += 1 - figure = self.draw(activity.distance_data[item], box=box, figure=figure, title=_title, y2=True) + figure = self.draw(activity.distance_data[item], box=box, figure=figure, title=_title, y2=True, xgrid=activity.x_grid, ygrid=activity.y2_grid) #Display lap divisions if required if activity.show_laps: figure = self.draw(activity.lap_distance, box=box, figure=figure) @@ -207,10 +213,10 @@ for item in activity.time_data: if activity.time_data[item].show_on_y1: y1count += 1 - figure = self.draw(activity.time_data[item], box=box, figure=figure, title=_title) + figure = self.draw(activity.time_data[item], box=box, figure=figure, title=_title, xgrid=activity.x_grid, ygrid=activity.y1_grid) if activity.time_data[item].show_on_y2: y2count += 1 - figure = self.draw(activity.time_data[item], box=box, figure=figure, title=_title, y2=True) + figure = self.draw(activity.time_data[item], box=box, figure=figure, title=_title, y2=True, xgrid=activity.x_grid, ygrid=activity.y2_grid) #Display lap divisions if required if activity.show_laps: figure = self.draw(activity.lap_time, box=box, figure=figure) Modified: pytrainer/trunk/pytrainer/gui/windowmain.py =================================================================== --- pytrainer/trunk/pytrainer/gui/windowmain.py 2010-11-23 21:56:40 UTC (rev 732) +++ pytrainer/trunk/pytrainer/gui/windowmain.py 2010-11-24 02:21:00 UTC (rev 733) @@ -362,6 +362,7 @@ self.hbox30.show() #Hide new graph details self.graph_data_hbox.hide() + self.hboxGraphOptions.hide() #Enable graph self.record_vbox.set_sensitive(1) self.drawarearecord.drawgraph(self.record_list,self.laps) @@ -392,20 +393,32 @@ xdistancebutton = gtk.RadioButton(label=_("Distance")) xtimebutton = gtk.RadioButton(group=xdistancebutton, label=_("Time")) xlapsbutton = gtk.CheckButton(label=_("Laps")) + y1gridbutton = gtk.CheckButton(label=_("Left Axis Grid")) + y2gridbutton = gtk.CheckButton(label=_("Right Axis Grid")) + xgridbutton = gtk.CheckButton(label=_("X Axis Grid")) #Set state of buttons if activity.x_axis == "distance": xdistancebutton.set_active(True) elif activity.x_axis == "time": xtimebutton.set_active(True) xlapsbutton.set_active(activity.show_laps) + y1gridbutton.set_active(activity.y1_grid) + y2gridbutton.set_active(activity.y2_grid) + xgridbutton.set_active(activity.x_grid) #Connect handlers to buttons xdistancebutton.connect("toggled", self.on_xaxischange, "distance", activity) xtimebutton.connect("toggled", self.on_xaxischange, "time", activity) xlapsbutton.connect("toggled", self.on_xlapschange, activity) + y1gridbutton.connect("toggled", self.on_gridchange, "y1", activity) + y2gridbutton.connect("toggled", self.on_gridchange, "y2", activity) + xgridbutton.connect("toggled", self.on_gridchange, "x", activity) #Add buttons to frame xvbox.pack_start(xdistancebutton, expand=False) xvbox.pack_start(xtimebutton, expand=False) xvbox.pack_start(xlapsbutton, expand=False) + xvbox.pack_start(y1gridbutton, expand=False) + xvbox.pack_start(y2gridbutton, expand=False) + xvbox.pack_start(xgridbutton, expand=False) xFrame.add(xvbox) #Populate axis limits frame @@ -521,8 +534,8 @@ self.graph_data_hbox.pack_start(y1Frame, expand=False, fill=False, padding=5) self.graph_data_hbox.pack_start(y2Frame, expand=False, fill=False, padding=5) self.graph_data_hbox.pack_start(limitsFrame, expand=False, fill=True, padding=5) - self.graph_data_hbox.show_all() - self.buttonGraphShowOptions.hide() + #self.graph_data_hbox.show_all() + self.hboxGraphOptions.show_all() act = self.grapher.drawActivityGraph(activity=activity, box=self.record_graph_vbox) if act.x_limits_u[0] is not None: xmin, xmax = act.x_limits_u @@ -546,7 +559,8 @@ if y2min is not None and y2max is not None: y2minlabel.set_text(str(y2min)) y2maxlabel.set_text(str(y2max)) - + + #Default to showing options self.buttonGraphShowOptions.hide() self.scrolledwindowGraphOptions.show() @@ -557,6 +571,7 @@ self.hbox30.show() #Hide new graph details self.graph_data_hbox.hide() + self.hboxGraphOptions.hide() #Remove graph vboxChildren = self.record_graph_vbox.get_children() logging.debug('Vbox has %d children %s' % (len(vboxChildren), str(vboxChildren) )) @@ -1250,6 +1265,16 @@ else: activity.show_laps = False self.actualize_recordgraph(activity) + + def on_gridchange(self, widget, axis=None, activity=None): + '''Handler for record graph grid selection changes''' + if axis == 'y1': + activity.y1_grid = not activity.y1_grid + elif axis == 'y2': + activity.y2_grid = not activity.y2_grid + elif axis == 'x': + activity.x_grid = not activity.x_grid + self.actualize_recordgraph(activity) def on_y1colorchange(self, widget, box, graphdata, activity): '''Hander for changes to y1 color selection''' Modified: pytrainer/trunk/pytrainer/lib/activity.py =================================================================== --- pytrainer/trunk/pytrainer/lib/activity.py 2010-11-23 21:56:40 UTC (rev 732) +++ pytrainer/trunk/pytrainer/lib/activity.py 2010-11-24 02:21:00 UTC (rev 733) @@ -126,6 +126,9 @@ self.x_limits_u = (None, None) self.y1_limits_u = (None, None) self.y2_limits_u = (None, None) + self.y1_grid = False + self.y2_grid = False + self.x_grid = False self.show_laps = False logging.debug("<<") Modified: pytrainer/trunk/pytrainer/main.py =================================================================== --- pytrainer/trunk/pytrainer/main.py 2010-11-23 21:56:40 UTC (rev 732) +++ pytrainer/trunk/pytrainer/main.py 2010-11-24 02:21:00 UTC (rev 733) @@ -53,7 +53,7 @@ class pyTrainer: def __init__(self,filename = None, data_path = None): #Version constants - self.version ="1.7.2_svn#731" + self.version ="1.7.2_svn#733" 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. |
From: <jb...@us...> - 2010-11-23 21:56:46
|
Revision: 732 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=732&view=rev Author: jblance Date: 2010-11-23 21:56:40 +0000 (Tue, 23 Nov 2010) Log Message: ----------- Make pace read only Modified Paths: -------------- pytrainer/trunk/glade/newrecord.glade Modified: pytrainer/trunk/glade/newrecord.glade =================================================================== --- pytrainer/trunk/glade/newrecord.glade 2010-11-23 21:12:07 UTC (rev 731) +++ pytrainer/trunk/glade/newrecord.glade 2010-11-23 21:56:40 UTC (rev 732) @@ -1,4 +1,4 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="UTF-8"?> <glade-interface> <!-- interface-requires gtk+ 2.6 --> <!-- interface-naming-policy toplevel-contextual --> @@ -10,7 +10,6 @@ <child> <widget class="GtkVBox" id="vbox2"> <property name="visible">True</property> - <property name="orientation">vertical</property> <child> <widget class="GtkScrolledWindow" id="scrolledwindowEntries"> <property name="can_focus">True</property> @@ -36,7 +35,6 @@ <child> <widget class="GtkVBox" id="vbox27"> <property name="visible">True</property> - <property name="orientation">vertical</property> <child> <widget class="GtkFrame" id="frame19"> <property name="visible">True</property> @@ -71,7 +69,7 @@ <widget class="GtkEntry" id="rcd_title"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="invisible_char">●</property> + <property name="invisible_char">●</property> <signal name="changed" handler="on_rcd_title_changed"/> </widget> <packing> @@ -98,7 +96,7 @@ <property name="visible">True</property> <property name="can_focus">True</property> <property name="editable">False</property> - <property name="invisible_char">●</property> + <property name="invisible_char">●</property> </widget> <packing> <property name="left_attach">1</property> @@ -532,7 +530,7 @@ <widget class="GtkEntry" id="rcd_maxvel"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="invisible_char">●</property> + <property name="invisible_char">●</property> <property name="width_chars">7</property> </widget> <packing> @@ -575,7 +573,7 @@ <widget class="GtkEntry" id="rcd_average"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="invisible_char">●</property> + <property name="invisible_char">●</property> <property name="width_chars">7</property> </widget> <packing> @@ -621,7 +619,6 @@ <child> <widget class="GtkVBox" id="vbox26"> <property name="visible">True</property> - <property name="orientation">vertical</property> <child> <widget class="GtkFrame" id="frame20"> <property name="visible">True</property> @@ -654,8 +651,9 @@ <child> <widget class="GtkEntry" id="rcd_maxpace"> <property name="visible">True</property> + <property name="sensitive">False</property> <property name="can_focus">True</property> - <property name="invisible_char">●</property> + <property name="invisible_char">●</property> <property name="width_chars">7</property> </widget> <packing> @@ -682,8 +680,9 @@ <child> <widget class="GtkEntry" id="rcd_pace"> <property name="visible">True</property> + <property name="sensitive">False</property> <property name="can_focus">True</property> - <property name="invisible_char">●</property> + <property name="invisible_char">●</property> <property name="width_chars">7</property> </widget> <packing> @@ -763,7 +762,7 @@ <widget class="GtkEntry" id="rcd_upositive"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="invisible_char">●</property> + <property name="invisible_char">●</property> <property name="width_chars">7</property> </widget> <packing> @@ -791,7 +790,7 @@ <widget class="GtkEntry" id="rcd_unegative"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="invisible_char">●</property> + <property name="invisible_char">●</property> <property name="width_chars">7</property> </widget> <packing> @@ -873,7 +872,7 @@ <widget class="GtkEntry" id="rcd_maxbeats"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="invisible_char">●</property> + <property name="invisible_char">●</property> <property name="width_chars">7</property> </widget> <packing> @@ -913,7 +912,7 @@ <widget class="GtkEntry" id="rcd_calories"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="invisible_char">●</property> + <property name="invisible_char">●</property> <property name="width_chars">7</property> </widget> <packing> @@ -1273,5 +1272,3 @@ </child> </widget> </glade-interface> - - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jb...@us...> - 2010-11-23 21:12:13
|
Revision: 731 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=731&view=rev Author: jblance Date: 2010-11-23 21:12:07 +0000 (Tue, 23 Nov 2010) Log Message: ----------- Fix athlete view and edit Modified Paths: -------------- pytrainer/trunk/pytrainer/gui/windowmain.py pytrainer/trunk/pytrainer/main.py Modified: pytrainer/trunk/pytrainer/gui/windowmain.py =================================================================== --- pytrainer/trunk/pytrainer/gui/windowmain.py 2010-11-23 20:34:28 UTC (rev 730) +++ pytrainer/trunk/pytrainer/gui/windowmain.py 2010-11-23 21:12:07 UTC (rev 731) @@ -1462,7 +1462,7 @@ self.selected_view="month" elif page == 4: self.selected_view="year" - elif page == 6: + elif page == 5: self.selected_view="athlete" else: self.selected_view="record" Modified: pytrainer/trunk/pytrainer/main.py =================================================================== --- pytrainer/trunk/pytrainer/main.py 2010-11-23 20:34:28 UTC (rev 730) +++ pytrainer/trunk/pytrainer/main.py 2010-11-23 21:12:07 UTC (rev 731) @@ -53,7 +53,7 @@ class pyTrainer: def __init__(self,filename = None, data_path = None): #Version constants - self.version ="1.7.2_svn#730" + self.version ="1.7.2_svn#731" 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. |
From: <jb...@us...> - 2010-11-23 20:34:34
|
Revision: 730 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=730&view=rev Author: jblance Date: 2010-11-23 20:34:28 +0000 (Tue, 23 Nov 2010) Log Message: ----------- Reduce size of graph options, fix bug where graph controls disappear after viewing map Modified Paths: -------------- pytrainer/trunk/glade/pytrainer.glade pytrainer/trunk/pytrainer/gui/windowmain.py pytrainer/trunk/pytrainer/main.py Modified: pytrainer/trunk/glade/pytrainer.glade =================================================================== --- pytrainer/trunk/glade/pytrainer.glade 2010-11-23 01:51:18 UTC (rev 729) +++ pytrainer/trunk/glade/pytrainer.glade 2010-11-23 20:34:28 UTC (rev 730) @@ -1156,7 +1156,7 @@ <property name="visible">True</property> <child> <widget class="GtkScrolledWindow" id="scrolledwindowGraphOptions"> - <property name="height_request">200</property> + <property name="height_request">100</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="hscrollbar_policy">automatic</property> @@ -1165,7 +1165,7 @@ <widget class="GtkViewport" id="viewportGraphOptions"> <property name="visible">True</property> <property name="resize_mode">queue</property> - <property name="vadjustment">0 0 198 19.800000000000001 178.20000000000002 198</property> + <property name="vadjustment">0 0 1 0.10000000000000001 0.90000000000000002 1</property> <child> <widget class="GtkHBox" id="graph_data_hbox"> <property name="visible">True</property> Modified: pytrainer/trunk/pytrainer/gui/windowmain.py =================================================================== --- pytrainer/trunk/pytrainer/gui/windowmain.py 2010-11-23 01:51:18 UTC (rev 729) +++ pytrainer/trunk/pytrainer/gui/windowmain.py 2010-11-23 20:34:28 UTC (rev 730) @@ -370,7 +370,6 @@ logging.debug("Using the new TEST graphing approach") #Hide current drop down boxes self.hbox30.hide() - #Show new graph details self.graph_data_hbox.hide() #Enable graph self.record_vbox.set_sensitive(1) @@ -547,6 +546,11 @@ if y2min is not None and y2max is not None: y2minlabel.set_text(str(y2min)) y2maxlabel.set_text(str(y2max)) + + #Default to showing options + self.buttonGraphShowOptions.hide() + self.scrolledwindowGraphOptions.show() + self.buttonGraphHideOptions.show() else: logging.debug("Activity has no GPX data") #Show drop down boxes Modified: pytrainer/trunk/pytrainer/main.py =================================================================== --- pytrainer/trunk/pytrainer/main.py 2010-11-23 01:51:18 UTC (rev 729) +++ pytrainer/trunk/pytrainer/main.py 2010-11-23 20:34:28 UTC (rev 730) @@ -53,7 +53,7 @@ class pyTrainer: def __init__(self,filename = None, data_path = None): #Version constants - self.version ="1.7.2_svn#729" + self.version ="1.7.2_svn#730" 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. |
From: <jb...@us...> - 2010-11-23 01:51:24
|
Revision: 729 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=729&view=rev Author: jblance Date: 2010-11-23 01:51:18 +0000 (Tue, 23 Nov 2010) Log Message: ----------- Fix summary screens to update correctly with record add and deletes Modified Paths: -------------- pytrainer/trunk/pytrainer/gui/popupmenu.py pytrainer/trunk/pytrainer/gui/windowmain.py pytrainer/trunk/pytrainer/main.py Modified: pytrainer/trunk/pytrainer/gui/popupmenu.py =================================================================== --- pytrainer/trunk/pytrainer/gui/popupmenu.py 2010-11-23 01:45:14 UTC (rev 728) +++ pytrainer/trunk/pytrainer/gui/popupmenu.py 2010-11-23 01:51:18 UTC (rev 729) @@ -31,7 +31,7 @@ self.popup.popup( None, None, None, event_button, time) def on_editrecord_activate(self,widget): - self.parent.parent.editRecord(self.id_record, self.parent.selected_view) + self.parent.parent.editRecord(self.id_record, view=self.parent.selected_view) def on_showclassic_activate(self,widget): self.parent.classicview_item.set_active(True) @@ -40,4 +40,4 @@ self.parent.parent.refreshGraphView("record") def on_remove_activate(self,widget): - self.parent.parent.removeRecord(self.id_record) + self.parent.parent.removeRecord(self.id_record, view=self.parent.selected_view) Modified: pytrainer/trunk/pytrainer/gui/windowmain.py =================================================================== --- pytrainer/trunk/pytrainer/gui/windowmain.py 2010-11-23 01:45:14 UTC (rev 728) +++ pytrainer/trunk/pytrainer/gui/windowmain.py 2010-11-23 01:51:18 UTC (rev 729) @@ -1429,7 +1429,7 @@ #print 'New athlete' self.on_athleteTreeView_edit( None, None) else: - self.parent.newRecord() + self.parent.newRecord(view=self.selected_view) def on_edituser_activate(self,widget): self.parent.editProfile() Modified: pytrainer/trunk/pytrainer/main.py =================================================================== --- pytrainer/trunk/pytrainer/main.py 2010-11-23 01:45:14 UTC (rev 728) +++ pytrainer/trunk/pytrainer/main.py 2010-11-23 01:51:18 UTC (rev 729) @@ -53,7 +53,7 @@ class pyTrainer: def __init__(self,filename = None, data_path = None): #Version constants - self.version ="1.7.2_svn#728" + self.version ="1.7.2_svn#729" self.DB_version = 6 #Process command line options self.startup_options = self.get_options() @@ -404,13 +404,15 @@ self.windowmain.addExtension(txtbutton) logging.debug('<<') - def newRecord(self,title=None,distance=None,time=None,upositive=None,unegative=None,bpm=None,calories=None,date=None,comment=None): + def newRecord(self,title=None,distance=None,time=None,upositive=None,unegative=None,bpm=None,calories=None,date=None,comment=None,view=None): logging.debug('>>') list_sport = self.profile.getSportList() if date == None: date = self.date.getDate() self.record.newRecord(list_sport, date, title, distance, time, upositive, unegative, bpm, calories, comment) self.refreshListRecords() + if view is not None: + self.refreshGraphView(view) logging.debug('<<') def editRecord(self, id_record, view=None): @@ -423,7 +425,7 @@ self.refreshGraphView(view) logging.debug('<<') - def removeRecord(self, id_record, confirm = False): + def removeRecord(self, id_record, confirm = False, view=None): logging.debug('>>') if confirm: self.record.removeRecord(id_record) @@ -434,6 +436,8 @@ warning.set_text(msg) warning.run() self.refreshListRecords() + if view is not None: + self.refreshGraphView(view) logging.debug('<<') def removeWaypoint(self,id_waypoint, confirm = False): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jb...@us...> - 2010-11-23 01:45:21
|
Revision: 728 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=728&view=rev Author: jblance Date: 2010-11-23 01:45:14 +0000 (Tue, 23 Nov 2010) Log Message: ----------- Fix sport filtering to work with non consecutive sport_ids Modified Paths: -------------- pytrainer/trunk/pytrainer/gui/windowmain.py pytrainer/trunk/pytrainer/main.py pytrainer/trunk/pytrainer/record.py Modified: pytrainer/trunk/pytrainer/gui/windowmain.py =================================================================== --- pytrainer/trunk/pytrainer/gui/windowmain.py 2010-11-22 22:32:44 UTC (rev 727) +++ pytrainer/trunk/pytrainer/gui/windowmain.py 2010-11-23 01:45:14 UTC (rev 728) @@ -1439,8 +1439,8 @@ def on_sportlist_changed(self,widget): logging.debug("--") - if self.sportlist.get_active() != self.activeSport: - self.activeSport = self.sportlist.get_active() + if self.sportlist.get_active_text() != self.activeSport: + self.activeSport = self.sportlist.get_active_text() self.parent.refreshListRecords() self.parent.refreshGraphView(self.selected_view) else: Modified: pytrainer/trunk/pytrainer/main.py =================================================================== --- pytrainer/trunk/pytrainer/main.py 2010-11-22 22:32:44 UTC (rev 727) +++ pytrainer/trunk/pytrainer/main.py 2010-11-23 01:45:14 UTC (rev 728) @@ -53,7 +53,7 @@ class pyTrainer: def __init__(self,filename = None, data_path = None): #Version constants - self.version ="1.7.2_svn#727" + self.version ="1.7.2_svn#728" self.DB_version = 6 #Process command line options self.startup_options = self.get_options() @@ -235,20 +235,23 @@ elif view=="day": logging.debug('day view') sport = self.windowmain.activeSport - record_list = self.record.getrecordList(date_selected, sport) + sport_id = self.record.getSportId(sport) + record_list = self.record.getrecordList(date_selected, sport_id) self.windowmain.actualize_dayview(record_list=record_list) #selected,iter = self.windowmain.recordTreeView.get_selection().get_selected() elif view=="week": logging.debug('week view') date_ini, date_end = self.date.getWeekInterval(date_selected, self.profile.prf_us_system) sport = self.windowmain.activeSport - record_list = self.record.getrecordPeriod(date_ini, date_end, sport) + sport_id = self.record.getSportId(sport) + record_list = self.record.getrecordPeriod(date_ini, date_end, sport_id) self.windowmain.actualize_weekview(record_list, date_ini, date_end) elif view=="month": logging.debug('month view') date_ini, date_end = self.date.getMonthInterval(date_selected) sport = self.windowmain.activeSport - record_list = self.record.getrecordPeriodSport(date_ini, date_end,sport) + sport_id = self.record.getSportId(sport) + record_list = self.record.getrecordPeriodSport(date_ini, date_end,sport_id) nameMonth, daysInMonth = self.date.getNameMonth(date_selected) self.windowmain.actualize_monthview(record_list, nameMonth) self.windowmain.actualize_monthgraph(record_list, daysInMonth) @@ -256,8 +259,9 @@ logging.debug('year view') date_ini, date_end = self.date.getYearInterval(date_selected) sport = self.windowmain.activeSport + sport_id = self.record.getSportId(sport) year = self.date.getYear(date_selected) - record_list = self.record.getrecordPeriodSport(date_ini, date_end,sport) + record_list = self.record.getrecordPeriodSport(date_ini, date_end,sport_id) self.windowmain.actualize_yearview(record_list, year) self.windowmain.actualize_yeargraph(record_list) elif view=="listview": @@ -311,7 +315,8 @@ self.refreshListView(self.windowmain.listsearch.condition) #Refresh list records date = self.date.getDate() - id_sport = self.windowmain.activeSport + sport = self.windowmain.activeSport + id_sport = self.record.getSportId(sport) record_ids = self.record.getrecordList(date, id_sport) self.windowmain.actualize_recordTreeView(record_ids) #Mark the monthly calendar to show which days have activity? Modified: pytrainer/trunk/pytrainer/record.py =================================================================== --- pytrainer/trunk/pytrainer/record.py 2010-11-22 22:32:44 UTC (rev 727) +++ pytrainer/trunk/pytrainer/record.py 2010-11-23 01:45:14 UTC (rev 728) @@ -427,7 +427,7 @@ add: attribute to add or not the sport to db returns: id_sports from provided sport""" logging.debug('>>') - sport_id=1 + sport_id=None if sport == "" or sport is None: return sport_id try: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jb...@us...> - 2010-11-22 22:32:50
|
Revision: 727 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=727&view=rev Author: jblance Date: 2010-11-22 22:32:44 +0000 (Mon, 22 Nov 2010) Log Message: ----------- Add scrolling to graph options Modified Paths: -------------- pytrainer/trunk/glade/pytrainer.glade pytrainer/trunk/pytrainer/gui/windowmain.py pytrainer/trunk/pytrainer/main.py Modified: pytrainer/trunk/glade/pytrainer.glade =================================================================== --- pytrainer/trunk/glade/pytrainer.glade 2010-11-22 22:13:43 UTC (rev 726) +++ pytrainer/trunk/glade/pytrainer.glade 2010-11-22 22:32:44 UTC (rev 727) @@ -848,7 +848,6 @@ <property name="visible">True</property> <property name="xalign">0</property> <property name="yalign">0</property> - <property name="label" translatable="yes"></property> <property name="use_markup">True</property> <property name="wrap">True</property> </widget> @@ -860,7 +859,16 @@ </packing> </child> <child> - <placeholder/> + <widget class="GtkLabel" id="record_duration"> + <property name="visible">True</property> + <property name="xalign">1</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> </child> <child> <placeholder/> @@ -926,16 +934,7 @@ <placeholder/> </child> <child> - <widget class="GtkLabel" id="record_duration"> - <property name="visible">True</property> - <property name="xalign">1</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - </packing> + <placeholder/> </child> </widget> <packing> @@ -1153,18 +1152,45 @@ </packing> </child> <child> - <widget class="GtkHBox" id="graph_data_hbox"> + <widget class="GtkHBox" id="hboxGraphOptions"> <property name="visible">True</property> <child> - <placeholder/> + <widget class="GtkScrolledWindow" id="scrolledwindowGraphOptions"> + <property name="height_request">200</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">automatic</property> + <property name="vscrollbar_policy">automatic</property> + <child> + <widget class="GtkViewport" id="viewportGraphOptions"> + <property name="visible">True</property> + <property name="resize_mode">queue</property> + <property name="vadjustment">0 0 198 19.800000000000001 178.20000000000002 198</property> + <child> + <widget class="GtkHBox" id="graph_data_hbox"> + <property name="visible">True</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </widget> + </child> + </widget> + </child> + </widget> + <packing> + <property name="position">0</property> + </packing> </child> <child> - <placeholder/> - </child> - <child> - <placeholder/> - </child> - <child> <widget class="GtkVBox" id="vbox2"> <property name="visible">True</property> <child> @@ -1208,13 +1234,12 @@ <packing> <property name="expand">False</property> <property name="pack_type">end</property> - <property name="position">0</property> + <property name="position">1</property> </packing> </child> </widget> <packing> <property name="expand">False</property> - <property name="fill">False</property> <property name="position">1</property> </packing> </child> @@ -5295,7 +5320,7 @@ </widget> </child> <child> - <widget class="GtkLabel" id="label26"> + <widget class="GtkLabel" id="label14"> <property name="visible">True</property> <property name="label" translatable="yes"><b>History</b></property> <property name="use_markup">True</property> @@ -5821,7 +5846,7 @@ </widget> </child> <child> - <widget class="GtkLabel" id="label14"> + <widget class="GtkLabel" id="label15"> <property name="visible">True</property> <property name="label">label162</property> </widget> Modified: pytrainer/trunk/pytrainer/gui/windowmain.py =================================================================== --- pytrainer/trunk/pytrainer/gui/windowmain.py 2010-11-22 22:13:43 UTC (rev 726) +++ pytrainer/trunk/pytrainer/gui/windowmain.py 2010-11-22 22:32:44 UTC (rev 727) @@ -1350,18 +1350,20 @@ def on_buttonGraphHideOptions_clicked(self, widget): logging.debug('on_buttonGraphHideOptions_clicked') self.buttonGraphHideOptions.hide() - for child in self.graph_data_hbox.get_children(): - if isinstance(child, gtk.Frame): - child.hide() + self.scrolledwindowGraphOptions.hide() + #for child in self.graph_data_hbox.get_children(): + # if isinstance(child, gtk.Frame): + # child.hide() self.buttonGraphShowOptions.show() def on_buttonGraphShowOptions_clicked(self, widget): logging.debug('on_buttonGraphShowOptions_clicked') self.buttonGraphShowOptions.hide() - for child in self.graph_data_hbox.get_children(): - if isinstance(child, gtk.Frame): - child.show() + #for child in self.graph_data_hbox.get_children(): + # if isinstance(child, gtk.Frame): + # child.show() + self.scrolledwindowGraphOptions.show() self.buttonGraphHideOptions.show() def on_buttonRedrawMap_clicked(self, widget): Modified: pytrainer/trunk/pytrainer/main.py =================================================================== --- pytrainer/trunk/pytrainer/main.py 2010-11-22 22:13:43 UTC (rev 726) +++ pytrainer/trunk/pytrainer/main.py 2010-11-22 22:32:44 UTC (rev 727) @@ -53,7 +53,7 @@ class pyTrainer: def __init__(self,filename = None, data_path = None): #Version constants - self.version ="1.7.2_svn#726" + self.version ="1.7.2_svn#727" 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. |
From: <jb...@us...> - 2010-11-22 22:13:49
|
Revision: 726 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=726&view=rev Author: jblance Date: 2010-11-22 22:13:43 +0000 (Mon, 22 Nov 2010) Log Message: ----------- Make new graphing approach the default Modified Paths: -------------- pytrainer/trunk/pytrainer/main.py Modified: pytrainer/trunk/pytrainer/main.py =================================================================== --- pytrainer/trunk/pytrainer/main.py 2010-11-22 22:05:41 UTC (rev 725) +++ pytrainer/trunk/pytrainer/main.py 2010-11-22 22:13:43 UTC (rev 726) @@ -53,7 +53,7 @@ class pyTrainer: def __init__(self,filename = None, data_path = None): #Version constants - self.version ="1.7.2_svn#725" + self.version ="1.7.2_svn#726" self.DB_version = 6 #Process command line options self.startup_options = self.get_options() @@ -121,13 +121,14 @@ For more help on valid options try: %prog -h ''' parser = OptionParser(usage=usage) - parser.set_defaults(log_level=logging.ERROR, validate=False, equip=False, newgraph=False, conf_dir=None) + parser.set_defaults(log_level=logging.ERROR, validate=False, equip=False, newgraph=True, conf_dir=None) parser.add_option("-d", "--debug", action="store_const", const=logging.DEBUG, dest="log_level", help="enable logging at debug level") parser.add_option("-i", "--info", action="store_const", const=logging.INFO, dest="log_level", help="enable logging at info level") parser.add_option("-w", "--warn", action="store_const", const=logging.WARNING, dest="log_level", help="enable logging at warning level") parser.add_option("--valid", action="store_true", dest="validate", help="enable validation of files imported by plugins (details at info or debug logging level) - note plugin must support validation") parser.add_option("--check", action="store_true", dest="check", help="triggers database (only sqlite based) and configuration file sanity checks, adding fields if necessary. Backup of database is done before any change. Details at info or debug logging level") - parser.add_option("--newgraph", action="store_true", dest="newgraph", help="EXPERIMENTAL: new graphing approach") + parser.add_option("--oldgraph", action="store_false", dest="newgraph", help="Turn off new graphing approach") + parser.add_option("--newgraph", action="store_true", dest="newgraph", help="Deprecated Option: Turn on new graphing approach") parser.add_option("--confdir", dest="conf_dir", help="Specify the directory where application configuration will be stored.") (options, args) = parser.parse_args() return options This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jb...@us...> - 2010-11-22 22:05:47
|
Revision: 725 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=725&view=rev Author: jblance Date: 2010-11-22 22:05:41 +0000 (Mon, 22 Nov 2010) Log Message: ----------- Update record summary after edit - ticket 79 Modified Paths: -------------- pytrainer/trunk/pytrainer/gui/popupmenu.py pytrainer/trunk/pytrainer/gui/windowmain.py pytrainer/trunk/pytrainer/main.py Modified: pytrainer/trunk/pytrainer/gui/popupmenu.py =================================================================== --- pytrainer/trunk/pytrainer/gui/popupmenu.py 2010-11-22 21:36:15 UTC (rev 724) +++ pytrainer/trunk/pytrainer/gui/popupmenu.py 2010-11-22 22:05:41 UTC (rev 725) @@ -31,7 +31,7 @@ self.popup.popup( None, None, None, event_button, time) def on_editrecord_activate(self,widget): - self.parent.parent.editRecord(self.id_record) + self.parent.parent.editRecord(self.id_record, self.parent.selected_view) def on_showclassic_activate(self,widget): self.parent.classicview_item.set_active(True) Modified: pytrainer/trunk/pytrainer/gui/windowmain.py =================================================================== --- pytrainer/trunk/pytrainer/gui/windowmain.py 2010-11-22 21:36:15 UTC (rev 724) +++ pytrainer/trunk/pytrainer/gui/windowmain.py 2010-11-22 22:05:41 UTC (rev 725) @@ -641,9 +641,9 @@ distance = km2miles(distance) maxspeed = km2miles(maxspeed) - if tbeats > 0: + if tbeats > 0 and timeinseconds > 0: tbeats = tbeats/(timeinseconds/60/60) - if distance > 0: + if distance > 0 and timeinseconds > 0: average = distance/(timeinseconds/60/60) if maxspeed > 0: maxpace = "%d:%02d" %((3600/maxspeed)/60,(3600/maxspeed)%60) @@ -656,9 +656,15 @@ self.day_hour.set_text("%d" %hour) self.day_minute.set_text("%02d" %min) self.day_second.set_text("%02d" %sec) - self.day_beats.set_text("%0.2f" %tbeats) + if tbeats: + self.day_beats.set_text("%0.2f" %tbeats) + else: + self.day_beats.set_text("") self.day_maxbeats.set_text("%0.2f" %maxbeats) - self.day_average.set_text("%0.2f" %average) + if average: + self.day_average.set_text("%0.2f" %average) + else: + self.day_average.set_text("") self.day_maxspeed.set_text("%0.2f" %maxspeed) self.day_pace.set_text("%s" %pace) self.day_maxpace.set_text("%s" %maxpace) @@ -1406,7 +1412,7 @@ def on_edit_clicked(self,widget): selected,iter = self.recordTreeView.get_selection().get_selected() id_record = selected.get_value(iter,0) - self.parent.editRecord(id_record) + self.parent.editRecord(id_record, self.selected_view) def on_remove_clicked(self,widget): selected,iter = self.recordTreeView.get_selection().get_selected() @@ -1700,7 +1706,7 @@ def on_recordTree_clicked(self,widget,num,num2): selected,iter = self.recordTreeView.get_selection().get_selected() - self.parent.editRecord(selected.get_value(iter,0)) + self.parent.editRecord(selected.get_value(iter,0), self.selected_view) ### athleteview events ### def on_athleteTreeView_button_press_event(self, treeview, event): Modified: pytrainer/trunk/pytrainer/main.py =================================================================== --- pytrainer/trunk/pytrainer/main.py 2010-11-22 21:36:15 UTC (rev 724) +++ pytrainer/trunk/pytrainer/main.py 2010-11-22 22:05:41 UTC (rev 725) @@ -53,7 +53,7 @@ class pyTrainer: def __init__(self,filename = None, data_path = None): #Version constants - self.version ="1.7.2_svn#724" + self.version ="1.7.2_svn#725" self.DB_version = 6 #Process command line options self.startup_options = self.get_options() @@ -407,12 +407,14 @@ self.refreshListRecords() logging.debug('<<') - def editRecord(self, id_record): + def editRecord(self, id_record, view=None): logging.debug('>>') list_sport = self.profile.getSportList() logging.debug('id_record: '+str(id_record)+' | list_sport: '+str(list_sport)) self.record.editRecord(id_record,list_sport) self.refreshListRecords() + if view is not None: + self.refreshGraphView(view) logging.debug('<<') def removeRecord(self, id_record, confirm = False): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jb...@us...> - 2010-11-22 21:36:21
|
Revision: 724 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=724&view=rev Author: jblance Date: 2010-11-22 21:36:15 +0000 (Mon, 22 Nov 2010) Log Message: ----------- Fix to stop crash on editing record with empty distance - ticket 73 Modified Paths: -------------- pytrainer/trunk/pytrainer/gui/windowrecord.py pytrainer/trunk/pytrainer/lib/uc.py pytrainer/trunk/pytrainer/main.py Modified: pytrainer/trunk/pytrainer/gui/windowrecord.py =================================================================== --- pytrainer/trunk/pytrainer/gui/windowrecord.py 2010-11-22 02:00:38 UTC (rev 723) +++ pytrainer/trunk/pytrainer/gui/windowrecord.py 2010-11-22 21:36:15 UTC (rev 724) @@ -348,7 +348,10 @@ #self.rcd_distance.set_text("%.2f"%activity.distance) #myset_text(self.rcd_distance, 'distance', activity.distance, us=self.us, round=2) - self.rcd_distance.set_text("%.2f" %self.uc.distance(activity.distance)) + if activity.distance is not None: + self.rcd_distance.set_text("%.2f" %self.uc.distance(activity.distance)) + else: + self.rcd_distance.set_text("") self.rcd_average.set_text("%.2f" %self.uc.speed(activity.average)) self.rcd_calories.set_text("%s"%activity.calories) self.rcd_beats.set_text("%s"%activity.beats) Modified: pytrainer/trunk/pytrainer/lib/uc.py =================================================================== --- pytrainer/trunk/pytrainer/lib/uc.py 2010-11-22 02:00:38 UTC (rev 723) +++ pytrainer/trunk/pytrainer/lib/uc.py 2010-11-22 21:36:15 UTC (rev 724) @@ -61,7 +61,7 @@ """ Gives value of physical quantity (metric) in users system""" try: _val = float(value) - except ValueError: + except (ValueError, TypeError): return None if self.us: return _val * uc_factors[quantity] @@ -72,7 +72,7 @@ """ Takes value (users system) and convert to metric (sys)""" try: _val = float(value) - except ValueError: + except (ValueError, TypeError): return None if self.us: return _val / uc_factors[quantity] Modified: pytrainer/trunk/pytrainer/main.py =================================================================== --- pytrainer/trunk/pytrainer/main.py 2010-11-22 02:00:38 UTC (rev 723) +++ pytrainer/trunk/pytrainer/main.py 2010-11-22 21:36:15 UTC (rev 724) @@ -53,7 +53,7 @@ class pyTrainer: def __init__(self,filename = None, data_path = None): #Version constants - self.version ="1.7.2_svn#722" + self.version ="1.7.2_svn#724" 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. |
From: <jb...@us...> - 2010-11-22 02:00:44
|
Revision: 723 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=723&view=rev Author: jblance Date: 2010-11-22 02:00:38 +0000 (Mon, 22 Nov 2010) Log Message: ----------- Stop preferences sport list edit button disabling dialog buttons if no sport is selected - ticket 75 Modified Paths: -------------- pytrainer/trunk/pytrainer/gui/windowprofile.py Modified: pytrainer/trunk/pytrainer/gui/windowprofile.py =================================================================== --- pytrainer/trunk/pytrainer/gui/windowprofile.py 2010-11-21 23:26:35 UTC (rev 722) +++ pytrainer/trunk/pytrainer/gui/windowprofile.py 2010-11-22 02:00:38 UTC (rev 723) @@ -178,6 +178,7 @@ 3, max_pace, ) self.sportTreeView.set_model(store) + self.sportTreeView.set_cursor(0) #self.sportlistbutton.hide() self.sportlist.show() elif frame == 5: #Startup Parameters page selected @@ -342,9 +343,9 @@ self.sportlist.show() def on_editsport_clicked(self,widget): - self.buttonbox.set_sensitive(0) selected,iter = self.sportTreeView.get_selection().get_selected() if iter: + self.buttonbox.set_sensitive(0) sport = selected.get_value(iter,0) name,met,weight,maxpace = self.parent.getSportInfo(sport) self.editsportentry.set_text(sport) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jb...@us...> - 2010-11-21 23:26:41
|
Revision: 722 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=722&view=rev Author: jblance Date: 2010-11-21 23:26:35 +0000 (Sun, 21 Nov 2010) Log Message: ----------- Fix mysql code to match changes to sqlite tablelist handling Modified Paths: -------------- pytrainer/trunk/pytrainer/lib/mysqlUtils.py pytrainer/trunk/pytrainer/main.py Modified: pytrainer/trunk/pytrainer/lib/mysqlUtils.py =================================================================== --- pytrainer/trunk/pytrainer/lib/mysqlUtils.py 2010-11-21 22:50:28 UTC (rev 721) +++ pytrainer/trunk/pytrainer/lib/mysqlUtils.py 2010-11-21 23:26:35 UTC (rev 722) @@ -76,7 +76,11 @@ self.db.query("create database %s" %self.ddbb) def getTableList(self): - return self.freeExec('show tables') + tables = [] + result = self.freeExec('show tables') + for row in result: + tables.append(row[0]) + return tables def createTableDefault(self,tableName,columns): ''' Modified: pytrainer/trunk/pytrainer/main.py =================================================================== --- pytrainer/trunk/pytrainer/main.py 2010-11-21 22:50:28 UTC (rev 721) +++ pytrainer/trunk/pytrainer/main.py 2010-11-21 23:26:35 UTC (rev 722) @@ -53,7 +53,7 @@ class pyTrainer: def __init__(self,filename = None, data_path = None): #Version constants - self.version ="1.7.2_svn#721" + self.version ="1.7.2_svn#722" 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. |
From: <jb...@us...> - 2010-11-21 22:50:34
|
Revision: 721 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=721&view=rev Author: jblance Date: 2010-11-21 22:50:28 +0000 (Sun, 21 Nov 2010) Log Message: ----------- Add average speed per lap and heartrate zones to graphing Modified Paths: -------------- pytrainer/trunk/pytrainer/gui/drawGraph.py pytrainer/trunk/pytrainer/gui/windowmain.py pytrainer/trunk/pytrainer/lib/activity.py pytrainer/trunk/pytrainer/lib/graphdata.py pytrainer/trunk/pytrainer/main.py Modified: pytrainer/trunk/pytrainer/gui/drawGraph.py =================================================================== --- pytrainer/trunk/pytrainer/gui/drawGraph.py 2010-11-21 21:35:00 UTC (rev 720) +++ pytrainer/trunk/pytrainer/gui/drawGraph.py 2010-11-21 22:50:28 UTC (rev 721) @@ -111,6 +111,15 @@ else: self.ax2.axvspan(datalist.x_values[i], datalist.x_values[i]+datalist.bar_widths[i], alpha=0.15, facecolor=datalist.y2linecolor) i += 1 + elif datalist.graphType == "hspan": + i = 0 + while i < len(datalist.x_values): + #print datalist.x_values[i] , datalist.y_values[i], datalist.labels[i], datalist.colors[i] + if not y2: + self.ax1.axhspan(datalist.x_values[i], datalist.y_values[i], alpha=0.25, facecolor=datalist.colors[i], label=datalist.labels[i]) + else: + self.ax2.axhspan(datalist.x_values[i], datalist.y_values[i], alpha=0.25, facecolor=datalist.colors[i], label=datalist.labels[i]) + i += 1 elif datalist.graphType == "date": if not y2: self.ax1.plot_date(datalist.x_values, datalist.y_values, color=datalist.linecolor, label=datalist.ylabel, alpha=0.5) Modified: pytrainer/trunk/pytrainer/gui/windowmain.py =================================================================== --- pytrainer/trunk/pytrainer/gui/windowmain.py 2010-11-21 21:35:00 UTC (rev 720) +++ pytrainer/trunk/pytrainer/gui/windowmain.py 2010-11-21 22:50:28 UTC (rev 721) @@ -485,27 +485,35 @@ y1button.connect("toggled", self.on_y1change, y1box, graphdata, activity) #Attach button to container y1box.attach(y1button, 0, 1, row, row+1, xoptions=gtk.EXPAND|gtk.FILL) - #Create a color choser - y1color = gtk.ColorButton() - #Set color to current activity color - _color = gtk.gdk.color_parse(data[graphdata].linecolor) - y1color.set_color(_color) - #Connect handler for color state changes - y1color.connect("color-set", self.on_y1colorchange, y1box, graphdata, activity) - #Attach to container - y1box.attach(y1color, 1, 2, row, row+1) + if data[graphdata].linecolor is not None: + #Create a color choser + y1color = gtk.ColorButton() + #Set color to current activity color + _color = gtk.gdk.color_parse(data[graphdata].linecolor) + y1color.set_color(_color) + #Connect handler for color state changes + y1color.connect("color-set", self.on_y1colorchange, y1box, graphdata, activity) + #Attach to container + y1box.attach(y1color, 1, 2, row, row+1) + else: + blanklabel = gtk.Label("") + y1box.attach(blanklabel, 1, 2, row, row+1) #Second Y axis y2button = gtk.CheckButton(label=data[graphdata].title) y2button.set_active(data[graphdata].show_on_y2) y2button.connect("toggled", self.on_y2change, y2box, graphdata, activity) y2box.attach(y2button, 0, 1, row, row+1, xoptions=gtk.EXPAND|gtk.FILL) - y2color = gtk.ColorButton() - _color = gtk.gdk.color_parse(data[graphdata].y2linecolor) - y2color.set_color(_color) - y2color.connect("color-set", self.on_y2colorchange, y2box, graphdata, activity) - #Attach to container - y2box.attach(y2color, 1, 2, row, row+1) + if data[graphdata].y2linecolor is not None: + y2color = gtk.ColorButton() + _color = gtk.gdk.color_parse(data[graphdata].y2linecolor) + y2color.set_color(_color) + y2color.connect("color-set", self.on_y2colorchange, y2box, graphdata, activity) + #Attach to container + y2box.attach(y2color, 1, 2, row, row+1) + else: + blanklabel = gtk.Label("") + y2box.attach(blanklabel, 1, 2, row, row+1) row += 1 y1Frame.add(y1box) Modified: pytrainer/trunk/pytrainer/lib/activity.py =================================================================== --- pytrainer/trunk/pytrainer/lib/activity.py 2010-11-21 21:35:00 UTC (rev 720) +++ pytrainer/trunk/pytrainer/lib/activity.py 2010-11-21 22:50:28 UTC (rev 721) @@ -316,6 +316,17 @@ self.time_data['pace_lap'] = GraphData(title=title, xlabel=xlabel, ylabel=ylabel) self.time_data['pace_lap'].set_color('#99CCFF', '#99CCFF') self.time_data['pace_lap'].graphType = "bar" + #Speed + title=_("Speed by Lap") + xlabel="%s (%s)" % (_('Distance'), self.distance_unit) + ylabel="%s (%s)" % (_('Speed'), self.speed_unit) + self.distance_data['speed_lap'] = GraphData(title=title, xlabel=xlabel, ylabel=ylabel) + self.distance_data['speed_lap'].set_color('#336633', '#336633') + self.distance_data['speed_lap'].graphType = "bar" + xlabel=_("Time (seconds)") + self.time_data['speed_lap'] = GraphData(title=title, xlabel=xlabel, ylabel=ylabel) + self.time_data['speed_lap'].set_color('#336633', '#336633') + self.time_data['speed_lap'].graphType = "bar" for lap in self.laps: time = float( lap['elapsed_time'].decode('utf-8') ) # time in sql is a unicode string dist = lap['distance']/1000 #distance in km @@ -323,19 +334,27 @@ pace = time/(60*dist) #min/km except ZeroDivisionError: pace = 0.0 + try: + avg_speed = dist/(time/3600) # km/hr + except: + avg_speed = 0.0 if self.pace_limit is not None and pace > self.pace_limit: logging.debug("Pace (%s) exceeds limit (%s). Setting to 0" % (str(pace), str(self.pace_limit))) pace = 0.0 - logging.debug("Time: %f, Dist: %f, Pace: %f" % (time, dist, pace) ) + logging.debug("Time: %f, Dist: %f, Pace: %f, Speed: %f" % (time, dist, pace, avg_speed) ) self.lap_time.addBars(x=time, y=10) if self.us_system: self.lap_distance.addBars(x=km2miles(dist), y=10) self.distance_data['pace_lap'].addBars(x=km2miles(dist), y=pacekm2miles(pace)) self.time_data['pace_lap'].addBars(x=time, y=pacekm2miles(pace)) + self.distance_data['speed_lap'].addBars(x=km2miles(dist), y=km2miles(avg_speed)) + self.time_data['speed_lap'].addBars(x=time, y=km2miles(avg_speed)) else: self.lap_distance.addBars(x=dist, y=10) self.distance_data['pace_lap'].addBars(x=dist, y=pace) self.time_data['pace_lap'].addBars(x=time, y=pace) + self.distance_data['speed_lap'].addBars(x=dist, y=avg_speed) + self.time_data['speed_lap'].addBars(x=time, y=avg_speed) logging.debug("<<") def _get_laps_from_gpx(self): @@ -485,6 +504,21 @@ logging.debug( "No values for %s. Removing...." % item ) del self.time_data[item] logging.debug("<<") + #Add Heartrate zones graphs + if 'hr' in self.distance_data: + zones = self.pytrainer_main.profile.getZones() + title=_("Heart Rate zone") + xlabel="%s (%s)" % (_('Distance'), self.distance_unit) + ylabel="%s (%s)" % (_('Heart Rate'), _('bpm')) + self.distance_data['hr_z'] = GraphData(title=title, xlabel=xlabel, ylabel=ylabel) + self.distance_data['hr_z'].graphType = "hspan" + self.distance_data['hr_z'].set_color(None, None) + xlabel=_("Time (seconds)") + self.time_data['hr_z'] = GraphData(title=title,xlabel=xlabel, ylabel=ylabel) + self.time_data['hr_z'].set_color(None, None) + for zone in zones: + self.distance_data['hr_z'].addPoints(x=zone[0], y=zone[1], label=zone[3], color=zone[2]) + self.time_data['hr_z'].addPoints(x=zone[0], y=zone[1], label=zone[3], color=zone[2]) def _float(self, value): try: Modified: pytrainer/trunk/pytrainer/lib/graphdata.py =================================================================== --- pytrainer/trunk/pytrainer/lib/graphdata.py 2010-11-21 21:35:00 UTC (rev 720) +++ pytrainer/trunk/pytrainer/lib/graphdata.py 2010-11-21 22:50:28 UTC (rev 721) @@ -28,6 +28,8 @@ self.title = title self.ylabel = ylabel self.xlabel = xlabel + self.labels = [] + self.colors = [] self.x_values = [] self.bar_bottoms = [] self.bar_widths = [] @@ -43,7 +45,7 @@ self.show_on_y1 = False self.show_on_y2 = False logging.debug('<<') - + def addBars(self, x=None, y=None): if x is None or y is None: #logging.debug("Must supply both x and y data points, got x:'%s' y:'%s'" % (str(x), str(y))) @@ -64,7 +66,7 @@ self.y_values.append(y) self.bar_bottoms.append(0) - def addPoints(self, x=None, y=None): + def addPoints(self, x=None, y=None, label=None, color=None): #if x is None or y is None or x is "": if not x or not y: #logging.debug("Must supply both x and y data points, got x:'%s' y:'%s'" % (str(x), str(y))) @@ -72,6 +74,10 @@ #print('Adding point: %s %s' % (str(x), str(y))) self.x_values.append(x) self.y_values.append(y) + if label is not None: + self.labels.append(label) + if color is not None: + self.colors.append(color) if self.max_x_value is None or x > self.max_x_value: self.max_x_value = x if self.min_x_value is None or x < self.min_x_value: @@ -106,10 +112,10 @@ ''' _color = self.get_color(y1color) _color2 = self.get_color(y2color) - if _color is not None: - self.linecolor = _color - if _color2 is not None: - self.y2linecolor = _color2 + #if _color is not None: + self.linecolor = _color + #if _color2 is not None: + self.y2linecolor = _color2 def __len__(self): if self.x_values is None: Modified: pytrainer/trunk/pytrainer/main.py =================================================================== --- pytrainer/trunk/pytrainer/main.py 2010-11-21 21:35:00 UTC (rev 720) +++ pytrainer/trunk/pytrainer/main.py 2010-11-21 22:50:28 UTC (rev 721) @@ -53,7 +53,7 @@ class pyTrainer: def __init__(self,filename = None, data_path = None): #Version constants - self.version ="1.7.2_svn#715" + self.version ="1.7.2_svn#721" 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. |
From: <jb...@us...> - 2010-11-21 21:35:06
|
Revision: 720 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=720&view=rev Author: jblance Date: 2010-11-21 21:35:00 +0000 (Sun, 21 Nov 2010) Log Message: ----------- Fix to display blank sport properties correctly (not as None) - ticket 78 Modified Paths: -------------- pytrainer/trunk/pytrainer/gui/windowprofile.py Modified: pytrainer/trunk/pytrainer/gui/windowprofile.py =================================================================== --- pytrainer/trunk/pytrainer/gui/windowprofile.py 2010-11-21 21:11:20 UTC (rev 719) +++ pytrainer/trunk/pytrainer/gui/windowprofile.py 2010-11-21 21:35:00 UTC (rev 720) @@ -152,14 +152,14 @@ gobject.TYPE_STRING, object) for i in sport_list: - if i[1]: + try: met = float(i[1]) - else: - met = 0.0 - if i[2]: + except: + met = "" + try: weight = float(i[2]) - else: - weight = 0.0 + except: + weight = "" try: max_pace = int(i[4]) if max_pace is None or max_pace == 0: @@ -349,9 +349,18 @@ name,met,weight,maxpace = self.parent.getSportInfo(sport) self.editsportentry.set_text(sport) self.sportnameedit.set_text(sport) - self.editweightentry.set_text(str(weight)) - self.editmetentry.set_text(str(met)) - self.editmaxpace.set_text(str(maxpace)) + if weight is not None: + self.editweightentry.set_text(str(weight)) + else: + self.editweightentry.set_text("") + if met is not None: + self.editmetentry.set_text(str(met)) + else: + self.editmetentry.set_text("") + if maxpace is not None: + self.editmaxpace.set_text(str(maxpace)) + else: + self.editmaxpace.set_text("") self.hidesportsteps() self.editsport.show() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jb...@us...> - 2010-11-21 21:11:26
|
Revision: 719 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=719&view=rev Author: jblance Date: 2010-11-21 21:11:20 +0000 (Sun, 21 Nov 2010) Log Message: ----------- Remove redundant Port option in preferences - ticket 80 Modified Paths: -------------- pytrainer/trunk/glade/profile.glade Modified: pytrainer/trunk/glade/profile.glade =================================================================== --- pytrainer/trunk/glade/profile.glade 2010-11-20 22:15:41 UTC (rev 718) +++ pytrainer/trunk/glade/profile.glade 2010-11-21 21:11:20 UTC (rev 719) @@ -330,83 +330,7 @@ </packing> </child> <child> - <widget class="GtkFrame" id="frame15"> - <property name="visible">True</property> - <property name="border_width">5</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> - <child> - <widget class="GtkAlignment" id="alignment15"> - <property name="visible">True</property> - <property name="left_padding">12</property> - <child> - <widget class="GtkTable" id="table20"> - <property name="visible">True</property> - <property name="border_width">5</property> - <property name="n_rows">2</property> - <property name="n_columns">2</property> - <property name="column_spacing">5</property> - <property name="row_spacing">5</property> - <child> - <widget class="GtkLabel" id="label22"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Use this port for internal connections: </property> - </widget> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkEntry" id="entry345"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="invisible_char">●</property> - <property name="width_chars">6</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="x_options"></property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label23"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><small><b>Note:</b> Change this only if you know what you are doing</small></property> - <property name="use_markup">True</property> - </widget> - <packing> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - </widget> - </child> - </widget> - </child> - <child> - <widget class="GtkLabel" id="label21"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Port Connnection</b></property> - <property name="use_markup">True</property> - </widget> - <packing> - <property name="type">label_item</property> - </packing> - </child> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">3</property> - </packing> + <placeholder/> </child> </widget> </child> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |