def saveconfig(self): """Save race to disk.""" if self.readonly: self.log.error('Attempt to save readonly ob.') return cw = ConfigParser.ConfigParser() cw.add_section('race') if self.start is not None: cw.set('race', 'start', self.start.rawtime()) if self.lstart is not None: cw.set('race', 'lstart', self.lstart.rawtime()) if self.finish is not None: cw.set('race', 'finish', self.finish.rawtime()) cw.set('race', 'ctrl_places', self.ctrl_places.get_text()) cw.set('race', 'startlist', self.get_startlist()) if self.info_expand.get_expanded(): cw.set('race', 'showinfo', 'Yes') else: cw.set('race', 'showinfo', 'No') cw.set('race', 'distance', self.distance) cw.set('race', 'distunits', self.units) cw.set('race', 'timetype', self.timetype) cw.set('race', 'topn_places', self.topn_places) cw.set('race', 'topn_event', self.topn_event) cw.add_section('riders') for r in self.riders: bf = '' if r[COL_DNF]: bf = 'True' slice = [ r[COL_FIRSTNAME], r[COL_LASTNAME], r[COL_CLUB], r[COL_INFO], bf, r[COL_PLACE] ] cw.set('riders', r[COL_BIB], ','.join(map(lambda i: str(i).replace(',', '\\,'), slice))) self.log.debug('Saving race config to: ' + self.configpath) with open(self.configpath, 'wb') as f: cw.write(f) # to a topn transfer if flag set - and then clear it if self.topn_transfer: if self.topn_places > 0: evt = self.meet.edb.getevent(self.topn_event) if evt is not None: osl = self.meet.edb.getvalue(evt, eventdb.COL_STARTERS) osn = '' for r in self.results: if not r[0].isdigit() or int(r[0]) > self.topn_places: break osn += ' ' + r[1] self.log.info('Transferred riders ' + repr(strops.reformat_biblist(osn)) + ' to event ' + repr(self.topn_event)) self.meet.edb.editevent(evt, starters=osl + osn) else: self.log.warn('Riders not transferred, event ' + repr(self.topn_event) + ' not found.') self.topn_transfer = False
def saveconfig(self): """Save race to disk.""" if self.readonly: self.log.error('Attempt to save readonly ob.') return cw = ConfigParser.ConfigParser() cw.add_section('race') if self.start is not None: cw.set('race', 'start', self.start.rawtime()) if self.lstart is not None: cw.set('race', 'lstart', self.lstart.rawtime()) if self.finish is not None: cw.set('race', 'finish', self.finish.rawtime()) cw.set('race', 'ctrl_places', self.ctrl_places.get_text()) cw.set('race', 'startlist', self.get_startlist()) if self.info_expand.get_expanded(): cw.set('race', 'showinfo', 'Yes') else: cw.set('race', 'showinfo', 'No') cw.set('race', 'distance', self.distance) cw.set('race', 'distunits', self.units) cw.set('race', 'timetype', self.timetype) cw.set('race', 'topn_places', self.topn_places) cw.set('race', 'topn_event', self.topn_event) cw.add_section('riders') for r in self.riders: bf = '' if r[COL_DNF]: bf='True' slice = [r[COL_FIRSTNAME], r[COL_LASTNAME], r[COL_CLUB], r[COL_INFO], bf, r[COL_PLACE]] cw.set('riders', r[COL_BIB], ','.join(map(lambda i: str(i).replace(',', '\\,'), slice))) self.log.debug('Saving race config to: ' + self.configpath) with open(self.configpath, 'wb') as f: cw.write(f) # to a topn transfer if flag set - and then clear it if self.topn_transfer: if self.topn_places > 0: evt = self.meet.edb.getevent(self.topn_event) if evt is not None: osl = self.meet.edb.getvalue(evt, eventdb.COL_STARTERS) osn = '' for r in self.results: if not r[0].isdigit() or int(r[0]) > self.topn_places: break osn += ' ' + r[1] self.log.info('Transferred riders ' + repr(strops.reformat_biblist(osn)) + ' to event ' + repr(self.topn_event)) self.meet.edb.editevent(evt, starters=osl+osn) else: self.log.warn('Riders not transferred, event ' + repr(self.topn_event) + ' not found.') self.topn_transfer = False
def race_ctrl(self, acode='', rlist=''): """Apply the selected action to the provided bib list.""" if acode == 'del': rlist = strops.reformat_biblist(rlist) for bib in rlist.split(): self.delrider(bib) return True elif acode == 'add': rlist = strops.reformat_biblist(rlist) for bib in rlist.split(): self.addrider(bib) return True elif acode == 'que': rlist = strops.reformat_biblist(rlist) for bib in rlist.split(): self.query_rider(bib) return True elif acode == 'com': self.add_comment(rlist) return True else: self.log.error('Ignoring invalid action.') return False
def race_ctrl(self, acode='', rlist=''): """Apply the selected action to the provided bib list.""" if acode == 'del': rlist = strops.reformat_biblist(rlist) for bib in rlist.split(): self.delrider(bib) return True elif acode == 'add': rlist = strops.reformat_biblist(rlist) for bib in rlist.split(): self.addrider(bib) return True elif acode == 'que': rlist = strops.reformat_biblist(rlist) for bib in rlist.split(): self.query_rider(bib) return True elif acode == 'com': self.add_comment(rlist) return True else: self.log.error('Ignoring invalid action.') return False
def open_event(self, eventhdl=None): """Open provided event handle.""" if eventhdl is not None: self.close_event() self.curevent = mkrace(self, eventhdl) self.curevent.loadconfig() self.race_box.add(self.curevent.frame) self.menu_race_info.set_sensitive(True) self.menu_race_close.set_sensitive(True) self.menu_race_abort.set_sensitive(True) starters = self.edb.getvalue(eventhdl, eventdb.COL_STARTERS) if starters is not None and starters != '': self.addstarters(self.curevent, eventhdl, # xfer starters strops.reformat_biblist(starters)) self.edb.editevent(eventhdl, starters='') # and clear self.curevent.show()
def open_event(self, eventhdl=None): """Open provided event handle.""" if eventhdl is not None: self.close_event() self.curevent = mkrace(self, eventhdl) self.curevent.loadconfig() self.race_box.add(self.curevent.frame) self.menu_race_info.set_sensitive(True) self.menu_race_close.set_sensitive(True) self.menu_race_abort.set_sensitive(True) starters = self.edb.getvalue(eventhdl, eventdb.COL_STARTERS) if starters is not None and starters != '': self.addstarters( self.curevent, eventhdl, # xfer starters strops.reformat_biblist(starters)) self.edb.editevent(eventhdl, starters='') # and clear self.curevent.show()
def race_ctrl_action_activate_cb(self, entry, data=None): """Perform current action on bibs listed.""" rlist = strops.reformat_biblist(entry.get_text()) acode = self.action_model.get_value( self.ctrl_action_combo.get_active_iter(), 1) if acode == 'dnf': self.dnfriders(rlist) entry.set_text('') elif acode == 'add': for bib in rlist.split(): self.addrider(bib) entry.set_text('') elif acode == 'del': for bib in rlist.split(): self.delrider(bib) entry.set_text('') else: self.log.error('Ignoring invalid action.') glib.idle_add(self.delayed_announce)
def race_ctrl_action_activate_cb(self, entry, data=None): """Perform current action on bibs listed.""" rlist = strops.reformat_biblist(entry.get_text()) acode = self.action_model.get_value( self.ctrl_action_combo.get_active_iter(), 1) if acode == 'dnf': self.dnfriders(rlist) entry.set_text('') elif acode == 'add': for bib in rlist.split(): self.addrider(bib) entry.set_text('') elif acode == 'del': for bib in rlist.split(): self.delrider(bib) entry.set_text('') else: self.log.error('Ignoring invalid action.') glib.idle_add(self.delayed_announce)
def do_properties(self): """Run race properties dialog.""" b = gtk.Builder() b.add_from_file(os.path.join(scbdo.UI_PATH, 'race_properties.ui')) dlg = b.get_object('properties') dlg.set_transient_for(self.meet.window) rt = b.get_object('race_score_type') if self.timetype != '200m': rt.set_active(0) else: rt.set_active(1) di = b.get_object('race_dist_entry') if self.distance is not None: di.set_text(str(self.distance)) else: di.set_text('') du = b.get_object('race_dist_type') if self.units == 'metres': du.set_active(0) else: du.set_active(1) se = b.get_object('race_series_entry') se.set_text(self.series) topn_p = b.get_object('topn_places_adjust') topn_p.set_value(self.topn_places) topn_e = b.get_object('topn_event') topn_e.set_text(self.topn_event) response = dlg.run() if response == 1: # id 1 set in glade for "Apply" self.log.debug('Updating race properties.') if rt.get_active() == 0: self.set_timetype('start/finish') else: self.set_timetype('200m') dval = di.get_text() if dval.isdigit(): self.distance = int(dval) if du.get_active() == 0: self.units = 'metres' else: self.units = 'laps' # update topn transfer self.topn_places = int(topn_p.get_value()) self.topn_event = topn_e.get_text() if self.meet.edb.getevent(self.topn_event) is None: self.log.warn('Transfer places event ' + repr(self.topn_event) + ' not found.') # But allow it, since it will be checked again on placexfer # update series ns = se.get_text() if ns != self.series: self.series = ns self.meet.edb.editevent(self.event, series=ns) # xfer starters if not empty for s in strops.reformat_biblist( b.get_object('race_starters_entry').get_text()).split(): self.addrider(s) glib.idle_add(self.delayed_announce) else: self.log.debug('Edit race properties cancelled.') # if prefix is empty, grab input focus if self.prefix_ent.get_text() == '': self.prefix_ent.grab_focus() dlg.destroy()
def do_properties(self): """Run race properties dialog.""" b = gtk.Builder() b.add_from_file(os.path.join(scbdo.UI_PATH, 'race_properties.ui')) dlg = b.get_object('properties') dlg.set_transient_for(self.meet.window) rt = b.get_object('race_score_type') if self.timetype != '200m': rt.set_active(0) else: rt.set_active(1) di = b.get_object('race_dist_entry') if self.distance is not None: di.set_text(str(self.distance)) else: di.set_text('') du = b.get_object('race_dist_type') if self.units == 'metres': du.set_active(0) else: du.set_active(1) se = b.get_object('race_series_entry') se.set_text(self.series) topn_p = b.get_object('topn_places_adjust') topn_p.set_value(self.topn_places) topn_e = b.get_object('topn_event') topn_e.set_text(self.topn_event) response = dlg.run() if response == 1: # id 1 set in glade for "Apply" self.log.debug('Updating race properties.') if rt.get_active() == 0: self.set_timetype('start/finish') else: self.set_timetype('200m') dval = di.get_text() if dval.isdigit(): self.distance = int(dval) if du.get_active() == 0: self.units = 'metres' else: self.units = 'laps' # update topn transfer self.topn_places = int(topn_p.get_value()) self.topn_event = topn_e.get_text() if self.meet.edb.getevent(self.topn_event) is None: self.log.warn('Transfer places event ' + repr(self.topn_event) + ' not found.') # But allow it, since it will be checked again on placexfer # update series ns = se.get_text() if ns != self.series: self.series = ns self.meet.edb.editevent(self.event, series=ns) # xfer starters if not empty for s in strops.reformat_biblist( b.get_object('race_starters_entry').get_text()).split(): self.addrider(s) glib.idle_add(self.delayed_announce) else: self.log.debug('Edit race properties cancelled.') # if prefix is empty, grab input focus if self.prefix_ent.get_text() == '': self.prefix_ent.grab_focus() dlg.destroy()