コード例 #1
0
ファイル: scbwin.py プロジェクト: rijilks/scbdo
    def loadrows(self, coldesc=None, rows=None):
        self.rows=[]
        if coldesc is not None and rows is not None:
            for row in rows:
                nr = ''
                oft = 0
                for col in coldesc:
                    if type(col) is str:
                        nr += col
                    else:
                        if len(row) > oft:	# space pad 'short' rows
                            nr += strops.truncpad(row[oft], col[0], col[1])
                        else:
                            nr += ' ' * col[0]
                        oft += 1
                self.rows.append(nr)	# truncation in sender ok
        self.nrpages = len(self.rows)//self.pagesz + 1
        if self.nrpages > 1 and len(self.rows) % self.pagesz == 0:
            self.nrpages -= 1
        # avoid hanging residual by scooting 2nd last entry onto
        # last page with a 'dummy' row, or scoot single line down by one
        if len(self.rows) % self.pagesz == 1:
            self.rows.insert(len(self.rows) - 2, ' ')

        # if time field set and not a round number of rows, append
        # time line to last row of last page
        finalmod = len(self.rows) % self.pagesz
        if self.timestr is not None and finalmod != 0:
            padrows = (self.pagesz - 1) - finalmod
            while padrows > 0:
                self.rows.append(' ')
                padrows -= 1
            self.rows.append(strops.truncpad(self.timepfx,
                                  scbdo.SCB_LINELEN - 13, 'r')
                                      + ' ' + self.timestr[0:12])
コード例 #2
0
    def delayed_announce(self):
        """Initialise the announcer's screen after a delay."""
        if self.winopen:
            self.meet.announce.clrall()
            self.meet.ann_title(' '.join([
                'Event', self.evno, ':',
                self.meet.edb.getvalue(self.event, eventdb.COL_PREFIX),
                self.meet.edb.getvalue(self.event, eventdb.COL_INFO)
            ]))

            # clear page
            self.meet.announce.linefill(1, '_')
            self.meet.announce.linefill(19, '_')

            # write out riders
            count = 0
            curline = 4
            posoft = 0
            for r in self.riders:
                count += 1
                if count == 14:
                    curline = 4
                    posoft = 41
                xtra = '    '
                if r[COL_INFO] is not None and r[COL_INFO] != '':
                    xtra = strops.truncpad(r[COL_INFO], 4, 'r')

                clubstr = ''
                if r[COL_CLUB] != '':
                    clubstr = ' (' + r[COL_CLUB] + ')'
                namestr = strops.truncpad(
                    strops.fitname(r[COL_FIRSTNAME], r[COL_LASTNAME],
                                   25 - len(clubstr)) + clubstr, 25)

                placestr = '   '
                if r[COL_PLACE] != '':
                    placestr = strops.truncpad(r[COL_PLACE] + '.', 3)
                elif r[COL_DNF]:
                    placestr = 'dnf'
                bibstr = strops.truncpad(r[COL_BIB], 3, 'r')
                self.meet.announce.postxt(
                    curline, posoft,
                    ' '.join([placestr, bibstr, namestr, xtra]))
                curline += 1

            tp = ''
            if self.start is not None and self.finish is not None:
                et = self.finish - self.start
                if self.timetype == '200m':
                    tp = '200m: '
                else:
                    tp = 'Time: '
                tp += et.timestr(3) + '    '
                dist = self.meet.get_distance(self.distance, self.units)
                if dist:
                    tp += 'Avg: ' + et.speedstr(dist)
            self.meet.announce.setline(21, tp)
        return False
