mirror of
https://github.com/wxWidgets/Phoenix.git
synced 2026-01-07 04:20:07 +01:00
Add a generator that updates a persistent mapping of item (functions, classes, etc.) to the module names they are a member of. Remove the NO_MODULE dictionary as we're tracking all the item --> module names now. Consolidate the 2 removeWxPrefix implementations to just one. Fix taking out too much space in the class index when removing the :ref: for unknown items, which caused ReST problems. Use pyName if it is set When renaming classes we also need to change the className in the method objects Properly deal with nested classes
96 lines
3.4 KiB
Python
96 lines
3.4 KiB
Python
#---------------------------------------------------------------------------
|
|
# Name: etg/object.py
|
|
# Author: Robin Dunn
|
|
#
|
|
# Created: 9-Nov-2010
|
|
# Copyright: (c) 2013 by Total Control Software
|
|
# License: wxWindows License
|
|
#---------------------------------------------------------------------------
|
|
|
|
import etgtools
|
|
import etgtools.tweaker_tools as tools
|
|
|
|
PACKAGE = "wx"
|
|
MODULE = "_core"
|
|
NAME = "object" # 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 = [
|
|
'wxRefCounter',
|
|
'wxObject',
|
|
# 'wxClassInfo',
|
|
]
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
def run():
|
|
# Parse the XML file(s) building a collection of Extractor objects
|
|
module = etgtools.ModuleDef(PACKAGE, MODULE, NAME, DOCSTRING,
|
|
check4unittest=False)
|
|
etgtools.parseDoxyXML(module, ITEMS)
|
|
|
|
#-----------------------------------------------------------------
|
|
# Tweak the parsed meta objects in the module object as needed for
|
|
# customizing the generated code and docstrings.
|
|
|
|
|
|
module.find('wxCreateDynamicObject').ignore()
|
|
|
|
#module.find('wxClassInfo').abstract = True
|
|
#module.find('wxClassInfo.wxClassInfo').ignore()
|
|
|
|
|
|
|
|
#--------------------------------------------------
|
|
c = module.find('wxRefCounter')
|
|
assert isinstance(c, etgtools.ClassDef)
|
|
c.find('~wxRefCounter').ignore(False)
|
|
c.addPrivateCopyCtor()
|
|
|
|
|
|
#--------------------------------------------------
|
|
c = module.find('wxObject')
|
|
c.find('operator delete').ignore()
|
|
c.find('operator new').ignore()
|
|
c.find('GetClassInfo').ignore()
|
|
c.find('IsKindOf').ignore()
|
|
|
|
# EXPERIMENTAL: By turning off the virtualness of the wxObject dtor, and
|
|
# since there are no other virtuals that we are exposing here, then all
|
|
# classes that derive from wxObject that do not have any virtuals of
|
|
# their own (or have the virtual flags turned off by the tweaker code)
|
|
# can have simpler wrappers generated for them with no extra derived
|
|
# class whose only purpose is to reflect calls to the virtual methods to
|
|
# Python implementations. (And since the only virtual is the dtor then
|
|
# that is of no real benefit to Python code since we're not overriding
|
|
# the dtor anyhow.) In addition it appears so far that none of these
|
|
# classes would ever need to have Python derived classes anyway. This
|
|
# also makes it easier and less SIP-specific to add or replace ctors in
|
|
# those classes with custom C++ code. (See wxFont and wxAcceleratorTable
|
|
# for examples.)
|
|
c.find('~wxObject').isVirtual = False
|
|
|
|
c.addCppMethod('const wxChar*', 'GetClassName', '()',
|
|
body='return self->GetClassInfo()->GetClassName();',
|
|
doc='Returns the class name of the C++ class using wxRTTI.')
|
|
|
|
c.addCppMethod('void', 'Destroy', '()',
|
|
body='delete self;',
|
|
doc='Deletes the C++ object this Python object is a proxy for.',
|
|
transferThis=True) # TODO: Check this
|
|
|
|
|
|
tools.addSipConvertToSubClassCode(c)
|
|
|
|
#-----------------------------------------------------------------
|
|
tools.doCommonTweaks(module)
|
|
tools.runGenerators(module)
|
|
|
|
|
|
#---------------------------------------------------------------------------
|
|
if __name__ == '__main__':
|
|
run()
|
|
|