Exemplo n.º 1
0
    def __init__(self, parent, id=wx.ID_ANY):
        wx.Dialog.__init__(self,
                           parent,
                           id,
                           _("Start Race at Time:"),
                           style=wx.DEFAULT_DIALOG_STYLE | wx.TAB_TRAVERSAL)

        font = wx.Font(24, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL,
                       wx.FONTWEIGHT_NORMAL)

        self.startSeconds = None
        self.timer = None
        self.futureRaceTime = None

        race = Model.getRace()
        autoStartLabel = wx.StaticText(self,
                                       label=_('Automatically Start Race at:'))

        # Make sure we don't suggest a start time in the past.
        value = race.scheduledStart
        startSeconds = Utils.StrToSeconds(value) * 60
        nowSeconds = GetNowSeconds()
        if startSeconds < nowSeconds:
            startOffset = 3 * 60
            startSeconds = nowSeconds - nowSeconds % startOffset
            startSeconds = nowSeconds + startOffset
            value = u'{:02d}:{:02d}'.format(startSeconds // (60 * 60),
                                            (startSeconds // 60) % 60)

        self.autoStartTime = masked.TimeCtrl(self,
                                             fmt24hr=True,
                                             display_seconds=False,
                                             value=value,
                                             size=wx.Size(60, -1))

        self.pagesLabel = wx.StaticText(self,
                                        label=_('After Start, Switch to:'))
        mainWin = Utils.getMainWin()
        if mainWin:
            pageNames = [name for a, b, name in mainWin.attrClassName]
        else:
            pageNames = [
                _('Actions'),
                _('Record'),
                _('Results'),
                _('Passings'),
                _('RiderDetail'),
                _('Chart'),
                _('Animation'),
                _('Recommendations'),
                _('Categories'),
                _('Properties'),
                _('Primes'),
                _('Situation'),
                _('LapCounter'),
            ]
        pageNames = pageNames[1:]  # Skip the Actions screen.
        self.pages = wx.Choice(self, choices=pageNames)
        self.pages.SetSelection(0)  # Record screen.

        self.countdown = CountdownClock(self, size=(400, 400), tFuture=None)
        self.Bind(EVT_COUNTDOWN, self.onCountdown)

        self.okBtn = wx.Button(self, wx.ID_OK, label=_('Start at Above Time'))
        self.Bind(wx.EVT_BUTTON, self.onOK, self.okBtn)

        self.start30 = wx.Button(self, label=_('Start in 30s'))
        self.start30.Bind(wx.EVT_BUTTON,
                          lambda event: self.startInFuture(event, 30))
        self.start60 = wx.Button(self, label=_('Start in 60s'))
        self.start60.Bind(wx.EVT_BUTTON,
                          lambda event: self.startInFuture(event, 60))

        self.cancelBtn = wx.Button(self, wx.ID_CANCEL)
        self.Bind(wx.EVT_BUTTON, self.onCancel, self.cancelBtn)

        vs = wx.BoxSizer(wx.VERTICAL)

        border = 8
        hs = wx.BoxSizer(wx.HORIZONTAL)
        hs.Add(autoStartLabel,
               border=border,
               flag=wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL)
        hs.Add(self.autoStartTime,
               border=border,
               flag=wx.RIGHT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL)
        hs.Add(self.pagesLabel,
               border=border,
               flag=wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL)
        hs.Add(self.pages,
               border=border,
               flag=wx.RIGHT | wx.TOP | wx.BOTTOM | wx.ALIGN_BOTTOM
               | wx.ALIGN_CENTER_VERTICAL)
        vs.Add(hs)

        hs = wx.BoxSizer(wx.HORIZONTAL)
        hs.Add(self.okBtn, border=border, flag=wx.ALL)
        hs.Add(self.start30, border=border, flag=wx.TOP | wx.BOTTOM | wx.RIGHT)
        hs.Add(self.start60, border=border, flag=wx.TOP | wx.BOTTOM | wx.RIGHT)
        self.okBtn.SetDefault()
        hs.AddStretchSpacer()
        hs.Add(self.cancelBtn, border=border, flag=wx.ALL)
        vs.Add(hs, flag=wx.EXPAND)

        vs.Add(self.countdown,
               1,
               border=border,
               flag=wx.ALL | wx.ALIGN_CENTRE | wx.EXPAND)

        self.SetSizerAndFit(vs)

        self.CentreOnParent(wx.BOTH)
        wx.CallAfter(self.SetFocus)

        wx.CallLater(100, self.autoStartTime.SetSize, (48, -1))
Exemplo n.º 2
0
class StartRaceAtTime(wx.Dialog):
    def __init__(self, parent, id=wx.ID_ANY):
        wx.Dialog.__init__(self,
                           parent,
                           id,
                           _("Start Race at Time:"),
                           style=wx.DEFAULT_DIALOG_STYLE | wx.THICK_FRAME
                           | wx.TAB_TRAVERSAL)

        font = wx.Font(24, wx.DEFAULT, wx.NORMAL, wx.NORMAL)

        self.startSeconds = None
        self.timer = None
        self.futureRaceTime = None

        race = Model.getRace()
        autoStartLabel = wx.StaticText(self,
                                       label=_('Automatically Start Race at:'))

        # Make sure we don't suggest a start time in the past.
        value = race.scheduledStart
        startSeconds = Utils.StrToSeconds(value) * 60
        nowSeconds = GetNowSeconds()
        if startSeconds < nowSeconds:
            startOffset = 3 * 60
            startSeconds = nowSeconds - nowSeconds % startOffset
            startSeconds = nowSeconds + startOffset
            value = u'{:02d}:{:02d}'.format(startSeconds / (60 * 60),
                                            (startSeconds / 60) % 60)

        self.autoStartTime = masked.TimeCtrl(self,
                                             fmt24hr=True,
                                             display_seconds=False,
                                             value=value,
                                             size=wx.Size(60, -1))

        self.pagesLabel = wx.StaticText(self,
                                        label=_('After Start, Switch to:'))
        mainWin = Utils.getMainWin()
        if mainWin:
            pageNames = [name for a, b, name in mainWin.attrClassName]
        else:
            pageNames = [
                _('Actions'),
                _('Record'),
                _('Results'),
                _('Passings'),
                _('RiderDetail'),
                _('Chart'),
                _('Animation'),
                _('Recommendations'),
                _('Categories'),
                _('Properties'),
                _('Primes'),
                _('Situation'),
                _('LapCounter'),
            ]
        pageNames = pageNames[1:]  # Skip the Actions screen.
        self.pages = wx.Choice(self, choices=pageNames)
        self.pages.SetSelection(0)  # Record screen.

        self.countdown = CountdownClock(self, size=(400, 400), tFuture=None)
        self.Bind(EVT_COUNTDOWN, self.onCountdown)

        self.okBtn = wx.Button(self, wx.ID_OK, label=_('Start at Above Time'))
        self.Bind(wx.EVT_BUTTON, self.onOK, self.okBtn)

        self.start30 = wx.Button(self, label=_('Start in 30s'))
        self.start30.Bind(wx.EVT_BUTTON,
                          lambda event: self.startInFuture(event, 30))
        self.start60 = wx.Button(self, label=_('Start in 60s'))
        self.start60.Bind(wx.EVT_BUTTON,
                          lambda event: self.startInFuture(event, 60))

        self.cancelBtn = wx.Button(self, wx.ID_CANCEL)
        self.Bind(wx.EVT_BUTTON, self.onCancel, self.cancelBtn)

        vs = wx.BoxSizer(wx.VERTICAL)

        border = 8
        hs = wx.BoxSizer(wx.HORIZONTAL)
        hs.Add(autoStartLabel,
               border=border,
               flag=wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL)
        hs.Add(self.autoStartTime,
               border=border,
               flag=wx.RIGHT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL)
        hs.Add(self.pagesLabel,
               border=border,
               flag=wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL)
        hs.Add(self.pages,
               border=border,
               flag=wx.RIGHT | wx.TOP | wx.BOTTOM | wx.ALIGN_BOTTOM
               | wx.ALIGN_CENTER_VERTICAL)
        vs.Add(hs)

        hs = wx.BoxSizer(wx.HORIZONTAL)
        hs.Add(self.okBtn, border=border, flag=wx.ALL)
        hs.Add(self.start30, border=border, flag=wx.TOP | wx.BOTTOM | wx.RIGHT)
        hs.Add(self.start60, border=border, flag=wx.TOP | wx.BOTTOM | wx.RIGHT)
        self.okBtn.SetDefault()
        hs.AddStretchSpacer()
        hs.Add(self.cancelBtn, border=border, flag=wx.ALL)
        vs.Add(hs, flag=wx.EXPAND)

        vs.Add(self.countdown,
               1,
               border=border,
               flag=wx.ALL | wx.ALIGN_CENTRE | wx.EXPAND)

        self.SetSizerAndFit(vs)

        self.CentreOnParent(wx.BOTH)
        wx.CallAfter(self.SetFocus)

        wx.CallLater(100, self.autoStartTime.SetSize, (48, -1))

    def startInFuture(self, event, seconds):
        startSeconds = GetNowSeconds() + seconds

        dt = wx.DateTime()
        dt.SetToCurrent()
        dt.SetHour(startSeconds // (60 * 60))
        dt.SetMinute((startSeconds // 60) % 60)
        self.autoStartTime.SetValue(dt)

        return self.onOK(event, startSeconds)

    def onCountdown(self, event):
        StartRaceNow(self.pages.GetStringSelection())
        self.startTime = self.futureRaceTime
        self.EndModal(wx.ID_OK)

    def onOK(self, event, startSeconds=None):
        startTime = self.autoStartTime.GetValue()

        self.startSeconds = Utils.StrToSeconds(
            startTime) * 60.0 if startSeconds is None else startSeconds
        if self.startSeconds < GetNowSeconds():
            Utils.MessageOK(
                None, u'\n\n'.join([
                    _('Scheduled Start Time is in the Past'),
                    _('Please enter a Scheduled Start Time in the Future.')
                ]), _('Scheduled Start Time is in the Past'))
            return

        dateToday = datetime.date.today()
        self.futureRaceTime = datetime.datetime(
            year=dateToday.year,
            month=dateToday.month,
            day=dateToday.day,
            hour=0,
            minute=0,
            second=0) + datetime.timedelta(seconds=self.startSeconds)
        self.countdown.Start(self.futureRaceTime)

        # Disable buttons and switch to countdown state.
        self.okBtn.Enable(False)
        self.start30.Enable(False)
        self.start60.Enable(False)
        self.autoStartTime.Enable(False)

    def onCancel(self, event):
        self.countdown.Stop()
        self.EndModal(wx.ID_CANCEL)