import pygtk pygtk.require( '2.0' ) import gtk from gettext import gettext as _ from sugar.graphics.palette import Palette, WidgetInvoker from sugar.graphics.radiotoolbutton import RadioToolButton from sugar.graphics.toolbutton import ToolButton from sugar.graphics.toggletoolbutton import ToggleToolButton from sugar.graphics.combobox import ComboBox from sugar.graphics.toolcombobox import ToolComboBox import common.Config as Config class JamToolbar( gtk.Toolbar ): def __init__( self, owner ): gtk.Toolbar.__init__( self ) self.owner = owner self.toolItem = {} self.volumeImg = gtk.Image() self.stopButton = ToolButton('media-playback-stop') self.stopButton.connect('clicked',self.handleStopButton) 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 ) self.volumeSlider.set_size_request( 270, -1 ) self.volumeSlider.set_draw_value( False ) self._add_tooltip( self.volumeSlider, _("Master Volume") ) self._insert_widget( self.volumeSlider, -1 ) self._insert_widget( self.volumeImg, -1 ) self._insert_separator( True ) self.tempoImg = gtk.Image() self.tempoAdjustment = gtk.Adjustment( Config.PLAYER_TEMPO_LOWER, Config.PLAYER_TEMPO_LOWER, Config.PLAYER_TEMPO_UPPER+1, 10, 10, 0 ) self.tempoAdjustment.connect( 'value-changed', self.handleTempo ) self.tempoSlider = gtk.HScale( adjustment = self.tempoAdjustment ) self.tempoSlider.set_size_request( 270, -1 ) self.tempoSlider.set_draw_value( False ) self._add_tooltip( self.tempoSlider, _("Tempo") ) self._insert_widget( self.tempoSlider, -1 ) self._insert_widget( self.tempoImg, -1 ) self._insert_separator( True ) label = gtk.Label( _("Sync to:") ) self.syncLabel = gtk.ToolItem() self.syncLabel.add( label ) self.insert( self.syncLabel, -1 ) self.comboBox = ComboBox() self.comboBox.append_item( 1, _("1 Beat") ) self.comboBox.append_item( 2, _("2 Beats") ) self.comboBox.append_item( 3, _("3 Beats") ) self.comboBox.append_item( 4, _("4 Beats") ) self.comboBox.append_item( 5, _("5 Beats") ) self.comboBox.append_item( 6, _("6 Beats") ) self.comboBox.append_item( 7, _("7 Beats") ) self.comboBox.append_item( 8, _("8 Beats") ) self.comboBox.append_item( 9, _("9 Beats") ) self.comboBox.append_item( 10, _("10 Beats") ) self.comboBox.append_item( 11, _("11 Beats") ) self.comboBox.append_item( 12, _("12 Beats") ) self.comboBox.set_active( 4 - 1 ) # default 4 beats self.comboBox.connect( "changed", self.changeSync ) self.syncBox = ToolComboBox( self.comboBox ) self.insert( self.syncBox, -1 ) self.show_all() #def _add_palette( self, widget, palette, position = Palette.DEFAULT ): def _add_palette( self, widget, palette ): 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 ) ) def _insert_widget( self, widget, pos ): self.toolItem[ widget ] = gtk.ToolItem() self.toolItem[ widget ].add( widget ) self.insert( self.toolItem[ widget ], pos ) def _insert_separator( self, expand = False ): separator = gtk.SeparatorToolItem() separator.set_draw( False ) separator.set_expand( expand ) self.insert( separator, -1 ) def setSyncBeats( self, beats ): self.comboBox.set_active( beats - 1 ) def changeSync( self, widget ): self.owner._setSyncBeats( widget.get_active() + 1 ) def mapRange( self, value, ilower, iupper, olower, oupper ): 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) def handleVolume( self, widget ): self.owner._setVolume( widget.get_value() ) img = self.mapRange( widget.value, widget.lower, widget.upper, 0, 3 ) self.volumeImg.set_from_file(Config.TAM_TAM_ROOT + '/icons/volume' + str(img) + '.svg') def handleTempo( self, widget ): self.owner._setTempo( widget.get_value() ) img = self.mapRange( widget.value, widget.lower, widget.upper, 1, 8 ) self.tempoImg.set_from_file(Config.TAM_TAM_ROOT + '/icons/tempo' + str(img) + '.svg') class DesktopToolbar( gtk.Toolbar ): def __init__( self, owner ): gtk.Toolbar.__init__( self ) self.owner = owner 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() def _insert_separator( self, expand = False ): separator = gtk.SeparatorToolItem() separator.set_draw( False ) separator.set_expand( expand ) self.insert( separator, -1 ) def getDesktopButton( self, which ): return self.desktop[which] def setDesktop( self, widget, which ): if widget.get_active(): self.owner._setDesktop( which )