diff options
author | Aleksey Lim <alsroot@member.fsf.org> | 2009-08-16 10:59:58 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@member.fsf.org> | 2009-08-16 10:59:58 (GMT) |
commit | 1022894723040e704c73b99d4f685817d6272235 (patch) | |
tree | 139e0306047f15887c44d25366614b5890e195d9 | |
parent | 919b84f32cff11e7745ca86c934dca6144f36ddc (diff) |
Revert export button
-rw-r--r-- | AbiWordActivity.py | 21 | ||||
-rw-r--r-- | toolbar.py | 63 | ||||
-rw-r--r-- | widgets.py | 84 |
3 files changed, 96 insertions, 72 deletions
diff --git a/AbiWordActivity.py b/AbiWordActivity.py index 5abacb6..69eb967 100644 --- a/AbiWordActivity.py +++ b/AbiWordActivity.py @@ -39,8 +39,8 @@ from sugar.presence import presenceservice from sugar.graphics import style from abiword import Canvas -import toolbar -import widgets +from toolbar import * +from widgets import * from sugar.activity.activity import get_bundle_path logger = logging.getLogger('write-activity') @@ -59,19 +59,26 @@ class AbiWordActivity (activity.Activity): toolbar_box = ToolbarBox() activity_button = ActivityToolbarButton(self) + + separator = gtk.SeparatorToolItem() + separator.show() + activity_button.props.page.insert(separator, 2) + export_button = ExportButton(self, self.abiword_canvas) + export_button.show() + activity_button.props.page.insert(export_button, 2) toolbar_box.toolbar.insert(activity_button, 0) separator = gtk.SeparatorToolItem() toolbar_box.toolbar.insert(separator, -1) text_toolbar = ToolbarButton() - text_toolbar.props.page = toolbar.TextToolbar(self.abiword_canvas) + text_toolbar.props.page = TextToolbar(self.abiword_canvas) text_toolbar.props.icon_name = 'format-text-size' text_toolbar.props.label = _('Text') toolbar_box.toolbar.insert(text_toolbar, -1) para_toolbar = ToolbarButton() - para_toolbar.props.page = toolbar.ParagraphToolbar(self.abiword_canvas) + para_toolbar.props.page = ParagraphToolbar(self.abiword_canvas) para_toolbar.props.icon_name = 'paragraph-bar' para_toolbar.props.label = _('Paragraph') toolbar_box.toolbar.insert(para_toolbar, -1) @@ -113,20 +120,20 @@ class AbiWordActivity (activity.Activity): copy.set_sensitive(False)) insert_toolbar = ToolbarButton() - insert_toolbar.props.page = toolbar.InsertToolbar(self.abiword_canvas) + insert_toolbar.props.page = InsertToolbar(self.abiword_canvas) insert_toolbar.props.icon_name = 'transfer-from' insert_toolbar.props.label = _('Insert') toolbar_box.toolbar.insert(insert_toolbar, -1) search_toolbar = ToolbarButton() - search_toolbar.props.page = toolbar.SearchToolbar(self.abiword_canvas, + search_toolbar.props.page = SearchToolbar(self.abiword_canvas, toolbar_box) search_toolbar.props.icon_name = 'search-bar' search_toolbar.props.label = _('Search') toolbar_box.toolbar.insert(search_toolbar, -1) view_toolbar = ToolbarButton() - view_toolbar.props.page = toolbar.ViewToolbar(self.abiword_canvas) + view_toolbar.props.page = ViewToolbar(self.abiword_canvas) view_toolbar.props.icon_name = 'toolbar-view' view_toolbar.props.label = _('View') toolbar_box.toolbar.insert(view_toolbar, -1) @@ -18,9 +18,6 @@ from gettext import gettext as _ import logging -import os -import time -import dbus import abiword import gtk @@ -35,9 +32,7 @@ from sugar.graphics.objectchooser import ObjectChooser from sugar.graphics import iconentry from sugar.activity import activity from sugar.activity.widgets import * -from sugar.graphics.menuitem import MenuItem from sugar.graphics.palette import Palette -from sugar.datastore import datastore from sugar import mime from port import chooser import sugar.profile @@ -46,64 +41,6 @@ import widgets logger = logging.getLogger('write-activity') -class WriteActivityToolbarExtension: - - # file mime type, abiword exporter properties, drop down name, journal entry postfix - _EXPORT_FORMATS = [['application/rtf', _('Rich Text (RTF)'), _('RTF'), ""], - ['text/html', _('Hypertext (HTML)'), _('HTML'), "html4:yes; declare-xml:no; embed-css:yes; embed-images:yes;"], - ['text/plain', _('Plain Text (TXT)'), _('TXT'), ""]] - - def __init__(self, activity, toolbox, abiword_canvas): - - self._activity = activity - self._abiword_canvas = abiword_canvas - self._activity_toolbar = toolbox.get_activity_toolbar() - self._keep_palette = self._activity_toolbar.keep.get_palette() - - # hook up the export formats to the Keep button - for i, f in enumerate(self._EXPORT_FORMATS): - menu_item = MenuItem(f[1]) - menu_item.connect('activate', self._export_as_cb, f[0], f[2], f[3]) - self._keep_palette.menu.append(menu_item) - menu_item.show() - - def _export_as_cb(self, menu_item, mimetype, jpostfix, exp_props): - logger.debug('exporting file, mimetype: %s, exp_props: %s', mimetype, exp_props); - - # special case HTML export to set the activity name as the HTML title - if mimetype == "text/html": - exp_props += " title:" + self._activity.metadata['title'] + ';'; - - # create a new journal item - fileObject = datastore.create() - act_meta = self._activity.metadata - fileObject.metadata['title'] = act_meta['title'] + ' (' + jpostfix + ')'; - fileObject.metadata['title_set_by_user'] = act_meta['title_set_by_user'] - fileObject.metadata['mime_type'] = mimetype - fileObject.metadata['fulltext'] = \ - self._abiword_canvas.get_content(extension_or_mimetype=".txt")[:3000] - - fileObject.metadata['icon-color'] = act_meta['icon-color'] - fileObject.metadata['activity'] = act_meta['activity'] - fileObject.metadata['keep'] = act_meta['keep'] - -# TODO: Activity class should provide support for preview, see #5119 -# self._activity.take_screenshot() -# if self._activity._preview: -# preview = self._activity._get_preview() -# fileObject.metadata['preview'] = dbus.ByteArray(preview) - - fileObject.metadata['share-scope'] = act_meta['share-scope'] - - # write out the document contents in the requested format - fileObject.file_path = os.path.join(self._activity.get_activity_root(), 'instance', '%i' % time.time()) - self._abiword_canvas.save('file://' + fileObject.file_path, mimetype, exp_props) - - # store the journal item - datastore.write(fileObject, transfer_ownership=True) - fileObject.destroy() - del fileObject - class SearchToolbar(gtk.Toolbar): def __init__(self, abiword_canvas, text_toolbar): @@ -12,16 +12,22 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +import os import gtk +import dbus +import time from gettext import gettext as _ - import logging -logger = logging.getLogger('write-activity') from sugar.graphics.radiotoolbutton import RadioToolButton from sugar.graphics.combobox import ComboBox from sugar.graphics.palette import Palette from sugar.graphics.radiopalette import RadioPalette +from sugar.graphics.toolbutton import ToolButton +from sugar.graphics.menuitem import MenuItem +from sugar.datastore import datastore + +logger = logging.getLogger('write-activity') class FontCombo(ComboBox): def __init__(self, abi): @@ -266,3 +272,77 @@ class ListsPalette(RadioPalette): lambda abi, style: style == 'Upper Case List') self.show_all() + +class ExportButton(ToolButton): + _EXPORT_FORMATS = [{'mime_type' : 'application/rtf', + 'title' : _('Rich Text (RTF)'), + 'jpostfix' : _('RTF'), + 'exp_props' : ''}, + + {'mime_type' : 'text/html', + 'title' : _('Hypertext (HTML)'), + 'jpostfix' : _('HTML'), + 'exp_props' : 'html4:yes; declare-xml:no; ' \ + 'embed-css:yes; embed-images:yes;'}, + + {'mime_type' : 'text/plain', + 'title' : _('Plain Text (TXT)'), + 'jpostfix' : _('TXT'), + 'exp_props' : ''}] + + def __init__(self, activity, abi): + ToolButton.__init__(self, 'document-save') + self.props.tooltip = _('Export') + self.props.label = _('Export') + + for i in self._EXPORT_FORMATS: + menu_item = MenuItem(i['title']) + menu_item.connect('activate', self.__activate_cb, activity, abi, i) + self.props.palette.menu.append(menu_item) + menu_item.show() + + def do_clicked(self): + if self.props.palette.is_up(): + self.props.palette.popdown(immediate=True) + else: + self.props.palette.popup(immediate=True, state=Palette.SECONDARY) + + def __activate_cb(self, menu_item, activity, abi, format): + logger.debug('exporting file: %r' % format) + + exp_props = format['exp_props'] + + # special case HTML export to set the activity name as the HTML title + if format['mime_type'] == "text/html": + exp_props += " title:" + activity.metadata['title'] + ';'; + + # create a new journal item + fileObject = datastore.create() + act_meta = activity.metadata + fileObject.metadata['title'] = \ + act_meta['title'] + ' (' + format['jpostfix'] + ')'; + fileObject.metadata['title_set_by_user'] = act_meta['title_set_by_user'] + fileObject.metadata['mime_type'] = format['mime_type'] + fileObject.metadata['fulltext'] = abi.get_content( + extension_or_mimetype=".txt")[:3000] + + fileObject.metadata['icon-color'] = act_meta['icon-color'] + fileObject.metadata['activity'] = act_meta['activity'] + fileObject.metadata['keep'] = act_meta['keep'] + + preview = activity.get_preview() + if preview is not None: + fileObject.metadata['preview'] = dbus.ByteArray(preview) + + fileObject.metadata['share-scope'] = act_meta['share-scope'] + + # write out the document contents in the requested format + fileObject.file_path = os.path.join(activity.get_activity_root(), + 'instance', '%i' % time.time()) + abi.save('file://' + fileObject.file_path, + format['mime_type'], exp_props) + + # store the journal item + datastore.write(fileObject, transfer_ownership=True) + fileObject.destroy() + del fileObject |