Files
Phoenix/etg/object.py
Robin Dunn 24e2b78806 Lots more docs changes.
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
2016-05-22 23:39:40 -07:00

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()