def _compile_simple_props(self, dialect, ret): keys = self.simple_prop_data.keys() keys.sort() for k in keys: jsqt.debug_print("\t\tcompile simple prop: %s" % k) if "." in k: tmp = k.split(".") prop = self.known_simple_props[tmp[0]][tmp[1]] else: prop = self.known_simple_props[k] self._compile_simple_prop(prop, self.simple_prop_data[k])
def __handle_minimum_size(self, elt): if elt[0].tag == 'size': tmp = {} for e in elt[0]: tmp[e.tag]=e self.__min_width = tmp['width'] self.__min_height = tmp['height'] self.simple_prop_data['geometry.width'] = self.__min_width self.simple_prop_data['geometry.height'] = self.__min_height else: jsqt.debug_print("\t\t", "WARNING: property 'minimumSize' doesn't " "have a 'size' tag")
def _compile_instantiation(self, dialect, ret): jsqt.debug_print("\t\tinstantiation") self.instantiation = il.primitive.Assignment() self.instantiation.left = il.primitive.ObjectReference('this.%s' % self.name) self.instantiation.right = il.primitive.Instantiation(self.type) self.factory_function.add_statement(self.instantiation) self.factory_function.add_statement(il.primitive.VariableDeclaration( "retval", il.primitive.ObjectReference("this.%s" % self.name) )) ret.set_member(self.factory_function.name, self.factory_function) self.factory_function.set_return_statement( il.primitive.ObjectReference('retval')) ret.set_member(self.name, il.primitive.ObjectReference('null'))
def _compile_instantiation(self, dialect, ret): jsqt.debug_print("\t\tinstantiation") self.instantiation = il.primitive.Assignment() self.instantiation.left = il.primitive.ObjectReference('this.%s' % self.name) self.instantiation.right = il.primitive.Instantiation(self.type) self.factory_function.add_statement(self.instantiation) self.factory_function.add_statement( il.primitive.VariableDeclaration( "retval", il.primitive.ObjectReference("this.%s" % self.name))) ret.set_member(self.factory_function.name, self.factory_function) self.factory_function.set_return_statement( il.primitive.ObjectReference('retval')) ret.set_member(self.name, il.primitive.ObjectReference('null'))
def __handle_size_policy(self, elt): if elt[0].tag == 'sizepolicy': tmp = self._decode_nested_prop(elt[0]) self.hor_stretch_pol = elt[0].attrib['hsizetype'] self.hor_stretch_coef = int(tmp['horstretch'].text) self.ver_stretch_pol = elt[0].attrib['vsizetype'] self.ver_stretch_coef = int(tmp['verstretch'].text) if not self.hor_stretch_pol in ("Fixed", "Minimum"): if self.hor_stretch_coef == 0: self.hor_stretch_coef = 1 if not self.ver_stretch_pol in ("Fixed", "Minimum"): if self.ver_stretch_coef == 0: self.ver_stretch_coef = 1 else: jsqt.debug_print("\t\t", "WARNING: property 'sizePolicy' doesn't " "have a 'sizepolicy' tag")
def __init__(self, elt, name=None): class Icons(object): def __init__(self): self.base = None self.normaloff = None il.primitive.MultiPartCompilable.__init__(self) self.icons = Icons() self.simple_prop_data = {} self.children = DuckTypedList(['compile']) self.parent = None self.tag_handlers = {} self.tag_handlers["property"] = self._handle_property_tag self.tag_handlers["attribute"] = self._handle_property_tag self._elt = None self.layout_properties = {} self.parser = None if name != None: if elt != None: raise Exception("You should provide either name or elt" "arguments, but not both.") self.name = name else: try: self.name = elt.attrib['name'] except ValueError,e: from lxml import etree print etree.tostring(elt) raise jsqt.debug_print("\tQWidget.__init__:", elt.tag, elt.attrib) jsqt.debug_print("\t\treading xml...") self._init_before_parse() self._loop_children(elt)
def __init__(self, elt, name=None): class Icons(object): def __init__(self): self.base = None self.normaloff = None il.primitive.MultiPartCompilable.__init__(self) self.icons = Icons() self.simple_prop_data = {} self.children = DuckTypedList(['compile']) self.parent = None self.tag_handlers = {} self.tag_handlers["property"] = self._handle_property_tag self.tag_handlers["attribute"] = self._handle_property_tag self._elt = None self.layout_properties = {} self.parser = None if name != None: if elt != None: raise Exception("You should provide either name or elt" "arguments, but not both.") self.name = name else: try: self.name = elt.attrib['name'] except ValueError, e: from lxml import etree print etree.tostring(elt) raise jsqt.debug_print("\tQWidget.__init__:", elt.tag, elt.attrib) jsqt.debug_print("\t\treading xml...") self._init_before_parse() self._loop_children(elt)
def set_property(self, elt): prop_name = elt.attrib['name'] if prop_name in self.known_simple_props: jsqt.debug_print("\t\t\tread simple prop: %s" % prop_name) prop = self.known_simple_props[prop_name] if isinstance(prop,dict): tmp = self._decode_nested_prop(elt[0]) for k in tmp: self.simple_prop_data["%s.%s" % (prop_name,k)] = tmp[k] else: self.simple_prop_data[prop_name] = elt[0] elif prop_name in self.known_complex_props: jsqt.debug_print("\t\t\tread complex prop: %s" % prop_name) self.known_complex_props[prop_name](self, elt) else: self.factory_function.add_statement( il.primitive.Comment("The '%s' property for widget named '%s'" "of type '%s' is not supported (yet?)" % (prop_name, self.name, type(self)) ))
def set_property(self, elt): prop_name = elt.attrib['name'] if prop_name in self.known_simple_props: jsqt.debug_print("\t\t\tread simple prop: %s" % prop_name) prop = self.known_simple_props[prop_name] if isinstance(prop, dict): tmp = self._decode_nested_prop(elt[0]) for k in tmp: self.simple_prop_data["%s.%s" % (prop_name, k)] = tmp[k] else: self.simple_prop_data[prop_name] = elt[0] elif prop_name in self.known_complex_props: jsqt.debug_print("\t\t\tread complex prop: %s" % prop_name) self.known_complex_props[prop_name](self, elt) else: self.factory_function.add_statement( il.primitive.Comment("The '%s' property for widget named '%s'" "of type '%s' is not supported (yet?)" % (prop_name, self.name, type(self))))
def compile(ui_file_name, js_file_name, root_namespace, base_class, dialect): print ui_file_name if js_file_name.rfind(root_namespace) == -1: raise Exception("root_namespace '%s' not found in class name '%s'" % (root_namespace, js_file_name)) object_name = js_file_name[js_file_name.rfind(root_namespace):].replace( os.sep * 2, os.sep).replace(os.sep, ".")[0:-3] parser = UiParser(object_name) parser.parse(ui_file_name, ui_file_name) parser.clazz.base_class = base_class jsqt.debug_print("") jsqt.debug_print("\tcompiling....") jsqt.debug_print("\t" + "=" * 20) compiled_object = parser.clazz.compile(dialect) f = open(js_file_name, 'w') for p in parser.clazz.preamble: p.compile(dialect).to_stream(f) compiled_object.to_stream(JsPp(NoTrailingSpace(f))) f.write(";\n") # FIXME: Hack! f.close()
def compile(ui_file_name, js_file_name, root_namespace, base_class, dialect): print ui_file_name if js_file_name.rfind(root_namespace) == -1: raise Exception("root_namespace '%s' not found in class name '%s'" % ( root_namespace, js_file_name)) object_name= js_file_name[js_file_name.rfind(root_namespace):].replace( os.sep*2, os.sep).replace(os.sep, ".")[0:-3] parser = UiParser(object_name) parser.parse(ui_file_name, ui_file_name) parser.clazz.base_class = base_class jsqt.debug_print("") jsqt.debug_print("\tcompiling....") jsqt.debug_print("\t"+"="*20) compiled_object = parser.clazz.compile(dialect) f=open(js_file_name, 'w') for p in parser.clazz.preamble: p.compile(dialect).to_stream(f) compiled_object.to_stream(JsPp(NoTrailingSpace(f))) f.write(";\n") # FIXME: Hack! f.close()
def compile(self, dialect, ret): jsqt.debug_print("\tcompiling '%s'..." % self.name) self._compile_instantiation(dialect, ret) self._compile_simple_props(dialect, ret) self._compile_icon(dialect, ret)
def parse_class(self, elt): jsqt.debug_print("\tclass:", elt.text) if self.clazz.name == "": self.clazz.name = elt.text