1
/////////////////////////////////////////////////////////////////////////////
3
// Purpose: Some Helper functions to help in data conversions in OGL
7
// Created: 9-Sept-1999
8
// RCS-ID: $Id: oglhelpers.h,v 1.12 2004/05/07 19:52:02 RD Exp $
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); \
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)
92
// This one may be difficult...
93
//PYCALLBACK__??????? (PARENT, OnChangeAttachment);
97
//---------------------------------------------------------------------------
98
// These are prototypes of some helper functions found in ogl.i
100
wxList* wxPy_wxListHelper(PyObject* pyList, const wxChar* className);
101
wxList* wxPy_wxRealPoint_ListHelper(PyObject* pyList);
102
PyObject* wxPyMake_wxShapeEvtHandler(wxShapeEvtHandler* source);
103
PyObject* wxPy_ConvertShapeList(wxListBase* list);
104
PyObject* wxPy_ConvertRealPointList(wxListBase* list);
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
const wxString& name = wxT("shapeCanvas"))
119
: wxShapeCanvas(parent, id, pos, size, style, name) {}
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
virtual void GetBoundingBoxMin(double *width, double *height)
153
if (width) *width = 0.0;
154
if (height) *height = 0.0;
157
WXSHAPE_DEC_CALLBACKS();
162
class wxPyRectangleShape : public wxRectangleShape {
163
DECLARE_DYNAMIC_CLASS(wxPyRectangleShape);
165
wxPyRectangleShape(double width = 0.0, double height = 0.0)
166
: wxRectangleShape(width, height) {}
168
WXSHAPE_DEC_CALLBACKS();
171
class wxPyControlPoint : public wxControlPoint {
172
DECLARE_DYNAMIC_CLASS(wxPyControlPoint);
174
wxPyControlPoint(wxPyShapeCanvas *the_canvas = NULL,
175
wxPyShape *object = NULL,
176
double size = 0.0, double the_xoffset = 0.0,
177
double the_yoffset = 0.0, int the_type = 0)
178
: wxControlPoint(the_canvas, object, size,
179
the_xoffset, the_yoffset, the_type) {}
181
WXSHAPE_DEC_CALLBACKS();
186
class wxPyBitmapShape : public wxBitmapShape {
187
DECLARE_DYNAMIC_CLASS(wxPyBitmapShape);
189
wxPyBitmapShape() : wxBitmapShape() {}
191
WXSHAPE_DEC_CALLBACKS();
196
class wxPyDrawnShape : public wxDrawnShape {
197
DECLARE_DYNAMIC_CLASS(wxPyDrawnShape);
199
wxPyDrawnShape() : wxDrawnShape() {}
201
WXSHAPE_DEC_CALLBACKS();
205
class wxPyCompositeShape : public wxCompositeShape {
206
DECLARE_DYNAMIC_CLASS(wxPyCompositeShape);
208
wxPyCompositeShape() : wxCompositeShape() {}
210
WXSHAPE_DEC_CALLBACKS();
214
class wxPyDividedShape : public wxDividedShape {
215
DECLARE_DYNAMIC_CLASS(wxPyDividedShape);
217
wxPyDividedShape(double width = 0.0, double height = 0.0)
218
: wxDividedShape(width, height) {}
220
WXSHAPE_DEC_CALLBACKS();
224
class wxPyDivisionShape : public wxDivisionShape {
225
DECLARE_DYNAMIC_CLASS(wxPyDivisionShape);
227
wxPyDivisionShape() : wxDivisionShape() {}
229
WXSHAPE_DEC_CALLBACKS();
233
class wxPyEllipseShape : public wxEllipseShape {
234
DECLARE_DYNAMIC_CLASS(wxPyEllipseShape);
236
wxPyEllipseShape(double width = 0.0, double height = 0.0)
237
: wxEllipseShape(width, height) {}
239
WXSHAPE_DEC_CALLBACKS();
243
class wxPyCircleShape : public wxCircleShape {
244
DECLARE_DYNAMIC_CLASS(wxPyCircleShape);
246
wxPyCircleShape(double width = 0.0)
247
: wxCircleShape(width) {}
249
WXSHAPE_DEC_CALLBACKS();
253
class wxPyLineShape : public wxLineShape {
254
DECLARE_DYNAMIC_CLASS(wxPyLineShape);
256
wxPyLineShape() : wxLineShape() {}
258
WXSHAPE_DEC_CALLBACKS();
262
class wxPyPolygonShape : public wxPolygonShape {
263
DECLARE_DYNAMIC_CLASS(wxPyPolygonShape);
265
wxPyPolygonShape() : wxPolygonShape() {}
267
WXSHAPE_DEC_CALLBACKS();
271
class wxPyTextShape : public wxTextShape {
272
DECLARE_DYNAMIC_CLASS(wxPyTextShape);
274
wxPyTextShape(double width = 0.0, double height = 0.0)
275
: wxTextShape(width, height) {}
277
WXSHAPE_DEC_CALLBACKS();
282
//---------------------------------------------------------------------------
283
//---------------------------------------------------------------------------