# perl_codegen.py : perl generator functions for wxMenuBar objects # $Id: perl_codegen.py,v 1.11 2005/08/15 08:03:02 crazyinsomniac Exp $ # # Copyright (c) 2002-2004 D.H. aka crazyinsomniac on sourceforge.net # License: MIT (see license.txt) # THIS PROGRAM COMES WITH NO WARRANTY import common from tool import * # yay from codegen import ToolsHandler class PerlCodeGenerator: def get_properties_code(self, obj): prop = obj.properties plgen = common.code_writers['perl'] out = [] append = out.append if obj.is_toplevel: obj_name = '$self' else: obj_name = '$self->{%s}' % obj.name bitmapsize = prop.get('bitmapsize') if bitmapsize: try: w, h = [int(i) for i in bitmapsize.split(',')] append('%s->SetToolBitmapSize(wxSIZE(%s, %s));\n' % \ (obj_name, w, h)) except: pass margins = prop.get('margins') if margins: try: w, h = [int(i) for i in margins.split(',')] append('%s->SetMargins(%s, %s);\n' % (obj_name, w, h)) except: pass packing = prop.get('packing') if packing: append('%s->SetToolPacking(%s);\n' % (obj_name, packing)) separation = prop.get('separation') if separation: append('%s->SetToolSeparation(%s);\n' % (obj_name, separation)) append('%s->Realize();\n' % obj_name) return out def get_init_code(self, obj): prop = obj.properties plgen = common.code_writers['perl'] out = [] append = out.append tools = obj.properties['toolbar'] ids = [] if obj.is_toplevel: obj_name = '$self' else: obj_name = '$self->{%s}' % obj.name def _get_bitmap(bitmap): if not bitmap: return 'wxNullBitmap' elif bitmap.startswith('var:'): # this is a variable holding bitmap path var = bitmap[4:].strip() if var[0] != "$": var = "$" + var return 'Wx::Bitmap->new(%s, wxBITMAP_TYPE_ANY)' % var elif bitmap.startswith('code:'): return '(%s)' % bitmap[5:].strip() else: return 'Wx::Bitmap->new(%s, wxBITMAP_TYPE_ANY)' % \ plgen.quote_path(bitmap) for tool in tools: if tool.id == '---': # item is a separator append('%s->AddSeparator();\n' % obj_name) else: name, val = plgen.generate_code_id(None, tool.id) if not name and (not val or val == '-1'): id = 'Wx::NewId()' else: if name: ids.append(name) id = val kinds = ['wxITEM_NORMAL', 'wxITEM_CHECK', 'wxITEM_RADIO'] try: kind = kinds[int(tool.type)] except (IndexError, ValueError): kind = 'wxITEM_NORMAL' bmp1 = _get_bitmap(tool.bitmap1) bmp2 = _get_bitmap(tool.bitmap2) # append('%s->AddLabelTool(%s, %s, %s, %s, %s, %s, %s);\n' % append('%s->AddTool(%s, %s, %s, %s, %s, %s, %s);\n' % (obj_name, id, plgen.quote_str(tool.label), bmp1, bmp2, kind, plgen.quote_str(tool.short_help), plgen.quote_str(tool.long_help))) return ids + out def get_code(self, obj): """\ function that generates Perl code for the menubar of a wxFrame. """ plgen = common.code_writers['perl'] style = obj.properties.get('style') if style: style = 'wxTB_HORIZONTAL|' + style else: style = '' klass = obj.base; if klass != obj.klass : klass = obj.klass; else: klass = klass.replace('wx','Wx::',1); init = [ '\n# Tool Bar\n', '$self->{%s} = %s->new($self, -1, wxDefaultPosition, \ wxDefaultSize, %s);\n' % (obj.name, klass, style), '$self->SetToolBar($self->{%s});\n' % obj.name ] init.extend(self.get_init_code(obj)) init.append('# Tool Bar end\n') return init, self.get_properties_code(obj), [] # end of class PerlCodeGenerator def initialize(): common.class_names['EditToolBar'] = 'wxToolBar' common.toplevels['EditToolBar'] = 1 plgen = common.code_writers.get('perl') if plgen: plgen.add_widget_handler('wxToolBar', PerlCodeGenerator()) plgen.add_property_handler('tools', ToolsHandler)