diff options
author | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2008-04-01 18:37:38 (GMT) |
---|---|---|
committer | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2008-04-01 18:51:11 (GMT) |
commit | 6f92d9077eefc81a4bffd5f451ea5c5cfe34b4f7 (patch) | |
tree | 1477c946f0eadc550ef14e71c30d29457647c81a /src | |
parent | a03e2be2693d0696a3f2a1a100e955553af83ab4 (diff) |
New zoom box
Diffstat (limited to 'src')
-rw-r--r-- | src/view/frame/frame.py | 6 | ||||
-rw-r--r-- | 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) |