File: xrc_sizers_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 (84 lines) | stat: -rw-r--r-- 3,051 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
"""
XRC generator functions for the various wxSizers

@copyright: 2014-2016 Carsten Grohmann
@copyright: 2017 Dietmar Schwertberger
@license: MIT (see LICENSE.txt) - THIS PROGRAM COMES WITH NO WARRANTY
"""

import common


def xrc_wxSizer_builder(obj):
    xrcgen = common.code_writers['XRC']

    class SizerXrcObject(xrcgen.DefaultXrcObject):
        def write(self, output, ntabs, properties=None):
            if properties is None: properties = {}
            properties["class_orient"] = None # don't write
            xrcgen.DefaultXrcObject.write(self, output, ntabs, properties)
    # end of class SizerXrcObject

    return SizerXrcObject(obj)


def xrc_wxFlexGridSizer_builder(obj):
    xrcgen = common.code_writers['XRC']

    class FlexGridSizerXrcObject(xrcgen.DefaultXrcObject):
        def write(self, output, ntabs, properties=None):
            if properties is None: properties = {}
            properties["class_orient"] = None # don't write
            xrcgen.DefaultXrcObject.write(self, output, ntabs, properties)
        def write_property(self, name, val, output, tabs):
            if val and name in ('growable_rows', 'growable_cols'):
                if name == 'growable_rows':
                    name2 = 'growablerows'
                else:
                    name2 = 'growablecols'
                output.append( '    ' * tabs + '<%s>%s</%s>\n' % (name2, val, name2) )
            else:
                xrcgen.DefaultXrcObject.write_property(self, name, val, output, tabs)
    # end of class FlexGridSizerXrcObject

    return FlexGridSizerXrcObject(obj)


def xrc_code_generator(obj):
    xrcgen = common.code_writers['XRC']

    class SizerSlotXrcObject(xrcgen.XrcObject):
        "XrcObject to handle widgets"

        def __init__(self, obj):
            xrcgen.XrcObject.__init__(self)
            self.obj = obj

        def write(self, output, ntabs):
            if self.obj: return
            tabs = self.tabs(ntabs)
            tabs1 = self.tabs(ntabs + 1)
            output.append( tabs + '<object class="spacer">\n' )
            output.append( tabs1 + '<size>0, 0</size>\n' )
            output.append( tabs + '</object>\n')

    return SizerSlotXrcObject(obj)


def initialize():
    cn = common.class_names
    cn['EditBoxSizer'] = 'wxBoxSizer'
    cn['EditWrapSizer'] = 'wxWrapSizer'
    cn['EditStaticBoxSizer'] = 'wxStaticBoxSizer'
    cn['EditGridSizer'] = 'wxGridSizer'
    cn['EditFlexGridSizer'] = 'wxFlexGridSizer'

    xrcgen = common.code_writers.get("XRC")
    if xrcgen:
        xrcgen.register_widget_code_generator( 'wxBoxSizer', xrc_wxSizer_builder )
        xrcgen.register_widget_code_generator( 'wxWrapSizer', xrc_wxSizer_builder )
        xrcgen.register_widget_code_generator( 'wxStaticBoxSizer', xrc_wxSizer_builder )
        xrcgen.register_widget_code_generator( 'wxGridSizer', xrc_wxSizer_builder )
        xrcgen.register_widget_code_generator( 'wxFlexGridSizer', xrc_wxFlexGridSizer_builder )
        xrcgen.register_widget_code_generator( 'sizerslot', xrc_code_generator )