# lisp_codegen.py : lisp generator functions for wxMenuBar objects # $Id: lisp_codegen.py,v 1.2 2005/09/25 08:23:40 efuzzyone 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 LispCodeGenerator: def get_properties_code(self, obj): prop = obj.properties plgen = common.code_writers['lisp'] out = [] append = out.append obj_name = '(slot-%s obj)' % obj.name bitmapsize = prop.get('bitmapsize') if bitmapsize: try: w, h = [int(i) for i in bitmapsize.split(',')] append('(wxToolBar_SetToolBitmapSize %s %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('(wxToolBar_SetMargins %s %s %s)\n' % (obj_name, w, h)) except: pass packing = prop.get('packing') if packing: append('(wxToolBar_SetToolPacking %s %s)\n' % (obj_name, packing)) separation = prop.get('separation') if separation: append('(wxToolBar_SetToolSeparation %s %s)\n' % (obj_name, separation)) append('(wxToolBar_Realize %s)\n' % obj_name) return out def get_init_code(self, obj): prop = obj.properties plgen = common.code_writers['lisp'] out = [] append = out.append tools = obj.properties['toolbar'] ids = [] obj_name = '(slot-%s obj)' % 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 '(wxBitmap:wxBitmap_CreateLoad %s wxBITMAP_TYPE_ANY)' % var elif bitmap.startswith('code:'): return '(%s)' % bitmap[5:].strip() else: return '(wxBitmap:wxBitmap_CreateLoad %s wxBITMAP_TYPE_ANY)' % \ plgen.quote_str(bitmap) for tool in tools: if tool.id == '---': # item is a separator append('(wxToolBar_AddSeparator %s)\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('(wxToolBar_AddTool %s %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 Lisp code for the toolbar of a wxFrame. """ plgen = common.code_writers['lisp'] style = obj.properties.get('style') if style: style = style.strip().replace('|',' ') if style.find(' ') != -1: style = '(logior wxTB_HORIZONTAL %s)' % style else: style = 'wxTB_HORIZONTAL' if not obj.parent.is_toplevel: parent = '(slot-%s obj)' % obj.parent.name else: parent = '(slot-top-window obj)' init = [ '\n\t;;; Tool Bar\n', '(setf (slot-%s obj) (wxToolBar_Create %s -1 -1 -1 -1 -1 %s))\n' % (obj.name, parent, style), '(wxFrame_SetToolBar (slot-top-window obj) (slot-%s obj))\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 LispCodeGenerator def initialize(): common.class_names['EditToolBar'] = 'wxToolBar' common.toplevels['EditToolBar'] = 1 plgen = common.code_writers.get('lisp') if plgen: plgen.add_widget_handler('wxToolBar', LispCodeGenerator()) plgen.add_property_handler('tools', ToolsHandler)