#7015 Add proper alignment support to the "tray" control
This commit is contained in:
parent
7c5fa614a6
commit
ab8c054dfb
@ -19,7 +19,7 @@ import gobject
|
||||
import gtk
|
||||
|
||||
from sugar.graphics import style
|
||||
from sugar.graphics.palette import Palette, ToolInvoker
|
||||
from sugar.graphics.palette import ToolInvoker
|
||||
from sugar.graphics.toolbutton import ToolButton
|
||||
from sugar.graphics.icon import Icon
|
||||
|
||||
@ -207,10 +207,12 @@ class _TrayScrollButton(ToolButton):
|
||||
|
||||
viewport = property(fset=set_viewport)
|
||||
|
||||
ALIGN_TO_START = 0
|
||||
ALIGN_TO_END = 1
|
||||
|
||||
class HTray(gtk.HBox):
|
||||
def __init__(self, **kwargs):
|
||||
gobject.GObject.__init__(self, **kwargs)
|
||||
self.set_direction(gtk.TEXT_DIR_LTR)
|
||||
|
||||
scroll_left = _TrayScrollButton('go-left', _PREVIOUS_PAGE)
|
||||
self.pack_start(scroll_left, False)
|
||||
@ -225,17 +227,37 @@ class HTray(gtk.HBox):
|
||||
scroll_left.viewport = self._viewport
|
||||
scroll_right.viewport = self._viewport
|
||||
|
||||
if self.align == ALIGN_TO_END:
|
||||
spacer = gtk.SeparatorToolItem()
|
||||
spacer.set_size_request(0, 0)
|
||||
spacer.props.draw = False
|
||||
spacer.set_expand(True)
|
||||
self._viewport.traybar.insert(spacer, 0)
|
||||
spacer.show()
|
||||
|
||||
align = gobject.property(
|
||||
flags=gobject.PARAM_CONSTRUCT_ONLY | gobject.PARAM_READWRITE,
|
||||
default=ALIGN_TO_START, type=int)
|
||||
|
||||
def get_children(self):
|
||||
return self._viewport.traybar.get_children()
|
||||
children = self._viewport.traybar.get_children()[:]
|
||||
if self.align == ALIGN_TO_END:
|
||||
children = children[1:]
|
||||
return children
|
||||
|
||||
def add_item(self, item, index=-1):
|
||||
if self.align == ALIGN_TO_END and index > -1:
|
||||
index += 1
|
||||
self._viewport.traybar.insert(item, index)
|
||||
|
||||
def remove_item(self, item):
|
||||
self._viewport.traybar.remove(item)
|
||||
|
||||
def get_item_index(self, item):
|
||||
return self._viewport.traybar.get_item_index(item)
|
||||
index = self._viewport.traybar.get_item_index(item)
|
||||
if self.align == ALIGN_TO_END:
|
||||
index -= 1
|
||||
return index
|
||||
|
||||
def scroll_to_item(self, item):
|
||||
self._viewport.scroll_to_item(item)
|
||||
@ -259,17 +281,37 @@ class VTray(gtk.VBox):
|
||||
scroll_left.viewport = self._viewport
|
||||
scroll_right.viewport = self._viewport
|
||||
|
||||
if self.align == ALIGN_TO_END:
|
||||
spacer = gtk.SeparatorToolItem()
|
||||
spacer.set_size_request(0, 0)
|
||||
spacer.props.draw = False
|
||||
spacer.set_expand(True)
|
||||
self._viewport.traybar.insert(spacer, 0)
|
||||
spacer.show()
|
||||
|
||||
align = gobject.property(
|
||||
flags=gobject.PARAM_CONSTRUCT_ONLY | gobject.PARAM_READWRITE,
|
||||
default=ALIGN_TO_START, type=int)
|
||||
|
||||
def get_children(self):
|
||||
return self._viewport.traybar.get_children()
|
||||
children = self._viewport.traybar.get_children()[:]
|
||||
if self.align == ALIGN_TO_END:
|
||||
children = children[1:]
|
||||
return children
|
||||
|
||||
def add_item(self, item, index=-1):
|
||||
if self.align == ALIGN_TO_END and index > -1:
|
||||
index += 1
|
||||
self._viewport.traybar.insert(item, index)
|
||||
|
||||
def remove_item(self, item):
|
||||
self._viewport.traybar.remove(item)
|
||||
|
||||
def get_item_index(self, item):
|
||||
return self._viewport.traybar.get_item_index(item)
|
||||
index = self._viewport.traybar.get_item_index(item)
|
||||
if self.align == ALIGN_TO_END:
|
||||
index -= 1
|
||||
return index
|
||||
|
||||
def scroll_to_item(self, item):
|
||||
self._viewport.scroll_to_item(item)
|
||||
|
Loading…
Reference in New Issue
Block a user