Beispiel #1
0
 def __init__(self, parent):
     ManualPanel.__init__(self, parent)
     self.root, self.directories, self.files = CeciliaLib.buildFileTree()
     self.parse()
Beispiel #2
0
    def __init__(self, frame, mainFrame=None):
        wx.MenuBar.__init__(self, wx.MB_DOCKABLE)
        self.frame = frame
        if mainFrame:
            self.mainFrame = mainFrame
        else:
            self.mainFrame = CeciliaLib.getVar("mainFrame")
        inMainFrame = False
        if frame == mainFrame:
            inMainFrame = True

        # File Menu
        self.fileMenu = wx.Menu()
        self.fileMenu.Append(ID_OPEN, 'Open...\tCtrl+O', kind=wx.ITEM_NORMAL)
        self.frame.Bind(wx.EVT_MENU, self.mainFrame.onOpen, id=ID_OPEN)
        self.fileMenu.Append(ID_OPEN_RANDOM,
                             'Open Random...\tShift+Ctrl+O',
                             kind=wx.ITEM_NORMAL)
        self.frame.Bind(wx.EVT_MENU,
                        self.mainFrame.onOpenRandom,
                        id=ID_OPEN_RANDOM)

        ######## Implement the Open builtin menu #########
        self.root, self.directories, self.files = CeciliaLib.buildFileTree()
        self.openBuiltinMenu = wx.Menu()
        subId1 = ID_OPEN_BUILTIN
        for dir in self.directories:
            menu = wx.Menu()
            self.openBuiltinMenu.Append(-1, dir, menu)
            for f in self.files[dir]:
                menu.Append(subId1, f)
                self.frame.Bind(wx.EVT_MENU,
                                self.mainFrame.onOpenBuiltin,
                                id=subId1)
                subId1 += 1

        prefPath = CeciliaLib.getVar("prefferedPath")
        if prefPath:
            for path in prefPath.split(';'):
                path = CeciliaLib.ensureNFD(path)
                if not os.path.isdir(path):
                    continue
                menu = wx.Menu(os.path.split(path)[1])
                self.openBuiltinMenu.Append(-1, os.path.split(path)[1], menu)
                files = os.listdir(path)
                for file in files:
                    if os.path.isfile(os.path.join(path, file)):
                        ok = False
                        try:
                            ext = file.rsplit('.')[1]
                            if ext == FILE_EXTENSION:
                                ok = True
                        except:
                            ok = False
                        if ok:
                            try:
                                menu.Append(subId1, CeciliaLib.ensureNFD(file))
                                self.frame.Bind(
                                    wx.EVT_MENU,
                                    self.mainFrame.onOpenPrefModule,
                                    id=subId1)
                                subId1 += 1
                            except:
                                pass

        self.fileMenu.Append(-1, 'Modules', self.openBuiltinMenu)

        self.openRecentMenu = wx.Menu()
        subId2 = ID_OPEN_RECENT
        recentFiles = []
        filename = os.path.join(TMP_PATH, '.recent.txt')
        if os.path.isfile(filename):
            f = open(filename, "r")
            for line in f.readlines():
                try:
                    recentFiles.append(line)
                except:
                    pass
            f.close()
        if recentFiles:
            for file in recentFiles:
                try:
                    self.openRecentMenu.Append(
                        subId2,
                        CeciliaLib.ensureNFD(file).replace("\n", ""))
                    subId2 += 1
                except:
                    pass
        if subId2 > ID_OPEN_RECENT:
            for i in range(ID_OPEN_RECENT, subId2):
                self.frame.Bind(wx.EVT_MENU, self.mainFrame.openRecent, id=i)

        self.fileMenu.Append(-1, 'Open Recent', self.openRecentMenu,
                             'Access previously opened files in Cecilia')
        self.fileMenu.Append(wx.ID_SEPARATOR, kind=wx.ITEM_SEPARATOR)
        self.fileMenu.Append(ID_SAVE,
                             'Save\tCtrl+S',
                             'Save changes made on the current module',
                             kind=wx.ITEM_NORMAL)
        self.frame.Bind(wx.EVT_MENU, self.mainFrame.onSave, id=ID_SAVE)
        self.fileMenu.Append(ID_SAVEAS,
                             'Save as...\tShift+Ctrl+s',
                             'Save the current module as... (.cec file)',
                             kind=wx.ITEM_NORMAL)
        self.frame.Bind(wx.EVT_MENU, self.mainFrame.onSaveAs, id=ID_SAVEAS)
        self.fileMenu.Append(wx.ID_SEPARATOR, kind=wx.ITEM_SEPARATOR)
        self.fileMenu.Append(ID_OPEN_AS_TEXT,
                             'Open Module as Text\tCtrl+E',
                             '',
                             kind=wx.ITEM_NORMAL)
        self.frame.Bind(wx.EVT_MENU,
                        self.mainFrame.openModuleAsText,
                        id=ID_OPEN_AS_TEXT)
        self.fileMenu.Append(ID_UPDATE_INTERFACE,
                             'Reload module\tCtrl+R',
                             'Reload the current module',
                             kind=wx.ITEM_NORMAL)
        self.frame.Bind(wx.EVT_MENU,
                        self.mainFrame.reloadCurrentModule,
                        id=ID_UPDATE_INTERFACE)
        if CeciliaLib.getVar("systemPlatform").startswith(
                "linux") or CeciliaLib.getVar("systemPlatform") == 'win32':
            self.fileMenu.Append(wx.ID_SEPARATOR, kind=wx.ITEM_SEPARATOR)
        pref_item = self.fileMenu.Append(wx.ID_PREFERENCES,
                                         'Preferences...\tCtrl+, ',
                                         'Open Cecilia preferences pane',
                                         kind=wx.ITEM_NORMAL)
        self.frame.Bind(wx.EVT_MENU, self.mainFrame.onPreferences, pref_item)
        if CeciliaLib.getVar("systemPlatform").startswith(
                "linux") or CeciliaLib.getVar("systemPlatform") == 'win32':
            self.fileMenu.Append(wx.ID_SEPARATOR, kind=wx.ITEM_SEPARATOR)
        quit_item = self.fileMenu.Append(wx.ID_EXIT,
                                         'Quit\tCtrl+Q',
                                         'Quit Cecilia',
                                         kind=wx.ITEM_NORMAL)
        self.frame.Bind(wx.EVT_MENU, self.mainFrame.onQuit, quit_item)

        # Edit Menu
        self.editMenu = wx.Menu()
        if not inMainFrame:
            self.editMenu.Append(ID_UNDO,
                                 'Undo\tCtrl+Z',
                                 'Undo the last change',
                                 kind=wx.ITEM_NORMAL)
            self.frame.Bind(wx.EVT_MENU, self.frame.onUndo, id=ID_UNDO)
            self.editMenu.Append(ID_REDO,
                                 'Redo\tShift+Ctrl+Z',
                                 'Redo the last change',
                                 kind=wx.ITEM_NORMAL)
            self.frame.Bind(wx.EVT_MENU, self.frame.onRedo, id=ID_REDO)
            self.editMenu.Append(wx.ID_SEPARATOR, kind=wx.ITEM_SEPARATOR)
            self.editMenu.Append(ID_COPY,
                                 'Copy\tCtrl+C',
                                 'Copy the current line to the clipboard',
                                 kind=wx.ITEM_NORMAL)
            self.frame.Bind(wx.EVT_MENU, self.frame.onCopy, id=ID_COPY)
            self.editMenu.Append(
                ID_PASTE,
                'Paste\tCtrl+V',
                'Paste to the current line the content of clipboard',
                kind=wx.ITEM_NORMAL)
            self.frame.Bind(wx.EVT_MENU, self.frame.onPaste, id=ID_PASTE)
            self.editMenu.Append(wx.ID_SEPARATOR, kind=wx.ITEM_SEPARATOR)
            self.editMenu.Append(ID_SELECT_ALL,
                                 'Select All Points\tCtrl+A',
                                 'Select all points of the current graph line',
                                 kind=wx.ITEM_NORMAL)
            self.frame.Bind(wx.EVT_MENU,
                            self.frame.onSelectAll,
                            id=ID_SELECT_ALL)
            self.editMenu.Append(wx.ID_SEPARATOR, kind=wx.ITEM_SEPARATOR)
        self.editMenu.Append(ID_REMEMBER,
                             'Remember Input Sound',
                             'Find an expression in the text and replace it',
                             kind=wx.ITEM_CHECK)
        self.editMenu.FindItemById(ID_REMEMBER).Check(
            CeciliaLib.getVar("rememberedSound"))
        self.frame.Bind(wx.EVT_MENU,
                        self.mainFrame.onRememberInputSound,
                        id=ID_REMEMBER)

        # Action Options Menu
        self.actionMenu = wx.Menu()
        self.actionMenu.Append(ID_PLAY_STOP, 'Play / Stop\tCtrl+.',
                               'Start and stop audio server')
        self.frame.Bind(wx.EVT_MENU,
                        self.mainFrame.onShortPlayStop,
                        id=ID_PLAY_STOP)
        self.actionMenu.Append(wx.ID_SEPARATOR, kind=wx.ITEM_SEPARATOR)
        self.actionMenu.Append(ID_BOUNCE, 'Bounce to Disk\tCtrl+B',
                               'Record the audio processing in a soundfile')
        self.frame.Bind(wx.EVT_MENU,
                        self.mainFrame.onBounceToDisk,
                        id=ID_BOUNCE)
        self.actionMenu.Append(ID_BATCH_PRESET,
                               'Batch Processing on Preset Sequence', '')
        self.frame.Bind(wx.EVT_MENU,
                        self.mainFrame.onBatchProcessing,
                        id=ID_BATCH_PRESET)
        self.actionMenu.Append(ID_BATCH_FOLDER,
                               'Batch Processing on Sound Folder', '')
        self.frame.Bind(wx.EVT_MENU,
                        self.mainFrame.onBatchProcessing,
                        id=ID_BATCH_FOLDER)
        self.actionMenu.Append(ID_USE_SOUND_DUR,
                               'Use Sound Duration on Folder Batch Processing',
                               kind=wx.ITEM_CHECK)
        if CeciliaLib.getVar("useSoundDur") == 1:
            self.actionMenu.FindItemById(ID_USE_SOUND_DUR).Check(True)
        self.frame.Bind(wx.EVT_MENU,
                        self.mainFrame.onUseSoundDuration,
                        id=ID_USE_SOUND_DUR)
        self.actionMenu.Append(wx.ID_SEPARATOR, kind=wx.ITEM_SEPARATOR)
        self.actionMenu.Append(ID_SHOW_SPECTRUM,
                               'Show Spectrum',
                               '',
                               kind=wx.ITEM_CHECK)
        self.frame.Bind(wx.EVT_MENU,
                        self.mainFrame.onShowSpectrum,
                        id=ID_SHOW_SPECTRUM)
        if CeciliaLib.getVar('showSpectrum'):
            self.actionMenu.FindItemById(ID_SHOW_SPECTRUM).Check(True)
        self.actionMenu.Append(wx.ID_SEPARATOR, kind=wx.ITEM_SEPARATOR)
        self.actionMenu.Append(ID_USE_MIDI,
                               'Use MIDI',
                               'Allow Cecilia to use a midi device.',
                               kind=wx.ITEM_CHECK)
        if CeciliaLib.getVar("useMidi") == 1: midiCheck = True
        else: midiCheck = False
        self.actionMenu.FindItemById(ID_USE_MIDI).Check(midiCheck)
        self.actionMenu.FindItemById(ID_USE_MIDI).Enable(False)
        self.frame.Bind(wx.EVT_MENU, self.mainFrame.onUseMidi, id=ID_USE_MIDI)

        windowMenu = wx.Menu()
        windowMenu.Append(ID_MARIO,
                          'Eh Oh Mario!\tShift+Ctrl+E',
                          '',
                          kind=wx.ITEM_CHECK)
        self.frame.Bind(wx.EVT_MENU, self.marioSwitch, id=ID_MARIO)

        helpMenu = wx.Menu()
        helpItem = helpMenu.Append(wx.ID_ABOUT,
                                   '&About %s %s' % (APP_NAME, APP_VERSION),
                                   'wxPython RULES!!!')
        self.frame.Bind(wx.EVT_MENU, self.mainFrame.onHelpAbout, helpItem)
        infoItem = helpMenu.Append(ID_MODULE_INFO, 'Show Module Info\tCtrl+I',
                                   '')
        self.frame.Bind(wx.EVT_MENU, self.mainFrame.onModuleAbout, infoItem)
        docItem = helpMenu.Append(ID_DOC_FRAME,
                                  'Show API Documentation\tCtrl+D', '')
        self.frame.Bind(wx.EVT_MENU, self.mainFrame.onDocFrame, docItem)
        graphItem = helpMenu.Append(ID_GRAPH_FRAME,
                                    'Show Grapher Help\tCtrl+G', '')
        self.frame.Bind(wx.EVT_MENU, self.mainFrame.onGraphFrame, graphItem)

        self.Append(self.fileMenu, '&File')
        self.Append(self.editMenu, '&Edit')
        self.Append(self.actionMenu, '&Action')
        self.Append(windowMenu, '&Window')
        self.Append(helpMenu, '&Help')