# perl_codegen.py : perl generator functions for wxGrid objects # $Id: perl_codegen.py,v 1.7 2005/08/15 07:38:56 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 codegen import ColsCodeHandler, _check_label class PerlCodeGenerator: import_modules = ['use Wx::Grid;\n'] def get_code(self, obj): plgen = common.code_writers['perl'] prop = obj.properties id_name, id = plgen.generate_code_id(obj) if not obj.parent.is_toplevel: parent = '$self->{%s}' % obj.parent.name else: parent = '$self' init = [] if id_name: init.append(id_name) klass = obj.base; if klass != obj.klass : klass = obj.klass; else: klass = klass.replace('wx','Wx::',1); init.append('$self->{%s} = %s->new(%s, %s);\n' % (obj.name, klass, parent, id)) props_buf = self.get_properties_code(obj) return init, props_buf, [] def get_properties_code(self, obj): plgen = common.code_writers['perl'] out = [] name = '$self' if not obj.is_toplevel: name += '->{%s}' % obj.name prop = obj.properties try: create_grid = int(prop['create_grid']) except (KeyError, ValueError): create_grid = False if not create_grid: return [] columns = prop.get('columns', [['A', '-1']]) out.append('%s->CreateGrid(%s, %s);\n' % (name, prop.get('rows_number', '1'), len(columns))) if prop.get('row_label_size'): out.append('%s->SetRowLabelSize(%s);\n' % (name, prop['row_label_size'])) if prop.get('col_label_size'): out.append('%s->SetColLabelSize(%s);\n' % (name, prop['col_label_size'])) enable_editing = prop.get('enable_editing', '1') if enable_editing != '1': out.append('%s->EnableEditing(0);\n' % name) enable_grid_lines = prop.get('enable_grid_lines', '1') if enable_grid_lines != '1': out.append('%s->EnableGridLines(0);\n' % name) enable_col_resize = prop.get('enable_col_resize', '1') if enable_col_resize != '1': out.append('%s->EnableDragColSize(0);\n' % name) enable_row_resize = prop.get('enable_row_resize', '1') if enable_row_resize != '1': out.append('%s->EnableDragRowSize(0);\n' % name) enable_grid_resize = prop.get('enable_grid_resize', '1') if enable_grid_resize != '1': out.append('%s->EnableDragGridSize(0);\n' % name) if prop.get('lines_color', False): out.append('%s->SetGridLineColour(Wx::Colour->new(%s));\n' % (name, plgen._string_to_colour(prop['lines_color']))) if prop.get('label_bg_color', False): out.append('%s->SetLabelBackgroundColour(Wx::Colour->new(%s));\n' % (name, plgen._string_to_colour(prop['label_bg_color']))) sel_mode = prop.get('selection_mode') if sel_mode and sel_mode != 'wxGridSelectCells': out.append('%s->SetSelectionMode(%s);\n' % (name, sel_mode.replace('wxGrid.',''))) i = 0 for label, size in columns: if _check_label(label, i): out.append('%s->SetColLabelValue(%s, %s);\n' % \ (name, i, plgen.quote_str(label))) try: if int(size) > 0: out.append('%s->SetColSize(%s, %s);\n' % \ (name, i, size)) except ValueError: pass i += 1 out.extend(plgen.generate_common_properties(obj)) return out # end of class PerlCodeGenerator def initialize(): common.class_names['EditGrid'] = 'wxGrid' plgen = common.code_writers.get('perl') if plgen: plgen.add_widget_handler('wxGrid', PerlCodeGenerator()) plgen.add_property_handler('columns', ColsCodeHandler)