From fbd47da49acd5d08f6a44e457f1e648769f06d7a Mon Sep 17 00:00:00 2001 From: amartin Date: Wed, 08 Aug 2007 07:04:24 +0000 Subject: Jam drawing --- (limited to 'Jam/Picker.py') diff --git a/Jam/Picker.py b/Jam/Picker.py index 5c1627b..6e436ef 100644 --- a/Jam/Picker.py +++ b/Jam/Picker.py @@ -3,44 +3,73 @@ import pygtk pygtk.require( '2.0' ) import gtk +import random #TEMP + import Jam.Block as Block class Picker( gtk.HBox ): - INSTRUMENTS = 0 - LOOPS = 1 - DRUMKITS = 2 - - def __init__( self, owner, type, filter = None ): + def __init__( self, owner, filter = None ): gtk.HBox.__init__( self ) self.owner = owner - self.type = type self.filter = filter self.desktop = owner.getDesktop() - # temp - dummy = gtk.Button("dummy") - dummy.add_events(gtk.gdk.BUTTON_MOTION_MASK) - dummy.connect( "button-press-event", self.button_press ) - dummy.connect( "button-release-event", self.button_release ) - dummy.connect( "motion-notify-event", self.motion_notify ) + self.scrollLeft = gtk.Button( "<" ) + self.pack_start( self.scrollLeft, False, False ) + + self.scrolledWindow = gtk.ScrolledWindow() + self.scrolledWindow.set_policy( gtk.POLICY_ALWAYS, gtk.POLICY_NEVER ) + self.pack_start( self.scrolledWindow ) + self.hadjustment = self.scrolledWindow.get_hadjustment() + + self.scrollRight = gtk.Button( ">" ) + self.pack_start( self.scrollRight, False, False ) + + self.pickerBox = gtk.HBox() + self.scrolledWindow.add_with_viewport( self.pickerBox ) + + self.show_all() + + self.scroll = {} + self.scroll[filter] = 0 + + self.blocks = [] - self.pack_start( dummy, False, False ) + def addBlock( self, name ): + block = gtk.Button(name) + block.add_events(gtk.gdk.BUTTON_MOTION_MASK) + block.connect( "button-press-event", self.button_press ) + block.connect( "button-release-event", self.button_release ) + block.connect( "motion-notify-event", self.motion_notify ) + + self.blocks.append( block ) + + # TODO test against filter + self.pickerBox.pack_start( block, False, False ) + block.show() + + def getFilter( self ): + return filter + + def setFilter( self, filter ): + # TODO apply filter + + self.scroll[self.filter] = self.hadjustment.get_value() + + if self.scroll.has_key( filter ): + self.hadjustment.set_value( self.scroll[filter] ) + else: + self.hadjustment.set_value( 0 ) + self.scroll[filter] = 0 + + self.filter = filter def button_press( self, widget, event ): - alloc = widget.get_allocation() - if self.type == Picker.INSTRUMENTS: - blockClass = Block.Instrument - blockData = [] - loc = ( alloc.x + event.x - blockClass.WIDTH_DIV2, -1 ) - elif self.type == Picker.LOOPS: - pass - elif self.type == Picker.DRUMKITS: - pass - self.desktop.addBlock( blockClass, blockData, loc, True ) + pass def button_release( self, widget, event ): self.desktop.button_release( widget, event ) @@ -49,3 +78,51 @@ class Picker( gtk.HBox ): self.desktop.motion_notify( widget, event ) +class Instrument( Picker ): + + def __init__( self, owner, filter = None ): + Picker.__init__( self, owner, filter ) + + self.type = Instrument + + self.addBlock( "Instrument" ) + + def button_press( self, widget, event ): + walloc = widget.get_allocation() + salloc = self.scrolledWindow.get_allocation() + loc = ( walloc.x + salloc.x + event.x - self.hadjustment.get_value(), -1 ) + self.desktop.addBlock( Block.Instrument, [], loc, True ) + + +class Drum( Picker ): + + def __init__( self, owner, filter = None ): + Picker.__init__( self, owner, filter ) + + self.type = Drum + + self.addBlock( "Drum" ) + + def button_press( self, widget, event ): + walloc = widget.get_allocation() + salloc = self.scrolledWindow.get_allocation() + loc = ( walloc.x + salloc.x + event.x - self.hadjustment.get_value(), -1 ) + self.desktop.addBlock( Block.Drum, [], loc, True ) + + +class Loop( Picker ): + + def __init__( self, owner, filter = None ): + Picker.__init__( self, owner, filter ) + + self.type = Loop + + self.addBlock( "Loop" ) + + def button_press( self, widget, event ): + walloc = widget.get_allocation() + salloc = self.scrolledWindow.get_allocation() + loc = ( walloc.x + salloc.x + event.x - self.hadjustment.get_value(), -1 ) + self.desktop.addBlock( Block.Loop, { "beats": random.randint(1,8) }, loc, True ) + + -- cgit v0.9.1