Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Jam
diff options
context:
space:
mode:
authoramartin <olpc@xo-05-28-21.localdomain>2007-08-29 06:53:12 (GMT)
committer amartin <olpc@xo-05-28-21.localdomain>2007-08-29 06:53:12 (GMT)
commitb929d1b3f6856eb97b19eaeb853002de18d75e02 (patch)
treeeb190c0abb2db34e3302bfabb0cb47295e7c5c73 /Jam
parent82bce73030735492a017113f0486ebe8aae5fae6 (diff)
volume/tempo
Diffstat (limited to 'Jam')
-rw-r--r--Jam/JamMain.py119
-rw-r--r--Jam/Toolbars.py89
2 files changed, 164 insertions, 44 deletions
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 )