From 0190c47234148dbbb778fb3150d7a375389dbb8b Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Thu, 9 Sep 2004 18:48:25 +0000 Subject: [PATCH] New SWIG runtime files and api updates for the move to SWIG 1.3.22 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@29063 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- wxPython/docs/xml/wxPython-metadata.xml | 187 ++++++++++++++++++-- wxPython/include/wx/wxPython/wxPython_int.h | 2 + wxPython/src/_core_api.i | 1 + wxPython/src/common.swg | 2 + wxPython/src/libpy.c | 163 ++++++++++------- wxPython/src/my_fragments.i | 69 ++++++++ wxPython/src/my_typemaps.i | 56 ------ wxPython/src/pyrun.swg | 3 +- wxPython/src/python.swg | 90 ++++++++++ 9 files changed, 436 insertions(+), 137 deletions(-) create mode 100644 wxPython/src/my_fragments.i create mode 100644 wxPython/src/python.swg diff --git a/wxPython/docs/xml/wxPython-metadata.xml b/wxPython/docs/xml/wxPython-metadata.xml index 854b9639fc..32144cea8b 100644 --- a/wxPython/docs/xml/wxPython-metadata.xml +++ b/wxPython/docs/xml/wxPython-metadata.xml @@ -1292,6 +1292,19 @@ success flag and rgb values. + + ConvertAlphaToMask(self, byte threshold=128) -> bool + If the image has alpha channel, this method converts it to mask. All pixels +with alpha value less than ``threshold`` are replaced with mask colour and the +alpha channel is removed. Mask colour is chosen automatically using +`FindFirstUnusedColour`. + +If the image image doesn't have alpha channel, ConvertAlphaToMask does +nothing. + + + + SetMaskFromImage(self, Image mask, byte mr, byte mg, byte mb) -> bool @@ -5213,6 +5226,34 @@ not be used at all. Returns the foreground colour of the window. The interpretation of foreground colour is dependent on the window class; it may be the text colour or other colour, or it may not be used at all. + + + SetBackgroundStyle(self, int style) -> bool + Returns the background style of the window. The background style +indicates how the background of the window is drawn. + + ====================== ======================================== + wx.BG_STYLE_SYSTEM The background colour or pattern should + be determined by the system + wx.BG_STYLE_COLOUR The background should be a solid colour + wx.BG_STYLE_CUSTOM The background will be implemented by the + application. + ====================== ======================================== + +On GTK+, use of wx.BG_STYLE_CUSTOM allows the flicker-free drawing of +a custom background, such as a tiled bitmap. Currently the style has +no effect on other platforms. + +:see: `GetBackgroundStyle`, `SetBackgroundColour` + + + + + + GetBackgroundStyle(self) -> int + Returns the background style of the window. + +:see: `SetBackgroundStyle` SetCursor(self, Cursor cursor) -> bool @@ -8438,16 +8479,16 @@ __wxPyPtrTypeMap['wxStatusBar95'] = 'wxStatusBar' #---------------------------------------------------------------------------- # Load version numbers from __version__... Ensure that major and minor -# versions are the same for both wxPython and wxWindows. +# versions are the same for both wxPython and wxWidgets. from __version__ import * __version__ = VERSION_STRING -assert MAJOR_VERSION == _core_.MAJOR_VERSION, "wxPython/wxWindows version mismatch" -assert MINOR_VERSION == _core_.MINOR_VERSION, "wxPython/wxWindows version mismatch" +assert MAJOR_VERSION == _core_.MAJOR_VERSION, "wxPython/wxWidgets version mismatch" +assert MINOR_VERSION == _core_.MINOR_VERSION, "wxPython/wxWidgets version mismatch" if RELEASE_VERSION != _core_.RELEASE_VERSION: import warnings - warnings.warn("wxPython/wxWindows release number mismatch") + warnings.warn("wxPython/wxWidgets release number mismatch") #---------------------------------------------------------------------------- @@ -12481,6 +12522,7 @@ output. Default is 720ppi. Create(self, Window parent, int id=-1, Point pos=DefaultPosition, Size size=DefaultSize, long style=wxTAB_TRAVERSAL|wxNO_BORDER, String name=PanelNameStr) -> bool + Create the GUI part of the Window for 2-phase creation mode. @@ -12537,6 +12579,7 @@ this. Create(self, Window parent, int id=-1, Point pos=DefaultPosition, Size size=DefaultSize, long style=wxHSCROLL|wxVSCROLL, String name=PanelNameStr) -> bool + Create the GUI part of the Window for 2-phase creation mode. @@ -14063,6 +14106,10 @@ EVT_SPLITTER_DCLICK = EVT_SPLITTER_DOUBLECLICKED ScrollLines(self, int lines) -> bool + If the platform and window class supports it, scrolls the window by +the given number of lines down, if lines is positive, or up if lines +is negative. Returns True if the window was scrolled, False if it was +already on top/bottom and nothing was done. @@ -16818,12 +16865,12 @@ indeed almost any other window. Window Styles ------------- ============== ========================================== - wx.BU_LEFT Left-justifies the label. WIN32 only. + wx.BU_LEFT Left-justifies the label. Windows and GTK+ only. wx.BU_TOP Aligns the label to the top of the button. - WIN32 only. - wx.BU_RIGHT Right-justifies the bitmap label. WIN32 only. + Windows and GTK+ only. + wx.BU_RIGHT Right-justifies the bitmap label. Windows and GTK+ only. wx.BU_BOTTOM Aligns the label to the bottom of the button. - WIN32 only. + Windows and GTK+ only. wx.BU_EXACTFIT Creates the button as small as possible instead of making it of the standard size (which is the default behaviour.) @@ -16843,7 +16890,67 @@ Events Point pos=DefaultPosition, Size size=DefaultSize, long style=0, Validator validator=DefaultValidator, String name=ButtonNameStr) -> Button - Create and show a button. + Create and show a button. The preferred way to create standard +buttons is to use a standard ID and an empty label. In this case +wxWigets will automatically use a stock label that coresponds to the +ID given. In additon, the button will be decorated with stock icons +under GTK+ 2. + +The stock IDs and coresponding labels are + + ================== ==================== + wx.ID_ADD 'Add' + wx.ID_APPLY '\\&Apply' + wx.ID_BOLD '\\&Bold' + wx.ID_CANCEL '\\&Cancel' + wx.ID_CLEAR '\\&Clear' + wx.ID_CLOSE '\\&Close' + wx.ID_COPY '\\&Copy' + wx.ID_CUT 'Cu\\&t' + wx.ID_DELETE '\\&Delete' + wx.ID_FIND '\\&Find' + wx.ID_REPLACE 'Find and rep\\&lace' + wx.ID_BACKWARD '\\&Back' + wx.ID_DOWN '\\&Down' + wx.ID_FORWARD '\\&Forward' + wx.ID_UP '\\&Up' + wx.ID_HELP '\\&Help' + wx.ID_HOME '\\&Home' + wx.ID_INDENT 'Indent' + wx.ID_INDEX '\\&Index' + wx.ID_ITALIC '\\&Italic' + wx.ID_JUSTIFY_CENTER 'Centered' + wx.ID_JUSTIFY_FILL 'Justified' + wx.ID_JUSTIFY_LEFT 'Align Left' + wx.ID_JUSTIFY_RIGHT 'Align Right' + wx.ID_NEW '\\&New' + wx.ID_NO '\\&No' + wx.ID_OK '\\&OK' + wx.ID_OPEN '\\&Open' + wx.ID_PASTE '\\&Paste' + wx.ID_PREFERENCES '\\&Preferences' + wx.ID_PRINT '\\&Print' + wx.ID_PREVIEW 'Print previe\\&w' + wx.ID_PROPERTIES '\\&Properties' + wx.ID_EXIT '\\&Quit' + wx.ID_REDO '\\&Redo' + wx.ID_REFRESH 'Refresh' + wx.ID_REMOVE 'Remove' + wx.ID_REVERT_TO_SAVED 'Revert to Saved' + wx.ID_SAVE '\\&Save' + wx.ID_SAVEAS 'Save \\&As...' + wx.ID_STOP '\\&Stop' + wx.ID_UNDELETE 'Undelete' + wx.ID_UNDERLINE '\\&Underline' + wx.ID_UNDO '\\&Undo' + wx.ID_UNINDENT '\\&Unindent' + wx.ID_YES '\\&Yes' + wx.ID_ZOOM_100 '\\&Actual Size' + wx.ID_ZOOM_FIT 'Zoom to \\&Fit' + wx.ID_ZOOM_IN 'Zoom \\&In' + wx.ID_ZOOM_OUT 'Zoom \\&Out' + ================== ==================== + @@ -22823,9 +22930,10 @@ toggle keys. On some platforms those may be the only keys that work. - __init__(self, int maxFiles=9) -> FileHistory + __init__(self, int maxFiles=9, int idBase=ID_FILE1) -> FileHistory + @@ -24045,8 +24153,21 @@ Identifying art resources ------------------------- Every bitmap is known to wx.ArtProvider under an unique ID that is -used when requesting a resource from it. The IDs can have one of these -predefined values: +used when requesting a resource from it. The IDs can have one of the +following predefined values. Additionally, any string recognized by +custom art providers registered using `PushProvider` may be used. + +GTK+ Note +--------- + +When running under GTK+ 2, GTK+ stock item IDs (e.g. 'gtk-cdrom') may be used +as well. Additionally, if wxGTK was compiled against GTK+ >= 2.4, then it is +also possible to load icons from current icon theme by specifying their name +without the extension and directory components. Icon themes recognized by GTK+ +follow the freedesktop.org Icon Themes specification. Note that themes are +not guaranteed to contain all icons, so wx.ArtProvider may return wx.NullBitmap +or wx.NullIcon. The default theme is typically installed in /usr/share/icons/hicolor. + * wx.ART_ADD_BOOKMARK * wx.ART_DEL_BOOKMARK @@ -24085,7 +24206,7 @@ Clients ------- The Client is the entity that calls wx.ArtProvider's `GetBitmap` or -`GetIcon` function. Client IDs server as a hint to wx.ArtProvider +`GetIcon` function. Client IDs serve as a hint to wx.ArtProvider that is supposed to help it to choose the best looking bitmap. For example it is often desirable to use slightly different icons in menus and toolbars even though they represent the same action (e.g. @@ -24099,6 +24220,7 @@ identical bitmap for different client values! * wx.ART_CMN_DIALOG * wx.ART_HELP_BROWSER * wx.ART_MESSAGE_BOX + * wx.ART_BUTTON * wx.ART_OTHER (used for all requests that don't fit into any of the categories above) @@ -24126,8 +24248,21 @@ Identifying art resources ------------------------- Every bitmap is known to wx.ArtProvider under an unique ID that is -used when requesting a resource from it. The IDs can have one of these -predefined values: +used when requesting a resource from it. The IDs can have one of the +following predefined values. Additionally, any string recognized by +custom art providers registered using `PushProvider` may be used. + +GTK+ Note +--------- + +When running under GTK+ 2, GTK+ stock item IDs (e.g. 'gtk-cdrom') may be used +as well. Additionally, if wxGTK was compiled against GTK+ >= 2.4, then it is +also possible to load icons from current icon theme by specifying their name +without the extension and directory components. Icon themes recognized by GTK+ +follow the freedesktop.org Icon Themes specification. Note that themes are +not guaranteed to contain all icons, so wx.ArtProvider may return wx.NullBitmap +or wx.NullIcon. The default theme is typically installed in /usr/share/icons/hicolor. + * wx.ART_ADD_BOOKMARK * wx.ART_DEL_BOOKMARK @@ -24166,7 +24301,7 @@ Clients ------- The Client is the entity that calls wx.ArtProvider's `GetBitmap` or -`GetIcon` function. Client IDs server as a hint to wx.ArtProvider +`GetIcon` function. Client IDs serve as a hint to wx.ArtProvider that is supposed to help it to choose the best looking bitmap. For example it is often desirable to use slightly different icons in menus and toolbars even though they represent the same action (e.g. @@ -24180,6 +24315,7 @@ identical bitmap for different client values! * wx.ART_CMN_DIALOG * wx.ART_HELP_BROWSER * wx.ART_MESSAGE_BOX + * wx.ART_BUTTON * wx.ART_OTHER (used for all requests that don't fit into any of the categories above) @@ -28879,6 +29015,18 @@ this. CanDragGridSize(self) -> bool + + EnableDragCell(self, bool enable=True) + + + + + + DisableDragCell(self) + + + CanDragCell(self) -> bool + SetAttr(self, int row, int col, GridCellAttr attr) @@ -29648,6 +29796,7 @@ EVT_GRID_SELECT_CELL = wx.PyEventBinder( wxEVT_GRID_SELECT_CELL ) EVT_GRID_EDITOR_SHOWN = wx.PyEventBinder( wxEVT_GRID_EDITOR_SHOWN ) EVT_GRID_EDITOR_HIDDEN = wx.PyEventBinder( wxEVT_GRID_EDITOR_HIDDEN ) EVT_GRID_EDITOR_CREATED = wx.PyEventBinder( wxEVT_GRID_EDITOR_CREATED ) +EVT_GRID_CELL_BEGIN_DRAG = wx.PyEventBinder( wxEVT_GRID_CELL_BEGIN_DRAG ) # The same as above but with the ability to specify an identifier @@ -29667,6 +29816,8 @@ EVT_GRID_CMD_SELECT_CELL = wx.PyEventBinder( wxEVT_GRID_SELECT_CELL, EVT_GRID_CMD_EDITOR_SHOWN = wx.PyEventBinder( wxEVT_GRID_EDITOR_SHOWN, 1 ) EVT_GRID_CMD_EDITOR_HIDDEN = wx.PyEventBinder( wxEVT_GRID_EDITOR_HIDDEN, 1 ) EVT_GRID_CMD_EDITOR_CREATED = wx.PyEventBinder( wxEVT_GRID_EDITOR_CREATED, 1 ) +EVT_GRID_CMD_CELL_BEGIN_DRAG = wx.PyEventBinder( wxEVT_GRID_CELL_BEGIN_DRAG, 1 ) + @@ -40625,8 +40776,8 @@ EVT_DYNAMIC_SASH_UNIFY = wx.PyEventBinder( wxEVT_DYNAMIC_SASH_UNIFY, 1 ) GetStrings(self) -> PyObject - - GetListCtrl(self) -> wxListCtrl + + GetListCtrl(self) -> ListCtrl GetDelButton(self) -> BitmapButton diff --git a/wxPython/include/wx/wxPython/wxPython_int.h b/wxPython/include/wx/wxPython/wxPython_int.h index 157b58bef0..a39639af6e 100644 --- a/wxPython/include/wx/wxPython/wxPython_int.h +++ b/wxPython/include/wx/wxPython/wxPython_int.h @@ -338,6 +338,7 @@ typedef swig_type_info* (*p_SWIG_Python_TypeCheck_t)(char *c, swig_type_info *); typedef void* (*p_SWIG_Python_TypeCast_t)(swig_type_info *, void *); typedef swig_type_info* (*p_SWIG_Python_TypeDynamicCast_t)(swig_type_info *, void **); typedef const char* (*p_SWIG_Python_TypeName_t)(const swig_type_info *); +typedef const char * (*p_SWIG_Python_TypePrettyName_t)(const swig_type_info *); typedef swig_type_info* (*p_SWIG_Python_TypeQuery_t)(const char *); typedef void (*p_SWIG_Python_TypeClientData_t)(swig_type_info *, void *); typedef PyObject* (*p_SWIG_Python_newvarlink_t)(void); @@ -359,6 +360,7 @@ struct wxPyCoreAPI { p_SWIG_Python_TypeCast_t p_SWIG_Python_TypeCast; p_SWIG_Python_TypeDynamicCast_t p_SWIG_Python_TypeDynamicCast; p_SWIG_Python_TypeName_t p_SWIG_Python_TypeName; + p_SWIG_Python_TypePrettyName_t p_SWIG_Python_TypePrettyName; p_SWIG_Python_TypeQuery_t p_SWIG_Python_TypeQuery; p_SWIG_Python_TypeClientData_t p_SWIG_Python_TypeClientData; p_SWIG_Python_newvarlink_t p_SWIG_Python_newvarlink; diff --git a/wxPython/src/_core_api.i b/wxPython/src/_core_api.i index 8ebca68b4d..c3cc8fd053 100644 --- a/wxPython/src/_core_api.i +++ b/wxPython/src/_core_api.i @@ -137,6 +137,7 @@ static wxPyCoreAPI API = { (p_SWIG_Python_TypeCast_t)SWIG_Python_TypeCast, (p_SWIG_Python_TypeDynamicCast_t)SWIG_Python_TypeDynamicCast, (p_SWIG_Python_TypeName_t)SWIG_Python_TypeName, + (p_SWIG_Python_TypePrettyName_t)SWIG_Python_TypePrettyName, (p_SWIG_Python_TypeQuery_t)SWIG_Python_TypeQuery, (p_SWIG_Python_TypeClientData_t)SWIG_Python_TypeClientData, (p_SWIG_Python_newvarlink_t)SWIG_Python_newvarlink, diff --git a/wxPython/src/common.swg b/wxPython/src/common.swg index 4e739206ef..afdaf0b9f1 100644 --- a/wxPython/src/common.swg +++ b/wxPython/src/common.swg @@ -62,6 +62,7 @@ SWIGIMPORT(swig_type_info *) SWIG_TypeCheck(char *c, swig_type_info *); SWIGIMPORT(void *) SWIG_TypeCast(swig_type_info *, void *); SWIGIMPORT(swig_type_info *) SWIG_TypeDynamicCast(swig_type_info *, void **); SWIGIMPORT(const char *) SWIG_TypeName(const swig_type_info *); +SWIGIMPORT(const char *) SWIG_TypePrettyName(const swig_type_info *); SWIGIMPORT(swig_type_info *) SWIG_TypeQuery(const char *); SWIGIMPORT(void) SWIG_TypeClientData(swig_type_info *, void *); SWIGIMPORT(char *) SWIG_PackData(char *, void *, int); @@ -71,3 +72,4 @@ SWIGIMPORT(char *) SWIG_UnpackData(char *, void *, int); #ifdef __cplusplus } #endif + diff --git a/wxPython/src/libpy.c b/wxPython/src/libpy.c index 131b635d0d..48680c914d 100644 --- a/wxPython/src/libpy.c +++ b/wxPython/src/libpy.c @@ -28,6 +28,7 @@ #define SWIG_TypeCast SWIG_Python_TypeCast #define SWIG_TypeDynamicCast SWIG_Python_TypeDynamicCast #define SWIG_TypeName SWIG_Python_TypeName +#define SWIG_TypePrettyName SWIG_Python_TypePrettyName #define SWIG_TypeQuery SWIG_Python_TypeQuery #define SWIG_TypeClientData SWIG_Python_TypeClientData #define SWIG_PackData SWIG_Python_PackData @@ -104,6 +105,7 @@ SWIGIMPORT(swig_type_info *) SWIG_TypeCheck(char *c, swig_type_info *); SWIGIMPORT(void *) SWIG_TypeCast(swig_type_info *, void *); SWIGIMPORT(swig_type_info *) SWIG_TypeDynamicCast(swig_type_info *, void **); SWIGIMPORT(const char *) SWIG_TypeName(const swig_type_info *); +SWIGIMPORT(const char *) SWIG_TypePrettyName(const swig_type_info *); SWIGIMPORT(swig_type_info *) SWIG_TypeQuery(const char *); SWIGIMPORT(void) SWIG_TypeClientData(swig_type_info *, void *); SWIGIMPORT(char *) SWIG_PackData(char *, void *, int); @@ -112,13 +114,14 @@ SWIGIMPORT(char *) SWIG_UnpackData(char *, void *, int); #else static swig_type_info *swig_type_list = 0; +static swig_type_info **swig_type_list_handle = &swig_type_list; /* Register a type mapping with the type-checking */ SWIGRUNTIME(swig_type_info *) SWIG_TypeRegister(swig_type_info *ti) { swig_type_info *tc, *head, *ret, *next; /* Check to see if this type has already been registered */ - tc = swig_type_list; + tc = *swig_type_list_handle; while (tc) { if (strcmp(tc->name, ti->name) == 0) { /* Already exists in the table. Just add additional types to the list */ @@ -133,8 +136,8 @@ SWIG_TypeRegister(swig_type_info *ti) { next = 0; /* Place in list */ - ti->prev = swig_type_list; - swig_type_list = ti; + ti->prev = *swig_type_list_handle; + *swig_type_list_handle = ti; /* Build linked lists */ l1: @@ -203,6 +206,26 @@ SWIG_TypeName(const swig_type_info *ty) { return ty->name; } +/* Return the pretty name associated with this type, + that is an unmangled type name in a form presentable to the user. +*/ +SWIGRUNTIME(const char *) +SWIG_TypePrettyName(const swig_type_info *type) { + /* The "str" field contains the equivalent pretty names of the + type, separated by vertical-bar characters. We choose + to print the last name, as it is often (?) the most + specific. */ + if (type->str != NULL) { + const char *last_name = type->str; + const char *s; + for (s = type->str; *s; s++) + if (*s == '|') last_name = s+1; + return last_name; + } + else + return type->name; +} + /* Compare two type names skipping the space characters, therefore "char*" == "char *" and "Class" == "Class", etc. @@ -243,7 +266,7 @@ SWIG_TypeEquiv(const char *nb, const char *tb) { /* Search for a swig_type_info structure */ SWIGRUNTIME(swig_type_info *) SWIG_TypeQuery(const char *name) { - swig_type_info *ty = swig_type_list; + swig_type_info *ty = *swig_type_list_handle; while (ty) { if (ty->str && (SWIG_TypeEquiv(ty->str,name))) return ty; if (ty->name && (strcmp(name,ty->name) == 0)) return ty; @@ -261,7 +284,7 @@ SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { equiv = ti->next; while (equiv) { if (!equiv->converter) { - tc = swig_type_list; + tc = *swig_type_list_handle; while (tc) { if ((strcmp(tc->name, equiv->name) == 0)) SWIG_TypeClientData(tc,clientdata); @@ -276,10 +299,10 @@ SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { SWIGRUNTIME(char *) SWIG_PackData(char *c, void *ptr, int sz) { static char hex[17] = "0123456789abcdef"; - int i; unsigned char *u = (unsigned char *) ptr; + const unsigned char *eu = u + sz; register unsigned char uu; - for (i = 0; i < sz; i++,u++) { + for (; u != eu; ++u) { uu = *u; *(c++) = hex[(uu & 0xf0) >> 4]; *(c++) = hex[uu & 0xf]; @@ -293,8 +316,8 @@ SWIG_UnpackData(char *c, void *ptr, int sz) { register unsigned char uu = 0; register int d; unsigned char *u = (unsigned char *) ptr; - int i; - for (i = 0; i < sz; i++, u++) { + const unsigned char *eu = u + sz; + for (; u != eu; ++u) { d = *(c++); if ((d >= '0') && (d <= '9')) uu = ((d - '0') << 4); @@ -317,7 +340,7 @@ SWIG_UnpackData(char *c, void *ptr, int sz) { #endif /*********************************************************************** - * python.swg + * pyrun.swg * * This file contains the runtime support for Python modules * and includes code for managing global variables and pointer @@ -326,8 +349,6 @@ SWIG_UnpackData(char *c, void *ptr, int sz) { * Author : David Beazley (beazley@cs.uchicago.edu) ************************************************************************/ -#include "Python.h" - #ifdef __cplusplus extern "C" { #endif @@ -481,6 +502,7 @@ statichere PyTypeObject varlinktype = { 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ +#if PY_VERSION_HEX >= 0x02020000 0, /* tp_iter */ 0, /* tp_iternext */ 0, /* tp_methods */ @@ -501,6 +523,17 @@ statichere PyTypeObject varlinktype = { 0, /* tp_cache */ 0, /* tp_subclasses */ 0, /* tp_weaklist */ +#endif +#if PY_VERSION_HEX >= 0x02030200 + 0, /* tp_del */ +#endif +#ifdef COUNT_ALLOCS + /* these must be last */ + 0, /* tp_alloc */ + 0, /* tp_free */ + 0, /* tp_maxalloc */ + 0, /* tp_next */ +#endif }; /* Create a variable linking object for use later */ @@ -574,7 +607,7 @@ SWIG_Python_ConvertPtr(PyObject *obj, void **ptr, swig_type_info *ty, int flags) goto type_error; } } - c = PyString_AsString(obj); + c = PyString_AS_STRING(obj); /* Pointer values must start with leading underscore */ if (*c != '_') { *ptr = (void *) 0; @@ -602,19 +635,17 @@ cobject: } if ((pyobj) && (flags & SWIG_POINTER_DISOWN)) { - PyObject *zero = PyInt_FromLong(0); - PyObject_SetAttrString(pyobj,(char*)"thisown",zero); - Py_DECREF(zero); + PyObject_SetAttrString(pyobj,(char*)"thisown",Py_False); } return 0; type_error: + PyErr_Clear(); if (flags & SWIG_POINTER_EXCEPTION) { if (ty && c) { - PyObject *err = - PyString_FromFormat("Type error. Got %s, expected %s",c,ty->name); - PyErr_SetObject(PyExc_TypeError, err); - Py_DECREF(err); + PyErr_Format(PyExc_TypeError, + "Type error. Got %s, expected %s", + c, ty->name); } else { PyErr_SetString(PyExc_TypeError,"Expected a pointer"); } @@ -637,7 +668,7 @@ SWIG_Python_ConvertPacked(PyObject *obj, void *ptr, int sz, swig_type_info *ty, char *c = 0; if ((!obj) || (!PyString_Check(obj))) goto type_error; - c = PyString_AsString(obj); + c = PyString_AS_STRING(obj); /* Pointer values must start with leading underscore */ if (*c != '_') goto type_error; c++; @@ -652,10 +683,9 @@ type_error: if (flags) { if (ty && c) { - PyObject *err = - PyString_FromFormat("Type error. Got %s, expected %s",c,ty->name); - PyErr_SetObject(PyExc_TypeError, err); - Py_DECREF(err); + PyErr_Format(PyExc_TypeError, + "Type error. Got %s, expected %s", + c, ty->name); } else { PyErr_SetString(PyExc_TypeError,"Expected a pointer"); } @@ -692,9 +722,7 @@ SWIG_Python_NewPointerObj(void *ptr, swig_type_info *type, int own) { Py_DECREF(args); if (inst) { if (own) { - PyObject *n = PyInt_FromLong(1); - PyObject_SetAttrString(inst,(char*)"thisown",n); - Py_DECREF(n); + PyObject_SetAttrString(inst,(char*)"thisown",Py_True); } robj = inst; } @@ -769,61 +797,74 @@ static swig_type_info *swig_types[2]; /* -------- TYPES TABLE (END) -------- */ +#define SWIG_init initswigrun -/*----------------------------------------------- - @(target):= _swigrun.so - ------------------------------------------------*/ -#define SWIG_init init_swigrun +#define SWIG_name "swigrun" -#define SWIG_name "_swigrun" +/* Auxiliar swig macros that appear in the header */ -/* Auxiliar swig macros */ +#define SWIG_OLDOBJ 1 +#define SWIG_NEWOBJ SWIG_OLDOBJ + 1 +#define SWIG_PYSTR SWIG_NEWOBJ + 1 #ifdef __cplusplus #define SWIGSTATICINLINE(a) static inline a #define SWIGSTATIC(a) static a -#define swig_new_array(type, size) (new type[(size)]) +#define swig_new_array(size,Type) (new Type[(size)]) +#define swig_delete(cptr) delete cptr #define swig_delete_array(cptr) delete[] cptr -#define swig_const_cast(type,a) const_cast(a) -#define swig_static_cast(type,a) static_cast(a) -#define swig_reinterpret_cast(type,a) reinterpret_cast(a) - -#ifdef HAVE_NUMERIC_CAST -#define swig_numeric_cast(type,a) numeric_cast(a) -#else -#define swig_numeric_cast(type,a) static_cast(a) -#endif +#define swig_const_cast(a,Type) const_cast(a) +#define swig_static_cast(a,Type) static_cast(a) +#define swig_reinterpret_cast(a,Type) reinterpret_cast(a) +#define swig_new_copy(ptr,Type) (new Type(*ptr)) +#define swig_numeric_cast(a,Type) static_cast(a) #else /* C case */ #define SWIGSTATICINLINE(a) static a #define SWIGSTATIC(a) static a -#define swig_new_array(type, size) ((type*) malloc((size)*sizeof(type))) +#define swig_new_array(size,Type) ((Type*) malloc((size)*sizeof(Type))) +#define swig_delete(cptr) free((char*)cptr) #define swig_delete_array(cptr) free((char*)cptr) -#define swig_const_cast(type,a) (type)(a) -#define swig_static_cast(type,a) (type)(a) -#define swig_reinterpret_cast(type,a) (type)(a) -#define swig_numeric_cast(type,a) (type)(a) +#define swig_const_cast(a,Type) (Type)(a) +#define swig_static_cast(a,Type) (Type)(a) +#define swig_reinterpret_cast(a,Type) (Type)(a) +#define swig_numeric_cast(a,Type) (Type)(a) +#define swig_new_copy(ptr,Type) ((Type*)memcpy(malloc(sizeof(Type)),ptr,sizeof(Type))) #endif /* __cplusplus */ -#define SWIG_FromSignedChar PyInt_FromLong -#define SWIG_FromUnsignedChar PyInt_FromLong -#define SWIG_FromShort PyInt_FromLong -#define SWIG_FromUnsignedShort PyInt_FromLong -#define SWIG_FromInt PyInt_FromLong -#define SWIG_FromLong PyInt_FromLong -#define SWIG_FromFloat PyFloat_FromDouble -#define SWIG_FromDouble PyFloat_FromDouble -#define SWIG_FromFloat PyFloat_FromDouble -#define SWIG_FromDouble PyFloat_FromDouble +/*@/opt/swig/share/swig/1.3.22/python/pymacros.swg,63,SWIG_define@*/ +#define SWIG_From_signed_SS_char PyInt_FromLong +/*@@*/ +/*@/opt/swig/share/swig/1.3.22/python/pymacros.swg,63,SWIG_define@*/ +#define SWIG_From_unsigned_SS_char PyInt_FromLong +/*@@*/ +/*@/opt/swig/share/swig/1.3.22/python/pymacros.swg,63,SWIG_define@*/ +#define SWIG_From_short PyInt_FromLong +/*@@*/ +/*@/opt/swig/share/swig/1.3.22/python/pymacros.swg,63,SWIG_define@*/ +#define SWIG_From_unsigned_SS_short PyInt_FromLong +/*@@*/ +/*@/opt/swig/share/swig/1.3.22/python/pymacros.swg,63,SWIG_define@*/ +#define SWIG_From_int PyInt_FromLong +/*@@*/ +/*@/opt/swig/share/swig/1.3.22/python/pymacros.swg,63,SWIG_define@*/ +#define SWIG_From_long PyInt_FromLong +/*@@*/ +/*@/opt/swig/share/swig/1.3.22/python/pymacros.swg,63,SWIG_define@*/ +#define SWIG_From_float PyFloat_FromDouble +/*@@*/ +/*@/opt/swig/share/swig/1.3.22/python/pymacros.swg,63,SWIG_define@*/ +#define SWIG_From_double PyFloat_FromDouble +/*@@*/ #ifdef __cplusplus extern "C" { #endif static PyMethodDef SwigMethods[] = { - { NULL, NULL } + { NULL, NULL, 0, NULL } }; @@ -840,7 +881,7 @@ _swigt__p_char, /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */ static swig_const_info swig_const_table[] = { -{0}}; +{0, 0, 0, 0.0, 0, 0}}; #ifdef __cplusplus } diff --git a/wxPython/src/my_fragments.i b/wxPython/src/my_fragments.i new file mode 100644 index 0000000000..1b1f06bedb --- /dev/null +++ b/wxPython/src/my_fragments.i @@ -0,0 +1,69 @@ +// These fragments are inserted in modules that need to convert PyObjects to +// integer values, my versions allow any numeric type to be used, as long as +// it can be converted to a PyInt. (Specifically, I allow floats where the +// default SWIG_AsVal_long would just raise an exception. +// +// NOTE: This file has to be %included very early in the SWIGging process as +// it no longer allows existing fragments to be replaced with one of the same +// name. So to make this work I had to bring a copy of python.swg into this +// project and do the %include there before most other of the standard swiglib +// files are %included. This may change in 1.3.23, so adjust accordingly then. + + + +%fragment(SWIG_AsVal_frag(long), "header") { +// See my_fragments.i +SWIGSTATICINLINE(int) +SWIG_AsVal(long)(PyObject* obj, long* val) +{ + if (PyNumber_Check(obj)) { + if (val) *val = PyInt_AsLong(obj); + return 1; + } + else { + PyObject* errmsg = PyString_FromFormat("Expected number, got %s", + obj->ob_type->tp_name); + PyErr_SetObject(PyExc_TypeError, errmsg); + Py_DECREF(errmsg); + } + return 0; +} +} + + +%fragment(SWIG_AsVal_frag(unsigned long), "header", + fragment=SWIG_AsVal_frag(long)) { +// See my_fragments.i +SWIGSTATICINLINE(int) +SWIG_AsVal(unsigned long)(PyObject* obj, unsigned long* val) +{ + long v = 0; + if (SWIG_AsVal_long(obj, &v) && v < 0) { + PyErr_SetString(PyExc_TypeError, "negative value received for unsigned type"); + return 0; + } + else if (val) + *val = (unsigned long)v; + return 1; +} +} + + +%fragment(SWIG_AsVal_frag(double), "header") { +// See my_fragments.i +SWIGSTATICINLINE(int) +SWIG_AsVal(double)(PyObject *obj, double* val) +{ + if (PyNumber_Check(obj)) { + if (val) *val = PyFloat_AsDouble(obj); + return 1; + } + else { + PyObject* errmsg = PyString_FromFormat("Expected number, got %s", + obj->ob_type->tp_name); + PyErr_SetObject(PyExc_TypeError, errmsg); + Py_DECREF(errmsg); + } + return 0; +} +} diff --git a/wxPython/src/my_typemaps.i b/wxPython/src/my_typemaps.i index da6de8d8eb..9e30c677f8 100644 --- a/wxPython/src/my_typemaps.i +++ b/wxPython/src/my_typemaps.i @@ -283,62 +283,6 @@ MAKE_INT_ARRAY_TYPEMAPS(styles, styles_field) } -// These fragments are iserted in modules that need to convert PyObjects to -// integer values, my versions allow any numeric type to be used, as long as -// it can be converted to a PyInt. (Specifically, I allow floats where the -// default SWIG_AsLong would raise an obsucre exception from within -// PyLong_AsLong.) - -%fragment("SWIG_AsLong","header") %{ -SWIGSTATICINLINE(long) -SWIG_AsLong(PyObject * obj) -{ - if (PyNumber_Check(obj)) - return PyInt_AsLong(obj); - else { - PyObject* errmsg = PyString_FromFormat("Expected number, got %s", - obj->ob_type->tp_name); - PyErr_SetObject(PyExc_TypeError, errmsg); - Py_DECREF(errmsg); - return 0; - } -} -%} - -%fragment("SWIG_AsUnsignedLong","header", fragment="SWIG_AsLong") %{ -SWIGSTATICINLINE(unsigned long) -SWIG_AsUnsignedLong(PyObject * obj) -{ - if (PyLong_Check(obj)) { - return PyLong_AsUnsignedLong(obj); - } else { - long i = SWIG_AsLong(obj); - if ( !PyErr_Occurred() && (i < 0)) { - PyErr_SetString(PyExc_TypeError, "negative value received for unsigned type"); - } - return i; - } -} -%} - - -%fragment("SWIG_AsDouble","header") %{ -SWIGSTATICINLINE(double) -SWIG_AsDouble(PyObject *obj) -{ - if (PyNumber_Check(obj)) - return PyFloat_AsDouble(obj); - else { - PyObject* errmsg = PyString_FromFormat("Expected number, got %s", - obj->ob_type->tp_name); - PyErr_SetObject(PyExc_TypeError, errmsg); - Py_DECREF(errmsg); - return 0; - } -} -%} - - //--------------------------------------------------------------------------- // Typemap for when GDI objects are returned by reference. This will cause a // copy to be made instead of returning a reference to the same instance. The diff --git a/wxPython/src/pyrun.swg b/wxPython/src/pyrun.swg index 8635809d7a..a8dffa8f3c 100644 --- a/wxPython/src/pyrun.swg +++ b/wxPython/src/pyrun.swg @@ -8,8 +8,6 @@ * ************************************************************************/ -#include "Python.h" - #ifdef __cplusplus extern "C" { #endif @@ -77,3 +75,4 @@ SWIGIMPORT(void) SWIG_Python_InstallConstants(PyObject *d, swig_con #ifdef __cplusplus } #endif + diff --git a/wxPython/src/python.swg b/wxPython/src/python.swg new file mode 100644 index 0000000000..0b0da26c60 --- /dev/null +++ b/wxPython/src/python.swg @@ -0,0 +1,90 @@ +/* ----------------------------------------------------------------------------- + * python.swg + * + * Python configuration module. + * ----------------------------------------------------------------------------- */ + +/* Python.h has to appear first */ + +%insert(runtime) %{ +#include "Python.h" +%} + +%insert(runtime) "precommon.swg"; +%insert(runtime) "common.swg"; /* Common type-checking code */ +%insert(runtime) "pyrun.swg"; /* Python run-time code */ + +/* Special directive for shadow code */ + +#define %shadow %insert("shadow") +#define %pythoncode %insert("python") + +%include "pymacros.swg" + + +/* ----------------------------------------------------------------------------- + * SWIGTYPE typemaps + * ----------------------------------------------------------------------------- */ + +%include "pyswigtype.swg" + + +/* ----------------------------------------------------------------------------- + * Check for local fragment defintions + * ----------------------------------------------------------------------------- */ + +%include "my_fragments.i" + + +/* ----------------------------------------------------------------------------- + * Typemap specializations + * ----------------------------------------------------------------------------- */ + +%include "pyinout.swg" +%include "pyvoid.swg" +%include "pyobject.swg" +%include "pystrbase.swg" +%include "pystrings.swg" +%include "pyvaltypes.swg" +%include "pyptrtypes.swg" +%include "pyprimtypes.swg" +%include "pymisctypes.swg" +%include "pyenum.swg" + +/* ------------------------------------------------------------ + * Overloaded operator support + * ------------------------------------------------------------ */ +%include "pyopers.swg" + +/* ------------------------------------------------------------ + * Warnings for Python keywords + * ------------------------------------------------------------ */ +%include "pythonkw.swg" + +/* ------------------------------------------------------------ + * The start of the Python initialization function + * ------------------------------------------------------------ */ + +%init %{ +#ifdef __cplusplus +extern "C" +#endif +SWIGEXPORT(void) SWIG_init(void) { + static PyObject *SWIG_globals = 0; + static int typeinit = 0; + PyObject *m, *d; + int i; + if (!SWIG_globals) SWIG_globals = SWIG_newvarlink(); + m = Py_InitModule((char *) SWIG_name, SwigMethods); + d = PyModule_GetDict(m); + + if (!typeinit) { + for (i = 0; swig_types_initial[i]; i++) { + swig_types[i] = SWIG_TypeRegister(swig_types_initial[i]); + } + typeinit = 1; + } + SWIG_InstallConstants(d,swig_const_table); +%} + + -- 2.45.2