コード例 #3
0
ファイル: race.py プロジェクト: gusgollings/scbdo
    def delayed_announce(self):
        """Initialise the announcer's screen after a delay."""
        if self.winopen:
            self.meet.announce.clrall()
            self.meet.ann_title(' '.join([
                  'Event', self.evno, ':',
                  self.meet.edb.getvalue(self.event, eventdb.COL_PREFIX),
                  self.meet.edb.getvalue(self.event, eventdb.COL_INFO)]))

            # clear page
            self.meet.announce.linefill(1, '_')
            self.meet.announce.linefill(19, '_')

            # write out riders
            count = 0
            curline = 4
            posoft = 0
            for r in self.riders:
                count += 1
                if count == 14:
                    curline = 4
                    posoft = 41
                xtra = '    '
                if r[COL_INFO] is not None and r[COL_INFO] != '':
                    xtra = strops.truncpad(r[COL_INFO], 4, 'r')

                clubstr = ''
                if r[COL_CLUB] != '':
                    clubstr = ' (' + r[COL_CLUB] + ')'
                namestr = strops.truncpad(strops.fitname(r[COL_FIRSTNAME],
                              r[COL_LASTNAME], 25-len(clubstr))+clubstr, 25)

                placestr = '   '
                if r[COL_PLACE] != '':
                    placestr = strops.truncpad(r[COL_PLACE] + '.', 3)
                elif r[COL_DNF]:
                    placestr = 'dnf'
                bibstr = strops.truncpad(r[COL_BIB], 3, 'r')
                self.meet.announce.postxt(curline, posoft, ' '.join([
                      placestr, bibstr, namestr, xtra]))
                curline += 1

            tp = ''
            if self.start is not None and self.finish is not None:
                et = self.finish - self.start
                if self.timetype == '200m':
                    tp = '200m: '
                else:
                    tp = 'Time: '
                tp += et.timestr(3) + '    '
                dist = self.meet.get_distance(self.distance, self.units)
                if dist:
                    tp += 'Avg: ' + et.speedstr(dist)
            self.meet.announce.setline(21, tp)
        return False
コード例 #4
0
ファイル: irtt.py プロジェクト: rijilks/scbdo
    def fin_trig(self, t):
        """Register finish trigger."""
        if self.timerstat == 'running':
            if self.fl.getstatus() == 'armfin':
                bib = self.fl.bibent.get_text()
                series = self.fl.serent.get_text()
                i = self.getiter(bib, series)
                if i is not None:
                    self.settimes(i,
                                  tst=self.riders.get_value(i, COL_TODSTART),
                                  tft=t)
                    self.fl.tofinish()
                    ft = self.getelapsed(i)
                    if ft is not None:
                        self.fl.set_time(ft.timestr(2))
                        self.meet.scratch_log(' '.join([
                            strops.bibser2bibstr(bib, series).ljust(5),
                            strops.truncpad(
                                self.riders.get_value(i, COL_NAMESTR), 20),
                            ft.timestr(2),
                            '(' + str(self.results.rank(bib, series) + 1) + ')'
                        ]))
                    else:
                        self.fl.set_time('[err]')

                else:
                    self.log.error('Missing rider at finish')
                    self.sl.toidle()
        elif self.timerstat == 'armstart':
            self.set_syncstart(t)
コード例 #5
0
ファイル: irtt.py プロジェクト: gusgollings/scbdo
    def fin_trig(self, t):
        """Register finish trigger."""
        if self.timerstat == 'running':
            if self.fl.getstatus() == 'armfin':
                bib = self.fl.bibent.get_text()
                series = self.fl.serent.get_text()
                i = self.getiter(bib, series)
                if i is not None:
                    self.settimes(i, tst=self.riders.get_value(i,
                                                COL_TODSTART), tft=t)
                    self.fl.tofinish()
                    ft = self.getelapsed(i)
                    if ft is not None:
                        self.fl.set_time(ft.timestr(2))
                        self.meet.scratch_log(' '.join([
                           strops.bibser2bibstr(bib, series).ljust(5),
                           strops.truncpad(self.riders.get_value(i,
                                  COL_NAMESTR), 20),
                           ft.timestr(2),
                           '(' + str(self.results.rank(bib, series) + 1) + ')'
                                                      ]))
                    else:
                        self.fl.set_time('[err]')

                else:
                    self.log.error('Missing rider at finish')
                    self.sl.toidle()
        elif self.timerstat == 'armstart':
            self.set_syncstart(t)
