From eedf876b34d35c4a2b86cff70278043f89dab605 Mon Sep 17 00:00:00 2001
From: Robin Dunn <robin@alldunn.com>
Date: Sat, 3 Nov 2001 20:34:26 +0000
Subject: [PATCH] Added wxPostscriptDC to wxPython

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12290 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 wxPython/src/gdi.i            |  12 -
 wxPython/src/msw/calendar.cpp | 676 +++++++++++++++++++++++++++++++++-
 wxPython/src/msw/calendar.py  |  81 ++++
 wxPython/src/msw/gdi.cpp      |   3 -
 wxPython/src/msw/printfw.cpp  | 232 ++++++++++++
 wxPython/src/msw/printfw.py   |  30 ++
 wxPython/src/printfw.i        |  17 +
 7 files changed, 1031 insertions(+), 20 deletions(-)

diff --git a/wxPython/src/gdi.i b/wxPython/src/gdi.i
index 7ed99fbc21..48cbbb569b 100644
--- a/wxPython/src/gdi.i
+++ b/wxPython/src/gdi.i
@@ -16,9 +16,6 @@
 %{
 #include "helpers.h"
 #include <wx/imaglist.h>
-#ifndef __WXMSW__
-#include <wx/dcps.h>
-#endif
 #include <wx/fontmap.h>
 #include <wx/fontenc.h>
 #include <wx/fontmap.h>
@@ -1064,15 +1061,6 @@ public:
 
 //---------------------------------------------------------------------------
 
-#ifndef __WXMSW__
-class wxPostScriptDC : public wxDC {
-public:
-      wxPostScriptDC(const wxString& output, bool interactive = TRUE, wxWindow* win = NULL);
-};
-#endif
-
-//---------------------------------------------------------------------------
-
 
 #ifdef __WXMSW__
 
diff --git a/wxPython/src/msw/calendar.cpp b/wxPython/src/msw/calendar.cpp
index 635831ed6a..0dc63c5f6a 100644
--- a/wxPython/src/msw/calendar.cpp
+++ b/wxPython/src/msw/calendar.cpp
@@ -93,6 +93,649 @@ static PyObject* t_output_helper(PyObject* target, PyObject* o) {
 #ifdef __cplusplus
 extern "C" {
 #endif
+#define new_wxCalendarDateAttr(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4) (new wxCalendarDateAttr(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4))
+static PyObject *_wrap_new_wxCalendarDateAttr(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxCalendarDateAttr * _result;
+    wxColour * _arg0;
+    wxColour * _arg1 = (wxColour *) &wxNullColour;
+    wxColour * _arg2 = (wxColour *) &wxNullColour;
+    wxFont * _arg3 = (wxFont *) &wxNullFont;
+    wxCalendarDateBorder  _arg4 = (wxCalendarDateBorder ) (wxCAL_BORDER_NONE);
+    wxColour  temp;
+    PyObject * _obj0 = 0;
+    wxColour  temp0;
+    PyObject * _obj1 = 0;
+    wxColour  temp1;
+    PyObject * _obj2 = 0;
+    PyObject * _argo3 = 0;
+    char *_kwnames[] = { "colText","colBack","colBorder","font","border", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O|OOOi:new_wxCalendarDateAttr",_kwnames,&_obj0,&_obj1,&_obj2,&_argo3,&_arg4)) 
+        return NULL;
+{
+    _arg0 = &temp;
+    if (! wxColour_helper(_obj0, &_arg0))
+        return NULL;
+}
+    if (_obj1)
+{
+    _arg1 = &temp0;
+    if (! wxColour_helper(_obj1, &_arg1))
+        return NULL;
+}
+    if (_obj2)
+{
+    _arg2 = &temp1;
+    if (! wxColour_helper(_obj2, &_arg2))
+        return NULL;
+}
+    if (_argo3) {
+        if (_argo3 == Py_None) { _arg3 = NULL; }
+        else if (SWIG_GetPtrObj(_argo3,(void **) &_arg3,"_wxFont_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 4 of new_wxCalendarDateAttr. Expected _wxFont_p.");
+        return NULL;
+        }
+    }
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        _result = (wxCalendarDateAttr *)new_wxCalendarDateAttr(*_arg0,*_arg1,*_arg2,*_arg3,_arg4);
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxCalendarDateAttr_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+    return _resultobj;
+}
+
+#define new_wxCalendarDateAttrBorder(_swigarg0,_swigarg1) (new wxCalendarDateAttr(_swigarg0,_swigarg1))
+static PyObject *_wrap_new_wxCalendarDateAttrBorder(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxCalendarDateAttr * _result;
+    wxCalendarDateBorder  _arg0;
+    wxColour * _arg1 = (wxColour *) &wxNullColour;
+    wxColour  temp;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "border","colBorder", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"i|O:new_wxCalendarDateAttrBorder",_kwnames,&_arg0,&_obj1)) 
+        return NULL;
+    if (_obj1)
+{
+    _arg1 = &temp;
+    if (! wxColour_helper(_obj1, &_arg1))
+        return NULL;
+}
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        _result = (wxCalendarDateAttr *)new_wxCalendarDateAttrBorder(_arg0,*_arg1);
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxCalendarDateAttr_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+    return _resultobj;
+}
+
+#define wxCalendarDateAttr_SetTextColour(_swigobj,_swigarg0)  (_swigobj->SetTextColour(_swigarg0))
+static PyObject *_wrap_wxCalendarDateAttr_SetTextColour(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxCalendarDateAttr * _arg0;
+    wxColour * _arg1;
+    PyObject * _argo0 = 0;
+    wxColour  temp;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","colText", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxCalendarDateAttr_SetTextColour",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxCalendarDateAttr_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxCalendarDateAttr_SetTextColour. Expected _wxCalendarDateAttr_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = &temp;
+    if (! wxColour_helper(_obj1, &_arg1))
+        return NULL;
+}
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        wxCalendarDateAttr_SetTextColour(_arg0,*_arg1);
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxCalendarDateAttr_SetBackgroundColour(_swigobj,_swigarg0)  (_swigobj->SetBackgroundColour(_swigarg0))
+static PyObject *_wrap_wxCalendarDateAttr_SetBackgroundColour(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxCalendarDateAttr * _arg0;
+    wxColour * _arg1;
+    PyObject * _argo0 = 0;
+    wxColour  temp;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","colBack", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxCalendarDateAttr_SetBackgroundColour",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxCalendarDateAttr_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxCalendarDateAttr_SetBackgroundColour. Expected _wxCalendarDateAttr_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = &temp;
+    if (! wxColour_helper(_obj1, &_arg1))
+        return NULL;
+}
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        wxCalendarDateAttr_SetBackgroundColour(_arg0,*_arg1);
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxCalendarDateAttr_SetBorderColour(_swigobj,_swigarg0)  (_swigobj->SetBorderColour(_swigarg0))
+static PyObject *_wrap_wxCalendarDateAttr_SetBorderColour(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxCalendarDateAttr * _arg0;
+    wxColour * _arg1;
+    PyObject * _argo0 = 0;
+    wxColour  temp;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","col", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxCalendarDateAttr_SetBorderColour",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxCalendarDateAttr_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxCalendarDateAttr_SetBorderColour. Expected _wxCalendarDateAttr_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = &temp;
+    if (! wxColour_helper(_obj1, &_arg1))
+        return NULL;
+}
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        wxCalendarDateAttr_SetBorderColour(_arg0,*_arg1);
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxCalendarDateAttr_SetFont(_swigobj,_swigarg0)  (_swigobj->SetFont(_swigarg0))
+static PyObject *_wrap_wxCalendarDateAttr_SetFont(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxCalendarDateAttr * _arg0;
+    wxFont * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","font", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxCalendarDateAttr_SetFont",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxCalendarDateAttr_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxCalendarDateAttr_SetFont. Expected _wxCalendarDateAttr_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxFont_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxCalendarDateAttr_SetFont. Expected _wxFont_p.");
+        return NULL;
+        }
+    }
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        wxCalendarDateAttr_SetFont(_arg0,*_arg1);
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxCalendarDateAttr_SetBorder(_swigobj,_swigarg0)  (_swigobj->SetBorder(_swigarg0))
+static PyObject *_wrap_wxCalendarDateAttr_SetBorder(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxCalendarDateAttr * _arg0;
+    wxCalendarDateBorder  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","border", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxCalendarDateAttr_SetBorder",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxCalendarDateAttr_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxCalendarDateAttr_SetBorder. Expected _wxCalendarDateAttr_p.");
+        return NULL;
+        }
+    }
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        wxCalendarDateAttr_SetBorder(_arg0,_arg1);
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxCalendarDateAttr_SetHoliday(_swigobj,_swigarg0)  (_swigobj->SetHoliday(_swigarg0))
+static PyObject *_wrap_wxCalendarDateAttr_SetHoliday(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxCalendarDateAttr * _arg0;
+    bool  _arg1;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    char *_kwnames[] = { "self","holiday", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxCalendarDateAttr_SetHoliday",_kwnames,&_argo0,&tempbool1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxCalendarDateAttr_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxCalendarDateAttr_SetHoliday. Expected _wxCalendarDateAttr_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        wxCalendarDateAttr_SetHoliday(_arg0,_arg1);
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxCalendarDateAttr_HasTextColour(_swigobj)  (_swigobj->HasTextColour())
+static PyObject *_wrap_wxCalendarDateAttr_HasTextColour(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxCalendarDateAttr * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxCalendarDateAttr_HasTextColour",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxCalendarDateAttr_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxCalendarDateAttr_HasTextColour. Expected _wxCalendarDateAttr_p.");
+        return NULL;
+        }
+    }
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        _result = (bool )wxCalendarDateAttr_HasTextColour(_arg0);
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxCalendarDateAttr_HasBackgroundColour(_swigobj)  (_swigobj->HasBackgroundColour())
+static PyObject *_wrap_wxCalendarDateAttr_HasBackgroundColour(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxCalendarDateAttr * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxCalendarDateAttr_HasBackgroundColour",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxCalendarDateAttr_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxCalendarDateAttr_HasBackgroundColour. Expected _wxCalendarDateAttr_p.");
+        return NULL;
+        }
+    }
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        _result = (bool )wxCalendarDateAttr_HasBackgroundColour(_arg0);
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxCalendarDateAttr_HasBorderColour(_swigobj)  (_swigobj->HasBorderColour())
+static PyObject *_wrap_wxCalendarDateAttr_HasBorderColour(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxCalendarDateAttr * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxCalendarDateAttr_HasBorderColour",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxCalendarDateAttr_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxCalendarDateAttr_HasBorderColour. Expected _wxCalendarDateAttr_p.");
+        return NULL;
+        }
+    }
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        _result = (bool )wxCalendarDateAttr_HasBorderColour(_arg0);
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxCalendarDateAttr_HasFont(_swigobj)  (_swigobj->HasFont())
+static PyObject *_wrap_wxCalendarDateAttr_HasFont(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxCalendarDateAttr * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxCalendarDateAttr_HasFont",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxCalendarDateAttr_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxCalendarDateAttr_HasFont. Expected _wxCalendarDateAttr_p.");
+        return NULL;
+        }
+    }
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        _result = (bool )wxCalendarDateAttr_HasFont(_arg0);
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxCalendarDateAttr_HasBorder(_swigobj)  (_swigobj->HasBorder())
+static PyObject *_wrap_wxCalendarDateAttr_HasBorder(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxCalendarDateAttr * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxCalendarDateAttr_HasBorder",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxCalendarDateAttr_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxCalendarDateAttr_HasBorder. Expected _wxCalendarDateAttr_p.");
+        return NULL;
+        }
+    }
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        _result = (bool )wxCalendarDateAttr_HasBorder(_arg0);
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxCalendarDateAttr_IsHoliday(_swigobj)  (_swigobj->IsHoliday())
+static PyObject *_wrap_wxCalendarDateAttr_IsHoliday(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxCalendarDateAttr * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxCalendarDateAttr_IsHoliday",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxCalendarDateAttr_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxCalendarDateAttr_IsHoliday. Expected _wxCalendarDateAttr_p.");
+        return NULL;
+        }
+    }
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        _result = (bool )wxCalendarDateAttr_IsHoliday(_arg0);
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxCalendarDateAttr_GetTextColour(_swigobj)  (_swigobj->GetTextColour())
+static PyObject *_wrap_wxCalendarDateAttr_GetTextColour(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxColour * _result;
+    wxCalendarDateAttr * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxCalendarDateAttr_GetTextColour",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxCalendarDateAttr_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxCalendarDateAttr_GetTextColour. Expected _wxCalendarDateAttr_p.");
+        return NULL;
+        }
+    }
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        const wxColour & _result_ref = wxCalendarDateAttr_GetTextColour(_arg0);
+    _result = (wxColour *) &_result_ref;
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxColour_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+    return _resultobj;
+}
+
+#define wxCalendarDateAttr_GetBackgroundColour(_swigobj)  (_swigobj->GetBackgroundColour())
+static PyObject *_wrap_wxCalendarDateAttr_GetBackgroundColour(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxColour * _result;
+    wxCalendarDateAttr * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxCalendarDateAttr_GetBackgroundColour",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxCalendarDateAttr_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxCalendarDateAttr_GetBackgroundColour. Expected _wxCalendarDateAttr_p.");
+        return NULL;
+        }
+    }
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        const wxColour & _result_ref = wxCalendarDateAttr_GetBackgroundColour(_arg0);
+    _result = (wxColour *) &_result_ref;
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxColour_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+    return _resultobj;
+}
+
+#define wxCalendarDateAttr_GetBorderColour(_swigobj)  (_swigobj->GetBorderColour())
+static PyObject *_wrap_wxCalendarDateAttr_GetBorderColour(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxColour * _result;
+    wxCalendarDateAttr * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxCalendarDateAttr_GetBorderColour",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxCalendarDateAttr_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxCalendarDateAttr_GetBorderColour. Expected _wxCalendarDateAttr_p.");
+        return NULL;
+        }
+    }
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        const wxColour & _result_ref = wxCalendarDateAttr_GetBorderColour(_arg0);
+    _result = (wxColour *) &_result_ref;
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxColour_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+    return _resultobj;
+}
+
+#define wxCalendarDateAttr_GetFont(_swigobj)  (_swigobj->GetFont())
+static PyObject *_wrap_wxCalendarDateAttr_GetFont(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxFont * _result;
+    wxCalendarDateAttr * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxCalendarDateAttr_GetFont",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxCalendarDateAttr_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxCalendarDateAttr_GetFont. Expected _wxCalendarDateAttr_p.");
+        return NULL;
+        }
+    }
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        const wxFont & _result_ref = wxCalendarDateAttr_GetFont(_arg0);
+    _result = (wxFont *) &_result_ref;
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxFont_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+    return _resultobj;
+}
+
+#define wxCalendarDateAttr_GetBorder(_swigobj)  (_swigobj->GetBorder())
+static PyObject *_wrap_wxCalendarDateAttr_GetBorder(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxCalendarDateBorder  _result;
+    wxCalendarDateAttr * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxCalendarDateAttr_GetBorder",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxCalendarDateAttr_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxCalendarDateAttr_GetBorder. Expected _wxCalendarDateAttr_p.");
+        return NULL;
+        }
+    }
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        _result = (wxCalendarDateBorder )wxCalendarDateAttr_GetBorder(_arg0);
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
 static void *SwigwxCalendarEventTowxCommandEvent(void *ptr) {
     wxCalendarEvent *src;
     wxCommandEvent *dest;
@@ -1248,7 +1891,7 @@ static PyObject *_wrap_wxCalendarCtrl_ResetAttr(PyObject *self, PyObject *args,
 #define wxCalendarCtrl_HitTest(_swigobj,_swigarg0,_swigarg1,_swigarg2)  (_swigobj->HitTest(_swigarg0,_swigarg1,_swigarg2))
 static PyObject *_wrap_wxCalendarCtrl_HitTest(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxCalendarHitTestResult * _result;
+    wxCalendarHitTestResult  _result;
     wxCalendarCtrl * _arg0;
     wxPoint * _arg1;
     wxDateTime * _arg2 = (wxDateTime *) NULL;
@@ -1259,7 +1902,6 @@ static PyObject *_wrap_wxCalendarCtrl_HitTest(PyObject *self, PyObject *args, Py
     PyObject * _argo2 = 0;
     PyObject * _argo3 = 0;
     char *_kwnames[] = { "self","pos","date","wd", NULL };
-    char _ptemp[128];
 
     self = self;
     if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|OO:wxCalendarCtrl_HitTest",_kwnames,&_argo0,&_obj1,&_argo2,&_argo3)) 
@@ -1292,12 +1934,11 @@ static PyObject *_wrap_wxCalendarCtrl_HitTest(PyObject *self, PyObject *args, Py
     }
 {
     wxPy_BEGIN_ALLOW_THREADS;
-        _result = new wxCalendarHitTestResult (wxCalendarCtrl_HitTest(_arg0,*_arg1,_arg2,_arg3));
+        _result = (wxCalendarHitTestResult )wxCalendarCtrl_HitTest(_arg0,*_arg1,_arg2,_arg3);
 
     wxPy_END_ALLOW_THREADS;
     if (PyErr_Occurred()) return NULL;
-}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxCalendarHitTestResult_p");
-    _resultobj = Py_BuildValue("s",_ptemp);
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
@@ -1396,6 +2037,25 @@ static PyMethodDef calendarcMethods[] = {
 	 { "wxCalendarEvent_GetWeekDay", (PyCFunction) _wrap_wxCalendarEvent_GetWeekDay, METH_VARARGS | METH_KEYWORDS },
 	 { "wxCalendarEvent_GetDate", (PyCFunction) _wrap_wxCalendarEvent_GetDate, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxCalendarEvent", (PyCFunction) _wrap_new_wxCalendarEvent, METH_VARARGS | METH_KEYWORDS },
+	 { "wxCalendarDateAttr_GetBorder", (PyCFunction) _wrap_wxCalendarDateAttr_GetBorder, METH_VARARGS | METH_KEYWORDS },
+	 { "wxCalendarDateAttr_GetFont", (PyCFunction) _wrap_wxCalendarDateAttr_GetFont, METH_VARARGS | METH_KEYWORDS },
+	 { "wxCalendarDateAttr_GetBorderColour", (PyCFunction) _wrap_wxCalendarDateAttr_GetBorderColour, METH_VARARGS | METH_KEYWORDS },
+	 { "wxCalendarDateAttr_GetBackgroundColour", (PyCFunction) _wrap_wxCalendarDateAttr_GetBackgroundColour, METH_VARARGS | METH_KEYWORDS },
+	 { "wxCalendarDateAttr_GetTextColour", (PyCFunction) _wrap_wxCalendarDateAttr_GetTextColour, METH_VARARGS | METH_KEYWORDS },
+	 { "wxCalendarDateAttr_IsHoliday", (PyCFunction) _wrap_wxCalendarDateAttr_IsHoliday, METH_VARARGS | METH_KEYWORDS },
+	 { "wxCalendarDateAttr_HasBorder", (PyCFunction) _wrap_wxCalendarDateAttr_HasBorder, METH_VARARGS | METH_KEYWORDS },
+	 { "wxCalendarDateAttr_HasFont", (PyCFunction) _wrap_wxCalendarDateAttr_HasFont, METH_VARARGS | METH_KEYWORDS },
+	 { "wxCalendarDateAttr_HasBorderColour", (PyCFunction) _wrap_wxCalendarDateAttr_HasBorderColour, METH_VARARGS | METH_KEYWORDS },
+	 { "wxCalendarDateAttr_HasBackgroundColour", (PyCFunction) _wrap_wxCalendarDateAttr_HasBackgroundColour, METH_VARARGS | METH_KEYWORDS },
+	 { "wxCalendarDateAttr_HasTextColour", (PyCFunction) _wrap_wxCalendarDateAttr_HasTextColour, METH_VARARGS | METH_KEYWORDS },
+	 { "wxCalendarDateAttr_SetHoliday", (PyCFunction) _wrap_wxCalendarDateAttr_SetHoliday, METH_VARARGS | METH_KEYWORDS },
+	 { "wxCalendarDateAttr_SetBorder", (PyCFunction) _wrap_wxCalendarDateAttr_SetBorder, METH_VARARGS | METH_KEYWORDS },
+	 { "wxCalendarDateAttr_SetFont", (PyCFunction) _wrap_wxCalendarDateAttr_SetFont, METH_VARARGS | METH_KEYWORDS },
+	 { "wxCalendarDateAttr_SetBorderColour", (PyCFunction) _wrap_wxCalendarDateAttr_SetBorderColour, METH_VARARGS | METH_KEYWORDS },
+	 { "wxCalendarDateAttr_SetBackgroundColour", (PyCFunction) _wrap_wxCalendarDateAttr_SetBackgroundColour, METH_VARARGS | METH_KEYWORDS },
+	 { "wxCalendarDateAttr_SetTextColour", (PyCFunction) _wrap_wxCalendarDateAttr_SetTextColour, METH_VARARGS | METH_KEYWORDS },
+	 { "new_wxCalendarDateAttrBorder", (PyCFunction) _wrap_new_wxCalendarDateAttrBorder, METH_VARARGS | METH_KEYWORDS },
+	 { "new_wxCalendarDateAttr", (PyCFunction) _wrap_new_wxCalendarDateAttr, METH_VARARGS | METH_KEYWORDS },
 	 { NULL, NULL }
 };
 #ifdef __cplusplus
@@ -1533,6 +2193,12 @@ SWIGEXPORT(void) initcalendarc() {
 	 PyDict_SetItemString(d,"wxCAL_HITTEST_NOWHERE", PyInt_FromLong((long) wxCAL_HITTEST_NOWHERE));
 	 PyDict_SetItemString(d,"wxCAL_HITTEST_HEADER", PyInt_FromLong((long) wxCAL_HITTEST_HEADER));
 	 PyDict_SetItemString(d,"wxCAL_HITTEST_DAY", PyInt_FromLong((long) wxCAL_HITTEST_DAY));
+	 PyDict_SetItemString(d,"wxCAL_HITTEST_INCMONTH", PyInt_FromLong((long) wxCAL_HITTEST_INCMONTH));
+	 PyDict_SetItemString(d,"wxCAL_HITTEST_DECMONTH", PyInt_FromLong((long) wxCAL_HITTEST_DECMONTH));
+	 PyDict_SetItemString(d,"wxCAL_HITTEST_SURROUNDING_WEEK", PyInt_FromLong((long) wxCAL_HITTEST_SURROUNDING_WEEK));
+	 PyDict_SetItemString(d,"wxCAL_BORDER_NONE", PyInt_FromLong((long) wxCAL_BORDER_NONE));
+	 PyDict_SetItemString(d,"wxCAL_BORDER_SQUARE", PyInt_FromLong((long) wxCAL_BORDER_SQUARE));
+	 PyDict_SetItemString(d,"wxCAL_BORDER_ROUND", PyInt_FromLong((long) wxCAL_BORDER_ROUND));
 	 PyDict_SetItemString(d,"wxEVT_CALENDAR_DOUBLECLICKED", PyInt_FromLong((long) wxEVT_CALENDAR_DOUBLECLICKED));
 	 PyDict_SetItemString(d,"wxEVT_CALENDAR_SEL_CHANGED", PyInt_FromLong((long) wxEVT_CALENDAR_SEL_CHANGED));
 	 PyDict_SetItemString(d,"wxEVT_CALENDAR_DAY_CHANGED", PyInt_FromLong((long) wxEVT_CALENDAR_DAY_CHANGED));
diff --git a/wxPython/src/msw/calendar.py b/wxPython/src/msw/calendar.py
index b3b52b17ab..ab9fa83fb3 100644
--- a/wxPython/src/msw/calendar.py
+++ b/wxPython/src/msw/calendar.py
@@ -35,6 +35,80 @@ def EVT_CALENDAR_WEEKDAY_CLICKED(win, id, fn):
     win.Connect(id, -1, wxEVT_CALENDAR_WEEKDAY_CLICKED, fn)
 
 
+class wxCalendarDateAttrPtr :
+    def __init__(self,this):
+        self.this = this
+        self.thisown = 0
+    def SetTextColour(self, *_args, **_kwargs):
+        val = apply(calendarc.wxCalendarDateAttr_SetTextColour,(self,) + _args, _kwargs)
+        return val
+    def SetBackgroundColour(self, *_args, **_kwargs):
+        val = apply(calendarc.wxCalendarDateAttr_SetBackgroundColour,(self,) + _args, _kwargs)
+        return val
+    def SetBorderColour(self, *_args, **_kwargs):
+        val = apply(calendarc.wxCalendarDateAttr_SetBorderColour,(self,) + _args, _kwargs)
+        return val
+    def SetFont(self, *_args, **_kwargs):
+        val = apply(calendarc.wxCalendarDateAttr_SetFont,(self,) + _args, _kwargs)
+        return val
+    def SetBorder(self, *_args, **_kwargs):
+        val = apply(calendarc.wxCalendarDateAttr_SetBorder,(self,) + _args, _kwargs)
+        return val
+    def SetHoliday(self, *_args, **_kwargs):
+        val = apply(calendarc.wxCalendarDateAttr_SetHoliday,(self,) + _args, _kwargs)
+        return val
+    def HasTextColour(self, *_args, **_kwargs):
+        val = apply(calendarc.wxCalendarDateAttr_HasTextColour,(self,) + _args, _kwargs)
+        return val
+    def HasBackgroundColour(self, *_args, **_kwargs):
+        val = apply(calendarc.wxCalendarDateAttr_HasBackgroundColour,(self,) + _args, _kwargs)
+        return val
+    def HasBorderColour(self, *_args, **_kwargs):
+        val = apply(calendarc.wxCalendarDateAttr_HasBorderColour,(self,) + _args, _kwargs)
+        return val
+    def HasFont(self, *_args, **_kwargs):
+        val = apply(calendarc.wxCalendarDateAttr_HasFont,(self,) + _args, _kwargs)
+        return val
+    def HasBorder(self, *_args, **_kwargs):
+        val = apply(calendarc.wxCalendarDateAttr_HasBorder,(self,) + _args, _kwargs)
+        return val
+    def IsHoliday(self, *_args, **_kwargs):
+        val = apply(calendarc.wxCalendarDateAttr_IsHoliday,(self,) + _args, _kwargs)
+        return val
+    def GetTextColour(self, *_args, **_kwargs):
+        val = apply(calendarc.wxCalendarDateAttr_GetTextColour,(self,) + _args, _kwargs)
+        if val: val = wxColourPtr(val) 
+        return val
+    def GetBackgroundColour(self, *_args, **_kwargs):
+        val = apply(calendarc.wxCalendarDateAttr_GetBackgroundColour,(self,) + _args, _kwargs)
+        if val: val = wxColourPtr(val) 
+        return val
+    def GetBorderColour(self, *_args, **_kwargs):
+        val = apply(calendarc.wxCalendarDateAttr_GetBorderColour,(self,) + _args, _kwargs)
+        if val: val = wxColourPtr(val) 
+        return val
+    def GetFont(self, *_args, **_kwargs):
+        val = apply(calendarc.wxCalendarDateAttr_GetFont,(self,) + _args, _kwargs)
+        if val: val = wxFontPtr(val) 
+        return val
+    def GetBorder(self, *_args, **_kwargs):
+        val = apply(calendarc.wxCalendarDateAttr_GetBorder,(self,) + _args, _kwargs)
+        return val
+    def __repr__(self):
+        return "<C wxCalendarDateAttr instance at %s>" % (self.this,)
+class wxCalendarDateAttr(wxCalendarDateAttrPtr):
+    def __init__(self,*_args,**_kwargs):
+        self.this = apply(calendarc.new_wxCalendarDateAttr,_args,_kwargs)
+        self.thisown = 1
+
+
+
+def wxCalendarDateAttrBorder(*_args,**_kwargs):
+    val = wxCalendarDateAttrPtr(apply(calendarc.new_wxCalendarDateAttrBorder,_args,_kwargs))
+    val.thisown = 1
+    return val
+
+
 class wxCalendarEventPtr(wxCommandEventPtr):
     def __init__(self,this):
         self.this = this
@@ -131,6 +205,7 @@ class wxCalendarCtrlPtr(wxControlPtr):
         return val
     def GetAttr(self, *_args, **_kwargs):
         val = apply(calendarc.wxCalendarCtrl_GetAttr,(self,) + _args, _kwargs)
+        if val: val = wxCalendarDateAttrPtr(val) 
         return val
     def SetAttr(self, *_args, **_kwargs):
         val = apply(calendarc.wxCalendarCtrl_SetAttr,(self,) + _args, _kwargs)
@@ -185,6 +260,12 @@ wxCAL_SHOW_SURROUNDING_WEEKS = calendarc.wxCAL_SHOW_SURROUNDING_WEEKS
 wxCAL_HITTEST_NOWHERE = calendarc.wxCAL_HITTEST_NOWHERE
 wxCAL_HITTEST_HEADER = calendarc.wxCAL_HITTEST_HEADER
 wxCAL_HITTEST_DAY = calendarc.wxCAL_HITTEST_DAY
+wxCAL_HITTEST_INCMONTH = calendarc.wxCAL_HITTEST_INCMONTH
+wxCAL_HITTEST_DECMONTH = calendarc.wxCAL_HITTEST_DECMONTH
+wxCAL_HITTEST_SURROUNDING_WEEK = calendarc.wxCAL_HITTEST_SURROUNDING_WEEK
+wxCAL_BORDER_NONE = calendarc.wxCAL_BORDER_NONE
+wxCAL_BORDER_SQUARE = calendarc.wxCAL_BORDER_SQUARE
+wxCAL_BORDER_ROUND = calendarc.wxCAL_BORDER_ROUND
 wxEVT_CALENDAR_DOUBLECLICKED = calendarc.wxEVT_CALENDAR_DOUBLECLICKED
 wxEVT_CALENDAR_SEL_CHANGED = calendarc.wxEVT_CALENDAR_SEL_CHANGED
 wxEVT_CALENDAR_DAY_CHANGED = calendarc.wxEVT_CALENDAR_DAY_CHANGED
diff --git a/wxPython/src/msw/gdi.cpp b/wxPython/src/msw/gdi.cpp
index 80a47f4afa..92966e3144 100644
--- a/wxPython/src/msw/gdi.cpp
+++ b/wxPython/src/msw/gdi.cpp
@@ -57,9 +57,6 @@ extern PyObject *SWIG_newvarlink(void);
 
 #include "helpers.h"
 #include <wx/imaglist.h>
-#ifndef __WXMSW__
-#include <wx/dcps.h>
-#endif
 #include <wx/fontmap.h>
 #include <wx/fontenc.h>
 #include <wx/fontmap.h>
diff --git a/wxPython/src/msw/printfw.cpp b/wxPython/src/msw/printfw.cpp
index 2b13f4c4f0..3aec2217ee 100644
--- a/wxPython/src/msw/printfw.cpp
+++ b/wxPython/src/msw/printfw.cpp
@@ -58,6 +58,7 @@ extern PyObject *SWIG_newvarlink(void);
 #include "helpers.h"
 #include <wx/print.h>
 #include <wx/printdlg.h>
+#include <wx/dcps.h>
 
 #include "printfw.h"
 
@@ -1697,6 +1698,229 @@ static PyObject *_wrap_new_wxPrinterDC2(PyObject *self, PyObject *args, PyObject
     return _resultobj;
 }
 
+static void *SwigwxPostScriptDCTowxDC(void *ptr) {
+    wxPostScriptDC *src;
+    wxDC *dest;
+    src = (wxPostScriptDC *) ptr;
+    dest = (wxDC *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPostScriptDCTowxObject(void *ptr) {
+    wxPostScriptDC *src;
+    wxObject *dest;
+    src = (wxPostScriptDC *) ptr;
+    dest = (wxObject *) src;
+    return (void *) dest;
+}
+
+#define new_wxPostScriptDC(_swigarg0) (new wxPostScriptDC(_swigarg0))
+static PyObject *_wrap_new_wxPostScriptDC(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPostScriptDC * _result;
+    wxPrintData * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "printData", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:new_wxPostScriptDC",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintData_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of new_wxPostScriptDC. Expected _wxPrintData_p.");
+        return NULL;
+        }
+    }
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        _result = (wxPostScriptDC *)new_wxPostScriptDC(*_arg0);
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPostScriptDC_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+    return _resultobj;
+}
+
+#define new_wxPostScriptDC2(_swigarg0,_swigarg1,_swigarg2) (new wxPostScriptDC(_swigarg0,_swigarg1,_swigarg2))
+static PyObject *_wrap_new_wxPostScriptDC2(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPostScriptDC * _result;
+    wxString * _arg0;
+    bool  _arg1 = (bool ) TRUE;
+    wxWindow * _arg2 = (wxWindow *) NULL;
+    PyObject * _obj0 = 0;
+    int tempbool1 = (int) TRUE;
+    PyObject * _argo2 = 0;
+    char *_kwnames[] = { "output","interactive","parent", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O|iO:new_wxPostScriptDC2",_kwnames,&_obj0,&tempbool1,&_argo2)) 
+        return NULL;
+{
+#if PYTHON_API_VERSION >= 1009
+    char* tmpPtr; int tmpSize;
+    if (!PyString_Check(_obj0) && !PyUnicode_Check(_obj0)) {
+        PyErr_SetString(PyExc_TypeError, wxStringErrorMsg);
+        return NULL;
+    }
+    if (PyString_AsStringAndSize(_obj0, &tmpPtr, &tmpSize) == -1)
+        return NULL;
+    _arg0 = new wxString(tmpPtr, tmpSize);
+#else
+    if (!PyString_Check(_obj0)) {
+        PyErr_SetString(PyExc_TypeError, wxStringErrorMsg);
+        return NULL;
+    }
+    _arg0 = new wxString(PyString_AS_STRING(_obj0), PyString_GET_SIZE(_obj0));
+#endif
+}
+    _arg1 = (bool ) tempbool1;
+    if (_argo2) {
+        if (_argo2 == Py_None) { _arg2 = NULL; }
+        else if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of new_wxPostScriptDC2. Expected _wxWindow_p.");
+        return NULL;
+        }
+    }
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        _result = (wxPostScriptDC *)new_wxPostScriptDC2(*_arg0,_arg1,_arg2);
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPostScriptDC_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+{
+    if (_obj0)
+        delete _arg0;
+}
+    return _resultobj;
+}
+
+#define wxPostScriptDC_GetPrintData(_swigobj)  (_swigobj->GetPrintData())
+static PyObject *_wrap_wxPostScriptDC_GetPrintData(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPrintData * _result;
+    wxPostScriptDC * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPostScriptDC_GetPrintData",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPostScriptDC_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPostScriptDC_GetPrintData. Expected _wxPostScriptDC_p.");
+        return NULL;
+        }
+    }
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        wxPrintData & _result_ref = wxPostScriptDC_GetPrintData(_arg0);
+    _result = (wxPrintData *) &_result_ref;
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPrintData_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+    return _resultobj;
+}
+
+#define wxPostScriptDC_SetPrintData(_swigobj,_swigarg0)  (_swigobj->SetPrintData(_swigarg0))
+static PyObject *_wrap_wxPostScriptDC_SetPrintData(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPostScriptDC * _arg0;
+    wxPrintData * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","data", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxPostScriptDC_SetPrintData",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPostScriptDC_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPostScriptDC_SetPrintData. Expected _wxPostScriptDC_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxPrintData_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPostScriptDC_SetPrintData. Expected _wxPrintData_p.");
+        return NULL;
+        }
+    }
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        wxPostScriptDC_SetPrintData(_arg0,*_arg1);
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+static PyObject *_wrap_wxPostScriptDC_SetResolution(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    int  _arg0;
+    char *_kwnames[] = { "ppi", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"i:wxPostScriptDC_SetResolution",_kwnames,&_arg0)) 
+        return NULL;
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        wxPostScriptDC::SetResolution(_arg0);
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+static PyObject *_wrap_wxPostScriptDC_GetResolution(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    int  _result;
+    char *_kwnames[] = {  NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,":wxPostScriptDC_GetResolution",_kwnames)) 
+        return NULL;
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        _result = (int )wxPostScriptDC::GetResolution();
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
 static void *SwigwxPageSetupDialogDataTowxObject(void *ptr) {
     wxPageSetupDialogData *src;
     wxObject *dest;
@@ -5398,6 +5622,12 @@ static PyMethodDef printfwcMethods[] = {
 	 { "wxPageSetupDialogData_EnableHelp", (PyCFunction) _wrap_wxPageSetupDialogData_EnableHelp, METH_VARARGS | METH_KEYWORDS },
 	 { "delete_wxPageSetupDialogData", (PyCFunction) _wrap_delete_wxPageSetupDialogData, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxPageSetupDialogData", (PyCFunction) _wrap_new_wxPageSetupDialogData, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPostScriptDC_GetResolution", (PyCFunction) _wrap_wxPostScriptDC_GetResolution, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPostScriptDC_SetResolution", (PyCFunction) _wrap_wxPostScriptDC_SetResolution, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPostScriptDC_SetPrintData", (PyCFunction) _wrap_wxPostScriptDC_SetPrintData, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPostScriptDC_GetPrintData", (PyCFunction) _wrap_wxPostScriptDC_GetPrintData, METH_VARARGS | METH_KEYWORDS },
+	 { "new_wxPostScriptDC2", (PyCFunction) _wrap_new_wxPostScriptDC2, METH_VARARGS | METH_KEYWORDS },
+	 { "new_wxPostScriptDC", (PyCFunction) _wrap_new_wxPostScriptDC, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxPrinterDC2", (PyCFunction) _wrap_new_wxPrinterDC2, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxPrinterDC", (PyCFunction) _wrap_new_wxPrinterDC, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPrintData_SetPrintMode", (PyCFunction) _wrap_wxPrintData_SetPrintMode, METH_VARARGS | METH_KEYWORDS },
@@ -5464,6 +5694,7 @@ static struct { char *n1; char *n2; void *(*pcnv)(void *); } _swig_mapping[] = {
     { "_byte","_unsigned_char",0},
     { "_long","_unsigned_long",0},
     { "_long","_signed_long",0},
+    { "_wxDC","_wxPostScriptDC",SwigwxPostScriptDCTowxDC},
     { "_wxDC","_wxPrinterDC",SwigwxPrinterDCTowxDC},
     { "_size_t","_wxCoord",0},
     { "_size_t","_wxPrintQuality",0},
@@ -5510,6 +5741,7 @@ static struct { char *n1; char *n2; void *(*pcnv)(void *); } _swig_mapping[] = {
     { "_wxObject","_wxPrintDialogData",SwigwxPrintDialogDataTowxObject},
     { "_wxObject","_wxPageSetupDialog",SwigwxPageSetupDialogTowxObject},
     { "_wxObject","_wxPageSetupDialogData",SwigwxPageSetupDialogDataTowxObject},
+    { "_wxObject","_wxPostScriptDC",SwigwxPostScriptDCTowxObject},
     { "_wxObject","_wxPrinterDC",SwigwxPrinterDCTowxObject},
     { "_wxObject","_wxPrintData",SwigwxPrintDataTowxObject},
     { "_signed_short","_WXTYPE",0},
diff --git a/wxPython/src/msw/printfw.py b/wxPython/src/msw/printfw.py
index 756c036cbd..191f6d9b9e 100644
--- a/wxPython/src/msw/printfw.py
+++ b/wxPython/src/msw/printfw.py
@@ -176,6 +176,32 @@ def wxPrinterDC2(*_args,**_kwargs):
     return val
 
 
+class wxPostScriptDCPtr(wxDCPtr):
+    def __init__(self,this):
+        self.this = this
+        self.thisown = 0
+    def GetPrintData(self, *_args, **_kwargs):
+        val = apply(printfwc.wxPostScriptDC_GetPrintData,(self,) + _args, _kwargs)
+        if val: val = wxPrintDataPtr(val) 
+        return val
+    def SetPrintData(self, *_args, **_kwargs):
+        val = apply(printfwc.wxPostScriptDC_SetPrintData,(self,) + _args, _kwargs)
+        return val
+    def __repr__(self):
+        return "<C wxPostScriptDC instance at %s>" % (self.this,)
+class wxPostScriptDC(wxPostScriptDCPtr):
+    def __init__(self,*_args,**_kwargs):
+        self.this = apply(printfwc.new_wxPostScriptDC,_args,_kwargs)
+        self.thisown = 1
+
+
+
+def wxPostScriptDC2(*_args,**_kwargs):
+    val = wxPostScriptDCPtr(apply(printfwc.new_wxPostScriptDC2,_args,_kwargs))
+    val.thisown = 1
+    return val
+
+
 class wxPageSetupDialogDataPtr(wxObjectPtr):
     def __init__(self,this):
         self.this = this
@@ -595,6 +621,10 @@ class wxPreviewFrame(wxPreviewFramePtr):
 
 #-------------- FUNCTION WRAPPERS ------------------
 
+wxPostScriptDC_SetResolution = printfwc.wxPostScriptDC_SetResolution
+
+wxPostScriptDC_GetResolution = printfwc.wxPostScriptDC_GetResolution
+
 
 
 #-------------- VARIABLE WRAPPERS ------------------
diff --git a/wxPython/src/printfw.i b/wxPython/src/printfw.i
index 524950497d..ced6407035 100644
--- a/wxPython/src/printfw.i
+++ b/wxPython/src/printfw.i
@@ -16,6 +16,7 @@
 #include "helpers.h"
 #include <wx/print.h>
 #include <wx/printdlg.h>
+#include <wx/dcps.h>
 
 #include "printfw.h"
 %}
@@ -112,6 +113,22 @@ public:
 
 //---------------------------------------------------------------------------
 
+class wxPostScriptDC : public wxDC {
+public:
+    wxPostScriptDC(const wxPrintData& printData);
+    %name(wxPostScriptDC2)wxPostScriptDC(const wxString& output,
+                                         bool interactive = TRUE,
+                                         wxWindow* parent = NULL);
+
+    wxPrintData& GetPrintData();
+    void SetPrintData(const wxPrintData& data);
+
+    static void SetResolution(int ppi);
+    static int GetResolution();
+};
+
+//---------------------------------------------------------------------------
+
 class wxPageSetupDialogData : public wxObject {
 public:
     wxPageSetupDialogData();
-- 
2.47.2