]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/contrib/ogl/oglhelpers.h
   1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     Some Helper functions to help in data conversions in OGL 
   7 // Created:     9-Sept-1999 
   9 // Copyright:   (c) 1998 by Total Control Software 
  10 // Licence:     wxWindows license 
  11 ///////////////////////////////////////////////////////////////////////////// 
  13 #ifndef __wxp_ogl_helpers__ 
  14 #define __wxp_ogl_helpers__ 
  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> 
  24 //--------------------------------------------------------------------------- 
  25 // Define a macro that will be used in the class definintions below 
  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);            \ 
  61 #define WXSHAPE_IMP_CALLBACKS(CLASS, PARENT)       \ 
  62     IMP_PYCALLBACK__                (CLASS, PARENT,  OnDelete);             \ 
  63     IMP_PYCALLBACK__DC              (CLASS, PARENT,  OnDraw);               \ 
  64     IMP_PYCALLBACK__DC              (CLASS, PARENT,  OnDrawContents);       \ 
  65     IMP_PYCALLBACK__DCBOOL          (CLASS, PARENT,  OnDrawBranches);       \ 
  66     IMP_PYCALLBACK__DC              (CLASS, PARENT,  OnMoveLinks);          \ 
  67     IMP_PYCALLBACK__DC              (CLASS, PARENT,  OnErase);              \ 
  68     IMP_PYCALLBACK__DC              (CLASS, PARENT,  OnEraseContents);      \ 
  69     IMP_PYCALLBACK__DC              (CLASS, PARENT,  OnHighlight);          \ 
  70     IMP_PYCALLBACK__2DBL2INT        (CLASS, PARENT,  OnLeftClick);          \ 
  71     IMP_PYCALLBACK__2DBL2INT        (CLASS, PARENT,  OnLeftDoubleClick);    \ 
  72     IMP_PYCALLBACK__2DBL2INT        (CLASS, PARENT,  OnRightClick);         \ 
  73     IMP_PYCALLBACK__2DBL            (CLASS, PARENT,  OnSize);               \ 
  74     IMP_PYCALLBACK_BOOL_DC4DBLBOOL  (CLASS, PARENT,  OnMovePre);            \ 
  75     IMP_PYCALLBACK__DC4DBLBOOL      (CLASS, PARENT,  OnMovePost);           \ 
  76     IMP_PYCALLBACK__BOOL2DBL2INT    (CLASS, PARENT,  OnDragLeft);           \ 
  77     IMP_PYCALLBACK__2DBL2INT        (CLASS, PARENT,  OnBeginDragLeft);      \ 
  78     IMP_PYCALLBACK__2DBL2INT        (CLASS, PARENT,  OnEndDragLeft);        \ 
  79     IMP_PYCALLBACK__BOOL2DBL2INT    (CLASS, PARENT,  OnDragRight);          \ 
  80     IMP_PYCALLBACK__2DBL2INT        (CLASS, PARENT,  OnBeginDragRight);     \ 
  81     IMP_PYCALLBACK__2DBL2INT        (CLASS, PARENT,  OnEndDragRight);       \ 
  82     IMP_PYCALLBACK__DC4DBL          (CLASS, PARENT,  OnDrawOutline);        \ 
  83     IMP_PYCALLBACK__DC              (CLASS, PARENT,  OnDrawControlPoints);  \ 
  84     IMP_PYCALLBACK__DC              (CLASS, PARENT,  OnEraseControlPoints); \ 
  85     IMP_PYCALLBACK__DCBOOL          (CLASS, PARENT,  OnMoveLink);           \ 
  86     IMP_PYCALLBACK__WXCPBOOL2DBL2INT(CLASS, PARENT,  OnSizingDragLeft);     \ 
  87     IMP_PYCALLBACK__WXCP2DBL2INT    (CLASS, PARENT,  OnSizingBeginDragLeft);\ 
  88     IMP_PYCALLBACK__WXCP2DBL2INT    (CLASS, PARENT,  OnSizingEndDragLeft);  \ 
  89     IMP_PYCALLBACK__2DBL            (CLASS, PARENT,  OnBeginSize);          \ 
  90     IMP_PYCALLBACK__2DBL            (CLASS, PARENT,  OnEndSize);            \ 
  93     //  This one may be difficult... 
  94     //PYCALLBACK__???????       (PARENT,  OnChangeAttachment); 
  98 //--------------------------------------------------------------------------- 
  99 // These are prototypes of some helper functions found in ogl.i 
 101 wxList
* wxPy_wxListHelper(PyObject
* pyList
, char* className
); 
 102 wxList
* wxPy_wxRealPoint_ListHelper(PyObject
* pyList
); 
 103 PyObject
* wxPyMake_wxShapeEvtHandler(wxShapeEvtHandler
* source
); 
 104 PyObject
* wxPy_ConvertShapeList(wxListBase
* list
, const char* className
); 
 108 //--------------------------------------------------------------------------- 
 109 // Classes that derive from the shapes and such, but which know how to turn 
 110 // virtual callbacks into Python callbacks. 
 112 class wxPyShapeCanvas 
