Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
 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
Ejemplo n.º 5
0
 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()
Ejemplo n.º 6
0
 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()
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
 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)
Ejemplo n.º 9
0
    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()
Ejemplo n.º 10
0
    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()