xref: /aosp_15_r20/external/sonivox/jet_tools/JetCreator/JetCtrls.py (revision f81fb7c475c4b71ff83bdcc517de2a8c174e4e5c)
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