コード例 #6
0
 def rfid_trig(self, e):
     """Register RFID crossing."""
     r = self.meet.rdb.getrefid(e.refid)
     #!!! COPY FROM ROADRACE(old-scbdo)
     if r is not None:
         bib = self.meet.rdb.getvalue(r, riderdb.COL_BIB)
         series = self.meet.rdb.getvalue(r, riderdb.COL_SERIES)
         lr = self.getrider(bib, series)
         if lr is not None:
             #!!!
             bibstr = strops.bibser2bibstr(lr[COL_BIB], lr[COL_SERIES])
             self.meet.scratch_log(' '.join(
                 [bibstr.ljust(5),
                  strops.truncpad(lr[COL_NAMESTR], 30)]))
             if self.fl.getstatus() in ['idle', 'finish']:
                 if bibstr in self.recent_starts:
                     self.fl.setrider(lr[COL_BIB], lr[COL_SERIES])
                     self.fl.toload()
                     del self.recent_starts[bibstr]
                 else:
                     self.log.info('Ignoring unseen rider: ' + bibstr +
                                   '@' + e.rawtime(1))
         else:
             self.log.info('Non start rider: ' + bib + '.' + series + '@' +
                           e.rawtime(1))
     else:
         self.log.info('Unkown tag: ' + e.refid + '@' + e.rawtime(1))
コード例 #7
0
ファイル: rhcp.py プロジェクト: gusgollings/scbdo
    def rfid_trig(self, e):
        """Register RFID crossing."""
        r = self.meet.rdb.getrefid(e.refid)
#!!! COPY FROM ROADRACE(old-scbdo)
        if r is not None:
            bib = self.meet.rdb.getvalue(r, riderdb.COL_BIB)
            series = self.meet.rdb.getvalue(r, riderdb.COL_SERIES)
            lr = self.getrider(bib, series)
            if lr is not None:
#!!!
                bibstr = strops.bibser2bibstr(lr[COL_BIB], lr[COL_SERIES])
                self.meet.scratch_log(' '.join([
                   bibstr.ljust(5),
                   strops.truncpad(lr[COL_NAMESTR], 30)
                                              ]))
                if self.fl.getstatus() in ['idle', 'finish']:
                    if bibstr in self.recent_starts:
                        self.fl.setrider(lr[COL_BIB], lr[COL_SERIES])
                        self.fl.toload()
                        del self.recent_starts[bibstr]
                    else:
                        self.log.info('Ignoring unseen rider: ' + bibstr
                                      + '@' + e.rawtime(1))
            else:
                self.log.info('Non start rider: ' + bib + '.' + series + '@'
                               + e.rawtime(1))
        else:
            self.log.info('Unkown tag: ' + e.refid + '@' + e.rawtime(1))
コード例 #8
0
ファイル: sportif.py プロジェクト: gusgollings/scbdo
 def startlist_report(self):
     """Return a startlist."""
     ret = []
     for r in self.riders:
         ret.append(r[riderdb.COL_BIB].rjust(4) + '  '
                              + strops.truncpad(r[COL_NAMESTR], 48)
                              + str(r[COL_CAT]).rjust(10))
     return ret
コード例 #9
0
 def startlist_report(self):
     """Return a startlist."""
     ret = []
     for r in self.riders:
         ret.append(r[riderdb.COL_BIB].rjust(4) + '  ' +
                    strops.truncpad(r[COL_NAMESTR], 48) +
                    str(r[COL_CAT]).rjust(10))
     return ret
