From 53044aa9cb2d0074a5fdcb590f88d0eb0a326230 Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Wed, 17 Dec 2008 22:06:05 +0000 Subject: use ScrolledToolbar in Mini/InstrumentPanel --- diff --git a/TamTamJam.activity/Jam/Picker.py b/TamTamJam.activity/Jam/Picker.py index 99adcb7..f44c29f 100644 --- a/TamTamJam.activity/Jam/Picker.py +++ b/TamTamJam.activity/Jam/Picker.py @@ -38,7 +38,7 @@ class Picker( ScrolledToolbar ): self.pickerBox = gtk.HBox() self.set_viewport(self.pickerBox) - self.pickerBox.get_parent().modify_bg( gtk.STATE_NORMAL, self.colors["Picker_Bg"] ) + self.modify_bg( gtk.STATE_NORMAL, self.colors["Picker_Bg"] ) # spacers self.pickerBox.pack_start( gtk.Label(" "), True, True ) diff --git a/TamTamMini.activity/Mini/InstrumentPanel.py b/TamTamMini.activity/Mini/InstrumentPanel.py index b21c456..ca799cb 100644 --- a/TamTamMini.activity/Mini/InstrumentPanel.py +++ b/TamTamMini.activity/Mini/InstrumentPanel.py @@ -9,6 +9,8 @@ import time import common.Config as Config from common.Util.ThemeWidgets import * from common.Util import InstrumentDB +from common.Util.ScrolledToolbar import ScrolledToolbar +import sugar.graphics.style as style InstrumentSize = 110 Tooltips = Config.Tooltips @@ -79,7 +81,6 @@ class InstrumentPanel( gtk.EventBox ): if timeout >= 0 and time.time() > timeout: return False if self.loadStage[0] == 4: - # hide category row if not self.loadToolbar( timeout, self.loadStage ): return False self.loadStage[0] = 5 @@ -158,7 +159,13 @@ class InstrumentPanel( gtk.EventBox ): def loadToolbar( self, timeout = -1, loadStage = [0,0,0] ): if loadStage[1] == 0: - self.loadData["toolbarBox"] = gtk.HBox() + self.toolbarBox = gtk.HBox() + + scrollbox = ScrolledToolbar() + scrollbox.set_viewport(self.toolbarBox) + scrollbox.modify_bg(gtk.STATE_NORMAL, style.Color(Config.PANEL_BCK_COLOR).get_gdk_color()) + self.mainVBox.pack_end(scrollbox, False, False) + self.firstTbBtn = None self.loadStage[1] = 1 if timeout >= 0 and time.time() > timeout: return False @@ -180,18 +187,14 @@ class InstrumentPanel( gtk.EventBox ): 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) + self.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 diff --git a/common/Util/ScrolledToolbar.py b/common/Util/ScrolledToolbar.py index 9beaaec..c9512cc 100644 --- a/common/Util/ScrolledToolbar.py +++ b/common/Util/ScrolledToolbar.py @@ -1,42 +1,63 @@ -#import pygtk import gtk -#import os -#import sets +from sugar.graphics.toolbutton import ToolButton +from sugar.graphics.icon import Icon -class ScrolledToolbar(gtk.HBox): +class ScrollButton(gtk.ToolButton): + def __init__(self, icon_name): + gtk.ToolButton.__init__(self) + + icon = Icon(icon_name = icon_name, icon_size=gtk.ICON_SIZE_SMALL_TOOLBAR) + # The alignment is a hack to work around gtk.ToolButton code + # that sets the icon_size when the icon_widget is a gtk.Image + alignment = gtk.Alignment(0.5, 0.5) + alignment.add(icon) + self.set_icon_widget(alignment) + +class ScrolledToolbar(gtk.EventBox): def __init__(self): - gtk.HBox.__init__( self ) + gtk.EventBox.__init__(self) + + box = gtk.HBox() + self.add(box) - scrollLeftImg = gtk.Image() - scrollLeftImg.set_from_icon_name('go-left', gtk.ICON_SIZE_BUTTON) - self._scrollLeft = gtk.Button( label = None ) - self._scrollLeft.set_relief(gtk.RELIEF_NONE) - self._scrollLeft.set_image(scrollLeftImg) - self._scrollLeft.connect( "clicked", self.doScroll, "left" ) - self.pack_start( self._scrollLeft, False, False ) + self._scrollLeft = ScrollButton('go-left') + self._scrollLeft.connect( "clicked", self._scroll_cb, "left" ) + box.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._scrolledWindow.set_policy(gtk.POLICY_ALWAYS, gtk.POLICY_NEVER) + self._scrolledWindow.connect('scroll-event', self._scroll_event_cb) + box.pack_start( self._scrolledWindow ) self._hadjustment = self._scrolledWindow.get_hadjustment() - self._hadjustment.connect( "changed", self.scrollChanged ) - self._hadjustment.connect( "value-changed", self.scrollChanged ) + self._hadjustment.connect( "changed", self._scroll_changed_cb ) + self._hadjustment.connect( "value-changed", self._scroll_changed_cb ) - scrollRightImg = gtk.Image() - scrollRightImg.set_from_icon_name('go-right', gtk.ICON_SIZE_BUTTON) - self._scrollRight = gtk.Button( label = None ) - self._scrollRight.set_relief(gtk.RELIEF_NONE) - self._scrollRight.set_image(scrollRightImg) - self._scrollRight.connect( "clicked", self.doScroll, "right" ) - self.pack_start( self._scrollRight, False, False ) + self._scrollRight = ScrollButton('go-right') + self._scrollRight.connect( "clicked", self._scroll_cb, "right" ) + box.pack_start(self._scrollRight, False, False) + + def modify_bg(self, state, bg): + gtk.EventBox.modify_bg(self, state, bg) + self._viewport.get_parent().modify_bg(state, bg) def set_viewport(self, widget): + self._viewport = widget self._scrolledWindow.add_with_viewport(widget) + def get_viewport_allocation(self): + alloc = self._scrolledWindow.get_allocation() + alloc.x -= self._hadjustment.get_value() + return alloc + def get_adjustment(self): return self._hadjustment - def doScroll( self, widget, data ): + def _scroll_event_cb(self, widget, event): + if event.direction == gtk.gdk.SCROLL_UP: event.direction = gtk.gdk.SCROLL_LEFT + if event.direction == gtk.gdk.SCROLL_DOWN: event.direction = gtk.gdk.SCROLL_RIGHT + return False + + def _scroll_cb( self, widget, data ): if data == "left": val = max( self._hadjustment.get_property("lower"), self._hadjustment.get_value() - self._hadjustment.get_property("page_increment") ) else: @@ -44,7 +65,7 @@ class ScrolledToolbar(gtk.HBox): self._hadjustment.set_value( val ) - def scrollChanged( self, widget ): + def _scroll_changed_cb( self, widget ): val = self._hadjustment.get_value() if val == 0: self._scrollLeft.set_sensitive( False ) @@ -55,8 +76,3 @@ class ScrolledToolbar(gtk.HBox): self._scrollRight.set_sensitive( False ) else: self._scrollRight.set_sensitive( True ) - - def get_viewport_allocation(self): - alloc = self._scrolledWindow.get_allocation() - alloc.x -= self._hadjustment.get_value() - return alloc -- cgit v0.9.1