From 1196eae1b98101c4df0682639bff65514aceda16 Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Fri, 07 Sep 2007 15:59:40 +0000 Subject: #3237: Reorganize toolbars according to spec, add zooming capabilities and add copy to clipboard. --- (limited to 'readtoolbar.py') diff --git a/readtoolbar.py b/readtoolbar.py index a5201ac..dd9b90a 100644 --- a/readtoolbar.py +++ b/readtoolbar.py @@ -20,38 +20,86 @@ from gettext import gettext as _ import pango import gobject import gtk +import evince from sugar.graphics.toolbutton import ToolButton +from sugar.graphics.menuitem import MenuItem +from sugar.activity import activity -class ReadToolbar(gtk.Toolbar): - __gtype_name__ = 'ReadToolbar' +class EditToolbar(activity.EditToolbar): + __gtype_name__ = 'EditToolbar' def __init__(self, evince_view): - gtk.Toolbar.__init__(self) + activity.EditToolbar.__init__(self) self._evince_view = evince_view self._document = None - - self._insert_nav_items() - self._insert_spring() - self._insert_search_items() - - def set_document(self, document): - self._document = document - self._document.connect('find_changed', self._find_changed_cb) - - page_cache = self._document.get_page_cache() - page_cache.connect('page-changed', self._page_changed_cb) - self._update_nav_buttons() - def _insert_spring(self): separator = gtk.SeparatorToolItem() separator.set_draw(False) separator.set_expand(True) self.insert(separator, -1) separator.show() - def _insert_nav_items(self): + search_item = gtk.ToolItem() + + self._search_entry = gtk.Entry() + self._search_entry.connect('activate', self._search_entry_activate_cb) + + width = int(gtk.gdk.screen_width() / 3) + self._search_entry.set_size_request(width, -1) + + search_item.add(self._search_entry) + self._search_entry.show() + + self.insert(search_item, -1) + search_item.show() + + self._prev = ToolButton('go-previous') + self._prev.set_tooltip(_('Previous')) + self._prev.props.sensitive = False + self._prev.connect('clicked', self._find_prev_cb) + self.insert(self._prev, -1) + self._prev.show() + + self._next = ToolButton('go-next') + self._next.set_tooltip(_('Next')) + self._next.props.sensitive = False + self._next.connect('clicked', self._find_next_cb) + self.insert(self._next, -1) + self._next.show() + + def set_document(self, document): + self._document = document + self._document.connect('find_changed', self._find_changed_cb) + + def _search_entry_activate_cb(self, entry): + current_page = self._document.get_page_cache().get_current_page() + self._document.find_begin(0, entry.props.text, False) + self._update_find_buttons() + + def _find_changed_cb(self, page, spec): + self._update_find_buttons() + + def _find_prev_cb(self, button): + self._evince_view.find_previous() + + def _find_next_cb(self, button): + self._evince_view.find_next() + + def _update_find_buttons(self): + self._prev.props.sensitive = self._evince_view.can_find_previous() + self._next.props.sensitive = self._evince_view.can_find_next() + +class ReadToolbar(gtk.Toolbar): + __gtype_name__ = 'ReadToolbar' + + def __init__(self, evince_view): + gtk.Toolbar.__init__(self) + + self._evince_view = evince_view + self._document = None + self._back = ToolButton('go-previous') self._back.set_tooltip(_('Back')) self._back.props.sensitive = False @@ -98,50 +146,16 @@ class ReadToolbar(gtk.Toolbar): self.insert(total_page_item, -1) total_page_item.show() - def _insert_search_items(self): - search_item = gtk.ToolItem() - - self._search_entry = gtk.Entry() - self._search_entry.connect('activate', self._search_entry_activate_cb) - - width = int(gtk.gdk.screen_width() / 3) - self._search_entry.set_size_request(width, -1) - - search_item.add(self._search_entry) - self._search_entry.show() - - self.insert(search_item, -1) - search_item.show() - - self._prev = ToolButton('go-previous') - self._prev.set_tooltip(_('Previous')) - self._prev.props.sensitive = False - self._prev.connect('clicked', self._find_prev_cb) - self.insert(self._prev, -1) - self._prev.show() - - self._next = ToolButton('go-next') - self._next.set_tooltip(_('Next')) - self._next.props.sensitive = False - self._next.connect('clicked', self._find_next_cb) - self.insert(self._next, -1) - self._next.show() + def set_document(self, document): + self._document = document + page_cache = self._document.get_page_cache() + page_cache.connect('page-changed', self._page_changed_cb) + self._update_nav_buttons() def _num_page_entry_activate_cb(self, entry): page = int(entry.props.text) - 1 self._document.get_page_cache().set_current_page(page) - def _search_entry_activate_cb(self, entry): - current_page = self._document.get_page_cache().get_current_page() - self._document.find_begin(0, entry.props.text, False) - self._update_find_buttons() - - def _find_prev_cb(self, button): - self._evince_view.find_previous() - - def _find_next_cb(self, button): - self._evince_view.find_next() - def _go_back_cb(self, button): self._evince_view.previous_page() @@ -150,9 +164,6 @@ class ReadToolbar(gtk.Toolbar): def _page_changed_cb(self, page, proxy): self._update_nav_buttons() - - def _find_changed_cb(self, page, spec): - self._update_find_buttons() def _update_nav_buttons(self): current_page = self._document.get_page_cache().get_current_page() @@ -164,6 +175,106 @@ class ReadToolbar(gtk.Toolbar): self._total_page_label.props.label = \ ' / ' + str(self._document.get_n_pages()) - def _update_find_buttons(self): - self._prev.props.sensitive = self._evince_view.can_find_previous() - self._next.props.sensitive = self._evince_view.can_find_next() +class ViewToolbar(gtk.Toolbar): + __gtype_name__ = 'ViewToolbar' + + def __init__(self, evince_view): + gtk.Toolbar.__init__(self) + + self._evince_view = evince_view + self._document = None + + self._zoom_in = ToolButton('zoom-in') + self._zoom_in.set_tooltip(_('Zoom in')) + self._zoom_in.connect('clicked', self._zoom_in_cb) + self.insert(self._zoom_in, -1) + self._zoom_in.show() + + palette = self._zoom_in.get_palette() + menu_item = MenuItem(_('Zoom to fit')) + menu_item.connect('activate', self._zoom_to_fit_menu_item_activate_cb) + palette.menu.append(menu_item) + menu_item.show() + + menu_item = MenuItem(_('Zoom to width')) + menu_item.connect('activate', self._zoom_to_width_menu_item_activate_cb) + palette.menu.append(menu_item) + menu_item.show() + + menu_item = MenuItem(_('Actual size')) + menu_item.connect('activate', self._actual_size_menu_item_activate_cb) + palette.menu.append(menu_item) + menu_item.show() + + self._zoom_out = ToolButton('zoom-out') + self._zoom_out.set_tooltip(_('Zoom out')) + self._zoom_out.connect('clicked', self._zoom_out_cb) + self.insert(self._zoom_out, -1) + self._zoom_out.show() + + tool_item = gtk.ToolItem() + self.insert(tool_item, -1) + tool_item.show() + + self._zoom_spin = gtk.SpinButton() + self._zoom_spin.set_range(5.409, 400) + self._zoom_spin.set_increments(1, 10) + self._zoom_spin.props.value = self._evince_view.props.zoom * 100 + self._zoom_spin_notify_value_handler = self._zoom_spin.connect( + 'notify::value', self._zoom_spin_notify_value_cb) + tool_item.add(self._zoom_spin) + self._zoom_spin.show() + + zoom_perc_label = gtk.Label(_("%")) + zoom_perc_label.show() + tool_item_zoom_perc_label = gtk.ToolItem() + tool_item_zoom_perc_label.add(zoom_perc_label) + self.insert(tool_item_zoom_perc_label, -1) + tool_item_zoom_perc_label.show() + + self._view_notify_zoom_handler = self._evince_view.connect( + 'notify::zoom', self._view_notify_zoom_cb) + + self._update_zoom_buttons() + + def _zoom_spin_notify_value_cb(self, zoom_spin, pspec): + self._evince_view.disconnect(self._view_notify_zoom_handler) + try: + self._evince_view.props.sizing_mode = evince.SIZING_FREE + self._evince_view.props.zoom = zoom_spin.props.value / 100.0 + finally: + self._view_notify_zoom_handler = self._evince_view.connect( + 'notify::zoom', self._view_notify_zoom_cb) + + def _view_notify_zoom_cb(self, evince_view, pspec): + self._zoom_spin.disconnect(self._zoom_spin_notify_value_handler) + try: + self._zoom_spin.props.value = round(evince_view.props.zoom * 100.0) + finally: + self._zoom_spin_notify_value_handler = self._zoom_spin.connect( + 'notify::value', self._zoom_spin_notify_value_cb) + + def _zoom_in_cb(self, button): + self._evince_view.props.sizing_mode = evince.SIZING_FREE + self._evince_view.zoom_in() + self._update_zoom_buttons() + + def _zoom_out_cb(self, button): + self._evince_view.props.sizing_mode = evince.SIZING_FREE + self._evince_view.zoom_out() + self._update_zoom_buttons() + + def _update_zoom_buttons(self): + self._zoom_in.props.sensitive = self._evince_view.can_zoom_in() + self._zoom_out.props.sensitive = self._evince_view.can_zoom_out() + + def _zoom_to_fit_menu_item_activate_cb(self, menu_item): + self._evince_view.props.sizing_mode = evince.SIZING_BEST_FIT + + def _zoom_to_width_menu_item_activate_cb(self, menu_item): + self._evince_view.props.sizing_mode = evince.SIZING_FIT_WIDTH + + def _actual_size_menu_item_activate_cb(self, menu_item): + self._evince_view.props.sizing_mode = evince.SIZING_FREE + self._evince_view.props.zoom = 1.0 + -- cgit v0.9.1