diff --git a/etg/_core.py b/etg/_core.py index 2cf2c962..599d1b4e 100644 --- a/etg/_core.py +++ b/etg/_core.py @@ -150,19 +150,21 @@ INCLUDES = [ # core 'listctrl', 'treeitemdata', 'treectrl', - 'dirctrl', # toplevel and dialogs 'nonownedwnd', 'toplevel', 'dialog', 'dirdlg', + 'dirctrl', 'filedlg', 'frame', 'msgdlg', 'progdlg', 'popupwin', 'tipwin', + 'colordlg', + 'choicdlg', # misc 'utils', diff --git a/etg/choicdlg.py b/etg/choicdlg.py new file mode 100644 index 00000000..6f24a129 --- /dev/null +++ b/etg/choicdlg.py @@ -0,0 +1,99 @@ +#--------------------------------------------------------------------------- +# Name: etg/choicdlg.py +# Author: Robin Dunn +# +# Created: 30-Mar-2012 +# Copyright: (c) 2012 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 + 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.pyName = '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() + diff --git a/etg/colordlg.py b/etg/colordlg.py new file mode 100644 index 00000000..2c25ba01 --- /dev/null +++ b/etg/colordlg.py @@ -0,0 +1,50 @@ +#--------------------------------------------------------------------------- +# Name: etg/colordlg.py +# Author: Robin Dunn +# +# Created: 30-Mar-2012 +# Copyright: (c) 2012 by Total Control Software +# License: wxWindows License +#--------------------------------------------------------------------------- + +import etgtools +import etgtools.tweaker_tools as tools + +PACKAGE = "wx" +MODULE = "_core" +NAME = "colordlg" # 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 = [ "wxColourData", + "wxColourDialog", + ] + +#--------------------------------------------------------------------------- + +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. + + module.addHeaderCode("#include ") + + c = module.find('wxColourDialog') + assert isinstance(c, etgtools.ClassDef) + tools.fixTopLevelWindowClass(c) + + + #----------------------------------------------------------------- + tools.doCommonTweaks(module) + tools.runGenerators(module) + + +#--------------------------------------------------------------------------- +if __name__ == '__main__': + run() + diff --git a/unittests/test_choicdlg.py b/unittests/test_choicdlg.py new file mode 100644 index 00000000..08e55c06 --- /dev/null +++ b/unittests/test_choicdlg.py @@ -0,0 +1,31 @@ +import imp_unittest, unittest +import wtc +import wx + +#--------------------------------------------------------------------------- + +class choicdlg_Tests(wtc.WidgetTestCase): + + def test_choicdlgSingle(self): + d = wx.SingleChoiceDialog(self.frame, 'message', 'caption', + choices="one two three four five".split()) + d.SetSelection(2) + d.Destroy() + + def test_choicdlgSingleFunc(self): + wx.GetSingleChoice + + + def test_choicdlgMulti(self): + d = wx.MultiChoiceDialog(self.frame, 'message', 'caption', + choices="one two three four five".split()) + d.SetSelections([2, 4]) + s = d.GetSelections() + #self.assertEqual(s, [2,4]) the internal list isn't updated right away, can't test this here + d.Destroy() + + +#--------------------------------------------------------------------------- + +if __name__ == '__main__': + unittest.main() diff --git a/unittests/test_colordlg.py b/unittests/test_colordlg.py new file mode 100644 index 00000000..6d1ab994 --- /dev/null +++ b/unittests/test_colordlg.py @@ -0,0 +1,21 @@ +import imp_unittest, unittest +import wtc +import wx + +#--------------------------------------------------------------------------- + +class colordlg_Tests(wtc.WidgetTestCase): + + def test_colordlg1(self): + data = wx.ColourData() + dlg = wx.ColourDialog(self.frame, data) + dlg.Destroy() + + def test_colordlg2(self): + wx.GetColourFromUser + + +#--------------------------------------------------------------------------- + +if __name__ == '__main__': + unittest.main()