From 69147776d9150e77cbc337fcac42f1abe0d3b06f Mon Sep 17 00:00:00 2001 From: Thomas Leonard Date: Fri, 12 Jan 2007 20:59:12 +0000 Subject: [PATCH] Editing requires's URI and version fields works. git-svn-id: https://zero-install.svn.sourceforge.net/svnroot/zero-install/trunk/0publish-gui/trunk/0publish-gui@1369 9f8c893c-44ee-0310-b757-c8ca8341c71e --- main.py | 30 ++++++++++++++++++++++++++---- requires.py | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ xmltools.py | 6 ++++++ 3 files changed, 83 insertions(+), 4 deletions(-) diff --git a/main.py b/main.py index 7f4744c..9310555 100644 --- a/main.py +++ b/main.py @@ -46,6 +46,20 @@ def choose_feed(): chooser.destroy() return FeedEditor(path) +def combo_set_text(combo, text): + if combo.get_active_text() or text: + model = combo.get_model() + i = 0 + for row in model: + if row[0] == text: + combo.set_active(i) + return + i += 1 + combo.append_text(text) + combo.set_active(i) + else: + return + emptyFeed = """ Name @@ -136,9 +150,9 @@ class FeedEditor(loading.XDSLoader): self.wTree.get_widget('add_archive').connect('clicked', lambda b: self.add_archive()) self.wTree.get_widget('add_requires').connect('clicked', lambda b: self.add_requires()) self.wTree.get_widget('add_group').connect('clicked', lambda b: self.add_group()) - self.wTree.get_widget('edit_properties').connect('clicked', lambda b: self.edit_version()) + self.wTree.get_widget('edit_properties').connect('clicked', lambda b: self.edit_properties()) self.wTree.get_widget('remove').connect('clicked', lambda b: self.remove_version()) - impl_tree.connect('row-activated', lambda tv, path, col: self.edit_version(path)) + impl_tree.connect('row-activated', lambda tv, path, col: self.edit_properties(path)) impl_tree.connect('drag-data-received', self.tree_drag_data_received) self.wTree.get_widget('notebook').next_page() @@ -218,7 +232,7 @@ class FeedEditor(loading.XDSLoader): return rox.alert('Select a group, implementation or requirement!') - def edit_version(self, path = None, element = None): + def edit_properties(self, path = None, element = None): assert not (path and element) if element: @@ -228,7 +242,15 @@ class FeedEditor(loading.XDSLoader): else: element = self.impl_model[path][1] - ImplementationProperties(self, element) + if element.namespaceURI != XMLNS_INTERFACE: + rox.alert("Sorry, I don't known how to edit %s elements!" % elements.namespaceURI) + + if element.localName in ('group', 'implementation'): + ImplementationProperties(self, element) + elif element.localName == 'requires': + Requires(self, parent = element.parentNode, element = element) + else: + rox.alert("Sorry, I don't known how to edit %s elements!" % elements.localName) def update_fields(self): root = self.doc.documentElement diff --git a/requires.py b/requires.py index b55034d..c72f74d 100644 --- a/requires.py +++ b/requires.py @@ -4,6 +4,8 @@ import gtk.glade import main from xmltools import * +from rox import g + from zeroinstall.zerostore import NotStored from zeroinstall.injector import model from zeroinstall.injector.policy import Policy @@ -30,6 +32,38 @@ class Requires: uri.append_text(x) uri.connect('changed', self.update_uri) + + self.version_element = None # Last version child + + if element: + main.combo_set_text(uri, element.getAttribute('interface')) + + for child in child_elements(element): + if child.namespaceURI != XMLNS_INTERFACE: continue + if child.localName == 'version': + self.version_element = child + elif child.localName == 'environment': + self.env_element = child + + if self.version_element: + for x in ['before', 'not_before']: + self.widgets.get_widget(x).set_text(self.version_element.getAttribute(x) or '') + + def ok(): + self.update_element(element, self.widgets) + else: + def ok(): + element = create_element(parent, 'requires') + self.update_element(element, self.widgets) + + def resp(dialog, r): + if r == g.RESPONSE_OK: + ok() + self.feed_editor.update_version_model() + dialog.destroy() + + dialog = self.widgets.get_widget('requires') + dialog.connect('response', resp) def update_uri(self, combo): env_insert = self.widgets.get_widget('env_insert') @@ -59,3 +93,20 @@ class Requires: new = dirpath[len(cached_impl) + 1:] env_insert.append_text(new) break + + def update_element(self, element, widgets): + element.setAttribute('interface', widgets.get_widget('requires_uri').get_active_text()) + + before = widgets.get_widget('before').get_text() or None + not_before = widgets.get_widget('not_before').get_text() or None + + if before: model.parse_version(before) + if not_before: model.parse_version(not_before) + + if before or not_before: + if not self.version_element: + self.version_element = create_element(element, 'version') + set_or_remove(self.version_element, 'before', before) + set_or_remove(self.version_element, 'not_before', not_before) + elif self.version_element: + remove_element(self.version_element) diff --git a/xmltools.py b/xmltools.py index f0ca7ef..c5aed9d 100644 --- a/xmltools.py +++ b/xmltools.py @@ -107,3 +107,9 @@ def singleton_text(parent, localName, uri = XMLNS_INTERFACE): elements = list(children(parent, localName, uri)) if elements: return data(elements[0]) + +def set_or_remove(element, attr_name, value): + if value: + element.setAttribute(attr_name, value) + elif element.hasAttribute(attr_name): + element.removeAttribute(attr_name) -- 2.11.4.GIT