xref: /aosp_15_r20/external/sonivox/jet_tools/JetCreator/JetDialogs.py (revision f81fb7c475c4b71ff83bdcc517de2a8c174e4e5c)
1*f81fb7c4SAndroid Build Coastguard Worker"""
2*f81fb7c4SAndroid Build Coastguard Worker File:
3*f81fb7c4SAndroid Build Coastguard Worker JetDialogs.py
4*f81fb7c4SAndroid Build Coastguard Worker
5*f81fb7c4SAndroid Build Coastguard Worker Contents and purpose:
6*f81fb7c4SAndroid Build Coastguard Worker Dialog boxes used in JetCreator
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 thread
25*f81fb7c4SAndroid Build Coastguard Workerimport wx.lib.newevent
26*f81fb7c4SAndroid Build Coastguard Worker
27*f81fb7c4SAndroid Build Coastguard Workerfrom JetDefs import *
28*f81fb7c4SAndroid Build Coastguard Workerfrom JetCtrls import *
29*f81fb7c4SAndroid Build Coastguard Workerfrom JetFile import *
30*f81fb7c4SAndroid Build Coastguard Workerfrom JetUtils import *
31*f81fb7c4SAndroid Build Coastguard Workerfrom JetPreview import *
32*f81fb7c4SAndroid Build Coastguard Workerfrom JetSegGraph import *
33*f81fb7c4SAndroid Build Coastguard Workerfrom eas import *
34*f81fb7c4SAndroid Build Coastguard Workerfrom JetStatusEvent import *
35*f81fb7c4SAndroid Build Coastguard Worker
36*f81fb7c4SAndroid Build Coastguard WorkerPLAY_SEGMENT = 1
37*f81fb7c4SAndroid Build Coastguard WorkerPLAY_MIDI = 2
38*f81fb7c4SAndroid Build Coastguard Worker
39*f81fb7c4SAndroid Build Coastguard Workerclass JetEdit():
40*f81fb7c4SAndroid Build Coastguard Worker    """ Class used to build dialog box controls from the definitions in JetDefs """
41*f81fb7c4SAndroid Build Coastguard Worker    def __init__(self, panel, ctrlList, callbackClass):
42*f81fb7c4SAndroid Build Coastguard Worker        LBL_OFFSET = 15
43*f81fb7c4SAndroid Build Coastguard Worker
44*f81fb7c4SAndroid Build Coastguard Worker        ctrls = getattr(JetDefs, ctrlList)
45*f81fb7c4SAndroid Build Coastguard Worker        self.ctrls = {}
46*f81fb7c4SAndroid Build Coastguard Worker        for Lbl, Text, Row, Col, Len, Min, Max, Id, Lst, Fct, Enabled, HelpText in ctrls:
47*f81fb7c4SAndroid Build Coastguard Worker            try:
48*f81fb7c4SAndroid Build Coastguard Worker                iDisplayLbl = True
49*f81fb7c4SAndroid Build Coastguard Worker                if Text[0:3] == "btn":
50*f81fb7c4SAndroid Build Coastguard Worker                    self.ctrls[Text] = wx.Button(panel, Id, Lbl, wx.Point(Col, Row), size=Len)
51*f81fb7c4SAndroid Build Coastguard Worker                    if Fct > "":
52*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text].Bind(wx.EVT_BUTTON, getattr(callbackClass, Fct), self.ctrls[Text], id=Id)
53*f81fb7c4SAndroid Build Coastguard Worker                    if Id == wx.ID_OK:
54*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text].SetDefault()
55*f81fb7c4SAndroid Build Coastguard Worker                    iDisplayLbl = False
56*f81fb7c4SAndroid Build Coastguard Worker                else:
57*f81fb7c4SAndroid Build Coastguard Worker                    if Text[0:3] == "txt":
58*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text] = wx.TextCtrl(panel, Id, "", wx.Point(Col, Row + LBL_OFFSET +3), wx.Size(Len,-1))
59*f81fb7c4SAndroid Build Coastguard Worker                    elif Text[0:4] == "spn1":
60*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text] = JetSpinOneBased(panel, Id, "", wx.Point(Col, Row + LBL_OFFSET), wx.Size(Len,-1), min=Min, max=Max)
61*f81fb7c4SAndroid Build Coastguard Worker                    elif Text[0:3] == "spn":
62*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text] = JetSpin(panel, Id, "", wx.Point(Col, Row + LBL_OFFSET), wx.Size(Len,-1), min=Min, max=Max)
63*f81fb7c4SAndroid Build Coastguard Worker                    elif Text[0:3] == "cmb":
64*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text] = wx.ComboBox(panel, Id, "", wx.Point(Col, Row + LBL_OFFSET), wx.Size(Len,-1), Lst, wx.CB_DROPDOWN | wx.CB_READONLY )
65*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text].SetValue(Lst[0])
66*f81fb7c4SAndroid Build Coastguard Worker                        if Fct > "":
67*f81fb7c4SAndroid Build Coastguard Worker                            self.ctrls[Text].Bind(wx.EVT_COMBOBOX, getattr(callbackClass, Fct), self.ctrls[Text])
68*f81fb7c4SAndroid Build Coastguard Worker                    elif Text[0:2] == "tm":
69*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text] = TimeCtrl(panel, pos=(Col, Row + LBL_OFFSET), ctlName=Text)
70*f81fb7c4SAndroid Build Coastguard Worker                    elif Text[0:7] == "filecmb":
71*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text] = JetFileCombo(panel, pos=(Col, Row + LBL_OFFSET), size=wx.Size(Len,-1), title=Lbl, spec=Lst, id=Id)
72*f81fb7c4SAndroid Build Coastguard Worker                    elif Text[0:7] == "filetxt":
73*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text] = JetFileText(panel, pos=(Col, Row + LBL_OFFSET), size=wx.Size(Len,-1), title=Lbl, spec=Lst, id=Id)
74*f81fb7c4SAndroid Build Coastguard Worker                    elif Text[0:2] == "fr":
75*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text] = wx.StaticBox(parent=panel, id=wx.ID_ANY, label=Lbl, pos=(Row, Col), size=Len)
76*f81fb7c4SAndroid Build Coastguard Worker                        iDisplayLbl = False
77*f81fb7c4SAndroid Build Coastguard Worker                    elif Text[0:3] == "chk":
78*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text] = JetCheckBox(panel, Id, label=Lbl, pos=(Col, Row), size=wx.Size(Len,-1))
79*f81fb7c4SAndroid Build Coastguard Worker                        iDisplayLbl = False
80*f81fb7c4SAndroid Build Coastguard Worker                        if Fct > "":
81*f81fb7c4SAndroid Build Coastguard Worker                            self.ctrls[Text].Bind(wx.EVT_CHECKBOX , getattr(callbackClass, Fct), self.ctrls[Text])
82*f81fb7c4SAndroid Build Coastguard Worker                    elif Text[0:6] == "rdobox":
83*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text] = wx.RadioBox(panel, Id, label=Lbl, pos=(Col, Row), size=Len, choices=Lst, majorDimension=1, style=wx.RA_SPECIFY_COLS)
84*f81fb7c4SAndroid Build Coastguard Worker                        iDisplayLbl = False
85*f81fb7c4SAndroid Build Coastguard Worker                        if Fct > "":
86*f81fb7c4SAndroid Build Coastguard Worker                            self.ctrls[Text].Bind(wx.EVT_RADIOBOX , getattr(callbackClass, Fct), self.ctrls[Text])
87*f81fb7c4SAndroid Build Coastguard Worker                    elif Text[0:3] == "opt":
88*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text] = JetRadioButton(panel, Id, label=Lbl, pos=(Col, Row), size=wx.Size(Len,-1))
89*f81fb7c4SAndroid Build Coastguard Worker                        iDisplayLbl = False
90*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text].SetValue(Lst)
91*f81fb7c4SAndroid Build Coastguard Worker                        if Fct > "":
92*f81fb7c4SAndroid Build Coastguard Worker                            self.ctrls[Text].Bind(wx.EVT_RADIOBUTTON , getattr(callbackClass, Fct), self.ctrls[Text])
93*f81fb7c4SAndroid Build Coastguard Worker                    elif Text[0:3] == "lst":
94*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text] = wx.ListBox(panel, Id, pos=(Col, Row), size=Len)
95*f81fb7c4SAndroid Build Coastguard Worker                        iDisplayLbl = False
96*f81fb7c4SAndroid Build Coastguard Worker                    elif Text[0:4] == "grd2":
97*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text] = JetTrackCtrl(panel, Id, pos=(Col, Row + LBL_OFFSET), size=Len, style=wx.LC_REPORT | wx.SUNKEN_BORDER)
98*f81fb7c4SAndroid Build Coastguard Worker                        iDisplayLbl = True
99*f81fb7c4SAndroid Build Coastguard Worker                    elif Text[0:3] == "grd":
100*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text] = JetListCtrl(panel, Id, pos=(Col, Row), size=Len)
101*f81fb7c4SAndroid Build Coastguard Worker                        iDisplayLbl = False
102*f81fb7c4SAndroid Build Coastguard Worker                    elif Text[0:5] == "graph":
103*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text] = SegmentGraph(panel, pos=(Col, Row), size=Len)
104*f81fb7c4SAndroid Build Coastguard Worker                        iDisplayLbl = False
105*f81fb7c4SAndroid Build Coastguard Worker                    elif Text[0:3] == "hlp":
106*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text] = wx.ContextHelpButton(panel, Id, pos=(Col, Row))
107*f81fb7c4SAndroid Build Coastguard Worker                        iDisplayLbl = False
108*f81fb7c4SAndroid Build Coastguard Worker                    elif Text[0:3] == "lbl":
109*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text] = wx.StaticText(panel, Id, Lbl, wx.Point(Col, Row), size=wx.Size(Len[0],Len[1]))
110*f81fb7c4SAndroid Build Coastguard Worker                        iDisplayLbl = False
111*f81fb7c4SAndroid Build Coastguard Worker                    elif Text[0:3] == "box":
112*f81fb7c4SAndroid Build Coastguard Worker                        self.ctrls[Text] = wx.StaticBox(panel, wx.ID_ANY, Lbl, pos=(Col, Row), size=Len)
113*f81fb7c4SAndroid Build Coastguard Worker                        iDisplayLbl = False
114*f81fb7c4SAndroid Build Coastguard Worker
115*f81fb7c4SAndroid Build Coastguard Worker                if iDisplayLbl:
116*f81fb7c4SAndroid Build Coastguard Worker                    self.ctrls[Lbl] = wx.StaticText(panel, Id, Lbl, wx.Point(Col, Row))
117*f81fb7c4SAndroid Build Coastguard Worker                if not Enabled:
118*f81fb7c4SAndroid Build Coastguard Worker                    self.ctrls[Text].Enable(False)
119*f81fb7c4SAndroid Build Coastguard Worker
120*f81fb7c4SAndroid Build Coastguard Worker                helpText = IniGetValue(JetDefs.JETCREATOR_HLP, ctrlList, Lbl)
121*f81fb7c4SAndroid Build Coastguard Worker                if helpText > "":
122*f81fb7c4SAndroid Build Coastguard Worker                    self.ctrls[Text].SetHelpText(helpText)
123*f81fb7c4SAndroid Build Coastguard Worker
124*f81fb7c4SAndroid Build Coastguard Worker            #except AttributeError:
125*f81fb7c4SAndroid Build Coastguard Worker                #No stub function for testing
126*f81fb7c4SAndroid Build Coastguard Worker                #print("def " + Fct + "(self, event): pass")
127*f81fb7c4SAndroid Build Coastguard Worker            except:
128*f81fb7c4SAndroid Build Coastguard Worker                raise
129*f81fb7c4SAndroid Build Coastguard Worker
130*f81fb7c4SAndroid Build Coastguard Worker    def GetValue(self, fld):
131*f81fb7c4SAndroid Build Coastguard Worker        """ Gets the value of a control """
132*f81fb7c4SAndroid Build Coastguard Worker        return self.ctrls[fld].GetValue()
133*f81fb7c4SAndroid Build Coastguard Worker
134*f81fb7c4SAndroid Build Coastguard Worker    def SetValue(self, fld, val):
135*f81fb7c4SAndroid Build Coastguard Worker        """ Sets the value of a control """
136*f81fb7c4SAndroid Build Coastguard Worker        self.ctrls[fld].SetValue(val)
137*f81fb7c4SAndroid Build Coastguard Worker
138*f81fb7c4SAndroid Build Coastguard Workerclass JetOpen(wx.Dialog):
139*f81fb7c4SAndroid Build Coastguard Worker    """ Opens a jet definition file """
140*f81fb7c4SAndroid Build Coastguard Worker    def __init__(self):
141*f81fb7c4SAndroid Build Coastguard Worker        wx.Dialog.__init__(self, None, -1, JetDefs.DLG_JETOPEN)
142*f81fb7c4SAndroid Build Coastguard Worker        self.fileName = ""
143*f81fb7c4SAndroid Build Coastguard Worker        self.je = JetEdit(self, "JETOPEN_CTRLS", self)
144*f81fb7c4SAndroid Build Coastguard Worker        fileList = GetRecentJetFiles()
145*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_JLIST].AppendItems(fileList)
146*f81fb7c4SAndroid Build Coastguard Worker        if len(fileList) > 0:
147*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_JFILE].SetValue(fileList[0])
148*f81fb7c4SAndroid Build Coastguard Worker        self.Bind(wx.EVT_LISTBOX_DCLICK, self.OnOpen)
149*f81fb7c4SAndroid Build Coastguard Worker        self.Bind(wx.EVT_LISTBOX, self.OnClick)
150*f81fb7c4SAndroid Build Coastguard Worker        self.SetSize(JetDefs.JETOPEN_SIZE)
151*f81fb7c4SAndroid Build Coastguard Worker        self.CenterOnParent()
152*f81fb7c4SAndroid Build Coastguard Worker
153*f81fb7c4SAndroid Build Coastguard Worker    def OnJetImport(self, event):
154*f81fb7c4SAndroid Build Coastguard Worker        """ Exit the dialog with flag to import """
155*f81fb7c4SAndroid Build Coastguard Worker        self.EndModal(JetDefs.ID_JET_IMPORT)
156*f81fb7c4SAndroid Build Coastguard Worker
157*f81fb7c4SAndroid Build Coastguard Worker    def OnClick(self, event):
158*f81fb7c4SAndroid Build Coastguard Worker        """ Clicking on item in listbox """
159*f81fb7c4SAndroid Build Coastguard Worker        sValue = self.je.ctrls[JetDefs.F_JLIST].GetString(self.je.ctrls[JetDefs.F_JLIST].GetSelection())
160*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_JFILE].SetValue(sValue)
161*f81fb7c4SAndroid Build Coastguard Worker
162*f81fb7c4SAndroid Build Coastguard Worker    def OnOpen(self, event):
163*f81fb7c4SAndroid Build Coastguard Worker        """ Double clicking on item in listbox """
164*f81fb7c4SAndroid Build Coastguard Worker        sValue = self.je.ctrls[JetDefs.F_JLIST].GetString(self.je.ctrls[JetDefs.F_JLIST].GetSelection())
165*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_JFILE].SetValue(sValue)
166*f81fb7c4SAndroid Build Coastguard Worker        if self.Validate():
167*f81fb7c4SAndroid Build Coastguard Worker            self.fileName = self.je.ctrls[JetDefs.F_JFILE].GetValue()
168*f81fb7c4SAndroid Build Coastguard Worker            AppendRecentJetFile(self.fileName)
169*f81fb7c4SAndroid Build Coastguard Worker            self.EndModal(JetDefs.ID_JET_OPEN)
170*f81fb7c4SAndroid Build Coastguard Worker
171*f81fb7c4SAndroid Build Coastguard Worker    def OnOk(self, event):
172*f81fb7c4SAndroid Build Coastguard Worker        """ Clicking the ok button """
173*f81fb7c4SAndroid Build Coastguard Worker        if self.Validate():
174*f81fb7c4SAndroid Build Coastguard Worker            self.fileName = self.je.ctrls[JetDefs.F_JFILE].GetValue()
175*f81fb7c4SAndroid Build Coastguard Worker            AppendRecentJetFile(self.fileName)
176*f81fb7c4SAndroid Build Coastguard Worker            self.EndModal(JetDefs.ID_JET_OPEN)
177*f81fb7c4SAndroid Build Coastguard Worker
178*f81fb7c4SAndroid Build Coastguard Worker    def OnNew(self, event):
179*f81fb7c4SAndroid Build Coastguard Worker        """ Exit the dialog with flag to create new blank jet file """
180*f81fb7c4SAndroid Build Coastguard Worker        self.EndModal(JetDefs.ID_JET_NEW)
181*f81fb7c4SAndroid Build Coastguard Worker
182*f81fb7c4SAndroid Build Coastguard Worker    def Validate(self):
183*f81fb7c4SAndroid Build Coastguard Worker        """ Validates the filename """
184*f81fb7c4SAndroid Build Coastguard Worker        if len(self.je.ctrls[JetDefs.F_JFILE].GetValue()) == 0:
185*f81fb7c4SAndroid Build Coastguard Worker            InfoMsg("Jet Filename", "The Jet filename is blank.")
186*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_JFILE].SetFocus()
187*f81fb7c4SAndroid Build Coastguard Worker            return False
188*f81fb7c4SAndroid Build Coastguard Worker        if not FileExists(self.je.ctrls[JetDefs.F_JFILE].GetValue()):
189*f81fb7c4SAndroid Build Coastguard Worker            InfoMsg("MIDI File", "The file does not exist.")
190*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_JFILE].SetFocus()
191*f81fb7c4SAndroid Build Coastguard Worker            return False
192*f81fb7c4SAndroid Build Coastguard Worker        return True
193*f81fb7c4SAndroid Build Coastguard Worker
194*f81fb7c4SAndroid Build Coastguard Workerclass JetPreferences(wx.Dialog):
195*f81fb7c4SAndroid Build Coastguard Worker    """ Preferences dialog box """
196*f81fb7c4SAndroid Build Coastguard Worker    def __init__(self):
197*f81fb7c4SAndroid Build Coastguard Worker        wx.Dialog.__init__(self, None, -1, JetDefs.DLG_PREFERENCES)
198*f81fb7c4SAndroid Build Coastguard Worker        self.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
199*f81fb7c4SAndroid Build Coastguard Worker        self.je = JetEdit(self, "PREFERENCES_CTRLS", self)
200*f81fb7c4SAndroid Build Coastguard Worker        self.SetSize(JetDefs.PREFERENCES_SIZE)
201*f81fb7c4SAndroid Build Coastguard Worker        self.CenterOnParent()
202*f81fb7c4SAndroid Build Coastguard Worker
203*f81fb7c4SAndroid Build Coastguard Worker    def OnOk(self, event):
204*f81fb7c4SAndroid Build Coastguard Worker        self.EndModal(wx.ID_OK)
205*f81fb7c4SAndroid Build Coastguard Worker
206*f81fb7c4SAndroid Build Coastguard Worker    def GetValue(self, fld):
207*f81fb7c4SAndroid Build Coastguard Worker        return self.je.ctrls[fld].GetValue()
208*f81fb7c4SAndroid Build Coastguard Worker
209*f81fb7c4SAndroid Build Coastguard Worker    def SetValue(self, fld, val):
210*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[fld].SetValue(val)
211*f81fb7c4SAndroid Build Coastguard Worker
212*f81fb7c4SAndroid Build Coastguard Worker
213*f81fb7c4SAndroid Build Coastguard Workerclass JetAbout(wx.Dialog):
214*f81fb7c4SAndroid Build Coastguard Worker    """ About dialog box """
215*f81fb7c4SAndroid Build Coastguard Worker    def __init__(self):
216*f81fb7c4SAndroid Build Coastguard Worker        wx.Dialog.__init__(self, None, -1, JetDefs.DLG_ABOUT)
217*f81fb7c4SAndroid Build Coastguard Worker        img = __import__('img_splash')
218*f81fb7c4SAndroid Build Coastguard Worker        bmp = img.getBitmap()
219*f81fb7c4SAndroid Build Coastguard Worker        b = wx.StaticBitmap(self, -1, bmp)
220*f81fb7c4SAndroid Build Coastguard Worker        self.SetSize((bmp.GetWidth(), bmp.GetHeight()))
221*f81fb7c4SAndroid Build Coastguard Worker        self.CenterOnParent()
222*f81fb7c4SAndroid Build Coastguard Worker        s = __import__('sys')
223*f81fb7c4SAndroid Build Coastguard Worker        print(s.platform)
224*f81fb7c4SAndroid Build Coastguard Worker
225*f81fb7c4SAndroid Build Coastguard Worker    def OnOk(self, event):
226*f81fb7c4SAndroid Build Coastguard Worker        self.EndModal(wx.ID_OK)
227*f81fb7c4SAndroid Build Coastguard Worker
228*f81fb7c4SAndroid Build Coastguard Worker    def GetValue(self, fld):
229*f81fb7c4SAndroid Build Coastguard Worker        return self.je.ctrls[fld].GetValue()
230*f81fb7c4SAndroid Build Coastguard Worker
231*f81fb7c4SAndroid Build Coastguard Worker    def SetValue(self, fld, val):
232*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[fld].SetValue(val)
233*f81fb7c4SAndroid Build Coastguard Worker
234*f81fb7c4SAndroid Build Coastguard Worker
235*f81fb7c4SAndroid Build Coastguard Workerclass JetPropertiesDialog(wx.Dialog):
236*f81fb7c4SAndroid Build Coastguard Worker    """ Properties dialog box """
237*f81fb7c4SAndroid Build Coastguard Worker    def __init__(self):
238*f81fb7c4SAndroid Build Coastguard Worker        wx.Dialog.__init__(self, None, -1, JetDefs.DLG_PROPERTIES)
239*f81fb7c4SAndroid Build Coastguard Worker        self.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
240*f81fb7c4SAndroid Build Coastguard Worker        self.je = JetEdit(self, "JET_PROPERTIES_CTRLS", self)
241*f81fb7c4SAndroid Build Coastguard Worker        self.SetSize(JetDefs.JET_PROPERTIES_SIZE)
242*f81fb7c4SAndroid Build Coastguard Worker        self.CenterOnParent()
243*f81fb7c4SAndroid Build Coastguard Worker
244*f81fb7c4SAndroid Build Coastguard Worker    def OnOk(self, event):
245*f81fb7c4SAndroid Build Coastguard Worker        self.EndModal(wx.ID_OK)
246*f81fb7c4SAndroid Build Coastguard Worker
247*f81fb7c4SAndroid Build Coastguard Worker    def GetValue(self, fld):
248*f81fb7c4SAndroid Build Coastguard Worker        return self.je.ctrls[fld].GetValue()
249*f81fb7c4SAndroid Build Coastguard Worker
250*f81fb7c4SAndroid Build Coastguard Worker    def SetValue(self, fld, val):
251*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[fld].SetValue(val)
252*f81fb7c4SAndroid Build Coastguard Worker
253*f81fb7c4SAndroid Build Coastguard Worker
254*f81fb7c4SAndroid Build Coastguard Workerclass JetErrors(wx.Dialog):
255*f81fb7c4SAndroid Build Coastguard Worker    """ Errors dialog box """
256*f81fb7c4SAndroid Build Coastguard Worker    def __init__(self, title):
257*f81fb7c4SAndroid Build Coastguard Worker        wx.Dialog.__init__(self, None, -1, title)
258*f81fb7c4SAndroid Build Coastguard Worker        self.je = JetEdit(self, "ERRORDLG", self)
259*f81fb7c4SAndroid Build Coastguard Worker        self.SetSize(JetDefs.ERRORDLG_SIZE)
260*f81fb7c4SAndroid Build Coastguard Worker        self.CenterOnParent()
261*f81fb7c4SAndroid Build Coastguard Worker
262*f81fb7c4SAndroid Build Coastguard Worker    def OnOk(self, event):
263*f81fb7c4SAndroid Build Coastguard Worker        self.EndModal(wx.ID_OK)
264*f81fb7c4SAndroid Build Coastguard Worker
265*f81fb7c4SAndroid Build Coastguard Worker    def SetErrors(self, errors):
266*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_ERRGRID].AddCol("Error", JetDefs.ERRORCOLW)
267*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_ERRGRID].AddCol("Description", JetDefs.ERRORCOLW)
268*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_ERRGRID].AddRows(errors)
269*f81fb7c4SAndroid Build Coastguard Worker
270*f81fb7c4SAndroid Build Coastguard Worker
271*f81fb7c4SAndroid Build Coastguard Workerclass SegEdit(wx.Dialog):
272*f81fb7c4SAndroid Build Coastguard Worker    """ Dialog box to edit segments """
273*f81fb7c4SAndroid Build Coastguard Worker    def __init__(self, title, currentJetConfigFile):
274*f81fb7c4SAndroid Build Coastguard Worker        wx.Dialog.__init__(self, None, -1, title)
275*f81fb7c4SAndroid Build Coastguard Worker        self.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
276*f81fb7c4SAndroid Build Coastguard Worker        self.currentJetConfigFile = currentJetConfigFile
277*f81fb7c4SAndroid Build Coastguard Worker        self.je = JetEdit(self, "SEGDLG_CTRLS", self)
278*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_MIDIFILE].cmb.Bind(wx.EVT_KILL_FOCUS, self.OnMidiChanged)
279*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_MIDIFILE].cmb.Bind(wx.EVT_COMBOBOX, self.OnMidiChanged)
280*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_MIDIFILE].SetEventFire(True)
281*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_MUTEFLAGS].AddCol(JetDefs.GRD_TRACK, JetDefs.MUTEGRD_TRACK)
282*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_MUTEFLAGS].AddCol(JetDefs.GRD_CHANNEL, JetDefs.MUTEGRD_CHANNEL)
283*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_MUTEFLAGS].AddCol(JetDefs.GRD_NAME, JetDefs.MUTEGRD_NAME)
284*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_MUTEFLAGS].BindCheckBox(self.OnEventChecked)
285*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_START].SetChangeCallbackFct(self.UpdateGraph)
286*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_END].SetChangeCallbackFct(self.UpdateGraph)
287*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_DISPEMPTYTRACKS].SetValue(IniGetValue(self.currentJetConfigFile, JetDefs.F_DISPEMPTYTRACKS, JetDefs.F_DISPEMPTYTRACKS, 'bool', 'False'))
288*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_GRAPHLABELS].SetValue(IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHLABELS, JetDefs.F_GRAPHLABELS, 'bool', 'True'))
289*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_GRAPHCLIPS].SetValue(IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHCLIPS, JetDefs.F_GRAPHCLIPS, 'bool', 'True'))
290*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_GRAPHAPPEVTS].SetValue(IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHAPPEVTS, JetDefs.F_GRAPHAPPEVTS, 'bool', 'True'))
291*f81fb7c4SAndroid Build Coastguard Worker        self.replicatePrefix = ""
292*f81fb7c4SAndroid Build Coastguard Worker        self.lstReplicate = []
293*f81fb7c4SAndroid Build Coastguard Worker        self.chkReplaceMatching = False
294*f81fb7c4SAndroid Build Coastguard Worker
295*f81fb7c4SAndroid Build Coastguard Worker        EVT_JET_STATUS(self, self.OnJetStatusUpdate)
296*f81fb7c4SAndroid Build Coastguard Worker        wx.EVT_CLOSE(self, self.OnClose)
297*f81fb7c4SAndroid Build Coastguard Worker
298*f81fb7c4SAndroid Build Coastguard Worker        self.Player = None
299*f81fb7c4SAndroid Build Coastguard Worker        self.segment = None
300*f81fb7c4SAndroid Build Coastguard Worker        self.graphSegment = None
301*f81fb7c4SAndroid Build Coastguard Worker        self.jetevents = []
302*f81fb7c4SAndroid Build Coastguard Worker        self.lastMidiFile = ""
303*f81fb7c4SAndroid Build Coastguard Worker        self.lastMidiInfo = None
304*f81fb7c4SAndroid Build Coastguard Worker        self.playMode = PLAY_SEGMENT
305*f81fb7c4SAndroid Build Coastguard Worker        self.graphMode = PLAY_MIDI
306*f81fb7c4SAndroid Build Coastguard Worker        self.SetSize(JetDefs.SEGDLG_SIZE)
307*f81fb7c4SAndroid Build Coastguard Worker        self.CenterOnParent()
308*f81fb7c4SAndroid Build Coastguard Worker
309*f81fb7c4SAndroid Build Coastguard Worker    def OnClose(self, event):
310*f81fb7c4SAndroid Build Coastguard Worker        """ Closing the dialog box """
311*f81fb7c4SAndroid Build Coastguard Worker        self.ShutdownPlayer()
312*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_START].UnBindKillFocus()
313*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_END].UnBindKillFocus()
314*f81fb7c4SAndroid Build Coastguard Worker        self.EndModal(wx.ID_CANCEL)
315*f81fb7c4SAndroid Build Coastguard Worker
316*f81fb7c4SAndroid Build Coastguard Worker    def ShutdownPlayer(self):
317*f81fb7c4SAndroid Build Coastguard Worker        """ Shutdown player flag """
318*f81fb7c4SAndroid Build Coastguard Worker        if self.Player is not None:
319*f81fb7c4SAndroid Build Coastguard Worker            self.Player.SetKeepPlayingFlag(False)
320*f81fb7c4SAndroid Build Coastguard Worker
321*f81fb7c4SAndroid Build Coastguard Worker    def OnMidiChanged(self, event):
322*f81fb7c4SAndroid Build Coastguard Worker        """ When new midi file selected, get its info """
323*f81fb7c4SAndroid Build Coastguard Worker        self.UpdateMaxMbt()
324*f81fb7c4SAndroid Build Coastguard Worker        event.Skip()
325*f81fb7c4SAndroid Build Coastguard Worker
326*f81fb7c4SAndroid Build Coastguard Worker    def UpdateMaxMbt(self):
327*f81fb7c4SAndroid Build Coastguard Worker        """ Get midi info in thread so UI smoother """
328*f81fb7c4SAndroid Build Coastguard Worker        thread.start_new_thread(self.UpdateMaxMbtThread, ())
329*f81fb7c4SAndroid Build Coastguard Worker
330*f81fb7c4SAndroid Build Coastguard Worker    def UpdateMaxMbtThread(self):
331*f81fb7c4SAndroid Build Coastguard Worker        """ Thread to get midi file info """
332*f81fb7c4SAndroid Build Coastguard Worker        if self.je.ctrls[JetDefs.F_MIDIFILE].GetValue() == self.lastMidiFile:
333*f81fb7c4SAndroid Build Coastguard Worker            return
334*f81fb7c4SAndroid Build Coastguard Worker        self.lastMidiFile = self.je.ctrls[JetDefs.F_MIDIFILE].GetValue()
335*f81fb7c4SAndroid Build Coastguard Worker        self.lastMidiInfo = GetMidiInfo(self.je.ctrls[JetDefs.F_MIDIFILE].GetValue())
336*f81fb7c4SAndroid Build Coastguard Worker        wx.PostEvent(self, JetStatusEvent(JetDefs.PST_MIDI_INFO, self.lastMidiInfo))
337*f81fb7c4SAndroid Build Coastguard Worker
338*f81fb7c4SAndroid Build Coastguard Worker    def GetValue(self, fld):
339*f81fb7c4SAndroid Build Coastguard Worker        """ Gets a control value """
340*f81fb7c4SAndroid Build Coastguard Worker        return self.je.ctrls[fld].GetValue()
341*f81fb7c4SAndroid Build Coastguard Worker
342*f81fb7c4SAndroid Build Coastguard Worker    def SetValue(self, fld, val):
343*f81fb7c4SAndroid Build Coastguard Worker        """ Sets a control value """
344*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[fld].SetValue(val)
345*f81fb7c4SAndroid Build Coastguard Worker        if self.je.ctrls[fld] == self.je.ctrls[JetDefs.F_MIDIFILE]:
346*f81fb7c4SAndroid Build Coastguard Worker            self.UpdateMaxMbt()
347*f81fb7c4SAndroid Build Coastguard Worker
348*f81fb7c4SAndroid Build Coastguard Worker    def OnOk(self, event):
349*f81fb7c4SAndroid Build Coastguard Worker        """ Exits dialog box """
350*f81fb7c4SAndroid Build Coastguard Worker        self.ShutdownPlayer()
351*f81fb7c4SAndroid Build Coastguard Worker        if self.Validate():
352*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_START].UnBindKillFocus()
353*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_END].UnBindKillFocus()
354*f81fb7c4SAndroid Build Coastguard Worker            self.EndModal(wx.ID_OK)
355*f81fb7c4SAndroid Build Coastguard Worker
356*f81fb7c4SAndroid Build Coastguard Worker    def Validate(self):
357*f81fb7c4SAndroid Build Coastguard Worker        """ Validates the control values before exiting """
358*f81fb7c4SAndroid Build Coastguard Worker        if not CompareMbt(self.je.ctrls[JetDefs.F_START].GetValue(), self.je.ctrls[JetDefs.F_END].GetValue()):
359*f81fb7c4SAndroid Build Coastguard Worker            InfoMsg("Start/End", "The segment starting and ending times are illogical.")
360*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_START].SetFocus()
361*f81fb7c4SAndroid Build Coastguard Worker            return False
362*f81fb7c4SAndroid Build Coastguard Worker        if len(self.je.ctrls[JetDefs.F_SEGNAME].GetValue()) == 0:
363*f81fb7c4SAndroid Build Coastguard Worker            InfoMsg("Segment Name", "The segment must have a name.")
364*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_SEGNAME].SetFocus()
365*f81fb7c4SAndroid Build Coastguard Worker            return False
366*f81fb7c4SAndroid Build Coastguard Worker        if len(self.je.ctrls[JetDefs.F_MIDIFILE].GetValue()) == 0:
367*f81fb7c4SAndroid Build Coastguard Worker            InfoMsg("MIDI File", "The segment must have a midi file selected.")
368*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_MIDIFILE].SetFocus()
369*f81fb7c4SAndroid Build Coastguard Worker            return False
370*f81fb7c4SAndroid Build Coastguard Worker        if not FileExists(self.je.ctrls[JetDefs.F_MIDIFILE].GetValue()):
371*f81fb7c4SAndroid Build Coastguard Worker            InfoMsg("MIDI File", "The MIDI file does not exist.")
372*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_MIDIFILE].SetFocus()
373*f81fb7c4SAndroid Build Coastguard Worker            return False
374*f81fb7c4SAndroid Build Coastguard Worker        if len(self.je.ctrls[JetDefs.F_DLSFILE].GetValue()) > 0:
375*f81fb7c4SAndroid Build Coastguard Worker            if not FileExists(self.je.ctrls[JetDefs.F_DLSFILE].GetValue()):
376*f81fb7c4SAndroid Build Coastguard Worker                InfoMsg("DLS File", "The DLS file does not exist.")
377*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_DLSFILE].SetFocus()
378*f81fb7c4SAndroid Build Coastguard Worker                return False
379*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_MUTEFLAGS].SetValue(ComputeMuteFlagsFromList(self.je.ctrls[JetDefs.F_MUTEFLAGS]))
380*f81fb7c4SAndroid Build Coastguard Worker        return True
381*f81fb7c4SAndroid Build Coastguard Worker
382*f81fb7c4SAndroid Build Coastguard Worker    def SetSegment(self, mode):
383*f81fb7c4SAndroid Build Coastguard Worker        """ Builds the segment info for graphing """
384*f81fb7c4SAndroid Build Coastguard Worker        if mode == PLAY_SEGMENT:
385*f81fb7c4SAndroid Build Coastguard Worker            jetevents = self.jetevents
386*f81fb7c4SAndroid Build Coastguard Worker            segment = JetSegment(self.GetValue(JetDefs.F_SEGNAME),
387*f81fb7c4SAndroid Build Coastguard Worker                                 self.GetValue(JetDefs.F_MIDIFILE),
388*f81fb7c4SAndroid Build Coastguard Worker                                 self.GetValue(JetDefs.F_START),
389*f81fb7c4SAndroid Build Coastguard Worker                                 self.GetValue(JetDefs.F_END),
390*f81fb7c4SAndroid Build Coastguard Worker                                 JetDefs.MBT_ZEROSTR,
391*f81fb7c4SAndroid Build Coastguard Worker                                 self.GetValue(JetDefs.F_SEGNAME),
392*f81fb7c4SAndroid Build Coastguard Worker                                 self.GetValue(JetDefs.F_QUANTIZE),
393*f81fb7c4SAndroid Build Coastguard Worker                                 jetevents,
394*f81fb7c4SAndroid Build Coastguard Worker                                 self.GetValue(JetDefs.F_DLSFILE),
395*f81fb7c4SAndroid Build Coastguard Worker                                 None,
396*f81fb7c4SAndroid Build Coastguard Worker                                 self.GetValue(JetDefs.F_TRANSPOSE),
397*f81fb7c4SAndroid Build Coastguard Worker                                 self.GetValue(JetDefs.F_REPEAT),
398*f81fb7c4SAndroid Build Coastguard Worker                                 self.GetValue(JetDefs.F_MUTEFLAGS))
399*f81fb7c4SAndroid Build Coastguard Worker        else:
400*f81fb7c4SAndroid Build Coastguard Worker            jetevents = []
401*f81fb7c4SAndroid Build Coastguard Worker            segment = JetSegment(self.GetValue(JetDefs.F_SEGNAME),
402*f81fb7c4SAndroid Build Coastguard Worker                                 self.GetValue(JetDefs.F_MIDIFILE),
403*f81fb7c4SAndroid Build Coastguard Worker                                 JetDefs.MBT_ZEROSTR,
404*f81fb7c4SAndroid Build Coastguard Worker                                 self.lastMidiInfo.endMbtStr,
405*f81fb7c4SAndroid Build Coastguard Worker                                 JetDefs.MBT_ZEROSTR,
406*f81fb7c4SAndroid Build Coastguard Worker                                 self.GetValue(JetDefs.F_SEGNAME),
407*f81fb7c4SAndroid Build Coastguard Worker                                 self.GetValue(JetDefs.F_QUANTIZE),
408*f81fb7c4SAndroid Build Coastguard Worker                                 jetevents,
409*f81fb7c4SAndroid Build Coastguard Worker                                 self.GetValue(JetDefs.F_DLSFILE),
410*f81fb7c4SAndroid Build Coastguard Worker                                 None,
411*f81fb7c4SAndroid Build Coastguard Worker                                 0,
412*f81fb7c4SAndroid Build Coastguard Worker                                 0,
413*f81fb7c4SAndroid Build Coastguard Worker                                 0)
414*f81fb7c4SAndroid Build Coastguard Worker        return segment
415*f81fb7c4SAndroid Build Coastguard Worker
416*f81fb7c4SAndroid Build Coastguard Worker    def OnEventChecked(self, index, checked):
417*f81fb7c4SAndroid Build Coastguard Worker        """ Track is checked so mute or unmute it """
418*f81fb7c4SAndroid Build Coastguard Worker        if self.Player is not None:
419*f81fb7c4SAndroid Build Coastguard Worker            trackNum = self.je.ctrls[JetDefs.F_MUTEFLAGS].GetTrackNumber(index)
420*f81fb7c4SAndroid Build Coastguard Worker            self.Player.SetMuteFlag(trackNum, checked)
421*f81fb7c4SAndroid Build Coastguard Worker
422*f81fb7c4SAndroid Build Coastguard Worker    def OnPlay(self, event):
423*f81fb7c4SAndroid Build Coastguard Worker        """ Play the segment button pressed """
424*f81fb7c4SAndroid Build Coastguard Worker        if self.je.ctrls[JetDefs.F_PLAY].GetLabel() == JetDefs.BUT_STOP:
425*f81fb7c4SAndroid Build Coastguard Worker            self.Player.SetKeepPlayingFlag(False)
426*f81fb7c4SAndroid Build Coastguard Worker            return
427*f81fb7c4SAndroid Build Coastguard Worker
428*f81fb7c4SAndroid Build Coastguard Worker        if not self.Validate():
429*f81fb7c4SAndroid Build Coastguard Worker            return
430*f81fb7c4SAndroid Build Coastguard Worker
431*f81fb7c4SAndroid Build Coastguard Worker        self.playMode = PLAY_SEGMENT
432*f81fb7c4SAndroid Build Coastguard Worker        self.graphSegment = self.SetSegment(self.graphMode)
433*f81fb7c4SAndroid Build Coastguard Worker        self.UpdateGraph()
434*f81fb7c4SAndroid Build Coastguard Worker        self.Player = PreviewPlayer(self.je.ctrls[JetDefs.F_PLAY], self.SetSegment(self.playMode))
435*f81fb7c4SAndroid Build Coastguard Worker        self.Player.SetGraphCtrl(self.je.ctrls[JetDefs.F_GRAPH], self)
436*f81fb7c4SAndroid Build Coastguard Worker        self.PlayerThread = thread.start_new_thread(self.Player .Start, ())
437*f81fb7c4SAndroid Build Coastguard Worker
438*f81fb7c4SAndroid Build Coastguard Worker    def OnPlayMidi(self, event):
439*f81fb7c4SAndroid Build Coastguard Worker        """ Play the whole midi file pressed """
440*f81fb7c4SAndroid Build Coastguard Worker        if self.je.ctrls[JetDefs.F_PLAYMIDI].GetLabel() == JetDefs.BUT_STOP:
441*f81fb7c4SAndroid Build Coastguard Worker            self.Player.SetKeepPlayingFlag(False)
442*f81fb7c4SAndroid Build Coastguard Worker            return
443*f81fb7c4SAndroid Build Coastguard Worker
444*f81fb7c4SAndroid Build Coastguard Worker        if not self.Validate():
445*f81fb7c4SAndroid Build Coastguard Worker            return
446*f81fb7c4SAndroid Build Coastguard Worker
447*f81fb7c4SAndroid Build Coastguard Worker        self.playMode = PLAY_MIDI
448*f81fb7c4SAndroid Build Coastguard Worker        self.graphSegment = self.SetSegment(self.graphMode)
449*f81fb7c4SAndroid Build Coastguard Worker        self.UpdateGraph()
450*f81fb7c4SAndroid Build Coastguard Worker        self.Player = PreviewPlayer(self.je.ctrls[JetDefs.F_PLAYMIDI], self.SetSegment(self.playMode))
451*f81fb7c4SAndroid Build Coastguard Worker        self.Player.SetGraphCtrl(self.je.ctrls[JetDefs.F_GRAPH], self)
452*f81fb7c4SAndroid Build Coastguard Worker        self.PlayerThread = thread.start_new_thread(self.Player .Start, ())
453*f81fb7c4SAndroid Build Coastguard Worker
454*f81fb7c4SAndroid Build Coastguard Worker    def OnSetGraphType(self, event):
455*f81fb7c4SAndroid Build Coastguard Worker        """ Sets the type of graph """
456*f81fb7c4SAndroid Build Coastguard Worker        self.SetGraphType(event.GetInt())
457*f81fb7c4SAndroid Build Coastguard Worker
458*f81fb7c4SAndroid Build Coastguard Worker    def SetGraphType(self, iMode):
459*f81fb7c4SAndroid Build Coastguard Worker        """ Sets the type of graph """
460*f81fb7c4SAndroid Build Coastguard Worker        if iMode == 1:
461*f81fb7c4SAndroid Build Coastguard Worker            self.graphMode = PLAY_SEGMENT
462*f81fb7c4SAndroid Build Coastguard Worker        else:
463*f81fb7c4SAndroid Build Coastguard Worker            self.graphMode = PLAY_MIDI
464*f81fb7c4SAndroid Build Coastguard Worker        self.graphSegment = self.SetSegment(self.graphMode)
465*f81fb7c4SAndroid Build Coastguard Worker        self.UpdateGraph()
466*f81fb7c4SAndroid Build Coastguard Worker
467*f81fb7c4SAndroid Build Coastguard Worker    def OnGraphUpdate(self, evt):
468*f81fb7c4SAndroid Build Coastguard Worker        """ Calls graph control to draw """
469*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_GRAPH].DoDrawing()
470*f81fb7c4SAndroid Build Coastguard Worker
471*f81fb7c4SAndroid Build Coastguard Worker    def UpdateGraph(self):
472*f81fb7c4SAndroid Build Coastguard Worker        """ Updates values for graph control """
473*f81fb7c4SAndroid Build Coastguard Worker        if self.graphMode == PLAY_SEGMENT:
474*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_GRAPH].LoadSegment(self.graphSegment, showLabels=IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHLABELS, JetDefs.F_GRAPHLABELS, 'bool', 'True'), showClips=IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHCLIPS, JetDefs.F_GRAPHCLIPS, 'bool', 'True'), showAppEvts=IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHAPPEVTS, JetDefs.F_GRAPHAPPEVTS, 'bool', 'True'))
475*f81fb7c4SAndroid Build Coastguard Worker        else:
476*f81fb7c4SAndroid Build Coastguard Worker            if self.playMode == PLAY_SEGMENT:
477*f81fb7c4SAndroid Build Coastguard Worker                iMidiMode = True
478*f81fb7c4SAndroid Build Coastguard Worker            else:
479*f81fb7c4SAndroid Build Coastguard Worker                iMidiMode = False
480*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_GRAPH].LoadSegment(self.graphSegment,(self.GetValue(JetDefs.F_SEGNAME), self.GetValue(JetDefs.F_START), self.GetValue(JetDefs.F_END)), iMidiMode, showLabels=IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHLABELS, JetDefs.F_GRAPHLABELS, 'bool', 'True'), showClips=IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHCLIPS, JetDefs.F_GRAPHCLIPS, 'bool', 'True'), showAppEvts=IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHAPPEVTS, JetDefs.F_GRAPHAPPEVTS, 'bool', 'True'))
481*f81fb7c4SAndroid Build Coastguard Worker
482*f81fb7c4SAndroid Build Coastguard Worker    def OnJetStatusUpdate(self, evt):
483*f81fb7c4SAndroid Build Coastguard Worker        """ All UI needed by thread must be called via Postevent or OS X crashes """
484*f81fb7c4SAndroid Build Coastguard Worker        if evt.mode == JetDefs.PST_UPD_LOCATION:
485*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_GRAPH].UpdateLocation(evt.data)
486*f81fb7c4SAndroid Build Coastguard Worker        elif evt.mode == JetDefs.PST_PLAY:
487*f81fb7c4SAndroid Build Coastguard Worker            if self.playMode == PLAY_SEGMENT:
488*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_PLAY].SetLabel(JetDefs.BUT_STOP)
489*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_PLAYMIDI].Enabled = False
490*f81fb7c4SAndroid Build Coastguard Worker            else:
491*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_RDOGRAPH].Enabled = False
492*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_PLAYMIDI].SetLabel(JetDefs.BUT_STOP)
493*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_PLAY].Enabled = False
494*f81fb7c4SAndroid Build Coastguard Worker
495*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_PAUSE].Enabled = True
496*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_PAUSE].SetLabel(JetDefs.BUT_PAUSE)
497*f81fb7c4SAndroid Build Coastguard Worker        elif evt.mode == JetDefs.PST_DONE:
498*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_RDOGRAPH].Enabled = True
499*f81fb7c4SAndroid Build Coastguard Worker            if self.playMode == PLAY_SEGMENT:
500*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_PLAY].SetLabel(JetDefs.BUT_PLAYSEG)
501*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_PLAYMIDI].Enabled = True
502*f81fb7c4SAndroid Build Coastguard Worker            else:
503*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_PLAYMIDI].SetLabel(JetDefs.BUT_PLAYMIDI)
504*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_PLAY].Enabled = True
505*f81fb7c4SAndroid Build Coastguard Worker
506*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_PAUSE].Enabled = False
507*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_PAUSE].SetLabel(JetDefs.BUT_PAUSE)
508*f81fb7c4SAndroid Build Coastguard Worker        elif evt.mode == JetDefs.PST_PAUSE:
509*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_PAUSE].SetLabel(JetDefs.BUT_RESUME)
510*f81fb7c4SAndroid Build Coastguard Worker        elif evt.mode == JetDefs.PST_RESUME:
511*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_PAUSE].SetLabel(JetDefs.BUT_PAUSE)
512*f81fb7c4SAndroid Build Coastguard Worker        elif evt.mode == JetDefs.PST_MIDI_INFO:
513*f81fb7c4SAndroid Build Coastguard Worker            ClearRowSelections(self.je.ctrls[JetDefs.F_MUTEFLAGS])
514*f81fb7c4SAndroid Build Coastguard Worker            self.md = evt.data
515*f81fb7c4SAndroid Build Coastguard Worker            if self.md.err == 0:
516*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_END].SetMaxMbt(self.md.maxMeasures+1,self.md.maxBeats,self.md.maxTicks)
517*f81fb7c4SAndroid Build Coastguard Worker                if self.je.ctrls[JetDefs.F_END].GetValue() == JetDefs.MBT_ZEROSTR:
518*f81fb7c4SAndroid Build Coastguard Worker                    self.je.ctrls[JetDefs.F_END].SetValue((self.md.maxMeasures,0,0))
519*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_START].SetMaxMbt(self.md.maxMeasures+1,self.md.maxBeats,self.md.maxTicks)
520*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_MUTEFLAGS].DeleteAllItems()
521*f81fb7c4SAndroid Build Coastguard Worker                loadEmpty = IniGetValue(self.currentJetConfigFile, JetDefs.INI_DISPEMPTYTRACKS, JetDefs.INI_DISPEMPTYTRACKS, 'bool', 'False')
522*f81fb7c4SAndroid Build Coastguard Worker                for track in self.md.trackList:
523*f81fb7c4SAndroid Build Coastguard Worker                    self.je.ctrls[JetDefs.F_MUTEFLAGS].AddTrackRow(track, loadEmpty)
524*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_MUTEFLAGS].CheckTracks(self.je.ctrls[JetDefs.F_MUTEFLAGS].GetValue())
525*f81fb7c4SAndroid Build Coastguard Worker                self.graphSegment = self.SetSegment(self.graphMode)
526*f81fb7c4SAndroid Build Coastguard Worker                self.UpdateGraph()
527*f81fb7c4SAndroid Build Coastguard Worker
528*f81fb7c4SAndroid Build Coastguard Worker    def OnSetTrackDisplayOption(self, evt):
529*f81fb7c4SAndroid Build Coastguard Worker        IniSetValue(self.currentJetConfigFile, JetDefs.INI_DISPEMPTYTRACKS, JetDefs.INI_DISPEMPTYTRACKS, self.je.ctrls[JetDefs.F_DISPEMPTYTRACKS].GetValue())
530*f81fb7c4SAndroid Build Coastguard Worker        loadEmpty = IniGetValue(self.currentJetConfigFile, JetDefs.INI_DISPEMPTYTRACKS, JetDefs.INI_DISPEMPTYTRACKS, 'bool', 'False')
531*f81fb7c4SAndroid Build Coastguard Worker        if self.md is not None:
532*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_MUTEFLAGS].DeleteAllItems()
533*f81fb7c4SAndroid Build Coastguard Worker            if self.md.err == 0:
534*f81fb7c4SAndroid Build Coastguard Worker                for track in self.md.trackList:
535*f81fb7c4SAndroid Build Coastguard Worker                    self.je.ctrls[JetDefs.F_MUTEFLAGS].AddTrackRow(track, loadEmpty)
536*f81fb7c4SAndroid Build Coastguard Worker
537*f81fb7c4SAndroid Build Coastguard Worker    def OnPause(self, evt):
538*f81fb7c4SAndroid Build Coastguard Worker        """ Pauses the playback """
539*f81fb7c4SAndroid Build Coastguard Worker        self.Player.Pause()
540*f81fb7c4SAndroid Build Coastguard Worker
541*f81fb7c4SAndroid Build Coastguard Worker    def OnSetGraphOptions(self, evt):
542*f81fb7c4SAndroid Build Coastguard Worker        """ Sets graph options """
543*f81fb7c4SAndroid Build Coastguard Worker        IniSetValue(self.currentJetConfigFile, JetDefs.F_GRAPHLABELS, JetDefs.F_GRAPHLABELS, self.je.ctrls[JetDefs.F_GRAPHLABELS].GetValue())
544*f81fb7c4SAndroid Build Coastguard Worker        IniSetValue(self.currentJetConfigFile, JetDefs.F_GRAPHAPPEVTS, JetDefs.F_GRAPHAPPEVTS, self.je.ctrls[JetDefs.F_GRAPHAPPEVTS].GetValue())
545*f81fb7c4SAndroid Build Coastguard Worker        IniSetValue(self.currentJetConfigFile, JetDefs.F_GRAPHCLIPS, JetDefs.F_GRAPHCLIPS, self.je.ctrls[JetDefs.F_GRAPHCLIPS].GetValue())
546*f81fb7c4SAndroid Build Coastguard Worker        self.UpdateGraph()
547*f81fb7c4SAndroid Build Coastguard Worker
548*f81fb7c4SAndroid Build Coastguard Worker    def OnReplicate(self, evt):
549*f81fb7c4SAndroid Build Coastguard Worker        dlg = JetReplicate("Replicate Segment")
550*f81fb7c4SAndroid Build Coastguard Worker        dlg.SetValue(JetDefs.F_RPREPLACE, True)
551*f81fb7c4SAndroid Build Coastguard Worker        dlg.SetName(self.GetValue(JetDefs.F_SEGNAME))
552*f81fb7c4SAndroid Build Coastguard Worker        dlg.event_type = "SEGMENT"
553*f81fb7c4SAndroid Build Coastguard Worker        dlg.event_max = self.je.ctrls[JetDefs.F_START].GetMaxMbt()
554*f81fb7c4SAndroid Build Coastguard Worker        dlg.length = MbtDifference(ConvertStrTimeToTuple(self.GetValue(JetDefs.F_START)), ConvertStrTimeToTuple(self.GetValue(JetDefs.F_END)))
555*f81fb7c4SAndroid Build Coastguard Worker        result = dlg.ShowModal()
556*f81fb7c4SAndroid Build Coastguard Worker        if result == wx.ID_OK:
557*f81fb7c4SAndroid Build Coastguard Worker            self.replicatePrefix = dlg.GetValue(JetDefs.F_RPPREFIX)
558*f81fb7c4SAndroid Build Coastguard Worker            self.lstReplicate = dlg.lstReplicate
559*f81fb7c4SAndroid Build Coastguard Worker            self.chkReplaceMatching = dlg.GetValue(JetDefs.F_RPREPLACE)
560*f81fb7c4SAndroid Build Coastguard Worker            self.EndModal(wx.ID_OK)
561*f81fb7c4SAndroid Build Coastguard Worker        else:
562*f81fb7c4SAndroid Build Coastguard Worker            dlg.Destroy()
563*f81fb7c4SAndroid Build Coastguard Worker
564*f81fb7c4SAndroid Build Coastguard Workerclass EventEdit(wx.Dialog):
565*f81fb7c4SAndroid Build Coastguard Worker    """ Event edit dialog box """
566*f81fb7c4SAndroid Build Coastguard Worker    def __init__(self, title, currentJetConfigFile):
567*f81fb7c4SAndroid Build Coastguard Worker        wx.Dialog.__init__(self, None, -1, title)
568*f81fb7c4SAndroid Build Coastguard Worker        self.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
569*f81fb7c4SAndroid Build Coastguard Worker        self.title = title
570*f81fb7c4SAndroid Build Coastguard Worker        self.currentJetConfigFile = currentJetConfigFile
571*f81fb7c4SAndroid Build Coastguard Worker        self.je = JetEdit(self, "EVTDLG_CTRLS", self)
572*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_MUTEFLAGS].AddCol(JetDefs.GRD_TRACK, JetDefs.MUTEGRD_TRACK)
573*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_MUTEFLAGS].AddCol(JetDefs.GRD_CHANNEL, JetDefs.MUTEGRD_CHANNEL)
574*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_MUTEFLAGS].AddCol(JetDefs.GRD_NAME, JetDefs.MUTEGRD_NAME)
575*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_ESTART].SetChangeCallbackFct(self.UpdateGraph)
576*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_EEND].SetChangeCallbackFct(self.UpdateGraph)
577*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_GRAPHLABELS].SetValue(IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHLABELS, JetDefs.F_GRAPHLABELS, 'bool', 'True'))
578*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_GRAPHCLIPS].SetValue(IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHCLIPS, JetDefs.F_GRAPHCLIPS, 'bool', 'True'))
579*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_GRAPHAPPEVTS].SetValue(IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHAPPEVTS, JetDefs.F_GRAPHAPPEVTS, 'bool', 'True'))
580*f81fb7c4SAndroid Build Coastguard Worker        EVT_JET_STATUS(self, self.OnJetStatusUpdate)
581*f81fb7c4SAndroid Build Coastguard Worker        self.segment = None
582*f81fb7c4SAndroid Build Coastguard Worker        self.Player = None
583*f81fb7c4SAndroid Build Coastguard Worker        self.event_id = 1
584*f81fb7c4SAndroid Build Coastguard Worker        self.replicatePrefix = ""
585*f81fb7c4SAndroid Build Coastguard Worker        self.lstReplicate = []
586*f81fb7c4SAndroid Build Coastguard Worker        self.chkReplaceMatching = False
587*f81fb7c4SAndroid Build Coastguard Worker
588*f81fb7c4SAndroid Build Coastguard Worker        wx.EVT_CLOSE(self, self.OnClose)
589*f81fb7c4SAndroid Build Coastguard Worker        self.SetSize(JetDefs.EVTDLG_SIZE)
590*f81fb7c4SAndroid Build Coastguard Worker        self.CenterOnParent()
591*f81fb7c4SAndroid Build Coastguard Worker
592*f81fb7c4SAndroid Build Coastguard Worker    def OnGraphUpdate(self, evt):
593*f81fb7c4SAndroid Build Coastguard Worker        """ Calls the graph module to update the graph """
594*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_GRAPH].DoDrawing()
595*f81fb7c4SAndroid Build Coastguard Worker
596*f81fb7c4SAndroid Build Coastguard Worker    def OnJetStatusUpdate(self, evt):
597*f81fb7c4SAndroid Build Coastguard Worker        """ Updates to UI needed by play thread come through here otherwise OS X crashes """
598*f81fb7c4SAndroid Build Coastguard Worker        if evt.mode == JetDefs.PST_UPD_LOCATION:
599*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_GRAPH].UpdateLocation(evt.data)
600*f81fb7c4SAndroid Build Coastguard Worker        elif evt.mode == JetDefs.PST_PLAY:
601*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_PAUSE].SetLabel(JetDefs.BUT_PAUSE)
602*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_PLAY].SetLabel(JetDefs.BUT_STOP)
603*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_PAUSE].Enabled = True
604*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_ETRIGGERBUT].Enabled = True
605*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_EMUTEBUT].Enabled = True
606*f81fb7c4SAndroid Build Coastguard Worker        elif evt.mode == JetDefs.PST_DONE:
607*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_EMUTEBUT].SetLabel(JetDefs.BUT_UNMUTE)
608*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_PLAY].SetLabel(JetDefs.BUT_PLAY)
609*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_PAUSE].Enabled = False
610*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_PAUSE].SetLabel(JetDefs.BUT_PAUSE)
611*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_ETRIGGERBUT].Enabled = False
612*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_EMUTEBUT].Enabled = False
613*f81fb7c4SAndroid Build Coastguard Worker        elif evt.mode == JetDefs.PST_PAUSE:
614*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_PAUSE].SetLabel(JetDefs.BUT_RESUME)
615*f81fb7c4SAndroid Build Coastguard Worker        elif evt.mode == JetDefs.PST_RESUME:
616*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_PAUSE].SetLabel(JetDefs.BUT_PAUSE)
617*f81fb7c4SAndroid Build Coastguard Worker
618*f81fb7c4SAndroid Build Coastguard Worker    def OnPause(self, evt):
619*f81fb7c4SAndroid Build Coastguard Worker        """ Pause the player """
620*f81fb7c4SAndroid Build Coastguard Worker        self.Player.Pause()
621*f81fb7c4SAndroid Build Coastguard Worker
622*f81fb7c4SAndroid Build Coastguard Worker    def UpdateGraph(self):
623*f81fb7c4SAndroid Build Coastguard Worker        """ Called back from player thread to update the graph """
624*f81fb7c4SAndroid Build Coastguard Worker        if len(self.segment.jetevents) == 0:
625*f81fb7c4SAndroid Build Coastguard Worker            self.segment.jetevents.append(JetEvent(self.je.ctrls[JetDefs.F_ENAME].GetValue(),
626*f81fb7c4SAndroid Build Coastguard Worker                                                   self.je.ctrls[JetDefs.F_ETYPE].GetValue(),
627*f81fb7c4SAndroid Build Coastguard Worker                                                   1,
628*f81fb7c4SAndroid Build Coastguard Worker                                                   self.je.ctrls[JetDefs.F_ETRACK].GetValue(),
629*f81fb7c4SAndroid Build Coastguard Worker                                                   self.je.ctrls[JetDefs.F_ECHANNEL].GetValue(),
630*f81fb7c4SAndroid Build Coastguard Worker                                                   self.je.ctrls[JetDefs.F_ESTART].GetValue(),
631*f81fb7c4SAndroid Build Coastguard Worker                                                   self.je.ctrls[JetDefs.F_EEND].GetValue()))
632*f81fb7c4SAndroid Build Coastguard Worker
633*f81fb7c4SAndroid Build Coastguard Worker        self.segment.jetevents[0].event_name = self.je.ctrls[JetDefs.F_ENAME].GetValue()
634*f81fb7c4SAndroid Build Coastguard Worker        self.segment.jetevents[0].event_type = self.je.ctrls[JetDefs.F_ETYPE].GetValue()
635*f81fb7c4SAndroid Build Coastguard Worker        self.segment.jetevents[0].event_start = self.je.ctrls[JetDefs.F_ESTART].GetValue()
636*f81fb7c4SAndroid Build Coastguard Worker        self.segment.jetevents[0].event_end = self.je.ctrls[JetDefs.F_EEND].GetValue()
637*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_GRAPH].LoadSegment(self.segment, showLabels=IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHLABELS, JetDefs.F_GRAPHLABELS, 'bool', 'True'), showClips=IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHCLIPS, JetDefs.F_GRAPHCLIPS, 'bool', 'True'), showAppEvts=IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHAPPEVTS, JetDefs.F_GRAPHAPPEVTS, 'bool', 'True'))
638*f81fb7c4SAndroid Build Coastguard Worker
639*f81fb7c4SAndroid Build Coastguard Worker    def OnClose(self, event):
640*f81fb7c4SAndroid Build Coastguard Worker        """ Called when dialog is closed """
641*f81fb7c4SAndroid Build Coastguard Worker        self.ShutdownPlayer()
642*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_ESTART].UnBindKillFocus()
643*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_EEND].UnBindKillFocus()
644*f81fb7c4SAndroid Build Coastguard Worker        self.EndModal(wx.ID_CANCEL)
645*f81fb7c4SAndroid Build Coastguard Worker
646*f81fb7c4SAndroid Build Coastguard Worker    def ShutdownPlayer(self):
647*f81fb7c4SAndroid Build Coastguard Worker        """ Sets flag to kill play loop """
648*f81fb7c4SAndroid Build Coastguard Worker        if self.Player is not None:
649*f81fb7c4SAndroid Build Coastguard Worker            self.Player.SetKeepPlayingFlag(False)
650*f81fb7c4SAndroid Build Coastguard Worker
651*f81fb7c4SAndroid Build Coastguard Worker    def GetValue(self, fld):
652*f81fb7c4SAndroid Build Coastguard Worker        """ Gets the value of a control """
653*f81fb7c4SAndroid Build Coastguard Worker        return self.je.ctrls[fld].GetValue()
654*f81fb7c4SAndroid Build Coastguard Worker
655*f81fb7c4SAndroid Build Coastguard Worker    def SetValue(self, fld, val):
656*f81fb7c4SAndroid Build Coastguard Worker        """ Sets the value of a control """
657*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[fld].SetValue(val)
658*f81fb7c4SAndroid Build Coastguard Worker
659*f81fb7c4SAndroid Build Coastguard Worker    def SetEventId(self):
660*f81fb7c4SAndroid Build Coastguard Worker        """ Sets the eventid value """
661*f81fb7c4SAndroid Build Coastguard Worker        if self.title == JetDefs.MAIN_ADDEVENTTITLE:
662*f81fb7c4SAndroid Build Coastguard Worker            iNextEventId = -1
663*f81fb7c4SAndroid Build Coastguard Worker            for evt in self.segment.jetevents:
664*f81fb7c4SAndroid Build Coastguard Worker                if evt.event_type == JetDefs.E_CLIP:
665*f81fb7c4SAndroid Build Coastguard Worker                    if iNextEventId < evt.event_id:
666*f81fb7c4SAndroid Build Coastguard Worker                        iNextEventId = evt.event_id
667*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_EEVENTID].SetValue(iNextEventId + 1)
668*f81fb7c4SAndroid Build Coastguard Worker
669*f81fb7c4SAndroid Build Coastguard Worker    def OnEventSelect(self, event=None):
670*f81fb7c4SAndroid Build Coastguard Worker        """ Adjusts the dialog box controls for various types of events """
671*f81fb7c4SAndroid Build Coastguard Worker        eType = self.je.ctrls[JetDefs.F_ETYPE].GetValue()
672*f81fb7c4SAndroid Build Coastguard Worker        if eType == JetDefs.E_EOS:
673*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_ENAME].SetValue(JetDefs.E_EOS)
674*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_ENAME].Enable(False)
675*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_ESTART].Enable(False)
676*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_EEND].Enable(True)
677*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_ETRIGGERBUT].Enable(False)
678*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_EEVENTID].Enable(False)
679*f81fb7c4SAndroid Build Coastguard Worker        elif eType == JetDefs.E_CLIP:
680*f81fb7c4SAndroid Build Coastguard Worker            if len(self.je.ctrls[JetDefs.F_ENAME].GetValue()) == 0 or self.je.ctrls[JetDefs.F_ENAME].GetValue() == JetDefs.E_EOS or self.je.ctrls[JetDefs.F_ENAME].GetValue() == JetDefs.E_APP:
681*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_ENAME].SetValue(JetDefs.E_CLIP)
682*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_ENAME].Enable(True)
683*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_ESTART].Enable(True)
684*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_EEND].Enable(True)
685*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_ETRIGGERBUT].Enable(True)
686*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_EEVENTID].Enable(True)
687*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_EEVENTID].SetRange(JetDefs.EVENTID_MIN, JetDefs.EVENTID_MAX)
688*f81fb7c4SAndroid Build Coastguard Worker            if self.je.ctrls[JetDefs.F_EEVENTID].GetValue() < JetDefs.EVENTID_MIN:
689*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_EEVENTID].SetValue(JetDefs.EVENTID_MIN)
690*f81fb7c4SAndroid Build Coastguard Worker            if self.je.ctrls[JetDefs.F_EEVENTID].GetValue() > JetDefs.EVENTID_MAX:
691*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_EEVENTID].SetValue(JetDefs.EVENTID_MAX)
692*f81fb7c4SAndroid Build Coastguard Worker            self.SetEventId()
693*f81fb7c4SAndroid Build Coastguard Worker        elif eType == JetDefs.E_APP:
694*f81fb7c4SAndroid Build Coastguard Worker            if len(self.je.ctrls[JetDefs.F_ENAME].GetValue()) == 0 or self.je.ctrls[JetDefs.F_ENAME].GetValue() == JetDefs.E_EOS:
695*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_ENAME].SetValue(JetDefs.E_APP)
696*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_ENAME].Enable(True)
697*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_ESTART].Enable(True)
698*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_EEND].Enable(False)
699*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_ETRIGGERBUT].Enable(False)
700*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_EEVENTID].Enable(True)
701*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_EEVENTID].SetRange(JetDefs.APPCONTROLLERID_MIN, JetDefs.APPCONTROLLERID_MAX)
702*f81fb7c4SAndroid Build Coastguard Worker            if self.je.ctrls[JetDefs.F_EEVENTID].GetValue() < JetDefs.APPCONTROLLERID_MIN:
703*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_EEVENTID].SetValue(JetDefs.APPCONTROLLERID_MIN)
704*f81fb7c4SAndroid Build Coastguard Worker            if self.je.ctrls[JetDefs.F_EEVENTID].GetValue() > JetDefs.APPCONTROLLERID_MAX:
705*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_EEVENTID].SetValue(JetDefs.APPCONTROLLERID_MAX)
706*f81fb7c4SAndroid Build Coastguard Worker
707*f81fb7c4SAndroid Build Coastguard Worker    def OnOk(self, event):
708*f81fb7c4SAndroid Build Coastguard Worker        """ Exits the dialog box """
709*f81fb7c4SAndroid Build Coastguard Worker        self.ShutdownPlayer()
710*f81fb7c4SAndroid Build Coastguard Worker        if self.Validate():
711*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_ESTART].UnBindKillFocus()
712*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_EEND].UnBindKillFocus()
713*f81fb7c4SAndroid Build Coastguard Worker            self.EndModal(wx.ID_OK)
714*f81fb7c4SAndroid Build Coastguard Worker
715*f81fb7c4SAndroid Build Coastguard Worker    def Validate(self):
716*f81fb7c4SAndroid Build Coastguard Worker        """ Validates the control values prior to exiting """
717*f81fb7c4SAndroid Build Coastguard Worker        if len(self.je.ctrls[JetDefs.F_ENAME].GetValue()) == 0:
718*f81fb7c4SAndroid Build Coastguard Worker            InfoMsg("Event Name", "The event must have a name.")
719*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_ENAME].SetFocus()
720*f81fb7c4SAndroid Build Coastguard Worker            return False
721*f81fb7c4SAndroid Build Coastguard Worker        if len(self.je.ctrls[JetDefs.F_ETYPE].GetValue()) == 0:
722*f81fb7c4SAndroid Build Coastguard Worker            InfoMsg("Event Name", "The event type must be selected.")
723*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_ETYPE].SetFocus()
724*f81fb7c4SAndroid Build Coastguard Worker            return False
725*f81fb7c4SAndroid Build Coastguard Worker        if self.je.ctrls[JetDefs.F_ETYPE].GetValue() == JetDefs.E_CLIP:
726*f81fb7c4SAndroid Build Coastguard Worker            if not CompareMbt(self.je.ctrls[JetDefs.F_ESTART].GetValue(), self.je.ctrls[JetDefs.F_EEND].GetValue()):
727*f81fb7c4SAndroid Build Coastguard Worker                InfoMsg("Start/End", "The event starting and ending times are illogical.")
728*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_ESTART].SetFocus()
729*f81fb7c4SAndroid Build Coastguard Worker                return False
730*f81fb7c4SAndroid Build Coastguard Worker            if MbtVal(self.je.ctrls[JetDefs.F_ESTART].GetValue()) < MbtVal(self.je.ctrls[JetDefs.F_START].GetValue()):
731*f81fb7c4SAndroid Build Coastguard Worker                InfoMsg("Event Starting Time", "The event starting time is illogical.")
732*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_ESTART].SetFocus()
733*f81fb7c4SAndroid Build Coastguard Worker                return False
734*f81fb7c4SAndroid Build Coastguard Worker            if MbtVal(self.je.ctrls[JetDefs.F_EEND].GetValue()) > MbtVal(self.je.ctrls[JetDefs.F_END].GetValue()):
735*f81fb7c4SAndroid Build Coastguard Worker                InfoMsg("Event Ending Time", "The event ending time is illogical.")
736*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_ESTART].SetFocus()
737*f81fb7c4SAndroid Build Coastguard Worker                return False
738*f81fb7c4SAndroid Build Coastguard Worker        if self.je.ctrls[JetDefs.F_ETYPE].GetValue() == JetDefs.E_APP:
739*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_EEND].SetValue(self.je.ctrls[JetDefs.F_ESTART].GetValue())
740*f81fb7c4SAndroid Build Coastguard Worker        if self.je.ctrls[JetDefs.F_ETYPE].GetValue() == JetDefs.E_EOS:
741*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_ESTART].SetValue(self.je.ctrls[JetDefs.F_EEND].GetValue())
742*f81fb7c4SAndroid Build Coastguard Worker        return True
743*f81fb7c4SAndroid Build Coastguard Worker
744*f81fb7c4SAndroid Build Coastguard Worker    def SetSegment(self, segment):
745*f81fb7c4SAndroid Build Coastguard Worker        """ Sets the segment values, then calls the graph update """
746*f81fb7c4SAndroid Build Coastguard Worker        self.segment = segment
747*f81fb7c4SAndroid Build Coastguard Worker        md = GetMidiInfo(segment.filename)
748*f81fb7c4SAndroid Build Coastguard Worker        if md.err == 0:
749*f81fb7c4SAndroid Build Coastguard Worker            self.SetValue(JetDefs.F_SEGNAME, segment.segname)
750*f81fb7c4SAndroid Build Coastguard Worker            self.SetValue(JetDefs.F_MUTEFLAGS, segment.mute_flags)
751*f81fb7c4SAndroid Build Coastguard Worker            self.SetValue(JetDefs.F_MIDIFILE, segment.filename)
752*f81fb7c4SAndroid Build Coastguard Worker            self.SetValue(JetDefs.F_DLSFILE, segment.dlsfile)
753*f81fb7c4SAndroid Build Coastguard Worker            self.SetValue(JetDefs.F_START, segment.start)
754*f81fb7c4SAndroid Build Coastguard Worker            self.SetValue(JetDefs.F_END, segment.end)
755*f81fb7c4SAndroid Build Coastguard Worker            self.SetValue(JetDefs.F_QUANTIZE, segment.quantize)
756*f81fb7c4SAndroid Build Coastguard Worker            self.SetValue(JetDefs.F_TRANSPOSE, segment.transpose)
757*f81fb7c4SAndroid Build Coastguard Worker            self.SetValue(JetDefs.F_REPEAT, segment.repeat)
758*f81fb7c4SAndroid Build Coastguard Worker            maxMeasures = abs(int(self.je.ctrls[JetDefs.F_END].GetValue('int')[0]))
759*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_EEND].SetMaxMbt(maxMeasures+1,md.maxBeats,md.maxTicks)
760*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_ESTART].SetMaxMbt(maxMeasures+1,md.maxBeats,md.maxTicks)
761*f81fb7c4SAndroid Build Coastguard Worker            minMeasures = abs(int(self.je.ctrls[JetDefs.F_START].GetValue('int')[0]))
762*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_EEND].SetMinMbt(minMeasures+1,0,0)
763*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_ESTART].SetMinMbt(minMeasures+1,0,0)
764*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_END].GetValue('int')
765*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_ETRACK].SetRange(1, md.maxTracks)
766*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_MUTEFLAGS].DeleteAllItems()
767*f81fb7c4SAndroid Build Coastguard Worker            for track in md.trackList:
768*f81fb7c4SAndroid Build Coastguard Worker                self.je.ctrls[JetDefs.F_MUTEFLAGS].AddTrackRow(track)
769*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_MUTEFLAGS].CheckTracks(self.je.ctrls[JetDefs.F_MUTEFLAGS].GetValue())
770*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_MUTEFLAGS].SetTextColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_GRAYTEXT))
771*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_GRAPH].LoadSegment(segment, showLabels=IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHLABELS, JetDefs.F_GRAPHLABELS, 'bool', 'True'), showClips=IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHCLIPS, JetDefs.F_GRAPHCLIPS, 'bool', 'True'), showAppEvts=IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHAPPEVTS, JetDefs.F_GRAPHAPPEVTS, 'bool', 'True'))
772*f81fb7c4SAndroid Build Coastguard Worker
773*f81fb7c4SAndroid Build Coastguard Worker    def OnPlay(self, event):
774*f81fb7c4SAndroid Build Coastguard Worker        """ Plays the segment allowing interaction with events """
775*f81fb7c4SAndroid Build Coastguard Worker        if self.je.ctrls[JetDefs.F_PLAY].GetLabel() == JetDefs.BUT_STOP:
776*f81fb7c4SAndroid Build Coastguard Worker            self.Player.SetKeepPlayingFlag(False)
777*f81fb7c4SAndroid Build Coastguard Worker            return
778*f81fb7c4SAndroid Build Coastguard Worker
779*f81fb7c4SAndroid Build Coastguard Worker        if not self.Validate():
780*f81fb7c4SAndroid Build Coastguard Worker            return
781*f81fb7c4SAndroid Build Coastguard Worker
782*f81fb7c4SAndroid Build Coastguard Worker        jetevents = []
783*f81fb7c4SAndroid Build Coastguard Worker        jetevents.append(JetEvent(self.GetValue(JetDefs.F_ENAME), self.GetValue(JetDefs.F_ETYPE),
784*f81fb7c4SAndroid Build Coastguard Worker                                  self.event_id, int(self.GetValue(JetDefs.F_ETRACK)),
785*f81fb7c4SAndroid Build Coastguard Worker                                  int(self.GetValue(JetDefs.F_ECHANNEL)),
786*f81fb7c4SAndroid Build Coastguard Worker                                  self.GetValue(JetDefs.F_ESTART), self.GetValue(JetDefs.F_EEND)))
787*f81fb7c4SAndroid Build Coastguard Worker
788*f81fb7c4SAndroid Build Coastguard Worker        segment = JetSegment(self.GetValue(JetDefs.F_SEGNAME),
789*f81fb7c4SAndroid Build Coastguard Worker                             self.GetValue(JetDefs.F_MIDIFILE),
790*f81fb7c4SAndroid Build Coastguard Worker                             self.GetValue(JetDefs.F_START),
791*f81fb7c4SAndroid Build Coastguard Worker                             self.GetValue(JetDefs.F_END),
792*f81fb7c4SAndroid Build Coastguard Worker                             JetDefs.MBT_ZEROSTR,
793*f81fb7c4SAndroid Build Coastguard Worker                             self.GetValue(JetDefs.F_SEGNAME),
794*f81fb7c4SAndroid Build Coastguard Worker                             self.GetValue(JetDefs.F_QUANTIZE),
795*f81fb7c4SAndroid Build Coastguard Worker                             jetevents,
796*f81fb7c4SAndroid Build Coastguard Worker                             self.GetValue(JetDefs.F_DLSFILE),
797*f81fb7c4SAndroid Build Coastguard Worker                             None,
798*f81fb7c4SAndroid Build Coastguard Worker                             self.GetValue(JetDefs.F_TRANSPOSE),
799*f81fb7c4SAndroid Build Coastguard Worker                             self.GetValue(JetDefs.F_REPEAT),
800*f81fb7c4SAndroid Build Coastguard Worker                             self.GetValue(JetDefs.F_MUTEFLAGS))
801*f81fb7c4SAndroid Build Coastguard Worker
802*f81fb7c4SAndroid Build Coastguard Worker        self.Player = PreviewPlayer(self.je.ctrls[JetDefs.F_PLAY], segment)
803*f81fb7c4SAndroid Build Coastguard Worker        self.Player.SetGraphCtrl(self.je.ctrls[JetDefs.F_GRAPH], self)
804*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_GRAPH].ClickCallbackFct = self.GraphTriggerClip
805*f81fb7c4SAndroid Build Coastguard Worker        self.Player.trigger_button = self.je.ctrls[JetDefs.F_ETRIGGERBUT]
806*f81fb7c4SAndroid Build Coastguard Worker        self.Player.mute_button = self.je.ctrls[JetDefs.F_EMUTEBUT]
807*f81fb7c4SAndroid Build Coastguard Worker        thread.start_new_thread(self.Player .Start, ())
808*f81fb7c4SAndroid Build Coastguard Worker
809*f81fb7c4SAndroid Build Coastguard Worker    def GraphTriggerClip(self, sClipName, iEventId):
810*f81fb7c4SAndroid Build Coastguard Worker        """ Triggers a clip via graph """
811*f81fb7c4SAndroid Build Coastguard Worker        if self.Player is not None:
812*f81fb7c4SAndroid Build Coastguard Worker            self.Player.GraphTriggerClip(sClipName, iEventId)
813*f81fb7c4SAndroid Build Coastguard Worker
814*f81fb7c4SAndroid Build Coastguard Worker    def OnMute(self, event):
815*f81fb7c4SAndroid Build Coastguard Worker        """ Mutes a track """
816*f81fb7c4SAndroid Build Coastguard Worker        if self.Player is not None:
817*f81fb7c4SAndroid Build Coastguard Worker            self.Player.MuteTrackViaButton(self.je.ctrls[JetDefs.F_EMUTEBUT],
818*f81fb7c4SAndroid Build Coastguard Worker                                           int(self.je.ctrls[JetDefs.F_ETRACK].GetValue()))
819*f81fb7c4SAndroid Build Coastguard Worker
820*f81fb7c4SAndroid Build Coastguard Worker    def OnTriggerClip(self, event):
821*f81fb7c4SAndroid Build Coastguard Worker        """ Triggers a clip """
822*f81fb7c4SAndroid Build Coastguard Worker        if self.Player is not None:
823*f81fb7c4SAndroid Build Coastguard Worker            self.Player.TriggerClip(self.event_id)
824*f81fb7c4SAndroid Build Coastguard Worker
825*f81fb7c4SAndroid Build Coastguard Worker    def OnSetGraphOptions(self, evt):
826*f81fb7c4SAndroid Build Coastguard Worker        """ Sets graph options """
827*f81fb7c4SAndroid Build Coastguard Worker        IniSetValue(self.currentJetConfigFile, JetDefs.F_GRAPHLABELS, JetDefs.F_GRAPHLABELS, self.je.ctrls[JetDefs.F_GRAPHLABELS].GetValue())
828*f81fb7c4SAndroid Build Coastguard Worker        IniSetValue(self.currentJetConfigFile, JetDefs.F_GRAPHAPPEVTS, JetDefs.F_GRAPHAPPEVTS, self.je.ctrls[JetDefs.F_GRAPHAPPEVTS].GetValue())
829*f81fb7c4SAndroid Build Coastguard Worker        IniSetValue(self.currentJetConfigFile, JetDefs.F_GRAPHCLIPS, JetDefs.F_GRAPHCLIPS, self.je.ctrls[JetDefs.F_GRAPHCLIPS].GetValue())
830*f81fb7c4SAndroid Build Coastguard Worker        self.UpdateGraph()
831*f81fb7c4SAndroid Build Coastguard Worker
832*f81fb7c4SAndroid Build Coastguard Worker    def OnReplicate(self, evt):
833*f81fb7c4SAndroid Build Coastguard Worker        dlg = JetReplicate("Replicate Event")
834*f81fb7c4SAndroid Build Coastguard Worker        dlg.SetValue(JetDefs.F_RPREPLACE, True)
835*f81fb7c4SAndroid Build Coastguard Worker        dlg.SetName(self.GetValue(JetDefs.F_ENAME))
836*f81fb7c4SAndroid Build Coastguard Worker        dlg.event_type = self.GetValue(JetDefs.F_ETYPE)
837*f81fb7c4SAndroid Build Coastguard Worker        dlg.event_max = self.segment.end
838*f81fb7c4SAndroid Build Coastguard Worker        dlg.length = MbtDifference(ConvertStrTimeToTuple(self.GetValue(JetDefs.F_ESTART)), ConvertStrTimeToTuple(self.GetValue(JetDefs.F_EEND)))
839*f81fb7c4SAndroid Build Coastguard Worker        result = dlg.ShowModal()
840*f81fb7c4SAndroid Build Coastguard Worker        if result == wx.ID_OK:
841*f81fb7c4SAndroid Build Coastguard Worker            self.replicatePrefix = dlg.GetValue(JetDefs.F_RPPREFIX)
842*f81fb7c4SAndroid Build Coastguard Worker            self.lstReplicate = dlg.lstReplicate
843*f81fb7c4SAndroid Build Coastguard Worker            self.chkReplaceMatching = dlg.GetValue(JetDefs.F_RPREPLACE)
844*f81fb7c4SAndroid Build Coastguard Worker            self.EndModal(wx.ID_OK)
845*f81fb7c4SAndroid Build Coastguard Worker        else:
846*f81fb7c4SAndroid Build Coastguard Worker            dlg.Destroy()
847*f81fb7c4SAndroid Build Coastguard Worker
848*f81fb7c4SAndroid Build Coastguard Workerclass JetReplicate(wx.Dialog):
849*f81fb7c4SAndroid Build Coastguard Worker    """ Replicate dialog box """
850*f81fb7c4SAndroid Build Coastguard Worker    def __init__(self, title):
851*f81fb7c4SAndroid Build Coastguard Worker        wx.Dialog.__init__(self, None, -1, title)
852*f81fb7c4SAndroid Build Coastguard Worker        self.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
853*f81fb7c4SAndroid Build Coastguard Worker        self.je = JetEdit(self, "REPLICATE_CTRLS", self)
854*f81fb7c4SAndroid Build Coastguard Worker
855*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_RPINCREMENT].SetMinMbt(0,0,0)
856*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_RPINCREMENT].SetValue((-1,-1,-1))
857*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_RPNUMBER].SetValue(1)
858*f81fb7c4SAndroid Build Coastguard Worker        for title, width, fld in JetDefs.REPLICATE_GRID:
859*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_RPGRDPREVIEW].AddCol(title, width)
860*f81fb7c4SAndroid Build Coastguard Worker        self.lstReplicate = []
861*f81fb7c4SAndroid Build Coastguard Worker
862*f81fb7c4SAndroid Build Coastguard Worker        self.SetSize(JetDefs.REPLICATE_SIZE)
863*f81fb7c4SAndroid Build Coastguard Worker        self.CenterOnParent()
864*f81fb7c4SAndroid Build Coastguard Worker
865*f81fb7c4SAndroid Build Coastguard Worker    def OnOk(self, event):
866*f81fb7c4SAndroid Build Coastguard Worker        self.EndModal(wx.ID_OK)
867*f81fb7c4SAndroid Build Coastguard Worker
868*f81fb7c4SAndroid Build Coastguard Worker    def GetValue(self, fld):
869*f81fb7c4SAndroid Build Coastguard Worker        return self.je.ctrls[fld].GetValue()
870*f81fb7c4SAndroid Build Coastguard Worker
871*f81fb7c4SAndroid Build Coastguard Worker    def SetValue(self, fld, val):
872*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[fld].SetValue(val)
873*f81fb7c4SAndroid Build Coastguard Worker
874*f81fb7c4SAndroid Build Coastguard Worker    def SetName(self, name):
875*f81fb7c4SAndroid Build Coastguard Worker        for i in range(len(name), 1, -1):
876*f81fb7c4SAndroid Build Coastguard Worker            if not name[i-1].isdigit() and name[i-1] <> ' ':
877*f81fb7c4SAndroid Build Coastguard Worker                break
878*f81fb7c4SAndroid Build Coastguard Worker            else:
879*f81fb7c4SAndroid Build Coastguard Worker                name = name[0:i-1]
880*f81fb7c4SAndroid Build Coastguard Worker        self.SetValue(JetDefs.F_RPPREFIX, name)
881*f81fb7c4SAndroid Build Coastguard Worker
882*f81fb7c4SAndroid Build Coastguard Worker    def Validate(self):
883*f81fb7c4SAndroid Build Coastguard Worker        if self.GetValue(JetDefs.F_RPPREFIX) == '':
884*f81fb7c4SAndroid Build Coastguard Worker            InfoMsg("Message", "Prefix is required.")
885*f81fb7c4SAndroid Build Coastguard Worker            return False
886*f81fb7c4SAndroid Build Coastguard Worker        return True
887*f81fb7c4SAndroid Build Coastguard Worker
888*f81fb7c4SAndroid Build Coastguard Worker    def OnPreview(self, event):
889*f81fb7c4SAndroid Build Coastguard Worker        if not self.Validate():
890*f81fb7c4SAndroid Build Coastguard Worker            return
891*f81fb7c4SAndroid Build Coastguard Worker        start = MbtVal(self.GetValue(JetDefs.F_ESTART))
892*f81fb7c4SAndroid Build Coastguard Worker        max = MbtVal(self.event_max)
893*f81fb7c4SAndroid Build Coastguard Worker        increment = MbtVal((self.je.ctrls[JetDefs.F_RPINCREMENT].GetMeasure(), self.je.ctrls[JetDefs.F_RPINCREMENT].GetBeat(), self.je.ctrls[JetDefs.F_RPINCREMENT].GetTick()))
894*f81fb7c4SAndroid Build Coastguard Worker
895*f81fb7c4SAndroid Build Coastguard Worker        self.lstReplicate = []
896*f81fb7c4SAndroid Build Coastguard Worker        iTo = int(self.GetValue(JetDefs.F_RPNUMBER))
897*f81fb7c4SAndroid Build Coastguard Worker        for i in range(iTo):
898*f81fb7c4SAndroid Build Coastguard Worker            evt_name = "%s %.2d" % (self.GetValue(JetDefs.F_RPPREFIX), i)
899*f81fb7c4SAndroid Build Coastguard Worker            s_ticks = start + (i * increment)
900*f81fb7c4SAndroid Build Coastguard Worker            s_mbt = TicksToMbt(s_ticks)
901*f81fb7c4SAndroid Build Coastguard Worker            evt_start =  "%d:%d:%d" % (s_mbt[0]+1, s_mbt[1]+1, s_mbt[2])
902*f81fb7c4SAndroid Build Coastguard Worker            if self.event_type == JetDefs.E_CLIP or self.event_type == "SEGMENT":
903*f81fb7c4SAndroid Build Coastguard Worker                e_ticks = s_ticks + self.length
904*f81fb7c4SAndroid Build Coastguard Worker                e_mbt = TicksToMbt(e_ticks)
905*f81fb7c4SAndroid Build Coastguard Worker                evt_end = "%d:%d:%d" % (e_mbt[0]+1, e_mbt[1]+1, e_mbt[2])
906*f81fb7c4SAndroid Build Coastguard Worker            else:
907*f81fb7c4SAndroid Build Coastguard Worker                e_ticks = s_ticks
908*f81fb7c4SAndroid Build Coastguard Worker                evt_end = evt_start
909*f81fb7c4SAndroid Build Coastguard Worker            if s_ticks <= max and e_ticks <= max:
910*f81fb7c4SAndroid Build Coastguard Worker                self.lstReplicate.append((evt_name, evt_start, evt_end))
911*f81fb7c4SAndroid Build Coastguard Worker
912*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_RPGRDPREVIEW].DeleteAllItems()
913*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_RPGRDPREVIEW].AddRows(self.lstReplicate)
914*f81fb7c4SAndroid Build Coastguard Worker
915*f81fb7c4SAndroid Build Coastguard Workerclass JetMove(wx.Dialog):
916*f81fb7c4SAndroid Build Coastguard Worker    """ Move events dialog box """
917*f81fb7c4SAndroid Build Coastguard Worker    def __init__(self, title):
918*f81fb7c4SAndroid Build Coastguard Worker        wx.Dialog.__init__(self, None, -1, title)
919*f81fb7c4SAndroid Build Coastguard Worker        self.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
920*f81fb7c4SAndroid Build Coastguard Worker        self.je = JetEdit(self, "MOVE_CTRLS", self)
921*f81fb7c4SAndroid Build Coastguard Worker
922*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_RPINCREMENT].SetMinMbt(-999,-4,-480)
923*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_RPINCREMENT].SetValue((-1,-1,-1))
924*f81fb7c4SAndroid Build Coastguard Worker        for title, width, fld in JetDefs.REPLICATE_GRID:
925*f81fb7c4SAndroid Build Coastguard Worker            self.je.ctrls[JetDefs.F_RPGRDPREVIEW].AddCol(title, width)
926*f81fb7c4SAndroid Build Coastguard Worker        self.lstMove = []
927*f81fb7c4SAndroid Build Coastguard Worker        self.lstMoveMbt = []
928*f81fb7c4SAndroid Build Coastguard Worker        self.lstMoveItems = []
929*f81fb7c4SAndroid Build Coastguard Worker
930*f81fb7c4SAndroid Build Coastguard Worker        self.SetSize(JetDefs.REPLICATE_SIZE)
931*f81fb7c4SAndroid Build Coastguard Worker        self.CenterOnParent()
932*f81fb7c4SAndroid Build Coastguard Worker
933*f81fb7c4SAndroid Build Coastguard Worker    def OnOk(self, event):
934*f81fb7c4SAndroid Build Coastguard Worker        self.EndModal(wx.ID_OK)
935*f81fb7c4SAndroid Build Coastguard Worker
936*f81fb7c4SAndroid Build Coastguard Worker    def GetValue(self, fld):
937*f81fb7c4SAndroid Build Coastguard Worker        return self.je.ctrls[fld].GetValue()
938*f81fb7c4SAndroid Build Coastguard Worker
939*f81fb7c4SAndroid Build Coastguard Worker    def SetValue(self, fld, val):
940*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[fld].SetValue(val)
941*f81fb7c4SAndroid Build Coastguard Worker
942*f81fb7c4SAndroid Build Coastguard Worker    def OnPreview(self, event):
943*f81fb7c4SAndroid Build Coastguard Worker        increment = MbtVal((abs(self.je.ctrls[JetDefs.F_RPINCREMENT].GetMeasure()), abs(self.je.ctrls[JetDefs.F_RPINCREMENT].GetBeat()), abs(self.je.ctrls[JetDefs.F_RPINCREMENT].GetTick())))
944*f81fb7c4SAndroid Build Coastguard Worker        if self.je.ctrls[JetDefs.F_RPINCREMENT].GetMeasure() < 0 or self.je.ctrls[JetDefs.F_RPINCREMENT].GetBeat() < 0 or self.je.ctrls[JetDefs.F_RPINCREMENT].GetTick() < 0:
945*f81fb7c4SAndroid Build Coastguard Worker            increment = 0 - increment
946*f81fb7c4SAndroid Build Coastguard Worker        self.lstMove = []
947*f81fb7c4SAndroid Build Coastguard Worker        self.lstMoveMbt = []
948*f81fb7c4SAndroid Build Coastguard Worker        for itm in self.lstMoveItems:
949*f81fb7c4SAndroid Build Coastguard Worker            max = MbtVal(itm[3])
950*f81fb7c4SAndroid Build Coastguard Worker            evt_name = itm[0]
951*f81fb7c4SAndroid Build Coastguard Worker            start = MbtVal(itm[1])
952*f81fb7c4SAndroid Build Coastguard Worker            s_ticks = start + increment
953*f81fb7c4SAndroid Build Coastguard Worker
954*f81fb7c4SAndroid Build Coastguard Worker            s_mbt = TicksToMbt(s_ticks)
955*f81fb7c4SAndroid Build Coastguard Worker            evt_start =  "%d:%d:%d" % (s_mbt[0]+1, s_mbt[1]+1, s_mbt[2])
956*f81fb7c4SAndroid Build Coastguard Worker            evt_start_save = "%d:%d:%d" % s_mbt
957*f81fb7c4SAndroid Build Coastguard Worker
958*f81fb7c4SAndroid Build Coastguard Worker            end = MbtVal(itm[2])
959*f81fb7c4SAndroid Build Coastguard Worker            e_ticks = end + increment
960*f81fb7c4SAndroid Build Coastguard Worker            e_mbt = TicksToMbt(e_ticks)
961*f81fb7c4SAndroid Build Coastguard Worker            evt_end = "%d:%d:%d" % (e_mbt[0]+1, e_mbt[1]+1, e_mbt[2])
962*f81fb7c4SAndroid Build Coastguard Worker            evt_end_save = "%d:%d:%d" % e_mbt
963*f81fb7c4SAndroid Build Coastguard Worker
964*f81fb7c4SAndroid Build Coastguard Worker            if s_ticks <= max and e_ticks <= max and s_ticks >= 0 and e_ticks >= 0:
965*f81fb7c4SAndroid Build Coastguard Worker                self.lstMove.append((evt_name, evt_start, evt_end))
966*f81fb7c4SAndroid Build Coastguard Worker                self.lstMoveMbt.append((evt_name, evt_start_save, evt_end_save))
967*f81fb7c4SAndroid Build Coastguard Worker
968*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_RPGRDPREVIEW].DeleteAllItems()
969*f81fb7c4SAndroid Build Coastguard Worker        self.je.ctrls[JetDefs.F_RPGRDPREVIEW].AddRows(self.lstMove)
970*f81fb7c4SAndroid Build Coastguard Worker
971*f81fb7c4SAndroid Build Coastguard Workerif __name__ == '__main1__':
972*f81fb7c4SAndroid Build Coastguard Worker    """ Test dialogs """
973*f81fb7c4SAndroid Build Coastguard Worker    app = wx.PySimpleApp()
974*f81fb7c4SAndroid Build Coastguard Worker
975*f81fb7c4SAndroid Build Coastguard Worker    #dlg = JetOpen()
976*f81fb7c4SAndroid Build Coastguard Worker    #dlg = JetPropertiesDialog()
977*f81fb7c4SAndroid Build Coastguard Worker    #dlg = ExportDialog("Export Jet File")
978*f81fb7c4SAndroid Build Coastguard Worker    #dlg = JetAbout()
979*f81fb7c4SAndroid Build Coastguard Worker
980*f81fb7c4SAndroid Build Coastguard Worker    dlg = JetReplicate("Replicate Event")
981*f81fb7c4SAndroid Build Coastguard Worker    dlg.SetValue(JetDefs.F_RPREPLACE, True)
982*f81fb7c4SAndroid Build Coastguard Worker    dlg.event_max = "5:0:0"
983*f81fb7c4SAndroid Build Coastguard Worker    dlg.event_type = JetDefs.E_APP
984*f81fb7c4SAndroid Build Coastguard Worker    dlg.length = 480
985*f81fb7c4SAndroid Build Coastguard Worker    dlg.SetName("abc 02")
986*f81fb7c4SAndroid Build Coastguard Worker    result = dlg.ShowModal()
987*f81fb7c4SAndroid Build Coastguard Worker    if result == wx.ID_OK:
988*f81fb7c4SAndroid Build Coastguard Worker        print("OK")
989*f81fb7c4SAndroid Build Coastguard Worker
990*f81fb7c4SAndroid Build Coastguard Worker    dlg.Destroy()
991*f81fb7c4SAndroid Build Coastguard Worker
992*f81fb7c4SAndroid Build Coastguard Workerif __name__ == '__main1__':
993*f81fb7c4SAndroid Build Coastguard Worker    """ Test Segment dialog """
994*f81fb7c4SAndroid Build Coastguard Worker    app = wx.PySimpleApp()
995*f81fb7c4SAndroid Build Coastguard Worker
996*f81fb7c4SAndroid Build Coastguard Worker    helpProvider = wx.SimpleHelpProvider()
997*f81fb7c4SAndroid Build Coastguard Worker    wx.HelpProvider_Set(helpProvider)
998*f81fb7c4SAndroid Build Coastguard Worker
999*f81fb7c4SAndroid Build Coastguard Worker    dlg = SegEdit("Segments", JetDefs.UNTITLED_FILE)
1000*f81fb7c4SAndroid Build Coastguard Worker    dlg.SetValue(JetDefs.F_SEGNAME, "Test Segment Name")
1001*f81fb7c4SAndroid Build Coastguard Worker    dlg.SetValue(JetDefs.F_MIDIFILE, '/Users/BHruska/JetContent/jenn_Burning Line.mid')
1002*f81fb7c4SAndroid Build Coastguard Worker    dlg.SetValue(JetDefs.F_MIDIFILE, 'C:/_Data/JetCreator/JetDemo1/jenn_Burning Line.mid')
1003*f81fb7c4SAndroid Build Coastguard Worker    dlg.SetValue(JetDefs.F_DLSFILE, '')
1004*f81fb7c4SAndroid Build Coastguard Worker    dlg.SetValue(JetDefs.F_START, '4:0:0')
1005*f81fb7c4SAndroid Build Coastguard Worker    dlg.SetValue(JetDefs.F_END, '8:0:0')
1006*f81fb7c4SAndroid Build Coastguard Worker    dlg.SetValue(JetDefs.F_QUANTIZE, 6)
1007*f81fb7c4SAndroid Build Coastguard Worker
1008*f81fb7c4SAndroid Build Coastguard Worker    result = dlg.ShowModal()
1009*f81fb7c4SAndroid Build Coastguard Worker    dlg.Destroy()
1010*f81fb7c4SAndroid Build Coastguard Worker
1011*f81fb7c4SAndroid Build Coastguard Workerif __name__ == '__main__':
1012*f81fb7c4SAndroid Build Coastguard Worker    """ Test Event dialog """
1013*f81fb7c4SAndroid Build Coastguard Worker    app = wx.PySimpleApp()
1014*f81fb7c4SAndroid Build Coastguard Worker
1015*f81fb7c4SAndroid Build Coastguard Worker    jetevents = []
1016*f81fb7c4SAndroid Build Coastguard Worker
1017*f81fb7c4SAndroid Build Coastguard Worker    segment = JetSegment("Test Segment Name", 'C:/_Data/JetCreator/JetDemo1/jenn_Burning Line.mid',
1018*f81fb7c4SAndroid Build Coastguard Worker                            '0:0:0', '4:0:0', None,
1019*f81fb7c4SAndroid Build Coastguard Worker                            "Test Segment Name", 6, jetevents,
1020*f81fb7c4SAndroid Build Coastguard Worker                            '', None, 0,0,3)
1021*f81fb7c4SAndroid Build Coastguard Worker
1022*f81fb7c4SAndroid Build Coastguard Worker    dlg = EventEdit("Event Edit", JetDefs.UNTITLED_FILE)
1023*f81fb7c4SAndroid Build Coastguard Worker    dlg.SetValue(JetDefs.F_ENAME, "Test Event Name")
1024*f81fb7c4SAndroid Build Coastguard Worker    dlg.SetValue(JetDefs.F_ETYPE, "TriggerClip")
1025*f81fb7c4SAndroid Build Coastguard Worker    dlg.SetSegment(segment)
1026*f81fb7c4SAndroid Build Coastguard Worker
1027*f81fb7c4SAndroid Build Coastguard Worker    result = dlg.ShowModal()
1028*f81fb7c4SAndroid Build Coastguard Worker    dlg.Destroy()
1029*f81fb7c4SAndroid Build Coastguard Worker
1030*f81fb7c4SAndroid Build Coastguard Worker
1031*f81fb7c4SAndroid Build Coastguard Worker
1032