Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--TamTamJam.activity/Jam/Picker.py2
-rw-r--r--TamTamMini.activity/Mini/InstrumentPanel.py17
-rw-r--r--common/Util/ScrolledToolbar.py76
3 files changed, 57 insertions, 38 deletions
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