From decec5eb7885fef9820226d47c2224e689acc573 Mon Sep 17 00:00:00 2001
From: Tomeu Vizoso <[EMAIL PROTECTED]>
Date: Wed, 25 Jun 2008 15:35:32 +0200
Subject: [PATCH] #7015 Add proper alignment support to the "tray" control

---
 src/sugar/graphics/tray.py |   50 +++++++++++++++++++++++++++++++++++++++----
 1 files changed, 45 insertions(+), 5 deletions(-)

diff --git a/src/sugar/graphics/tray.py b/src/sugar/graphics/tray.py
index 2f5db9a..200249e 100644
--- a/src/sugar/graphics/tray.py
+++ b/src/sugar/graphics/tray.py
@@ -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,36 @@ 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 +280,36 @@ 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)
-- 
1.5.4.3

From e0629952a2e06fcbe73e812584405146bd440085 Mon Sep 17 00:00:00 2001
From: Tomeu Vizoso <[EMAIL PROTECTED]>
Date: Wed, 25 Jun 2008 15:36:17 +0200
Subject: [PATCH] #7015 Add proper alignment support to the "tray" control

---
 src/view/frame/clipboardtray.py |    6 +++---
 src/view/frame/devicestray.py   |    7 +++----
 2 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/src/view/frame/clipboardtray.py b/src/view/frame/clipboardtray.py
index 0a2e8b4..b5ba093 100644
--- a/src/view/frame/clipboardtray.py
+++ b/src/view/frame/clipboardtray.py
@@ -22,7 +22,7 @@ import gtk
  
 from sugar import util
 from sugar.clipboard import clipboardservice
-from sugar.graphics.tray import VTray
+from sugar.graphics import tray
 from sugar.graphics import style
 
 from view.clipboardicon import ClipboardIcon
@@ -56,12 +56,12 @@ class _ContextMap:
     def has_context(self, context):
         return context in self._context_map
  
-class ClipboardTray(VTray):
+class ClipboardTray(tray.VTray):
     
     MAX_ITEMS = gtk.gdk.screen_height() / style.GRID_CELL_SIZE - 2
     
     def __init__(self):
-        VTray.__init__(self)
+        tray.VTray.__init__(self, align=tray.ALIGN_TO_END)
         self._icons = {}
         self._context_map = _ContextMap()
 
diff --git a/src/view/frame/devicestray.py b/src/view/frame/devicestray.py
index 7e6e797..f180cba 100644
--- a/src/view/frame/devicestray.py
+++ b/src/view/frame/devicestray.py
@@ -16,16 +16,16 @@
 
 import logging
 
-from sugar.graphics.tray import HTray
+from sugar.graphics import tray
 
 from view.devices import deviceview
 from model import shellmodel
 
 _logger = logging.getLogger('DevicesTray')
 
-class DevicesTray(HTray):
+class DevicesTray(tray.HTray):
     def __init__(self):
-        HTray.__init__(self)
+        tray.HTray.__init__(self, align=tray.ALIGN_TO_END)
         self._device_icons = {}
 
         devices_model = shellmodel.get_instance().get_devices()
@@ -41,7 +41,6 @@ class DevicesTray(HTray):
     def _add_device(self, device):
         try:
             view = deviceview.create(device)
-            # TODO: *Tray classes don't allow yet to set the alignment.
             self.add_item(view)
             view.show()
             self._device_icons[device.get_id()] = view
-- 
1.5.4.3

_______________________________________________
Sugar mailing list
[email protected]
http://lists.laptop.org/listinfo/sugar

Reply via email to