[kupfer: 1/11] plugin.templates: A plugin for document templates
- From: Ulrik Sverdrup <usverdrup src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [kupfer: 1/11] plugin.templates: A plugin for document templates
- Date: Sun, 1 Nov 2009 19:49:13 +0000 (UTC)
commit 9ad5420ff64cdcffe96ba064cf10fe1da4e03e5b
Author: Ulrik Sverdrup <ulrik sverdrup gmail com>
Date: Sat Oct 31 21:20:03 2009 +0100
plugin.templates: A plugin for document templates
kupfer/plugin/templates.py | 118 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 118 insertions(+), 0 deletions(-)
---
diff --git a/kupfer/plugin/templates.py b/kupfer/plugin/templates.py
new file mode 100644
index 0000000..762371f
--- /dev/null
+++ b/kupfer/plugin/templates.py
@@ -0,0 +1,118 @@
+import os
+
+import gio
+import glib
+
+from kupfer.objects import Leaf, Action, Source, FileLeaf
+from kupfer import icons, plugin_support, utils
+from kupfer.helplib import FilesystemWatchMixin, PicklingHelperMixin
+
+__kupfer_name__ = _("Templates")
+__kupfer_sources__ = ("TemplatesSource", )
+__kupfer_actions__ = ("CreateNewDocument", )
+__description__ = _("Create documents from templates")
+__version__ = ""
+__author__ = "Ulrik Sverdrup <ulrik sverdrup gmail com>"
+
+DEFAULT_TMPL_DIR = "~/Templates"
+
+def _reversed_action(action, name=None, rank=0):
+ """Return a reversed version a three-part action
+
+ @action: the action class
+ @name: use a different name
+ """
+ class ReverseAction (action):
+ rank_adjust = rank
+ def __init__(self):
+ Action.__init__(self, name or unicode(action()))
+ def activate(self, leaf, iobj):
+ return action.activate(self, iobj, leaf)
+ def item_types(self):
+ return action.object_types(self)
+ def valid_for_item(self, leaf):
+ try:
+ return leaf.valid_object(leaf)
+ except AttributeError:
+ return True
+ def object_types(self):
+ return action.item_types(self)
+ def valid_object(self, obj, for_item=None):
+ return action.valid_for_item(self, obj)
+ def object_source(self, for_item=None):
+ return None
+ ReverseAction.__name__ = "Reverse" + action.__name__
+ return ReverseAction
+
+class Template (FileLeaf):
+ def __init__(self, path):
+ basename = glib.filename_display_basename(path)
+ FileLeaf.__init__(self, path, _("%s template") % basename)
+
+ def get_actions(self):
+ yield CreateDocumentIn()
+ for a in FileLeaf.get_actions(self):
+ yield a
+
+ def get_gicon(self):
+ file_gicon = FileLeaf.get_gicon(self)
+ return icons.ComposedIcon("text-x-generic-template", file_gicon)
+
+class CreateNewDocument (Action):
+ def __init__(self):
+ Action.__init__(self, _("Create New Document..."))
+
+ def has_result(self):
+ return True
+ def activate(self, leaf, iobj):
+ filename = os.path.basename(iobj.object)
+ gfile = gio.File(iobj.object)
+ destpath = utils.get_destpath_in_directory(leaf.object, filename)
+ destfile = gio.File(destpath)
+ ret = gfile.copy(destfile, flags=gio.FILE_COPY_ALL_METADATA)
+ return FileLeaf(destpath)
+
+ def item_types(self):
+ yield FileLeaf
+
+ def valid_for_item(self, leaf):
+ return leaf.is_dir()
+
+ def requires_object(self):
+ return True
+ def object_types(self):
+ yield Template
+ def object_source(self, for_item=None):
+ return TemplatesSource()
+ def get_icon_name(self):
+ return "document-new"
+
+CreateDocumentIn = _reversed_action(CreateNewDocument, rank=10)
+
+class TemplatesSource (Source, PicklingHelperMixin, FilesystemWatchMixin):
+ def __init__(self):
+ Source.__init__(self, _("Templates"))
+ self.unpickle_finish()
+
+ def unpickle_finish(self):
+ """Set up change callback"""
+ tmpl_var = os.getenv("XDG_TEMPLATES_DIR", DEFAULT_TMPL_DIR)
+ self.tmpl_dir = os.path.expanduser(tmpl_var)
+ self.monitor_token = self.monitor_directories(self.tmpl_dir)
+
+ def get_items(self):
+ try:
+ for fname in os.listdir(self.tmpl_dir):
+ yield Template(os.path.join(self.tmpl_dir, fname))
+ except EnvironmentError, exc:
+ self.output_error(exc)
+
+ def get_description(self):
+ return _("Recently used documents")
+
+ def get_icon_name(self):
+ return "system-file-manager"
+
+ def provides(self):
+ yield Template
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]