import signal , time , sys , os, shutil import pygtk pygtk.require( '2.0' ) import gtk import Config from Util.CSoundClient import new_csound_client from Util.Profiler import TP from miniTamTam.miniTamTamMain import miniTamTamMain from Edit.MainWindow import MainWindow from Welcome import Welcome from SynthLab.SynthLabWindow import SynthLabWindow try : from sugar.activity.Activity import Activity except ImportError: from FActivity import FakeActivity as Activity if not os.path.isdir(Config.PREF_DIR): os.mkdir(Config.PREF_DIR) os.system('chmod 0777 ' + Config.PREF_DIR + ' &') for snd in ['mic1','mic2','mic3','mic4','lab1','lab2','lab3','lab4']: shutil.copyfile(Config.SOUNDS_DIR + '/' + snd , Config.PREF_DIR + '/' + snd) os.system('chmod 0777 ' + Config.PREF_DIR + '/' + snd + ' &') class TamTam(Activity): # TamTam is the topmost container in the TamTam application # At all times it has one child, which may be one of # - the welcome screen # - the mini-tamtam # - the synth lab # - edit mode def __init__(self, handle, mode='welcome'): Activity.__init__(self, handle) color = gtk.gdk.color_parse(Config.PANEL_BCK_COLOR) self.modify_bg(gtk.STATE_NORMAL, color) self.set_title('TamTam') self.set_resizable(False) self.connect('focus_in_event',self.onFocusIn) self.connect('focus_out_event',self.onFocusOut) self.connect('destroy', self.onDestroy) self.connect( "key-press-event", self.onKeyPress ) self.connect( "key-release-event", self.onKeyRelease ) self.mode = None self.modeList = {} self.set_mode(mode) def doNothing(): #a callback function to appease SynthLab pass def set_mode(self, mode, arg = None): print 'DEBUG: TamTam::set_mode from', self.mode, 'to', mode if self.mode != None: self.modeList[ self.mode ].onDeactivate() self.remove( self.modeList[ self.mode ] ) self.mode = None if mode == 'welcome': if not (mode in self.modeList): self.modeList[mode] = Welcome(self.set_mode) self.mode = mode if mode == 'mini': if not (mode in self.modeList): self.modeList[mode] = miniTamTamMain(self.set_mode) self.mode = mode if mode == 'edit': if not (mode in self.modeList): self.modeList[mode] = MainWindow(self.set_mode) self.mode = mode if mode == 'synth': if not (mode in self.modeList): self.modeList[mode] = SynthLabWindow(self.set_mode, 86, None) self.mode = mode if self.mode == None: print 'DEBUG: TamTam::set_mode invalid mode:', mode else: self.add( self.modeList[ self.mode ] ) self.modeList[ self.mode ].onActivate(arg) def onFocusIn(self, event, data=None): print 'DEBUG: TamTam::onFocusOut in TamTam.py' csnd = new_csound_client() csnd.connect(True) #csnd.load_instruments() def onFocusOut(self, event, data=None): print 'DEBUG: TamTam::onFocusOut in TamTam.py' csnd = new_csound_client() csnd.connect(False) def onKeyPress(self, widget, event): print 'DEBUG: TamTam::onKeyPress in TamTam.py' if event.state == gtk.gdk.MOD1_MASK: key = event.hardware_keycode if key == 58: #M self.set_mode('mini') return elif key == 39: #S self.set_mode('synth') return elif key == 25: #W self.set_mode('welcome') return elif key == 53: #X self.destroy() return self.modeList[ self.mode ].onKeyPress(widget, event) def onKeyRelease(self, widget, event): print 'DEBUG: TamTam::onKeyRelease in TamTam.py' self.modeList[ self.mode ].onKeyRelease(widget, event) pass def onDestroy(self, arg2): print 'DEBUG: TamTam::onDestroy()' os.system('rm -f ' + Config.PREF_DIR + '/synthTemp*') for m in self.modeList: if self.modeList[m] != None: self.modeList[m].onDestroy() csnd = new_csound_client() csnd.connect(False) csnd.destroy() gtk.main_quit() if __name__ == "__main__": if len(sys.argv) > 1 : mainwin = TamTam(None, sys.argv[1]) else: mainwin = TamTam(None, 'welcome') gtk.main() sys.exit(0) def run_edit_mode(): tamtam = MainWindow() mainwin = gtk.Window(gtk.WINDOW_TOPLEVEL) mainwin.set_title('TamTam Player') display = mainwin.get_display() screen = gtk.gdk.Display.get_default_screen(display) mainwin.set_geometry_hints( None, screen.get_width(), screen.get_height(), screen.get_width(), screen.get_height(), screen.get_width(), screen.get_height() ) #mainwin.fullscreen() # don't need to specify full screen, it seem to sit properly anyway mainwin.set_resizable(False) mainwin.connect('destroy' , tamtam.destroy ) #mainwin.connect( "configure-event", tamtam.handleConfigureEvent ) mainwin.connect( "key-press-event", tamtam.onKeyPress ) mainwin.connect( "key-release-event", tamtam.onKeyRelease ) mainwin.connect( "delete_event", tamtam.delete_event ) mainwin.add(tamtam) tamtam.show() mainwin.show() gtk.main()