#include "helpers.h"
#include <wx/print.h>
#include <wx/printdlg.h>
+
+#include "printfw.h"
%}
//----------------------------------------------------------------------
//----------------------------------------------------------------------
// Custom wxPrintout class that knows how to call python
%{
-class wxPyPrintout : public wxPrintout {
-public:
- wxPyPrintout(const wxString& title) : wxPrintout(title) {}
-
- PYCALLBACK_BOOL_INTINT(wxPrintout, OnBeginDocument);
- PYCALLBACK__(wxPrintout, OnEndDocument);
- PYCALLBACK__(wxPrintout, OnBeginPrinting);
- PYCALLBACK__(wxPrintout, OnEndPrinting);
- PYCALLBACK__(wxPrintout, OnPreparePrinting);
- PYCALLBACK_BOOL_INT_pure(wxPrintout, OnPrintPage);
- PYCALLBACK_BOOL_INT(wxPrintout, HasPage);
-
-
- // Since this one would be tough and ugly to do with the Macros...
- void GetPageInfo(int *minPage, int *maxPage, int *pageFrom, int *pageTo) {
- bool hadErr = false;
-
- if (m_myInst.findCallback("GetPageInfo")) {
- PyObject* result = m_myInst.callCallbackObj(Py_BuildValue("()"));
- if (result && PyTuple_Check(result) && PyTuple_Size(result) == 4) {
- PyObject* val;
-
- val = PyTuple_GetItem(result, 0);
- if (PyInt_Check(val)) *minPage = PyInt_AsLong(val);
- else hadErr = true;
-
- val = PyTuple_GetItem(result, 1);
- if (PyInt_Check(val)) *maxPage = PyInt_AsLong(val);
- else hadErr = true;
-
- val = PyTuple_GetItem(result, 2);
- if (PyInt_Check(val)) *pageFrom = PyInt_AsLong(val);
- else hadErr = true;
-
- val = PyTuple_GetItem(result, 3);
- if (PyInt_Check(val)) *pageTo = PyInt_AsLong(val);
- else hadErr = true;
- }
- else
- hadErr = true;
-
- if (hadErr) {
- PyErr_SetString(PyExc_TypeError, "GetPageInfo should return a tuple of 4 integers.");
- PyErr_Print();
- }
- Py_DECREF(result);
-#ifdef WXP_WITH_THREAD
- PyEval_SaveThread();
-#endif
+
+
+// Since this one would be tough and ugly to do with the Macros...
+void wxPyPrintout::GetPageInfo(int *minPage, int *maxPage, int *pageFrom, int *pageTo) {
+ bool hadErr = false;
+
+ bool doSave = wxPyRestoreThread();
+ if (m_myInst.findCallback("GetPageInfo")) {
+ PyObject* result = m_myInst.callCallbackObj(Py_BuildValue("()"));
+ if (result && PyTuple_Check(result) && PyTuple_Size(result) == 4) {
+ PyObject* val;
+
+ val = PyTuple_GetItem(result, 0);
+ if (PyInt_Check(val)) *minPage = PyInt_AsLong(val);
+ else hadErr = true;
+
+ val = PyTuple_GetItem(result, 1);
+ if (PyInt_Check(val)) *maxPage = PyInt_AsLong(val);
+ else hadErr = true;
+
+ val = PyTuple_GetItem(result, 2);
+ if (PyInt_Check(val)) *pageFrom = PyInt_AsLong(val);
+ else hadErr = true;
+
+ val = PyTuple_GetItem(result, 3);
+ if (PyInt_Check(val)) *pageTo = PyInt_AsLong(val);
+ else hadErr = true;
}
else
- wxPrintout::GetPageInfo(minPage, maxPage, pageFrom, pageTo);
+ hadErr = true;
+
+ if (hadErr) {
+ PyErr_SetString(PyExc_TypeError, "GetPageInfo should return a tuple of 4 integers.");
+ PyErr_Print();
+ }
+ Py_DECREF(result);
}
- void base_GetPageInfo(int *minPage, int *maxPage, int *pageFrom, int *pageTo) {
+ else
wxPrintout::GetPageInfo(minPage, maxPage, pageFrom, pageTo);
- }
- PYPRIVATE;
-};
+ wxPySaveThread(doSave);
+}
+
+void wxPyPrintout::base_GetPageInfo(int *minPage, int *maxPage, int *pageFrom, int *pageTo) {
+ wxPrintout::GetPageInfo(minPage, maxPage, pageFrom, pageTo);
+}
+
+
+IMP_PYCALLBACK_BOOL_INTINT(wxPyPrintout, wxPrintout, OnBeginDocument);
+IMP_PYCALLBACK__(wxPyPrintout, wxPrintout, OnEndDocument);
+IMP_PYCALLBACK__(wxPyPrintout, wxPrintout, OnBeginPrinting);
+IMP_PYCALLBACK__(wxPyPrintout, wxPrintout, OnEndPrinting);
+IMP_PYCALLBACK__(wxPyPrintout, wxPrintout, OnPreparePrinting);
+IMP_PYCALLBACK_BOOL_INT_pure(wxPyPrintout, wxPrintout, OnPrintPage);
+IMP_PYCALLBACK_BOOL_INT(wxPyPrintout, wxPrintout, HasPage);
+
+
%}
%pragma(python) addtomethod = "__init__:self._setSelf(self)"
%addmethods {
- void Destroy() {
- delete self;
- }
+ void Destroy() { delete self; }
}
wxDC* GetDC();