コード例 #10
0
 def fmt_rider_result(self, r, st):
     """Return a result string for the provided rider reference."""
     ret = r[COL_BIB].rjust(4) + '  ' + strops.truncpad(r[COL_NAMESTR], 32)
     lt = st
     for split in r[COL_RFSEEN]:
         ret += ' ' + (split - lt).rawtime(0).rjust(7)
         lt = split
     return (ret)
コード例 #11
0
ファイル: sportif.py プロジェクト: gusgollings/scbdo
 def fmt_rider_result(self, r, st):
     """Return a result string for the provided rider reference."""
     ret = r[COL_BIB].rjust(4) + '  ' + strops.truncpad(r[COL_NAMESTR], 32)
     lt = st
     for split in r[COL_RFSEEN]:
         ret += ' ' + (split - lt).rawtime(0).rjust(7)
         lt = split
     return(ret)
コード例 #12
0
ファイル: irtt.py プロジェクト: rijilks/scbdo
 def lanelookup(self, bib=None, series=''):
     """Prepare name string for timer lane."""
     r = self.getrider(bib, series)
     if r is None:
         self.addrider(bib, series)
         rtxt = '[New Rider]'
     else:
         rtxt = strops.truncpad(r[COL_NAMESTR], 35)
     return rtxt
コード例 #13
0
ファイル: irtt.py プロジェクト: gusgollings/scbdo
 def lanelookup(self, bib=None, series=''):
     """Prepare name string for timer lane."""
     r = self.getrider(bib, series)
     if r is None:
         self.addrider(bib, series)
         rtxt = '[New Rider]'
     else:
         rtxt = strops.truncpad(r[COL_NAMESTR], 35)
     return rtxt
コード例 #14
0
ファイル: scbwin.py プロジェクト: rijilks/scbdo
 def redraw(self):
     self.scb.setline(4, self.line1)
     self.scb.setline(5, self.line2)
     self.scb.setline(6, strops.truncpad(self.timepfx, 
                          scbdo.SCB_LINELEN - 13, 'r'))
     self.scb.clrline(7)
     self.curtime = ''
     self.nexttime = ''
     self.curavg = ''
     self.nextavg = ''
     self.scb.setoverlay(unt4.OVERLAY_R2P2)
コード例 #15
0
ファイル: scbwin.py プロジェクト: rijilks/scbdo
 def update(self):
     """If time or avg change, copy new value onto overlay."""
     if not self.paused:
         if self.curtime != self.nexttime:
             self.scb.postxt(6, scbdo.SCB_LINELEN - 12,
                               self.nexttime)
             self.curtime = self.nexttime
         if self.curavg != self.nextavg:
             self.scb.setline(7,
                   strops.truncpad(self.avgpfx, scbdo.SCB_LINELEN - 13,
                                    'r') + ' ' + self.nextavg)
             self.curavg = self.nextavg
         self.count += 1
コード例 #16
0
ファイル: scbwin.py プロジェクト: rijilks/scbdo
 def update(self):
     """If any time or ranks change, copy new value onto overlay."""
     if not self.paused:
         if self.curr1 != self.nextr1:
             self.scb.setline(7,
                   strops.truncpad(self.nextr1, scbdo.SCB_LINELEN - 13,
                                   'r') + ' ' + self.nextt1)
             self.curr1 = self.nextr1
             self.curt1 = self.nextt1
         elif self.curt1 != self.nextt1:
             self.scb.postxt(7, scbdo.SCB_LINELEN - 12, self.nextt1)
             self.curt1 = self.nextt1
         if self.curr2 != self.nextr2:
             self.scb.setline(9,
                   strops.truncpad(self.nextr2, scbdo.SCB_LINELEN - 13,
                                   'r') + ' ' + self.nextt2)
             self.curr2 = self.nextr2
             self.curt2 = self.nextt2
         elif self.curt2 != self.nextt2:
             self.scb.postxt(9, scbdo.SCB_LINELEN - 12, self.nextt2)
             self.curt2 = self.nextt2
         self.count += 1
