wxWidgets/wxPython/src/_streams.i
Robin Dunn 23ed80cb4d Add LastWrite
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37692 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2006-02-24 01:13:18 +00:00

171 lines
4.5 KiB
OpenEdge ABL

/////////////////////////////////////////////////////////////////////////////
// Name: _streams.i
// Purpose: SWIG typemaps and wrappers for wxInputStream
//
// Author: Robin Dunn
//
// Created: 25-Sept-2000
// RCS-ID: $Id$
// Copyright: (c) 2003 by Total Control Software
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
// Not a %module
//---------------------------------------------------------------------------
%{
#include "wx/wxPython/pyistream.h"
%}
//---------------------------------------------------------------------------
%newgroup
// Typemaps for wxInputStream
//
// We assume that input params taking a wxInputStream& will *not* take
// ownership of the stream and so we manage it in the typemaps. On the other
// hand, when a paramter expects a wxInputStream* then it does take ownership
// (such as wxFSFile) and so the typemap will make a copy of the stream object
// to give to it.
%typemap(in) wxInputStream& (wxPyInputStream* temp, bool created) {
if (wxPyConvertSwigPtr($input, (void **)&temp, wxT("wxPyInputStream"))) {
$1 = temp->m_wxis;
created = false;
} else {
PyErr_Clear(); // clear the failure of the wxPyConvert above
$1 = wxPyCBInputStream_create($input, false);
if ($1 == NULL) {
PyErr_SetString(PyExc_TypeError, "Expected wx.InputStream or Python file-like object.");
SWIG_fail;
}
created = true;
}
}
%typemap(freearg) wxInputStream& { if (created$argnum) delete $1; }
%typemap(in) wxInputStream* (wxPyInputStream* temp) {
if (wxPyConvertSwigPtr($input, (void **)&temp, wxT("wxPyInputStream"))) {
$1 = wxPyCBInputStream_copy((wxPyCBInputStream*)temp->m_wxis);
} else {
PyErr_Clear(); // clear the failure of the wxPyConvert above
$1 = wxPyCBInputStream_create($input, true);
if ($1 == NULL) {
PyErr_SetString(PyExc_TypeError, "Expected wx.InputStream or Python file-like object.");
SWIG_fail;
}
}
}
%typemap(out) wxInputStream* {
wxPyInputStream * _ptr = NULL;
if ($1) {
_ptr = new wxPyInputStream($1);
}
$result = wxPyConstructObject(_ptr, wxT("wxPyInputStream"), $owner);
}
//---------------------------------------------------------------------------
enum wxSeekMode
{
wxFromStart,
wxFromCurrent,
wxFromEnd
};
%rename(InputStream) wxPyInputStream;
class wxPyInputStream
{
public:
%extend {
wxPyInputStream(PyObject* p) {
wxInputStream* wxis = wxPyCBInputStream::create(p);
if (wxis)
return new wxPyInputStream(wxis);
else
return NULL;
}
}
~wxPyInputStream();
void close();
void flush();
bool eof();
PyObject* read(int size=-1);
PyObject* readline(int size=-1);
PyObject* readlines(int sizehint=-1);
void seek(int offset, int whence=0);
int tell();
/*
bool isatty();
int fileno();
void truncate(int size=-1);
void write(wxString data);
void writelines(wxStringPtrList);
*/
char Peek();
char GetC();
size_t LastRead();
bool CanRead();
bool Eof();
bool Ungetch(char c);
long SeekI(long pos, wxSeekMode mode = wxFromStart);
long TellI();
};
// TODO: make a more fully implemented file interface...
class wxOutputStream {
public:
/*
void close();
void flush();
wxString* read(int size=-1);
wxString* readline(int size=-1);
wxStringPtrList* readlines(int sizehint=-1);
void seek(int offset, int whence=0);
int tell();
bool isatty();
int fileno();
void truncate(int size=-1);
void write(wxString data);
void writelines(wxStringPtrList);
*/
%extend {
void write(PyObject* obj) {
// We use only strings for the streams, not unicode
PyObject* str = PyObject_Str(obj);
if (! str) {
PyErr_SetString(PyExc_TypeError, "Unable to convert to string");
return;
}
self->Write(PyString_AS_STRING(str),
PyString_GET_SIZE(str));
Py_DECREF(str);
}
}
size_t LastWrite() const;
};
//---------------------------------------------------------------------------
%init %{
wxPyPtrTypeMap_Add("wxInputStream", "wxPyInputStream");
%}
//---------------------------------------------------------------------------