Ejemplo n.º 1
0
    def properties(self):
        b = self.DC.items()
        points = [e.pos() for e in b if type(e) == QGraphicsEllipseItem]
        linePoint = [e.pos() for e in b if type(e) == QGraphicsLineItem]

        print('point {1},line {0}'.format(points, linePoint))
        dlg = PropertiesDialog()
        dlg.show()
        if dlg.exec_():
            pass
Ejemplo n.º 2
0
	def onShowProperties( self, event ):
		if not Model.race:
			Utils.MessageOK(self, _("You must have a valid race.  Open or New a race first."), _("No Valid Race"), iconMask=wx.ICON_ERROR)
			return
		if not hasattr(self, 'propertiesDialog'):
			self.propertiesDialog = PropertiesDialog( self, showFileFields=False, updateProperties=True, size=(600,400) )
		else:
			self.propertiesDialog.properties.refresh( forceUpdate = True )
		self.propertiesDialog.properties.setPage( 'raceOptionsProperties' )
		if self.propertiesDialog.ShowModal() == wx.ID_OK:
			self.propertiesDialog.properties.doCommit()
			Utils.refresh()
Ejemplo n.º 3
0
class Actions(wx.Panel):
    iResetStartClockOnFirstTag = 1
    iSkipFirstTagRead = 2

    def __init__(self, parent, id=wx.ID_ANY):
        wx.Panel.__init__(self, parent, id)

        self.SetBackgroundColour(wx.Colour(255, 255, 255))

        ps = wx.BoxSizer(wx.VERTICAL)
        self.splitter = wx.SplitterWindow(self, wx.VERTICAL)
        ps.Add(self.splitter, 1, flag=wx.EXPAND)
        self.SetSizer(ps)

        #---------------------------------------------------------------------------------------------

        self.leftPanel = wx.Panel(self.splitter)
        bs = wx.BoxSizer(wx.VERTICAL)
        self.leftPanel.SetSizer(bs)
        self.leftPanel.SetBackgroundColour(wx.Colour(255, 255, 255))
        self.leftPanel.Bind(wx.EVT_SIZE, self.setWrappedRaceInfo)

        buttonSize = 220
        self.button = RoundButton(self.leftPanel,
                                  size=(buttonSize, buttonSize))
        self.button.SetLabel(FinishText)
        self.button.SetFontToFitLabel()
        self.button.SetForegroundColour(wx.Colour(128, 128, 128))
        self.Bind(wx.EVT_BUTTON, self.onPress, self.button)

        self.clock = Clock(self, size=(190, 190), checkFunc=self.updateClock)
        self.clock.SetBackgroundColour(wx.WHITE)

        self.raceIntro = wx.StaticText(self.leftPanel, label=u'')
        self.raceIntro.SetFont(wx.Font(20, wx.DEFAULT, wx.NORMAL, wx.NORMAL))

        self.chipTimingOptions = wx.RadioBox(
            self.leftPanel,
            label=_("Chip Timing Options"),
            majorDimension=1,
            choices=Properties.RfidProperties.choices,
            style=wx.RA_SPECIFY_COLS)

        self.Bind(wx.EVT_RADIOBOX, self.onChipTimingOptions,
                  self.chipTimingOptions)

        self.settingsButton = wx.BitmapButton(
            self.leftPanel, bitmap=Utils.GetPngBitmap('settings-icon.png'))
        self.settingsButton.SetToolTip(wx.ToolTip(_('Properties Shortcut')))
        self.settingsButton.Bind(wx.EVT_BUTTON, self.onShowProperties)

        self.startRaceTimeCheckBox = wx.CheckBox(
            self.leftPanel, label=_('Start Race Automatically at Future Time'))

        hsSettings = wx.BoxSizer(wx.HORIZONTAL)
        hsSettings.Add(self.settingsButton, flag=wx.ALIGN_CENTER_VERTICAL)
        hsSettings.Add(self.startRaceTimeCheckBox,
                       flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL,
                       border=12)

        border = 8
        hs = wx.BoxSizer(wx.HORIZONTAL)
        hs.Add(self.button, border=border, flag=wx.LEFT | wx.TOP)
        hs.Add(self.raceIntro,
               1,
               border=border,
               flag=wx.LEFT | wx.TOP | wx.RIGHT | wx.EXPAND)
        bs.Add(hs, border=border, flag=wx.ALL)

        hsClock = wx.BoxSizer(wx.HORIZONTAL)
        hsClock.AddSpacer(26)
        hsClock.Add(self.clock)
        hsClock.Add(hsSettings, border=4, flag=wx.LEFT)
        bs.Add(hsClock, border=4, flag=wx.ALL)

        bs.Add(self.chipTimingOptions, border=border, flag=wx.ALL)

        #---------------------------------------------------------------------------------------------

        self.rightPanel = wx.Panel(self.splitter)
        self.rightPanel.SetBackgroundColour(wx.Colour(255, 255, 255))
        checklistTitle = wx.StaticText(self.rightPanel, label=_('Checklist:'))
        checklistTitle.SetFont(
            wx.Font(14, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL,
                    wx.FONTWEIGHT_NORMAL))
        self.checklist = Checklist.Checklist(self.rightPanel)

        hsSub = wx.BoxSizer(wx.VERTICAL)
        hsSub.Add(checklistTitle, 0, flag=wx.ALL, border=4)
        hsSub.Add(self.checklist,
                  1,
                  flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
                  border=4)
        self.rightPanel.SetSizer(hsSub)

        #---------------------------------------------------------------------------------------------

        self.splitter.SplitVertically(self.leftPanel, self.rightPanel)
        self.splitter.SetMinimumPaneSize(100)
        wx.CallAfter(self.refresh)
        wx.CallAfter(self.splitter.SetSashPosition, 650)
        wx.CallAfter(self.GetSizer().Layout)

    def setWrappedRaceInfo(self, event=None):
        wrapWidth = self.leftPanel.GetClientSize(
        )[0] - self.button.GetClientSize()[0] - 20
        dc = wx.WindowDC(self.raceIntro)
        dc.SetFont(self.raceIntro.GetFont())
        label = wordwrap(Model.race.getRaceIntro() if Model.race else u'',
                         wrapWidth, dc)
        self.raceIntro.SetLabel(label)
        self.leftPanel.GetSizer().Layout()
        if event:
            event.Skip()

    def updateChipTimingOptions(self):
        if not Model.race:
            return

        iSelection = self.chipTimingOptions.GetSelection()
        race = Model.race
        race.resetStartClockOnFirstTag = bool(
            iSelection == self.iResetStartClockOnFirstTag)
        race.skipFirstTagRead = bool(iSelection == self.iSkipFirstTagRead)

    def updateClock(self):
        mainWin = Utils.getMainWin()
        return not mainWin or mainWin.isShowingPage(self)

    def onShowProperties(self, event):
        if not Model.race:
            Utils.MessageOK(
                self,
                _("You must have a valid race.  Open or New a race first."),
                _("No Valid Race"),
                iconMask=wx.ICON_ERROR)
            return
        if not hasattr(self, 'propertiesDialog'):
            self.propertiesDialog = PropertiesDialog(self,
                                                     showFileFields=False,
                                                     updateProperties=True,
                                                     size=(600, 400))
        else:
            self.propertiesDialog.properties.refresh(forceUpdate=True)
        self.propertiesDialog.properties.setPage('raceOptionsProperties')
        if self.propertiesDialog.ShowModal() == wx.ID_OK:
            self.propertiesDialog.properties.doCommit()
            Utils.refresh()

    def onChipTimingOptions(self, event):
        if not Model.race:
            return
        self.updateChipTimingOptions()

    def onPress(self, event):
        if not Model.race:
            return
        with Model.LockRace() as race:
            running = race.isRunning()
        if running:
            self.onFinishRace(event)
            return

        self.updateChipTimingOptions()
        if getattr(Model.race, 'enableJChipIntegration', False):
            try:
                externalFields = race.excelLink.getFields()
                externalInfo = race.excelLink.read()
            except:
                externalFields = []
                externalInfo = {}
            if not externalInfo:
                Utils.MessageOK(
                    self, u'\n\n'.join([
                        _('Cannot Start. Excel Sheet read failure.'),
                        _('The Excel file is either unconfigured or unreadable.'
                          )
                    ]), _('Excel Sheet Read '), wx.ICON_ERROR)
                return
            try:
                i = next((i for i, field in enumerate(externalFields)
                          if field.startswith('Tag')))
            except StopIteration:
                Utils.MessageOK(
                    self, u'\n\n'.join([
                        _('Cannot Start.  Excel Sheet missing Tag column.'),
                        _('The Excel file must contain a Tag column to use RFID.'
                          )
                    ]), _('Excel Sheet missing Tag column'), wx.ICON_ERROR)
                return

        if self.startRaceTimeCheckBox.IsChecked():
            self.onStartRaceTime(event)
        else:
            self.onStartRace(event)

    def onStartRace(self, event):
        if Model.race and Utils.MessageOKCancel(self, _('Start Race Now?\n\n'),
                                                _('Start Race')):
            StartRaceNow()

    def onStartRaceTime(self, event):
        if Model.race is None:
            return
        dlg = StartRaceAtTime(self)
        dlg.ShowModal()
        dlg.Destroy()

    def onFinishRace(self, event):
        if Model.race is None or not Utils.MessageOKCancel(
                self, _('Finish Race Now?'), _('Finish Race')):
            return

        with Model.LockRace() as race:
            race.finishRaceNow()
            if race.numLaps is None:
                race.numLaps = race.getMaxLap()
            SetNoDataDNS()
            Model.resetCache()

        Utils.writeRace()
        self.refresh()
        mainWin = Utils.getMainWin()
        if mainWin:
            mainWin.refresh()

        OutputStreamer.writeRaceFinish()
        OutputStreamer.StopStreamer()
        try:
            ChipReader.chipReaderCur.StopListener()
        except:
            pass

        if getattr(Model.race, 'ftpUploadDuringRace', False):
            realTimeFtpPublish.publishEntry(True)

    def commit(self):
        self.checklist.commit()

    def refresh(self):
        self.clock.Start()
        self.button.Enable(False)
        self.startRaceTimeCheckBox.Enable(False)
        self.settingsButton.Enable(False)
        self.button.SetLabel(StartText)
        self.button.SetForegroundColour(wx.Colour(100, 100, 100))
        self.chipTimingOptions.SetSelection(0)
        self.chipTimingOptions.Enable(False)

        with Model.LockRace() as race:
            if race:
                self.settingsButton.Enable(True)

                # Adjust the chip recording options for TT.
                if getattr(race, 'isTimeTrial', False):
                    race.resetStartClockOnFirstTag = False
                    race.skipFirstTagRead = False

                if getattr(race, 'resetStartClockOnFirstTag', True):
                    self.chipTimingOptions.SetSelection(
                        self.iResetStartClockOnFirstTag)
                elif getattr(race, 'skipFirstTagRead', False):
                    self.chipTimingOptions.SetSelection(self.iSkipFirstTagRead)

                if race.startTime is None:
                    self.button.Enable(True)
                    self.button.SetLabel(StartText)
                    self.button.SetForegroundColour(wx.Colour(0, 128, 0))

                    self.startRaceTimeCheckBox.Enable(True)
                    self.startRaceTimeCheckBox.Show(True)

                    self.chipTimingOptions.Enable(
                        getattr(race, 'enableJChipIntegration', False))
                    self.chipTimingOptions.Show(
                        getattr(race, 'enableJChipIntegration', False))
                elif race.isRunning():
                    self.button.Enable(True)
                    self.button.SetLabel(FinishText)
                    self.button.SetForegroundColour(wx.Colour(128, 0, 0))

                    self.startRaceTimeCheckBox.Enable(False)
                    self.startRaceTimeCheckBox.Show(False)

                    self.chipTimingOptions.Enable(False)
                    self.chipTimingOptions.Show(False)

                # Adjust the time trial display options.
                if getattr(race, 'isTimeTrial', False):
                    self.chipTimingOptions.Enable(False)
                    self.chipTimingOptions.Show(False)

            self.GetSizer().Layout()

        self.setWrappedRaceInfo()
        self.checklist.refresh()

        mainWin = Utils.getMainWin()
        if mainWin is not None:
            mainWin.updateRaceClock()