Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@tomeuvizoso.net>2008-04-01 18:37:38 (GMT)
committer Tomeu Vizoso <tomeu@tomeuvizoso.net>2008-04-01 18:51:11 (GMT)
commit6f92d9077eefc81a4bffd5f451ea5c5cfe34b4f7 (patch)
tree1477c946f0eadc550ef14e71c30d29457647c81a /src
parenta03e2be2693d0696a3f2a1a100e955553af83ab4 (diff)
New zoom box
Diffstat (limited to 'src')
-rw-r--r--src/view/frame/frame.py6
-rw-r--r--src/view/frame/zoomtoolbar.py96
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)