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
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()
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()