diff options
author | Aleksey Lim <alsroot@activitycentral.org> | 2011-06-28 09:23:54 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@activitycentral.org> | 2011-06-28 09:24:48 (GMT) |
commit | 11003147ac4ea947ec5017921019d668cb4953d1 (patch) | |
tree | eaab12347c33cb62326f9eb53121eff594301638 /Mini/miniToolbars.py | |
parent | 35278d261ace09d5ed20bdae0983730d88dd8037 (diff) |
Switch to the singular sources tree and releasing scheme
Diffstat (limited to 'Mini/miniToolbars.py')
-rw-r--r-- | Mini/miniToolbars.py | 384 |
1 files changed, 384 insertions, 0 deletions
diff --git a/Mini/miniToolbars.py b/Mini/miniToolbars.py new file mode 100644 index 0000000..867e00a --- /dev/null +++ b/Mini/miniToolbars.py @@ -0,0 +1,384 @@ +import gtk +import gobject +import os, commands +import common.Config as Config +from common.Util.ThemeWidgets import * +from common.Util import OS + +from sugar.graphics.toolbutton import ToolButton +from sugar.graphics.toggletoolbutton import ToggleToolButton +from sugar.graphics.palette import Palette +from gettext import gettext as _ + +class playToolbar(gtk.Toolbar): + def __init__(self,toolbox, miniTamTam): + 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.miniTamTam = miniTamTam + + self.tooltips = gtk.Tooltips() + + self.balanceSliderImgLeft = gtk.Image() + self.balanceSliderImgRight = gtk.Image() + self.balanceSliderImgLeft.set_from_file(Config.IMAGE_ROOT + 'dru2.png') + self.balanceSliderImgRight.set_from_file(Config.IMAGE_ROOT + 'instr2.png') + self.balanceSliderImgLeftTool = gtk.ToolItem() + self.balanceSliderImgLeftTool.add(self.balanceSliderImgLeft) + self.balanceSliderImgRightTool = gtk.ToolItem() + self.balanceSliderImgRightTool.add(self.balanceSliderImgRight) + self.balanceSliderAdj = gtk.Adjustment(value=50, lower=0, upper=100, step_incr=1, page_incr=0, page_size=0) + self.balanceSliderAdj.connect("value_changed" , self.miniTamTam.handleBalanceSlider) + self.balanceSlider = gtk.HScale(adjustment = self.balanceSliderAdj) + self.balanceSlider.set_size_request(250,15) + self.balanceSlider.set_inverted(False) + self.balanceSlider.set_draw_value(False) + self.balanceSliderTool = gtk.ToolItem() + self.balanceSliderTool.add(self.balanceSlider) + self.insert(self.balanceSliderImgLeftTool, -1) + self.insert(self.balanceSliderTool, -1) + self.insert(self.balanceSliderImgRightTool, -1) + self.balanceSliderImgLeft.show() + self.balanceSliderImgLeftTool.show() + self.balanceSliderImgRight.show() + self.balanceSliderImgRightTool.show() + self.balanceSlider.show() + self.balanceSliderTool.show() + self.balanceSliderTool.set_tooltip(self.tooltips, _('Balance')) + + _insertSeparator(1) + + self.reverbSliderImgRight = gtk.Image() + self.reverbSliderImgRight.set_from_file(Config.IMAGE_ROOT + 'reverb0.png') + self.reverbSliderImgRightTool = gtk.ToolItem() + self.reverbSliderImgRightTool.add(self.reverbSliderImgRight) + + self.reverbSliderAdj = gtk.Adjustment(value=0.1, lower=0, upper=1, step_incr=0.1, page_incr=0, page_size=0) + self.reverbSliderAdj.connect("value_changed" , self.miniTamTam.handleReverbSlider) + self.reverbSlider = gtk.HScale(adjustment = self.reverbSliderAdj) + self.reverbSlider.set_size_request(250,15) + self.reverbSlider.set_inverted(False) + self.reverbSlider.set_draw_value(False) + self.reverbSliderTool = gtk.ToolItem() + self.reverbSliderTool.add(self.reverbSlider) + self.insert(self.reverbSliderTool, -1) + self.insert(self.reverbSliderImgRightTool, -1) + self.reverbSliderImgRight.show() + self.reverbSliderImgRightTool.show() + self.reverbSlider.show() + self.reverbSliderTool.show() + self.reverbSliderTool.set_tooltip(self.tooltips, _('Reverb')) + + +class recordToolbar(gtk.Toolbar): + def __init__(self,toolbox, miniTamTam): + 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.miniTamTam = miniTamTam + + self.micRec1Button = ToolButton('rec1') + self.micRec1Button.connect('clicked',self.miniTamTam.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.miniTamTam.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.miniTamTam.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.miniTamTam.micRec,'mic4') + self.insert(self.micRec4Button, -1) + self.micRec4Button.show() + self.micRec4Button.set_tooltip(('Record microphone into slot 4')) + + _insertSeparator() + + self.keyboardRecButton = ToggleToolButton('keyrec') + self.keyboardRecButton.connect('clicked', self.miniTamTam.sequencer.handleRecordButton ) + self.insert(self.keyboardRecButton, -1) + self.keyboardRecButton.show() + self.keyboardRecButton.set_tooltip(_('Click to record a loop')) + + self.keyboardRecOverButton = ToggleToolButton('overrec') + self.keyboardRecOverButton.connect('clicked', self.miniTamTam.sequencer.handleOverButton ) + self.insert(self.keyboardRecOverButton, -1) + self.keyboardRecOverButton.show() + self.keyboardRecOverButton.set_tooltip(_('Click to add a loop')) + #self.keyboardRecOverButton.set_sensitive(False) + + self.keyboardRecMinusButton = ToolButton('minusrec') + self.keyboardRecMinusButton.connect('clicked', self.miniTamTam.sequencer.clearSequencer ) + self.insert(self.keyboardRecMinusButton, -1) + self.keyboardRecMinusButton.show() + self.keyboardRecMinusButton.set_tooltip(_('Click to clear all loops')) + + _insertSeparator() + + self._loopSettingsPalette = LoopSettingsPalette(_('Add new Sound'), self.miniTamTam) + self.loopSetButton = ToggleToolButton('loop') + self.loopSetButton.set_palette(self._loopSettingsPalette) + self.insert(self.loopSetButton, -1) + self.loopSetButton.show() + +class LoopSettingsPalette( Palette ): + def __init__( self, label, mini ): + Palette.__init__( self, label ) + self.connect('popup', self.handlePopup) + self.connect('popdown', self.handlePopdown) + + self.mini = mini + + 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.DATA_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.DATA_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.mini.loopSettingsPlayStop(True, self.loopedSound) + + def handleSound(self, widget, data=None): + self.sndname = self.sounds[widget.props.value] + fullname = Config.DATA_DIR + '/' + self.sndname + results = OS.system("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.mini.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.IMAGE_ROOT+"/"+self.sndname+".png\n") + ofile.write(category) + ofile.close() + if copy: + OS.system('cp ' + Config.DATA_DIR + '/' + oldName + ' ' + Config.DATA_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.mini.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.mini.loopSettingsChannel('lend', self.end) + + def handleDur(self, widget, data=None): + self.dur = self.durAdjust.value + self.mini.loopSettingsChannel('ldur', self.dur) + + def handleVol(self, widget, data=None): + self.volume = self.volAdjust.value + self.mini.loopSettingsChannel('lvol', self.volume) + + def handlePlayButton(self, widget, data=None): + if self.ok: + self.mini.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 |