From 98efe0bf630acfa4339e28548f603a09edb93089 Mon Sep 17 00:00:00 2001 From: Marc Maurer Date: Tue, 23 Oct 2007 17:59:48 +0000 Subject: Implement https://dev.laptop.org/ticket/3451 --- diff --git a/AbiWordActivity.py b/AbiWordActivity.py index 4da7b17..d68efbf 100644 --- a/AbiWordActivity.py +++ b/AbiWordActivity.py @@ -32,7 +32,7 @@ from sugar.presence import presenceservice from abiword import Canvas import toolbar -from toolbar import TextToolbar, ImageToolbar, TableToolbar, FormatToolbar, ViewToolbar +from toolbar import WriteEditToolbar, TextToolbar, ImageToolbar, TableToolbar, FormatToolbar, ViewToolbar from sugar.activity.activity import get_bundle_path logger = logging.getLogger('write-activity') @@ -53,27 +53,17 @@ class AbiWordActivity (Activity): # create our main abiword canvas self.abiword_canvas = Canvas() - self.abiword_canvas.connect("can-undo", self._can_undo_cb) - self.abiword_canvas.connect("can-redo", self._can_redo_cb) self.abiword_canvas.connect('text-selected', self._selection_cb) self.abiword_canvas.connect('image-selected', self._selection_cb) self.abiword_canvas.connect('selection-cleared', self._selection_cleared_cb) - self._edit_toolbar = EditToolbar() - - self._edit_toolbar.undo.set_sensitive(False) - self._edit_toolbar.undo.connect('clicked', self._undo_cb) - - self._edit_toolbar.redo.set_sensitive(False) - self._edit_toolbar.redo.connect('clicked', self._redo_cb) - - self._edit_toolbar.copy.connect('clicked', self._copy_cb) - self._edit_toolbar.paste.connect('clicked', self._paste_cb) + # create our toolbars + text_toolbar = TextToolbar(toolbox, self.abiword_canvas) + self._edit_toolbar = WriteEditToolbar(toolbox, self.abiword_canvas, text_toolbar) toolbox.add_toolbar(_('Edit'), self._edit_toolbar) self._edit_toolbar.show() - text_toolbar = TextToolbar(toolbox, self.abiword_canvas) toolbox.add_toolbar(_('Text'), text_toolbar) text_toolbar.show() @@ -335,24 +325,6 @@ class AbiWordActivity (Activity): finally: f.close() - def _can_undo_cb(self, canvas, can_undo): - self._edit_toolbar.undo.set_sensitive(can_undo) - - def _can_redo_cb(self, canvas, can_redo): - self._edit_toolbar.redo.set_sensitive(can_redo) - - def _undo_cb(self, button): - self.abiword_canvas.undo() - - def _redo_cb(self, button): - self.abiword_canvas.redo() - - def _copy_cb(self, button): - self.abiword_canvas.copy() - - def _paste_cb(self, button): - self.abiword_canvas.paste() - def _selection_cb(self, abi, b): self._edit_toolbar.copy.set_sensitive(True) diff --git a/NEWS b/NEWS index e4f3fc7..328b9d6 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,5 @@ * Support custom keybindings (foddex) +* Support for searching text (foddex, tiny bit of uwog) 48 diff --git a/toolbar.py b/toolbar.py index 2649256..4a328a5 100644 --- a/toolbar.py +++ b/toolbar.py @@ -27,6 +27,7 @@ from sugar.graphics.toggletoolbutton import ToggleToolButton from sugar.graphics.combobox import ComboBox from sugar.graphics.toolcombobox import ToolComboBox from sugar.graphics.objectchooser import ObjectChooser +from sugar.activity.activity import EditToolbar logger = logging.getLogger('write-activity') @@ -38,6 +39,126 @@ TOOLBAR_IMAGE = 3 TOOLBAR_TABLE = 4 TOOLBAR_VIEW = 5 +class WriteEditToolbar(EditToolbar): + + def __init__(self, toolbox, abiword_canvas, text_toolbar): + + EditToolbar.__init__(self) + + self._toolbox = toolbox + self._abiword_canvas = abiword_canvas + self._text_toolbar = text_toolbar + + # connect existing buttons + self.undo.set_sensitive(False) + self.redo.set_sensitive(False) + self.undo.connect('clicked', self._undo_cb) + self.redo.connect('clicked', self._redo_cb) + self.copy.connect('clicked', self._copy_cb) + self.paste.connect('clicked', self._paste_cb) + self._abiword_canvas.connect("can-undo", self._can_undo_cb) + self._abiword_canvas.connect("can-redo", self._can_redo_cb) + + # make expanded non-drawn visible separator to make the search stuff right-align + separator = gtk.SeparatorToolItem() + separator.props.draw = False + separator.set_expand(True) + self.insert(separator, -1) + separator.show() + + # setup additional buttons for searching + self.search = ToolButton('system-search') + self.search.set_tooltip(_('Search')) + self.insert(self.search, -1) + self.search.show() + self.search.connect('clicked', self._search_cb); + + self._searchtext = gtk.Entry() + self._searchtext.set_size_request(int(gtk.gdk.screen_width() / 6), -1) + self._searchtext.connect('changed', self._searchtext_changed) + self._add_widget(self._searchtext) + + self.clear = ToolButton('dialog-cancel') + self.clear.set_tooltip(_('Clear')) + self.insert(self.clear, -1) + self.clear.show() + self.clear.connect('clicked', self._clear_cb); + + self.findprev = ToolButton('go-previous') + self.findprev.set_tooltip(_('Find previous')) + self.insert(self.findprev, -1) + self.findprev.show() + self.findprev.connect('clicked', self._findprev_cb); + + self.findnext = ToolButton('go-next') + self.findnext.set_tooltip(_('Find next')) + self.insert(self.findnext, -1) + self.findnext.show() + self.findnext.connect('clicked', self._findnext_cb); + + def _undo_cb(self, button): + self._abiword_canvas.undo() + + def _redo_cb(self, button): + self._abiword_canvas.redo() + + def _copy_cb(self, button): + self._abiword_canvas.copy() + + def _paste_cb(self, button): + self._abiword_canvas.paste() + + def _can_undo_cb(self, canvas, can_undo): + self.undo.set_sensitive(can_undo) + + def _can_redo_cb(self, canvas, can_redo): + self.redo.set_sensitive(can_redo) + + def _searchtext_changed(self, entry): + text = self._searchtext.get_text() + logger.debug('_searchtext_changed to %s', text) + self._abiword_canvas.set_find_string(text) + + def _search_cb(self, button): + logger.debug('_search_cb') + self._findnext_cb(self.findnext) + + def _clear_cb(self, button): + logger.debug('_clear_cb') + self._searchtext.set_text('') + self._searchtext_changed(self._searchtext) + + def _findprev_cb(self, button): + logger.debug('_findprev_cb') + if self._searchtext.get_text(): + id = self._text_toolbar.get_text_selected_handler(); + self._abiword_canvas.handler_block(id) + self._abiword_canvas.find_prev() + self._abiword_canvas.handler_unblock(id) + else: + logger.debug('nothing to search for!') + + def _findnext_cb(self, button): + logger.debug('_findnext_cb') + if self._searchtext.get_text(): + id = self._text_toolbar.get_text_selected_handler(); + self._abiword_canvas.handler_block(id) + self._abiword_canvas.find_next() + self._abiword_canvas.handler_unblock(id) + else: + logger.debug('nothing to search for!') + + # bad foddex! this function was copied from sugar's activity.py + def _add_widget(self, widget, expand=False): + tool_item = gtk.ToolItem() + tool_item.set_expand(expand) + + tool_item.add(widget) + widget.show() + + self.insert(tool_item, -1) + tool_item.show() + class TextToolbar(gtk.Toolbar): _ACTION_ALIGNMENT_LEFT = 0 _ACTION_ALIGNMENT_CENTER = 1 @@ -145,7 +266,10 @@ class TextToolbar(gtk.Toolbar): self._abiword_canvas.connect('right-align', self._isRightAlign_cb) self._abiword_canvas.connect('justify-align', self._isJustifyAlign_cb) - self._abiword_canvas.connect('text-selected', self._text_selected_cb) + self._text_selected_handler = self._abiword_canvas.connect('text-selected', self._text_selected_cb) + + def get_text_selected_handler(self): + return self._text_selected_handler def _add_widget(self, widget, expand=False): tool_item = gtk.ToolItem() -- cgit v0.9.1