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