From 26e337e874290e70ac8dce66cd3a66b2ebffdae4 Mon Sep 17 00:00:00 2001
From: Tomeu Vizoso <[EMAIL PROTECTED]>
Date: Tue, 1 Apr 2008 20:37:38 +0200
Subject: [PATCH] New zoom box

---
 src/view/frame/frame.py       |    6 +-
 src/view/frame/zoomtoolbar.py |   96 +++++++++++++++++++++--------------------
 2 files changed, 52 insertions(+), 50 deletions(-)

diff --git a/src/view/frame/frame.py b/src/view/frame/frame.py
index e8f8fa4..e0230ee 100644
--- a/src/view/frame/frame.py
+++ b/src/view/frame/frame.py
@@ -166,9 +166,9 @@ class Frame(object):
     def _create_top_panel(self):
         panel = self._create_panel(gtk.POS_TOP)
 
-        toolbar = ZoomToolbar(self._shell)
-        panel.append(hippo.CanvasWidget(widget=toolbar))
-        toolbar.show()
+        zoom_toolbar = ZoomToolbar(self._shell)
+        panel.append(hippo.CanvasWidget(widget=zoom_toolbar), hippo.PACK_EXPAND)
+        zoom_toolbar.show()
 
         return panel
 
diff --git a/src/view/frame/zoomtoolbar.py b/src/view/frame/zoomtoolbar.py
index 48e63de..e194354 100644
--- a/src/view/frame/zoomtoolbar.py
+++ b/src/view/frame/zoomtoolbar.py
@@ -15,11 +15,12 @@
 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 from gettext import gettext as _
+import logging
 
 import gtk
 
 from sugar.graphics.palette import Palette
-from sugar.graphics.toolbutton import ToolButton
+from sugar.graphics.radiotoolbutton import RadioToolButton
 
 from view.frame.frameinvoker import FrameWidgetInvoker
 from model.shellmodel import ShellModel
@@ -30,55 +31,56 @@ class ZoomToolbar(gtk.Toolbar):
 
         self._shell = shell
 
-        self.set_show_arrow(False)
-
-        button = ToolButton(icon_name='zoom-neighborhood')
-        button.connect('clicked',
-                       self._level_clicked_cb,
-                       ShellModel.ZOOM_MESH)
-        self.insert(button, -1)
-        button.show()
-
-        palette = Palette(_('Neighborhood'))
-        palette.props.invoker = FrameWidgetInvoker(button)
-        palette.set_group_id('frame')
-        button.set_palette(palette)
-
-        button = ToolButton(icon_name='zoom-groups')
-        button.connect('clicked',
-                       self._level_clicked_cb,
-                       ShellModel.ZOOM_FRIENDS)
-        self.insert(button, -1)
-        button.show()
-
-        palette = Palette(_('Group'))
-        palette.props.invoker = FrameWidgetInvoker(button)
-        palette.set_group_id('frame')
-        button.set_palette(palette)
-
-        button = ToolButton(icon_name='zoom-home')
-        button.connect('clicked',
-                       self._level_clicked_cb,
-                       ShellModel.ZOOM_HOME)
-        self.insert(button, -1)
-        button.show()
-
-        palette = Palette(_('Home'))
-        palette.props.invoker = FrameWidgetInvoker(button)
-        palette.set_group_id('frame')
-        button.set_palette(palette)
-
-        button = ToolButton(icon_name='zoom-activity')
-        button.connect('clicked',
-                       self._level_clicked_cb,
-                       ShellModel.ZOOM_ACTIVITY)
-        self.insert(button, -1)
+        self._mesh_button = self._add_button('zoom-neighborhood',
+                _('Neighborhood'), ShellModel.ZOOM_MESH)
+        self._groups_button = self._add_button('zoom-groups',
+                _('Group'), ShellModel.ZOOM_FRIENDS)
+        self._home_button = self._add_button('zoom-home',
+                _('Home'), ShellModel.ZOOM_HOME)
+        self._activity_button = self._add_button('zoom-activity',
+                _('Activity'), ShellModel.ZOOM_ACTIVITY)
+
+        shell_model = shell.get_model()
+        self._set_zoom_level(shell_model.props.zoom_level)
+        shell_model.connect('notify::zoom-level', self.__notify_zoom_level_cb)
+
+    def _add_button(self, icon_name, label, zoom_level):
+        if self.get_children():
+            group = self.get_children()[0]
+        else:
+            group = None
+
+        button = RadioToolButton(named_icon=icon_name, group=group)
+        button.connect('clicked', self.__level_clicked_cb, zoom_level)
+        self.add(button)
         button.show()
 
-        palette = Palette(_('Activity'))
+        palette = Palette(label)
         palette.props.invoker = FrameWidgetInvoker(button)
         palette.set_group_id('frame')
         button.set_palette(palette)
+        
+        return button
+
+    def __level_clicked_cb(self, button, level):
+        if not button.get_active():
+            return
+        if self._shell.get_model().props.zoom_level != level:
+            self._shell.set_zoom_level(level)
+
+    def __notify_zoom_level_cb(self, model, pspec):
+        self._set_zoom_level(model.props.zoom_level)
+
+    def _set_zoom_level(self, new_level):
+        logging.debug('new zoom level: %r' % new_level)
+        if new_level == ShellModel.ZOOM_MESH:
+            self._mesh_button.props.active = True
+        elif new_level == ShellModel.ZOOM_FRIENDS:
+            self._groups_button.props.active = True
+        elif new_level == ShellModel.ZOOM_HOME:
+            self._home_button.props.active = True
+        elif new_level == ShellModel.ZOOM_ACTIVITY:
+            self._activity_button.props.active = True
+        else:
+            raise ValueError('Invalid zoom level: %r' % (new_level))
 
-    def _level_clicked_cb(self, button, level):
-        self._shell.set_zoom_level(level)
-- 
1.5.2.5

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

Reply via email to