⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 codegen.py

📁 用python写的ide开发环境,巨强大,不过需要wxpython的支持
💻 PY
📖 第 1 页 / 共 2 页
字号:
            else:                if item.children:                    name = self.get_name(item)                    if name:                        write('    '*tabs + '<object class="wxMenu" ' \                              'name=%s>\n' % quoteattr(name))                    else:                        write('    '*tabs + '<object class="wxMenu">\n')                else:                    name = self.get_name(item)                    if name:                        write('    '*tabs + '<object class="wxMenuItem" ' \                              'name=%s>\n' % quoteattr(name))                    else:                        write('    '*tabs + '<object class="wxMenuItem">\n')                  if item.label:                    # translate & into _ as accelerator marker                    val = item.label.replace('&', '_')                    write('    '*(tabs+1) + '<label>%s</label>\n' % \                          escape(val))                if item.help_str:                    write('    '*(tabs+1) + '<help>%s</help>\n' % \                          escape(item.help_str))                if item.children:                    for c in item.children:                        self.append_item(c, outfile, tabs+1)                elif item.checkable == '1':                    write('    '*(tabs+1) + '<checkable>1</checkable>\n')                elif item.radio == '1':                    write('    '*(tabs+1) + '<radio>1</radio>\n')                write('    '*tabs + '</object>\n')        def get_name(self, item):            if item.name: return item.name.strip()            tokens = item.id.split('=')            if tokens: return tokens[0].strip()                def write(self, outfile, tabs):            menus = self.code_obj.properties['menubar']            write = outfile.write            write('    '*tabs + '<object class="wxMenuBar" name=%s>\n' % \                  quoteattr(self.name))            for m in menus:                self.append_item(m.root, outfile, tabs+1)            write('    '*tabs + '</object>\n')    # end of class MenuBarXrcObject        return MenuBarXrcObject(obj)class CppCodeGenerator:    constructor = []    def get_code(self, obj):        """\        generates C++ code for the menubar of a wxFrame.        """        cppgen = common.code_writers['C++']        menus = obj.properties['menubar']        init = [ '%s = new %s();\n' % (obj.name, obj.klass) ]        init.extend(self.get_properties_code(obj))        init.append('SetMenuBar(%s);\n' % obj.name)        ids = self.get_ids_code(obj)        return init, ids, [], []    def get_properties_code(self, obj):        cppgen = common.code_writers['C++']        menus = obj.properties['menubar']        out = []        append = out.append        def append_items(menu, items):            for item in items:                if item.name == '---': # item is a separator                    append('%s->AppendSeparator();\n' % menu)                    continue                name, val = cppgen.generate_code_id(None, item.id)                if not name and val == '-1':                    id = 'wxNewId()'                else:                    #if name: ids.append(name)                    id = val                                if item.children:                    if item.name: name = item.name                    else: name = '%s_sub' % menu                    append('wxMenu* %s = new wxMenu();\n' % name)##                     if item.id: # generating id##                         tokens = item.id.split('=')##                         if len(tokens) > 1:##                             id = tokens[0]##                         else:##                             id = item.id##                     else: id = 'wxNewId()'                    append_items(name, item.children)                    append('%s->Append(%s, %s, %s, %s);\n' %                           (menu, id, cppgen.quote_str(item.label),                            name, cppgen.quote_str(item.help_str)))                else:##                     if item.id:##                         tokens = item.id.split('=')##                         if len(tokens) > 1:##                             id = tokens[0]##                         else:##                             id = item.id##                     else:##                         id = 'wxNewId()'                    item_type = 'wxITEM_NORMAL'                    if item.checkable == '1':                        item_type = 'wxITEM_CHECK'                    elif item.radio == '1':                        item_type = 'wxITEM_RADIO'                    if item_type:                        append('%s->Append(%s, %s, %s, %s);\n' %                               (menu, id, cppgen.quote_str(item.label),                                cppgen.quote_str(item.help_str), item_type))                    else:                        append('%s->Append(%s, %s, %s);\n' %                               (menu, id, cppgen.quote_str(item.label),                                cppgen.quote_str(item.help_str)))        #print 'menus = %s' % menus        if obj.is_toplevel: obj_name = ''        else: obj_name = obj.name + '->'        i = 1        for m in menus:            menu = m.root            if menu.name: name = menu.name            else:                name = 'wxglade_tmp_menu_%s' % i                i += 1            append('wxMenu* %s = new wxMenu();\n' % name)            if menu.children:                append_items(name, menu.children)            append('%sAppend(%s, %s);\n' %                   (obj_name, name, cppgen.quote_str(menu.label)))        return out    def get_ids_code(self, obj):        cppgen = common.code_writers['C++']        ids = []        menus = obj.properties['menubar']                def collect_ids(items):            for item in items:                if item.name == '---': # item is a separator                    continue # do nothing                name, val = cppgen.generate_code_id(None, item.id)                if name.find('=') != -1:                    ids.append(name)                if item.children:##                     if item.id: # generating id##                         tokens = item.id.split('=')##                         if len(tokens) > 1:##                             id = tokens[0]##                             ids.append(' = '.join(tokens))                    collect_ids(item.children)##                 else:##                     if item.id:##                         tokens = item.id.split('=')##                         if len(tokens) > 1:##                             id = tokens[0]##                             ids.append(' = '.join(tokens))        for m in menus:            if m.root.children:                collect_ids(m.root.children)        return ids    def get_events(self, obj):        cppgen = common.code_writers['C++']        out = []        def do_get(item):            ret = []            name, val = cppgen.generate_code_id(None, item.id)            if not val: val = '-1' # but this is wrong anyway...            if item.handler:                ret.append((val, 'EVT_MENU', item.handler, 'wxCommandEvent'))            if item.children:                for c in item.children:                    ret.extend(do_get(c))            return ret        for menu in obj.properties['menubar']:            out.extend(do_get(menu.root))        return out# end of class CppCodeGeneratordef initialize():    common.class_names['EditMenuBar'] = 'wxMenuBar'    common.toplevels['EditMenuBar'] = 1    pygen = common.code_writers.get('python')    if pygen:        pygen.add_widget_handler('wxMenuBar', PythonCodeGenerator())        pygen.add_property_handler('menus', MenuHandler)    xrcgen = common.code_writers.get('XRC')    if xrcgen:        xrcgen.add_widget_handler('wxMenuBar', xrc_code_generator)        xrcgen.add_property_handler('menus', MenuHandler)    cppgen = common.code_writers.get('C++')    if cppgen:        cppgen.add_widget_handler('wxMenuBar', CppCodeGenerator())        cppgen.add_property_handler('menus', MenuHandler)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -