File: perl_codegen.py

package info (click to toggle)
wxglade 1%3A1.1.1%2Brepack-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 10,592 kB
  • sloc: python: 30,644; javascript: 740; makefile: 169; cpp: 99; perl: 90; lisp: 62; xml: 61; sh: 3
file content (101 lines) | stat: -rw-r--r-- 3,567 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
"""\
Perl generator functions for wxToolBar objects

@copyright: 2002-2004 D. H. aka crazyinsomniac on sourceforge
@copyright: 2014-2016 Carsten Grohmann
@license: MIT (see LICENSE.txt) - THIS PROGRAM COMES WITH NO WARRANTY
"""


import common
import wcodegen
from .tool import *



class PerlCodeGenerator(wcodegen.PerlWidgetCodeWriter):

    def get_properties_code(self, obj):
        prop = obj.properties
        out = []
        append = out.append

        obj_name = self.format_widget_access(obj)

        if obj.properties["bitmapsize"].is_active():
            w, h = obj.properties["bitmapsize"].get_tuple()
            append( '%s->SetToolBitmapSize(wxSIZE(%s, %s));\n' % (obj_name, w, h) )

        if obj.properties["margins"].is_active():
            w, h = obj.properties["margins"].get_tuple()
            append( '%s->SetMargins(%s, %s);\n' % (obj_name, w, h) )

        if obj.properties["packing"].is_active():
            append( '%s->SetToolPacking(%s);\n' % (obj_name, obj.packing) )

        if obj.properties["separation"].is_active():
            append( '%s->SetToolSeparation(%s);\n' % (obj_name, obj.separation) )

        return out

    def get_init_code(self, obj):
        out = []
        append = out.append
        ids = []

        obj_name = self.codegen.format_generic_access(obj)

        for tool in obj.tools:
            if tool.id == '---':  # item is a separator
                append( '%s->AddSeparator();\n' % obj_name )
            else:
                name, val = self.codegen.generate_code_id(None, tool.id)
                if not name and (not val or val == '-1'):
                    wid = 'Wx::NewId()'
                else:
                    if name:
                        ids.append( name )
                    wid = val
                kinds = ['wxITEM_NORMAL', 'wxITEM_CHECK', 'wxITEM_RADIO']
                try:
                    kind = kinds[int(tool.type)]
                except (IndexError, ValueError):
                    kind = 'wxITEM_NORMAL'
                bmp1 = self.generate_code_bitmap(tool.bitmap1)
                bmp2 = self.generate_code_bitmap(tool.bitmap2)
                append( '%s->AddTool(%s, %s, %s, %s, %s, %s, %s);\n' %
                        (obj_name, wid, self.codegen.quote_str(tool.label),
                         bmp1, bmp2, kind,
                         self.codegen.quote_str(tool.short_help),
                         self.codegen.quote_str(tool.long_help)) )

        return ids + out

    def get_code(self, obj):
        "function that generates Perl code for the toolbar of a wxFrame"
        init = []
        style = obj.properties['style'].get_string_value()
        if style:
            style = 'wxTB_HORIZONTAL|' + style
            extra = ', wxDefaultPosition, wxDefaultSize, %s' % style
        else:
            extra = ''

        klass = obj.get_instantiation_class(self.cn, self.cn_class)

        init = ['\n', '# Tool Bar\n',
                '$self->{%s} = %s->new($self, -1%s);\n' % (obj.name, klass, extra)
                ] + self.get_init_code(obj) + self.get_properties_code(obj) + [
                '$self->SetToolBar($self->{%s});\n' % obj.name,
                '%s->Realize();\n' % self.format_widget_access(obj),
                '# Tool Bar end\n' ]
        return init, []

    def get_layout_code(self, obj):
        return ['%s->Realize();\n' % self.format_widget_access(obj)]


def initialize():
    klass = 'wxToolBar'
    common.class_names['EditToolBar'] = klass
    common.register('perl', klass, PerlCodeGenerator(klass))