Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Edit/Properties.py
diff options
context:
space:
mode:
authoramartin <olpc@localhost.localdomain>2007-03-20 19:06:13 (GMT)
committer amartin <olpc@localhost.localdomain>2007-03-20 19:06:13 (GMT)
commit5f29f86ef43b756ccdd8c7001a7093ce54b38745 (patch)
tree725c3e9b8dfdf4ee9d6c58307eb926907623c5e5 /Edit/Properties.py
parent5424e03d7148b80f24388aa07291ee364b7f59c5 (diff)
temporary save load buttons
Diffstat (limited to 'Edit/Properties.py')
-rw-r--r--Edit/Properties.py350
1 files changed, 236 insertions, 114 deletions
diff --git a/Edit/Properties.py b/Edit/Properties.py
index 46466e4..247b30e 100644
--- a/Edit/Properties.py
+++ b/Edit/Properties.py
@@ -4,67 +4,53 @@ import gtk
from types import *
from math import sqrt
from Util.ThemeWidgets import *
+from Util.NoteDB import PARAMETER
import Config
-class Properties( gtk.Window ):
- def __init__(self, context):
- gtk.Window.__init__( self, gtk.WINDOW_TOPLEVEL )
- self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG)
- self.set_position( gtk.WIN_POS_CENTER )
- self.set_default_size(30, 300)
- self.move(270, 305)
- self.set_border_width(0)
- self.set_decorated(False)
- self.mainBox = RoundVBox(fillcolor="#FFF", bordercolor="#FFF")
- self.mainBox.set_radius(10)
-
- self.pitch = .4
- self.volume = .4
- self.pan = .4
- self.reverb = .4
- self.attack = .4
- self.decay = .4
- self.filterCutoff = .4
- self.filterType = 0
+class Properties( gtk.VBox ):
+ def __init__( self, noteDB, doneHandler ):
+ gtk.VBox.__init__( self )
- self.setupWindow()
- self.add(self.mainBox)
- self.show_all()
+ self.noteDB = noteDB
+ self.doneHandler = doneHandler
- def delete_event(self, widget, event, data=None):
- return False
+ self.context = "page"
+ self.notes = {} # notes indexed by page and track
+ self.setup = False # flag to block note updates durning setup
+
+ self.filterType = 0
- def setupWindow( self ):
- self.connect("delete_event", self.delete_event)
self.parametersBox = RoundVBox(fillcolor=Config.INST_BCK_COLOR, bordercolor=Config.PANEL_BCK_COLOR)
self.parametersBox.set_border_width(1)
self.parametersBox.set_radius(10)
- self.mainBox.pack_start(self.parametersBox)
+ self.pack_start(self.parametersBox)
controlsBox = gtk.HBox()
pitchBox = RoundVBox(fillcolor=Config.PANEL_COLOR, bordercolor=Config.INST_BCK_COLOR)
pitchBox.set_border_width(3)
pitchBox.set_radius(10)
- self.pitchAdjust = gtk.Adjustment(.4, 0, 1, .01, .01, 0)
- self.pitchAdjust.connect("value-changed", self.handlePitch)
- pitchSlider = ImageVScale( Config.TAM_TAM_ROOT + "/Resources/Images/sliderEditVolume.png", self.pitchAdjust, 7 )
- pitchSlider.set_inverted(True)
- pitchSlider.set_size_request(50, 250)
- self.pitchLabel = gtk.Image()
- self.pitchLabel.set_from_file(Config.IMAGE_ROOT + 'propPitch2.png')
- pitchBox.pack_start(pitchSlider, True, True, 5)
- pitchBox.pack_start(self.pitchLabel, False, padding=10)
+ pitchUp = ImageButton( Config.IMAGE_ROOT+"arrowEditUp.png", Config.IMAGE_ROOT+"arrowEditUpDown.png", Config.IMAGE_ROOT+"arrowEditUpOver.png", backgroundFill = Config.PANEL_COLOR )
+ #pitchUp.set_size_request( 25, toolPanelHeight )
+ pitchUp.connect( "clicked", lambda w:self.incrementPitch( 1 ) )
+ pitchBox.pack_start( pitchUp )
+ self.pitchIcon = gtk.Image()
+ self.pitchIcon.set_from_file(Config.IMAGE_ROOT + 'propPitch2.png')
+ pitchBox.pack_start(self.pitchIcon)
+ pitchDown = ImageButton( Config.IMAGE_ROOT+"arrowEditDown.png", Config.IMAGE_ROOT+"arrowEditDownDown.png", Config.IMAGE_ROOT+"arrowEditDownOver.png", backgroundFill = Config.PANEL_COLOR )
+ #pitchDown.set_size_request( , )
+ pitchDown.connect( "clicked", lambda w:self.incrementPitch( -1 ) )
+ pitchBox.pack_start( pitchDown )
controlsBox.pack_start(pitchBox)
volumeBox = RoundVBox(fillcolor=Config.PANEL_COLOR, bordercolor=Config.INST_BCK_COLOR)
volumeBox.set_border_width(3)
volumeBox.set_radius(10)
self.volumeAdjust = gtk.Adjustment(.4, 0, 1, .01, .01, 0)
- self.volumeAdjust.connect("value-changed", self.handleVolume)
volumeSlider = ImageVScale( Config.TAM_TAM_ROOT + "/Resources/Images/sliderEditVolume.png", self.volumeAdjust, 7 )
+ self.volumeAdjust.connect("value-changed", self.handleVolume)
volumeSlider.set_inverted(True)
- volumeSlider.set_size_request(50, 250)
+ volumeSlider.set_size_request(50, 175)
self.volumeLabel = gtk.Image()
self.volumeLabel.set_from_file(Config.IMAGE_ROOT + 'propVolume1.png')
volumeBox.pack_start(volumeSlider, True, True, 5)
@@ -74,13 +60,14 @@ class Properties( gtk.Window ):
panBox = RoundVBox(fillcolor=Config.PANEL_COLOR, bordercolor=Config.INST_BCK_COLOR)
panBox.set_border_width(3)
panBox.set_radius(10)
- self.panAdjust = gtk.Adjustment(.4, 0, 1, .01, .01, 0)
- self.panAdjust.connect("value-changed", self.handlePan)
+ self.panAdjust = gtk.Adjustment( 0.5, 0, 1, .1, .1, 0)
panSlider = ImageVScale( Config.TAM_TAM_ROOT + "/Resources/Images/sliderEditVolume.png", self.panAdjust, 7 )
+ self.panAdjust.connect("value-changed", self.handlePan)
+ panSlider.set_snap( 0.1 )
panSlider.set_inverted(True)
- panSlider.set_size_request(50, 250)
+ panSlider.set_size_request(50, 175)
self.panLabel = gtk.Image()
- self.panLabel.set_from_file(Config.IMAGE_ROOT + 'propPan1.png')
+ self.handlePan( self.panAdjust )
panBox.pack_start(panSlider, True, True, 5)
panBox.pack_start(self.panLabel, False, padding=10)
controlsBox.pack_start(panBox)
@@ -88,13 +75,14 @@ class Properties( gtk.Window ):
reverbBox = RoundVBox(fillcolor=Config.PANEL_COLOR, bordercolor=Config.INST_BCK_COLOR)
reverbBox.set_border_width(3)
reverbBox.set_radius(10)
- self.reverbAdjust = gtk.Adjustment(.4, 0, 1, .01, .01, 0)
- self.reverbAdjust.connect("value-changed", self.handleReverb)
+ self.reverbAdjust = gtk.Adjustment(0.1, 0, 1, 0.1, 0.1, 0)
reverbSlider = ImageVScale( Config.TAM_TAM_ROOT + "/Resources/Images/sliderEditVolume.png", self.reverbAdjust, 7 )
+ self.reverbAdjust.connect("value-changed", self.handleReverb)
+ reverbSlider.set_snap( 0.1 )
reverbSlider.set_inverted(True)
- reverbSlider.set_size_request(50, 250)
+ reverbSlider.set_size_request(50, 175)
self.reverbLabel = gtk.Image()
- self.reverbLabel.set_from_file(Config.IMAGE_ROOT + 'propReverb2.png')
+ self.handleReverb( self.reverbAdjust )
reverbBox.pack_start(reverbSlider, True, True, 5)
reverbBox.pack_start(self.reverbLabel, False, padding=10)
controlsBox.pack_start(reverbBox)
@@ -102,13 +90,14 @@ class Properties( gtk.Window ):
attackBox = RoundVBox(fillcolor=Config.PANEL_COLOR, bordercolor=Config.INST_BCK_COLOR)
attackBox.set_border_width(3)
attackBox.set_radius(10)
- self.attackAdjust = gtk.Adjustment(.4, 0, 1, .01, .01, 0)
- self.attackAdjust.connect("value-changed", self.handleAttack)
+ self.attackAdjust = gtk.Adjustment(0.04, 0.03, 1, .01, .01, 0)
attackSlider = ImageVScale( Config.TAM_TAM_ROOT + "/Resources/Images/sliderEditVolume.png", self.attackAdjust, 7 )
+ self.attackAdjust.connect("value-changed", self.handleAttack)
+ attackSlider.set_snap( 0.01 )
attackSlider.set_inverted(True)
- attackSlider.set_size_request(50, 250)
+ attackSlider.set_size_request(50, 175)
self.attackLabel = gtk.Image()
- self.attackLabel.set_from_file(Config.IMAGE_ROOT + 'propAtt1.png')
+ self.handleAttack( self.attackAdjust )
attackBox.pack_start(attackSlider, True, True, 5)
attackBox.pack_start(self.attackLabel, False, padding=10)
controlsBox.pack_start(attackBox)
@@ -116,69 +105,102 @@ class Properties( gtk.Window ):
decayBox = RoundVBox(fillcolor=Config.PANEL_COLOR, bordercolor=Config.INST_BCK_COLOR)
decayBox.set_border_width(3)
decayBox.set_radius(10)
- self.decayAdjust = gtk.Adjustment(.4, 0, 1, .01, .01, 0)
- self.decayAdjust.connect("value-changed", self.handleDecay)
+ self.decayAdjust = gtk.Adjustment(0.31, 0.03, 1, .01, .01, 0)
decaySlider = ImageVScale( Config.TAM_TAM_ROOT + "/Resources/Images/sliderEditVolume.png", self.decayAdjust, 7 )
+ self.decayAdjust.connect("value-changed", self.handleDecay)
+ decaySlider.set_snap( 0.01 )
decaySlider.set_inverted(True)
- decaySlider.set_size_request(50, 250)
+ decaySlider.set_size_request(50, 175)
self.decayLabel = gtk.Image()
- self.decayLabel.set_from_file(Config.IMAGE_ROOT + 'propDec1.png')
+ self.handleDecay( self.decayAdjust )
decayBox.pack_start(decaySlider, True, True, 5)
decayBox.pack_start(self.decayLabel, False, padding=10)
controlsBox.pack_start(decayBox)
- filterBox = RoundVBox(fillcolor=Config.PANEL_COLOR, bordercolor=Config.INST_BCK_COLOR)
+ filterBox = RoundHBox(fillcolor=Config.PANEL_COLOR, bordercolor=Config.INST_BCK_COLOR)
filterBox.set_border_width(3)
filterBox.set_radius(10)
- filterSliderBox = gtk.HBox()
- self.cutoffAdjust = gtk.Adjustment(.4, 0, 1, .01, .01, 0)
- self.cutoffAdjust.connect("value-changed", self.handleFilter, 0)
- cutoffSlider = ImageVScale( Config.TAM_TAM_ROOT + "/Resources/Images/sliderEditVolume.png", self.cutoffAdjust, 7 )
- cutoffSlider.set_inverted(True)
- cutoffSlider.set_size_request(50, 250)
- filterSliderBox.pack_start(cutoffSlider, True, True, 5)
-
- self.filterTypeAdjust = gtk.Adjustment( 0, 0, 2, 1, 1, 0)
- self.filterTypeAdjust.connect("value-changed", self.handleFilter, 1)
- filterTypeSlider = ImageVScale( Config.TAM_TAM_ROOT + "/Resources/Images/sliderEditVolume.png", self.filterTypeAdjust, slider_border = 7, snap = 1 )
- filterTypeSlider.set_inverted(True)
- filterTypeSlider.set_size_request(50, 250)
- filterSliderBox.pack_start(filterTypeSlider, True, True, 5)
-
- filterBox.pack_start(filterSliderBox)
-
+ filterTypeBox = gtk.VBox()
+ self.filterTypeLowButton = gtk.ToggleButton( "L" )
+ self.filterTypeLowButton.connect( "toggled", self.handleFilterType, 1 )
+ filterTypeBox.pack_start( self.filterTypeLowButton )
+ self.filterTypeHighButton = gtk.ToggleButton( "H" )
+ self.filterTypeHighButton.connect( "toggled", self.handleFilterType, 2 )
+ filterTypeBox.pack_start( self.filterTypeHighButton )
+ self.filterTypeBandButton = gtk.ToggleButton( "B" )
+ self.filterTypeBandButton.connect( "toggled", self.handleFilterType, 3 )
+ filterTypeBox.pack_start( self.filterTypeBandButton )
+ filterBox.pack_start( filterTypeBox )
+
+ self.filterSliderBox = gtk.VBox()
+ self.filterSliderBox.set_size_request(50, -1)
+ self.cutoffAdjust = gtk.Adjustment(1000, 100, 7000, 100, 100, 0)
+ self.cutoffSlider = ImageVScale( Config.TAM_TAM_ROOT + "/Resources/Images/sliderEditVolume.png", self.cutoffAdjust, 7 )
+ self.cutoffSlider.set_snap(100)
+ self.cutoffAdjust.connect("value-changed", self.handleFilter)
+ self.cutoffSlider.set_inverted(True)
+ self.cutoffSlider.set_size_request(50, 175)
+ self.filterSliderBox.pack_start(self.cutoffSlider, True, True, 5)
self.filterLabel = gtk.Image()
self.filterLabel.set_from_file(Config.IMAGE_ROOT + 'propFilter1.png')
- filterBox.pack_start(self.filterLabel, False, padding=10)
+ self.filterSliderBox.pack_start(self.filterLabel, False, padding=10)
+
+ filterBox.pack_start(self.filterSliderBox)
controlsBox.pack_start(filterBox)
self.parametersBox.pack_start(controlsBox)
- # Transport Panel Setup
- transportBox = RoundVBox(fillcolor=Config.INST_BCK_COLOR, bordercolor=Config.PANEL_BCK_COLOR)
- transportBox.set_border_width(1)
- transportBox.set_radius(10)
-
- # create cancel/check button
- transButtonBox = gtk.HBox()
- checkButton = ImageButton(Config.IMAGE_ROOT + 'check.png')
- checkButton.connect("clicked", self.applyParametersChange)
-
- cancelButton = ImageButton(Config.IMAGE_ROOT + 'closeA.png')
- cancelButton.connect("clicked", self.cancel)
-
- transButtonBox.pack_end(checkButton, False, False, 10)
- transButtonBox.pack_end(cancelButton, False, False)
- transportBox.pack_start(transButtonBox, False, False, 5)
- self.parametersBox.pack_start(transportBox)
-
-
-
- def handlePitch( self, adjust ):
- self.pitch = adjust.value
- img = int(self.pitch * 5.)
- self.pitchLabel.set_from_file(Config.IMAGE_ROOT + 'propPitch' + str(img) + '.png')
+ self.show_all()
+
+ def setContext( self, context, pageIds = None, trackIds = None, notes = {} ):
+ self.context = context
+ self.notes = {}
+ if context == "page":
+ for p in pageIds:
+ self.notes[p] = {}
+ for t in range(Config.NUMBER_OF_TRACKS):
+ self.notes[p][t] = self.noteDB.getNotesByTrack( p, t )
+ elif context == "track":
+ for p in pageIds:
+ self.notes[p] = {}
+ for t in trackIds:
+ self.notes[p][t] = self.noteDB.getNotesByTrack( p, t )
+ else:
+ self.notes = notes
+
+ for p in self.notes:
+ for t in self.notes[p]:
+ if len(self.notes[p][t]):
+ # initialize values from first note
+ self.setup = True
+ n = self.notes[p][t][0]
+ self.panAdjust.set_value( n.cs.pan )
+ self.reverbAdjust.set_value( n.cs.reverbSend )
+ self.attackAdjust.set_value( n.cs.attack )
+ self.decayAdjust.set_value( n.cs.decay )
+ if n.cs.filterType == 0:
+ self.filterTypeLowButton.set_active(False)
+ self.filterTypeHighButton.set_active(False)
+ self.filterTypeBandButton.set_active(False)
+ self.filterLabel.hide()
+ self.cutoffSlider.hide()
+ else:
+ if n.cs.filterType == 1:
+ self.filterTypeLowButton.set_active(True)
+ if n.cs.filterType == 2:
+ self.filterTypeHighButton.set_active(True)
+ if n.cs.filterType == 3:
+ self.filterTypeBandButton.set_active(True)
+ self.filterLabel.show()
+ self.cutoffSlider.show()
+ self.filterType = n.cs.filterType
+ self.cutoffAdjust.set_value( n.cs.filterCutoff )
+ self.setup = False
+ return
+
+ def incrementPitch( self, step ):
+ print step
def handleVolume( self, adjust ):
self.volume = adjust.value
@@ -186,33 +208,133 @@ class Properties( gtk.Window ):
self.volumeLabel.set_from_file(Config.IMAGE_ROOT + 'propVolume' + str(img) + '.png')
def handlePan( self, adjust ):
- self.pan = adjust.value
- img = int(self.pan * 4.)
+ img = min( 4, int(adjust.value * 5) )
self.panLabel.set_from_file(Config.IMAGE_ROOT + 'propPan' + str(img) + '.png')
+ if not self.setup:
+ stream = []
+ for p in self.notes:
+ for t in self.notes[p]:
+ if len(self.notes[p][t]):
+ stream += [ p, t, PARAMETER.PAN, len(self.notes[p][t]) ]
+ for n in self.notes[p][t]:
+ stream += [ n.id, adjust.value ]
+ if len(stream):
+ self.noteDB.updateNotes( stream + [-1] )
def handleReverb( self, adjust ):
- self.reverb = adjust.value
- img = int(self.reverb * 5.)
+ img = min( 5, int(adjust.value * 6) )
self.reverbLabel.set_from_file(Config.IMAGE_ROOT + 'propReverb' + str(img) + '.png')
+ if not self.setup:
+ stream = []
+ for p in self.notes:
+ for t in self.notes[p]:
+ if len(self.notes[p][t]):
+ stream += [ p, t, PARAMETER.REVERB, len(self.notes[p][t]) ]
+ for n in self.notes[p][t]:
+ stream += [ n.id, adjust.value ]
+ if len(stream):
+ self.noteDB.updateNotes( stream + [-1] )
def handleAttack( self, adjust ):
- self.attack = adjust.value
- img = int(self.attack * 4.)
+ val = adjust.value*adjust.value
+ img = min( 4, int(val * 5) )
self.attackLabel.set_from_file(Config.IMAGE_ROOT + 'propAtt' + str(img) + '.png')
+ if not self.setup:
+ stream = []
+ for p in self.notes:
+ for t in self.notes[p]:
+ if len(self.notes[p][t]):
+ stream += [ p, t, PARAMETER.ATTACK, len(self.notes[p][t]) ]
+ for n in self.notes[p][t]:
+ stream += [ n.id, adjust.value ]
+ if len(stream):
+ self.noteDB.updateNotes( stream + [-1] )
def handleDecay( self, adjust ):
- self.decay = adjust.value
- img = int(self.decay * 4.)
+ val = adjust.value*adjust.value
+ img = min( 4, int(val * 5) )
self.decayLabel.set_from_file(Config.IMAGE_ROOT + 'propDec' + str(img) + '.png')
+ if not self.setup:
+ stream = []
+ for p in self.notes:
+ for t in self.notes[p]:
+ if len(self.notes[p][t]):
+ stream += [ p, t, PARAMETER.DECAY, len(self.notes[p][t]) ]
+ for n in self.notes[p][t]:
+ stream += [ n.id, adjust.value ]
+ if len(stream):
+ self.noteDB.updateNotes( stream + [-1] )
+
+ def handleFilterType( self, widget, type ):
- def handleFilter( self, adjust, slider ):
- if slider == 0:
- self.filterCutoff = adjust.value
- else:
- self.filterType = adjust.value
-
- img = int(self.filterCutoff * 5.) + (int(self.filterType)*6)
- self.filterLabel.set_from_file(Config.IMAGE_ROOT + 'propFilter' + str(img) + '.png')
+ if widget.get_active():
+ if self.filterType == 0:
+ self.filterLabel.show()
+ self.cutoffSlider.show()
+
+ self.filterType = type
+ self.updateFilterLabel()
+
+ if widget != self.filterTypeLowButton and self.filterTypeLowButton.get_active():
+ self.filterTypeLowButton.set_active( False )
+ if widget != self.filterTypeBandButton and self.filterTypeBandButton.get_active():
+ self.filterTypeBandButton.set_active( False )
+ if widget != self.filterTypeHighButton and self.filterTypeHighButton.get_active():
+ self.filterTypeHighButton.set_active( False )
+ if not self.setup:
+ typestream = []
+ cutoffstream = []
+ cutoff = self.cutoffAdjust.value
+ for p in self.notes:
+ for t in self.notes[p]:
+ if len(self.notes[p][t]):
+ substream = []
+ typestream += [ p, t, PARAMETER.FILTERTYPE, len(self.notes[p][t]) ]
+ for n in self.notes[p][t]:
+ typestream += [ n.id, type ]
+ if n.cs.filterCutoff != cutoff:
+ substream += [ n.id, cutoff ]
+ if len(substream):
+ cutoffstream += [ p, t, PARAMETER.FILTERCUTOFF, len(substream)//2 ] + substream
+ if len(typestream):
+ self.noteDB.updateNotes( typestream + [-1] )
+ if len(cutoffstream):
+ self.noteDB.updateNotes( cutoffstream + [-1] )
+
+ elif type == self.filterType:
+ self.filterType = 0
+ self.filterLabel.hide()
+ self.cutoffSlider.hide()
+ if not self.setup:
+ typestream = []
+ for p in self.notes:
+ for t in self.notes[p]:
+ if len(self.notes[p][t]):
+ typestream += [ p, t, PARAMETER.FILTERTYPE, len(self.notes[p][t]) ]
+ for n in self.notes[p][t]:
+ typestream += [ n.id, 0 ]
+ if len(typestream):
+ self.noteDB.updateNotes( typestream + [-1] )
+
+ def handleFilter( self, adjust ):
+ stream = []
+ for p in self.notes:
+ for t in self.notes[p]:
+ if len(self.notes[p][t]):
+ stream += [ p, t, PARAMETER.FILTERCUTOFF, len(self.notes[p][t]) ]
+ for n in self.notes[p][t]:
+ stream += [ n.id, adjust.value ]
+ if len(stream):
+ self.noteDB.updateNotes( stream + [-1] )
+
+
+ self.updateFilterLabel()
+
+
+ def updateFilterLabel( self ):
+ val = (self.cutoffAdjust.value-self.cutoffAdjust.lower)/(self.cutoffAdjust.upper-self.cutoffAdjust.lower)
+ img = min( 5, int(val * 6) )
+ self.filterLabel.set_from_file(Config.IMAGE_ROOT + 'propFilter%d.%d' % (self.filterType, img) + '.png')
def cancel( self, widget, data=None ):
self.window.destroy()