16b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi"""
26b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi File:
36b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi JetDialogs.py
46b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
56b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi Contents and purpose:
66b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi Dialog boxes used in JetCreator
76b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
86b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi Copyright (c) 2008 Android Open Source Project
96b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
106b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi Licensed under the Apache License, Version 2.0 (the "License");
116b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi you may not use this file except in compliance with the License.
126b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi You may obtain a copy of the License at
136b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
146b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi      http://www.apache.org/licenses/LICENSE-2.0
156b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
166b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi Unless required by applicable law or agreed to in writing, software
176b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi distributed under the License is distributed on an "AS IS" BASIS,
186b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
196b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi See the License for the specific language governing permissions and
206b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi limitations under the License.
216b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi"""
226b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
236b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviimport wx
246b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviimport thread
256b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviimport wx.lib.newevent
266b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
276b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivifrom JetDefs import *
286b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivifrom JetCtrls import *
296b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivifrom JetFile import *
306b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivifrom JetUtils import *
316b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivifrom JetPreview import *
326b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivifrom JetSegGraph import *
336b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivifrom eas import *
346b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivifrom JetStatusEvent import *
356b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
366b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel TriviPLAY_SEGMENT = 1
376b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel TriviPLAY_MIDI = 2
386b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
396b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviclass JetEdit():
406b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    """ Class used to build dialog box controls from the definitions in JetDefs """
416b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def __init__(self, panel, ctrlList, callbackClass):
426b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        LBL_OFFSET = 15
436b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
446b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        ctrls = getattr(JetDefs, ctrlList)
456b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.ctrls = {}
466b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        for Lbl, Text, Row, Col, Len, Min, Max, Id, Lst, Fct, Enabled, HelpText in ctrls:
476b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            try:
486b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                iDisplayLbl = True
496b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                if Text[0:3] == "btn":
506b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    self.ctrls[Text] = wx.Button(panel, Id, Lbl, wx.Point(Col, Row), size=Len)
516b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    if Fct > "":
526b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text].Bind(wx.EVT_BUTTON, getattr(callbackClass, Fct), self.ctrls[Text], id=Id)
536b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    if Id == wx.ID_OK:
546b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text].SetDefault()
556b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    iDisplayLbl = False
566b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                else:
576b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    if Text[0:3] == "txt":
586b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text] = wx.TextCtrl(panel, Id, "", wx.Point(Col, Row + LBL_OFFSET +3), wx.Size(Len,-1))
596b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    elif Text[0:4] == "spn1":
606b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text] = JetSpinOneBased(panel, Id, "", wx.Point(Col, Row + LBL_OFFSET), wx.Size(Len,-1), min=Min, max=Max)
616b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    elif Text[0:3] == "spn":
626b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text] = JetSpin(panel, Id, "", wx.Point(Col, Row + LBL_OFFSET), wx.Size(Len,-1), min=Min, max=Max)
636b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    elif Text[0:3] == "cmb":
646b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text] = wx.ComboBox(panel, Id, "", wx.Point(Col, Row + LBL_OFFSET), wx.Size(Len,-1), Lst, wx.CB_DROPDOWN | wx.CB_READONLY )
656b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text].SetValue(Lst[0])
666b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        if Fct > "":
676b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                            self.ctrls[Text].Bind(wx.EVT_COMBOBOX, getattr(callbackClass, Fct), self.ctrls[Text])
686b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    elif Text[0:2] == "tm":
696b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text] = TimeCtrl(panel, pos=(Col, Row + LBL_OFFSET), ctlName=Text)
706b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    elif Text[0:7] == "filecmb":
716b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text] = JetFileCombo(panel, pos=(Col, Row + LBL_OFFSET), size=wx.Size(Len,-1), title=Lbl, spec=Lst, id=Id)
726b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    elif Text[0:7] == "filetxt":
736b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text] = JetFileText(panel, pos=(Col, Row + LBL_OFFSET), size=wx.Size(Len,-1), title=Lbl, spec=Lst, id=Id)
746b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    elif Text[0:2] == "fr":
756b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text] = wx.StaticBox(parent=panel, id=wx.ID_ANY, label=Lbl, pos=(Row, Col), size=Len)
766b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        iDisplayLbl = False
776b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    elif Text[0:3] == "chk":
786b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text] = JetCheckBox(panel, Id, label=Lbl, pos=(Col, Row), size=wx.Size(Len,-1))
796b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        iDisplayLbl = False
806b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        if Fct > "":
816b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                            self.ctrls[Text].Bind(wx.EVT_CHECKBOX , getattr(callbackClass, Fct), self.ctrls[Text])
826b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    elif Text[0:6] == "rdobox":
836b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text] = wx.RadioBox(panel, Id, label=Lbl, pos=(Col, Row), size=Len, choices=Lst, majorDimension=1, style=wx.RA_SPECIFY_COLS)
846b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        iDisplayLbl = False
856b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        if Fct > "":
866b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                            self.ctrls[Text].Bind(wx.EVT_RADIOBOX , getattr(callbackClass, Fct), self.ctrls[Text])
876b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    elif Text[0:3] == "opt":
886b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text] = JetRadioButton(panel, Id, label=Lbl, pos=(Col, Row), size=wx.Size(Len,-1))
896b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        iDisplayLbl = False
906b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text].SetValue(Lst)
916b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        if Fct > "":
926b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                            self.ctrls[Text].Bind(wx.EVT_RADIOBUTTON , getattr(callbackClass, Fct), self.ctrls[Text])
936b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    elif Text[0:3] == "lst":
946b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text] = wx.ListBox(panel, Id, pos=(Col, Row), size=Len)
956b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        iDisplayLbl = False
966b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    elif Text[0:4] == "grd2":
976b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text] = JetTrackCtrl(panel, Id, pos=(Col, Row + LBL_OFFSET), size=Len, style=wx.LC_REPORT | wx.SUNKEN_BORDER)
986b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        iDisplayLbl = True
996b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    elif Text[0:3] == "grd":
1006b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text] = JetListCtrl(panel, Id, pos=(Col, Row), size=Len)
1016b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        iDisplayLbl = False
1026b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    elif Text[0:5] == "graph":
1036b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text] = SegmentGraph(panel, pos=(Col, Row), size=Len)
1046b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        iDisplayLbl = False
1056b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    elif Text[0:3] == "hlp":
1066b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text] = wx.ContextHelpButton(panel, Id, pos=(Col, Row))
1076b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        iDisplayLbl = False
1086b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    elif Text[0:3] == "lbl":
1096b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text] = wx.StaticText(panel, Id, Lbl, wx.Point(Col, Row), size=wx.Size(Len[0],Len[1]))
1106b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        iDisplayLbl = False
1116b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    elif Text[0:3] == "box":
1126b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        self.ctrls[Text] = wx.StaticBox(panel, wx.ID_ANY, Lbl, pos=(Col, Row), size=Len)
1136b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        iDisplayLbl = False
1146b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
1156b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                if iDisplayLbl:
1166b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    self.ctrls[Lbl] = wx.StaticText(panel, Id, Lbl, wx.Point(Col, Row))
1176b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                if not Enabled:
1186b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    self.ctrls[Text].Enable(False)
1196b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
1206b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                helpText = IniGetValue(JetDefs.JETCREATOR_HLP, ctrlList, Lbl)
1216b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                if helpText > "":
1226b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    self.ctrls[Text].SetHelpText(helpText)
1236b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
1246b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            #except AttributeError:
1256b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                #No stub function for testing
1266b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                #print("def " + Fct + "(self, event): pass")
1276b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            except:
1286b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                raise
1296b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
1306b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def GetValue(self, fld):
1316b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Gets the value of a control """
1326b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        return self.ctrls[fld].GetValue()
1336b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
1346b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def SetValue(self, fld, val):
1356b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Sets the value of a control """
1366b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.ctrls[fld].SetValue(val)
1376b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
1386b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviclass JetOpen(wx.Dialog):
1396b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    """ Opens a jet definition file """
1406b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def __init__(self):
1416b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        wx.Dialog.__init__(self, None, -1, JetDefs.DLG_JETOPEN)
1426b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.fileName = ""
1436b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je = JetEdit(self, "JETOPEN_CTRLS", self)
1446b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        fileList = GetRecentJetFiles()
1456b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_JLIST].AppendItems(fileList)
1466b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if len(fileList) > 0:
1476b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_JFILE].SetValue(fileList[0])
1486b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.Bind(wx.EVT_LISTBOX_DCLICK, self.OnOpen)
1496b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.Bind(wx.EVT_LISTBOX, self.OnClick)
1506b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.SetSize(JetDefs.JETOPEN_SIZE)
1516b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.CenterOnParent()
1526b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
1536b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnJetImport(self, event):
1546b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Exit the dialog with flag to import """
1556b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.EndModal(JetDefs.ID_JET_IMPORT)
1566b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
1576b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnClick(self, event):
1586b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Clicking on item in listbox """
1596b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        sValue = self.je.ctrls[JetDefs.F_JLIST].GetString(self.je.ctrls[JetDefs.F_JLIST].GetSelection())
1606b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_JFILE].SetValue(sValue)
1616b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
1626b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnOpen(self, event):
1636b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Double clicking on item in listbox """
1646b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        sValue = self.je.ctrls[JetDefs.F_JLIST].GetString(self.je.ctrls[JetDefs.F_JLIST].GetSelection())
1656b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_JFILE].SetValue(sValue)
1666b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.Validate():
1676b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.fileName = self.je.ctrls[JetDefs.F_JFILE].GetValue()
1686b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            AppendRecentJetFile(self.fileName)
1696b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.EndModal(JetDefs.ID_JET_OPEN)
1706b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
1716b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnOk(self, event):
1726b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Clicking the ok button """
1736b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.Validate():
1746b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.fileName = self.je.ctrls[JetDefs.F_JFILE].GetValue()
1756b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            AppendRecentJetFile(self.fileName)
1766b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.EndModal(JetDefs.ID_JET_OPEN)
1776b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
1786b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnNew(self, event):
1796b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Exit the dialog with flag to create new blank jet file """
1806b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.EndModal(JetDefs.ID_JET_NEW)
1816b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
1826b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def Validate(self):
1836b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Validates the filename """
1846b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if len(self.je.ctrls[JetDefs.F_JFILE].GetValue()) == 0:
1856b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            InfoMsg("Jet Filename", "The Jet filename is blank.")
1866b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_JFILE].SetFocus()
1876b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            return False
1886b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if not FileExists(self.je.ctrls[JetDefs.F_JFILE].GetValue()):
1896b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            InfoMsg("MIDI File", "The file does not exist.")
1906b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_JFILE].SetFocus()
1916b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            return False
1926b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        return True
1936b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
1946b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviclass JetPreferences(wx.Dialog):
1956b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    """ Preferences dialog box """
1966b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def __init__(self):
1976b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        wx.Dialog.__init__(self, None, -1, JetDefs.DLG_PREFERENCES)
1986b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
1996b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je = JetEdit(self, "PREFERENCES_CTRLS", self)
2006b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.SetSize(JetDefs.PREFERENCES_SIZE)
2016b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.CenterOnParent()
2026b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
2036b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnOk(self, event):
2046b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.EndModal(wx.ID_OK)
2056b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
2066b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def GetValue(self, fld):
2076b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        return self.je.ctrls[fld].GetValue()
2086b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
2096b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def SetValue(self, fld, val):
2106b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[fld].SetValue(val)
2116b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
2126b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
2136b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviclass JetAbout(wx.Dialog):
2146b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    """ About dialog box """
2156b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def __init__(self):
2166b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        wx.Dialog.__init__(self, None, -1, JetDefs.DLG_ABOUT)
2176b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        img = __import__('img_splash')
2186b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        bmp = img.getBitmap()
2196b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        b = wx.StaticBitmap(self, -1, bmp)
2206b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.SetSize((bmp.GetWidth(), bmp.GetHeight()))
2216b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.CenterOnParent()
2226b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        s = __import__('sys')
2236b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        print(s.platform)
2246b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
2256b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnOk(self, event):
2266b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.EndModal(wx.ID_OK)
2276b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
2286b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def GetValue(self, fld):
2296b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        return self.je.ctrls[fld].GetValue()
2306b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
2316b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def SetValue(self, fld, val):
2326b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[fld].SetValue(val)
2336b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
2346b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
2356b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviclass JetPropertiesDialog(wx.Dialog):
2366b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    """ Properties dialog box """
2376b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def __init__(self):
2386b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        wx.Dialog.__init__(self, None, -1, JetDefs.DLG_PROPERTIES)
2396b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
2406b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je = JetEdit(self, "JET_PROPERTIES_CTRLS", self)
2416b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.SetSize(JetDefs.JET_PROPERTIES_SIZE)
2426b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.CenterOnParent()
2436b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
2446b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnOk(self, event):
2456b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.EndModal(wx.ID_OK)
2466b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
2476b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def GetValue(self, fld):
2486b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        return self.je.ctrls[fld].GetValue()
2496b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
2506b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def SetValue(self, fld, val):
2516b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[fld].SetValue(val)
2526b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
2536b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
2546b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviclass JetErrors(wx.Dialog):
2556b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    """ Errors dialog box """
2566b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def __init__(self, title):
2576b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        wx.Dialog.__init__(self, None, -1, title)
2586b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je = JetEdit(self, "ERRORDLG", self)
2596b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.SetSize(JetDefs.ERRORDLG_SIZE)
2606b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.CenterOnParent()
2616b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
2626b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnOk(self, event):
2636b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.EndModal(wx.ID_OK)
2646b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
2656b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def SetErrors(self, errors):
2666b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_ERRGRID].AddCol("Error", JetDefs.ERRORCOLW)
2676b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_ERRGRID].AddCol("Description", JetDefs.ERRORCOLW)
2686b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_ERRGRID].AddRows(errors)
2696b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
2706b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
2716b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviclass SegEdit(wx.Dialog):
2726b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    """ Dialog box to edit segments """
2736b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def __init__(self, title, currentJetConfigFile):
2746b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        wx.Dialog.__init__(self, None, -1, title)
2756b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
2766b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.currentJetConfigFile = currentJetConfigFile
2776b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je = JetEdit(self, "SEGDLG_CTRLS", self)
2786b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_MIDIFILE].cmb.Bind(wx.EVT_KILL_FOCUS, self.OnMidiChanged)
2796b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_MIDIFILE].cmb.Bind(wx.EVT_COMBOBOX, self.OnMidiChanged)
2806b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_MIDIFILE].SetEventFire(True)
2816b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_MUTEFLAGS].AddCol(JetDefs.GRD_TRACK, JetDefs.MUTEGRD_TRACK)
2826b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_MUTEFLAGS].AddCol(JetDefs.GRD_CHANNEL, JetDefs.MUTEGRD_CHANNEL)
2836b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_MUTEFLAGS].AddCol(JetDefs.GRD_NAME, JetDefs.MUTEGRD_NAME)
2846b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_MUTEFLAGS].BindCheckBox(self.OnEventChecked)
2856b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_START].SetChangeCallbackFct(self.UpdateGraph)
2866b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_END].SetChangeCallbackFct(self.UpdateGraph)
2876b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_DISPEMPTYTRACKS].SetValue(IniGetValue(self.currentJetConfigFile, JetDefs.F_DISPEMPTYTRACKS, JetDefs.F_DISPEMPTYTRACKS, 'bool', 'False'))
2886b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_GRAPHLABELS].SetValue(IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHLABELS, JetDefs.F_GRAPHLABELS, 'bool', 'True'))
2896b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_GRAPHCLIPS].SetValue(IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHCLIPS, JetDefs.F_GRAPHCLIPS, 'bool', 'True'))
2906b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_GRAPHAPPEVTS].SetValue(IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHAPPEVTS, JetDefs.F_GRAPHAPPEVTS, 'bool', 'True'))
2916b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.replicatePrefix = ""
2926b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.lstReplicate = []
2936b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.chkReplaceMatching = False
2946b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
2956b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        EVT_JET_STATUS(self, self.OnJetStatusUpdate)
2966b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        wx.EVT_CLOSE(self, self.OnClose)
2976b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
2986b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.Player = None
2996b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.segment = None
3006b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.graphSegment = None
3016b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.jetevents = []
3026b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.lastMidiFile = ""
3036b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.lastMidiInfo = None
3046b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.playMode = PLAY_SEGMENT
3056b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.graphMode = PLAY_MIDI
3066b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.SetSize(JetDefs.SEGDLG_SIZE)
3076b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.CenterOnParent()
3086b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
3096b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnClose(self, event):
3106b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Closing the dialog box """
3116b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.ShutdownPlayer()
3126b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_START].UnBindKillFocus()
3136b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_END].UnBindKillFocus()
3146b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.EndModal(wx.ID_CANCEL)
3156b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
3166b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def ShutdownPlayer(self):
3176b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Shutdown player flag """
3186b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.Player is not None:
3196b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.Player.SetKeepPlayingFlag(False)
3206b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
3216b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnMidiChanged(self, event):
3226b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ When new midi file selected, get its info """
3236b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.UpdateMaxMbt()
3246b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        event.Skip()
3256b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
3266b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def UpdateMaxMbt(self):
3276b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Get midi info in thread so UI smoother """
3286b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        thread.start_new_thread(self.UpdateMaxMbtThread, ())
3296b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
3306b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def UpdateMaxMbtThread(self):
3316b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Thread to get midi file info """
3326b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.je.ctrls[JetDefs.F_MIDIFILE].GetValue() == self.lastMidiFile:
3336b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            return
3346b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.lastMidiFile = self.je.ctrls[JetDefs.F_MIDIFILE].GetValue()
3356b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.lastMidiInfo = GetMidiInfo(self.je.ctrls[JetDefs.F_MIDIFILE].GetValue())
3366b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        wx.PostEvent(self, JetStatusEvent(JetDefs.PST_MIDI_INFO, self.lastMidiInfo))
3376b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
3386b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def GetValue(self, fld):
3396b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Gets a control value """
3406b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        return self.je.ctrls[fld].GetValue()
3416b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
3426b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def SetValue(self, fld, val):
3436b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Sets a control value """
3446b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[fld].SetValue(val)
3456b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.je.ctrls[fld] == self.je.ctrls[JetDefs.F_MIDIFILE]:
3466b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.UpdateMaxMbt()
3476b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
3486b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnOk(self, event):
3496b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Exits dialog box """
3506b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.ShutdownPlayer()
3516b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.Validate():
3526b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_START].UnBindKillFocus()
3536b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_END].UnBindKillFocus()
3546b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.EndModal(wx.ID_OK)
3556b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
3566b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def Validate(self):
3576b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Validates the control values before exiting """
3586b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if not CompareMbt(self.je.ctrls[JetDefs.F_START].GetValue(), self.je.ctrls[JetDefs.F_END].GetValue()):
3596b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            InfoMsg("Start/End", "The segment starting and ending times are illogical.")
3606b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_START].SetFocus()
3616b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            return False
3626b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if len(self.je.ctrls[JetDefs.F_SEGNAME].GetValue()) == 0:
3636b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            InfoMsg("Segment Name", "The segment must have a name.")
3646b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_SEGNAME].SetFocus()
3656b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            return False
3666b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if len(self.je.ctrls[JetDefs.F_MIDIFILE].GetValue()) == 0:
3676b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            InfoMsg("MIDI File", "The segment must have a midi file selected.")
3686b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_MIDIFILE].SetFocus()
3696b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            return False
3706b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if not FileExists(self.je.ctrls[JetDefs.F_MIDIFILE].GetValue()):
3716b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            InfoMsg("MIDI File", "The MIDI file does not exist.")
3726b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_MIDIFILE].SetFocus()
3736b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            return False
3746b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if len(self.je.ctrls[JetDefs.F_DLSFILE].GetValue()) > 0:
3756b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            if not FileExists(self.je.ctrls[JetDefs.F_DLSFILE].GetValue()):
3766b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                InfoMsg("DLS File", "The DLS file does not exist.")
3776b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_DLSFILE].SetFocus()
3786b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                return False
3796b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_MUTEFLAGS].SetValue(ComputeMuteFlagsFromList(self.je.ctrls[JetDefs.F_MUTEFLAGS]))
3806b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        return True
3816b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
3826b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def SetSegment(self, mode):
3836b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Builds the segment info for graphing """
3846b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if mode == PLAY_SEGMENT:
3856b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            jetevents = self.jetevents
3866b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            segment = JetSegment(self.GetValue(JetDefs.F_SEGNAME),
3876b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 self.GetValue(JetDefs.F_MIDIFILE),
3886b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 self.GetValue(JetDefs.F_START),
3896b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 self.GetValue(JetDefs.F_END),
3906b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 JetDefs.MBT_ZEROSTR,
3916b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 self.GetValue(JetDefs.F_SEGNAME),
3926b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 self.GetValue(JetDefs.F_QUANTIZE),
3936b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 jetevents,
3946b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 self.GetValue(JetDefs.F_DLSFILE),
3956b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 None,
3966b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 self.GetValue(JetDefs.F_TRANSPOSE),
3976b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 self.GetValue(JetDefs.F_REPEAT),
3986b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 self.GetValue(JetDefs.F_MUTEFLAGS))
3996b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        else:
4006b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            jetevents = []
4016b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            segment = JetSegment(self.GetValue(JetDefs.F_SEGNAME),
4026b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 self.GetValue(JetDefs.F_MIDIFILE),
4036b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 JetDefs.MBT_ZEROSTR,
4046b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 self.lastMidiInfo.endMbtStr,
4056b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 JetDefs.MBT_ZEROSTR,
4066b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 self.GetValue(JetDefs.F_SEGNAME),
4076b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 self.GetValue(JetDefs.F_QUANTIZE),
4086b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 jetevents,
4096b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 self.GetValue(JetDefs.F_DLSFILE),
4106b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 None,
4116b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 0,
4126b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 0,
4136b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                 0)
4146b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        return segment
4156b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
4166b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnEventChecked(self, index, checked):
4176b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Track is checked so mute or unmute it """
4186b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.Player is not None:
4196b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            trackNum = self.je.ctrls[JetDefs.F_MUTEFLAGS].GetTrackNumber(index)
4206b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.Player.SetMuteFlag(trackNum, checked)
4216b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
4226b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnPlay(self, event):
4236b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Play the segment button pressed """
4246b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.je.ctrls[JetDefs.F_PLAY].GetLabel() == JetDefs.BUT_STOP:
4256b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.Player.SetKeepPlayingFlag(False)
4266b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            return
4276b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
4286b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if not self.Validate():
4296b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            return
4306b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
4316b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.playMode = PLAY_SEGMENT
4326b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.graphSegment = self.SetSegment(self.graphMode)
4336b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.UpdateGraph()
4346b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.Player = PreviewPlayer(self.je.ctrls[JetDefs.F_PLAY], self.SetSegment(self.playMode))
4356b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.Player.SetGraphCtrl(self.je.ctrls[JetDefs.F_GRAPH], self)
4366b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.PlayerThread = thread.start_new_thread(self.Player .Start, ())
4376b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
4386b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnPlayMidi(self, event):
4396b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Play the whole midi file pressed """
4406b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.je.ctrls[JetDefs.F_PLAYMIDI].GetLabel() == JetDefs.BUT_STOP:
4416b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.Player.SetKeepPlayingFlag(False)
4426b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            return
4436b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
4446b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if not self.Validate():
4456b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            return
4466b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
4476b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.playMode = PLAY_MIDI
4486b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.graphSegment = self.SetSegment(self.graphMode)
4496b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.UpdateGraph()
4506b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.Player = PreviewPlayer(self.je.ctrls[JetDefs.F_PLAYMIDI], self.SetSegment(self.playMode))
4516b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.Player.SetGraphCtrl(self.je.ctrls[JetDefs.F_GRAPH], self)
4526b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.PlayerThread = thread.start_new_thread(self.Player .Start, ())
4536b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
4546b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnSetGraphType(self, event):
4556b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Sets the type of graph """
4566b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.SetGraphType(event.GetInt())
4576b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
4586b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def SetGraphType(self, iMode):
4596b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Sets the type of graph """
4606b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if iMode == 1:
4616b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.graphMode = PLAY_SEGMENT
4626b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        else:
4636b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.graphMode = PLAY_MIDI
4646b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.graphSegment = self.SetSegment(self.graphMode)
4656b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.UpdateGraph()
4666b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
4676b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnGraphUpdate(self, evt):
4686b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Calls graph control to draw """
4696b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_GRAPH].DoDrawing()
4706b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
4716b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def UpdateGraph(self):
4726b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Updates values for graph control """
4736b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.graphMode == PLAY_SEGMENT:
4746b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            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'))
4756b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        else:
4766b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            if self.playMode == PLAY_SEGMENT:
4776b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                iMidiMode = True
4786b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            else:
4796b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                iMidiMode = False
4806b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            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'))
4816b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
4826b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnJetStatusUpdate(self, evt):
4836b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ All UI needed by thread must be called via Postevent or OS X crashes """
4846b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if evt.mode == JetDefs.PST_UPD_LOCATION:
4856b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_GRAPH].UpdateLocation(evt.data)
4866b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        elif evt.mode == JetDefs.PST_PLAY:
4876b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            if self.playMode == PLAY_SEGMENT:
4886b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_PLAY].SetLabel(JetDefs.BUT_STOP)
4896b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_PLAYMIDI].Enabled = False
4906b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            else:
4916b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_RDOGRAPH].Enabled = False
4926b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_PLAYMIDI].SetLabel(JetDefs.BUT_STOP)
4936b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_PLAY].Enabled = False
4946b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
4956b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_PAUSE].Enabled = True
4966b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_PAUSE].SetLabel(JetDefs.BUT_PAUSE)
4976b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        elif evt.mode == JetDefs.PST_DONE:
4986b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_RDOGRAPH].Enabled = True
4996b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            if self.playMode == PLAY_SEGMENT:
5006b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_PLAY].SetLabel(JetDefs.BUT_PLAYSEG)
5016b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_PLAYMIDI].Enabled = True
5026b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            else:
5036b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_PLAYMIDI].SetLabel(JetDefs.BUT_PLAYMIDI)
5046b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_PLAY].Enabled = True
5056b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
5066b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_PAUSE].Enabled = False
5076b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_PAUSE].SetLabel(JetDefs.BUT_PAUSE)
5086b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        elif evt.mode == JetDefs.PST_PAUSE:
5096b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_PAUSE].SetLabel(JetDefs.BUT_RESUME)
5106b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        elif evt.mode == JetDefs.PST_RESUME:
5116b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_PAUSE].SetLabel(JetDefs.BUT_PAUSE)
5126b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        elif evt.mode == JetDefs.PST_MIDI_INFO:
5136b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            ClearRowSelections(self.je.ctrls[JetDefs.F_MUTEFLAGS])
5146b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.md = evt.data
5156b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            if self.md.err == 0:
5166b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_END].SetMaxMbt(self.md.maxMeasures+1,self.md.maxBeats,self.md.maxTicks)
5176b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                if self.je.ctrls[JetDefs.F_END].GetValue() == JetDefs.MBT_ZEROSTR:
5186b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    self.je.ctrls[JetDefs.F_END].SetValue((self.md.maxMeasures,0,0))
5196b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_START].SetMaxMbt(self.md.maxMeasures+1,self.md.maxBeats,self.md.maxTicks)
5206b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_MUTEFLAGS].DeleteAllItems()
5216b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                loadEmpty = IniGetValue(self.currentJetConfigFile, JetDefs.INI_DISPEMPTYTRACKS, JetDefs.INI_DISPEMPTYTRACKS, 'bool', 'False')
5226b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                for track in self.md.trackList:
5236b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    self.je.ctrls[JetDefs.F_MUTEFLAGS].AddTrackRow(track, loadEmpty)
5246b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_MUTEFLAGS].CheckTracks(self.je.ctrls[JetDefs.F_MUTEFLAGS].GetValue())
5256b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.graphSegment = self.SetSegment(self.graphMode)
5266b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.UpdateGraph()
5276b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
5286b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnSetTrackDisplayOption(self, evt):
5296b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        IniSetValue(self.currentJetConfigFile, JetDefs.INI_DISPEMPTYTRACKS, JetDefs.INI_DISPEMPTYTRACKS, self.je.ctrls[JetDefs.F_DISPEMPTYTRACKS].GetValue())
5306b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        loadEmpty = IniGetValue(self.currentJetConfigFile, JetDefs.INI_DISPEMPTYTRACKS, JetDefs.INI_DISPEMPTYTRACKS, 'bool', 'False')
5316b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.md is not None:
5326b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_MUTEFLAGS].DeleteAllItems()
5336b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            if self.md.err == 0:
5346b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                for track in self.md.trackList:
5356b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    self.je.ctrls[JetDefs.F_MUTEFLAGS].AddTrackRow(track, loadEmpty)
5366b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
5376b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnPause(self, evt):
5386b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Pauses the playback """
5396b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.Player.Pause()
5406b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
5416b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnSetGraphOptions(self, evt):
5426b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Sets graph options """
5436b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        IniSetValue(self.currentJetConfigFile, JetDefs.F_GRAPHLABELS, JetDefs.F_GRAPHLABELS, self.je.ctrls[JetDefs.F_GRAPHLABELS].GetValue())
5446b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        IniSetValue(self.currentJetConfigFile, JetDefs.F_GRAPHAPPEVTS, JetDefs.F_GRAPHAPPEVTS, self.je.ctrls[JetDefs.F_GRAPHAPPEVTS].GetValue())
5456b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        IniSetValue(self.currentJetConfigFile, JetDefs.F_GRAPHCLIPS, JetDefs.F_GRAPHCLIPS, self.je.ctrls[JetDefs.F_GRAPHCLIPS].GetValue())
5466b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.UpdateGraph()
5476b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
5486b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnReplicate(self, evt):
5496b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        dlg = JetReplicate("Replicate Segment")
5506b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        dlg.SetValue(JetDefs.F_RPREPLACE, True)
5516b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        dlg.SetName(self.GetValue(JetDefs.F_SEGNAME))
5526b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        dlg.event_type = "SEGMENT"
5536b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        dlg.event_max = self.je.ctrls[JetDefs.F_START].GetMaxMbt()
5546b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        dlg.length = MbtDifference(ConvertStrTimeToTuple(self.GetValue(JetDefs.F_START)), ConvertStrTimeToTuple(self.GetValue(JetDefs.F_END)))
5556b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        result = dlg.ShowModal()
5566b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if result == wx.ID_OK:
5576b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.replicatePrefix = dlg.GetValue(JetDefs.F_RPPREFIX)
5586b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.lstReplicate = dlg.lstReplicate
5596b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.chkReplaceMatching = dlg.GetValue(JetDefs.F_RPREPLACE)
5606b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.EndModal(wx.ID_OK)
5616b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        else:
5626b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            dlg.Destroy()
5636b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
5646b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviclass EventEdit(wx.Dialog):
5656b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    """ Event edit dialog box """
5666b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def __init__(self, title, currentJetConfigFile):
5676b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        wx.Dialog.__init__(self, None, -1, title)
5686b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
5696b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.title = title
5706b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.currentJetConfigFile = currentJetConfigFile
5716b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je = JetEdit(self, "EVTDLG_CTRLS", self)
5726b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_MUTEFLAGS].AddCol(JetDefs.GRD_TRACK, JetDefs.MUTEGRD_TRACK)
5736b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_MUTEFLAGS].AddCol(JetDefs.GRD_CHANNEL, JetDefs.MUTEGRD_CHANNEL)
5746b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_MUTEFLAGS].AddCol(JetDefs.GRD_NAME, JetDefs.MUTEGRD_NAME)
5756b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_ESTART].SetChangeCallbackFct(self.UpdateGraph)
5766b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_EEND].SetChangeCallbackFct(self.UpdateGraph)
5776b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_GRAPHLABELS].SetValue(IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHLABELS, JetDefs.F_GRAPHLABELS, 'bool', 'True'))
5786b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_GRAPHCLIPS].SetValue(IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHCLIPS, JetDefs.F_GRAPHCLIPS, 'bool', 'True'))
5796b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_GRAPHAPPEVTS].SetValue(IniGetValue(self.currentJetConfigFile, JetDefs.F_GRAPHAPPEVTS, JetDefs.F_GRAPHAPPEVTS, 'bool', 'True'))
5806b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        EVT_JET_STATUS(self, self.OnJetStatusUpdate)
5816b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.segment = None
5826b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.Player = None
5836b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.event_id = 1
5846b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.replicatePrefix = ""
5856b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.lstReplicate = []
5866b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.chkReplaceMatching = False
5876b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
5886b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        wx.EVT_CLOSE(self, self.OnClose)
5896b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.SetSize(JetDefs.EVTDLG_SIZE)
5906b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.CenterOnParent()
5916b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
5926b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnGraphUpdate(self, evt):
5936b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Calls the graph module to update the graph """
5946b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_GRAPH].DoDrawing()
5956b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
5966b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnJetStatusUpdate(self, evt):
5976b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Updates to UI needed by play thread come through here otherwise OS X crashes """
5986b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if evt.mode == JetDefs.PST_UPD_LOCATION:
5996b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_GRAPH].UpdateLocation(evt.data)
6006b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        elif evt.mode == JetDefs.PST_PLAY:
6016b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_PAUSE].SetLabel(JetDefs.BUT_PAUSE)
6026b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_PLAY].SetLabel(JetDefs.BUT_STOP)
6036b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_PAUSE].Enabled = True
6046b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_ETRIGGERBUT].Enabled = True
6056b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_EMUTEBUT].Enabled = True
6066b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        elif evt.mode == JetDefs.PST_DONE:
6076b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_EMUTEBUT].SetLabel(JetDefs.BUT_UNMUTE)
6086b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_PLAY].SetLabel(JetDefs.BUT_PLAY)
6096b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_PAUSE].Enabled = False
6106b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_PAUSE].SetLabel(JetDefs.BUT_PAUSE)
6116b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_ETRIGGERBUT].Enabled = False
6126b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_EMUTEBUT].Enabled = False
6136b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        elif evt.mode == JetDefs.PST_PAUSE:
6146b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_PAUSE].SetLabel(JetDefs.BUT_RESUME)
6156b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        elif evt.mode == JetDefs.PST_RESUME:
6166b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_PAUSE].SetLabel(JetDefs.BUT_PAUSE)
6176b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
6186b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnPause(self, evt):
6196b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Pause the player """
6206b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.Player.Pause()
6216b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
6226b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def UpdateGraph(self):
6236b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Called back from player thread to update the graph """
6246b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if len(self.segment.jetevents) == 0:
6256b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.segment.jetevents.append(JetEvent(self.je.ctrls[JetDefs.F_ENAME].GetValue(),
6266b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                                   self.je.ctrls[JetDefs.F_ETYPE].GetValue(),
6276b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                                   1,
6286b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                                   self.je.ctrls[JetDefs.F_ETRACK].GetValue(),
6296b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                                   self.je.ctrls[JetDefs.F_ECHANNEL].GetValue(),
6306b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                                   self.je.ctrls[JetDefs.F_ESTART].GetValue(),
6316b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                                   self.je.ctrls[JetDefs.F_EEND].GetValue()))
6326b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
6336b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.segment.jetevents[0].event_name = self.je.ctrls[JetDefs.F_ENAME].GetValue()
6346b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.segment.jetevents[0].event_type = self.je.ctrls[JetDefs.F_ETYPE].GetValue()
6356b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.segment.jetevents[0].event_start = self.je.ctrls[JetDefs.F_ESTART].GetValue()
6366b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.segment.jetevents[0].event_end = self.je.ctrls[JetDefs.F_EEND].GetValue()
6376b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        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'))
6386b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
6396b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnClose(self, event):
6406b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Called when dialog is closed """
6416b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.ShutdownPlayer()
6426b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_ESTART].UnBindKillFocus()
6436b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_EEND].UnBindKillFocus()
6446b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.EndModal(wx.ID_CANCEL)
6456b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
6466b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def ShutdownPlayer(self):
6476b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Sets flag to kill play loop """
6486b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.Player is not None:
6496b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.Player.SetKeepPlayingFlag(False)
6506b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
6516b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def GetValue(self, fld):
6526b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Gets the value of a control """
6536b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        return self.je.ctrls[fld].GetValue()
6546b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
6556b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def SetValue(self, fld, val):
6566b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Sets the value of a control """
6576b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[fld].SetValue(val)
6586b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
6596b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def SetEventId(self):
6606b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Sets the eventid value """
6616b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.title == JetDefs.MAIN_ADDEVENTTITLE:
6626b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            iNextEventId = -1
6636b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            for evt in self.segment.jetevents:
6646b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                if evt.event_type == JetDefs.E_CLIP:
6656b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                    if iNextEventId < evt.event_id:
6666b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                        iNextEventId = evt.event_id
6676b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_EEVENTID].SetValue(iNextEventId + 1)
6686b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
6696b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnEventSelect(self, event=None):
6706b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Adjusts the dialog box controls for various types of events """
6716b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        eType = self.je.ctrls[JetDefs.F_ETYPE].GetValue()
6726b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if eType == JetDefs.E_EOS:
6736b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_ENAME].SetValue(JetDefs.E_EOS)
6746b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_ENAME].Enable(False)
6756b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_ESTART].Enable(False)
6766b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_EEND].Enable(True)
6776b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_ETRIGGERBUT].Enable(False)
6786b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_EEVENTID].Enable(False)
6796b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        elif eType == JetDefs.E_CLIP:
6806b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            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:
6816b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_ENAME].SetValue(JetDefs.E_CLIP)
6826b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_ENAME].Enable(True)
6836b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_ESTART].Enable(True)
6846b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_EEND].Enable(True)
6856b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_ETRIGGERBUT].Enable(True)
6866b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_EEVENTID].Enable(True)
6876b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_EEVENTID].SetRange(JetDefs.EVENTID_MIN, JetDefs.EVENTID_MAX)
6886b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            if self.je.ctrls[JetDefs.F_EEVENTID].GetValue() < JetDefs.EVENTID_MIN:
6896b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_EEVENTID].SetValue(JetDefs.EVENTID_MIN)
6906b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            if self.je.ctrls[JetDefs.F_EEVENTID].GetValue() > JetDefs.EVENTID_MAX:
6916b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_EEVENTID].SetValue(JetDefs.EVENTID_MAX)
6926b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.SetEventId()
6936b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        elif eType == JetDefs.E_APP:
6946b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            if len(self.je.ctrls[JetDefs.F_ENAME].GetValue()) == 0 or self.je.ctrls[JetDefs.F_ENAME].GetValue() == JetDefs.E_EOS:
6956b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_ENAME].SetValue(JetDefs.E_APP)
6966b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_ENAME].Enable(True)
6976b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_ESTART].Enable(True)
6986b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_EEND].Enable(False)
6996b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_ETRIGGERBUT].Enable(False)
7006b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_EEVENTID].Enable(True)
7016b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_EEVENTID].SetRange(JetDefs.APPCONTROLLERID_MIN, JetDefs.APPCONTROLLERID_MAX)
7026b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            if self.je.ctrls[JetDefs.F_EEVENTID].GetValue() < JetDefs.APPCONTROLLERID_MIN:
7036b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_EEVENTID].SetValue(JetDefs.APPCONTROLLERID_MIN)
7046b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            if self.je.ctrls[JetDefs.F_EEVENTID].GetValue() > JetDefs.APPCONTROLLERID_MAX:
7056b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_EEVENTID].SetValue(JetDefs.APPCONTROLLERID_MAX)
7066b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
7076b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnOk(self, event):
7086b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Exits the dialog box """
7096b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.ShutdownPlayer()
7106b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.Validate():
7116b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_ESTART].UnBindKillFocus()
7126b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_EEND].UnBindKillFocus()
7136b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.EndModal(wx.ID_OK)
7146b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
7156b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def Validate(self):
7166b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Validates the control values prior to exiting """
7176b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if len(self.je.ctrls[JetDefs.F_ENAME].GetValue()) == 0:
7186b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            InfoMsg("Event Name", "The event must have a name.")
7196b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_ENAME].SetFocus()
7206b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            return False
7216b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if len(self.je.ctrls[JetDefs.F_ETYPE].GetValue()) == 0:
7226b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            InfoMsg("Event Name", "The event type must be selected.")
7236b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_ETYPE].SetFocus()
7246b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            return False
7256b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.je.ctrls[JetDefs.F_ETYPE].GetValue() == JetDefs.E_CLIP:
7266b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            if not CompareMbt(self.je.ctrls[JetDefs.F_ESTART].GetValue(), self.je.ctrls[JetDefs.F_EEND].GetValue()):
7276b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                InfoMsg("Start/End", "The event starting and ending times are illogical.")
7286b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_ESTART].SetFocus()
7296b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                return False
7306b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            if MbtVal(self.je.ctrls[JetDefs.F_ESTART].GetValue()) < MbtVal(self.je.ctrls[JetDefs.F_START].GetValue()):
7316b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                InfoMsg("Event Starting Time", "The event starting time is illogical.")
7326b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_ESTART].SetFocus()
7336b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                return False
7346b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            if MbtVal(self.je.ctrls[JetDefs.F_EEND].GetValue()) > MbtVal(self.je.ctrls[JetDefs.F_END].GetValue()):
7356b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                InfoMsg("Event Ending Time", "The event ending time is illogical.")
7366b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_ESTART].SetFocus()
7376b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                return False
7386b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.je.ctrls[JetDefs.F_ETYPE].GetValue() == JetDefs.E_APP:
7396b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_EEND].SetValue(self.je.ctrls[JetDefs.F_ESTART].GetValue())
7406b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.je.ctrls[JetDefs.F_ETYPE].GetValue() == JetDefs.E_EOS:
7416b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_ESTART].SetValue(self.je.ctrls[JetDefs.F_EEND].GetValue())
7426b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        return True
7436b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
7446b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def SetSegment(self, segment):
7456b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Sets the segment values, then calls the graph update """
7466b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.segment = segment
7476b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        md = GetMidiInfo(segment.filename)
7486b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if md.err == 0:
7496b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.SetValue(JetDefs.F_SEGNAME, segment.segname)
7506b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.SetValue(JetDefs.F_MUTEFLAGS, segment.mute_flags)
7516b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.SetValue(JetDefs.F_MIDIFILE, segment.filename)
7526b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.SetValue(JetDefs.F_DLSFILE, segment.dlsfile)
7536b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.SetValue(JetDefs.F_START, segment.start)
7546b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.SetValue(JetDefs.F_END, segment.end)
7556b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.SetValue(JetDefs.F_QUANTIZE, segment.quantize)
7566b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.SetValue(JetDefs.F_TRANSPOSE, segment.transpose)
7576b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.SetValue(JetDefs.F_REPEAT, segment.repeat)
7586b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            maxMeasures = abs(int(self.je.ctrls[JetDefs.F_END].GetValue('int')[0]))
7596b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_EEND].SetMaxMbt(maxMeasures+1,md.maxBeats,md.maxTicks)
7606b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_ESTART].SetMaxMbt(maxMeasures+1,md.maxBeats,md.maxTicks)
7616b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            minMeasures = abs(int(self.je.ctrls[JetDefs.F_START].GetValue('int')[0]))
7626b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_EEND].SetMinMbt(minMeasures+1,0,0)
7636b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_ESTART].SetMinMbt(minMeasures+1,0,0)
7646b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_END].GetValue('int')
7656b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_ETRACK].SetRange(1, md.maxTracks)
7666b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_MUTEFLAGS].DeleteAllItems()
7676b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            for track in md.trackList:
7686b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.je.ctrls[JetDefs.F_MUTEFLAGS].AddTrackRow(track)
7696b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_MUTEFLAGS].CheckTracks(self.je.ctrls[JetDefs.F_MUTEFLAGS].GetValue())
7706b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_MUTEFLAGS].SetTextColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_GRAYTEXT))
7716b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        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'))
7726b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
7736b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnPlay(self, event):
7746b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Plays the segment allowing interaction with events """
7756b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.je.ctrls[JetDefs.F_PLAY].GetLabel() == JetDefs.BUT_STOP:
7766b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.Player.SetKeepPlayingFlag(False)
7776b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            return
7786b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
7796b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if not self.Validate():
7806b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            return
7816b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
7826b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        jetevents = []
7836b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        jetevents.append(JetEvent(self.GetValue(JetDefs.F_ENAME), self.GetValue(JetDefs.F_ETYPE),
7846b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                  self.event_id, int(self.GetValue(JetDefs.F_ETRACK)),
7856b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                  int(self.GetValue(JetDefs.F_ECHANNEL)),
7866b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                  self.GetValue(JetDefs.F_ESTART), self.GetValue(JetDefs.F_EEND)))
7876b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
7886b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        segment = JetSegment(self.GetValue(JetDefs.F_SEGNAME),
7896b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                             self.GetValue(JetDefs.F_MIDIFILE),
7906b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                             self.GetValue(JetDefs.F_START),
7916b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                             self.GetValue(JetDefs.F_END),
7926b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                             JetDefs.MBT_ZEROSTR,
7936b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                             self.GetValue(JetDefs.F_SEGNAME),
7946b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                             self.GetValue(JetDefs.F_QUANTIZE),
7956b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                             jetevents,
7966b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                             self.GetValue(JetDefs.F_DLSFILE),
7976b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                             None,
7986b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                             self.GetValue(JetDefs.F_TRANSPOSE),
7996b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                             self.GetValue(JetDefs.F_REPEAT),
8006b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                             self.GetValue(JetDefs.F_MUTEFLAGS))
8016b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
8026b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.Player = PreviewPlayer(self.je.ctrls[JetDefs.F_PLAY], segment)
8036b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.Player.SetGraphCtrl(self.je.ctrls[JetDefs.F_GRAPH], self)
8046b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_GRAPH].ClickCallbackFct = self.GraphTriggerClip
8056b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.Player.trigger_button = self.je.ctrls[JetDefs.F_ETRIGGERBUT]
8066b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.Player.mute_button = self.je.ctrls[JetDefs.F_EMUTEBUT]
8076b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        thread.start_new_thread(self.Player .Start, ())
8086b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
8096b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def GraphTriggerClip(self, sClipName, iEventId):
8106b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Triggers a clip via graph """
8116b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.Player is not None:
8126b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.Player.GraphTriggerClip(sClipName, iEventId)
8136b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
8146b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnMute(self, event):
8156b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Mutes a track """
8166b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.Player is not None:
8176b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.Player.MuteTrackViaButton(self.je.ctrls[JetDefs.F_EMUTEBUT],
8186b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                                           int(self.je.ctrls[JetDefs.F_ETRACK].GetValue()))
8196b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
8206b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnTriggerClip(self, event):
8216b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Triggers a clip """
8226b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.Player is not None:
8236b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.Player.TriggerClip(self.event_id)
8246b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
8256b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnSetGraphOptions(self, evt):
8266b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        """ Sets graph options """
8276b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        IniSetValue(self.currentJetConfigFile, JetDefs.F_GRAPHLABELS, JetDefs.F_GRAPHLABELS, self.je.ctrls[JetDefs.F_GRAPHLABELS].GetValue())
8286b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        IniSetValue(self.currentJetConfigFile, JetDefs.F_GRAPHAPPEVTS, JetDefs.F_GRAPHAPPEVTS, self.je.ctrls[JetDefs.F_GRAPHAPPEVTS].GetValue())
8296b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        IniSetValue(self.currentJetConfigFile, JetDefs.F_GRAPHCLIPS, JetDefs.F_GRAPHCLIPS, self.je.ctrls[JetDefs.F_GRAPHCLIPS].GetValue())
8306b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.UpdateGraph()
8316b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
8326b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnReplicate(self, evt):
8336b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        dlg = JetReplicate("Replicate Event")
8346b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        dlg.SetValue(JetDefs.F_RPREPLACE, True)
8356b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        dlg.SetName(self.GetValue(JetDefs.F_ENAME))
8366b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        dlg.event_type = self.GetValue(JetDefs.F_ETYPE)
8376b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        dlg.event_max = self.segment.end
8386b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        dlg.length = MbtDifference(ConvertStrTimeToTuple(self.GetValue(JetDefs.F_ESTART)), ConvertStrTimeToTuple(self.GetValue(JetDefs.F_EEND)))
8396b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        result = dlg.ShowModal()
8406b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if result == wx.ID_OK:
8416b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.replicatePrefix = dlg.GetValue(JetDefs.F_RPPREFIX)
8426b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.lstReplicate = dlg.lstReplicate
8436b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.chkReplaceMatching = dlg.GetValue(JetDefs.F_RPREPLACE)
8446b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.EndModal(wx.ID_OK)
8456b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        else:
8466b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            dlg.Destroy()
8476b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
8486b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviclass JetReplicate(wx.Dialog):
8496b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    """ Replicate dialog box """
8506b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def __init__(self, title):
8516b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        wx.Dialog.__init__(self, None, -1, title)
8526b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
8536b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je = JetEdit(self, "REPLICATE_CTRLS", self)
8546b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
8556b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_RPINCREMENT].SetMinMbt(0,0,0)
8566b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_RPINCREMENT].SetValue((-1,-1,-1))
8576b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_RPNUMBER].SetValue(1)
8586b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        for title, width, fld in JetDefs.REPLICATE_GRID:
8596b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_RPGRDPREVIEW].AddCol(title, width)
8606b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.lstReplicate = []
8616b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
8626b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.SetSize(JetDefs.REPLICATE_SIZE)
8636b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.CenterOnParent()
8646b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
8656b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnOk(self, event):
8666b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.EndModal(wx.ID_OK)
8676b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
8686b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def GetValue(self, fld):
8696b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        return self.je.ctrls[fld].GetValue()
8706b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
8716b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def SetValue(self, fld, val):
8726b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[fld].SetValue(val)
8736b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
8746b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def SetName(self, name):
8756b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        for i in range(len(name), 1, -1):
8766b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            if not name[i-1].isdigit() and name[i-1] <> ' ':
8776b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                break
8786b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            else:
8796b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                name = name[0:i-1]
8806b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.SetValue(JetDefs.F_RPPREFIX, name)
8816b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
8826b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def Validate(self):
8836b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if self.GetValue(JetDefs.F_RPPREFIX) == '':
8846b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            InfoMsg("Message", "Prefix is required.")
8856b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            return False
8866b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        return True
8876b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
8886b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnPreview(self, event):
8896b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        if not self.Validate():
8906b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            return
8916b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        start = MbtVal(self.GetValue(JetDefs.F_ESTART))
8926b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        max = MbtVal(self.event_max)
8936b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        increment = MbtVal((self.je.ctrls[JetDefs.F_RPINCREMENT].GetMeasure(), self.je.ctrls[JetDefs.F_RPINCREMENT].GetBeat(), self.je.ctrls[JetDefs.F_RPINCREMENT].GetTick()))
8946b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
8956b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.lstReplicate = []
8966b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        iTo = int(self.GetValue(JetDefs.F_RPNUMBER))
8976b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        for i in range(iTo):
8986b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            evt_name = "%s %.2d" % (self.GetValue(JetDefs.F_RPPREFIX), i)
8996b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            s_ticks = start + (i * increment)
9006b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            s_mbt = TicksToMbt(s_ticks)
9016b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            evt_start =  "%d:%d:%d" % (s_mbt[0]+1, s_mbt[1]+1, s_mbt[2])
9026b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            if self.event_type == JetDefs.E_CLIP or self.event_type == "SEGMENT":
9036b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                e_ticks = s_ticks + self.length
9046b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                e_mbt = TicksToMbt(e_ticks)
9056b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                evt_end = "%d:%d:%d" % (e_mbt[0]+1, e_mbt[1]+1, e_mbt[2])
9066b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            else:
9076b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                e_ticks = s_ticks
9086b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                evt_end = evt_start
9096b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            if s_ticks <= max and e_ticks <= max:
9106b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.lstReplicate.append((evt_name, evt_start, evt_end))
9116b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
9126b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_RPGRDPREVIEW].DeleteAllItems()
9136b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_RPGRDPREVIEW].AddRows(self.lstReplicate)
9146b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
9156b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviclass JetMove(wx.Dialog):
9166b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    """ Move events dialog box """
9176b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def __init__(self, title):
9186b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        wx.Dialog.__init__(self, None, -1, title)
9196b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
9206b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je = JetEdit(self, "MOVE_CTRLS", self)
9216b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
9226b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_RPINCREMENT].SetMinMbt(-999,-4,-480)
9236b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_RPINCREMENT].SetValue((-1,-1,-1))
9246b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        for title, width, fld in JetDefs.REPLICATE_GRID:
9256b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            self.je.ctrls[JetDefs.F_RPGRDPREVIEW].AddCol(title, width)
9266b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.lstMove = []
9276b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.lstMoveMbt = []
9286b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.lstMoveItems = []
9296b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
9306b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.SetSize(JetDefs.REPLICATE_SIZE)
9316b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.CenterOnParent()
9326b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
9336b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnOk(self, event):
9346b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.EndModal(wx.ID_OK)
9356b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
9366b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def GetValue(self, fld):
9376b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        return self.je.ctrls[fld].GetValue()
9386b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
9396b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def SetValue(self, fld, val):
9406b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[fld].SetValue(val)
9416b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
9426b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    def OnPreview(self, event):
9436b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        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())))
9446b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        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:
9456b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            increment = 0 - increment
9466b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.lstMove = []
9476b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.lstMoveMbt = []
9486b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        for itm in self.lstMoveItems:
9496b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            max = MbtVal(itm[3])
9506b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            evt_name = itm[0]
9516b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            start = MbtVal(itm[1])
9526b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            s_ticks = start + increment
9536b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
9546b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            s_mbt = TicksToMbt(s_ticks)
9556b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            evt_start =  "%d:%d:%d" % (s_mbt[0]+1, s_mbt[1]+1, s_mbt[2])
9566b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            evt_start_save = "%d:%d:%d" % s_mbt
9576b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
9586b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            end = MbtVal(itm[2])
9596b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            e_ticks = end + increment
9606b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            e_mbt = TicksToMbt(e_ticks)
9616b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            evt_end = "%d:%d:%d" % (e_mbt[0]+1, e_mbt[1]+1, e_mbt[2])
9626b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            evt_end_save = "%d:%d:%d" % e_mbt
9636b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
9646b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi            if s_ticks <= max and e_ticks <= max and s_ticks >= 0 and e_ticks >= 0:
9656b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.lstMove.append((evt_name, evt_start, evt_end))
9666b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                self.lstMoveMbt.append((evt_name, evt_start_save, evt_end_save))
9676b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
9686b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_RPGRDPREVIEW].DeleteAllItems()
9696b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        self.je.ctrls[JetDefs.F_RPGRDPREVIEW].AddRows(self.lstMove)
9706b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
9716b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviif __name__ == '__main1__':
9726b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    """ Test dialogs """
9736b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    app = wx.PySimpleApp()
9746b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
9756b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    #dlg = JetOpen()
9766b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    #dlg = JetPropertiesDialog()
9776b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    #dlg = ExportDialog("Export Jet File")
9786b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    #dlg = JetAbout()
9796b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
9806b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    dlg = JetReplicate("Replicate Event")
9816b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    dlg.SetValue(JetDefs.F_RPREPLACE, True)
9826b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    dlg.event_max = "5:0:0"
9836b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    dlg.event_type = JetDefs.E_APP
9846b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    dlg.length = 480
9856b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    dlg.SetName("abc 02")
9866b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    result = dlg.ShowModal()
9876b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    if result == wx.ID_OK:
9886b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi        print("OK")
9896b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
9906b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    dlg.Destroy()
9916b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
9926b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviif __name__ == '__main1__':
9936b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    """ Test Segment dialog """
9946b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    app = wx.PySimpleApp()
9956b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
9966b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    helpProvider = wx.SimpleHelpProvider()
9976b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    wx.HelpProvider_Set(helpProvider)
9986b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
9996b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    dlg = SegEdit("Segments", JetDefs.UNTITLED_FILE)
10006b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    dlg.SetValue(JetDefs.F_SEGNAME, "Test Segment Name")
10016b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    dlg.SetValue(JetDefs.F_MIDIFILE, '/Users/BHruska/JetContent/jenn_Burning Line.mid')
10026b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    dlg.SetValue(JetDefs.F_MIDIFILE, 'C:/_Data/JetCreator/JetDemo1/jenn_Burning Line.mid')
10036b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    dlg.SetValue(JetDefs.F_DLSFILE, '')
10046b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    dlg.SetValue(JetDefs.F_START, '4:0:0')
10056b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    dlg.SetValue(JetDefs.F_END, '8:0:0')
10066b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    dlg.SetValue(JetDefs.F_QUANTIZE, 6)
10076b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
10086b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    result = dlg.ShowModal()
10096b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    dlg.Destroy()
10106b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
10116b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Triviif __name__ == '__main__':
10126b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    """ Test Event dialog """
10136b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    app = wx.PySimpleApp()
10146b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
10156b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    jetevents = []
10166b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
10176b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    segment = JetSegment("Test Segment Name", 'C:/_Data/JetCreator/JetDemo1/jenn_Burning Line.mid',
10186b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                            '0:0:0', '4:0:0', None,
10196b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                            "Test Segment Name", 6, jetevents,
10206b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi                            '', None, 0,0,3)
10216b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
10226b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    dlg = EventEdit("Event Edit", JetDefs.UNTITLED_FILE)
10236b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    dlg.SetValue(JetDefs.F_ENAME, "Test Event Name")
10246b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    dlg.SetValue(JetDefs.F_ETYPE, "TriggerClip")
10256b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    dlg.SetSegment(segment)
10266b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
10276b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    result = dlg.ShowModal()
10286b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi    dlg.Destroy()
10296b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
10306b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
10316b065d0f7161fe54e6f58fd2b8ad6c650b2d3657Jean-Michel Trivi
1032