1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxPlotWindow
4 // Author: Robert Roebling
7 // Copyright: (c) Robert Roebling
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
17 #include "wx/scrolwin.h"
19 #include "wx/dynarray.h"
21 #ifdef WXMAKINGDLL_PLOT
22 #define WXDLLIMPEXP_PLOT WXEXPORT
23 #define WXDLLIMPEXP_DATA_PLOT(type) WXEXPORT type
24 #elif defined(WXUSINGDLL)
25 #define WXDLLIMPEXP_PLOT WXIMPORT
26 #define WXDLLIMPEXP_DATA_PLOT(type) WXIMPORT type
27 #else // not making nor using DLL
28 #define WXDLLIMPEXP_PLOT
29 #define WXDLLIMPEXP_DATA_PLOT(type) type
32 //-----------------------------------------------------------------------------
34 //-----------------------------------------------------------------------------
36 class WXDLLIMPEXP_PLOT wxPlotEvent
;
37 class WXDLLIMPEXP_PLOT wxPlotCurve
;
38 class WXDLLIMPEXP_PLOT wxPlotValues
;
39 class WXDLLIMPEXP_PLOT wxPlotArea
;
40 class WXDLLIMPEXP_PLOT wxPlotXAxisArea
;
41 class WXDLLIMPEXP_PLOT wxPlotYAxisArea
;
42 class WXDLLIMPEXP_PLOT wxPlotWindow
;
43 class WXDLLIMPEXP_CORE wxStaticText
;
45 //-----------------------------------------------------------------------------
47 //-----------------------------------------------------------------------------
49 BEGIN_DECLARE_EVENT_TYPES()
50 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PLOT
, wxEVT_PLOT_SEL_CHANGING
, 941)
51 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PLOT
, wxEVT_PLOT_SEL_CHANGED
, 921)
52 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PLOT
, wxEVT_PLOT_CLICKED
, 922)
53 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PLOT
, wxEVT_PLOT_DOUBLECLICKED
, 923)
54 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PLOT
, wxEVT_PLOT_ZOOM_IN
, 924)
55 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PLOT
, wxEVT_PLOT_ZOOM_OUT
, 925)
56 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PLOT
, wxEVT_PLOT_VALUE_SEL_CREATING
, 926)
57 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PLOT
, wxEVT_PLOT_VALUE_SEL_CREATED
, 927)
58 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PLOT
, wxEVT_PLOT_VALUE_SEL_CHANGING
, 928)
59 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PLOT
, wxEVT_PLOT_VALUE_SEL_CHANGED
, 929)
60 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PLOT
, wxEVT_PLOT_AREA_SEL_CREATING
, 930)
61 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PLOT
, wxEVT_PLOT_AREA_SEL_CREATED
, 931)
62 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PLOT
, wxEVT_PLOT_AREA_SEL_CHANGING
, 932)
63 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PLOT
, wxEVT_PLOT_AREA_SEL_CHANGED
, 933)
64 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PLOT
, wxEVT_PLOT_BEGIN_X_LABEL_EDIT
, 934)
65 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PLOT
, wxEVT_PLOT_END_X_LABEL_EDIT
, 935)
66 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PLOT
, wxEVT_PLOT_BEGIN_Y_LABEL_EDIT
, 936)
67 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PLOT
, wxEVT_PLOT_END_Y_LABEL_EDIT
, 937)
68 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PLOT
, wxEVT_PLOT_BEGIN_TITLE_EDIT
, 938)
69 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PLOT
, wxEVT_PLOT_END_TITLE_EDIT
, 939)
70 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PLOT
, wxEVT_PLOT_AREA_CREATE
, 940)
71 END_DECLARE_EVENT_TYPES()
73 #define wxPLOT_X_AXIS 0x0004
74 #define wxPLOT_Y_AXIS 0x0008
75 #define wxPLOT_BUTTON_MOVE 0x0010
76 #define wxPLOT_BUTTON_ZOOM 0x0020
77 #define wxPLOT_BUTTON_ENLARGE 0x0040
79 #define wxPLOT_BUTTON_ALL (wxPLOT_BUTTON_MOVE|wxPLOT_BUTTON_ZOOM|wxPLOT_BUTTON_ENLARGE)
80 #define wxPLOT_DEFAULT (wxPLOT_X_AXIS|wxPLOT_Y_AXIS | wxPLOT_BUTTON_ALL)
82 //-----------------------------------------------------------------------------
84 //-----------------------------------------------------------------------------
86 class WXDLLIMPEXP_PLOT wxPlotEvent
: public wxNotifyEvent
89 wxPlotEvent( wxEventType commandType
= wxEVT_NULL
, int id
= 0 );
91 wxPlotCurve
*GetCurve()
93 void SetCurve( wxPlotCurve
*curve
)
98 void SetZoom( double zoom
)
101 wxInt32
GetPosition()
102 { return m_position
; }
103 void SetPosition( wxInt32 pos
)
104 { m_position
= pos
; }
107 wxPlotCurve
*m_curve
;
112 //-----------------------------------------------------------------------------
114 //-----------------------------------------------------------------------------
116 class WXDLLIMPEXP_PLOT wxPlotCurve
: public wxObject
119 wxPlotCurve( int offsetY
, double startY
, double endY
);
121 virtual wxInt32
GetStartX() = 0;
122 virtual wxInt32
GetEndX() = 0;
124 virtual double GetY( wxInt32 x
) = 0;
126 void SetStartY( double startY
)
127 { m_startY
= startY
; }
128 double GetStartY() const
130 void SetEndY( double endY
)
132 double GetEndY() const
134 void SetOffsetY( int offsetY
)
135 { m_offsetY
= offsetY
; }
136 int GetOffsetY() const
137 { return m_offsetY
; }
139 void SetPenNormal( const wxPen
&pen
)
140 { m_penNormal
= pen
; }
141 void SetPenSelected( const wxPen
&pen
)
142 { m_penSelected
= pen
; }
144 const wxPen
& GetPenNormal() const
145 { return m_penNormal
; }
146 const wxPen
& GetPenSelected() const
147 { return m_penSelected
; }
156 DECLARE_ABSTRACT_CLASS(wxPlotCurve
)
159 //-----------------------------------------------------------------------------
161 //-----------------------------------------------------------------------------
163 class WXDLLIMPEXP_PLOT wxPlotOnOff
173 WX_DECLARE_OBJARRAY_WITH_DECL(wxPlotOnOff
, wxArrayPlotOnOff
,
174 class WXDLLIMPEXP_PLOT
);
176 class WXDLLIMPEXP_PLOT wxPlotOnOffCurve
: public wxObject
179 wxPlotOnOffCurve( int offsetY
);
186 void SetOffsetY( int offsetY
)
187 { m_offsetY
= offsetY
; }
189 { return m_offsetY
; }
191 void Add( wxInt32 on
, wxInt32 off
, void *clientData
= NULL
);
194 wxInt32
GetOn( size_t index
);
195 wxInt32
GetOff( size_t index
);
196 void* GetClientData( size_t index
);
197 wxPlotOnOff
*GetAt( size_t index
);
199 virtual void DrawOnLine( wxDC
&dc
, wxCoord y
, wxCoord start
, wxCoord end
, void *clientData
);
200 virtual void DrawOffLine( wxDC
&dc
, wxCoord y
, wxCoord start
, wxCoord end
);
207 wxArrayPlotOnOff m_marks
;
209 DECLARE_CLASS(wxPlotOnOffCurve
)
212 //-----------------------------------------------------------------------------
214 //-----------------------------------------------------------------------------
216 class WXDLLIMPEXP_PLOT wxPlotArea
: public wxWindow
220 wxPlotArea( wxPlotWindow
*parent
);
222 void OnPaint( wxPaintEvent
&event
);
223 void OnMouse( wxMouseEvent
&event
);
225 void DrawCurve( wxDC
*dc
, wxPlotCurve
*curve
, int from
= -1, int to
= -1 );
226 void DrawOnOffCurve( wxDC
*dc
, wxPlotOnOffCurve
*curve
, int from
= -1, int to
= -1 );
227 void DeleteCurve( wxPlotCurve
*curve
, int from
= -1, int to
= -1 );
229 virtual void ScrollWindow( int dx
, int dy
, const wxRect
*rect
);
232 wxPlotWindow
*m_owner
;
235 DECLARE_CLASS(wxPlotArea
)
236 DECLARE_EVENT_TABLE()
239 //-----------------------------------------------------------------------------
241 //-----------------------------------------------------------------------------
243 class WXDLLIMPEXP_PLOT wxPlotXAxisArea
: public wxWindow
247 wxPlotXAxisArea( wxPlotWindow
*parent
);
249 void OnPaint( wxPaintEvent
&event
);
250 void OnMouse( wxMouseEvent
&event
);
253 wxPlotWindow
*m_owner
;
255 DECLARE_CLASS(wxPlotXAxisArea
)
256 DECLARE_EVENT_TABLE()
259 //-----------------------------------------------------------------------------
261 //-----------------------------------------------------------------------------
263 class WXDLLIMPEXP_PLOT wxPlotYAxisArea
: public wxWindow
267 wxPlotYAxisArea( wxPlotWindow
*parent
);
269 void OnPaint( wxPaintEvent
&event
);
270 void OnMouse( wxMouseEvent
&event
);
273 wxPlotWindow
*m_owner
;
275 DECLARE_CLASS(wxPlotYAxisArea
)
276 DECLARE_EVENT_TABLE()
279 //-----------------------------------------------------------------------------
281 //-----------------------------------------------------------------------------
283 class WXDLLIMPEXP_PLOT wxPlotWindow
: public wxScrolledWindow
287 wxPlotWindow( wxWindow
*parent
, wxWindowID id
, const wxPoint
&pos
, const wxSize
&size
, int flags
= wxPLOT_DEFAULT
);
293 void Add( wxPlotCurve
*curve
);
294 void Delete( wxPlotCurve
* curve
);
297 wxPlotCurve
*GetAt( size_t n
);
299 void SetCurrentCurve( wxPlotCurve
* current
);
300 wxPlotCurve
*GetCurrentCurve();
302 // mark list accessors
303 // -------------------
305 void Add( wxPlotOnOffCurve
*curve
);
306 void Delete( wxPlotOnOffCurve
* curve
);
308 size_t GetOnOffCurveCount();
309 wxPlotOnOffCurve
*GetOnOffCurveAt( size_t n
);
311 // vertical representation
312 // -----------------------
314 void Move( wxPlotCurve
* curve
, int pixels_up
);
315 void Enlarge( wxPlotCurve
*curve
, double factor
);
317 // horizontal representation
318 // -------------------------
320 void SetUnitsPerValue( double upv
);
321 double GetUnitsPerValue()
322 { return m_xUnitsPerValue
; }
324 void SetZoom( double zoom
);
331 void SetScrollOnThumbRelease( bool scrollOnThumbRelease
= true )
332 { m_scrollOnThumbRelease
= scrollOnThumbRelease
; }
333 bool GetScrollOnThumbRelease()
334 { return m_scrollOnThumbRelease
; }
336 void SetEnlargeAroundWindowCentre( bool enlargeAroundWindowCentre
= true )
337 { m_enlargeAroundWindowCentre
= enlargeAroundWindowCentre
; }
338 bool GetEnlargeAroundWindowCentre()
339 { return m_enlargeAroundWindowCentre
; }
341 // events (may be overridden)
342 // --------------------------
344 void OnMoveUp( wxCommandEvent
& event
);
345 void OnMoveDown( wxCommandEvent
& event
);
347 void OnEnlarge( wxCommandEvent
& event
);
348 void OnShrink( wxCommandEvent
& event
);
349 void OnZoomIn( wxCommandEvent
& event
);
350 void OnZoomOut( wxCommandEvent
& event
);
352 void OnScroll2( wxScrollWinEvent
& event
);
357 void RedrawEverything();
361 void ResetScrollbar();
363 void AddChartTitle( const wxString
&, wxFont
= *wxNORMAL_FONT
, wxColour
= *wxBLACK
);
366 friend class wxPlotArea
;
367 friend class wxPlotXAxisArea
;
368 friend class wxPlotYAxisArea
;
370 double m_xUnitsPerValue
;
374 wxList m_onOffCurves
;
377 wxPlotXAxisArea
*m_xaxis
;
378 wxPlotYAxisArea
*m_yaxis
;
379 wxPlotCurve
*m_current
;
381 bool m_scrollOnThumbRelease
;
382 bool m_enlargeAroundWindowCentre
;
386 wxColour m_titleColour
;
387 wxStaticText
* m_titleStaticText
;
388 wxBoxSizer
* m_plotAndTitleSizer
;
390 void DrawChartTitle();
392 DECLARE_CLASS(wxPlotWindow
)
393 DECLARE_EVENT_TABLE()
396 // ----------------------------------------------------------------------------
398 // ----------------------------------------------------------------------------
400 typedef void (wxEvtHandler::*wxPlotEventFunction
)(wxPlotEvent
&);
402 #if WXWIN_COMPATIBILITY_EVENT_TYPES
404 #define EVT_PLOT(id, fn) { wxEVT_PLOT_DOUBLECLICKED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
405 #define EVT_PLOT_SEL_CHANGING(id, fn) { wxEVT_PLOT_SEL_CHANGING, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
406 #define EVT_PLOT_SEL_CHANGED(id, fn) { wxEVT_PLOT_SEL_CHANGED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
407 #define EVT_PLOT_CLICKED(id, fn) { wxEVT_PLOT_CLICKED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
408 #define EVT_PLOT_DOUBLECLICKED(id, fn) { wxEVT_PLOT_DOUBLECLICKED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
409 #define EVT_PLOT_ZOOM_IN(id, fn) { wxEVT_PLOT_ZOOM_IN, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
410 #define EVT_PLOT_ZOOM_OUT(id, fn) { wxEVT_PLOT_ZOOM_OUT, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
411 #define EVT_PLOT_VALUE_SEL_CREATING(id, fn) { wxEVT_PLOT_VALUE_SEL_CREATING, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
412 #define EVT_PLOT_VALUE_SEL_CREATED(id, fn) { wxEVT_PLOT_VALUE_SEL_CREATED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
413 #define EVT_PLOT_VALUE_SEL_CHANGING(id, fn) { wxEVT_PLOT_VALUE_SEL_CHANGING, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
414 #define EVT_PLOT_VALUE_SEL_CHANGED(id, fn) { wxEVT_PLOT_VALUE_SEL_CHANGED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
415 #define EVT_PLOT_AREA_SEL_CREATING(id, fn) { wxEVT_PLOT_AREA_SEL_CREATING, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
416 #define EVT_PLOT_AREA_SEL_CREATED(id, fn) { wxEVT_PLOT_AREA_SEL_CREATED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
417 #define EVT_PLOT_AREA_SEL_CHANGING(id, fn) { wxEVT_PLOT_AREA_SEL_CHANGING, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
418 #define EVT_PLOT_AREA_SEL_CHANGED(id, fn) { wxEVT_PLOT_AREA_SEL_CHANGED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
419 #define EVT_PLOT_BEGIN_X_LABEL_EDIT(id, fn) { wxEVT_PLOT_BEGIN_X_LABEL_EDIT, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
420 #define EVT_PLOT_END_X_LABEL_EDIT(id, fn) { wxEVT_PLOT_END_X_LABEL_EDIT, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
421 #define EVT_PLOT_BEGIN_Y_LABEL_EDIT(id, fn) { wxEVT_PLOT_BEGIN_Y_LABEL_EDIT, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
422 #define EVT_PLOT_END_Y_LABEL_EDIT(id, fn) { wxEVT_PLOT_END_Y_LABEL_EDIT, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
423 #define EVT_PLOT_BEGIN_TITLE_EDIT(id, fn) { wxEVT_PLOT_BEGIN_TITLE_EDIT, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
424 #define EVT_PLOT_END_TITLE_EDIT(id, fn) { wxEVT_PLOT_END_TITLE_EDIT, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
428 #define EVT_PLOT(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_DOUBLECLICKED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) wxStaticCastEvent( wxPlotEventFunction, & fn ), (wxObject *) NULL ),
429 #define EVT_PLOT_SEL_CHANGING(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_SEL_CHANGING, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) wxStaticCastEvent( wxPlotEventFunction, & fn ), (wxObject *) NULL ),
430 #define EVT_PLOT_SEL_CHANGED(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_SEL_CHANGED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) wxStaticCastEvent( wxPlotEventFunction, & fn ), (wxObject *) NULL ),
431 #define EVT_PLOT_CLICKED(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_CLICKED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) wxStaticCastEvent( wxPlotEventFunction, & fn ), (wxObject *) NULL ),
432 #define EVT_PLOT_DOUBLECLICKED(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_DOUBLECLICKED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) wxStaticCastEvent( wxPlotEventFunction, & fn ), (wxObject *) NULL ),
433 #define EVT_PLOT_ZOOM_IN(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_ZOOM_IN, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) wxStaticCastEvent( wxPlotEventFunction, & fn ), (wxObject *) NULL ),
434 #define EVT_PLOT_ZOOM_OUT(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_ZOOM_OUT, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) wxStaticCastEvent( wxPlotEventFunction, & fn ), (wxObject *) NULL ),
435 #define EVT_PLOT_VALUE_SEL_CREATING(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_VALUE_SEL_CREATING, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) wxStaticCastEvent( wxPlotEventFunction, & fn ), (wxObject *) NULL ),
436 #define EVT_PLOT_VALUE_SEL_CREATED(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_VALUE_SEL_CREATED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) wxStaticCastEvent( wxPlotEventFunction, & fn ), (wxObject *) NULL ),
437 #define EVT_PLOT_VALUE_SEL_CHANGING(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_VALUE_SEL_CHANGING, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) wxStaticCastEvent( wxPlotEventFunction, & fn ), (wxObject *) NULL ),
438 #define EVT_PLOT_VALUE_SEL_CHANGED(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_VALUE_SEL_CHANGED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) wxStaticCastEvent( wxPlotEventFunction, & fn ), (wxObject *) NULL ),
439 #define EVT_PLOT_AREA_SEL_CREATING(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_AREA_SEL_CREATING, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) wxStaticCastEvent( wxPlotEventFunction, & fn ), (wxObject *) NULL ),
440 #define EVT_PLOT_AREA_SEL_CREATED(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_AREA_SEL_CREATED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) wxStaticCastEvent( wxPlotEventFunction, & fn ), (wxObject *) NULL ),
441 #define EVT_PLOT_AREA_SEL_CHANGING(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_AREA_SEL_CHANGING, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) wxStaticCastEvent( wxPlotEventFunction, & fn ), (wxObject *) NULL ),
442 #define EVT_PLOT_AREA_SEL_CHANGED(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_AREA_SEL_CHANGED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) wxStaticCastEvent( wxPlotEventFunction, & fn ), (wxObject *) NULL ),
443 #define EVT_PLOT_BEGIN_X_LABEL_EDIT(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_BEGIN_X_LABEL_EDIT, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) wxStaticCastEvent( wxPlotEventFunction, & fn ), (wxObject *) NULL ),
444 #define EVT_PLOT_END_X_LABEL_EDIT(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_END_X_LABEL_EDIT, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) wxStaticCastEvent( wxPlotEventFunction, & fn ), (wxObject *) NULL ),
445 #define EVT_PLOT_BEGIN_Y_LABEL_EDIT(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_BEGIN_Y_LABEL_EDIT, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) wxStaticCastEvent( wxPlotEventFunction, & fn ), (wxObject *) NULL ),
446 #define EVT_PLOT_END_Y_LABEL_EDIT(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_END_Y_LABEL_EDIT, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) wxStaticCastEvent( wxPlotEventFunction, & fn ), (wxObject *) NULL ),
447 #define EVT_PLOT_BEGIN_TITLE_EDIT(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_BEGIN_TITLE_EDIT, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) wxStaticCastEvent( wxPlotEventFunction, & fn ), (wxObject *) NULL ),
448 #define EVT_PLOT_END_TITLE_EDIT(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_END_TITLE_EDIT, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) wxStaticCastEvent( wxPlotEventFunction, & fn ), (wxObject *) NULL ),