# codegen.py: code generator functions for wxDialog objects # $Id: codegen.py,v 1.15 2007/03/27 07:02:00 agriggio Exp $ # # Copyright (c) 2002-2007 Alberto Griggio # License: MIT (see license.txt) # THIS PROGRAM COMES WITH NO WARRANTY import common class PythonCodeGenerator: def get_code(self, obj): return [], [], [] def get_properties_code(self, dialog): prop = dialog.properties pygen = common.code_writers['python'] cn = pygen.cn out = [] title = prop.get('title') if title: out.append('self.SetTitle(%s)\n' % pygen.quote_str(title)) icon = prop.get('icon') if icon: if icon.startswith('var:'): if not dialog.preview: out.append('_icon = ' + cn('wxEmptyIcon') + '()\n') out.append(('_icon.CopyFromBitmap(' + cn('wxBitmap') + '(%s, ' + cn('wxBITMAP_TYPE_ANY') + '))\n') % \ icon[4:].strip()) out.append('self.SetIcon(_icon)\n') elif icon.startswith('code:'): if not dialog.preview: out.append('_icon = ' + cn('wxEmptyIcon') + '()\n') out.append(('_icon.CopyFromBitmap(%s)\n') % \ icon[5:].strip()) out.append('self.SetIcon(_icon)\n') else: if dialog.preview: import misc icon = misc.get_relative_path(icon, True) out.append('_icon = ' + cn('wxEmptyIcon') + '()\n') out.append(('_icon.CopyFromBitmap(' + cn('wxBitmap') + '(%s, ' + cn('wxBITMAP_TYPE_ANY') + '))\n') % \ pygen.quote_str(icon, False, False)) out.append('self.SetIcon(_icon)\n') out.extend(pygen.generate_common_properties(dialog)) return out def get_layout_code(self, dialog): ret = ['self.Layout()\n'] try: if int(dialog.properties['centered']): ret.append('self.Centre()\n') except (KeyError, ValueError): pass return ret # end of class PythonCodeGenerator class CppCodeGenerator: constructor = [('wxWindow*', 'parent'), ('int', 'id'), ('const wxString&', 'title'), ('const wxPoint&', 'pos', 'wxDefaultPosition'), ('const wxSize&', 'size', 'wxDefaultSize'), ('long', 'style', 'wxDEFAULT_DIALOG_STYLE')] def get_code(self, obj): return [], [], [], [] def get_properties_code(self, dialog): """\ generates the code for the various wxDialog specific properties. Returns a list of strings containing the generated code """ prop = dialog.properties cppgen = common.code_writers['C++'] out = [] title = prop.get('title') if title: out.append('SetTitle(%s);\n' % cppgen.quote_str(title)) icon = prop.get('icon') if icon: out.append('wxIcon _icon;\n') if icon.startswith('var:'): out.append('_icon.CopyFromBitmap(wxBitmap(' + '%s, wxBITMAP_TYPE_ANY));\n' % \ icon[4:].strip()) elif icon.startswith('code:'): out.append('_icon.CopyFromBitmap(%s);\n' % \ icon[5:].strip()) else: out.append('_icon.CopyFromBitmap(wxBitmap(%s, ' 'wxBITMAP_TYPE_ANY));\n' % \ cppgen.quote_str(icon, False, False)) out.append('SetIcon(_icon);\n') out.extend(cppgen.generate_common_properties(dialog)) return out def get_layout_code(self, dialog): ret = ['Layout();\n'] try: if int(dialog.properties['centered']): ret.append('Centre();\n') except (KeyError, ValueError): pass return ret # end of class CppCodeGenerator def xrc_code_generator(obj): xrcgen = common.code_writers['XRC'] return xrcgen.DefaultXrcObject(obj) def initialize(): cn = common.class_names cn['EditDialog'] = 'wxDialog' common.toplevels['EditDialog'] = 1 pygen = common.code_writers.get('python') if pygen: pygen.add_widget_handler('wxDialog', PythonCodeGenerator()) cppgen = common.code_writers.get('C++') if cppgen: cppgen.add_widget_handler('wxDialog', CppCodeGenerator()) xrcgen = common.code_writers.get('XRC') if xrcgen: xrcgen.add_widget_handler('wxDialog', xrc_code_generator)