+//----------------------------------------------------------------------
+// Various SWIG macros and such
+
+#define %addtofunc %feature("addtofunc")
+#define %kwargs %feature("kwargs")
+#define %nokwargs %feature("nokwargs")
+
+#ifndef %shadow
+#define %shadow %insert("shadow")
+#endif
+
+#ifndef %pythoncode
+#define %pythoncode %insert("python")
+#endif
+
+#define WXUNUSED(x) x
+
+
+// Given the name of a wxChar (or wxString) constant in C++, make
+// a static wxString for wxPython, and also let SWIG wrap it.
+%define MAKE_CONST_WXSTRING(strname)
+ %{ static const wxString wxPy##strname(wx##strname); %}
+ %immutable;
+ %name(strname) const wxString wxPy##strname;
+ %mutable;
+%enddef
+
+%define MAKE_CONST_WXSTRING2(strname, val)
+ %{ static const wxString wxPy##strname(wxT(val)); %}
+ %immutable;
+ %name(strname) const wxString wxPy##strname;
+ %mutable;
+%enddef
+
+%define MAKE_CONST_WXSTRING_NOSWIG(strname)
+ %{ static const wxString wxPy##strname(wx##strname); %}
+%enddef
+
+// Generate code in the module init for the event types, since they may not be
+// initialized yet when they are used in the static swig_const_table.
+%typemap(consttab) wxEventType; // TODO: how to prevent code inserted into the consttab?
+%typemap(constcode) wxEventType "PyDict_SetItemString(d, \"$symname\", PyInt_FromLong($value));";
+
+
+
+// Macros for the docstring and autodoc features of SWIG.
+
+// Set the docsring for the given full or partial declaration
+%define DocStr(decl, docstr)
+ %feature("docstring") decl docstr;
+ //%feature("refdoc") decl "";
+%enddef
+
+// Set the autodoc string for a full or partial declaration
+%define DocA(decl, astr)
+ %feature("autodoc") decl astr;
+%enddef
+
+// Set both the autodoc and docstring for a full or partial declaration
+%define DocAStr(decl, astr, docstr)
+ %feature("autodoc") decl astr;
+ %feature("docstring") decl docstr
+%enddef
+
+// Set the detailed reference docs for full or partial declaration
+#define DocRef(decl, str) %feature("docref") decl str
+
+
+
+
+// Set the docstring for a decl and then define the decl too. Must use the
+// full declaration of the item.
+%define DocDeclStr(type, decl, docstr)
+ %feature("docstring") decl docstr;
+ type decl
+%enddef
+
+// As above, but also give the decl a new %name
+%define DocDeclStrName(type, decl, docstr, newname)
+ %feature("docstring") decl docstr;
+ %name(newname) type decl
+%enddef
+
+
+// Set the autodoc string for a decl and then define the decl too. Must use the
+// full declaration of the item.
+%define DocDeclA(type, decl, astr)
+ %feature("autodoc") decl astr;
+ type decl
+%enddef
+
+// As above, but also give the decl a new %name
+%define DocDeclAName(type, decl, astr, newname)
+ %feature("autodoc") decl astr;
+ %name(newname) type decl
+%enddef
+
+
+
+// Set the autodoc and the docstring for a decl and then define the decl too.
+// Must use the full declaration of the item.
+%define DocDeclAStr(type, decl, astr, docstr)
+ %feature("autodoc") decl astr;
+ %feature("docstring") decl docstr;
+ type decl
+%enddef
+
+// As above, but also give the decl a new %name
+%define DocDeclAStrName(type, decl, astr, docstr, newname)
+ %feature("autodoc") decl astr;
+ %feature("docstring") decl docstr;
+ %name(newname) type decl
+%enddef
+
+
+
+
+// Set the docstring for a constructor decl and then define the decl too.
+// Must use the full declaration of the item.
+%define DocCtorStr(decl, docstr)
+ %feature("docstring") decl docstr;
+ decl
+%enddef
+
+// As above, but also give the decl a new %name
+%define DocCtorStrName(decl, docstr, newname)
+ %feature("docstring") decl docstr;
+ %name(newname) decl
+%enddef
+
+
+// Set the autodoc string for a decl and then define the decl too. Must use the
+// full declaration of the item.
+%define DocCtorA(decl, astr)
+ %feature("autodoc") decl astr;
+ decl
+%enddef
+
+// As above, but also give the decl a new %name
+%define DocCtorAname(decl, astr, newname)
+ %feature("autodoc") decl astr;
+ %name(newname) decl
+%enddef
+
+
+
+// Set the autodoc and the docstring for a decl and then define the decl too.
+// Must use the full declaration of the item.
+%define DocCtorAStr(decl, astr, docstr)
+ %feature("autodoc") decl astr;
+ %feature("docstring") decl docstr;
+ decl
+%enddef
+
+// As above, but also give the decl a new %name
+%define DocCtorAStrName(decl, astr, docstr, newname)
+ %feature("autodoc") decl astr;
+ %feature("docstring") decl docstr;
+ %name(newname) decl
+%enddef
+
+
+// A placeholder for the detailed reference docs.
+%define RefDoc(decl, docstr)
+ %feature("refdoc") decl docstr;
+%enddef
+
+
+%define %newgroup
+%pythoncode {
+%#---------------------------------------------------------------------------
+}
+%enddef
+
+//---------------------------------------------------------------------------
+// Forward declarations and %renames for some classes, so the autodoc strings
+// will be able to use the right types even when the real class declaration is
+// not in the module being processed.
+
+#ifdef BUILDING_RENAMERS
+ #define FORWARD_DECLARE(wxName, Name)
+#else
+ %define FORWARD_DECLARE(wxName, Name)
+ %rename(Name) wxName;
+ class wxName;
+ %enddef
+#endif
+
+FORWARD_DECLARE(wxString, String);
+FORWARD_DECLARE(wxBitmap, Bitmap);
+FORWARD_DECLARE(wxDateTime, DateTime);
+FORWARD_DECLARE(wxInputStream, InputStream);
+FORWARD_DECLARE(wxDC, DC);
+FORWARD_DECLARE(wxCursor, Cursor);
+FORWARD_DECLARE(wxRegion, Region);
+FORWARD_DECLARE(wxColour, Colour);
+FORWARD_DECLARE(wxFont, Font);
+FORWARD_DECLARE(wxCaret, Caret);
+FORWARD_DECLARE(wxToolTip, ToolTip);
+FORWARD_DECLARE(wxPyDropTarget, PyDropTarget);
+FORWARD_DECLARE(wxImageList, ImageList);
+FORWARD_DECLARE(wxMemoryDC, MemoryDC);
+FORWARD_DECLARE(wxHtmlTagHandler, HtmlTagHandler);
+FORWARD_DECLARE(wxConfigBase, ConfigBase);
+FORWARD_DECLARE(wxIcon, Icon);