示例#1
0
文件: obj.py 项目: cbsistem/JsQt
    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])
示例#2
0
文件: obj.py 项目: dgtlrift/JsQt
    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])
示例#3
0
    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")
示例#4
0
文件: obj.py 项目: cbsistem/JsQt
    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'))
示例#5
0
文件: obj.py 项目: dgtlrift/JsQt
    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'))
示例#6
0
    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")
示例#7
0
文件: obj.py 项目: cbsistem/JsQt
    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)
示例#8
0
文件: obj.py 项目: dgtlrift/JsQt
    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)
示例#9
0
文件: obj.py 项目: cbsistem/JsQt
    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)) ))
示例#10
0
文件: obj.py 项目: dgtlrift/JsQt
    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))))
示例#11
0
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()
示例#12
0
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()
示例#13
0
文件: obj.py 项目: cbsistem/JsQt
 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)
示例#14
0
文件: obj.py 项目: dgtlrift/JsQt
 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)
示例#15
0
 def parse_class(self, elt):
     jsqt.debug_print("\tclass:", elt.text)
     if self.clazz.name == "":
         self.clazz.name = elt.text