+
+%define %property(NAME, STUFF...)
+ %pythoncode { NAME = property(STUFF) }
+%enddef
+
+
+%define setCallbackInfo(klass)
+ "klass._setCallbackInfo(self, self, klass)"
+%enddef
+
+
+//----------------------------------------------------------------------
+// Macros for the docstring and autodoc features of SWIG. These will
+// help make the code look more readable, and pretty, as well as help
+// reduce typing in some cases.
+
+// Set the docsring for the given full or partial declaration
+#ifdef _DO_FULL_DOCS
+ %define DocStr(decl, docstr, details)
+ %feature("docstring") decl docstr details;
+ %enddef
+#else
+ %define DocStr(decl, docstr, details)
+ %feature("docstring") decl docstr;
+ %enddef
+#endif
+
+
+// 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
+#ifdef _DO_FULL_DOCS
+ %define DocAStr(decl, astr, docstr, details)
+ %feature("autodoc") decl astr;
+ %feature("docstring") decl docstr details
+ %enddef
+#else
+ %define DocAStr(decl, astr, docstr, details)
+ %feature("autodoc") decl astr;
+ %feature("docstring") decl docstr
+ %enddef
+#endif
+
+
+
+
+// Set the docstring for a decl and then define the decl too. Must use the
+// full declaration of the item.
+#ifdef _DO_FULL_DOCS
+ %define DocDeclStr(type, decl, docstr, details)
+ %feature("docstring") decl docstr details;
+ type decl
+ %enddef
+#else
+ %define DocDeclStr(type, decl, docstr, details)
+ %feature("docstring") decl docstr;
+ type decl
+ %enddef
+#endif
+
+
+
+// As above, but also give the decl a new %name
+#ifdef _DO_FULL_DOCS
+ %define DocDeclStrName(type, decl, docstr, details, newname)
+ %feature("docstring") decl docstr details;
+ %rename(newname) decl;
+ type decl
+ %enddef
+#else
+ %define DocDeclStrName(type, decl, docstr, details, newname)
+ %feature("docstring") decl docstr;
+ %rename(newname) decl;
+ type decl
+ %enddef
+#endif
+
+
+// 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;
+ %rename(newname) decl;
+ 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.
+#ifdef _DO_FULL_DOCS
+ %define DocDeclAStr(type, decl, astr, docstr, details)
+ %feature("autodoc") decl astr;
+ %feature("docstring") decl docstr details;
+ type decl
+ %enddef
+#else
+ %define DocDeclAStr(type, decl, astr, docstr, details)
+ %feature("autodoc") decl astr;
+ %feature("docstring") decl docstr;
+ type decl
+ %enddef
+#endif
+
+
+// As above, but also give the decl a new %name
+#ifdef _DO_FULL_DOCS
+ %define DocDeclAStrName(type, decl, astr, docstr, details, newname)
+ %feature("autodoc") decl astr;
+ %feature("docstring") decl docstr details;
+ %rename(newname) decl;
+ type decl
+ %enddef
+#else
+ %define DocDeclAStrName(type, decl, astr, docstr, details, newname)
+ %feature("autodoc") decl astr;
+ %feature("docstring") decl docstr;
+ %rename(newname) decl;
+ type decl
+ %enddef
+#endif
+
+
+
+// Set the docstring for a constructor decl and then define the decl too.
+// Must use the full declaration of the item.
+#ifdef _DO_FULL_DOCS
+ %define DocCtorStr(decl, docstr, details)
+ %feature("docstring") decl docstr details;
+ decl
+ %enddef
+#else
+ %define DocCtorStr(decl, docstr, details)
+ %feature("docstring") decl docstr;
+ decl
+ %enddef
+#endif
+
+
+// As above, but also give the decl a new %name
+#ifdef _DO_FULL_DOCS
+ %define DocCtorStrName(decl, docstr, details, newname)
+ %feature("docstring") decl docstr details;
+ %rename(newname) decl;
+ decl
+ %enddef
+#else
+ %define DocCtorStrName(decl, docstr, details, newname)
+ %feature("docstring") decl docstr;
+ %rename(newname) decl;
+ decl
+ %enddef
+#endif
+
+
+// Set the autodoc string for a constructor 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;
+ %rename(newname) decl;
+ decl
+%enddef
+
+
+
+// Set the autodoc and the docstring for a constructor decl and then define
+// the decl too. Must use the full declaration of the item.
+#ifdef _DO_FULL_DOCS
+ %define DocCtorAStr(decl, astr, docstr, details)
+ %feature("autodoc") decl astr;
+ %feature("docstring") decl docstr details;
+ decl
+ %enddef
+#else
+ %define DocCtorAStr(decl, astr, docstr, details)
+ %feature("autodoc") decl astr;
+ %feature("docstring") decl docstr;
+ decl
+ %enddef
+#endif
+
+
+
+// As above, but also give the decl a new %name
+#ifdef _DO_FULL_DOCS
+ %define DocCtorAStrName(decl, astr, docstr, details, newname)
+ %feature("autodoc") decl astr;
+ %feature("docstring") decl docstr details;
+ %rename(newname) decl;
+ decl
+ %enddef
+#else
+ %define DocCtorAStrName(decl, astr, docstr, details, newname)
+ %feature("autodoc") decl astr;
+ %feature("docstring") decl docstr;
+ %rename(newname) decl;
+ decl
+ %enddef
+#endif
+
+
+
+%define %newgroup
+%pythoncode {
+%#---------------------------------------------------------------------------
+}
+%enddef
+
+
+// A set of macros to make using %rename easier, since %name has been
+// deprecated...
+%define %Rename(newname, type, decl)
+ %rename(newname) decl;
+ type decl
+%enddef
+
+%define %RenameCtor(newname, decl)
+ %rename(newname) decl;
+ decl
+%enddef
+
+#ifdef _DO_FULL_DOCS
+ %define %RenameDocCtor(newname, docstr, details, decl)
+ %feature("docstring") decl docstr details;
+ %rename(newname) decl;
+ decl
+ %enddef
+#else
+ %define %RenameDocCtor(newname, docstr, details, decl)
+ %feature("docstring") decl docstr;
+ %rename(newname) decl;
+ decl
+ %enddef
+#endif
+
+
+//---------------------------------------------------------------------------
+// Generates a base_On* method that just wraps a call to the On*, and mark it
+// deprecated. We need this because there is no longer any need for a
+// base_On* method to be able to call the C++ base class method, since our
+// virtualization code can now sense when an attempt is being made to call
+// the base class version from the derived class override.
+
+%define %MAKE_BASE_FUNC(Class, Method)
+ %pythoncode {
+ def base_##Method(*args, **kw):
+ return Class.Method(*args, **kw)
+ base_##Method = wx._deprecated(base_##Method,
+ "Please use Class.Method instead.")
+ }
+%enddef
+