Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey 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)
commit1022894723040e704c73b99d4f685817d6272235 (patch)
tree139e0306047f15887c44d25366614b5890e195d9
parent919b84f32cff11e7745ca86c934dca6144f36ddc (diff)
Revert export button
-rw-r--r--AbiWordActivity.py21
-rw-r--r--toolbar.py63
-rw-r--r--widgets.py84
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)
diff --git a/toolbar.py b/toolbar.py
index 3004f7e..3054dec 100644
--- a/toolbar.py
+++ b/toolbar.py
@@ -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):
diff --git a/widgets.py b/widgets.py
index 412fe20..0317ad0 100644
--- a/widgets.py
+++ b/widgets.py
@@ -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