: public wxShapeCanvas 
{ 
 113     DECLARE_DYNAMIC_CLASS(wxPyShapeCanvas
); 
 115     wxPyShapeCanvas(wxWindow
* parent 
= NULL
, wxWindowID id 
= -1, 
 116                     const wxPoint
& pos 
= wxDefaultPosition
, 
 117                     const wxSize
& size 
= wxDefaultSize
, 
 118                     long style 
= wxBORDER
) 
 119         : wxShapeCanvas(parent
, id
, pos
, size
, style
) {} 
 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
); 
 135 class wxPyShapeEvtHandler 
: public wxShapeEvtHandler 
{ 
 136     DECLARE_DYNAMIC_CLASS(wxPyShapeEvtHandler
); 
 138     wxPyShapeEvtHandler(wxShapeEvtHandler 
*prev 
= NULL
, wxShape 
*shape 
= NULL
) 
 139         : wxShapeEvtHandler(prev
, shape
) {} 
 141     WXSHAPE_DEC_CALLBACKS(); 
 145 class wxPyShape 
: public wxShape 
{ 
 146     DECLARE_ABSTRACT_CLASS(wxPyShape
); 
 148     wxPyShape(wxPyShapeCanvas 
*can 
= NULL
) 
 151     WXSHAPE_DEC_CALLBACKS(); 
 156 class wxPyRectangleShape 
: public wxRectangleShape 
{ 
 157     DECLARE_DYNAMIC_CLASS(wxPyRectangleShape
); 
 159     wxPyRectangleShape(double width 
= 0.0, double height 
= 0.0) 
 160         : wxRectangleShape(width
, height
) {} 
 162     WXSHAPE_DEC_CALLBACKS(); 
 165 class wxPyControlPoint 
: public wxControlPoint 
{ 
 166     DECLARE_DYNAMIC_CLASS(wxPyControlPoint
); 
 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
) {} 
 175     WXSHAPE_DEC_CALLBACKS(); 
 180 class wxPyBitmapShape 
: public wxBitmapShape 
{ 
 181     DECLARE_DYNAMIC_CLASS(wxPyBitmapShape
); 
 183     wxPyBitmapShape() : wxBitmapShape() {} 
 185     WXSHAPE_DEC_CALLBACKS(); 
 190 class wxPyDrawnShape 
: public wxDrawnShape 
{ 
 191     DECLARE_DYNAMIC_CLASS(wxPyDrawnShape
); 
 193     wxPyDrawnShape() : wxDrawnShape() {} 
 195     WXSHAPE_DEC_CALLBACKS(); 
 199 class wxPyCompositeShape 
: public wxCompositeShape 
{ 
 200     DECLARE_DYNAMIC_CLASS(wxPyCompositeShape
); 
 202     wxPyCompositeShape() : wxCompositeShape() {} 
 204     WXSHAPE_DEC_CALLBACKS(); 
 208 class wxPyDividedShape 
: public wxDividedShape 
{ 
 209     DECLARE_DYNAMIC_CLASS(wxPyDividedShape
); 
 211     wxPyDividedShape(double width 
= 0.0, double height 
= 0.0) 
 212         : wxDividedShape(width
, height
) {} 
 214     WXSHAPE_DEC_CALLBACKS(); 
 218 class wxPyDivisionShape 
: public wxDivisionShape 
{ 
 219     DECLARE_DYNAMIC_CLASS(wxPyDivisionShape
); 
 221     wxPyDivisionShape() : wxDivisionShape() {} 
 223     WXSHAPE_DEC_CALLBACKS(); 
 227 class wxPyEllipseShape 
: public wxEllipseShape 
{ 
 228     DECLARE_DYNAMIC_CLASS(wxPyEllipseShape
); 
 230     wxPyEllipseShape(double width 
= 0.0, double height 
= 0.0) 
 231         : wxEllipseShape(width
, height
) {} 
 233     WXSHAPE_DEC_CALLBACKS(); 
 237 class wxPyCircleShape 
: public wxCircleShape 
{ 
 238     DECLARE_DYNAMIC_CLASS(wxPyCircleShape
); 
 240     wxPyCircleShape(double width 
= 0.0) 
 241         : wxCircleShape(width
) {} 
 243     WXSHAPE_DEC_CALLBACKS(); 
 247 class wxPyLineShape 
: public wxLineShape 
{ 
 248     DECLARE_DYNAMIC_CLASS(wxPyLineShape
); 
 250     wxPyLineShape() : wxLineShape() {} 
 252     WXSHAPE_DEC_CALLBACKS(); 
 256 class wxPyPolygonShape 
: public wxPolygonShape 
{ 
 257     DECLARE_DYNAMIC_CLASS(wxPyPolygonShape
); 
 259     wxPyPolygonShape() : wxPolygonShape() {} 
 261     WXSHAPE_DEC_CALLBACKS(); 
 265 class wxPyTextShape 
: public wxTextShape 
{ 
 266     DECLARE_DYNAMIC_CLASS(wxPyTextShape
); 
 268     wxPyTextShape(double width 
= 0.0, double height 
= 0.0) 
 269         : wxTextShape(width
, height
) {} 
 271     WXSHAPE_DEC_CALLBACKS(); 
 276 //--------------------------------------------------------------------------- 
 277 //---------------------------------------------------------------------------