コード例 #17
0
ファイル: trackmeet.py プロジェクト: rijilks/scbdo
 def racenamecat(self, event, slen=None):
     """Concatentate race info for display on scoreboard header line."""
     if slen is None:
         slen = scbdo.SCB_LINELEN
     evno = ''
     if self.showevno:
         evno = 'Ev ' + self.edb.getvalue(event, eventdb.COL_EVNO)
     info = self.edb.getvalue(event, eventdb.COL_INFO)
     prefix = self.edb.getvalue(event, eventdb.COL_PREFIX)
     ret = ' '.join([evno, prefix, info]).strip()
     if len(ret) > slen + 1:
         ret = ' '.join([evno, info]).strip()
     return strops.truncpad(ret, slen)
コード例 #18
0
ファイル: trackmeet.py プロジェクト: gusgollings/scbdo
 def racenamecat(self, event, slen=None):
     """Concatentate race info for display on scoreboard header line."""
     if slen is None:
         slen = scbdo.SCB_LINELEN
     evno = ''
     if self.showevno:
         evno = 'Ev ' + self.edb.getvalue(event, eventdb.COL_EVNO)
     info = self.edb.getvalue(event, eventdb.COL_INFO)
     prefix = self.edb.getvalue(event, eventdb.COL_PREFIX)
     ret = ' '.join([evno, prefix, info]).strip()
     if len(ret) > slen + 1:
         ret = ' '.join([evno, info]).strip()
     return strops.truncpad(ret, slen)
コード例 #19
0
    def delayed_announce(self):
        """Initialise the announcer's screen after a delay."""
        if self.winopen:
            self.meet.announce.clrall()

            self.meet.ann_title(' '.join([
                'Event', self.evno, ':',
                self.meet.edb.getvalue(self.event, eventdb.COL_PREFIX),
                self.meet.edb.getvalue(self.event, eventdb.COL_INFO),
                '- Standings'
            ]))
            self.meet.announce.linefill(1, '_')
            ha = ['   ', '  #', 'Rider'.ljust(25), ' Pts']
            for n in self.nicknames:
                ha.append(strops.truncpad(n, 4, 'r'))
            ha.append('Tot Time'.rjust(10))
            self.meet.announce.setline(3, ' '.join(ha))

            l = 4
            for r in self.riders:
                plstr = ''
                if r[COL_PLACE] != '':
                    plstr = r[COL_PLACE]
                    if plstr.isdigit():
                        plstr += '.'
                plstr = strops.truncpad(plstr, 3, 'l')
                bibstr = strops.truncpad(r[COL_BIB], 3, 'r')
                clubstr = ''
                if r[COL_CLUB] != '':
                    clubstr = ' (' + r[COL_CLUB] + ')'
                namestr = strops.truncpad(
                    strops.fitname(r[COL_FIRST], r[COL_LAST],
                                   25 - len(clubstr)) + clubstr, 25)
                ptsstr = '    '
                if r[COL_TOTAL] > 0:
                    ptsstr = strops.truncpad(str(r[COL_TOTAL]), 4, 'r')
                ol = [plstr, bibstr, namestr, ptsstr]
                for c in range(0, len(self.nicknames)):
                    if len(r[COL_POINTS]) > c:
                        ol.append(strops.truncpad(r[COL_POINTS][c], 4, 'r'))
                    else:
                        ol.append('    ')
                if r[COL_TIME] != tod.ZERO:
                    ol.append(strops.truncpad(r[COL_TIME].rawtime(3), 10, 'r'))
                else:
                    ol.append('          ')
                self.meet.announce.setline(l, ' '.join(ol))
                l += 1

        return False
