]>
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
); 
 107 //--------------------------------------------------------------------------- 
 108 // Classes that derive from the shapes and such, but which know how to turn 
 109 // virtual callbacks into Python callbacks. 
 111 class wxPyShapeCanvas 
: public wxShapeCanvas 
{ 
 112     DECLARE_DYNAMIC_CLASS(wxPyShapeCanvas
); 
 114     wxPyShapeCanvas(wxWindow
* parent 
= NULL
, wxWindowID id 
= -1, 
 115                     const wxPoint
& pos 
= wxDefaultPosition
, 
 116                     const wxSize
& size 
= wxDefaultSize
, 
 117                     long style 
= wxBORDER
) 
 118         : wxShapeCanvas(parent
, id
, pos
, size
, style
) {} 
 120     DEC_PYCALLBACK__2DBLINT(OnBeginDragLeft
); 
 121     DEC_PYCALLBACK__2DBLINT(OnBeginDragRight
); 
 122     DEC_PYCALLBACK__2DBLINT(OnEndDragLeft
); 
 123     DEC_PYCALLBACK__2DBLINT(OnEndDragRight
); 
 124     DEC_PYCALLBACK__BOOL2DBLINT(OnDragLeft
); 
 125     DEC_PYCALLBACK__BOOL2DBLINT(OnDragRight
); 
 126     DEC_PYCALLBACK__2DBLINT(OnLeftClick
); 
 127     DEC_PYCALLBACK__2DBLINT(OnRightClick
); 
 134 class wxPyShapeEvtHandler 
: public wxShapeEvtHandler 
{ 
 135     DECLARE_DYNAMIC_CLASS(wxPyShapeEvtHandler
); 
 137     wxPyShapeEvtHandler(wxShapeEvtHandler 
*prev 
= NULL
, wxShape 
*shape 
= NULL
) 
 138         : wxShapeEvtHandler(prev
, shape
) {} 
 140     WXSHAPE_DEC_CALLBACKS(); 
 144 class wxPyShape 
: public wxShape 
{ 
 145     DECLARE_ABSTRACT_CLASS(wxPyShape
); 
 147     wxPyShape(wxPyShapeCanvas 
*can 
= NULL
) 
 150     WXSHAPE_DEC_CALLBACKS(); 
 155 class wxPyRectangleShape 
: public wxRectangleShape 
{ 
 156     DECLARE_DYNAMIC_CLASS(wxPyRectangleShape
); 
 158     wxPyRectangleShape(double width 
= 0.0, double height 
= 0.0) 
 159         : wxRectangleShape(width
, height
) {} 
 161     WXSHAPE_DEC_CALLBACKS(); 
 164 class wxPyControlPoint 
: public wxControlPoint 
{ 
 165     DECLARE_DYNAMIC_CLASS(wxPyControlPoint
); 
 167     wxPyControlPoint(wxPyShapeCanvas 
*the_canvas 
= NULL
, 
 168                      wxPyShape 
*object 
= NULL
, 
 169                      double size 
= 0.0, double the_xoffset 
= 0.0, 
 170                      double the_yoffset 
= 0.0, int the_type 
= 0) 
 171         : wxControlPoint(the_canvas
, object
, size
, 
 172                          the_xoffset
, the_yoffset
, the_type
) {} 
 174     WXSHAPE_DEC_CALLBACKS(); 
 179 class wxPyBitmapShape 
: public wxBitmapShape 
{ 
 180     DECLARE_DYNAMIC_CLASS(wxPyBitmapShape
); 
 182     wxPyBitmapShape() : wxBitmapShape() {} 
 184     WXSHAPE_DEC_CALLBACKS(); 
 189 class wxPyDrawnShape 
: public wxDrawnShape 
{ 
 190     DECLARE_DYNAMIC_CLASS(wxPyDrawnShape
); 
 192     wxPyDrawnShape() : wxDrawnShape() {} 
 194     WXSHAPE_DEC_CALLBACKS(); 
 198 class wxPyCompositeShape 
: public wxCompositeShape 
{ 
 199     DECLARE_DYNAMIC_CLASS(wxPyCompositeShape
); 
 201     wxPyCompositeShape() : wxCompositeShape() {} 
 203     WXSHAPE_DEC_CALLBACKS(); 
 207 class wxPyDividedShape 
: public wxDividedShape 
{ 
 208     DECLARE_DYNAMIC_CLASS(wxPyDividedShape
); 
 210     wxPyDividedShape(double width 
= 0.0, double height 
= 0.0) 
 211         : wxDividedShape(width
, height
) {} 
 213     WXSHAPE_DEC_CALLBACKS(); 
 217 class wxPyDivisionShape 
: public wxDivisionShape 
{ 
 218     DECLARE_DYNAMIC_CLASS(wxPyDivisionShape
); 
 220     wxPyDivisionShape() : wxDivisionShape() {} 
 222     WXSHAPE_DEC_CALLBACKS(); 
 226 class wxPyEllipseShape 
: public wxEllipseShape 
{ 
 227     DECLARE_DYNAMIC_CLASS(wxPyEllipseShape
); 
 229     wxPyEllipseShape(double width 
= 0.0, double height 
= 0.0) 
 230         : wxEllipseShape(width
, height
) {} 
 232     WXSHAPE_DEC_CALLBACKS(); 
 236 class wxPyCircleShape 
: public wxCircleShape 
{ 
 237     DECLARE_DYNAMIC_CLASS(wxPyCircleShape
); 
 239     wxPyCircleShape(double width 
= 0.0) 
 240         : wxCircleShape(width
) {} 
 242     WXSHAPE_DEC_CALLBACKS(); 
 246 class wxPyLineShape 
: public wxLineShape 
{ 
 247     DECLARE_DYNAMIC_CLASS(wxPyLineShape
); 
 249     wxPyLineShape() : wxLineShape() {} 
 251     WXSHAPE_DEC_CALLBACKS(); 
 255 class wxPyPolygonShape 
: public wxPolygonShape 
{ 
 256     DECLARE_DYNAMIC_CLASS(wxPyPolygonShape
); 
 258     wxPyPolygonShape() : wxPolygonShape() {} 
 260     WXSHAPE_DEC_CALLBACKS(); 
 264 class wxPyTextShape 
: public wxTextShape 
{ 
 265     DECLARE_DYNAMIC_CLASS(wxPyTextShape
); 
 267     wxPyTextShape(double width 
= 0.0, double height 
= 0.0) 
 268         : wxTextShape(width
, height
) {} 
 270     WXSHAPE_DEC_CALLBACKS(); 
 275 //--------------------------------------------------------------------------- 
 276 //---------------------------------------------------------------------------