mirror of
https://github.com/wxWidgets/Phoenix.git
synced 2026-01-07 12:30: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
99 lines
3.3 KiB
Python
99 lines
3.3 KiB
Python
#---------------------------------------------------------------------------
|
|
# Name: etg/choicdlg.py
|
|
# Author: Robin Dunn
|
|
#
|
|
# Created: 30-Mar-2012
|
|
# Copyright: (c) 2013 by Total Control Software
|
|
# License: wxWindows License
|
|
#---------------------------------------------------------------------------
|
|
|
|
import etgtools
|
|
import etgtools.tweaker_tools as tools
|
|
|
|
PACKAGE = "wx"
|
|
MODULE = "_core"
|
|
NAME = "choicdlg" # 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 = [ "wxMultiChoiceDialog",
|
|
"wxSingleChoiceDialog",
|
|
]
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
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('wxMultiChoiceDialog')
|
|
assert isinstance(c, etgtools.ClassDef)
|
|
tools.fixTopLevelWindowClass(c)
|
|
|
|
|
|
c = module.find('wxSingleChoiceDialog')
|
|
tools.fixTopLevelWindowClass(c)
|
|
|
|
# Make a new class so we can ignore the clientData parameter in the ctor
|
|
c.addHeaderCode("""\
|
|
class wxPySingleChoiceDialog : public wxSingleChoiceDialog {
|
|
public:
|
|
wxPySingleChoiceDialog(wxWindow* parent,
|
|
const wxString& message,
|
|
const wxString& caption,
|
|
const wxArrayString& choices,
|
|
long style = wxCHOICEDLG_STYLE,
|
|
const wxPoint& pos = wxDefaultPosition)
|
|
: wxSingleChoiceDialog(parent, message, caption, choices, (void**)NULL, style, pos)
|
|
{}
|
|
};
|
|
""")
|
|
|
|
for item in c.allItems():
|
|
if item.name == 'wxSingleChoiceDialog':
|
|
item.name = 'wxPySingleChoiceDialog'
|
|
c.renameClass('SingleChoiceDialog')
|
|
|
|
# ignore this ctor
|
|
c.find('wxPySingleChoiceDialog').findOverload('int n').ignore()
|
|
|
|
# and ignore the clientData param in this one
|
|
ctor = c.find('wxPySingleChoiceDialog').findOverload('wxArrayString')
|
|
ctor.find('clientData').ignore()
|
|
|
|
c.find('GetSelectionData').ignore()
|
|
|
|
|
|
# ignore a bunch of the standalone functions
|
|
for f in module.find('wxGetSingleChoiceIndex').all():
|
|
f.ignore()
|
|
for f in module.find('wxGetSingleChoiceData').all():
|
|
f.ignore()
|
|
for f in module.find('wxGetSelectedChoices').all(): # TODO, it might be nice to keep this one
|
|
f.ignore()
|
|
|
|
# keep just the overloads of this function that use wxArrayString, and
|
|
# ignore the ones that have "int n"
|
|
for func in module.find('wxGetSingleChoice').all():
|
|
for p in func:
|
|
if p.type == 'int' and p.name == 'n':
|
|
func.ignore()
|
|
|
|
|
|
|
|
#-----------------------------------------------------------------
|
|
tools.doCommonTweaks(module)
|
|
tools.runGenerators(module)
|
|
|
|
|
|
#---------------------------------------------------------------------------
|
|
if __name__ == '__main__':
|
|
run()
|
|
|