File: vscroll.py

package info (click to toggle)
wxpython4.0 4.2.3%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 221,752 kB
  • sloc: cpp: 962,555; python: 230,573; ansic: 170,731; makefile: 51,756; sh: 9,342; perl: 1,564; javascript: 584; php: 326; xml: 200
file content (183 lines) | stat: -rw-r--r-- 6,866 bytes parent folder | download | duplicates (2)
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#---------------------------------------------------------------------------
# Name:        etg/vscrol.py
# Author:      Robin Dunn
#
# Created:     20-Dec-2011
# Copyright:   (c) 2011-2020 by Total Control Software
# License:     wxWindows License
#---------------------------------------------------------------------------

import etgtools
import etgtools.tweaker_tools as tools
from etgtools import WigCode

PACKAGE   = "wx"
MODULE    = "_core"
NAME      = "vscroll"   # Base name of the file to generate to for this script
DOCSTRING = ""

# The classes and/or the basename of the Doxygen XML files to be processed by
# this script.
ITEMS  = [ "wxVarScrollHelperBase",
           "wxVarVScrollHelper",
           "wxVarHScrollHelper",
           "wxVarHVScrollHelper",
           "wxVScrolledWindow",
           "wxHScrolledWindow",
           "wxHVScrolledWindow",
           ]


#---------------------------------------------------------------------------

def run():
    # Parse the XML file(s) building a collection of Extractor objects
    module = etgtools.ModuleDef(PACKAGE, MODULE, NAME, DOCSTRING)
    etgtools.parseDoxyXML(module, ITEMS)

    #-----------------------------------------------------------------
    # Tweak the parsed meta objects in the module object as needed for
    # customizing the generated code and docstrings.


    c = module.find('wxVarScrollHelperBase')
    assert isinstance(c, etgtools.ClassDef)
    c.abstract = True

    c.find('OnGetUnitsSizeHint').ignore(False)
    c.find('EstimateTotalSize').ignore(False)
    c.find('OnGetUnitSize').ignore(False)

    c.find('GetTargetWindow').isVirtual = False
    c.find('SetTargetWindow').isVirtual = False
    c.find('RefreshAll').isVirtual = False
    c.find('UpdateScrollbar').isVirtual = False

    # Ensure that SIP knows that there are implementations of these base
    # class virtual methods in each of the two helper classes below.
    baseVirtuals = """\
    virtual void OnGetUnitsSizeHint(size_t unitMin, size_t unitMax) const;
    virtual wxCoord EstimateTotalSize() const;
    virtual int GetNonOrientationTargetSize() const;
    virtual wxOrientation GetOrientation() const;
    virtual int GetOrientationTargetSize() const;
    virtual wxCoord OnGetUnitSize(size_t unit) const;
    """

    c = module.find('wxVarVScrollHelper')
    c.addItem(WigCode(baseVirtuals, protection='protected'))
    c.find('EstimateTotalHeight').ignore(False)
    c.find('OnGetRowsHeightHint').ignore(False)
    c.find('OnGetRowHeight').ignore(False)
    c.find('RefreshRows.from').name = 'from_'
    c.find('RefreshRows.to').name = 'to_'

    c = module.find('wxVarHScrollHelper')
    c.addItem(WigCode(baseVirtuals, protection='protected'))
    c.find('EstimateTotalWidth').ignore(False)
    c.find('OnGetColumnsWidthHint').ignore(False)
    c.find('OnGetColumnWidth').ignore(False)
    c.find('RefreshColumns.from').name = 'from_'
    c.find('RefreshColumns.to').name = 'to_'


    c = module.find('wxVarHVScrollHelper')
    # For this class those base methods shouldn't be overridden, (since there
    # are orientation-specfic versions in the 2 superclasses) so tell SIP
    # that they are private so it won't add support for them and end up with
    # multiple inheritance ambiguities.
    c.addItem(WigCode(baseVirtuals, protection='private'))



    c = module.find('wxVScrolledWindow')
    assert isinstance(c, etgtools.ClassDef)
    tools.fixWindowClass(c)

    # These methods are listed in the docs for wxVScrolledWindow as present
    # but deprecated, but are not actually documented so we don't see them in
    # the incoming XML. Since they're deprecated lets just add simple wrappers
    # here instead of formally documenting them.

    # NOTE: Some of these are virtual, and there are also OnGetLineHeight and
    # OnGetLinesHint protected virtual methods, but trying to support them as
    # virtuals from here is causing more troubles than it is probably worth
    # due to ambiguities, etc... Revisit later if people complain.

    c.addPyMethod('HitTest', '(self, *args)',
        doc="Deprecated compatibility helper.",
        deprecated='Use VirtualHitTest instead.',
        body="""\
            if len(args) == 2:
                x, y = args
                return self.VirtualHitTest(y)
            else:
                pt = args[0]
                return self.VirtualHitTest(pt[1])
            """)

    c.addCppMethod('unsigned long',  'GetFirstVisibleLine', '()',
        doc="Deprecated compatibility helper.",
        deprecated='Use GetVisibleRowsBegin instead.',
        body="return self->GetVisibleRowsBegin();")

    c.addCppMethod('unsigned long',  'GetLastVisibleLine', '()',
        doc="Deprecated compatibility helper.",
        deprecated='Use GetVisibleRowsEnd instead.',
        body="return self->GetVisibleRowsEnd();")

    c.addCppMethod('unsigned long',  'GetLineCount', '()',
        doc="Deprecated compatibility helper.",
        deprecated='Use GetRowCount instead.',
        body="return self->GetRowCount();")

    c.addCppMethod('void',  'SetLineCount', '(unsigned long count)',
        doc="Deprecated compatibility helper.",
        deprecated='Use SetRowCount instead.',
        body="self->SetRowCount(count);")

    c.addCppMethod('void',  'RefreshLine', '(unsigned long line)',
        doc="Deprecated compatibility helper.",
        deprecated='Use RefreshRow instead.',
        body="self->RefreshRow(line);")

    c.addCppMethod('void',  'RefreshLines', '(unsigned long from_, unsigned long to_)',
        doc="Deprecated compatibility helper.",
        deprecated='Use RefreshRows instead.',
        body="self->RefreshRows(from_, to_);")

    c.addCppMethod('bool',  'ScrollToLine', '(unsigned long line)',
        doc="Deprecated compatibility helper.",
        deprecated='Use ScrollToRow instead.',
        body="return self->ScrollToRow(line);")

    c.addCppMethod('bool',  'ScrollLines', '(int lines)',
        doc="Deprecated compatibility helper.",
        deprecated='Use ScrollRows instead.',
        #body="return self->wxVarVScrollLegacyAdaptor::ScrollLines(lines);")
        body="return self->ScrollRows(lines);")

    c.addCppMethod('bool',  'ScrollPages', '(int pages)',
        doc="Deprecated compatibility helper.",
        deprecated='Use ScrollRowPages instead.',
        #body="return self->wxVarVScrollLegacyAdaptor::ScrollPages(pages);")
        body="return self->ScrollRowPages(pages);")



    c = module.find('wxHScrolledWindow')
    tools.fixWindowClass(c)

    c = module.find('wxHVScrolledWindow')
    tools.fixWindowClass(c)


    #-----------------------------------------------------------------
    tools.doCommonTweaks(module)
    tools.runGenerators(module)


#---------------------------------------------------------------------------
if __name__ == '__main__':
    run()