From 75dcef4ab8b11d78a4547e8027ae0905a47dbf97 Mon Sep 17 00:00:00 2001 From: Nat Date: Wed, 19 Sep 2007 17:31:08 +0000 Subject: Instrumentpanel test in edit --- (limited to 'TamTamMini.activity/Mini') diff --git a/TamTamMini.activity/Mini/Fillin.py b/TamTamMini.activity/Mini/Fillin.py index 162f8ef..8dfc23f 100644 --- a/TamTamMini.activity/Mini/Fillin.py +++ b/TamTamMini.activity/Mini/Fillin.py @@ -6,7 +6,7 @@ import gobject from RythmGenerator import * from common.Util.CSoundClient import new_csound_client from common.Util.NoteDB import Note -import common.Config as Config +import Config class Fillin: def __init__( self, nbeats, tempo, instrument, reverb, volume ): diff --git a/TamTamMini.activity/Mini/GenRythm.py b/TamTamMini.activity/Mini/GenRythm.py index 330e174..1132991 100644 --- a/TamTamMini.activity/Mini/GenRythm.py +++ b/TamTamMini.activity/Mini/GenRythm.py @@ -1,5 +1,5 @@ import random -import common.Config as Config +import Config from common.Generation.GenerationConstants import GenerationConstants from common.Generation.Utils import * diff --git a/TamTamMini.activity/Mini/InstrumentPanel.py b/TamTamMini.activity/Mini/InstrumentPanel.py new file mode 100644 index 0000000..3d93647 --- /dev/null +++ b/TamTamMini.activity/Mini/InstrumentPanel.py @@ -0,0 +1,379 @@ +#!/usr/bin/env python + +import pygtk +pygtk.require( '2.0' ) +import gtk + +import time + +import Config +from common.Util.ThemeWidgets import * +Tooltips = Config.Tooltips + +class InstrumentPanel( gtk.EventBox ): + def __init__(self,setInstrument = None, playInstrument = None, enterMode = False, micRec = None, synthRec = None, rowLen = 8, _instDic = None, force_load = True ): + gtk.EventBox.__init__(self) + + self.setInstrument = setInstrument + self.playInstrument = playInstrument + self.micRec = micRec + self.synthRec = synthRec + self.rowLen = rowLen + self.enterMode = enterMode + + self.instDic = _instDic + + self.loaded = False + self.loadData = {} + self.loadStage = [0,0,0] + if force_load: self.load() + + def configure( self, setInstrument = None, playInstrument = None, enterMode = False, micRec = None, synthRec = None, rowLen = 8 ): + + self.setInstrument = setInstrument + self.playInstrument = playInstrument + self.enterMode = enterMode + self.micRec = micRec + + if self.rowLen != rowLen: + self.rowLen = rowLen + self.prepareInstrumentTable( self.category ) + else: + self.rowLen = rowLen + + def load( self, timeout = -1 ): + if self.loaded: return True + if Config.DEBUG > 4: print "InstrumentPanel load", self.loadStage + + if self.loadStage[0] == 0: + color = gtk.gdk.color_parse(Config.PANEL_BCK_COLOR) + self.modify_bg(gtk.STATE_NORMAL, color) + self.loadStage[0] = 1 + if timeout >= 0 and time.time() > timeout: return False + + if self.loadStage[0] == 1: + self.tooltips = gtk.Tooltips() + self.loadStage[0] = 2 + if timeout >= 0 and time.time() > timeout: return False + + if self.loadStage[0] == 2: + self.instTable = None + self.recstate = False + self.lastInstrumentWidget = None + + self.mainVBox = gtk.VBox() + self.loadStage[0] = 3 + if timeout >= 0 and time.time() > timeout: return False + + if self.loadStage[0] == 3: + if not self.loadInstrumentList( timeout, self.loadStage ): + return False + self.loadStage[0] = 4 + if timeout >= 0 and time.time() > timeout: return False + + if self.loadStage[0] == 4: + if not self.loadToolbar( timeout, self.loadStage ): + return False + self.loadStage[0] = 5 + if timeout >= 0 and time.time() > timeout: return False + + if self.loadStage[0] == 5: + if self.instDic == None: + self.instDic = {} + self.loadStage[0] = 5.1 + else: + self.loadStage[0] = 6 + + if self.loadStage[0] == 5.1: + if not self.loadInstDic( self.instDic, timeout, self.loadStage ): + return False + self.loadStage[0] = 6 + if timeout >= 0 and time.time() > timeout: return False + + if self.loadStage[0] == 6: + self.loadInstrumentViewport() + self.loadStage[0] = 7 + if timeout >= 0 and time.time() > timeout: return False + + if self.loadStage[0] == 7: + self.prepareInstrumentTable() + self.loadStage[0] = 8 + if timeout >= 0 and time.time() > timeout: return False + + self.add(self.mainVBox) + self.show_all() + + self.loaded = True + return True + + def loadInstrumentList( self, timeout = -1, loadStage = [0,0,0] ): + + if loadStage[1] == 0: + self.instrumentList = { "all": [], "all.enterMode": [], "percussions.enterMode": [], "lab": [], "mic": [], "kit": [] } + for category in Config.CATEGORIES: + self.instrumentList[category] = [] + loadStage[1] = 1 + if timeout >= 0 and time.time() > timeout: return False + + if loadStage[1] == 1: + keys = Config.INSTRUMENTS.keys() + for i in range(loadStage[2], len(keys)): + key = keys[i] + instrument = Config.INSTRUMENTS[key] + if key[0:4] != 'drum' and key[0:4] != 'guid' and key[0:3] != 'mic' and key[0:3] != 'lab': + self.instrumentList["all"].append( key ) + if key[0:4] != 'drum' and key[0:4] != 'guid' and key[0:3] != 'mic' and key[0:3] != 'lab': + self.instrumentList["all.enterMode"].append( key ) + if key[0:4] != 'drum' and key[0:4] != 'guid': + self.instrumentList[instrument.category].append( key ) + if instrument.category == "percussions": + self.instrumentList["percussions.enterMode"].append( key ) + if instrument.category == "kit": + self.instrumentList["kit"].append( key ) + loadStage[2] += 1 + if timeout >= 0 and time.time() > timeout: return False + + loadStage[1] = 2 + loadStage[2] = 0 + + self.instrumentList["mic"].sort() + self.instrumentList["lab"].sort() + + self.instrumentList["all"] += self.instrumentList["kit"] + self.instrumentList["mic"] + self.instrumentList["lab"] + self.instrumentList["all.enterMode"] += self.instrumentList["mic"] + self.instrumentList["lab"] + self.instrumentList["percussions"] += self.instrumentList["kit"] + self.instrumentList["people"] += self.instrumentList["mic"] + self.instrumentList["keyboard"] += self.instrumentList["lab"] + + loadStage[1] = 0 + return True + + def loadToolbar( self, timeout = -1, loadStage = [0,0,0] ): + if loadStage[1] == 0: + self.loadData["toolbarBox"] = gtk.HBox() + self.firstTbBtn = None + self.loadStage[1] = 1 + if timeout >= 0 and time.time() > timeout: return False + + for i in range(loadStage[1]-1, len(Config.CATEGORIES)): + category = Config.CATEGORIES[i] + if loadStage[2] == 0: + self.loadData["btnBox"] = RoundVBox(fillcolor = Config.CATEGORY_BCK_COLOR, bordercolor = Config.PANEL_BCK_COLOR, radius = Config.PANEL_RADIUS) + self.loadData["btnBox"].set_border_width(Config.PANEL_SPACING) + loadStage[2] = 1 + if timeout >= 0 and time.time() > timeout: return False + + if loadStage[2] == 1: + self.loadData["btn"] = ImageRadioButton(self.firstTbBtn,Config.IMAGE_ROOT + category + '.png', Config.IMAGE_ROOT + category + 'sel.png', Config.IMAGE_ROOT + category + 'sel.png') + loadStage[2] = 2 + if timeout >= 0 and time.time() > timeout: return False + + if self.firstTbBtn == None: + self.firstTbBtn = self.loadData["btn"] + self.loadData["btn"].connect('clicked',self.handleToolbarBtnPress,category) + self.loadData["btnBox"].add(self.loadData["btn"]) + self.loadData["toolbarBox"].pack_start(self.loadData["btnBox"],True,True) + + loadStage[2] = 0 + loadStage[1] += 1 + if timeout >= 0 and time.time() > timeout: return False + + self.mainVBox.pack_start(self.loadData["toolbarBox"],False,False) + + self.loadData.pop("btn") + self.loadData.pop("btnBox") + self.loadData.pop("toolbarBox") + loadStage[1] = 0 + return True + + def loadInstDic( self, instDic, timeout = -1, loadStage = [0,0,0] ): + + if loadStage[1] == 0: + self.firstInstButton = None + self.loadData["len"] = len(self.instrumentList['all']) + loadStage[1] = 1 + if timeout >= 0 and time.time() > timeout: return False + + + for i in range( loadStage[1]-1, self.loadData["len"] ): + instrument = self.instrumentList["all"][i] + if loadStage[2] == 0: + self.loadData["instBox"] = RoundVBox(fillcolor = Config.INST_BCK_COLOR, bordercolor = Config.INSTRUMENT_GRID_COLOR, radius = Config.PANEL_RADIUS) + self.loadData["instBox"].set_border_width(Config.PANEL_SPACING) + loadStage[2] = 1 + if timeout >= 0 and time.time() > timeout: return False + + if loadStage[2] == 1: + try: + self.loadData["instButton"] = ImageRadioButton(self.firstInstButton, Config.IMAGE_ROOT + instrument + '.png' , Config.IMAGE_ROOT + instrument + 'sel.png', Config.IMAGE_ROOT + instrument + 'sel.png') + except: + self.loadData["instButton"] = ImageRadioButton(self.firstInstButton, Config.IMAGE_ROOT + 'generic.png' , Config.IMAGE_ROOT + 'genericsel.png', Config.IMAGE_ROOT + 'genericsel.png') + loadStage[2] = 2 + if timeout >= 0 and time.time() > timeout: return False + + if loadStage[2] == 2: + self.loadData["instButton"].clickedHandler = self.loadData["instButton"].connect('clicked',self.handleInstrumentButtonClick, instrument) + self.loadData["instButton"].connect('enter',self.handleInstrumentButtonEnter, instrument) + loadStage[2] = 3 + if timeout >= 0 and time.time() > timeout: return False + + self.loadData["instBox"].pack_start(self.loadData["instButton"],False,False) + instDic[instrument] = self.loadData["instBox"] + if self.firstInstButton == None: + self.firstInstButton = self.loadData["instButton"] + loadStage[2] = 0 + if timeout >= 0 and time.time() > timeout: return False + + loadStage[1] += 1 + + self.loadData.pop("instBox") + self.loadData.pop("instButton") + self.loadData.pop("len") + loadStage[1] = 0 + return True + + def loadInstrumentViewport( self ): + self.instrumentBox = RoundHBox(fillcolor = Config.INSTRUMENT_GRID_COLOR, bordercolor = Config.PANEL_BCK_COLOR, radius = Config.PANEL_RADIUS) + + self.scrollWin = gtk.ScrolledWindow() + self.scrollWin.set_policy(gtk.POLICY_NEVER,gtk.POLICY_AUTOMATIC) + + self.tableEventBox = gtk.EventBox() + color = gtk.gdk.color_parse(Config.INSTRUMENT_GRID_COLOR) + self.tableEventBox.modify_bg(gtk.STATE_NORMAL, color) + + self.scrollWin.add_with_viewport(self.tableEventBox) + self.tableEventBox.get_parent().set_shadow_type( gtk.SHADOW_NONE ) + self.instrumentBox.pack_start(self.scrollWin,True,True,0) + self.mainVBox.pack_start(self.instrumentBox) + self.show_all() + + def prepareInstrumentTable(self,category = 'all'): + + self.category = category + + if self.enterMode: + if category == "all": category = "all.enterMode" + elif category == "percussions": category = "percussions.enterMode" + + if self.instTable != None: + for child in self.instTable.get_children()[:]: + self.instTable.remove(child) + self.tableEventBox.remove(self.instTable) + self.instTable.destroy() + + instrumentNum = len(self.instrumentList[category]) + instruments = self.instrumentList[category] + + cols = self.rowLen + if instrumentNum < cols: + cols = instrumentNum + rows = (instrumentNum // cols) + if instrumentNum % cols is not 0: #S'il y a un reste + rows = rows + 1 + + self.instTable = gtk.Table(rows,cols,True) + self.instTable.set_row_spacings(0) + self.instTable.set_col_spacings(0) + + for row in range(rows): + for col in range(cols): + if row*cols+col >= instrumentNum: + break + instBox = self.instDic[instruments[row*cols+col]] + self.instTable.attach(instBox, col, col+1, row, row+1, gtk.SHRINK, gtk.SHRINK, 0, 0) + + self.tableEventBox.add(self.instTable) + self.instTable.show_all() + + def selectFirstCat(self): + self.firstTbBtn.set_active(True) + + def handleToolbarBtnPress(self, widget, category): + if widget.get_active(): + self.prepareInstrumentTable(category) + + def handleInstrumentButtonClick(self,widget,instrument): + if widget.get_active() is True and self.recstate == False: + if self.setInstrument: + widget.event( gtk.gdk.Event( gtk.gdk.LEAVE_NOTIFY ) ) # fake the leave event + self.setInstrument(instrument) + if self.playInstrument: self.playInstrument(instrument) + if self.enterMode: + pass #Close the window + + def handleInstrumentButtonEnter(self,widget,instrument): + if self.enterMode and self.playInstrument: + self.playInstrument(instrument) + + def handleMicRecButtonClick(self,widget,mic): + self.recstate = False + self.setInstrument(mic) + if self.micRec: self.micRec(mic) + + def handleRecButtonPress(self,widget,btn): + self.recstate = True + btn.set_active(True) + + def set_activeInstrument(self,instrument, state): + if len(self.instDic) > 0: + for key in self.instDic: + if key == instrument: + btn = self.instDic[key].get_children()[0] + btn.handler_block(btn.clickedHandler) + btn.set_active(state) + btn.handler_unblock(btn.clickedHandler) + + +class DrumPanel( gtk.EventBox ): + def __init__(self, setDrum = None): + gtk.EventBox.__init__(self) + color = gtk.gdk.color_parse(Config.PANEL_BCK_COLOR) + self.modify_bg(gtk.STATE_NORMAL, color) + + self.setDrum = setDrum + self.instrumentList = [] + keys = Config.INSTRUMENTS.keys() + for key in Config.INSTRUMENTS.keys(): + if Config.INSTRUMENTS[key].category == "kit": + self.instrumentList.append( key ) + self.instrumentList.sort() + self.drawDrums() + + def drawDrums(self): + firstBtn = None + btnBox = RoundHBox(fillcolor = '#6F947B', bordercolor = Config.PANEL_BCK_COLOR, radius = Config.PANEL_RADIUS) + btnBox.set_border_width(Config.PANEL_SPACING) + self.drums = {} + for drumkit in self.instrumentList: + instBox = RoundVBox(fillcolor = Config.INST_BCK_COLOR, bordercolor = Config.PANEL_COLOR, radius = Config.PANEL_RADIUS) + instBox.set_border_width(Config.PANEL_SPACING) + self.drums[drumkit] = ImageRadioButton(firstBtn, Config.IMAGE_ROOT + drumkit + '.png' , Config.IMAGE_ROOT + drumkit + 'sel.png', Config.IMAGE_ROOT + drumkit + 'sel.png') + self.drums[drumkit].clickedHandler = self.drums[drumkit].connect('clicked',self.setDrums,drumkit) + if firstBtn == None: + firstBtn = self.drums[drumkit] + instBox.pack_start(self.drums[drumkit], False, False, 0) + btnBox.pack_start(instBox, False, False, 0) + self.add(btnBox) + self.show_all() + + def setDrums(self,widget,data): + if widget.get_active(): + if self.setDrum: + widget.event( gtk.gdk.Event( gtk.gdk.LEAVE_NOTIFY ) ) # fake the leave event + self.setDrum(data) + + def set_activeInstrument( self, instrument, state ): + if instrument in self.instrumentList: + btn = self.drums[instrument] + btn.handler_block(btn.clickedHandler) + btn.set_active(state) + btn.handler_unblock(btn.clickedHandler) + +if __name__ == "__main__": + win = gtk.Window() + wc = DrumPanel(None) + win.add(wc) + win.show() + #start the gtk event loop + gtk.main() diff --git a/TamTamMini.activity/Mini/KeyboardStandAlone.py b/TamTamMini.activity/Mini/KeyboardStandAlone.py index e3c3424..436c185 100644 --- a/TamTamMini.activity/Mini/KeyboardStandAlone.py +++ b/TamTamMini.activity/Mini/KeyboardStandAlone.py @@ -2,7 +2,7 @@ import pygtk pygtk.require( '2.0' ) import gtk -import common.Config as Config +import Config from common.Generation.GenerationConstants import GenerationConstants from common.Util.NoteDB import Note from common.Util.CSoundNote import CSoundNote diff --git a/TamTamMini.activity/Mini/Loop.py b/TamTamMini.activity/Mini/Loop.py index b36281e..61cb92c 100755 --- a/TamTamMini.activity/Mini/Loop.py +++ b/TamTamMini.activity/Mini/Loop.py @@ -1,4 +1,4 @@ -import common.Config as Config +import Config import random import lps from common.Generation.Drunk import * diff --git a/TamTamMini.activity/Mini/MiniSequencer.py b/TamTamMini.activity/Mini/MiniSequencer.py index 991ee13..639b684 100644 --- a/TamTamMini.activity/Mini/MiniSequencer.py +++ b/TamTamMini.activity/Mini/MiniSequencer.py @@ -3,7 +3,7 @@ pygtk.require( '2.0' ) import gtk import gobject import time -import common.Config as Config +import Config from common.Util.CSoundNote import CSoundNote from common.Util.CSoundClient import new_csound_client from common.Util.NoteDB import Note diff --git a/TamTamMini.activity/Mini/NoteStdAlone.py b/TamTamMini.activity/Mini/NoteStdAlone.py index 0dd4638..a331719 100644 --- a/TamTamMini.activity/Mini/NoteStdAlone.py +++ b/TamTamMini.activity/Mini/NoteStdAlone.py @@ -1,4 +1,4 @@ -import common.Config as Config +import Config from common.Util.CSoundClient import CSoundClient from common.Generation.GenerationConstants import GenerationConstants diff --git a/TamTamMini.activity/Mini/RythmGenerator.py b/TamTamMini.activity/Mini/RythmGenerator.py index 537f598..3231eb8 100644 --- a/TamTamMini.activity/Mini/RythmGenerator.py +++ b/TamTamMini.activity/Mini/RythmGenerator.py @@ -1,6 +1,6 @@ import random -import common.Config as Config +import Config from common.Util.CSoundNote import CSoundNote from common.Generation.GenerationConstants import GenerationConstants from GenRythm import GenRythm diff --git a/TamTamMini.activity/Mini/miniTamTamMain.py b/TamTamMini.activity/Mini/miniTamTamMain.py index f3916a9..843c5fc 100644 --- a/TamTamMini.activity/Mini/miniTamTamMain.py +++ b/TamTamMini.activity/Mini/miniTamTamMain.py @@ -14,7 +14,7 @@ from common.Util.NoteDB import PARAMETER import common.Util.Network as Net -import common.Config as Config +import Config from Mini.miniToolbars import playToolbar from Mini.miniToolbars import recordToolbar @@ -31,7 +31,7 @@ from MiniSequencer import MiniSequencer from Loop import Loop from RythmGenerator import * from common.Util.Trackpad import Trackpad -from common.Util.InstrumentPanel import InstrumentPanel +from Mini.InstrumentPanel import InstrumentPanel from gettext import gettext as _ diff --git a/TamTamMini.activity/Mini/miniToolbars.py b/TamTamMini.activity/Mini/miniToolbars.py index 7fc518e..057262b 100644 --- a/TamTamMini.activity/Mini/miniToolbars.py +++ b/TamTamMini.activity/Mini/miniToolbars.py @@ -1,7 +1,7 @@ #!/usr/bin/env python import gtk -import common.Config as Config +import Config from sugar.graphics.toolbutton import ToolButton from sugar.graphics.toggletoolbutton import ToggleToolButton -- cgit v0.9.1