mirror of
https://github.com/wxWidgets/Phoenix.git
synced 2026-01-04 19:10:09 +01:00
Update ETG scripts to support wxWidgets 3.1.6 functionality
Fixes #2136.
This commit is contained in:
@@ -2630,7 +2630,7 @@
|
|||||||
"ObjectRefData":"wx.",
|
"ObjectRefData":"wx.",
|
||||||
"OperatingSystemId":"wx.",
|
"OperatingSystemId":"wx.",
|
||||||
"Orientation":"wx.",
|
"Orientation":"wx.",
|
||||||
"Origin":"wx.grid.GridActivationSource.",
|
"Origin":"wx.HelpEvent.",
|
||||||
"OutBottom":"wx.",
|
"OutBottom":"wx.",
|
||||||
"OutCode":"wx.",
|
"OutCode":"wx.",
|
||||||
"OutLeft":"wx.",
|
"OutLeft":"wx.",
|
||||||
@@ -3582,6 +3582,7 @@
|
|||||||
"RichTextImageBlock":"wx.richtext.",
|
"RichTextImageBlock":"wx.richtext.",
|
||||||
"RichTextLine":"wx.richtext.",
|
"RichTextLine":"wx.richtext.",
|
||||||
"RichTextLineBreakChar":"wx.richtext.",
|
"RichTextLineBreakChar":"wx.richtext.",
|
||||||
|
"RichTextLineVector":"wx.richtext.",
|
||||||
"RichTextListStyleDefinition":"wx.richtext.",
|
"RichTextListStyleDefinition":"wx.richtext.",
|
||||||
"RichTextModuleInit":"wx.richtext.",
|
"RichTextModuleInit":"wx.richtext.",
|
||||||
"RichTextObject":"wx.richtext.",
|
"RichTextObject":"wx.richtext.",
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ INCLUDES = [ # base and core stuff
|
|||||||
'userdata',
|
'userdata',
|
||||||
'wxpybuffer',
|
'wxpybuffer',
|
||||||
'msgdlg_btnlabel',
|
'msgdlg_btnlabel',
|
||||||
|
'wxvector',
|
||||||
|
|
||||||
'stockgdi',
|
'stockgdi',
|
||||||
'longlong',
|
'longlong',
|
||||||
@@ -76,6 +77,7 @@ INCLUDES = [ # base and core stuff
|
|||||||
'image',
|
'image',
|
||||||
'gdiobj',
|
'gdiobj',
|
||||||
'bitmap',
|
'bitmap',
|
||||||
|
'bmpbndl',
|
||||||
'icon', 'iconloc', 'iconbndl',
|
'icon', 'iconloc', 'iconbndl',
|
||||||
'font',
|
'font',
|
||||||
'fontutil',
|
'fontutil',
|
||||||
|
|||||||
@@ -152,6 +152,7 @@ def run():
|
|||||||
tc_excludes = ['OSXEnableAutomaticQuoteSubstitution',
|
tc_excludes = ['OSXEnableAutomaticQuoteSubstitution',
|
||||||
'OSXEnableAutomaticDashSubstitution',
|
'OSXEnableAutomaticDashSubstitution',
|
||||||
'OSXDisableAllSmartSubstitutions',
|
'OSXDisableAllSmartSubstitutions',
|
||||||
|
'OSXEnableNewLineReplacement',
|
||||||
]
|
]
|
||||||
import textctrl
|
import textctrl
|
||||||
mod = textctrl.parseAndTweakModule()
|
mod = textctrl.parseAndTweakModule()
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
import etgtools
|
import etgtools
|
||||||
import etgtools.tweaker_tools as tools
|
import etgtools.tweaker_tools as tools
|
||||||
from etgtools import PyFunctionDef, PyCodeDef, PyPropertyDef
|
from etgtools import PyFunctionDef, PyCodeDef, PyPropertyDef
|
||||||
|
import sys
|
||||||
|
|
||||||
PACKAGE = "wx"
|
PACKAGE = "wx"
|
||||||
MODULE = "_core"
|
MODULE = "_core"
|
||||||
@@ -206,6 +207,8 @@ def run():
|
|||||||
c.addProperty('UseBestVisual GetUseBestVisual SetUseBestVisual')
|
c.addProperty('UseBestVisual GetUseBestVisual SetUseBestVisual')
|
||||||
c.addProperty('TopWindow GetTopWindow SetTopWindow')
|
c.addProperty('TopWindow GetTopWindow SetTopWindow')
|
||||||
|
|
||||||
|
if sys.platform != 'linux':
|
||||||
|
c.find('GTKSuppressDiagnostics').ignore()
|
||||||
|
|
||||||
#-------------------------------------------------------
|
#-------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
58
etg/bmpbndl.py
Normal file
58
etg/bmpbndl.py
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# Name: etg/bmpbndl.py
|
||||||
|
# Author: Scott Talbert
|
||||||
|
#
|
||||||
|
# Created: 13-Apr-2022
|
||||||
|
# Copyright: (c) 2022 by Scott Talbert
|
||||||
|
# License: wxWindows License
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
import etgtools
|
||||||
|
import etgtools.tweaker_tools as tools
|
||||||
|
from etgtools import MethodDef
|
||||||
|
|
||||||
|
PACKAGE = "wx"
|
||||||
|
MODULE = "_core"
|
||||||
|
NAME = "bmpbndl" # 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 = [ 'wxBitmapBundle',
|
||||||
|
'wxBitmapBundleImpl',
|
||||||
|
]
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
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 <wx/some_header_file.h>')
|
||||||
|
|
||||||
|
c = module.find('wxBitmapBundle')
|
||||||
|
assert isinstance(c, etgtools.ClassDef)
|
||||||
|
|
||||||
|
c.find('FromSVG').findOverload('char *data, const wxSize &sizeDef').ignore()
|
||||||
|
|
||||||
|
|
||||||
|
c = module.find('wxBitmapBundleImpl')
|
||||||
|
assert isinstance(c, etgtools.ClassDef)
|
||||||
|
|
||||||
|
m = MethodDef(name='~wxBitmapBundleImpl', isDtor=True, isVirtual=True, protection='protected')
|
||||||
|
c.addItem(m)
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------
|
||||||
|
tools.doCommonTweaks(module)
|
||||||
|
tools.runGenerators(module)
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
if __name__ == '__main__':
|
||||||
|
run()
|
||||||
|
|
||||||
@@ -45,6 +45,7 @@ def run():
|
|||||||
c.find('wxCursor').findOverload('cursorName').find('type').default='wxBITMAP_TYPE_ANY'
|
c.find('wxCursor').findOverload('cursorName').find('type').default='wxBITMAP_TYPE_ANY'
|
||||||
# TODO: This ctor ^^ in Classic has a custom implementation for wxGTK that
|
# TODO: This ctor ^^ in Classic has a custom implementation for wxGTK that
|
||||||
# sets the hotspot. Is that still needed?
|
# sets the hotspot. Is that still needed?
|
||||||
|
c.find('wxCursor').findOverload('(const char *const *xpmData)').ignore()
|
||||||
|
|
||||||
c.addCppMethod('int', '__nonzero__', '()', "return self->IsOk();")
|
c.addCppMethod('int', '__nonzero__', '()', "return self->IsOk();")
|
||||||
c.addCppMethod('int', '__bool__', '()', "return self->IsOk();")
|
c.addCppMethod('int', '__bool__', '()', "return self->IsOk();")
|
||||||
|
|||||||
@@ -344,7 +344,7 @@ def run():
|
|||||||
c.addItem(etgtools.WigCode("""\
|
c.addItem(etgtools.WigCode("""\
|
||||||
virtual void SetTitle(const wxString& title);
|
virtual void SetTitle(const wxString& title);
|
||||||
virtual wxString GetTitle() const;
|
virtual wxString GetTitle() const;
|
||||||
virtual void SetBitmap(const wxBitmap& bitmap);
|
virtual void SetBitmap(const wxBitmapBundle& bitmap);
|
||||||
virtual wxBitmap GetBitmap() const;
|
virtual wxBitmap GetBitmap() const;
|
||||||
virtual void SetWidth(int width);
|
virtual void SetWidth(int width);
|
||||||
virtual int GetWidth() const;
|
virtual int GetWidth() const;
|
||||||
|
|||||||
@@ -110,6 +110,9 @@ def run():
|
|||||||
module.addPyCode("ADJUST_MINSIZE = 0")
|
module.addPyCode("ADJUST_MINSIZE = 0")
|
||||||
module.addPyCode("WS_EX_VALIDATE_RECURSIVELY = 0")
|
module.addPyCode("WS_EX_VALIDATE_RECURSIVELY = 0")
|
||||||
|
|
||||||
|
# This is only supported with C++14, so ignore it for now
|
||||||
|
module.find('wxDEPRECATED_ATTR').ignore()
|
||||||
|
|
||||||
|
|
||||||
#-----------------------------------------------------------------
|
#-----------------------------------------------------------------
|
||||||
tools.doCommonTweaks(module)
|
tools.doCommonTweaks(module)
|
||||||
|
|||||||
@@ -100,6 +100,11 @@ def run():
|
|||||||
#endif
|
#endif
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
# Missing in 3.1.6
|
||||||
|
module.addItem(etgtools.WigCode("""\
|
||||||
|
wxEventType wxEVT_FULLSCREEN /PyName=wxEVT_FULLSCREEN/;
|
||||||
|
"""))
|
||||||
|
|
||||||
|
|
||||||
module.addPyClass('PyEventBinder', ['object'],
|
module.addPyClass('PyEventBinder', ['object'],
|
||||||
doc="""\
|
doc="""\
|
||||||
|
|||||||
@@ -155,6 +155,9 @@ def run():
|
|||||||
c.find('operator*=').all() + \
|
c.find('operator*=').all() + \
|
||||||
c.find('operator/=').all():
|
c.find('operator/=').all():
|
||||||
f.ignore(False)
|
f.ignore(False)
|
||||||
|
# Ignore these because they conflict with __imul__() and __itruediv__()
|
||||||
|
c.find('operator*=').findOverload('double').ignore()
|
||||||
|
c.find('operator/=').findOverload('double').ignore()
|
||||||
|
|
||||||
c.addCppMethod('bool', '__eq__', '(const wxSize& other)',
|
c.addCppMethod('bool', '__eq__', '(const wxSize& other)',
|
||||||
body="return *self == *other;")
|
body="return *self == *other;")
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ def run():
|
|||||||
virtual wxWindow* GetHTMLWindow();
|
virtual wxWindow* GetHTMLWindow();
|
||||||
virtual wxColour GetHTMLBackgroundColour() const;
|
virtual wxColour GetHTMLBackgroundColour() const;
|
||||||
virtual void SetHTMLBackgroundColour(const wxColour& clr);
|
virtual void SetHTMLBackgroundColour(const wxColour& clr);
|
||||||
virtual void SetHTMLBackgroundImage(const wxBitmap& bmpBg);
|
virtual void SetHTMLBackgroundImage(const wxBitmapBundle& bmpBg);
|
||||||
virtual void SetHTMLStatusText(const wxString& text);
|
virtual void SetHTMLStatusText(const wxString& text);
|
||||||
virtual wxCursor GetHTMLCursor(wxHtmlWindowInterface::HTMLCursor type) const;
|
virtual wxCursor GetHTMLCursor(wxHtmlWindowInterface::HTMLCursor type) const;
|
||||||
"""))
|
"""))
|
||||||
|
|||||||
@@ -79,6 +79,9 @@ def run():
|
|||||||
#endif
|
#endif
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
# Documented wrongly in 3.1.6
|
||||||
|
c.find('GetLogicalSize').type = 'wxSize'
|
||||||
|
|
||||||
|
|
||||||
# For compatibility:
|
# For compatibility:
|
||||||
module.addPyFunction('EmptyIcon', '()',
|
module.addPyFunction('EmptyIcon', '()',
|
||||||
|
|||||||
@@ -333,6 +333,10 @@ def run():
|
|||||||
#endif
|
#endif
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
# Documented wrongly in 3.1.6
|
||||||
|
c.find('RemoveSortIndicator').type = 'void'
|
||||||
|
c.find('RemoveSortIndicator').isConst = False
|
||||||
|
|
||||||
|
|
||||||
#-------------------------------------------------------
|
#-------------------------------------------------------
|
||||||
c = module.find('wxListView')
|
c = module.find('wxListView')
|
||||||
|
|||||||
@@ -109,11 +109,12 @@ def run():
|
|||||||
|
|
||||||
|
|
||||||
c.find('GetBitmap').type = 'const wxBitmap*'
|
c.find('GetBitmap').type = 'const wxBitmap*'
|
||||||
|
c.find('GetBitmap').transferBack = True
|
||||||
c.find('GetBitmap').setCppCode("""\
|
c.find('GetBitmap').setCppCode("""\
|
||||||
#ifdef __WXMSW__
|
#ifdef __WXMSW__
|
||||||
return &self->GetBitmap(checked);
|
return new wxBitmap(self->GetBitmap(checked));
|
||||||
#else
|
#else
|
||||||
return &self->GetBitmap();
|
return new wxBitmap(self->GetBitmap());
|
||||||
#endif
|
#endif
|
||||||
""")
|
""")
|
||||||
|
|
||||||
@@ -157,6 +158,10 @@ def run():
|
|||||||
|
|
||||||
module.addItem(tools.wxListWrapperTemplate('wxMenuItemList', 'wxMenuItem', module))
|
module.addItem(tools.wxListWrapperTemplate('wxMenuItemList', 'wxMenuItem', module))
|
||||||
|
|
||||||
|
# Documented wrongly in 3.1.6
|
||||||
|
c.find('AddExtraAccel.accel').isConst = True
|
||||||
|
c.find('AddExtraAccel.accel').type = 'wxAcceleratorEntry&'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#-----------------------------------------------------------------
|
#-----------------------------------------------------------------
|
||||||
|
|||||||
@@ -79,8 +79,6 @@ def run():
|
|||||||
tools.wxArrayWrapperTemplate('wxRichTextVariantArray', 'wxVariant', module))
|
tools.wxArrayWrapperTemplate('wxRichTextVariantArray', 'wxVariant', module))
|
||||||
module.addItem(
|
module.addItem(
|
||||||
tools.wxListWrapperTemplate('wxRichTextObjectList', 'wxRichTextObject', module))
|
tools.wxListWrapperTemplate('wxRichTextObjectList', 'wxRichTextObject', module))
|
||||||
module.addItem(
|
|
||||||
tools.wxListWrapperTemplate('wxRichTextLineList', 'wxRichTextLine', module))
|
|
||||||
|
|
||||||
# Can this even work? Apparently it does.
|
# Can this even work? Apparently it does.
|
||||||
module.addItem(
|
module.addItem(
|
||||||
@@ -319,6 +317,21 @@ def run():
|
|||||||
fakeListClassName='wxRichTextObjectList_'))
|
fakeListClassName='wxRichTextObjectList_'))
|
||||||
c.find('MoveToList.list').type = 'wxRichTextObjectList_&'
|
c.find('MoveToList.list').type = 'wxRichTextObjectList_&'
|
||||||
c.find('MoveFromList.list').type = 'wxRichTextObjectList_&'
|
c.find('MoveFromList.list').type = 'wxRichTextObjectList_&'
|
||||||
|
# TODO: figure out why wxvector.sip doesn't work for this
|
||||||
|
c.find('GetLines').type = 'PyObject*'
|
||||||
|
c.find('GetLines').setCppCode("""\
|
||||||
|
wxPyThreadBlocker blocker;
|
||||||
|
PyObject* result = PyList_New(0);
|
||||||
|
const wxRichTextLineVector& vector = self->GetLines();
|
||||||
|
for (size_t idx=0; idx < vector.size(); idx++) {{
|
||||||
|
PyObject* obj;
|
||||||
|
wxRichTextLine* item = new wxRichTextLine(*vector.at(idx));
|
||||||
|
obj = wxPyConstructObject((void*)item, "wxRichTextLine", true);
|
||||||
|
PyList_Append(result, obj);
|
||||||
|
Py_DECREF(obj);
|
||||||
|
}}
|
||||||
|
return result;
|
||||||
|
""")
|
||||||
|
|
||||||
|
|
||||||
#-------------------------------------------------------
|
#-------------------------------------------------------
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
# License: wxWindows License
|
# License: wxWindows License
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
import etgtools
|
import etgtools
|
||||||
import etgtools.tweaker_tools as tools
|
import etgtools.tweaker_tools as tools
|
||||||
|
|
||||||
@@ -144,6 +146,15 @@ def parseAndTweakModule():
|
|||||||
#endif
|
#endif
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
# TODO: add support for wxTextProofOptions (only supported on MSW/GTK3)
|
||||||
|
# so will need stubs on other platforms.
|
||||||
|
c.find('EnableProofCheck').ignore()
|
||||||
|
c.find('GetProofCheckOptions').ignore()
|
||||||
|
|
||||||
|
# This function only exists on OSX
|
||||||
|
if sys.platform != 'darwin':
|
||||||
|
c.find('OSXEnableNewLineReplacement').ignore()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
c = module.find('wxTextUrlEvent')
|
c = module.find('wxTextUrlEvent')
|
||||||
|
|||||||
@@ -150,7 +150,6 @@ def run():
|
|||||||
|
|
||||||
|
|
||||||
# transfer imagelist ownership
|
# transfer imagelist ownership
|
||||||
c.find('AssignImageList.imageList').transfer = True
|
|
||||||
c.find('AssignStateImageList.imageList').transfer = True
|
c.find('AssignStateImageList.imageList').transfer = True
|
||||||
c.find('AssignButtonsImageList.imageList').transfer = True
|
c.find('AssignButtonsImageList.imageList').transfer = True
|
||||||
|
|
||||||
|
|||||||
@@ -91,6 +91,11 @@ def run():
|
|||||||
# This tweak is needed only for the stub code
|
# This tweak is needed only for the stub code
|
||||||
module.find('wxWebViewHandler.wxWebViewHandler').argsString = '(const wxString& scheme="")'
|
module.find('wxWebViewHandler.wxWebViewHandler').argsString = '(const wxString& scheme="")'
|
||||||
|
|
||||||
|
# Documented wrongly in 3.1.6 (needs to be fixed in stubs too)
|
||||||
|
c = module.find('wxWebViewFactory')
|
||||||
|
c.find('GetVersionInfo').argsString = '()'
|
||||||
|
c.find('GetVersionInfo').items = []
|
||||||
|
|
||||||
tools.generateStubs('wxUSE_WEBVIEW', module,
|
tools.generateStubs('wxUSE_WEBVIEW', module,
|
||||||
typeValMap={
|
typeValMap={
|
||||||
'wxWebViewNavigationActionFlags': 'wxWEBVIEW_NAV_ACTION_NONE',
|
'wxWebViewNavigationActionFlags': 'wxWEBVIEW_NAV_ACTION_NONE',
|
||||||
@@ -98,6 +103,13 @@ def run():
|
|||||||
'wxVersionInfo': 'wxVersionInfo()',
|
'wxVersionInfo': 'wxVersionInfo()',
|
||||||
})
|
})
|
||||||
|
|
||||||
|
# Missing in 3.1.6
|
||||||
|
module.addItem(etgtools.WigCode("""\
|
||||||
|
wxEventType wxEVT_WEBVIEW_FULLSCREEN_CHANGED /PyName=wxEVT_WEBVIEW_FULLSCREEN_CHANGED/;
|
||||||
|
wxEventType wxEVT_WEBVIEW_SCRIPT_MESSAGE_RECEIVED /PyName=wxEVT_WEBVIEW_SCRIPT_MESSAGE_RECEIVED/;
|
||||||
|
wxEventType wxEVT_WEBVIEW_SCRIPT_RESULT /PyName=wxEVT_WEBVIEW_SCRIPT_RESULT/;
|
||||||
|
"""))
|
||||||
|
|
||||||
c = module.find('wxWebView')
|
c = module.find('wxWebView')
|
||||||
assert isinstance(c, etgtools.ClassDef)
|
assert isinstance(c, etgtools.ClassDef)
|
||||||
tools.fixWindowClass(c)
|
tools.fixWindowClass(c)
|
||||||
|
|||||||
@@ -497,7 +497,6 @@ def addWindowVirtuals(klass):
|
|||||||
('DoSetSize', 'void DoSetSize(int x, int y, int width, int height, int sizeFlags)'),
|
('DoSetSize', 'void DoSetSize(int x, int y, int width, int height, int sizeFlags)'),
|
||||||
('DoSetClientSize', 'void DoSetClientSize(int width, int height)'),
|
('DoSetClientSize', 'void DoSetClientSize(int width, int height)'),
|
||||||
('DoSetSizeHints', 'void DoSetSizeHints( int minW, int minH, int maxW, int maxH, int incW, int incH )'),
|
('DoSetSizeHints', 'void DoSetSizeHints( int minW, int minH, int maxW, int maxH, int incW, int incH )'),
|
||||||
('DoGetBorderSize', 'wxSize DoGetBorderSize() const'),
|
|
||||||
('DoMoveWindow', 'void DoMoveWindow(int x, int y, int width, int height)'),
|
('DoMoveWindow', 'void DoMoveWindow(int x, int y, int width, int height)'),
|
||||||
('DoSetWindowVariant', 'void DoSetWindowVariant( wxWindowVariant variant)'),
|
('DoSetWindowVariant', 'void DoSetWindowVariant( wxWindowVariant variant)'),
|
||||||
('GetDefaultBorder', 'wxBorder GetDefaultBorder() const'),
|
('GetDefaultBorder', 'wxBorder GetDefaultBorder() const'),
|
||||||
|
|||||||
106
src/wxvector.sip
Normal file
106
src/wxvector.sip
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
//--------------------------------------------------------------------------
|
||||||
|
// Name: wxvector.sip
|
||||||
|
// Purpose: MappedType for wxVector
|
||||||
|
//
|
||||||
|
// Author: Scott Talbert
|
||||||
|
//
|
||||||
|
// Created: 14-Apr-2022
|
||||||
|
// Copyright: (c) 2022 by Scott Talbert
|
||||||
|
// Licence: wxWindows license
|
||||||
|
//--------------------------------------------------------------------------
|
||||||
|
|
||||||
|
template<_TYPE_>
|
||||||
|
%MappedType wxVector<_TYPE_>
|
||||||
|
{
|
||||||
|
%ConvertFromTypeCode
|
||||||
|
PyObject *l = PyList_New(sipCpp->size());
|
||||||
|
|
||||||
|
if (!l)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < sipCpp->size(); ++i) {
|
||||||
|
_TYPE_ *t = new _TYPE_(sipCpp->at(i));
|
||||||
|
PyObject *tobj = sipConvertFromNewType(t, sipType__TYPE_,
|
||||||
|
sipTransferObj);
|
||||||
|
|
||||||
|
if (!tobj) {
|
||||||
|
delete t;
|
||||||
|
Py_DECREF(l);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
PyList_SetItem(l, i, tobj);
|
||||||
|
}
|
||||||
|
|
||||||
|
return l;
|
||||||
|
%End
|
||||||
|
|
||||||
|
%ConvertToTypeCode
|
||||||
|
PyObject *iter = PyObject_GetIter(sipPy);
|
||||||
|
|
||||||
|
if (!sipIsErr) {
|
||||||
|
PyErr_Clear();
|
||||||
|
Py_XDECREF(iter);
|
||||||
|
|
||||||
|
return (iter
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
|
&& !PyString_Check(sipPy)
|
||||||
|
#endif
|
||||||
|
&& !PyUnicode_Check(sipPy));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!iter) {
|
||||||
|
*sipIsErr = 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxVector<_TYPE_> *wv = new wxVector<_TYPE_>;
|
||||||
|
|
||||||
|
for (Py_ssize_t i = 0; ; ++i) {
|
||||||
|
PyErr_Clear();
|
||||||
|
PyObject *itm = PyIter_Next(iter);
|
||||||
|
|
||||||
|
if (!itm) {
|
||||||
|
if (PyErr_Occurred()) {
|
||||||
|
delete wv;
|
||||||
|
Py_DECREF(iter);
|
||||||
|
*sipIsErr = 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
int state;
|
||||||
|
_TYPE_ *t = reinterpret_cast<_TYPE_ *>(
|
||||||
|
sipForceConvertToType(itm, sipType__TYPE_, sipTransferObj,
|
||||||
|
SIP_NOT_NONE, &state, sipIsErr));
|
||||||
|
|
||||||
|
if (*sipIsErr) {
|
||||||
|
PyErr_Format(PyExc_TypeError,
|
||||||
|
"index %zd has type '%s' but '_TYPE_' is expected", i,
|
||||||
|
sipPyTypeName(Py_TYPE(itm)));
|
||||||
|
|
||||||
|
Py_DECREF(itm);
|
||||||
|
delete wv;
|
||||||
|
Py_DECREF(iter);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
wv->push_back(*t);
|
||||||
|
|
||||||
|
sipReleaseType(t, sipType__TYPE_, state);
|
||||||
|
Py_DECREF(itm);
|
||||||
|
}
|
||||||
|
|
||||||
|
Py_DECREF(iter);
|
||||||
|
|
||||||
|
*sipCppPtr = wv;
|
||||||
|
|
||||||
|
return sipGetState(sipTransferObj);
|
||||||
|
%End
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user