[Sugar-devel] [PATCH sugar] Add toolbar to the TransitionBox

Manuel Quiñones manuq at laptop.org
Mon Aug 27 10:29:37 EDT 2012


With the new frame behaviour the toolbar was appearing and
disappearing while the transition took place.  this patch adds a
toolbar in the transition box with a fake search entry, that is set
editable=False to prevent issues.

Signed-off-by: Manuel Quiñones <manuq at laptop.org>
---
 src/jarabe/desktop/transitionbox.py | 75 +++++++++++++++++++++++++++++++++++--
 1 file changed, 71 insertions(+), 4 deletions(-)

diff --git a/src/jarabe/desktop/transitionbox.py b/src/jarabe/desktop/transitionbox.py
index 54a70de..62764d7 100644
--- a/src/jarabe/desktop/transitionbox.py
+++ b/src/jarabe/desktop/transitionbox.py
@@ -14,10 +14,12 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+import gtk
 import gobject
 
 from sugar.graphics import style
 from sugar.graphics import animator
+from sugar.graphics import iconentry
 
 from jarabe.model.buddy import get_owner_instance
 from jarabe.view.buddyicon import BuddyIcon
@@ -36,7 +38,63 @@ class _Animation(animator.Animation):
         self._icon.props.pixel_size = int(self.start_size + d)
 
 
-class TransitionBox(BuddyIcon):
+class ViewToolbar(gtk.Toolbar):
+    def __init__(self):
+        gtk.Toolbar.__init__(self)
+
+        separator = gtk.SeparatorToolItem()
+        separator.props.draw = False
+        separator.set_size_request(style.GRID_CELL_SIZE,
+                                   style.GRID_CELL_SIZE)
+        self.insert(separator, -1)
+        separator.show()
+
+        tool_item = gtk.ToolItem()
+        self.insert(tool_item, -1)
+        tool_item.show()
+
+        self.search_entry = iconentry.IconEntry()
+        self.search_entry.set_icon_from_name(iconentry.ICON_ENTRY_PRIMARY,
+                                             'system-search')
+        self.search_entry.set_width_chars(25)
+        self.search_entry.props.editable = False
+        tool_item.add(self.search_entry)
+        self.search_entry.show()
+
+
+class ViewContainer(gtk.HBox):
+    def __init__(self, owner_icon):
+        gtk.Container.__init__(self)
+        self._owner_icon = owner_icon
+        self.add(self._owner_icon)
+        self._owner_icon.show()
+        self.connect('size-allocate', self.__on_size_allocate)
+
+    def __on_size_allocate(self, widget, allocation):
+        owner_width, owner_height = self._owner_icon.size_request()
+        height = allocation.height + allocation.y
+        width = allocation.width
+
+        # Find vertical center point of screen
+        y = height / 2
+
+        # This container may be offset from the top by a certain amount
+        # (e.g. for a toolbar at the top of the screen). Adjust the
+        # center-point for that
+        y -= allocation.y
+
+        # Now subtract half of the owner height. This gives us the y
+        # coordinate for the top of the owner icon.
+        y -= owner_height / 2
+
+        # calculate x coordinate and create allocation
+        x = (width - owner_width) / 2
+        owner_icon_allocation = gtk.gdk.Rectangle(x, allocation.y + y,
+                                                  owner_width, owner_height)
+        self._owner_icon.size_allocate(owner_icon_allocation)
+
+
+class TransitionBox(gtk.VBox):
     __gtype_name__ = 'SugarTransitionBox'
 
     __gsignals__ = {
@@ -44,8 +102,17 @@ class TransitionBox(BuddyIcon):
     }
 
     def __init__(self):
-        BuddyIcon.__init__(self, buddy=get_owner_instance(),
-                           pixel_size=style.XLARGE_ICON_SIZE)
+        gtk.VBox.__init__(self)
+
+        self._toolbar = ViewToolbar()
+        self.pack_start(self._toolbar, expand=False)
+        self._toolbar.show()
+
+        self._owner_icon = BuddyIcon(buddy=get_owner_instance(),
+                                     pixel_size=style.XLARGE_ICON_SIZE)
+        view_container = ViewContainer(self._owner_icon)
+        self.add(view_container)
+        view_container.show()
 
         self._animator = animator.Animator(0.3)
         self._animator.connect('completed', self._animation_completed_cb)
@@ -55,5 +122,5 @@ class TransitionBox(BuddyIcon):
 
     def start_transition(self, start_size, end_size):
         self._animator.remove_all()
-        self._animator.add(_Animation(self, start_size, end_size))
+        self._animator.add(_Animation(self._owner_icon, start_size, end_size))
         self._animator.start()
-- 
1.7.11.4



More information about the Sugar-devel mailing list