16b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi""" 26b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi File: 36b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi JetCtrls.py 46b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 56b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi Contents and purpose: 66b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi Auditions a jet file to simulate interactive music functions 76b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 86b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi Copyright (c) 2008 Android Open Source Project 96b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 106b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi Licensed under the Apache License, Version 2.0 (the "License"); 116b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi you may not use this file except in compliance with the License. 126b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi You may obtain a copy of the License at 136b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 146b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi http://www.apache.org/licenses/LICENSE-2.0 156b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 166b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi Unless required by applicable law or agreed to in writing, software 176b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi distributed under the License is distributed on an "AS IS" BASIS, 186b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 196b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi See the License for the specific language governing permissions and 206b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi limitations under the License. 216b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi""" 226b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 236b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviimport wx 246b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviimport sys 256b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 266b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivifrom wx.lib.mixins.listctrl import CheckListCtrlMixin, ListCtrlAutoWidthMixin, ColumnSorterMixin 276b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivifrom JetUtils import * 286b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivifrom JetDefs import * 296b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 306b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviclass JetSpin(wx.SpinCtrl): 316b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi """ Spin control """ 326b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def __init__(self, parent, id=-1,value=wx.EmptyString,pos=wx.DefaultPosition,size=wx.DefaultSize,style=wx.SP_ARROW_KEYS,min=0,max=100,initial=0): 336b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.SpinCtrl.__init__(self, parent, id=id,value=value,pos=(pos[0]-MacOffset(),pos[1]),size=size,style=style,min=min,max=max,initial=initial) 346b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 356b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def SetValue(self, val): 366b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi try: 376b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if type(val).__name__=='str': 386b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.SpinCtrl.SetValue(self, int(val)) 396b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi else: 406b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.SpinCtrl.SetValue(self, val) 416b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi except: 426b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.SpinCtrl.SetValue(self, 0) 436b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 446b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviclass JetSpinOneBased(JetSpin): 456b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi """ Spin control that's one based """ 466b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def __init__(self, parent, id=-1,value=wx.EmptyString,pos=wx.DefaultPosition,size=wx.DefaultSize,style=wx.SP_ARROW_KEYS,min=0,max=100,initial=0): 476b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.SpinCtrl.__init__(self, parent, id=id,value=value,pos=(pos[0]-MacOffset(),pos[1]),size=size,style=style,min=min,max=max,initial=initial) 486b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 496b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def SetValue(self, val): 506b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi try: 516b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if type(val).__name__=='str': 526b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.SpinCtrl.SetValue(self, int(val) + 1) 536b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi else: 546b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.SpinCtrl.SetValue(self, val + 1) 556b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi except: 566b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.SpinCtrl.SetValue(self, 1) 576b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 586b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def GetValue(self): 596b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi val = wx.SpinCtrl.GetValue(self) 606b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi val = val - 1 616b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi return val 626b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 636b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviclass JetCheckBox(wx.CheckBox): 646b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi """ Checkbox control """ 656b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def __init__(self, parent, id=-1,label=wx.EmptyString,pos=wx.DefaultPosition,size=wx.DefaultSize): 666b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.CheckBox.__init__(self, parent, id=id, label=label, pos=pos, size=size) 676b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 686b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def SetValue(self, val): 696b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi try: 706b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if type(val).__name__=='str': 716b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if val == 'True': 726b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi val = True 736b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi else: 746b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi val = False 756b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.CheckBox.SetValue(self, val) 766b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi else: 776b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.CheckBox.SetValue(self, val) 786b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi except: 796b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.CheckBox.SetValue(self, False) 806b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 816b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviclass JetRadioButton(wx.RadioButton): 826b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi """ Radio button control """ 836b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def __init__(self, parent, id=-1,label=wx.EmptyString,pos=wx.DefaultPosition,size=wx.DefaultSize): 846b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.RadioButton.__init__(self, parent, id=id, label=label, pos=pos, size=size) 856b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 866b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def SetValue(self, val): 876b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi try: 886b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if type(val).__name__=='str': 896b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if val == 'True': 906b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi val = True 916b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi else: 926b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi val = False 936b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.RadioButton.SetValue(self, val) 946b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi else: 956b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.RadioButton.SetValue(self, val) 966b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi except: 976b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.RadioButton.SetValue(self, False) 986b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 996b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviclass JetListCtrl(wx.ListCtrl, ListCtrlAutoWidthMixin, ColumnSorterMixin): 1006b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi """ List control """ 1016b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def __init__(self, parent, id=-1, pos=wx.DefaultPosition, size=wx.DefaultSize): 1026b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.ListCtrl.__init__(self, parent, id, pos=pos, size=size, style=wx.LC_REPORT | wx.SUNKEN_BORDER) 1036b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi ListCtrlAutoWidthMixin.__init__(self) 1046b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.iCol = 0 1056b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.iWidth = 0 1066b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.OnSortOrderChangedAlert = None 1076b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.iInitialized = False 1086b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 1096b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def AddCol(self, title, width): 1106b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.InsertColumn(self.iCol, title) 1116b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if width > 0: 1126b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.SetColumnWidth(self.iCol, width) 1136b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi else: 1146b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi width = self.GetColumnWidth(self.iCol) 1156b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.iCol += 1 1166b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.iWidth = self.iWidth + width 1176b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.SetSize((self.iWidth + 10, -1)) 1186b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 1196b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def AddRows(self, values): 1206b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi for value in values: 1216b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi iCol = 0 1226b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi for row in value: 1236b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if iCol == 0: 1246b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi index = self.InsertStringItem(sys.maxint, row) 1256b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi else: 1266b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.SetStringItem(index, iCol, row) 1276b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi iCol = iCol + 1 1286b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 1296b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py 1306b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def GetListCtrl(self): 1316b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi return self 1326b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 1336b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def InitSorting(self, cols): 1346b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if not self.iInitialized: 1356b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi ColumnSorterMixin.__init__(self, cols) 1366b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.iInitialized = True 1376b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 1386b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def OnSortOrderChanged(self): 1396b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if self.OnSortOrderChangedAlert is not None: 1406b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.OnSortOrderChangedAlert() 1416b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 1426b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def __OnColClick(self, evt): 1436b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi oldCol = self._col 1446b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self._col = col = evt.GetColumn() 1456b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self._colSortFlag[col] = int(not self._colSortFlag[col]) 1466b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.OnSortOrderChanged() 1476b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 1486b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviclass JetCheckListCtrl(wx.ListCtrl, CheckListCtrlMixin, ListCtrlAutoWidthMixin, ColumnSorterMixin): 1496b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi """ List control with checkboxes on each line """ 1506b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def __init__(self, parent, id=-1, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.LC_REPORT | wx.SUNKEN_BORDER): 1516b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.ListCtrl.__init__(self, parent, id, pos=pos, size=size, style=style) 1526b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi CheckListCtrlMixin.__init__(self) 1536b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi ListCtrlAutoWidthMixin.__init__(self) 1546b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 1556b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.iCol = 0 1566b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.iWidth = 0 1576b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.OnSortOrderChangedAlert = None 1586b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.iInitialized = False 1596b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 1606b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def AddCol(self, title, width): 1616b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.InsertColumn(self.iCol, title) 1626b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if width > 0: 1636b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.SetColumnWidth(self.iCol, width) 1646b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi else: 1656b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi width = self.GetColumnWidth(self.iCol) 1666b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.iCol += 1 1676b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.iWidth = self.iWidth + width 1686b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.SetSize((self.iWidth + 10, -1)) 1696b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 1706b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def OnCheckItem(self, index, flag): 1716b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if hasattr(self, 'BindCheckBoxFct'): 1726b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.BindCheckBoxFct(index, flag) 1736b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 1746b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def BindCheckBox(self, fct): 1756b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.BindCheckBoxFct = fct 1766b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 1776b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def AddRows(self, values): 1786b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi for value in values: 1796b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi iCol = 0 1806b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi for row in value: 1816b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if iCol == 0: 1826b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi index = self.InsertStringItem(sys.maxint, row) 1836b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi else: 1846b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.SetStringItem(index, iCol, row) 1856b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi iCol = iCol + 1 1866b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 1876b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py 1886b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def GetListCtrl(self): 1896b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi return self 1906b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 1916b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def InitSorting(self, cols): 1926b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if not self.iInitialized: 1936b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi ColumnSorterMixin.__init__(self, cols) 1946b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.iInitialized = True 1956b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 1966b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def OnSortOrderChanged(self): 1976b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if self.OnSortOrderChangedAlert is not None: 1986b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.OnSortOrderChangedAlert() 1996b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 2006b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def __OnColClick(self, evt): 2016b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi oldCol = self._col 2026b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self._col = col = evt.GetColumn() 2036b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self._colSortFlag[col] = int(not self._colSortFlag[col]) 2046b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.OnSortOrderChanged() 2056b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 2066b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviclass JetTrackCtrl(JetCheckListCtrl): 2076b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi """ List control specifically designed to show tracks in midi file """ 2086b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def __init__(self, parent, id=-1, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.LC_REPORT | wx.SUNKEN_BORDER): 2096b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.ListCtrl.__init__(self, parent, id, pos=pos, size=size, style=style) 2106b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi CheckListCtrlMixin.__init__(self) 2116b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi ListCtrlAutoWidthMixin.__init__(self) 2126b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 2136b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.iCol = 0 2146b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.iWidth = 0 2156b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.muteFlags = 0 2166b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 2176b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def SetValue(self, muteFlags): 2186b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.muteFlags = muteFlags 2196b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 2206b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def GetValue(self): 2216b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi return self.muteFlags 2226b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 2236b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def CheckTracks(self, muteFlags): 2246b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi num = self.GetItemCount() 2256b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi for iRow in range(num): 2266b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi track_num = self.GetTrackNumber(iRow) 2276b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.CheckItem(iRow, GetMute(track_num, muteFlags)) 2286b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 2296b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def AddTrackRow(self, track, loadEmpty=False): 2306b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if loadEmpty or not track.empty: 2316b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi index = self.InsertStringItem(sys.maxint, str(track.track)) 2326b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.SetStringItem(index, 1, str(track.channel)) 2336b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.SetStringItem(index, 2, str(track.name)) 2346b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 2356b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def GetTrackNumber(self, index): 2366b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi return getColumnValue(self, index, 0) 2376b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 2386b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviclass JetFileCombo(): 2396b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi """ Combo box with file open button """ 2406b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def __init__(self, parent, pos=(0,0), size=(200,-1), title='Open File', spec='*.*', id=-1): 2416b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.spec = spec 2426b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.title = title 2436b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.EventFire = False 2446b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi BUTWIDTH = 20 2456b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi BORDER = 5 2466b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi w = size[0] - (BUTWIDTH + BORDER) 2476b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi col = pos[0] + w + BORDER 2486b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 2496b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.cmb = wx.ComboBox(parent, id, "", pos=(pos[0]-MacOffset(),pos[1]), size=(w, -1), style=wx.CB_DROPDOWN) 2506b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.btn = wx.Button(parent, -1, "...", pos=(col, pos[1]+MacOffset()), size=(BUTWIDTH,self.cmb.GetSize()[1])) 2516b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.btn.Bind(wx.EVT_BUTTON, self.OnBrowse, self.btn) 2526b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 2536b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def OnBrowse(self, event): 2546b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi os = __import__('os') 2556b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi defDir = IniGetValue(JetDefs.JETCREATOR_INI, JetDefs.INI_DEFAULTDIRS, self.spec, 'str', str(os.getcwd())) 2566b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if OsWindows(): 2576b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi defDir = defDir.replace('/','\\') 2586b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi else: 2596b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi defDir = defDir.replace('\\', '/') 2606b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 2616b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi dlg = wx.FileDialog(None, self.title, defDir, '', self.spec, wx.FD_OPEN) 2626b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi ret = dlg.ShowModal() 2636b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if ret == wx.ID_OK: 2646b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi IniSetValue(JetDefs.JETCREATOR_INI, JetDefs.INI_DEFAULTDIRS, self.spec, str(FileJustPath(dlg.GetPath()))) 2656b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi val = dlg.GetPath() 2666b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 2676b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.Append(val) 2686b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.cmb.SetValue(val) 2696b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 2706b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if self.EventFire: 2716b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi SendEvent(self.cmb, wx.EVT_COMBOBOX.evtType[0]) 2726b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi dlg.Destroy() 2736b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 2746b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def SetEventFire(self, fire): 2756b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.EventFire = fire 2766b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 2776b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def GetValue(self): 2786b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi return StrNoneChk(self.cmb.GetValue()) 2796b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 2806b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def SetValue(self, val): 2816b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi try: 2826b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.cmb.SetValue(val) 2836b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi except: 2846b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi pass 2856b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 2866b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def Append(self, val): 2876b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi try: 2886b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.cmb.Append(val) 2896b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi except: 2906b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi pass 2916b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 2926b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def SetFocus(self): 2936b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.cmb.SetFocus() 2946b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 2956b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def SetListValues(self, list): 2966b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.cmb.AppendItems(list) 2976b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 2986b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def Enable(self, enable): 2996b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.cmb.Enable(enable) 3006b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.btn.Enable(enable) 3016b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 3026b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def SetHelpText(self, Lbl): 3036b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.cmb.SetHelpText(Lbl) 3046b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.btn.SetHelpText(Lbl) 3056b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 3066b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviclass JetFileText(): 3076b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi """ Capture a filename with a button to browse for a file """ 3086b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def __init__(self, parent, pos=(0,0), size=(200,-1), title='Open File', spec='*.*', id=-1): 3096b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.spec = spec 3106b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.title = title 3116b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi BUTWIDTH = 20 3126b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi BORDER = 5 3136b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi w = size[0] - (BUTWIDTH + BORDER) 3146b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi col = pos[0] + w + BORDER 3156b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 3166b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.txt = wx.TextCtrl(parent, id, "", pos=(pos[0]-MacOffset(),pos[1]), size=(w, -1)) 3176b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.btn = wx.Button(parent, -1, "...", pos=(col, pos[1]), size=(BUTWIDTH,self.txt.GetSize()[1])) 3186b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.btn.Bind(wx.EVT_BUTTON, self.OnBrowse, self.btn) 3196b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 3206b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def OnBrowse(self, event): 3216b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi os = __import__('os') 3226b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi defDir = IniGetValue(JetDefs.JETCREATOR_INI, JetDefs.INI_DEFAULTDIRS, self.spec, 'str', str(os.getcwd())) 3236b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if OsWindows(): 3246b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi defDir = defDir.replace('/','\\') 3256b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi else: 3266b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi defDir = defDir.replace('\\', '/') 3276b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 3286b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi dlg = wx.FileDialog(None, self.title, defDir, '', self.spec, wx.FD_OPEN) 3296b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi ret = dlg.ShowModal() 3306b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if ret == wx.ID_OK: 3316b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi IniSetValue(JetDefs.JETCREATOR_INI, JetDefs.INI_DEFAULTDIRS, self.spec, str(FileJustPath(dlg.GetPath()))) 3326b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi val = dlg.GetPath() 3336b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.txt.SetValue(val) 3346b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi dlg.Destroy() 3356b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 3366b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def GetValue(self): 3376b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi return StrNoneChk(self.txt.GetValue()) 3386b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 3396b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def SetValue(self, val): 3406b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi try: 3416b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.txt.SetValue(val) 3426b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi except: 3436b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi pass 3446b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 3456b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def Append(self, val): 3466b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi try: 3476b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.txt.Append(val) 3486b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi except: 3496b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi pass 3506b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 3516b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def SetFocus(self): 3526b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.txt.SetFocus() 3536b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 3546b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def Enable(self, enable): 3556b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.txt.Enable(enable) 3566b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.btn.Enable(enable) 3576b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 3586b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def SetHelpText(self, Lbl): 3596b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.txt.SetHelpText(Lbl) 3606b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.btn.SetHelpText(Lbl) 3616b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 3626b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trividef YesNo(title, question, default): 3636b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi """ Simple Yes/No question box """ 3646b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi dlg = wx.MessageDialog(None, question, title, wx.YES_NO | wx.ICON_QUESTION) 3656b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if dlg.ShowModal() == wx.ID_YES: 3666b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi result = True 3676b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi else: 3686b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi result = False 3696b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi dlg.Destroy() 3706b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi return result 3716b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 3726b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trividef YesNoCancel(title, question, default): 3736b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi """ Simple Yes/No question box """ 3746b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi dlg = wx.MessageDialog(None, question, title, wx.YES_NO | wx.CANCEL | wx.ICON_QUESTION) 3756b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi result = dlg.ShowModal() 3766b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi dlg.Destroy() 3776b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi return result 3786b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 3796b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trividef ErrorMsg(title, message): 3806b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi """ Dipslay an error message """ 3816b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi dlg = wx.MessageDialog(None, message, title, wx.ICON_ERROR) 3826b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi dlg.ShowModal() 3836b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi dlg.Destroy() 3846b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 3856b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trividef InfoMsg(title, message): 3866b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi """ Displays an informational message """ 3876b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi dlg = wx.MessageDialog(None, message, title, wx.ICON_INFORMATION) 3886b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi dlg.ShowModal() 3896b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi dlg.Destroy() 3906b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 3916b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviclass TimeCtrl(wx.Frame): 3926b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi """ Combination of controls to capture measure, beat, tick times """ 3936b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def __init__(self, parent, pos=(0,0), minimums=(1,1,0), maximums=(999,4,480), value=JetDefs.MBT_DEFAULT, ctlName=''): 3946b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.Frame.__init__(self, parent, -1) 3956b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 3966b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.ChangeCallbackFct = None 3976b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.ctlName = ctlName 3986b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.mx = maximums 3996b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.mn = minimums 4006b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.maxTicks = 0 4016b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.iCtrl = 0 4026b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi p1 = pos[0] 4036b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi top = pos[1] + MacOffset() 4046b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi w1 = 30 4056b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time = (wx.TextCtrl(parent, -1, str(value[0]), pos=(p1, top), size=(w1, -1), style=wx.TE_NOHIDESEL), 4066b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.TextCtrl(parent, -1, str(value[1]), pos=(p1 + (w1 + 3), top), size=(w1, -1), style=wx.TE_NOHIDESEL), 4076b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.TextCtrl(parent, -1, str(value[2]), pos=(p1 + (w1 + 3) *2, top), size=(w1, -1), style=wx.TE_NOHIDESEL), 4086b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi ) 4096b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi h = self.time[2].GetSize().height 4106b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi w = self.time[2].GetSize().width + self.time[2].GetPosition().x + 8 4116b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 4126b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.spin = wx.SpinButton(parent, -1, (w, top), (h*2/3, h), wx.SP_VERTICAL) 4136b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.spin.SetValue(1) 4146b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.spin.SetRange(-999,999) 4156b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 4166b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.spin.Bind(wx.EVT_SPIN_UP, self.OnSpinUp, self.spin) 4176b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.spin.Bind(wx.EVT_SPIN_DOWN, self.OnSpinDown, self.spin) 4186b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 4196b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[0].Bind(wx.EVT_SET_FOCUS, self.OnFocusMeasure, self.time[0] ) 4206b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[1].Bind(wx.EVT_SET_FOCUS, self.OnFocusBeat, self.time[1] ) 4216b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[2].Bind(wx.EVT_SET_FOCUS, self.OnFocusTick, self.time[2] ) 4226b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 4236b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[0].Bind(wx.EVT_KILL_FOCUS, self.OnChangeVal, self.time[0] ) 4246b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[1].Bind(wx.EVT_KILL_FOCUS, self.OnChangeVal, self.time[1] ) 4256b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[2].Bind(wx.EVT_KILL_FOCUS, self.OnChangeVal, self.time[2] ) 4266b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 4276b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.SetValue(value) 4286b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 4296b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def UnBindKillFocus(self): 4306b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[0].Unbind(wx.EVT_KILL_FOCUS, self.time[0]) 4316b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[1].Unbind(wx.EVT_KILL_FOCUS, self.time[1]) 4326b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[2].Unbind(wx.EVT_KILL_FOCUS, self.time[2]) 4336b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 4346b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def SetChangeCallbackFct(self, ChangeCallbackFct): 4356b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.ChangeCallbackFct = ChangeCallbackFct 4366b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 4376b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def OnChangeVal(self, event=None): 4386b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if not OsWindows(): 4396b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[self.iCtrl].SetSelection(-1,-1) 4406b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if int(self.time[self.iCtrl].GetValue()) > self.mx[self.iCtrl]: 4416b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[self.iCtrl].SetValue(str(self.mx[self.iCtrl])) 4426b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if int(self.time[self.iCtrl].GetValue()) < self.mn[self.iCtrl]: 4436b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[self.iCtrl].SetValue(str(self.mn[self.iCtrl])) 4446b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if self.ChangeCallbackFct is not None: 4456b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.ChangeCallbackFct() 4466b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if event is not None: 4476b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi event.Skip() 4486b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 4496b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def OnSpinUp(self, event): 4506b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if int(self.time[self.iCtrl].GetValue()) < self.mx[self.iCtrl]: 4516b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[self.iCtrl].SetValue(str(int(self.time[self.iCtrl].GetValue()) + 1)) 4526b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.OnChangeVal() 4536b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 4546b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def OnSpinDown(self, event): 4556b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if int(self.time[self.iCtrl].GetValue()) > self.mn[self.iCtrl]: 4566b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[self.iCtrl].SetValue(str(int(self.time[self.iCtrl].GetValue()) - 1)) 4576b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.OnChangeVal() 4586b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 4596b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def OnFocusMeasure(self, event): 4606b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.iCtrl = 0 4616b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 4626b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def OnFocusBeat(self, event): 4636b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.iCtrl = 1 4646b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 4656b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def OnFocusTick(self, event): 4666b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.iCtrl = 2 4676b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 4686b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def SetValue(self, mbt): 4696b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi try: 4706b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if type(mbt).__name__=='str' or type(mbt).__name__=='unicode': 4716b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi mbt = ConvertStrTimeToTuple(mbt) 4726b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi mbt = mbtFct(mbt, 1) 4736b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[0].SetValue(str(mbt[0])) 4746b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[1].SetValue(str(mbt[1])) 4756b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[2].SetValue(str(mbt[2])) 4766b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi except: 4776b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[0].SetValue(str(self.mn[0])) 4786b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[1].SetValue(str(self.mn[1])) 4796b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[2].SetValue(str(self.mn[2])) 4806b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if not OsWindows(): 4816b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[0].SetSelection(-1,-1) 4826b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[1].SetSelection(-1,-1) 4836b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[2].SetSelection(-1,-1) 4846b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 4856b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def GetValue(self, typ='str'): 4866b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi try: 4876b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi if typ == 'str': 4886b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi ret = "%d:%d:%d" % (int(self.time[0].GetValue()), int(self.time[1].GetValue()), int(self.time[2].GetValue())) 4896b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi else: 4906b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi ret = (int(self.time[0].GetValue()), int(self.time[1].GetValue()), int(self.time[2].GetValue())) 4916b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi except: 4926b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi ret = self.minimums 4936b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi return mbtFct(ret, -1) 4946b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 4956b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def Enable(self, enable): 4966b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[0].Enable(enable) 4976b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[1].Enable(enable) 4986b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[2].Enable(enable) 4996b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.spin.Enable(enable) 5006b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 5016b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def SetFocus(self): 5026b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[0].SetFocus() 5036b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 5046b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def SetMaxMbt(self, m, b, t): 5056b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.mx = (m,b,t) 5066b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 5076b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def GetMaxMbt(self): 5086b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi return "%d:%d:%d" % self.mx 5096b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 5106b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def SetMinMbt(self, m, b, t): 5116b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.mn = (m,b,t) 5126b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 5136b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def SetMaxTicks(self, maxTicks): 5146b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.maxTicks = maxTicks 5156b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 5166b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def GetMaxTicks(self): 5176b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi return self.maxTicks 5186b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 5196b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def SetHelpText(self, Lbl): 5206b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.spin.SetHelpText(Lbl) 5216b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[0].SetHelpText(Lbl) 5226b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[1].SetHelpText(Lbl) 5236b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.time[2].SetHelpText(Lbl) 5246b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 5256b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def GetMeasure(self): 5266b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi return int(self.time[0].GetValue()) 5276b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 5286b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def GetBeat(self): 5296b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi return int(self.time[1].GetValue()) 5306b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 5316b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def GetTick(self): 5326b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi return int(self.time[2].GetValue()) 5336b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 5346b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviif __name__ == '__main__': 5356b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi """ Test code for controls """ 5366b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi class TestFrame(wx.Frame): 5376b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def __init__(self, parent, id, title): 5386b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.Frame.__init__(self, parent, id, title, size=(350, 220)) 5396b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 5406b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi panel = wx.Panel(self, -1) 5416b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 5426b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.tc = TimeCtrl(panel, pos=(30, 20), maximums=(25, 4, 120), value=(2, 3, 4)) 5436b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi #tc.Enable(True) 5446b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi #tc.SetValue((2,3,4)) 5456b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi #tc.SetValue("1:2:3") 5466b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi #print(tc.GetValue()) 5476b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 5486b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi js = JetSpin(panel, -1, pos=(30, 100)) 5496b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi js.SetValue("1") 5506b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi #js.SetValue(1) 5516b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 5526b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi #fl = JetFileCombo(panel) 5536b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 5546b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi wx.EVT_CLOSE(self, self.OnClose) 5556b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 5566b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.Centre() 5576b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.Show(True) 5586b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 5596b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi def OnClose(self, event): 5606b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.tc.UnBindKillFocus() 5616b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi self.Destroy() 5626b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 5636b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi app = wx.App(None) 5646b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi TestFrame(None, -1, 'TestFrame') 5656b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi app.MainLoop() 5666b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 5676b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi 568