diff options
author | Gary Martin <gary@garycmartin.com> | 2009-05-12 02:47:14 (GMT) |
---|---|---|
committer | Gary Martin <gary@garycmartin.com> | 2009-05-12 02:47:14 (GMT) |
commit | 2dd374909e7cdb958f5f6c0582e30d923fb43da1 (patch) | |
tree | c4ec9bb05729436560e34a06a13c415a37229b65 /labyrinthactivity.py | |
parent | dab17c4541b107dbf64031a1e9dff7c6735732ba (diff) |
Added initial pdf export feature, reveals some bugs in export code changes but is functional.
Diffstat (limited to 'labyrinthactivity.py')
-rw-r--r-- | labyrinthactivity.py | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/labyrinthactivity.py b/labyrinthactivity.py index f40bddc..e74948f 100644 --- a/labyrinthactivity.py +++ b/labyrinthactivity.py @@ -17,6 +17,7 @@ import sys import os +import time import logging from gettext import gettext as _ import tempfile @@ -25,12 +26,15 @@ import xml.dom.minidom as dom import gobject import gtk import pango +import pangocairo +import cairo from sugar.activity import activity from sugar.graphics.toolbutton import ToolButton from sugar.graphics.radiotoolbutton import RadioToolButton from sugar.graphics.toggletoolbutton import ToggleToolButton from sugar.graphics.menuitem import MenuItem +from sugar.datastore import datastore from port.tarball import Tarball # labyrinth sources are shipped inside the 'src' subdirectory @@ -49,6 +53,13 @@ class LabyrinthActivity(activity.Activity): toolbox = activity.ActivityToolbox(self) self.set_toolbox(toolbox) + activity_toolbar = toolbox.get_activity_toolbar() + keep_palette = activity_toolbar.keep.get_palette() + menu_item = MenuItem('Portable Document Format (PDF)') + menu_item.connect('activate', self.__export_pdf_cb) + keep_palette.menu.append(menu_item) + menu_item.show() + edit_toolbar = activity.EditToolbar() toolbox.add_toolbar(_('Edit'), edit_toolbar) edit_toolbar.undo.child.connect('clicked', self.__undo_cb) @@ -280,6 +291,37 @@ class LabyrinthActivity(activity.Activity): def __paste_cb (self, event): self._main_area.paste_clipboard (self.clipboard) + def __export_pdf_cb (self, event): + print "############# export pdf callback #############" + maxx, maxy = self._main_area.get_max_area() + #x, y, width, height, bitdepth = self._main_area.window.get_geometry() + true_width = int(maxx) + true_height = int(maxy) + + # Create the new journal entry + fileObject = datastore.create() + act_meta = self.metadata + fileObject.metadata['title'] = act_meta['title'] + ' (PDF)' + fileObject.metadata['title_set_by_user'] = act_meta['title_set_by_user'] + fileObject.metadata['mime_type'] = 'application/pdf' + + # TODO: add text thoughts into fulltext metadata + # fileObject.metadata['fulltext'] = ... + + #fileObject.metadata['icon-color'] = act_meta['icon-color'] + fileObject.file_path = os.path.join(self.get_activity_root(), + 'instance', '%i' % time.time()) + filename = fileObject.file_path + surface = cairo.PDFSurface(filename, true_width, true_height) + cairo_context = cairo.Context(surface) + context = pangocairo.CairoContext(cairo_context) + self._main_area.export(context, true_width, true_height, True) + surface.finish() + datastore.write(fileObject, transfer_ownership=True) + fileObject.destroy() + del fileObject + print "############# pdf save complete #############" + def __main_area_focus_cb (self, arg, event, extended = False): self._main_area.grab_focus () |