def __init__( self, parent, id=wx.ID_ANY, size=wx.DefaultSize ): super(TeamResults, self).__init__( parent, id, size=size ) self.state = RaceInputState() vsOverall = wx.BoxSizer( wx.VERTICAL ) #--------------------------------------------------------------- self.colnames = ( _('Pos'), _('Team'), _('Time'), _('Gap'), ) self.grid = ReorderableGrid( self ) self.grid.CreateGrid( 0, len(self.colnames) ) self.grid.SetRowLabelSize( 0 ) self.grid.SetMargins( 0, 0 ) self.grid.AutoSizeColumns( True ) self.grid.DisableDragColSize() self.grid.DisableDragRowSize() self.grid.AutoSizeColumns( False ) self.grid.AutoSizeRows( False ) #--------------------------------------------------------------- self.hbs = wx.BoxSizer(wx.HORIZONTAL) self.categoryLabel = wx.StaticText( self, label = _('Category:') ) self.categoryChoice = wx.Choice( self ) self.Bind(wx.EVT_CHOICE, self.doChooseCategory, self.categoryChoice) self.exportButton = wx.Button( self, label='{} {}/{}'.format(_('Export'), _('Excel'), _('PDF')) ) self.exportButton.Bind( wx.EVT_BUTTON, self.doExport ) self.hbs.Add( self.categoryLabel, flag=wx.TOP|wx.BOTTOM|wx.LEFT|wx.ALIGN_CENTRE_VERTICAL, border=4 ) self.hbs.Add( self.categoryChoice, flag=wx.ALL|wx.ALIGN_CENTRE_VERTICAL, border=4 ) self.hbs.Add( self.exportButton, flag=wx.ALL|wx.ALIGN_CENTRE_VERTICAL, border=4 ) #--------------------------------------------------------------- vsOverall.Add( self.hbs, flag=wx.ALL, border=4 ) vsOverall.Add( self.grid, 1, flag=wx.EXPAND|wx.ALL, border=4 ) self.SetSizer( vsOverall )
def __init__(self, parent, id=wx.ID_ANY): wx.Panel.__init__(self, parent, id) self.state = RaceInputState() vs = wx.BoxSizer(wx.VERTICAL) self.ignoreColour = wx.Colour(80, 80, 80) self.inactiveColour = wx.Colour(200, 200, 200) border = 4 flag = wx.ALL hs = wx.BoxSizer(wx.HORIZONTAL) self.activateAllButton = wx.Button(self, label=_('Activate All'), style=wx.BU_EXACTFIT) self.Bind(wx.EVT_BUTTON, self.onActivateAll, self.activateAllButton) hs.Add(self.activateAllButton, 0, border=border, flag=flag) hs.AddSpacer(6) self.newCategoryButton = wx.Button(self, label=_('New'), style=wx.BU_EXACTFIT) self.Bind(wx.EVT_BUTTON, self.onNewCategory, self.newCategoryButton) hs.Add(self.newCategoryButton, 0, border=border, flag=flag) self.delCategoryButton = wx.Button(self, label=_('Delete'), style=wx.BU_EXACTFIT) self.Bind(wx.EVT_BUTTON, self.onDelCategory, self.delCategoryButton) hs.Add(self.delCategoryButton, 0, border=border, flag=(flag & ~wx.LEFT)) hs.AddSpacer(6) self.upCategoryButton = wx.Button(self, label=u'\u2191', style=wx.BU_EXACTFIT) self.Bind(wx.EVT_BUTTON, self.onUpCategory, self.upCategoryButton) hs.Add(self.upCategoryButton, 0, border=border, flag=flag) self.downCategoryButton = wx.Button(self, label=u'\u2193', style=wx.BU_EXACTFIT) self.Bind(wx.EVT_BUTTON, self.onDownCategory, self.downCategoryButton) hs.Add(self.downCategoryButton, 0, border=border, flag=(flag & ~wx.LEFT)) hs.AddSpacer(6) self.setGpxDistanceButton = wx.Button(self, label=_('Set Gpx Distance'), style=wx.BU_EXACTFIT) self.Bind(wx.EVT_BUTTON, self.onSetGpxDistance, self.setGpxDistanceButton) hs.Add(self.setGpxDistanceButton, 0, border=border, flag=flag) hs.AddSpacer(6) self.addExceptionsButton = wx.Button(self, label=_('Bib Exceptions'), style=wx.BU_EXACTFIT) self.Bind(wx.EVT_BUTTON, self.onAddExceptions, self.addExceptionsButton) hs.Add(self.addExceptionsButton, 0, border=border, flag=flag) hs.AddSpacer(6) ''' self.updateStartWaveNumbersButton = wx.Button(self, label=_('Update Start Wave Bibs'), style=wx.BU_EXACTFIT) self.Bind( wx.EVT_BUTTON, self.onUpdateStartWaveNumbers, self.updateStartWaveNumbersButton ) hs.Add( self.updateStartWaveNumbersButton, 0, border = border, flag = flag ) ''' self.normalizeButton = wx.Button(self, label=_('Normalize'), style=wx.BU_EXACTFIT) self.Bind(wx.EVT_BUTTON, self.onNormalize, self.normalizeButton) hs.Add(self.normalizeButton, 0, border=border, flag=flag) hs.AddStretchSpacer() self.printButton = wx.Button(self, label=u'{}...'.format(_('Print')), style=wx.BU_EXACTFIT) self.Bind(wx.EVT_BUTTON, self.onPrint, self.printButton) hs.Add(self.printButton, 0, border=border, flag=flag) self.excelButton = wx.Button(self, label=u'{}...'.format(_('Excel')), style=wx.BU_EXACTFIT) self.Bind(wx.EVT_BUTTON, self.onExcel, self.excelButton) hs.Add(self.excelButton, 0, border=border, flag=flag) self.grid = ReorderableGrid(self) self.colNameFields = [ (u'', None), (_('Category Type'), 'catType'), (_('Active'), 'active'), (_('Name'), 'name'), (_('Gender'), 'gender'), (_('Numbers'), 'catStr'), (_('Start\nOffset'), 'startOffset'), (_('Race\nLaps'), 'numLaps'), (_('Race\nMinutes'), 'raceMinutes'), (_('Lapped\nRiders\nContinue'), 'lappedRidersMustContinue'), (_('Distance'), 'distance'), (_('Dist.\nBy'), 'distanceType'), (_('First\nLap\nDist.'), 'firstLapDistance'), (_('80%\nLap\nTime'), 'rule80Time'), (_('CrossMgr\nEstimated\nLaps'), 'suggestedLaps'), (_('Publish'), 'publishFlag'), (_('Upload'), 'uploadFlag'), (_('Series'), 'seriesFlag'), ] self.computedFields = {'rule80Time', 'suggestedLaps'} self.colnames = [ colName if not colName.startswith('_') else _('Name Copy') for colName, fieldName in self.colNameFields ] self.iCol = { fieldName: i for i, (colName, fieldName) in enumerate(self.colNameFields) if fieldName and not colName.startswith('_') } self.activeColumn = self.iCol['active'] self.genderColumn = self.iCol['gender'] self.numbersColumn = self.iCol['catStr'] self.grid.CreateGrid(0, len(self.colnames)) self.grid.SetRowLabelSize(32) self.grid.SetMargins(0, 0) for col, name in enumerate(self.colnames): self.grid.SetColLabelValue(col, name) self.cb = None self.boolCols = set() self.choiceCols = set() self.readOnlyCols = set() self.dependentCols = set() # Set column attributes for the table. for col, (colName, fieldName) in enumerate(self.colNameFields): attr = gridlib.GridCellAttr() if fieldName is None: attr.SetRenderer(CategoryIconRenderer()) attr.SetAlignment(wx.ALIGN_LEFT, wx.ALIGN_CENTRE) attr.SetReadOnly(True) self.readOnlyCols.add(col) elif fieldName == 'catType': self.catTypeWidth = 64 attr.SetEditor( gridlib.GridCellChoiceEditor(self.CategoryTypeChoices, False)) attr.SetAlignment(wx.ALIGN_LEFT, wx.ALIGN_CENTRE) self.choiceCols.add(col) elif fieldName in { 'active', 'lappedRidersMustContinue', 'publishFlag', 'uploadFlag', 'seriesFlag' }: boolEditor = gridlib.GridCellBoolEditor() boolEditor.UseStringValues('1', '0') attr.SetEditor(boolEditor) attr.SetRenderer(gridlib.GridCellBoolRenderer()) attr.SetAlignment(wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) self.boolCols.add(col) if fieldName == 'lappedRidersMustContinue': self.dependentCols.add(col) elif fieldName == 'gender': attr.SetEditor( gridlib.GridCellChoiceEditor( [_('Open'), _('Men'), _('Women')], False)) self.choiceCols.add(col) elif fieldName == 'startOffset': attr.SetEditor(TimeEditor()) attr.SetAlignment(wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) self.dependentCols.add(col) elif fieldName == 'numLaps': attr.SetEditor(wx.grid.GridCellNumberEditor()) attr.SetAlignment(wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) self.dependentCols.add(col) elif fieldName == 'raceMinutes': attr.SetEditor(wx.grid.GridCellNumberEditor()) attr.SetAlignment(wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) self.dependentCols.add(col) elif fieldName in ['rule80Time', 'suggestedLaps']: attr.SetReadOnly(True) attr.SetAlignment(wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) self.readOnlyCols.add(col) self.dependentCols.add(col) elif fieldName in ['distance', 'firstLapDistance']: attr.SetEditor(gridlib.GridCellFloatEditor(7, 3)) attr.SetRenderer(gridlib.GridCellFloatRenderer(7, 3)) attr.SetAlignment(wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) self.dependentCols.add(col) elif fieldName == 'distanceType': attr.SetEditor( gridlib.GridCellChoiceEditor(self.DistanceTypeChoices, False)) attr.SetAlignment(wx.ALIGN_RIGHT, wx.ALIGN_CENTRE) self.choiceCols.add(col) self.dependentCols.add(col) elif colName == '_name2': attr.SetAlignment(wx.ALIGN_LEFT, wx.ALIGN_CENTRE) attr.SetBackgroundColour(wx.Colour(240, 240, 240)) attr.SetReadOnly(True) self.grid.SetColAttr(col, attr) self.Bind(gridlib.EVT_GRID_CELL_LEFT_CLICK, self.onGridLeftClick) self.Bind(gridlib.EVT_GRID_SELECT_CELL, self.onCellSelected) self.Bind(gridlib.EVT_GRID_CELL_CHANGED, self.onCellChanged) self.Bind(gridlib.EVT_GRID_EDITOR_CREATED, self.onEditorCreated) vs.Add(hs, 0, flag=wx.EXPAND | wx.ALL, border=4) vs.Add(self.grid, 1, flag=wx.GROW | wx.ALL | wx.EXPAND) self.rowCur = 0 self.colCur = 0 self.SetSizer(vs)
def __init__(self, parent, id=wx.ID_ANY, size=wx.DefaultSize): super(Pulled, self).__init__(parent, id, size=size) self.state = RaceInputState() vsOverall = wx.BoxSizer(wx.VERTICAL) self.hbs = wx.BoxSizer(wx.HORIZONTAL) self.showingCategoryLabel = wx.StaticText(self, label=u'{}:'.format( _('Start Wave'))) self.showingCategory = wx.StaticText(self) self.showingCategory.SetFont(self.showingCategory.GetFont().Bold()) self.categoryLabel = wx.StaticText(self, label=_('Category:')) self.categoryChoice = wx.Choice(self) self.Bind(wx.EVT_CHOICE, self.doChooseCategory, self.categoryChoice) self.useTableToPullRidersCkBox = wx.CheckBox( self, label=_('Use this Table to Pull Riders')) self.useTableToPullRidersCkBox.SetToolTip( wx.ToolTip( _('Also requires Laps to be set in Categories screen.'))) self.commitBtn = wx.Button(self, label=_('Commit')) self.commitBtn.Bind(wx.EVT_BUTTON, self.doCommit) self.hbs.Add(self.showingCategoryLabel, flag=wx.LEFT | wx.ALIGN_CENTRE_VERTICAL, border=0) self.hbs.Add(self.showingCategory, flag=wx.LEFT | wx.ALIGN_CENTRE_VERTICAL, border=2) self.hbs.Add(self.categoryLabel, flag=wx.LEFT | wx.ALIGN_CENTRE_VERTICAL, border=18) self.hbs.Add(self.categoryChoice, flag=wx.LEFT | wx.ALIGN_CENTRE_VERTICAL, border=2) self.hbs.Add(self.useTableToPullRidersCkBox, flag=wx.LEFT | wx.ALIGN_CENTRE_VERTICAL, border=18) self.hbs.Add(self.commitBtn, flag=wx.LEFT | wx.ALIGN_CENTRE_VERTICAL, border=32) #--------------------------------------------------------------- self.colNameFields = ( (_('Laps to Go'), 'lapsToGo', 'i'), (u' ' + _('Bib'), 'pulledBib', 'i'), (u'Name', 'pulledName', 's'), (u'Team', 'pulledTeam', 's'), (u'Component', 'pulledComponent', 's'), (u'Error', 'pulledError', 's'), ) self.colnames = [ colName for colName, fieldName, dataType in self.colNameFields ] self.iCol = dict((fieldName, i) for i, (colName, fieldName, dataType) in enumerate(self.colNameFields) if fieldName) self.grid = ReorderableGrid(self) self.grid.CreateGrid(0, len(self.colNameFields)) GetTranslation = _ for col, (colName, fieldName, dataType) in enumerate(self.colNameFields): self.grid.SetColLabelValue(col, colName) attr = wx.grid.GridCellAttr() if dataType == 'i': attr.SetAlignment(wx.ALIGN_RIGHT, wx.ALIGN_TOP) attr.SetEditor(wx.grid.GridCellFloatEditor(precision=0)) attr.SetRenderer(wx.grid.GridCellFloatRenderer(precision=0)) elif dataType == 'f': attr.SetAlignment(wx.ALIGN_RIGHT, wx.ALIGN_TOP) attr.SetEditor(wx.grid.GridCellFloatEditor(precision=2)) attr.SetRenderer(wx.grid.GridCellFloatRenderer(precision=2)) elif dataType == 't': attr.SetAlignment(wx.ALIGN_RIGHT, wx.ALIGN_CENTRE) attr.SetEditor(TimeEditor()) self.grid.SetColAttr(col, attr) self.grid.Bind(wx.grid.EVT_GRID_CELL_CHANGED, self.onCellChange) self.grid.AutoSizeColumns(False) self.grid.AutoSizeRows(False) #--------------------------------------------------------------- vsOverall.Add(self.hbs, 0, flag=wx.EXPAND | wx.ALL, border=4) vsOverall.Add(self.grid, 1, flag=wx.EXPAND | wx.ALL, border=4) self.SetSizer(vsOverall)
def __init__( self, parent, id=wx.ID_ANY, size=wx.DefaultSize ): super(Primes, self).__init__( parent, id, size=size ) self.state = RaceInputState() vsOverall = wx.BoxSizer( wx.VERTICAL ) #--------------------------------------------------------------- self.colNameFields = ( (_('Prime For'), 'effortType', 's'), (_('or Custom'), 'effortCustom', 's'), (_('Position'), 'position', 'i'), (_('Laps\nTo Go'), 'lapsToGo', 'i'), (_('Sponsor'), 'sponsor', 's'), (_('Cash'), 'cash', 'f'), (_('Merchandise'), 'merchandise', 's'), (_('Points'), 'points', 'i'), (_('Time\nBonus'), 'timeBonus', 't'), (_('Winner\nBib'), 'winnerBib', 'i'), (u'', 'winnerInfo', 's'), ) self.colnames = [colName for colName, fieldName, dataType in self.colNameFields] self.iCol = dict( (fieldName, i) for i, (colName, fieldName, dataType) in enumerate(self.colNameFields) if fieldName ) self.grid = ReorderableGrid( self ) self.grid.CreateGrid( 0, len(self.colNameFields) ) GetTranslation = _ for col, (colName, fieldName, dataType) in enumerate(self.colNameFields): self.grid.SetColLabelValue( col, colName ) attr = wx.grid.GridCellAttr() if fieldName == 'effortType': attr.SetEditor( wx.grid.GridCellChoiceEditor(choices=[GetTranslation(name) for code, name in EffortChoices]) ) attr.SetAlignment( wx.ALIGN_CENTRE, wx.ALIGN_TOP ) elif fieldName == 'position': attr.SetAlignment( wx.ALIGN_CENTRE, wx.ALIGN_TOP ) elif fieldName == 'winnerInfo': attr.SetReadOnly( True ) elif dataType == 'i': attr.SetAlignment( wx.ALIGN_RIGHT, wx.ALIGN_TOP ) attr.SetEditor( wx.grid.GridCellFloatEditor(precision=0) ) attr.SetRenderer( wx.grid.GridCellFloatRenderer(precision=0) ) elif dataType == 'f': attr.SetAlignment( wx.ALIGN_RIGHT, wx.ALIGN_TOP ) attr.SetEditor( wx.grid.GridCellFloatEditor(precision=2) ) attr.SetRenderer( wx.grid.GridCellFloatRenderer(precision=2) ) elif dataType == 't': attr.SetAlignment( wx.ALIGN_CENTRE, wx.ALIGN_CENTRE ) attr.SetEditor( TimeEditor() ) self.grid.SetColAttr( col, attr ) if fieldName == 'lapsToGo': self.lapsToGoCol = col self.grid.Bind( wx.grid.EVT_GRID_CELL_CHANGE, self.onCellChange ) self.grid.AutoSizeColumns( False ) self.grid.AutoSizeRows( False ) #--------------------------------------------------------------- self.photosButton = wx.Button( self, label=u'{}...'.format(_('Photos')) ) self.photosButton.Bind( wx.EVT_BUTTON, self.onPhotos ) self.finishStrip = wx.Button( self, label=u'{}...'.format(_('Finish Strip')) ) self.finishStrip.Bind( wx.EVT_BUTTON, self.onFinishStrip ) self.history = wx.Button( self, label=u'{}...'.format(_('Passings')) ) self.history.Bind( wx.EVT_BUTTON, self.onHistory ) self.newButton = wx.Button( self, id=wx.ID_NEW ) self.newButton.SetToolTip( wx.ToolTip(_('Create a new Prime')) ) self.newButton.Bind( wx.EVT_BUTTON, self.onNew ) self.nextPositionButton = wx.Button( self, label=('Next Position') ) self.nextPositionButton.SetToolTip( wx.ToolTip(_('Create a Prime from an Existing Prime for the Next Position')) ) self.nextPositionButton.Bind( wx.EVT_BUTTON, self.onNextPosition ) self.nextPrimeButton = wx.Button( self, label=('Next Prime') ) self.nextPrimeButton.SetToolTip( wx.ToolTip(_('Create a Prime from an Existing Prime')) ) self.nextPrimeButton.Bind( wx.EVT_BUTTON, self.onNextPrime ) self.deleteButton = wx.Button( self, id=wx.ID_DELETE ) self.deleteButton.SetToolTip( wx.ToolTip(_('Delete a Prime')) ) self.deleteButton.Bind( wx.EVT_BUTTON, self.onDelete ) hsButtons = wx.BoxSizer( wx.HORIZONTAL ) hsButtons.Add( self.photosButton, flag=wx.ALL, border=4 ) hsButtons.Add( self.finishStrip, flag=wx.ALL, border=4 ) hsButtons.Add( self.history, flag=wx.ALL, border=4 ) hsButtons.AddStretchSpacer() hsButtons.Add( self.newButton, flag=wx.ALL, border=4 ) hsButtons.Add( self.nextPositionButton, flag=wx.ALL, border=4 ) hsButtons.Add( self.nextPrimeButton, flag=wx.ALL, border=4 ) hsButtons.Add( self.deleteButton, flag=wx.ALL, border=4 ) #--------------------------------------------------------------- vsOverall.Add( self.grid, 1, flag=wx.EXPAND|wx.ALL, border=4 ) vsOverall.Add( hsButtons, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.BOTTOM, border=4 ) self.SetSizer( vsOverall )