From b929d1b3f6856eb97b19eaeb853002de18d75e02 Mon Sep 17 00:00:00 2001 From: amartin Date: Wed, 29 Aug 2007 06:53:12 +0000 Subject: volume/tempo --- (limited to 'Jam') diff --git a/Jam/JamMain.py b/Jam/JamMain.py index 69b9677..cdce15f 100644 --- a/Jam/JamMain.py +++ b/Jam/JamMain.py @@ -14,7 +14,7 @@ import sugar.graphics.style as style from Jam.Desktop import Desktop import Jam.Picker as Picker import Jam.Block as Block -from Jam.Toolbars import DesktopToolbar +from Jam.Toolbars import JamToolbar, DesktopToolbar from Util.CSoundNote import CSoundNote @@ -154,6 +154,11 @@ class JamMain(SubActivity): self.loopImageActive = {} # #-- Toolbars ------------------------------------------ + self.activity.activity_toolbar.keep.show() + + self.jamToolbar = JamToolbar( self ) + self.activity.toolbox.add_toolbar( _("Jam"), self.jamToolbar ) + self.desktopToolbar = DesktopToolbar( self ) self.activity.toolbox.add_toolbar( _("Desktop"), self.desktopToolbar ) @@ -228,7 +233,11 @@ class JamMain(SubActivity): for file in filelist: shutil.copyfile( path+file, Config.SCRATCH_DIR+file ) - self._setDesktop( 0 ) + #-- Final Set Up -------------------------------------- + self.setVolume( self.volume ) + self.setTempo( self.tempo ) + self.activity.toolbox.set_current_toolbar(1) # JamToolbar + self.setDesktop( 0, True ) #========================================================== @@ -410,9 +419,62 @@ class JamMain(SubActivity): #========================================================== # Get/Set + def getVolume( self ): + return self.volume + + def setVolume( self, volume ): + self.jamToolbar.volumeSlider.set_value( volume ) + + def _setVolume( self, volume ): + self.volume = volume + self.csnd.setMasterVolume( self.volume ) + + def getTempo( self ): + return self.tempo + + def setTempo( self, tempo ): + self.jamToolbar.tempoSlider.set_value( tempo ) + + def _setTempo( self, tempo ): + self.tempo = tempo + self.csnd.setTempo( self.tempo ) + def getDesktop( self ): return self.desktop + def _clearDesktop( self, save = True ): + if self.curDesktop == None: + return + + if save: + self._saveDesktop() + + self.desktop._clearDesktop() + + self.curDesktop = None + + def setDesktop( self, desktop, force = False ): + radiobtn = self.desktopToolbar.getDesktopButton( desktop ) + if force and radiobtn.get_active(): + self._setDesktop( desktop ) + else: + radiobtn.set_active( True ) + + def _setDesktop( self, desktop ): + self._clearDesktop() + + self.curDesktop = desktop + + TTTable = ControlStream.TamTamTable( self.noteDB, jam = self ) + + filename = self.getDesktopScratchFile( self.curDesktop ) + try: + stream = open( filename, "r" ) + TTTable.parseFile( stream ) + stream.close() + except IOError, (errno, strerror): + if Config.DEBUG > 3: print "IOError:: _setDesktop:", errno, strerror + def getInstrumentImage( self, id, active = False ): if active: return self.instrumentImageActive[id] else: return self.instrumentImage[id] @@ -516,42 +578,6 @@ class JamMain(SubActivity): def pitchToPixels( self, pitch ): return self.loopPitchOffset + int(round( ( Config.MAXIMUM_PITCH - pitch ) * self.pixelsPerPitch )) - - #========================================================== - # Desktop - - def _clearDesktop( self, save = True ): - if self.curDesktop == None: - return - - if save: - self._saveDesktop() - - self.desktop._clearDesktop() - - self.curDesktop = None - - def setDesktop( self, desktop ): - self.desktopToolbar.desktop[desktop].set_active( True ) - - def _setDesktop( self, desktop ): - if self.curDesktop == desktop: - return - - self._clearDesktop() - - self.curDesktop = desktop - - TTTable = ControlStream.TamTamTable( self.noteDB, jam = self ) - - filename = self.getDesktopScratchFile( self.curDesktop ) - try: - stream = open( filename, "r" ) - TTTable.parseFile( stream ) - stream.close() - except: - if Config.DEBUG > 3: print "ERROR:: setDesktop: unable to open file: " + filename - #========================================================== # Load/Save @@ -587,8 +613,12 @@ class JamMain(SubActivity): stream = open( filepath, "r" ) TTTable.parseFile( stream ) stream.close() - except: - if Config.DEBUG > 3: print "ERROR:: handleJournalLoad:", sys.exc_info()[0] + + self.setVolume( TTTable.masterVolume ) + self.setTempo( TTTable.tempo ) + + except IOError, (errno, strerror): + if Config.DEBUG > 3: print "IOError:: handleJournalLoad:", errno, strerror def handleJournalSave( self, filepath ): @@ -604,10 +634,11 @@ class JamMain(SubActivity): stream.desktop_set( self.curDesktop ) - streamF.close() + stream.master_vol( self.volume ) + stream.tempo( self.tempo ) - self.curDesktop = None - except: - if Config.DEBUG > 3: print "ERROR:: handleJournalSave:", sys.exc_info()[0] + streamF.close() + except IOError, (errno, strerror): + if Config.DEBUG > 3: print "IOError:: handleJournalSave:", errno, strerror diff --git a/Jam/Toolbars.py b/Jam/Toolbars.py index 892a139..3514708 100644 --- a/Jam/Toolbars.py +++ b/Jam/Toolbars.py @@ -5,8 +5,85 @@ import gtk from gettext import gettext as _ +from sugar.graphics.palette import Palette, WidgetInvoker from sugar.graphics.radiotoolbutton import RadioToolButton +import Config + +class JamToolbar( gtk.Toolbar ): + + def __init__( self, owner ): + gtk.Toolbar.__init__( self ) + + self.owner = owner + + self.toolItem = {} + + self.volumeImg = gtk.Image() + self.volumeImg.set_from_file( Config.IMAGE_ROOT + 'volume2.png' ) + self._insert_widget( self.volumeImg, -1 ) + + self.volumeAdjustment = gtk.Adjustment( 50, 0, 100+1, 10, 10, 1 ) + self.volumeAdjustment.connect( 'value-changed', self.handleVolume ) + self.volumeSlider = gtk.HScale( adjustment = self.volumeAdjustment ) + self.volumeSlider.set_size_request( 450, -1 ) + self.volumeSlider.set_draw_value( False ) + self._add_tooltip( self.volumeSlider, _("Master Volume") ) + self._insert_widget( self.volumeSlider, -1 ) + + self._insert_separator( True ) + + self.tempoImg = gtk.Image() + self.tempoImg.set_from_file( Config.IMAGE_ROOT + 'tempo2.png' ) + self._insert_widget( self.tempoImg, -1 ) + + self.tempoAdjustment = gtk.Adjustment( Config.PLAYER_TEMPO, Config.PLAYER_TEMPO_LOWER, Config.PLAYER_TEMPO_UPPER+1, 10, 10, 1 ) + self.tempoAdjustment.connect( 'value-changed', self.handleTempo ) + self.tempoSlider = gtk.HScale( adjustment = self.tempoAdjustment ) + self.tempoSlider.set_size_request( 450, -1 ) + self.tempoSlider.set_draw_value( False ) + self._add_tooltip( self.tempoSlider, _("Tempo") ) + self._insert_widget( self.tempoSlider, -1 ) + + self.show_all() + + def _add_palette( self, widget, palette, position = Palette.DEFAULT ): + widget._palette = palette + widget._palette.props.invoker = WidgetInvoker( widget ) + widget._palette.set_property( "position", position ) + + def _add_tooltip( self, widget, tooltip ): + self._add_palette( widget, Palette( tooltip ), Palette.DEFAULT ) + + def _insert_widget( self, widget, pos ): + self.toolItem[ widget ] = gtk.ToolItem() + self.toolItem[ widget ].add( widget ) + self.insert( self.toolItem[ widget ], pos ) + + def _insert_separator( self, expand = False ): + separator = gtk.SeparatorToolItem() + separator.set_expand( expand ) + self.insert( separator, -1 ) + + def mapRange( self, value, ilower, iupper, olower, oupper ): + if value == iupper: + return oupper + return olower + int( (oupper-olower+1)*(value-ilower)/float(iupper-ilower) ) + + + def handleVolume( self, widget ): + self.owner._setVolume( widget.get_value() ) + + img = self.mapRange( widget.value, widget.lower, widget.upper, 0, 3 ) + self.volumeImg.set_from_file(Config.IMAGE_ROOT + 'volume' + str(img) + '.png') + + def handleTempo( self, widget ): + self.owner._setTempo( widget.get_value() ) + + img = self.mapRange( widget.value, widget.lower, widget.upper, 1, 8 ) + self.tempoImg.set_from_file(Config.IMAGE_ROOT + 'tempo' + str(img) + '.png') + + class DesktopToolbar( gtk.Toolbar ): def __init__( self, owner ): @@ -14,6 +91,8 @@ class DesktopToolbar( gtk.Toolbar ): self.owner = owner + self._insert_separator( True ) + self.desktop = [] btn = RadioToolButton( 'preset1', group = None ) @@ -29,8 +108,18 @@ class DesktopToolbar( gtk.Toolbar ): self.insert( btn, -1 ) self.desktop.append( btn ) + self._insert_separator( True ) + self.show_all() + def _insert_separator( self, expand = False ): + separator = gtk.SeparatorToolItem() + separator.set_expand( expand ) + self.insert( separator, -1 ) + + def getDesktopButton( self, which ): + return self.desktop[which] + def setDesktop( self, widget, which ): if widget.get_active(): self.owner._setDesktop( which ) -- cgit v0.9.1