paulb@332 | 1 | #!/usr/bin/env python |
paulb@332 | 2 | |
paulb@332 | 3 | from qt import * |
paulb@338 | 4 | import qtui |
paulb@332 | 5 | import qtxmldom |
paulb@332 | 6 | |
paulb@332 | 7 | class Factory: |
paulb@332 | 8 | def __init__(self, ui_filename): |
paulb@338 | 9 | self.ui_filename = ui_filename |
paulb@338 | 10 | self.ui_doc = qtxmldom.parse(ui_filename) |
paulb@338 | 11 | |
paulb@338 | 12 | def connect(self, widget, obj): |
paulb@338 | 13 | |
paulb@338 | 14 | for connection in self.ui_doc.getElementsByTagName("connection"): |
paulb@338 | 15 | sender_name = self.get_text(connection.getElementsByTagName("sender")[0]).encode("utf-8") |
paulb@338 | 16 | signal_name = self.get_text(connection.getElementsByTagName("signal")[0]).encode("utf-8") |
paulb@338 | 17 | slot_name = self.get_text(connection.getElementsByTagName("slot")[0]).encode("utf-8") |
paulb@338 | 18 | |
paulb@338 | 19 | if widget.name() == sender_name: |
paulb@338 | 20 | sender = widget |
paulb@338 | 21 | else: |
paulb@338 | 22 | sender = self.find_widget(widget, sender_name) |
paulb@338 | 23 | |
paulb@338 | 24 | if sender: |
paulb@338 | 25 | signal = SIGNAL(signal_name) |
paulb@338 | 26 | slot = slot_name.split("(")[0] |
paulb@338 | 27 | |
paulb@338 | 28 | if hasattr(obj, slot): |
paulb@338 | 29 | QObject.connect(sender, signal, getattr(obj, slot)) |
paulb@332 | 30 | |
paulb@338 | 31 | def find_widget(self, widget, name): |
paulb@338 | 32 | found = widget.child(name) |
paulb@338 | 33 | if found: |
paulb@338 | 34 | return found |
paulb@338 | 35 | else: |
paulb@338 | 36 | for child in widget.children(): |
paulb@338 | 37 | found = self.find_widget(child, name) |
paulb@338 | 38 | if found: |
paulb@338 | 39 | return found |
paulb@338 | 40 | return None |
paulb@338 | 41 | |
paulb@338 | 42 | def get_text(self, node): |
paulb@338 | 43 | node.normalize() |
paulb@338 | 44 | return node.childNodes[0].nodeValue |
paulb@338 | 45 | |
paulb@338 | 46 | def find_widget_element(self, name): |
paulb@338 | 47 | for widget in self.ui_doc.getElementsByTagName("widget"): |
paulb@338 | 48 | for property in widget.getElementsByTagName("property"): |
paulb@338 | 49 | if property.getAttribute("name") == "name": |
paulb@338 | 50 | for cstring in property.getElementsByTagName("cstring"): |
paulb@338 | 51 | found_name = self.get_text(cstring) |
paulb@338 | 52 | if found_name == name: |
paulb@338 | 53 | return widget |
paulb@332 | 54 | return None |
paulb@332 | 55 | |
paulb@332 | 56 | # vim: tabstop=4 expandtab shiftwidth=4 |