From: <jb...@us...> - 2010-03-15 07:49:57
|
Revision: 534 http://pytrainer.svn.sourceforge.net/pytrainer/?rev=534&view=rev Author: jblance Date: 2010-03-15 07:49:50 +0000 (Mon, 15 Mar 2010) Log Message: ----------- Fixes to unified import, comments and advanced tab enabled for editing, main screen refreshes correctly Modified Paths: -------------- pytrainer/trunk/pytrainer/gui/windowimportdata.py pytrainer/trunk/pytrainer/gui/windowmain.py pytrainer/trunk/pytrainer/gui/windowrecord.py pytrainer/trunk/pytrainer/lib/gpx.py pytrainer/trunk/pytrainer/main.py pytrainer/trunk/pytrainer/record.py Modified: pytrainer/trunk/pytrainer/gui/windowimportdata.py =================================================================== --- pytrainer/trunk/pytrainer/gui/windowimportdata.py 2010-03-14 04:19:01 UTC (rev 533) +++ pytrainer/trunk/pytrainer/gui/windowimportdata.py 2010-03-15 07:49:50 UTC (rev 534) @@ -22,6 +22,7 @@ import os, glob, sys import StringIO import logging +import types from lxml import etree from pytrainer.plugins import Plugins @@ -453,7 +454,7 @@ duration = item[4] sport = item[5] gpx_file = self.processClasses[file_id].getGPXFile(activity_id, file_id)[1] - selectedActivities.append((activity_id, start_time, distance, duration, sport, gpx_file)) + selectedActivities.append((activity_id, start_time, distance, duration, sport, gpx_file, file_id)) logging.debug( "Found %d selected activities to import" % len(selectedActivities) ) return selectedActivities @@ -465,24 +466,20 @@ #selectedActivities.append((activity_id, start_time, distance, duration, sport, gpx_file)) logging.debug( "Importing %d activities" % len(activities)) list_sport = self.pytrainer_main.profile.getSportList() - self.pytrainer_main.record.newMultiRecord(activities, list_sport) - #sport, gpxFile = self.processClasses[file_id].getGPXFile(activity_id) - #process returned GPX files - '''if os.path.isfile(gpxFile): - logging.info('File exists. Size: %d. Sport: %s' % (os.path.getsize(gpxFile), sport)) - #TODO trigger newentry screen to allow user to edit data - #list_sport = self.pytrainer_main.profile.getSportList() - #logging.debug('id_record: '+str(id_record)+' | list_sport: '+str(list_sport)) - #def newRecord(self, list_sport, date, title=None, distance=None, time=None, upositive=None, unegative=None, bpm=None, calories=None, comment=None): - #self.pytrainer_main.record.newMultiRecord(list_sport, date=start_time, distance=distance, time=duration, comment=sport) - #self.pytrainer_main.record.importFromGPX(gpxFile, sport) - #Deselect imported activity and change note - self.updateActivity(activity_id, file_id, status=False, notes="Imported into database") - else: - logging.error('File %s not valid' % gpxFile) - ''' + result = self.pytrainer_main.record.newMultiRecord(activities, list_sport) + for activity in result: + if "db_id" in activity.keys() and type(activity["db_id"]) is types.IntType: + #Activity imported correctly + duration = "%0.0f:%0.0f:%02.0f" % (float(activity["rcd_time"][0]), float(activity["rcd_time"][1]), float(activity["rcd_time"][2])) + self.updateActivity(activity["activity_id"], activity["file_id"], + status = False, + notes = _("Imported into database"), + sport = activity["rcd_sport"], + distance = activity["rcd_distance"], + duration = duration) + #print "updating activity %s " % (str(activity)) - def updateActivity(self, activityID, file_id, status = None, notes = None): + def updateActivity(self, activityID, file_id, status = None, notes = None, sport = None, distance = None, duration = None): path = 0 for item in self.activities_store: if item[0] == activityID and item[7] == str(file_id): @@ -490,6 +487,12 @@ self.activities_store[path][1] = status if notes is not None: self.activities_store[path][6] = notes + if sport is not None: + self.activities_store[path][5] = sport + if distance is not None: + self.activities_store[path][3] = distance + if duration is not None: + self.activities_store[path][4] = duration path +=1 def close_window(self): @@ -672,11 +675,13 @@ self.files_store.set( iter, 0, class_index, - 1, False, + 1, True, 2, filename, 3, self.processClasses[class_index].getFileType(), 4, activity_count ) + #File valid, so enable remove button + self.buttonRemoveSelectedFiles.set_sensitive(1) #Get activities in file for activity in activitiesSummary: #Add activity details to TreeView store to display Modified: pytrainer/trunk/pytrainer/gui/windowmain.py =================================================================== --- pytrainer/trunk/pytrainer/gui/windowmain.py 2010-03-14 04:19:01 UTC (rev 533) +++ pytrainer/trunk/pytrainer/gui/windowmain.py 2010-03-15 07:49:50 UTC (rev 534) @@ -248,6 +248,7 @@ buffer.set_text(comments) else: + self.recordview.set_current_page(0) self.recordview.set_sensitive(0) logging.debug(">>") @@ -879,11 +880,11 @@ if self.block: self.block = False else: - self.parent.refreshListRecords() - self.parent.refreshGraphView(self.selected_view) if self.selected_view == "record": self.recordview.set_current_page(0) self.parent.refreshRecordGraphView("info") + self.parent.refreshListRecords() + self.parent.refreshGraphView(self.selected_view) def on_calendar_changemonth(self,widget): logging.debug("--") Modified: pytrainer/trunk/pytrainer/gui/windowrecord.py =================================================================== --- pytrainer/trunk/pytrainer/gui/windowrecord.py 2010-03-14 04:19:01 UTC (rev 533) +++ pytrainer/trunk/pytrainer/gui/windowrecord.py 2010-03-15 07:49:50 UTC (rev 534) @@ -37,6 +37,7 @@ self.id_record = "" self.store = None self.active_row = None + self.activity_data = [] SimpleGladeApp.__init__(self, data_path+glade_path, root, domain) self.conf_options = [ "rcd_date", @@ -81,10 +82,13 @@ if calories != None: self.rcd_calories.set_text(calories) + def getActivityData(self): + return self.activity_data + def populateMultiWindow(self, activities): self.mode = "multiple_activities" - #activities (activity_id, start_time, distance, duration, sport, gpx_file) - self.activity_data = [] + #activities (activity_id, start_time, distance, duration, sport, gpx_file, file_id) + self.activity_data = [] #Make treeview self.store = self.build_tree_view() #Add data @@ -111,9 +115,11 @@ #details["rcd_min"] = float(mins) #details["rcd_second"] = float(secs) #details["rcd_time"] = (((float(hours) * 60) + float(mins)) * 60) + float(secs) + details["activity_id"] = activity[0] details["rcd_time"] = (float(hours), float(mins), float(secs)) details["rcd_sport"] = activity[4] details["rcd_gpxfile"] = activity[5] + details["file_id"] = activity[6] self.activity_data.append(details) self.scrolledwindowEntries.show_all() #Hide some of the buttons @@ -124,16 +130,7 @@ #self.button12.hide() #Velocity "Calculate" button self.button43.hide() #Pace "Calculate" button #Make GPX file 'unsensitive' - self.rcd_gpxfile.set_sensitive(0) - #Make General settings unsensitive - #self.frameGeneral.set_sensitive(0) #TODO fix update to allow edits here - #Make Velocity settings unsensitive - #self.frameVelocity.set_sensitive(0) #TODO fix update to allow edits here - #Make advanced tab settings unsensitive - self.vbox26.set_sensitive(0) #TODO fix update to allow edits here - #Make comments unsensitive - self.frame23.set_sensitive(0) #TODO fix update to allow edits here - + self.rcd_gpxfile.set_sensitive(0) while gtk.events_pending(): # This allows the GUI to update gtk.main_iteration() # before completion of this entire action #Select first row and display details @@ -162,8 +159,23 @@ def on_accept_clicked(self,widget): if self.mode == "multiple_activities": + #Check for edited data in comments + if self.active_row is not None: + buffer = self.rcd_comments.get_buffer() + start,end = buffer.get_bounds() + comments = buffer.get_text(start,end, True).replace("\"","'") + self.activity_data[self.active_row]["rcd_comments"] = comments + #Advanced tab items + self.activity_data[self.active_row]["rcd_maxpace"] = self.rcd_maxpace.get_text() + self.activity_data[self.active_row]["rcd_pace"] = self.rcd_pace.get_text() + self.activity_data[self.active_row]["rcd_upositive"] = self.rcd_upositive.get_text() + self.activity_data[self.active_row]["rcd_unegative"] = self.rcd_unegative.get_text() + self.activity_data[self.active_row]["rcd_maxbeats"] = self.rcd_maxbeats.get_text() + self.activity_data[self.active_row]["rcd_beats"] = self.rcd_beats.get_text() + self.activity_data[self.active_row]["rcd_calories"] = self.rcd_calories.get_text() row = 0 for activity in self.activity_data: + index = self.activity_data.index(activity) if activity["complete"] is False: #Did not view or modify this record - need to get all the details print "Activity incomplete.. " + activity["rcd_gpxfile"] @@ -171,9 +183,9 @@ activity["rcd_title"] = activity["rcd_title"].replace("\"","'") #Add activity to DB etc laps = activity.pop("laps", ()) - self.parent.insertRecord(activity, laps) + self.activity_data[index]["db_id"] = self.parent.insertRecord(activity, laps) row += 1 - + logging.debug("Processed %d rows of activity data" % row) else: list_options = {} trackSummary = {} @@ -439,6 +451,21 @@ ''' Callback to display details of different activity ''' + #Check for edited data in previous row + if self.active_row is not None: + #Check for edited data in comments + buffer = self.rcd_comments.get_buffer() + start,end = buffer.get_bounds() + comments = buffer.get_text(start,end, True).replace("\"","'") + self.activity_data[self.active_row]["rcd_comments"] = comments + #Advanced tab items + self.activity_data[self.active_row]["rcd_maxpace"] = self.rcd_maxpace.get_text() + self.activity_data[self.active_row]["rcd_pace"] = self.rcd_pace.get_text() + self.activity_data[self.active_row]["rcd_upositive"] = self.rcd_upositive.get_text() + self.activity_data[self.active_row]["rcd_unegative"] = self.rcd_unegative.get_text() + self.activity_data[self.active_row]["rcd_maxbeats"] = self.rcd_maxbeats.get_text() + self.activity_data[self.active_row]["rcd_beats"] = self.rcd_beats.get_text() + self.activity_data[self.active_row]["rcd_calories"] = self.rcd_calories.get_text() #Get row that was selected x = int(event.x) y = int(event.y) Modified: pytrainer/trunk/pytrainer/lib/gpx.py =================================================================== --- pytrainer/trunk/pytrainer/lib/gpx.py 2010-03-14 04:19:01 UTC (rev 533) +++ pytrainer/trunk/pytrainer/lib/gpx.py 2010-03-15 07:49:50 UTC (rev 534) @@ -338,7 +338,7 @@ dateTime = self.getDateTime(date_time.text) zuluDateTime = dateTime[0].strftime("%Y-%m-%dT%H:%M:%SZ") localDateTime = dateTime[1] - logging.debug(gpxFile+" | "+ date_time.text +" | " + zuluDateTime) + logging.debug(gpxFile+" | "+ date_time.text +" | " + zuluDateTime + " | " + str(localDateTime)) #print localDateTime #return date_time.text logging.debug("<<") Modified: pytrainer/trunk/pytrainer/main.py =================================================================== --- pytrainer/trunk/pytrainer/main.py 2010-03-14 04:19:01 UTC (rev 533) +++ pytrainer/trunk/pytrainer/main.py 2010-03-15 07:49:50 UTC (rev 534) @@ -63,7 +63,7 @@ class pyTrainer: def __init__(self,filename = None, data_path = None): #Version constants - self.version ="1.7.1_svn#532" + self.version ="1.7.1_svn#534" self.DB_version = 3 #Setup usage and permitted options @@ -372,6 +372,8 @@ activeplugins_after = self.plugins.getActivePlugins() #Need to check for plugins that have been disabled (were active and now are not) self.setMenuPlugins(activeplugins_before, activeplugins_after) + self.refreshListRecords() + self.refreshGraphView(self.windowmain.selected_view) logging.debug('<<') def editGpsPlugins(self): Modified: pytrainer/trunk/pytrainer/record.py =================================================================== --- pytrainer/trunk/pytrainer/record.py 2010-03-14 04:19:01 UTC (rev 533) +++ pytrainer/trunk/pytrainer/record.py 2010-03-15 07:49:50 UTC (rev 534) @@ -59,6 +59,7 @@ self.recordwindow = WindowRecord(self.data_path, list_sport, parent=self, windowTitle="Modify details before importing") self.recordwindow.populateMultiWindow(activities) self.recordwindow.run() + return self.recordwindow.getActivityData() logging.debug('<<') def editRecord(self,id_record,list_sport): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |