Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/TamTamJam.activity/Jam/Toolbars.py
diff options
context:
space:
mode:
authorOli <olivier.belanger@umontreal.ca>2007-10-26 05:50:30 (GMT)
committer Oli <olivier.belanger@umontreal.ca>2007-10-26 05:50:30 (GMT)
commit9583b21dae8041c6544fb37de00ca42b034ebc98 (patch)
tree4c37d754cdaa5b332969f7fc30f0bba31025d006 /TamTamJam.activity/Jam/Toolbars.py
parent3aebf3dad1f5c137a5182cfe06b8edc778a5ddb9 (diff)
miniT tabs cleanup, loop settings moved to Jam
Diffstat (limited to 'TamTamJam.activity/Jam/Toolbars.py')
-rw-r--r--TamTamJam.activity/Jam/Toolbars.py315
1 files changed, 303 insertions, 12 deletions
diff --git a/TamTamJam.activity/Jam/Toolbars.py b/TamTamJam.activity/Jam/Toolbars.py
index ac510db..139c2eb 100644
--- a/TamTamJam.activity/Jam/Toolbars.py
+++ b/TamTamJam.activity/Jam/Toolbars.py
@@ -2,6 +2,9 @@
import pygtk
pygtk.require( '2.0' )
import gtk
+import gobject
+
+import os, commands
from gettext import gettext as _
@@ -12,11 +15,13 @@ from sugar.graphics.toggletoolbutton import ToggleToolButton
from sugar.graphics.combobox import ComboBox
from sugar.graphics.toolcombobox import ToolComboBox
+from common.Util.ThemeWidgets import *
+
import common.Config as Config
class JamToolbar( gtk.Toolbar ):
-
+
def __init__( self, owner ):
gtk.Toolbar.__init__( self )
@@ -31,13 +36,13 @@ class JamToolbar( gtk.Toolbar ):
self.insert(self.stopButton, -1)
self.stopButton.show()
self.stopButton.set_tooltip(_('Stop'))
-
+
self.pauseButton = ToggleToolButton('media-playback-pause')
self.pauseButton.connect('clicked',self.handlePauseButton)
self.insert(self.pauseButton, -1)
self.pauseButton.show()
self.pauseButton.set_tooltip(_('pause'))
-
+
self.volumeAdjustment = gtk.Adjustment( 0.0, 0, 1.0, 0.1, 0.1, 0 )
self.volumeAdjustment.connect( 'value-changed', self.handleVolume )
self.volumeSlider = gtk.HScale( adjustment = self.volumeAdjustment )
@@ -92,7 +97,7 @@ class JamToolbar( gtk.Toolbar ):
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 )
self._add_palette( widget, Palette( tooltip ) )
@@ -115,19 +120,19 @@ class JamToolbar( gtk.Toolbar ):
self.owner._setSyncBeats( widget.get_active() + 1 )
def mapRange( self, value, ilower, iupper, olower, oupper ):
- if value == iupper:
+ if value == iupper:
return oupper
return olower + int( (oupper-olower+1)*(value-ilower)/float(iupper-ilower) )
-
+
def handleStopButton( self, widget ):
self.owner.setStopped()
-
+
def handlePauseButton (self, widget ):
if widget.get_active():
self.owner.setPaused(True)
else:
- self.owner.setPaused(False)
-
+ self.owner.setPaused(False)
+
def handleVolume( self, widget ):
self.owner._setVolume( widget.get_value() )
@@ -141,6 +146,54 @@ class JamToolbar( gtk.Toolbar ):
self.tempoImg.set_from_file(Config.TAM_TAM_ROOT + '/icons/tempo' + str(img) + '.svg')
+class recordToolbar(gtk.Toolbar):
+ def __init__(self, jam):
+ gtk.Toolbar.__init__(self)
+
+ def _insertSeparator(x = 1):
+ for i in range(x):
+ self.separator = gtk.SeparatorToolItem()
+ self.separator.set_draw(True)
+ self.insert(self.separator,-1)
+ self.separator.show()
+
+ #self.toolbox = toolbox
+ self.jam = jam
+
+ self.micRec1Button = ToolButton('rec1')
+ self.micRec1Button.connect('clicked',self.jam.micRec,'mic1')
+ self.insert(self.micRec1Button, -1)
+ self.micRec1Button.show()
+ self.micRec1Button.set_tooltip(_('Record microphone into slot 1'))
+
+ self.micRec2Button = ToolButton('rec2')
+ self.micRec2Button.connect('clicked',self.jam.micRec,'mic2')
+ self.insert(self.micRec2Button, -1)
+ self.micRec2Button.show()
+ self.micRec2Button.set_tooltip(_('Record microphone into slot 2'))
+
+ self.micRec3Button = ToolButton('rec3')
+ self.micRec3Button.connect('clicked',self.jam.micRec,'mic3')
+ self.insert(self.micRec3Button, -1)
+ self.micRec3Button.show()
+ self.micRec3Button.set_tooltip(_('Record microphone into slot 3'))
+
+ self.micRec4Button = ToolButton('rec4')
+ self.micRec4Button.connect('clicked',self.jam.micRec,'mic4')
+ self.insert(self.micRec4Button, -1)
+ self.micRec4Button.show()
+ self.micRec4Button.set_tooltip(('Record microphone into slot 4'))
+
+ _insertSeparator()
+
+ self._loopSettingsPalette = LoopSettingsPalette(_('Add new Sound'), self.jam)
+ self.loopSetButton = ToggleToolButton('loop')
+ self.loopSetButton.set_palette(self._loopSettingsPalette)
+ self.insert(self.loopSetButton, -1)
+ self.loopSetButton.show()
+
+ self.show_all()
+
class DesktopToolbar( gtk.Toolbar ):
def __init__( self, owner ):
@@ -151,20 +204,20 @@ class DesktopToolbar( gtk.Toolbar ):
self._insert_separator( True )
self.desktop = []
-
+
btn = RadioToolButton( 'preset1', group = None )
btn.connect( 'toggled', self.setDesktop, 0 )
btn.set_tooltip( _('Desktop 1') )
self.insert( btn, -1 )
self.desktop.append( btn )
-
+
for i in range(2,11):
btn = RadioToolButton( 'preset%d'%i, group = self.desktop[0] )
btn.connect( 'toggled', self.setDesktop, i-1 )
btn.set_tooltip( _('Desktop %d'%i) )
self.insert( btn, -1 )
self.desktop.append( btn )
-
+
self._insert_separator( True )
self.show_all()
@@ -181,3 +234,241 @@ class DesktopToolbar( gtk.Toolbar ):
def setDesktop( self, widget, which ):
if widget.get_active():
self.owner._setDesktop( which )
+class LoopSettingsPalette( Palette ):
+ def __init__( self, label, jam ):
+ Palette.__init__( self, label )
+ self.connect('popup', self.handlePopup)
+ self.connect('popdown', self.handlePopdown)
+
+ self.jam = jam
+
+ self.tooltips = gtk.Tooltips()
+ self.loopedSound = False
+ self.soundLength = 1.00
+ self.start = 0
+ self.end = 1.00
+ self.dur = 0.01
+ self.volume = 1
+ self.register = 0
+ self.ok = True
+
+ self.mainBox = gtk.VBox()
+
+ self.controlsBox = gtk.HBox()
+
+ self.GUI = {}
+
+ self.soundBox = gtk.HBox()
+ self.soundLabel = gtk.Label(_('Sound: '))
+ self.soundMenuBox = BigComboBox()
+ self.sounds = os.listdir(Config.SNDS_DIR)
+ for sound in self.sounds:
+ self.soundMenuBox.append_item(self.sounds.index(sound), sound)
+ self.soundMenuBox.connect('changed', self.handleSound)
+ self.soundBox.pack_start(self.soundLabel, False, False, padding=10)
+ self.soundBox.pack_start(self.soundMenuBox, False, False, padding=10)
+
+ self.mainBox.pack_start(self.soundBox, False, False, 10)
+
+ nameBox = gtk.VBox()
+ self.nameEntry = gtk.Entry()
+ entrycolor = gtk.gdk.Color()
+ self.nameEntry.modify_text(gtk.STATE_NORMAL, entrycolor)
+ self.nameEntry.set_text("name_of_the_sound")
+ nameBox.pack_start(self.nameEntry)
+ self.mainBox.pack_start(nameBox, False, False, 10)
+
+ registerBox = gtk.HBox()
+ self.registerBoxLabel = gtk.Label(_('Register: '))
+ self.registerMenuBox = BigComboBox()
+ self.registers = ['LOW', 'MID', 'HIGH', 'PUNCH']
+ for reg in self.registers:
+ self.registerMenuBox.append_item(self.registers.index(reg), reg)
+ self.registerMenuBox.connect('changed', self.handleRegister)
+ registerBox.pack_start(self.registerBoxLabel, False, False, padding=10)
+ registerBox.pack_end(self.registerMenuBox, False, False, padding=10)
+ self.mainBox.pack_start(registerBox, False, False, 10)
+
+ loopedBox = gtk.HBox()
+ loopedLabel = gtk.Label("Looped sound: ")
+ loopedToggle = ImageToggleButton(Config.IMAGE_ROOT+"checkOff.svg",Config.IMAGE_ROOT+"checkOn.svg")
+ loopedToggle.connect('button-press-event', self.handleLooped )
+ loopedBox.pack_start(loopedLabel, False, False, padding=10)
+ loopedBox.pack_end(loopedToggle, False, False, padding=10)
+ self.mainBox.pack_start(loopedBox, False, False, 10)
+
+ startBox = gtk.VBox()
+ self.startAdjust = gtk.Adjustment( 0.01, 0, 1., .001, .001, 0)
+ self.GUI['startSlider'] = gtk.VScale( adjustment = self.startAdjust )
+ self.startAdjust.connect("value-changed", self.handleStart)
+ self.GUI['startSlider'].set_inverted(True)
+ self.GUI['startSlider'].set_size_request(50, 200)
+ self.GUI['startSlider'].set_digits(3)
+ self.handleStart( self.startAdjust )
+ startBox.pack_start(self.GUI['startSlider'], True, True, 5)
+ self.controlsBox.pack_start(startBox)
+
+ endBox = gtk.VBox()
+ self.endAdjust = gtk.Adjustment( 0.9, 0, 1, .001, .001, 0)
+ self.GUI['endSlider'] = gtk.VScale( adjustment = self.endAdjust )
+ self.endAdjust.connect("value-changed", self.handleEnd)
+ self.GUI['endSlider'].set_inverted(True)
+ self.GUI['endSlider'].set_size_request(50, 200)
+ self.GUI['endSlider'].set_digits(3)
+ self.handleEnd( self.endAdjust )
+ endBox.pack_start(self.GUI['endSlider'], True, True, 5)
+ self.controlsBox.pack_start(endBox)
+
+ durBox = gtk.VBox()
+ self.durAdjust = gtk.Adjustment( 0.01, 0, 0.2, .001, .001, 0)
+ self.GUI['durSlider'] = gtk.VScale( adjustment = self.durAdjust )
+ self.durAdjust.connect("value-changed", self.handleDur)
+ self.GUI['durSlider'].set_inverted(True)
+ self.GUI['durSlider'].set_size_request(50, 200)
+ self.GUI['durSlider'].set_digits(3)
+ self.handleDur( self.durAdjust )
+ durBox.pack_start(self.GUI['durSlider'], True, True, 5)
+ self.controlsBox.pack_start(durBox)
+
+ volBox = gtk.VBox()
+ self.volAdjust = gtk.Adjustment( 1, 0, 2, .01, .01, 0)
+ self.GUI['volSlider'] = gtk.VScale( adjustment = self.volAdjust )
+ self.volAdjust.connect("value-changed", self.handleVol)
+ self.GUI['volSlider'].set_inverted(True)
+ self.GUI['volSlider'].set_size_request(50, 200)
+ self.GUI['volSlider'].set_digits(3)
+ self.handleVol( self.volAdjust )
+ volBox.pack_start(self.GUI['volSlider'], True, True, 5)
+ self.controlsBox.pack_start(volBox)
+
+ self.mainBox.pack_start(self.controlsBox, False, False, 10)
+
+ previewBox = gtk.VBox()
+ self.playStopButton = ImageToggleButton(Config.IMAGE_ROOT + 'miniplay.png', Config.IMAGE_ROOT + 'stop.png')
+ self.playStopButton.connect('button-press-event' , self.handlePlayButton)
+ previewBox.pack_start(self.playStopButton)
+ self.mainBox.pack_start(previewBox, False, False, 10)
+
+ checkBox = gtk.VBox()
+ checkButton = ImageButton(Config.TAM_TAM_ROOT + '/icons/accept.svg')
+ checkButton.connect('clicked' , self.handleCheck)
+ checkBox.pack_start(checkButton)
+ self.mainBox.pack_start(checkBox, False, False, 10)
+
+ self.mainBox.show_all()
+ self.set_content(self.mainBox)
+
+ def handlePopup(self, widget, data=None):
+ self.setButtonState()
+ self.soundMenuBox.remove_all()
+ self.sounds = os.listdir(Config.SNDS_DIR)
+ for sound in self.sounds:
+ self.soundMenuBox.append_item(self.sounds.index(sound), sound)
+ self.nameEntry.set_text("name_of_the_sound")
+
+ def handlePopdown(self, widget, data=None):
+ if self.playStopButton.get_active() == True:
+ self.jam.loopSettingsPlayStop(True, self.loopedSound)
+
+ def handleSound(self, widget, data=None):
+ self.sndname = self.sounds[widget.props.value]
+ fullname = Config.SNDS_DIR + '/' + self.sndname
+ results = commands.getstatusoutput("du -b %s" % fullname)
+ if results[0] == 0:
+ list = results[1].split()
+ soundLength = float(list[0]) / 2 / 16000.
+ self.nameEntry.set_text(self.sndname)
+ self.set_values(soundLength)
+ self.startAdjust.set_all( 0.01, 0, soundLength, .001, .001, 0)
+ self.endAdjust.set_all( soundLength-0.01, 0, soundLength, .001, .001, 0)
+ self.timeoutLoad = gobject.timeout_add(2000, self.loopSettingsDelay)
+
+ def loopSettingsDelay(self):
+ self.jam.load_ls_instrument(self.sndname)
+ gobject.source_remove( self.timeoutLoad )
+
+ def handleCheck(self, widget):
+ if self.nameEntry.get_text() != self.sndname:
+ oldName = self.sndname
+ self.sndname = self.nameEntry.get_text()
+ copy = True
+ else:
+ copy = False
+
+ ofile = open(Config.SNDS_INFO_DIR + '/' + self.sndname, 'w')
+ if self.loopedSound:
+ tied = str(Config.INST_TIED)
+ else:
+ tied = str(Config.INST_SIMP)
+ register = str(self.register)
+ category = 'mysounds'
+ start = str(self.start)
+ end = str(self.end)
+ dur = str(self.dur)
+ vol = str(self.volume)
+
+ ofile.write('TamTam idf v1\n')
+ ofile.write(self.sndname + '\n')
+ ofile.write(tied + '\n')
+ ofile.write(register + '\n')
+ ofile.write(start + '\n')
+ ofile.write(end + '\n')
+ ofile.write(dur + '\n')
+ ofile.write(vol + '\n')
+ ofile.write(self.sndname + '\n')
+ ofile.write(Config.LIB_DIR+"/Images/"+self.sndname+".png\n")
+ ofile.write(category)
+ ofile.close()
+ if copy:
+ (s,o) = commands.getstatusoutput('cp ' + Config.SNDS_DIR + '/' + oldName + ' ' + Config.SNDS_DIR + '/' + self.sndname)
+
+ def set_values(self, soundLength):
+ self.soundLength = soundLength
+ self.handleStart(self.GUI['startSlider'])
+ self.handleEnd(self.GUI['endSlider'])
+
+ def handleLooped(self, widget, data=None):
+ if widget.get_active() == True:
+ self.loopedSound = False
+ else:
+ self.loopedSound = True
+
+ def handleRegister(self, widget, data=None):
+ self.register = self.registers[widget.props.value]
+
+ def handleStart(self, widget, data=None):
+ self.start = self.startAdjust.value
+ if self.start > self.end:
+ self.start = self.end
+ self.jam.loopSettingsChannel('lstart', self.start)
+
+ def handleEnd(self, widget, data=None):
+ self.end = self.endAdjust.value
+ if self.end < self.start:
+ self.end = self.start
+ self.jam.loopSettingsChannel('lend', self.end)
+
+ def handleDur(self, widget, data=None):
+ self.dur = self.durAdjust.value
+ self.jam.loopSettingsChannel('ldur', self.dur)
+
+ def handleVol(self, widget, data=None):
+ self.volume = self.volAdjust.value
+ self.jam.loopSettingsChannel('lvol', self.volume)
+
+ def handlePlayButton(self, widget, data=None):
+ if self.ok:
+ self.jam.loopSettingsPlayStop(widget.get_active(), self.loopedSound)
+ if self.loopedSound == False and widget.get_active() == False:
+ self.timeoutStop = gobject.timeout_add(int(self.soundLength * 1000)+500, self.playButtonState)
+
+ def setButtonState(self):
+ self.ok = False
+ self.playStopButton.set_active(False)
+ self.ok = True
+
+ def playButtonState(self):
+ self.ok = False
+ self.playStopButton.set_active(False)
+ gobject.source_remove(self.timeoutStop)
+ self.ok = True