コード例 #20
0
ファイル: omnium.py プロジェクト: gusgollings/scbdo
    def delayed_announce(self):
        """Initialise the announcer's screen after a delay."""
        if self.winopen:
            self.meet.announce.clrall()

            self.meet.ann_title(' '.join([
                  'Event', self.evno, ':',
                  self.meet.edb.getvalue(self.event, eventdb.COL_PREFIX),
                  self.meet.edb.getvalue(self.event, eventdb.COL_INFO),
                  '- Standings']))
            self.meet.announce.linefill(1, '_')
            ha = [ '   ', '  #', 'Rider'.ljust(25), ' Pts']
            for n in self.nicknames:
                ha.append(strops.truncpad(n, 4, 'r'))
            ha.append('Tot Time'.rjust(10))
            self.meet.announce.setline(3, ' '.join(ha))

            l = 4
            for r in self.riders:
                plstr = ''
                if r[COL_PLACE] != '':
                    plstr = r[COL_PLACE]
                    if plstr.isdigit():
                        plstr += '.'
                plstr = strops.truncpad(plstr, 3, 'l')
                bibstr = strops.truncpad(r[COL_BIB], 3, 'r')
                clubstr = ''
                if r[COL_CLUB] != '':
                    clubstr = ' (' + r[COL_CLUB] + ')'
                namestr = strops.truncpad(strops.fitname(r[COL_FIRST],
                              r[COL_LAST], 25-len(clubstr))+clubstr, 25)
                ptsstr = '    '
                if r[COL_TOTAL] > 0:
                    ptsstr = strops.truncpad(str(r[COL_TOTAL]), 4, 'r')
                ol = [plstr, bibstr, namestr, ptsstr]
                for c in range(0, len(self.nicknames)):
                    if len(r[COL_POINTS]) > c:
                        ol.append(strops.truncpad(r[COL_POINTS][c], 4, 'r'))
                    else:
                        ol.append('    ')
                if r[COL_TIME] != tod.ZERO:
                    ol.append(strops.truncpad(r[COL_TIME].rawtime(3), 10, 'r'))
                else:
                    ol.append('          ')
                self.meet.announce.setline(l, ' '.join(ol))
                l += 1

        return False
コード例 #21
0
ファイル: scbwin.py プロジェクト: rijilks/scbdo
 def loadrows(self, coldesc=None, rows=None):
     self.rows=[]
     if coldesc is not None and rows is not None:
         for row in rows:
             nr = ''
             oft = 0
             for col in coldesc:
                 if type(col) is str:
                     nr += col
                 else:
                     if len(row) > oft:	# space pad 'short' rows
                         nr += strops.truncpad(row[oft], col[0], col[1])
                     else:
                         nr += ' ' * col[0]
                     oft += 1
                
             self.rows.append(nr[0:32])
     self.nrpages = len(self.rows)//self.pagesz + 1
     if self.nrpages > 1 and len(self.rows) % self.pagesz == 0:
         self.nrpages -= 1
     # avoid hanging residual by scooting 2nd last entry onto
     # last page with a 'dummy' row, or scoot single line down by one
     if len(self.rows) % self.pagesz == 1:
         self.rows.insert(len(self.rows) - 2, ' ')
コード例 #22
0
ファイル: trackmeet.py プロジェクト: rijilks/scbdo
 def ann_title(self, titlestr=''):
     self.announce.setline(0, strops.truncpad(titlestr.strip(), 70, 'c'))
コード例 #23
0
ファイル: trackmeet.py プロジェクト: rijilks/scbdo
 def ann_default(self):
     self.announce.setline(
         0,
         strops.truncpad(
             ' '.join([self.line1, self.line2, self.line3]).strip(), 70,
             'c'))
コード例 #24
0
ファイル: trackmeet.py プロジェクト: gusgollings/scbdo
 def ann_title(self, titlestr=''):
     self.announce.setline(0, strops.truncpad(titlestr.strip(), 70, 'c'))
コード例 #25
0
ファイル: trackmeet.py プロジェクト: gusgollings/scbdo
 def ann_default(self):
     self.announce.setline(0, strops.truncpad(' '.join([self.line1,
                              self.line2, self.line3]).strip(), 70, 'c'))