# HG changeset patch # User paulb # Date 1130261263 0 # Node ID 83ce900fe957f5770fda7aacbd64716072d282ec # Parent 575da53745f9178ba360d047d372d4ba886be9e6 [project @ 2005-10-25 17:27:39 by paulb] Moved generic methods from the QtConfigurator example into a new resource class in the PyQt module. Moved the Factory class from the QtConfigurator example into the PyQt module. diff -r 575da53745f9 -r 83ce900fe957 XSLForms/PyQt.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/XSLForms/PyQt.py Tue Oct 25 17:27:43 2005 +0000 @@ -0,0 +1,107 @@ +#!/usr/bin/env python + +import XSLForms.Prepare +import qt +import qtui +import qtxmldom +import os + +class XSLFormsResource: + + "An XSLForms resource for use with PyQt." + + template_resources = {} + widget_resources = {} + document_resources = {} + + # Helper methods. + # NOTE: Should be moved to a superclass. + + def prepare_document(self, document_identifier): + filename = self.document_resources[document_identifier] + return os.path.abspath(os.path.join(self.resource_dir, filename)) + + def get_document(self, document_identifier): + return qtxmldom.parse(self.prepare_document(document_identifier)) + + def get_elements(self, document_identifier): + doc = self.get_document(document_identifier) + return doc.getElementsByTagName(document_identifier + "-enum") + + def prepare_template(self, template_identifier): + filename = self.template_resources[template_identifier] + return os.path.abspath(os.path.join(self.resource_dir, filename)) + + def prepare_widget(self, template_identifier, widget_identifier, parent=None): + template_path = self.prepare_template(template_identifier) + fragment_name, widget_name = self.widget_resources[widget_identifier] + fragment_path = os.path.abspath(os.path.join(self.resource_dir, fragment_name)) + XSLForms.Prepare.ensure_qt_fragment(template_path, fragment_path, widget_name) + return qtui.QWidgetFactory.create(fragment_path, None, parent) + + def populate_list(self, field, elements): + current_text = field.currentText() + while field.count() > 0: + field.removeItem(0) + item = 0 + set = 0 + for element in elements: + text = element.getAttribute("value") + field.insertItem(text) + if text == current_text: + field.setCurrentItem(item) + set = 1 + item += 1 + if not set: + field.setCurrentItem(0) + +class Factory: + + "A widget factory helper class." + + def __init__(self, ui_filename): + self.ui_filename = ui_filename + self.ui_doc = qtxmldom.parse(ui_filename) + + def connect(self, widget, obj): + + for connection in self.ui_doc.getElementsByTagName("connection"): + sender_name = self.get_text(connection.getElementsByTagName("sender")[0]).encode("utf-8") + signal_name = self.get_text(connection.getElementsByTagName("signal")[0]).encode("utf-8") + slot_name = self.get_text(connection.getElementsByTagName("slot")[0]).encode("utf-8") + + if widget.name() == sender_name: + senders = [widget] + else: + senders = self.find_widgets(widget, sender_name) + + slot = slot_name.split("(")[0] + if hasattr(obj, slot): + signal = qt.SIGNAL(signal_name) + for sender in senders: + qt.QObject.connect(sender, signal, getattr(obj, slot)) + + def find_widgets(self, widget, name): + widgets = [] + found = widget.child(name) + if found: + widgets.append(found) + for child in widget.children(): + widgets += self.find_widgets(child, name) + return widgets + + def get_text(self, node): + node.normalize() + return node.childNodes[0].nodeValue + + def find_widget_element(self, name): + for widget in self.ui_doc.getElementsByTagName("widget"): + for property in widget.getElementsByTagName("property"): + if property.getAttribute("name") == "name": + for cstring in property.getElementsByTagName("cstring"): + found_name = self.get_text(cstring) + if found_name == name: + return widget + return None + +# vim: tabstop=4 expandtab shiftwidth=4 diff -r 575da53745f9 -r 83ce900fe957 examples/Common/QtConfigurator/__init__.py --- a/examples/Common/QtConfigurator/__init__.py Tue Oct 25 15:52:43 2005 +0000 +++ b/examples/Common/QtConfigurator/__init__.py Tue Oct 25 17:27:43 2005 +0000 @@ -1,13 +1,10 @@ #!/usr/bin/env python +import XSLForms.PyQt import QtConfigurator.Forms -import XSLForms.Prepare -import factory -import qtui -import qtxmldom import os -class Configurator(QtConfigurator.Forms.Configurator): +class Configurator(QtConfigurator.Forms.Configurator, XSLForms.PyQt.XSLFormsResource): # Standard attributes. @@ -35,52 +32,11 @@ "screen" : "config_screen.xml" } - # Helper methods. - # NOTE: Should be moved to a superclass. - - def prepare_document(self, document_identifier): - filename = self.document_resources[document_identifier] - return os.path.abspath(os.path.join(self.resource_dir, filename)) - - def get_document(self, document_identifier): - return qtxmldom.parse(self.prepare_document(document_identifier)) - - def get_elements(self, document_identifier): - doc = self.get_document(document_identifier) - return doc.getElementsByTagName(document_identifier + "-enum") - - def populate_list(self, field, elements): - current_text = field.currentText() - while field.count() > 0: - field.removeItem(0) - item = 0 - set = 0 - for element in elements: - text = element.getAttribute("value") - field.insertItem(text) - if text == current_text: - field.setCurrentItem(item) - set = 1 - item += 1 - if not set: - field.setCurrentItem(0) - - def prepare_template(self, template_identifier): - filename = self.template_resources[template_identifier] - return os.path.abspath(os.path.join(self.resource_dir, filename)) - - def prepare_widget(self, template_identifier, widget_identifier, parent=None): - template_path = self.prepare_template(template_identifier) - fragment_name, widget_name = self.widget_resources[widget_identifier] - fragment_path = os.path.abspath(os.path.join(self.resource_dir, fragment_name)) - XSLForms.Prepare.ensure_qt_fragment(template_path, fragment_path, widget_name) - return qtui.QWidgetFactory.create(fragment_path, None, parent) - # Initialisation. def __init__(self, *args, **kw): QtConfigurator.Forms.Configurator.__init__(self, *args, **kw) - self.factory = factory.Factory(self.prepare_template("configuration")) + self.factory = XSLForms.PyQt.Factory(self.prepare_template("configuration")) # Get field data. # NOTE: This would be done for whole page updates in a Web application. diff -r 575da53745f9 -r 83ce900fe957 examples/Common/QtConfigurator/factory.py --- a/examples/Common/QtConfigurator/factory.py Tue Oct 25 15:52:43 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -#!/usr/bin/env python - -from qt import * -import qtui -import qtxmldom - -class Factory: - def __init__(self, ui_filename): - self.ui_filename = ui_filename - self.ui_doc = qtxmldom.parse(ui_filename) - - def connect(self, widget, obj): - - for connection in self.ui_doc.getElementsByTagName("connection"): - sender_name = self.get_text(connection.getElementsByTagName("sender")[0]).encode("utf-8") - signal_name = self.get_text(connection.getElementsByTagName("signal")[0]).encode("utf-8") - slot_name = self.get_text(connection.getElementsByTagName("slot")[0]).encode("utf-8") - - if widget.name() == sender_name: - senders = [widget] - else: - senders = self.find_widgets(widget, sender_name) - - slot = slot_name.split("(")[0] - if hasattr(obj, slot): - signal = SIGNAL(signal_name) - for sender in senders: - QObject.connect(sender, signal, getattr(obj, slot)) - - def find_widgets(self, widget, name): - widgets = [] - found = widget.child(name) - if found: - widgets.append(found) - for child in widget.children(): - widgets += self.find_widgets(child, name) - return widgets - - def get_text(self, node): - node.normalize() - return node.childNodes[0].nodeValue - - def find_widget_element(self, name): - for widget in self.ui_doc.getElementsByTagName("widget"): - for property in widget.getElementsByTagName("property"): - if property.getAttribute("name") == "name": - for cstring in property.getElementsByTagName("cstring"): - found_name = self.get_text(cstring) - if found_name == name: - return widget - return None - -# vim: tabstop=4 expandtab shiftwidth=4