| 1 | ///////////////////////////////////////////////////////////////////////////// |
| 2 | // Name: oglhelpers.h |
| 3 | // Purpose: Some Helper functions to help in data conversions in OGL |
| 4 | // |
| 5 | // Author: Robin Dunn |
| 6 | // |
| 7 | // Created: 9-Sept-1999 |
| 8 | // RCS-ID: $Id$ |
| 9 | // Copyright: (c) 1998 by Total Control Software |
| 10 | // Licence: wxWindows license |
| 11 | ///////////////////////////////////////////////////////////////////////////// |
| 12 | |
| 13 | #ifndef __wxp_ogl_helpers__ |
| 14 | #define __wxp_ogl_helpers__ |
| 15 | |
| 16 | |
| 17 | #include <wx/ogl/ogl.h> |
| 18 | #include <wx/ogl/basicp.h> |
| 19 | #include <wx/ogl/constrnt.h> |
| 20 | #include <wx/ogl/bmpshape.h> |
| 21 | #include <wx/ogl/drawn.h> |
| 22 | |
| 23 | |
| 24 | //--------------------------------------------------------------------------- |
| 25 | // Define a macro that will be used in the class definintions below |
| 26 | |
| 27 | #define WXSHAPE_DEC_CALLBACKS() \ |
| 28 | DEC_PYCALLBACK__ (OnDelete); \ |
| 29 | DEC_PYCALLBACK__DC (OnDraw); \ |
| 30 | DEC_PYCALLBACK__DC (OnDrawContents); \ |
| 31 | DEC_PYCALLBACK__DCBOOL (OnDrawBranches); \ |
| 32 | DEC_PYCALLBACK__DC (OnMoveLinks); \ |
| 33 | DEC_PYCALLBACK__DC (OnErase); \ |
| 34 | DEC_PYCALLBACK__DC (OnEraseContents); \ |
| 35 | DEC_PYCALLBACK__DC (OnHighlight); \ |
| 36 | DEC_PYCALLBACK__2DBL2INT (OnLeftClick); \ |
| 37 | DEC_PYCALLBACK__2DBL2INT (OnLeftDoubleClick); \ |
| 38 | DEC_PYCALLBACK__2DBL2INT (OnRightClick); \ |
| 39 | DEC_PYCALLBACK__2DBL (OnSize); \ |
| 40 | DEC_PYCALLBACK_BOOL_DC4DBLBOOL (OnMovePre); \ |
| 41 | DEC_PYCALLBACK__DC4DBLBOOL (OnMovePost); \ |
| 42 | DEC_PYCALLBACK__BOOL2DBL2INT (OnDragLeft); \ |
| 43 | DEC_PYCALLBACK__2DBL2INT (OnBeginDragLeft); \ |
| 44 | DEC_PYCALLBACK__2DBL2INT (OnEndDragLeft); \ |
| 45 | DEC_PYCALLBACK__BOOL2DBL2INT (OnDragRight); \ |
| 46 | DEC_PYCALLBACK__2DBL2INT (OnBeginDragRight); \ |
| 47 | DEC_PYCALLBACK__2DBL2INT (OnEndDragRight); \ |
| 48 | DEC_PYCALLBACK__DC4DBL (OnDrawOutline); \ |
| 49 | DEC_PYCALLBACK__DC (OnDrawControlPoints); \ |
| 50 | DEC_PYCALLBACK__DC (OnEraseControlPoints); \ |
| 51 | DEC_PYCALLBACK__DCBOOL (OnMoveLink); \ |
| 52 | DEC_PYCALLBACK__WXCPBOOL2DBL2INT(OnSizingDragLeft); \ |
| 53 | DEC_PYCALLBACK__WXCP2DBL2INT (OnSizingBeginDragLeft);\ |
| 54 | DEC_PYCALLBACK__WXCP2DBL2INT (OnSizingEndDragLeft); \ |
| 55 | DEC_PYCALLBACK__2DBL (OnBeginSize); \ |
| 56 | DEC_PYCALLBACK__2DBL (OnEndSize); \ |
| 57 | PYPRIVATE |
| 58 | |
| 59 | |
| 60 | #define WXSHAPE_IMP_CALLBACKS(CLASS, PARENT) \ |
| 61 | IMP_PYCALLBACK__ (CLASS, PARENT, OnDelete); \ |
| 62 | IMP_PYCALLBACK__DC (CLASS, PARENT, OnDraw); \ |
| 63 | IMP_PYCALLBACK__DC (CLASS, PARENT, OnDrawContents); \ |
| 64 | IMP_PYCALLBACK__DCBOOL (CLASS, PARENT, OnDrawBranches); \ |
| 65 | IMP_PYCALLBACK__DC (CLASS, PARENT, OnMoveLinks); \ |
| 66 | IMP_PYCALLBACK__DC (CLASS, PARENT, OnErase); \ |
| 67 | IMP_PYCALLBACK__DC (CLASS, PARENT, OnEraseContents); \ |
| 68 | IMP_PYCALLBACK__DC (CLASS, PARENT, OnHighlight); \ |
| 69 | IMP_PYCALLBACK__2DBL2INT (CLASS, PARENT, OnLeftClick); \ |
| 70 | IMP_PYCALLBACK__2DBL2INT (CLASS, PARENT, OnLeftDoubleClick); \ |
| 71 | IMP_PYCALLBACK__2DBL2INT (CLASS, PARENT, OnRightClick); \ |
| 72 | IMP_PYCALLBACK__2DBL (CLASS, PARENT, OnSize); \ |
| 73 | IMP_PYCALLBACK_BOOL_DC4DBLBOOL (CLASS, PARENT, OnMovePre); \ |
| 74 | IMP_PYCALLBACK__DC4DBLBOOL (CLASS, PARENT, OnMovePost); \ |
| 75 | IMP_PYCALLBACK__BOOL2DBL2INT (CLASS, PARENT, OnDragLeft); \ |
| 76 | IMP_PYCALLBACK__2DBL2INT (CLASS, PARENT, OnBeginDragLeft); \ |
| 77 | IMP_PYCALLBACK__2DBL2INT (CLASS, PARENT, OnEndDragLeft); \ |
| 78 | IMP_PYCALLBACK__BOOL2DBL2INT (CLASS, PARENT, OnDragRight); \ |
| 79 | IMP_PYCALLBACK__2DBL2INT (CLASS, PARENT, OnBeginDragRight); \ |
| 80 | IMP_PYCALLBACK__2DBL2INT (CLASS, PARENT, OnEndDragRight); \ |
| 81 | IMP_PYCALLBACK__DC4DBL (CLASS, PARENT, OnDrawOutline); \ |
| 82 | IMP_PYCALLBACK__DC (CLASS, PARENT, OnDrawControlPoints); \ |
| 83 | IMP_PYCALLBACK__DC (CLASS, PARENT, OnEraseControlPoints); \ |
| 84 | IMP_PYCALLBACK__DCBOOL (CLASS, PARENT, OnMoveLink); \ |
| 85 | IMP_PYCALLBACK__WXCPBOOL2DBL2INT(CLASS, PARENT, OnSizingDragLeft); \ |
| 86 | IMP_PYCALLBACK__WXCP2DBL2INT (CLASS, PARENT, OnSizingBeginDragLeft);\ |
| 87 | IMP_PYCALLBACK__WXCP2DBL2INT (CLASS, PARENT, OnSizingEndDragLeft); \ |
| 88 | IMP_PYCALLBACK__2DBL (CLASS, PARENT, OnBeginSize); \ |
| 89 | IMP_PYCALLBACK__2DBL (CLASS, PARENT, OnEndSize) |
| 90 | |
| 91 | |
| 92 | // This one may be difficult... |
| 93 | //PYCALLBACK__??????? (PARENT, OnChangeAttachment); |
| 94 | |
| 95 | |
| 96 | |
| 97 | //--------------------------------------------------------------------------- |
| 98 | // These are prototypes of some helper functions found in ogl.i |
| 99 | |
| 100 | wxList* wxPy_wxListHelper(PyObject* pyList, char* className); |
| 101 | wxList* wxPy_wxRealPoint_ListHelper(PyObject* pyList); |
| 102 | PyObject* wxPyMake_wxShapeEvtHandler(wxShapeEvtHandler* source); |
| 103 | PyObject* wxPy_ConvertShapeList(wxListBase* list, const char* className); |
| 104 | |
| 105 | |
| 106 | |
| 107 | //--------------------------------------------------------------------------- |
| 108 | // Classes that derive from the shapes and such, but which know how to turn |
| 109 | // virtual callbacks into Python callbacks. |
| 110 | |
| 111 | class wxPyShapeCanvas : public wxShapeCanvas { |
| 112 | DECLARE_DYNAMIC_CLASS(wxPyShapeCanvas); |
| 113 | public: |
| 114 | wxPyShapeCanvas(wxWindow* parent = NULL, wxWindowID id = -1, |
| 115 | const wxPoint& pos = wxDefaultPosition, |
| 116 | const wxSize& size = wxDefaultSize, |
| 117 | long style = wxBORDER, |
| 118 | const wxString& name = wxT("shapeCanvas")) |
| 119 | : wxShapeCanvas(parent, id, pos, size, style, name) {} |
| 120 | |
| 121 | DEC_PYCALLBACK__2DBLINT(OnBeginDragLeft); |
| 122 | DEC_PYCALLBACK__2DBLINT(OnBeginDragRight); |
| 123 | DEC_PYCALLBACK__2DBLINT(OnEndDragLeft); |
| 124 | DEC_PYCALLBACK__2DBLINT(OnEndDragRight); |
| 125 | DEC_PYCALLBACK__BOOL2DBLINT(OnDragLeft); |
| 126 | DEC_PYCALLBACK__BOOL2DBLINT(OnDragRight); |
| 127 | DEC_PYCALLBACK__2DBLINT(OnLeftClick); |
| 128 | DEC_PYCALLBACK__2DBLINT(OnRightClick); |
| 129 | |
| 130 | PYPRIVATE; |
| 131 | }; |
| 132 | |
| 133 | |
| 134 | |
| 135 | class wxPyShapeEvtHandler : public wxShapeEvtHandler { |
| 136 | DECLARE_DYNAMIC_CLASS(wxPyShapeEvtHandler); |
| 137 | public: |
| 138 | wxPyShapeEvtHandler(wxShapeEvtHandler *prev = NULL, wxShape *shape = NULL) |
| 139 | : wxShapeEvtHandler(prev, shape) {} |
| 140 | |
| 141 | WXSHAPE_DEC_CALLBACKS(); |
| 142 | }; |
| 143 | |
| 144 | |
| 145 | class wxPyShape : public wxShape { |
| 146 | DECLARE_ABSTRACT_CLASS(wxPyShape); |
| 147 | public: |
| 148 | wxPyShape(wxPyShapeCanvas *can = NULL) |
| 149 | : wxShape(can) {} |
| 150 | |
| 151 | WXSHAPE_DEC_CALLBACKS(); |
| 152 | |
| 153 | }; |
| 154 | |
| 155 | |
| 156 | class wxPyRectangleShape : public wxRectangleShape { |
| 157 | DECLARE_DYNAMIC_CLASS(wxPyRectangleShape); |
| 158 | public: |
| 159 | wxPyRectangleShape(double width = 0.0, double height = 0.0) |
| 160 | : wxRectangleShape(width, height) {} |
| 161 | |
| 162 | WXSHAPE_DEC_CALLBACKS(); |
| 163 | }; |
| 164 | |
| 165 | class wxPyControlPoint : public wxControlPoint { |
| 166 | DECLARE_DYNAMIC_CLASS(wxPyControlPoint); |
| 167 | public: |
| 168 | wxPyControlPoint(wxPyShapeCanvas *the_canvas = NULL, |
| 169 | wxPyShape *object = NULL, |
| 170 | double size = 0.0, double the_xoffset = 0.0, |
| 171 | double the_yoffset = 0.0, int the_type = 0) |
| 172 | : wxControlPoint(the_canvas, object, size, |
| 173 | the_xoffset, the_yoffset, the_type) {} |
| 174 | |
| 175 | WXSHAPE_DEC_CALLBACKS(); |
| 176 | }; |
| 177 | |
| 178 | |
| 179 | |
| 180 | class wxPyBitmapShape : public wxBitmapShape { |
| 181 | DECLARE_DYNAMIC_CLASS(wxPyBitmapShape); |
| 182 | public: |
| 183 | wxPyBitmapShape() : wxBitmapShape() {} |
| 184 | |
| 185 | WXSHAPE_DEC_CALLBACKS(); |
| 186 | }; |
| 187 | |
| 188 | |
| 189 | |
| 190 | class wxPyDrawnShape : public wxDrawnShape { |
| 191 | DECLARE_DYNAMIC_CLASS(wxPyDrawnShape); |
| 192 | public: |
| 193 | wxPyDrawnShape() : wxDrawnShape() {} |
| 194 | |
| 195 | WXSHAPE_DEC_CALLBACKS(); |
| 196 | }; |
| 197 | |
| 198 | |
| 199 | class wxPyCompositeShape : public wxCompositeShape { |
| 200 | DECLARE_DYNAMIC_CLASS(wxPyCompositeShape); |
| 201 | public: |
| 202 | wxPyCompositeShape() : wxCompositeShape() {} |
| 203 | |
| 204 | WXSHAPE_DEC_CALLBACKS(); |
| 205 | }; |
| 206 | |
| 207 | |
| 208 | class wxPyDividedShape : public wxDividedShape { |
| 209 | DECLARE_DYNAMIC_CLASS(wxPyDividedShape); |
| 210 | public: |
| 211 | wxPyDividedShape(double width = 0.0, double height = 0.0) |
| 212 | : wxDividedShape(width, height) {} |
| 213 | |
| 214 | WXSHAPE_DEC_CALLBACKS(); |
| 215 | }; |
| 216 | |
| 217 | |
| 218 | class wxPyDivisionShape : public wxDivisionShape { |
| 219 | DECLARE_DYNAMIC_CLASS(wxPyDivisionShape); |
| 220 | public: |
| 221 | wxPyDivisionShape() : wxDivisionShape() {} |
| 222 | |
| 223 | WXSHAPE_DEC_CALLBACKS(); |
| 224 | }; |
| 225 | |
| 226 | |
| 227 | class wxPyEllipseShape : public wxEllipseShape { |
| 228 | DECLARE_DYNAMIC_CLASS(wxPyEllipseShape); |
| 229 | public: |
| 230 | wxPyEllipseShape(double width = 0.0, double height = 0.0) |
| 231 | : wxEllipseShape(width, height) {} |
| 232 | |
| 233 | WXSHAPE_DEC_CALLBACKS(); |
| 234 | }; |
| 235 | |
| 236 | |
| 237 | class wxPyCircleShape : public wxCircleShape { |
| 238 | DECLARE_DYNAMIC_CLASS(wxPyCircleShape); |
| 239 | public: |
| 240 | wxPyCircleShape(double width = 0.0) |
| 241 | : wxCircleShape(width) {} |
| 242 | |
| 243 | WXSHAPE_DEC_CALLBACKS(); |
| 244 | }; |
| 245 | |
| 246 | |
| 247 | class wxPyLineShape : public wxLineShape { |
| 248 | DECLARE_DYNAMIC_CLASS(wxPyLineShape); |
| 249 | public: |
| 250 | wxPyLineShape() : wxLineShape() {} |
| 251 | |
| 252 | WXSHAPE_DEC_CALLBACKS(); |
| 253 | }; |
| 254 | |
| 255 | |
| 256 | class wxPyPolygonShape : public wxPolygonShape { |
| 257 | DECLARE_DYNAMIC_CLASS(wxPyPolygonShape); |
| 258 | public: |
| 259 | wxPyPolygonShape() : wxPolygonShape() {} |
| 260 | |
| 261 | WXSHAPE_DEC_CALLBACKS(); |
| 262 | }; |
| 263 | |
| 264 | |
| 265 | class wxPyTextShape : public wxTextShape { |
| 266 | DECLARE_DYNAMIC_CLASS(wxPyTextShape); |
| 267 | public: |
| 268 | wxPyTextShape(double width = 0.0, double height = 0.0) |
| 269 | : wxTextShape(width, height) {} |
| 270 | |
| 271 | WXSHAPE_DEC_CALLBACKS(); |
| 272 | }; |
| 273 | |
| 274 | |
| 275 | |
| 276 | //--------------------------------------------------------------------------- |
| 277 | //--------------------------------------------------------------------------- |
| 278 | #endif |
| 279 | |
| 280 | |