1*f81fb7c4SAndroid Build Coastguard Worker""" 2*f81fb7c4SAndroid Build Coastguard Worker File: 3*f81fb7c4SAndroid Build Coastguard Worker JetCtrls.py 4*f81fb7c4SAndroid Build Coastguard Worker 5*f81fb7c4SAndroid Build Coastguard Worker Contents and purpose: 6*f81fb7c4SAndroid Build Coastguard Worker Auditions a jet file to simulate interactive music functions 7*f81fb7c4SAndroid Build Coastguard Worker 8*f81fb7c4SAndroid Build Coastguard Worker Copyright (c) 2008 Android Open Source Project 9*f81fb7c4SAndroid Build Coastguard Worker 10*f81fb7c4SAndroid Build Coastguard Worker Licensed under the Apache License, Version 2.0 (the "License"); 11*f81fb7c4SAndroid Build Coastguard Worker you may not use this file except in compliance with the License. 12*f81fb7c4SAndroid Build Coastguard Worker You may obtain a copy of the License at 13*f81fb7c4SAndroid Build Coastguard Worker 14*f81fb7c4SAndroid Build Coastguard Worker http://www.apache.org/licenses/LICENSE-2.0 15*f81fb7c4SAndroid Build Coastguard Worker 16*f81fb7c4SAndroid Build Coastguard Worker Unless required by applicable law or agreed to in writing, software 17*f81fb7c4SAndroid Build Coastguard Worker distributed under the License is distributed on an "AS IS" BASIS, 18*f81fb7c4SAndroid Build Coastguard Worker WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19*f81fb7c4SAndroid Build Coastguard Worker See the License for the specific language governing permissions and 20*f81fb7c4SAndroid Build Coastguard Worker limitations under the License. 21*f81fb7c4SAndroid Build Coastguard Worker""" 22*f81fb7c4SAndroid Build Coastguard Worker 23*f81fb7c4SAndroid Build Coastguard Workerimport wx 24*f81fb7c4SAndroid Build Coastguard Workerimport sys 25*f81fb7c4SAndroid Build Coastguard Worker 26*f81fb7c4SAndroid Build Coastguard Workerfrom wx.lib.mixins.listctrl import CheckListCtrlMixin, ListCtrlAutoWidthMixin, ColumnSorterMixin 27*f81fb7c4SAndroid Build Coastguard Workerfrom JetUtils import * 28*f81fb7c4SAndroid Build Coastguard Workerfrom JetDefs import * 29*f81fb7c4SAndroid Build Coastguard Worker 30*f81fb7c4SAndroid Build Coastguard Workerclass JetSpin(wx.SpinCtrl): 31*f81fb7c4SAndroid Build Coastguard Worker """ Spin control """ 32*f81fb7c4SAndroid Build Coastguard Worker 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): 33*f81fb7c4SAndroid Build Coastguard Worker 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) 34*f81fb7c4SAndroid Build Coastguard Worker 35*f81fb7c4SAndroid Build Coastguard Worker def SetValue(self, val): 36*f81fb7c4SAndroid Build Coastguard Worker try: 37*f81fb7c4SAndroid Build Coastguard Worker if type(val).__name__=='str': 38*f81fb7c4SAndroid Build Coastguard Worker wx.SpinCtrl.SetValue(self, int(val)) 39*f81fb7c4SAndroid Build Coastguard Worker else: 40*f81fb7c4SAndroid Build Coastguard Worker wx.SpinCtrl.SetValue(self, val) 41*f81fb7c4SAndroid Build Coastguard Worker except: 42*f81fb7c4SAndroid Build Coastguard Worker wx.SpinCtrl.SetValue(self, 0) 43*f81fb7c4SAndroid Build Coastguard Worker 44*f81fb7c4SAndroid Build Coastguard Workerclass JetSpinOneBased(JetSpin): 45*f81fb7c4SAndroid Build Coastguard Worker """ Spin control that's one based """ 46*f81fb7c4SAndroid Build Coastguard Worker 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): 47*f81fb7c4SAndroid Build Coastguard Worker 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) 48*f81fb7c4SAndroid Build Coastguard Worker 49*f81fb7c4SAndroid Build Coastguard Worker def SetValue(self, val): 50*f81fb7c4SAndroid Build Coastguard Worker try: 51*f81fb7c4SAndroid Build Coastguard Worker if type(val).__name__=='str': 52*f81fb7c4SAndroid Build Coastguard Worker wx.SpinCtrl.SetValue(self, int(val) + 1) 53*f81fb7c4SAndroid Build Coastguard Worker else: 54*f81fb7c4SAndroid Build Coastguard Worker wx.SpinCtrl.SetValue(self, val + 1) 55*f81fb7c4SAndroid Build Coastguard Worker except: 56*f81fb7c4SAndroid Build Coastguard Worker wx.SpinCtrl.SetValue(self, 1) 57*f81fb7c4SAndroid Build Coastguard Worker 58*f81fb7c4SAndroid Build Coastguard Worker def GetValue(self): 59*f81fb7c4SAndroid Build Coastguard Worker val = wx.SpinCtrl.GetValue(self) 60*f81fb7c4SAndroid Build Coastguard Worker val = val - 1 61*f81fb7c4SAndroid Build Coastguard Worker return val 62*f81fb7c4SAndroid Build Coastguard Worker 63*f81fb7c4SAndroid Build Coastguard Workerclass JetCheckBox(wx.CheckBox): 64*f81fb7c4SAndroid Build Coastguard Worker """ Checkbox control """ 65*f81fb7c4SAndroid Build Coastguard Worker def __init__(self, parent, id=-1,label=wx.EmptyString,pos=wx.DefaultPosition,size=wx.DefaultSize): 66*f81fb7c4SAndroid Build Coastguard Worker wx.CheckBox.__init__(self, parent, id=id, label=label, pos=pos, size=size) 67*f81fb7c4SAndroid Build Coastguard Worker 68*f81fb7c4SAndroid Build Coastguard Worker def SetValue(self, val): 69*f81fb7c4SAndroid Build Coastguard Worker try: 70*f81fb7c4SAndroid Build Coastguard Worker if type(val).__name__=='str': 71*f81fb7c4SAndroid Build Coastguard Worker if val == 'True': 72*f81fb7c4SAndroid Build Coastguard Worker val = True 73*f81fb7c4SAndroid Build Coastguard Worker else: 74*f81fb7c4SAndroid Build Coastguard Worker val = False 75*f81fb7c4SAndroid Build Coastguard Worker wx.CheckBox.SetValue(self, val) 76*f81fb7c4SAndroid Build Coastguard Worker else: 77*f81fb7c4SAndroid Build Coastguard Worker wx.CheckBox.SetValue(self, val) 78*f81fb7c4SAndroid Build Coastguard Worker except: 79*f81fb7c4SAndroid Build Coastguard Worker wx.CheckBox.SetValue(self, False) 80*f81fb7c4SAndroid Build Coastguard Worker 81*f81fb7c4SAndroid Build Coastguard Workerclass JetRadioButton(wx.RadioButton): 82*f81fb7c4SAndroid Build Coastguard Worker """ Radio button control """ 83*f81fb7c4SAndroid Build Coastguard Worker def __init__(self, parent, id=-1,label=wx.EmptyString,pos=wx.DefaultPosition,size=wx.DefaultSize): 84*f81fb7c4SAndroid Build Coastguard Worker wx.RadioButton.__init__(self, parent, id=id, label=label, pos=pos, size=size) 85*f81fb7c4SAndroid Build Coastguard Worker 86*f81fb7c4SAndroid Build Coastguard Worker def SetValue(self, val): 87*f81fb7c4SAndroid Build Coastguard Worker try: 88*f81fb7c4SAndroid Build Coastguard Worker if type(val).__name__=='str': 89*f81fb7c4SAndroid Build Coastguard Worker if val == 'True': 90*f81fb7c4SAndroid Build Coastguard Worker val = True 91*f81fb7c4SAndroid Build Coastguard Worker else: 92*f81fb7c4SAndroid Build Coastguard Worker val = False 93*f81fb7c4SAndroid Build Coastguard Worker wx.RadioButton.SetValue(self, val) 94*f81fb7c4SAndroid Build Coastguard Worker else: 95*f81fb7c4SAndroid Build Coastguard Worker wx.RadioButton.SetValue(self, val) 96*f81fb7c4SAndroid Build Coastguard Worker except: 97*f81fb7c4SAndroid Build Coastguard Worker wx.RadioButton.SetValue(self, False) 98*f81fb7c4SAndroid Build Coastguard Worker 99*f81fb7c4SAndroid Build Coastguard Workerclass JetListCtrl(wx.ListCtrl, ListCtrlAutoWidthMixin, ColumnSorterMixin): 100*f81fb7c4SAndroid Build Coastguard Worker """ List control """ 101*f81fb7c4SAndroid Build Coastguard Worker def __init__(self, parent, id=-1, pos=wx.DefaultPosition, size=wx.DefaultSize): 102*f81fb7c4SAndroid Build Coastguard Worker wx.ListCtrl.__init__(self, parent, id, pos=pos, size=size, style=wx.LC_REPORT | wx.SUNKEN_BORDER) 103*f81fb7c4SAndroid Build Coastguard Worker ListCtrlAutoWidthMixin.__init__(self) 104*f81fb7c4SAndroid Build Coastguard Worker self.iCol = 0 105*f81fb7c4SAndroid Build Coastguard Worker self.iWidth = 0 106*f81fb7c4SAndroid Build Coastguard Worker self.OnSortOrderChangedAlert = None 107*f81fb7c4SAndroid Build Coastguard Worker self.iInitialized = False 108*f81fb7c4SAndroid Build Coastguard Worker 109*f81fb7c4SAndroid Build Coastguard Worker def AddCol(self, title, width): 110*f81fb7c4SAndroid Build Coastguard Worker self.InsertColumn(self.iCol, title) 111*f81fb7c4SAndroid Build Coastguard Worker if width > 0: 112*f81fb7c4SAndroid Build Coastguard Worker self.SetColumnWidth(self.iCol, width) 113*f81fb7c4SAndroid Build Coastguard Worker else: 114*f81fb7c4SAndroid Build Coastguard Worker width = self.GetColumnWidth(self.iCol) 115*f81fb7c4SAndroid Build Coastguard Worker self.iCol += 1 116*f81fb7c4SAndroid Build Coastguard Worker self.iWidth = self.iWidth + width 117*f81fb7c4SAndroid Build Coastguard Worker self.SetSize((self.iWidth + 10, -1)) 118*f81fb7c4SAndroid Build Coastguard Worker 119*f81fb7c4SAndroid Build Coastguard Worker def AddRows(self, values): 120*f81fb7c4SAndroid Build Coastguard Worker for value in values: 121*f81fb7c4SAndroid Build Coastguard Worker iCol = 0 122*f81fb7c4SAndroid Build Coastguard Worker for row in value: 123*f81fb7c4SAndroid Build Coastguard Worker if iCol == 0: 124*f81fb7c4SAndroid Build Coastguard Worker index = self.InsertStringItem(sys.maxint, row) 125*f81fb7c4SAndroid Build Coastguard Worker else: 126*f81fb7c4SAndroid Build Coastguard Worker self.SetStringItem(index, iCol, row) 127*f81fb7c4SAndroid Build Coastguard Worker iCol = iCol + 1 128*f81fb7c4SAndroid Build Coastguard Worker 129*f81fb7c4SAndroid Build Coastguard Worker # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py 130*f81fb7c4SAndroid Build Coastguard Worker def GetListCtrl(self): 131*f81fb7c4SAndroid Build Coastguard Worker return self 132*f81fb7c4SAndroid Build Coastguard Worker 133*f81fb7c4SAndroid Build Coastguard Worker def InitSorting(self, cols): 134*f81fb7c4SAndroid Build Coastguard Worker if not self.iInitialized: 135*f81fb7c4SAndroid Build Coastguard Worker ColumnSorterMixin.__init__(self, cols) 136*f81fb7c4SAndroid Build Coastguard Worker self.iInitialized = True 137*f81fb7c4SAndroid Build Coastguard Worker 138*f81fb7c4SAndroid Build Coastguard Worker def OnSortOrderChanged(self): 139*f81fb7c4SAndroid Build Coastguard Worker if self.OnSortOrderChangedAlert is not None: 140*f81fb7c4SAndroid Build Coastguard Worker self.OnSortOrderChangedAlert() 141*f81fb7c4SAndroid Build Coastguard Worker 142*f81fb7c4SAndroid Build Coastguard Worker def __OnColClick(self, evt): 143*f81fb7c4SAndroid Build Coastguard Worker oldCol = self._col 144*f81fb7c4SAndroid Build Coastguard Worker self._col = col = evt.GetColumn() 145*f81fb7c4SAndroid Build Coastguard Worker self._colSortFlag[col] = int(not self._colSortFlag[col]) 146*f81fb7c4SAndroid Build Coastguard Worker self.OnSortOrderChanged() 147*f81fb7c4SAndroid Build Coastguard Worker 148*f81fb7c4SAndroid Build Coastguard Workerclass JetCheckListCtrl(wx.ListCtrl, CheckListCtrlMixin, ListCtrlAutoWidthMixin, ColumnSorterMixin): 149*f81fb7c4SAndroid Build Coastguard Worker """ List control with checkboxes on each line """ 150*f81fb7c4SAndroid Build Coastguard Worker def __init__(self, parent, id=-1, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.LC_REPORT | wx.SUNKEN_BORDER): 151*f81fb7c4SAndroid Build Coastguard Worker wx.ListCtrl.__init__(self, parent, id, pos=pos, size=size, style=style) 152*f81fb7c4SAndroid Build Coastguard Worker CheckListCtrlMixin.__init__(self) 153*f81fb7c4SAndroid Build Coastguard Worker ListCtrlAutoWidthMixin.__init__(self) 154*f81fb7c4SAndroid Build Coastguard Worker 155*f81fb7c4SAndroid Build Coastguard Worker self.iCol = 0 156*f81fb7c4SAndroid Build Coastguard Worker self.iWidth = 0 157*f81fb7c4SAndroid Build Coastguard Worker self.OnSortOrderChangedAlert = None 158*f81fb7c4SAndroid Build Coastguard Worker self.iInitialized = False 159*f81fb7c4SAndroid Build Coastguard Worker 160*f81fb7c4SAndroid Build Coastguard Worker def AddCol(self, title, width): 161*f81fb7c4SAndroid Build Coastguard Worker self.InsertColumn(self.iCol, title) 162*f81fb7c4SAndroid Build Coastguard Worker if width > 0: 163*f81fb7c4SAndroid Build Coastguard Worker self.SetColumnWidth(self.iCol, width) 164*f81fb7c4SAndroid Build Coastguard Worker else: 165*f81fb7c4SAndroid Build Coastguard Worker width = self.GetColumnWidth(self.iCol) 166*f81fb7c4SAndroid Build Coastguard Worker self.iCol += 1 167*f81fb7c4SAndroid Build Coastguard Worker self.iWidth = self.iWidth + width 168*f81fb7c4SAndroid Build Coastguard Worker self.SetSize((self.iWidth + 10, -1)) 169*f81fb7c4SAndroid Build Coastguard Worker 170*f81fb7c4SAndroid Build Coastguard Worker def OnCheckItem(self, index, flag): 171*f81fb7c4SAndroid Build Coastguard Worker if hasattr(self, 'BindCheckBoxFct'): 172*f81fb7c4SAndroid Build Coastguard Worker self.BindCheckBoxFct(index, flag) 173*f81fb7c4SAndroid Build Coastguard Worker 174*f81fb7c4SAndroid Build Coastguard Worker def BindCheckBox(self, fct): 175*f81fb7c4SAndroid Build Coastguard Worker self.BindCheckBoxFct = fct 176*f81fb7c4SAndroid Build Coastguard Worker 177*f81fb7c4SAndroid Build Coastguard Worker def AddRows(self, values): 178*f81fb7c4SAndroid Build Coastguard Worker for value in values: 179*f81fb7c4SAndroid Build Coastguard Worker iCol = 0 180*f81fb7c4SAndroid Build Coastguard Worker for row in value: 181*f81fb7c4SAndroid Build Coastguard Worker if iCol == 0: 182*f81fb7c4SAndroid Build Coastguard Worker index = self.InsertStringItem(sys.maxint, row) 183*f81fb7c4SAndroid Build Coastguard Worker else: 184*f81fb7c4SAndroid Build Coastguard Worker self.SetStringItem(index, iCol, row) 185*f81fb7c4SAndroid Build Coastguard Worker iCol = iCol + 1 186*f81fb7c4SAndroid Build Coastguard Worker 187*f81fb7c4SAndroid Build Coastguard Worker # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py 188*f81fb7c4SAndroid Build Coastguard Worker def GetListCtrl(self): 189*f81fb7c4SAndroid Build Coastguard Worker return self 190*f81fb7c4SAndroid Build Coastguard Worker 191*f81fb7c4SAndroid Build Coastguard Worker def InitSorting(self, cols): 192*f81fb7c4SAndroid Build Coastguard Worker if not self.iInitialized: 193*f81fb7c4SAndroid Build Coastguard Worker ColumnSorterMixin.__init__(self, cols) 194*f81fb7c4SAndroid Build Coastguard Worker self.iInitialized = True 195*f81fb7c4SAndroid Build Coastguard Worker 196*f81fb7c4SAndroid Build Coastguard Worker def OnSortOrderChanged(self): 197*f81fb7c4SAndroid Build Coastguard Worker if self.OnSortOrderChangedAlert is not None: 198*f81fb7c4SAndroid Build Coastguard Worker self.OnSortOrderChangedAlert() 199*f81fb7c4SAndroid Build Coastguard Worker 200*f81fb7c4SAndroid Build Coastguard Worker def __OnColClick(self, evt): 201*f81fb7c4SAndroid Build Coastguard Worker oldCol = self._col 202*f81fb7c4SAndroid Build Coastguard Worker self._col = col = evt.GetColumn() 203*f81fb7c4SAndroid Build Coastguard Worker self._colSortFlag[col] = int(not self._colSortFlag[col]) 204*f81fb7c4SAndroid Build Coastguard Worker self.OnSortOrderChanged() 205*f81fb7c4SAndroid Build Coastguard Worker 206*f81fb7c4SAndroid Build Coastguard Workerclass JetTrackCtrl(JetCheckListCtrl): 207*f81fb7c4SAndroid Build Coastguard Worker """ List control specifically designed to show tracks in midi file """ 208*f81fb7c4SAndroid Build Coastguard Worker def __init__(self, parent, id=-1, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.LC_REPORT | wx.SUNKEN_BORDER): 209*f81fb7c4SAndroid Build Coastguard Worker wx.ListCtrl.__init__(self, parent, id, pos=pos, size=size, style=style) 210*f81fb7c4SAndroid Build Coastguard Worker CheckListCtrlMixin.__init__(self) 211*f81fb7c4SAndroid Build Coastguard Worker ListCtrlAutoWidthMixin.__init__(self) 212*f81fb7c4SAndroid Build Coastguard Worker 213*f81fb7c4SAndroid Build Coastguard Worker self.iCol = 0 214*f81fb7c4SAndroid Build Coastguard Worker self.iWidth = 0 215*f81fb7c4SAndroid Build Coastguard Worker self.muteFlags = 0 216*f81fb7c4SAndroid Build Coastguard Worker 217*f81fb7c4SAndroid Build Coastguard Worker def SetValue(self, muteFlags): 218*f81fb7c4SAndroid Build Coastguard Worker self.muteFlags = muteFlags 219*f81fb7c4SAndroid Build Coastguard Worker 220*f81fb7c4SAndroid Build Coastguard Worker def GetValue(self): 221*f81fb7c4SAndroid Build Coastguard Worker return self.muteFlags 222*f81fb7c4SAndroid Build Coastguard Worker 223*f81fb7c4SAndroid Build Coastguard Worker def CheckTracks(self, muteFlags): 224*f81fb7c4SAndroid Build Coastguard Worker num = self.GetItemCount() 225*f81fb7c4SAndroid Build Coastguard Worker for iRow in range(num): 226*f81fb7c4SAndroid Build Coastguard Worker track_num = self.GetTrackNumber(iRow) 227*f81fb7c4SAndroid Build Coastguard Worker self.CheckItem(iRow, GetMute(track_num, muteFlags)) 228*f81fb7c4SAndroid Build Coastguard Worker 229*f81fb7c4SAndroid Build Coastguard Worker def AddTrackRow(self, track, loadEmpty=False): 230*f81fb7c4SAndroid Build Coastguard Worker if loadEmpty or not track.empty: 231*f81fb7c4SAndroid Build Coastguard Worker index = self.InsertStringItem(sys.maxint, str(track.track)) 232*f81fb7c4SAndroid Build Coastguard Worker self.SetStringItem(index, 1, str(track.channel)) 233*f81fb7c4SAndroid Build Coastguard Worker self.SetStringItem(index, 2, str(track.name)) 234*f81fb7c4SAndroid Build Coastguard Worker 235*f81fb7c4SAndroid Build Coastguard Worker def GetTrackNumber(self, index): 236*f81fb7c4SAndroid Build Coastguard Worker return getColumnValue(self, index, 0) 237*f81fb7c4SAndroid Build Coastguard Worker 238*f81fb7c4SAndroid Build Coastguard Workerclass JetFileCombo(): 239*f81fb7c4SAndroid Build Coastguard Worker """ Combo box with file open button """ 240*f81fb7c4SAndroid Build Coastguard Worker def __init__(self, parent, pos=(0,0), size=(200,-1), title='Open File', spec='*.*', id=-1): 241*f81fb7c4SAndroid Build Coastguard Worker self.spec = spec 242*f81fb7c4SAndroid Build Coastguard Worker self.title = title 243*f81fb7c4SAndroid Build Coastguard Worker self.EventFire = False 244*f81fb7c4SAndroid Build Coastguard Worker BUTWIDTH = 20 245*f81fb7c4SAndroid Build Coastguard Worker BORDER = 5 246*f81fb7c4SAndroid Build Coastguard Worker w = size[0] - (BUTWIDTH + BORDER) 247*f81fb7c4SAndroid Build Coastguard Worker col = pos[0] + w + BORDER 248*f81fb7c4SAndroid Build Coastguard Worker 249*f81fb7c4SAndroid Build Coastguard Worker self.cmb = wx.ComboBox(parent, id, "", pos=(pos[0]-MacOffset(),pos[1]), size=(w, -1), style=wx.CB_DROPDOWN) 250*f81fb7c4SAndroid Build Coastguard Worker self.btn = wx.Button(parent, -1, "...", pos=(col, pos[1]+MacOffset()), size=(BUTWIDTH,self.cmb.GetSize()[1])) 251*f81fb7c4SAndroid Build Coastguard Worker self.btn.Bind(wx.EVT_BUTTON, self.OnBrowse, self.btn) 252*f81fb7c4SAndroid Build Coastguard Worker 253*f81fb7c4SAndroid Build Coastguard Worker def OnBrowse(self, event): 254*f81fb7c4SAndroid Build Coastguard Worker os = __import__('os') 255*f81fb7c4SAndroid Build Coastguard Worker defDir = IniGetValue(JetDefs.JETCREATOR_INI, JetDefs.INI_DEFAULTDIRS, self.spec, 'str', str(os.getcwd())) 256*f81fb7c4SAndroid Build Coastguard Worker if OsWindows(): 257*f81fb7c4SAndroid Build Coastguard Worker defDir = defDir.replace('/','\\') 258*f81fb7c4SAndroid Build Coastguard Worker else: 259*f81fb7c4SAndroid Build Coastguard Worker defDir = defDir.replace('\\', '/') 260*f81fb7c4SAndroid Build Coastguard Worker 261*f81fb7c4SAndroid Build Coastguard Worker dlg = wx.FileDialog(None, self.title, defDir, '', self.spec, wx.FD_OPEN) 262*f81fb7c4SAndroid Build Coastguard Worker ret = dlg.ShowModal() 263*f81fb7c4SAndroid Build Coastguard Worker if ret == wx.ID_OK: 264*f81fb7c4SAndroid Build Coastguard Worker IniSetValue(JetDefs.JETCREATOR_INI, JetDefs.INI_DEFAULTDIRS, self.spec, str(FileJustPath(dlg.GetPath()))) 265*f81fb7c4SAndroid Build Coastguard Worker val = dlg.GetPath() 266*f81fb7c4SAndroid Build Coastguard Worker 267*f81fb7c4SAndroid Build Coastguard Worker self.Append(val) 268*f81fb7c4SAndroid Build Coastguard Worker self.cmb.SetValue(val) 269*f81fb7c4SAndroid Build Coastguard Worker 270*f81fb7c4SAndroid Build Coastguard Worker if self.EventFire: 271*f81fb7c4SAndroid Build Coastguard Worker SendEvent(self.cmb, wx.EVT_COMBOBOX.evtType[0]) 272*f81fb7c4SAndroid Build Coastguard Worker dlg.Destroy() 273*f81fb7c4SAndroid Build Coastguard Worker 274*f81fb7c4SAndroid Build Coastguard Worker def SetEventFire(self, fire): 275*f81fb7c4SAndroid Build Coastguard Worker self.EventFire = fire 276*f81fb7c4SAndroid Build Coastguard Worker 277*f81fb7c4SAndroid Build Coastguard Worker def GetValue(self): 278*f81fb7c4SAndroid Build Coastguard Worker return StrNoneChk(self.cmb.GetValue()) 279*f81fb7c4SAndroid Build Coastguard Worker 280*f81fb7c4SAndroid Build Coastguard Worker def SetValue(self, val): 281*f81fb7c4SAndroid Build Coastguard Worker try: 282*f81fb7c4SAndroid Build Coastguard Worker self.cmb.SetValue(val) 283*f81fb7c4SAndroid Build Coastguard Worker except: 284*f81fb7c4SAndroid Build Coastguard Worker pass 285*f81fb7c4SAndroid Build Coastguard Worker 286*f81fb7c4SAndroid Build Coastguard Worker def Append(self, val): 287*f81fb7c4SAndroid Build Coastguard Worker try: 288*f81fb7c4SAndroid Build Coastguard Worker self.cmb.Append(val) 289*f81fb7c4SAndroid Build Coastguard Worker except: 290*f81fb7c4SAndroid Build Coastguard Worker pass 291*f81fb7c4SAndroid Build Coastguard Worker 292*f81fb7c4SAndroid Build Coastguard Worker def SetFocus(self): 293*f81fb7c4SAndroid Build Coastguard Worker self.cmb.SetFocus() 294*f81fb7c4SAndroid Build Coastguard Worker 295*f81fb7c4SAndroid Build Coastguard Worker def SetListValues(self, list): 296*f81fb7c4SAndroid Build Coastguard Worker self.cmb.AppendItems(list) 297*f81fb7c4SAndroid Build Coastguard Worker 298*f81fb7c4SAndroid Build Coastguard Worker def Enable(self, enable): 299*f81fb7c4SAndroid Build Coastguard Worker self.cmb.Enable(enable) 300*f81fb7c4SAndroid Build Coastguard Worker self.btn.Enable(enable) 301*f81fb7c4SAndroid Build Coastguard Worker 302*f81fb7c4SAndroid Build Coastguard Worker def SetHelpText(self, Lbl): 303*f81fb7c4SAndroid Build Coastguard Worker self.cmb.SetHelpText(Lbl) 304*f81fb7c4SAndroid Build Coastguard Worker self.btn.SetHelpText(Lbl) 305*f81fb7c4SAndroid Build Coastguard Worker 306*f81fb7c4SAndroid Build Coastguard Workerclass JetFileText(): 307*f81fb7c4SAndroid Build Coastguard Worker """ Capture a filename with a button to browse for a file """ 308*f81fb7c4SAndroid Build Coastguard Worker def __init__(self, parent, pos=(0,0), size=(200,-1), title='Open File', spec='*.*', id=-1): 309*f81fb7c4SAndroid Build Coastguard Worker self.spec = spec 310*f81fb7c4SAndroid Build Coastguard Worker self.title = title 311*f81fb7c4SAndroid Build Coastguard Worker BUTWIDTH = 20 312*f81fb7c4SAndroid Build Coastguard Worker BORDER = 5 313*f81fb7c4SAndroid Build Coastguard Worker w = size[0] - (BUTWIDTH + BORDER) 314*f81fb7c4SAndroid Build Coastguard Worker col = pos[0] + w + BORDER 315*f81fb7c4SAndroid Build Coastguard Worker 316*f81fb7c4SAndroid Build Coastguard Worker self.txt = wx.TextCtrl(parent, id, "", pos=(pos[0]-MacOffset(),pos[1]), size=(w, -1)) 317*f81fb7c4SAndroid Build Coastguard Worker self.btn = wx.Button(parent, -1, "...", pos=(col, pos[1]), size=(BUTWIDTH,self.txt.GetSize()[1])) 318*f81fb7c4SAndroid Build Coastguard Worker self.btn.Bind(wx.EVT_BUTTON, self.OnBrowse, self.btn) 319*f81fb7c4SAndroid Build Coastguard Worker 320*f81fb7c4SAndroid Build Coastguard Worker def OnBrowse(self, event): 321*f81fb7c4SAndroid Build Coastguard Worker os = __import__('os') 322*f81fb7c4SAndroid Build Coastguard Worker defDir = IniGetValue(JetDefs.JETCREATOR_INI, JetDefs.INI_DEFAULTDIRS, self.spec, 'str', str(os.getcwd())) 323*f81fb7c4SAndroid Build Coastguard Worker if OsWindows(): 324*f81fb7c4SAndroid Build Coastguard Worker defDir = defDir.replace('/','\\') 325*f81fb7c4SAndroid Build Coastguard Worker else: 326*f81fb7c4SAndroid Build Coastguard Worker defDir = defDir.replace('\\', '/') 327*f81fb7c4SAndroid Build Coastguard Worker 328*f81fb7c4SAndroid Build Coastguard Worker dlg = wx.FileDialog(None, self.title, defDir, '', self.spec, wx.FD_OPEN) 329*f81fb7c4SAndroid Build Coastguard Worker ret = dlg.ShowModal() 330*f81fb7c4SAndroid Build Coastguard Worker if ret == wx.ID_OK: 331*f81fb7c4SAndroid Build Coastguard Worker IniSetValue(JetDefs.JETCREATOR_INI, JetDefs.INI_DEFAULTDIRS, self.spec, str(FileJustPath(dlg.GetPath()))) 332*f81fb7c4SAndroid Build Coastguard Worker val = dlg.GetPath() 333*f81fb7c4SAndroid Build Coastguard Worker self.txt.SetValue(val) 334*f81fb7c4SAndroid Build Coastguard Worker dlg.Destroy() 335*f81fb7c4SAndroid Build Coastguard Worker 336*f81fb7c4SAndroid Build Coastguard Worker def GetValue(self): 337*f81fb7c4SAndroid Build Coastguard Worker return StrNoneChk(self.txt.GetValue()) 338*f81fb7c4SAndroid Build Coastguard Worker 339*f81fb7c4SAndroid Build Coastguard Worker def SetValue(self, val): 340*f81fb7c4SAndroid Build Coastguard Worker try: 341*f81fb7c4SAndroid Build Coastguard Worker self.txt.SetValue(val) 342*f81fb7c4SAndroid Build Coastguard Worker except: 343*f81fb7c4SAndroid Build Coastguard Worker pass 344*f81fb7c4SAndroid Build Coastguard Worker 345*f81fb7c4SAndroid Build Coastguard Worker def Append(self, val): 346*f81fb7c4SAndroid Build Coastguard Worker try: 347*f81fb7c4SAndroid Build Coastguard Worker self.txt.Append(val) 348*f81fb7c4SAndroid Build Coastguard Worker except: 349*f81fb7c4SAndroid Build Coastguard Worker pass 350*f81fb7c4SAndroid Build Coastguard Worker 351*f81fb7c4SAndroid Build Coastguard Worker def SetFocus(self): 352*f81fb7c4SAndroid Build Coastguard Worker self.txt.SetFocus() 353*f81fb7c4SAndroid Build Coastguard Worker 354*f81fb7c4SAndroid Build Coastguard Worker def Enable(self, enable): 355*f81fb7c4SAndroid Build Coastguard Worker self.txt.Enable(enable) 356*f81fb7c4SAndroid Build Coastguard Worker self.btn.Enable(enable) 357*f81fb7c4SAndroid Build Coastguard Worker 358*f81fb7c4SAndroid Build Coastguard Worker def SetHelpText(self, Lbl): 359*f81fb7c4SAndroid Build Coastguard Worker self.txt.SetHelpText(Lbl) 360*f81fb7c4SAndroid Build Coastguard Worker self.btn.SetHelpText(Lbl) 361*f81fb7c4SAndroid Build Coastguard Worker 362*f81fb7c4SAndroid Build Coastguard Workerdef YesNo(title, question, default): 363*f81fb7c4SAndroid Build Coastguard Worker """ Simple Yes/No question box """ 364*f81fb7c4SAndroid Build Coastguard Worker dlg = wx.MessageDialog(None, question, title, wx.YES_NO | wx.ICON_QUESTION) 365*f81fb7c4SAndroid Build Coastguard Worker if dlg.ShowModal() == wx.ID_YES: 366*f81fb7c4SAndroid Build Coastguard Worker result = True 367*f81fb7c4SAndroid Build Coastguard Worker else: 368*f81fb7c4SAndroid Build Coastguard Worker result = False 369*f81fb7c4SAndroid Build Coastguard Worker dlg.Destroy() 370*f81fb7c4SAndroid Build Coastguard Worker return result 371*f81fb7c4SAndroid Build Coastguard Worker 372*f81fb7c4SAndroid Build Coastguard Workerdef YesNoCancel(title, question, default): 373*f81fb7c4SAndroid Build Coastguard Worker """ Simple Yes/No question box """ 374*f81fb7c4SAndroid Build Coastguard Worker dlg = wx.MessageDialog(None, question, title, wx.YES_NO | wx.CANCEL | wx.ICON_QUESTION) 375*f81fb7c4SAndroid Build Coastguard Worker result = dlg.ShowModal() 376*f81fb7c4SAndroid Build Coastguard Worker dlg.Destroy() 377*f81fb7c4SAndroid Build Coastguard Worker return result 378*f81fb7c4SAndroid Build Coastguard Worker 379*f81fb7c4SAndroid Build Coastguard Workerdef ErrorMsg(title, message): 380*f81fb7c4SAndroid Build Coastguard Worker """ Dipslay an error message """ 381*f81fb7c4SAndroid Build Coastguard Worker dlg = wx.MessageDialog(None, message, title, wx.ICON_ERROR) 382*f81fb7c4SAndroid Build Coastguard Worker dlg.ShowModal() 383*f81fb7c4SAndroid Build Coastguard Worker dlg.Destroy() 384*f81fb7c4SAndroid Build Coastguard Worker 385*f81fb7c4SAndroid Build Coastguard Workerdef InfoMsg(title, message): 386*f81fb7c4SAndroid Build Coastguard Worker """ Displays an informational message """ 387*f81fb7c4SAndroid Build Coastguard Worker dlg = wx.MessageDialog(None, message, title, wx.ICON_INFORMATION) 388*f81fb7c4SAndroid Build Coastguard Worker dlg.ShowModal() 389*f81fb7c4SAndroid Build Coastguard Worker dlg.Destroy() 390*f81fb7c4SAndroid Build Coastguard Worker 391*f81fb7c4SAndroid Build Coastguard Workerclass TimeCtrl(wx.Frame): 392*f81fb7c4SAndroid Build Coastguard Worker """ Combination of controls to capture measure, beat, tick times """ 393*f81fb7c4SAndroid Build Coastguard Worker def __init__(self, parent, pos=(0,0), minimums=(1,1,0), maximums=(999,4,480), value=JetDefs.MBT_DEFAULT, ctlName=''): 394*f81fb7c4SAndroid Build Coastguard Worker wx.Frame.__init__(self, parent, -1) 395*f81fb7c4SAndroid Build Coastguard Worker 396*f81fb7c4SAndroid Build Coastguard Worker self.ChangeCallbackFct = None 397*f81fb7c4SAndroid Build Coastguard Worker self.ctlName = ctlName 398*f81fb7c4SAndroid Build Coastguard Worker self.mx = maximums 399*f81fb7c4SAndroid Build Coastguard Worker self.mn = minimums 400*f81fb7c4SAndroid Build Coastguard Worker self.maxTicks = 0 401*f81fb7c4SAndroid Build Coastguard Worker self.iCtrl = 0 402*f81fb7c4SAndroid Build Coastguard Worker p1 = pos[0] 403*f81fb7c4SAndroid Build Coastguard Worker top = pos[1] + MacOffset() 404*f81fb7c4SAndroid Build Coastguard Worker w1 = 30 405*f81fb7c4SAndroid Build Coastguard Worker self.time = (wx.TextCtrl(parent, -1, str(value[0]), pos=(p1, top), size=(w1, -1), style=wx.TE_NOHIDESEL), 406*f81fb7c4SAndroid Build Coastguard Worker wx.TextCtrl(parent, -1, str(value[1]), pos=(p1 + (w1 + 3), top), size=(w1, -1), style=wx.TE_NOHIDESEL), 407*f81fb7c4SAndroid Build Coastguard Worker wx.TextCtrl(parent, -1, str(value[2]), pos=(p1 + (w1 + 3) *2, top), size=(w1, -1), style=wx.TE_NOHIDESEL), 408*f81fb7c4SAndroid Build Coastguard Worker ) 409*f81fb7c4SAndroid Build Coastguard Worker h = self.time[2].GetSize().height 410*f81fb7c4SAndroid Build Coastguard Worker w = self.time[2].GetSize().width + self.time[2].GetPosition().x + 8 411*f81fb7c4SAndroid Build Coastguard Worker 412*f81fb7c4SAndroid Build Coastguard Worker self.spin = wx.SpinButton(parent, -1, (w, top), (h*2/3, h), wx.SP_VERTICAL) 413*f81fb7c4SAndroid Build Coastguard Worker self.spin.SetValue(1) 414*f81fb7c4SAndroid Build Coastguard Worker self.spin.SetRange(-999,999) 415*f81fb7c4SAndroid Build Coastguard Worker 416*f81fb7c4SAndroid Build Coastguard Worker self.spin.Bind(wx.EVT_SPIN_UP, self.OnSpinUp, self.spin) 417*f81fb7c4SAndroid Build Coastguard Worker self.spin.Bind(wx.EVT_SPIN_DOWN, self.OnSpinDown, self.spin) 418*f81fb7c4SAndroid Build Coastguard Worker 419*f81fb7c4SAndroid Build Coastguard Worker self.time[0].Bind(wx.EVT_SET_FOCUS, self.OnFocusMeasure, self.time[0] ) 420*f81fb7c4SAndroid Build Coastguard Worker self.time[1].Bind(wx.EVT_SET_FOCUS, self.OnFocusBeat, self.time[1] ) 421*f81fb7c4SAndroid Build Coastguard Worker self.time[2].Bind(wx.EVT_SET_FOCUS, self.OnFocusTick, self.time[2] ) 422*f81fb7c4SAndroid Build Coastguard Worker 423*f81fb7c4SAndroid Build Coastguard Worker self.time[0].Bind(wx.EVT_KILL_FOCUS, self.OnChangeVal, self.time[0] ) 424*f81fb7c4SAndroid Build Coastguard Worker self.time[1].Bind(wx.EVT_KILL_FOCUS, self.OnChangeVal, self.time[1] ) 425*f81fb7c4SAndroid Build Coastguard Worker self.time[2].Bind(wx.EVT_KILL_FOCUS, self.OnChangeVal, self.time[2] ) 426*f81fb7c4SAndroid Build Coastguard Worker 427*f81fb7c4SAndroid Build Coastguard Worker self.SetValue(value) 428*f81fb7c4SAndroid Build Coastguard Worker 429*f81fb7c4SAndroid Build Coastguard Worker def UnBindKillFocus(self): 430*f81fb7c4SAndroid Build Coastguard Worker self.time[0].Unbind(wx.EVT_KILL_FOCUS, self.time[0]) 431*f81fb7c4SAndroid Build Coastguard Worker self.time[1].Unbind(wx.EVT_KILL_FOCUS, self.time[1]) 432*f81fb7c4SAndroid Build Coastguard Worker self.time[2].Unbind(wx.EVT_KILL_FOCUS, self.time[2]) 433*f81fb7c4SAndroid Build Coastguard Worker 434*f81fb7c4SAndroid Build Coastguard Worker def SetChangeCallbackFct(self, ChangeCallbackFct): 435*f81fb7c4SAndroid Build Coastguard Worker self.ChangeCallbackFct = ChangeCallbackFct 436*f81fb7c4SAndroid Build Coastguard Worker 437*f81fb7c4SAndroid Build Coastguard Worker def OnChangeVal(self, event=None): 438*f81fb7c4SAndroid Build Coastguard Worker if not OsWindows(): 439*f81fb7c4SAndroid Build Coastguard Worker self.time[self.iCtrl].SetSelection(-1,-1) 440*f81fb7c4SAndroid Build Coastguard Worker if int(self.time[self.iCtrl].GetValue()) > self.mx[self.iCtrl]: 441*f81fb7c4SAndroid Build Coastguard Worker self.time[self.iCtrl].SetValue(str(self.mx[self.iCtrl])) 442*f81fb7c4SAndroid Build Coastguard Worker if int(self.time[self.iCtrl].GetValue()) < self.mn[self.iCtrl]: 443*f81fb7c4SAndroid Build Coastguard Worker self.time[self.iCtrl].SetValue(str(self.mn[self.iCtrl])) 444*f81fb7c4SAndroid Build Coastguard Worker if self.ChangeCallbackFct is not None: 445*f81fb7c4SAndroid Build Coastguard Worker self.ChangeCallbackFct() 446*f81fb7c4SAndroid Build Coastguard Worker if event is not None: 447*f81fb7c4SAndroid Build Coastguard Worker event.Skip() 448*f81fb7c4SAndroid Build Coastguard Worker 449*f81fb7c4SAndroid Build Coastguard Worker def OnSpinUp(self, event): 450*f81fb7c4SAndroid Build Coastguard Worker if int(self.time[self.iCtrl].GetValue()) < self.mx[self.iCtrl]: 451*f81fb7c4SAndroid Build Coastguard Worker self.time[self.iCtrl].SetValue(str(int(self.time[self.iCtrl].GetValue()) + 1)) 452*f81fb7c4SAndroid Build Coastguard Worker self.OnChangeVal() 453*f81fb7c4SAndroid Build Coastguard Worker 454*f81fb7c4SAndroid Build Coastguard Worker def OnSpinDown(self, event): 455*f81fb7c4SAndroid Build Coastguard Worker if int(self.time[self.iCtrl].GetValue()) > self.mn[self.iCtrl]: 456*f81fb7c4SAndroid Build Coastguard Worker self.time[self.iCtrl].SetValue(str(int(self.time[self.iCtrl].GetValue()) - 1)) 457*f81fb7c4SAndroid Build Coastguard Worker self.OnChangeVal() 458*f81fb7c4SAndroid Build Coastguard Worker 459*f81fb7c4SAndroid Build Coastguard Worker def OnFocusMeasure(self, event): 460*f81fb7c4SAndroid Build Coastguard Worker self.iCtrl = 0 461*f81fb7c4SAndroid Build Coastguard Worker 462*f81fb7c4SAndroid Build Coastguard Worker def OnFocusBeat(self, event): 463*f81fb7c4SAndroid Build Coastguard Worker self.iCtrl = 1 464*f81fb7c4SAndroid Build Coastguard Worker 465*f81fb7c4SAndroid Build Coastguard Worker def OnFocusTick(self, event): 466*f81fb7c4SAndroid Build Coastguard Worker self.iCtrl = 2 467*f81fb7c4SAndroid Build Coastguard Worker 468*f81fb7c4SAndroid Build Coastguard Worker def SetValue(self, mbt): 469*f81fb7c4SAndroid Build Coastguard Worker try: 470*f81fb7c4SAndroid Build Coastguard Worker if type(mbt).__name__=='str' or type(mbt).__name__=='unicode': 471*f81fb7c4SAndroid Build Coastguard Worker mbt = ConvertStrTimeToTuple(mbt) 472*f81fb7c4SAndroid Build Coastguard Worker mbt = mbtFct(mbt, 1) 473*f81fb7c4SAndroid Build Coastguard Worker self.time[0].SetValue(str(mbt[0])) 474*f81fb7c4SAndroid Build Coastguard Worker self.time[1].SetValue(str(mbt[1])) 475*f81fb7c4SAndroid Build Coastguard Worker self.time[2].SetValue(str(mbt[2])) 476*f81fb7c4SAndroid Build Coastguard Worker except: 477*f81fb7c4SAndroid Build Coastguard Worker self.time[0].SetValue(str(self.mn[0])) 478*f81fb7c4SAndroid Build Coastguard Worker self.time[1].SetValue(str(self.mn[1])) 479*f81fb7c4SAndroid Build Coastguard Worker self.time[2].SetValue(str(self.mn[2])) 480*f81fb7c4SAndroid Build Coastguard Worker if not OsWindows(): 481*f81fb7c4SAndroid Build Coastguard Worker self.time[0].SetSelection(-1,-1) 482*f81fb7c4SAndroid Build Coastguard Worker self.time[1].SetSelection(-1,-1) 483*f81fb7c4SAndroid Build Coastguard Worker self.time[2].SetSelection(-1,-1) 484*f81fb7c4SAndroid Build Coastguard Worker 485*f81fb7c4SAndroid Build Coastguard Worker def GetValue(self, typ='str'): 486*f81fb7c4SAndroid Build Coastguard Worker try: 487*f81fb7c4SAndroid Build Coastguard Worker if typ == 'str': 488*f81fb7c4SAndroid Build Coastguard Worker ret = "%d:%d:%d" % (int(self.time[0].GetValue()), int(self.time[1].GetValue()), int(self.time[2].GetValue())) 489*f81fb7c4SAndroid Build Coastguard Worker else: 490*f81fb7c4SAndroid Build Coastguard Worker ret = (int(self.time[0].GetValue()), int(self.time[1].GetValue()), int(self.time[2].GetValue())) 491*f81fb7c4SAndroid Build Coastguard Worker except: 492*f81fb7c4SAndroid Build Coastguard Worker ret = self.minimums 493*f81fb7c4SAndroid Build Coastguard Worker return mbtFct(ret, -1) 494*f81fb7c4SAndroid Build Coastguard Worker 495*f81fb7c4SAndroid Build Coastguard Worker def Enable(self, enable): 496*f81fb7c4SAndroid Build Coastguard Worker self.time[0].Enable(enable) 497*f81fb7c4SAndroid Build Coastguard Worker self.time[1].Enable(enable) 498*f81fb7c4SAndroid Build Coastguard Worker self.time[2].Enable(enable) 499*f81fb7c4SAndroid Build Coastguard Worker self.spin.Enable(enable) 500*f81fb7c4SAndroid Build Coastguard Worker 501*f81fb7c4SAndroid Build Coastguard Worker def SetFocus(self): 502*f81fb7c4SAndroid Build Coastguard Worker self.time[0].SetFocus() 503*f81fb7c4SAndroid Build Coastguard Worker 504*f81fb7c4SAndroid Build Coastguard Worker def SetMaxMbt(self, m, b, t): 505*f81fb7c4SAndroid Build Coastguard Worker self.mx = (m,b,t) 506*f81fb7c4SAndroid Build Coastguard Worker 507*f81fb7c4SAndroid Build Coastguard Worker def GetMaxMbt(self): 508*f81fb7c4SAndroid Build Coastguard Worker return "%d:%d:%d" % self.mx 509*f81fb7c4SAndroid Build Coastguard Worker 510*f81fb7c4SAndroid Build Coastguard Worker def SetMinMbt(self, m, b, t): 511*f81fb7c4SAndroid Build Coastguard Worker self.mn = (m,b,t) 512*f81fb7c4SAndroid Build Coastguard Worker 513*f81fb7c4SAndroid Build Coastguard Worker def SetMaxTicks(self, maxTicks): 514*f81fb7c4SAndroid Build Coastguard Worker self.maxTicks = maxTicks 515*f81fb7c4SAndroid Build Coastguard Worker 516*f81fb7c4SAndroid Build Coastguard Worker def GetMaxTicks(self): 517*f81fb7c4SAndroid Build Coastguard Worker return self.maxTicks 518*f81fb7c4SAndroid Build Coastguard Worker 519*f81fb7c4SAndroid Build Coastguard Worker def SetHelpText(self, Lbl): 520*f81fb7c4SAndroid Build Coastguard Worker self.spin.SetHelpText(Lbl) 521*f81fb7c4SAndroid Build Coastguard Worker self.time[0].SetHelpText(Lbl) 522*f81fb7c4SAndroid Build Coastguard Worker self.time[1].SetHelpText(Lbl) 523*f81fb7c4SAndroid Build Coastguard Worker self.time[2].SetHelpText(Lbl) 524*f81fb7c4SAndroid Build Coastguard Worker 525*f81fb7c4SAndroid Build Coastguard Worker def GetMeasure(self): 526*f81fb7c4SAndroid Build Coastguard Worker return int(self.time[0].GetValue()) 527*f81fb7c4SAndroid Build Coastguard Worker 528*f81fb7c4SAndroid Build Coastguard Worker def GetBeat(self): 529*f81fb7c4SAndroid Build Coastguard Worker return int(self.time[1].GetValue()) 530*f81fb7c4SAndroid Build Coastguard Worker 531*f81fb7c4SAndroid Build Coastguard Worker def GetTick(self): 532*f81fb7c4SAndroid Build Coastguard Worker return int(self.time[2].GetValue()) 533*f81fb7c4SAndroid Build Coastguard Worker 534*f81fb7c4SAndroid Build Coastguard Workerif __name__ == '__main__': 535*f81fb7c4SAndroid Build Coastguard Worker """ Test code for controls """ 536*f81fb7c4SAndroid Build Coastguard Worker class TestFrame(wx.Frame): 537*f81fb7c4SAndroid Build Coastguard Worker def __init__(self, parent, id, title): 538*f81fb7c4SAndroid Build Coastguard Worker wx.Frame.__init__(self, parent, id, title, size=(350, 220)) 539*f81fb7c4SAndroid Build Coastguard Worker 540*f81fb7c4SAndroid Build Coastguard Worker panel = wx.Panel(self, -1) 541*f81fb7c4SAndroid Build Coastguard Worker 542*f81fb7c4SAndroid Build Coastguard Worker self.tc = TimeCtrl(panel, pos=(30, 20), maximums=(25, 4, 120), value=(2, 3, 4)) 543*f81fb7c4SAndroid Build Coastguard Worker #tc.Enable(True) 544*f81fb7c4SAndroid Build Coastguard Worker #tc.SetValue((2,3,4)) 545*f81fb7c4SAndroid Build Coastguard Worker #tc.SetValue("1:2:3") 546*f81fb7c4SAndroid Build Coastguard Worker #print(tc.GetValue()) 547*f81fb7c4SAndroid Build Coastguard Worker 548*f81fb7c4SAndroid Build Coastguard Worker js = JetSpin(panel, -1, pos=(30, 100)) 549*f81fb7c4SAndroid Build Coastguard Worker js.SetValue("1") 550*f81fb7c4SAndroid Build Coastguard Worker #js.SetValue(1) 551*f81fb7c4SAndroid Build Coastguard Worker 552*f81fb7c4SAndroid Build Coastguard Worker #fl = JetFileCombo(panel) 553*f81fb7c4SAndroid Build Coastguard Worker 554*f81fb7c4SAndroid Build Coastguard Worker wx.EVT_CLOSE(self, self.OnClose) 555*f81fb7c4SAndroid Build Coastguard Worker 556*f81fb7c4SAndroid Build Coastguard Worker self.Centre() 557*f81fb7c4SAndroid Build Coastguard Worker self.Show(True) 558*f81fb7c4SAndroid Build Coastguard Worker 559*f81fb7c4SAndroid Build Coastguard Worker def OnClose(self, event): 560*f81fb7c4SAndroid Build Coastguard Worker self.tc.UnBindKillFocus() 561*f81fb7c4SAndroid Build Coastguard Worker self.Destroy() 562*f81fb7c4SAndroid Build Coastguard Worker 563*f81fb7c4SAndroid Build Coastguard Worker app = wx.App(None) 564*f81fb7c4SAndroid Build Coastguard Worker TestFrame(None, -1, 'TestFrame') 565*f81fb7c4SAndroid Build Coastguard Worker app.MainLoop() 566*f81fb7c4SAndroid Build Coastguard Worker 567*f81fb7c4SAndroid Build Coastguard Worker 568