From 71f5a8a7c0ae4ea57101f50d6304bd70d0e9bc71 Mon Sep 17 00:00:00 2001 From: Thomas Leonard Date: Mon, 10 Mar 2003 13:44:06 +0000 Subject: [PATCH] New glob patterns can be added. git-svn-id: https://rox.svn.sourceforge.net/svnroot/rox/trunk/MIME-Editor@2548 66de3db3-b00d-0410-b41b-f4738ad19bea --- editor.py | 3 +-- type.py | 53 ++++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/editor.py b/editor.py index 3b1a84a..61859aa 100644 --- a/editor.py +++ b/editor.py @@ -251,8 +251,7 @@ class EditBox(rox.Dialog): field.add_subtree(self.model, f, grey) def add_new_field(self, klass): - rox.alert("TODO: Add field of type '%s'" % type) - new = klass() + new = klass(type.get_type(self.mime_type)) new.edit() def add_field(self, view): diff --git a/type.py b/type.py index 8921a7e..0fb1cf8 100644 --- a/type.py +++ b/type.py @@ -2,7 +2,7 @@ import os import rox from rox import g from xml.parsers import expat -from xml.dom import XML_NAMESPACE +from xml.dom import XML_NAMESPACE, Node types = {} @@ -55,17 +55,26 @@ class MIME_Type: def get_name(self): return self.media + '/' + self.subtype + + def make(self, klass, list): + return [klass(self, item) for item in list] - def get_comments(self): return map(Comment, self.comments) - def get_globs(self): return map(Glob, self.globs) - def get_magic(self): return map(Magic, self.magic) - def get_xml(self): return map(XML, self.xml) - def get_others(self): return map(Other, self.others) + def get_comments(self): return self.make(Comment, self.comments) + def get_globs(self): return self.make(Glob, self.globs) + def get_magic(self): return self.make(Magic, self.magic) + def get_xml(self): return self.make(XML, self.xml) + def get_others(self): return self.make(Other, self.others) class Field: "MIME_Type.get_* functions return a list of these." - def __init__(self, item): - self.item = item[:-1] + def __init__(self, type, item = None): + if not item: + raise Exception("Can't create fields of this type yet") + if len(item) == 2: + self.item = item[0] + else: + self.item = item[:-1] + self.type = type self.user = item[-1] assert self.user in (True, False) @@ -82,6 +91,7 @@ class Field: rox.alert('TODO') def edit(self): + "Returns True on success." if not hasattr(self, 'add_edit_widgets'): rox.alert('Sorry, MIME-Editor does not support editing fields of this type') return @@ -104,8 +114,10 @@ class Field: except Invalid, e: rox.alert(str(e)) continue + box.destroy() + return True box.destroy() - break + return False def commit_edit(self, box): raise Invalid('TODO: Not implemented') @@ -120,6 +132,9 @@ class Comment(Field): return lang + data class Glob(Field): + def __init__(self, type, item = None): + Field.__init__(self, type, item or ('', True)) + def __str__(self): return "Match '%s'" % self.item @@ -141,7 +156,11 @@ class Glob(Field): new = self.entry.get_text() if not new: raise Invalid("Pattern can't be empty") - raise Invalid('TODO') + doc, node = get_override_type(self.type.get_name()) + glob = doc.createElementNS(FREE_NS, 'glob') + glob.setAttributeNS(None, 'pattern', new) + node.appendChild(glob) + write_override(doc) class Magic(Field): def __str__(self): @@ -312,6 +331,19 @@ def get_override(): node.setAttributeNS(XMLNS_NAMESPACE, 'xmlns', FREE_NS) return doc +def get_override_type(type_name): + doc = get_override() + root = doc.documentElement + for c in root.childNodes: + if c.nodeType != Node.ELEMENT_NODE: continue + if c.localName == 'mime-type' and c.namespaceURI == FREE_NS: + if c.getAttributeNS(None, 'type') == type_name: + return doc, c + node = doc.createElementNS(FREE_NS, 'mime-type') + node.setAttributeNS(None, 'type', type_name) + root.appendChild(node) + return doc, node + def write_override(doc): home_packages = os.path.join(home_mime, 'packages') if not os.path.isdir(home_packages): @@ -351,7 +383,6 @@ def add_type(name): __main__.box.show_type(name) def delete_type(name): - from xml.dom import Node doc = get_override() removed = False for c in doc.documentElement.childNodes: -- 2.11.4.GIT