mirror of
https://github.com/wxWidgets/Phoenix.git
synced 2025-12-15 17:20:07 +01:00
This is needed as part of fixing #1636 as a new version of SIP is required,
which makes these changes necessary.
(cherry picked from commit 676b95ad17)
134 lines
4.8 KiB
Python
134 lines
4.8 KiB
Python
#---------------------------------------------------------------------------
|
|
# Name: etg/filesys.py
|
|
# Author: Robin Dunn
|
|
#
|
|
# Created: 25-Feb-2012
|
|
# Copyright: (c) 2012-2020 by Total Control Software
|
|
# License: wxWindows License
|
|
#---------------------------------------------------------------------------
|
|
|
|
import etgtools
|
|
import etgtools.tweaker_tools as tools
|
|
|
|
PACKAGE = "wx"
|
|
MODULE = "_core"
|
|
NAME = "filesys" # 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 = [ "wxFileSystem",
|
|
"wxFSFile",
|
|
"wxFileSystemHandler",
|
|
"wxMemoryFSHandler",
|
|
"wxArchiveFSHandler",
|
|
"wxFilterFSHandler",
|
|
"wxInternetFSHandler",
|
|
]
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
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('wxFileSystem')
|
|
assert isinstance(c, etgtools.ClassDef)
|
|
c.addPrivateCopyCtor()
|
|
c.addPrivateAssignOp()
|
|
c.find('AddHandler.handler').transfer = True
|
|
c.find('RemoveHandler').transferBack = True
|
|
|
|
c = module.find('wxFileSystemHandler')
|
|
c.find('GetAnchor').ignore(False)
|
|
c.find('GetLeftLocation').ignore(False)
|
|
c.find('GetProtocol').ignore(False)
|
|
c.find('GetRightLocation').ignore(False)
|
|
c.find('OpenFile').factory = True
|
|
|
|
|
|
def _fixHandlerClass(klass):
|
|
klass.addItem(etgtools.WigCode("""\
|
|
virtual bool CanOpen(const wxString& location);
|
|
virtual wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location) /Factory/;
|
|
virtual wxString FindFirst(const wxString& spec, int flags = 0);
|
|
virtual wxString FindNext();
|
|
"""))
|
|
|
|
|
|
c = module.find('wxArchiveFSHandler')
|
|
_fixHandlerClass(c)
|
|
c.addPrivateCopyCtor()
|
|
module.addPyCode('ZipFSHandler = wx.deprecated(ArchiveFSHandler, "Use ArchiveFSHandler instead.")')
|
|
|
|
c = module.find('wxFSFile')
|
|
c.addPrivateCopyCtor()
|
|
c.find('wxFSFile.stream').keepReference = True
|
|
|
|
c = module.find('wxFilterFSHandler')
|
|
_fixHandlerClass(c)
|
|
c.addPrivateCopyCtor()
|
|
|
|
c = module.find('wxInternetFSHandler')
|
|
_fixHandlerClass(c)
|
|
c.addPrivateCopyCtor()
|
|
|
|
|
|
c = module.find('wxMemoryFSHandler')
|
|
_fixHandlerClass(c)
|
|
c.addPrivateCopyCtor()
|
|
|
|
# Make some more python-friendly versions of the AddFile methods accepting text or raw data
|
|
c.find('AddFile').findOverload('textdata').ignore()
|
|
c.addCppMethod('void', 'AddFile', '(const wxString& filename, const wxString& textdata)',
|
|
isStatic=True,
|
|
doc="Add a file from text data, which will first be converted to utf-8 encoded bytes.",
|
|
body="""\
|
|
wxScopedCharBuffer buf = textdata->utf8_str();
|
|
wxMemoryFSHandler::AddFile(*filename, (const char*)buf, strlen(buf));
|
|
""")
|
|
|
|
c.find('AddFile').findOverload('binarydata').ignore()
|
|
c.addCppMethod('void', 'AddFile', '(const wxString& filename, wxPyBuffer* binarydata)',
|
|
isStatic=True,
|
|
doc="Add a file from raw data in a python buffer compatible object.",
|
|
body="""\
|
|
wxMemoryFSHandler::AddFile(*filename, binarydata->m_ptr, binarydata->m_len);
|
|
""")
|
|
|
|
c.find('AddFileWithMimeType').findOverload('textdata').ignore()
|
|
c.addCppMethod('void', 'AddFileWithMimeType',
|
|
'(const wxString& filename, const wxString& textdata, const wxString& mimetype)',
|
|
isStatic=True,
|
|
doc="Add a file from text data, which will first be converted to utf-8 encoded bytes.",
|
|
body="""\
|
|
wxScopedCharBuffer buf = textdata->utf8_str();
|
|
wxMemoryFSHandler::AddFileWithMimeType(*filename, (const char*)buf, strlen(buf), *mimetype);
|
|
""")
|
|
|
|
c.find('AddFileWithMimeType').findOverload('binarydata').ignore()
|
|
c.addCppMethod('void', 'AddFileWithMimeType',
|
|
'(const wxString& filename, wxPyBuffer* binarydata, const wxString& mimetype)',
|
|
isStatic=True,
|
|
doc="Add a file from raw data in a python buffer compatible object.",
|
|
body="""\
|
|
wxMemoryFSHandler::AddFileWithMimeType(
|
|
*filename, binarydata->m_ptr, binarydata->m_len, *mimetype);
|
|
""")
|
|
|
|
|
|
#-----------------------------------------------------------------
|
|
tools.doCommonTweaks(module)
|
|
tools.runGenerators(module)
|
|
|
|
|
|
#---------------------------------------------------------------------------
|
|
if __name__ == '__main__':
|
|
run()
|
|
|