1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxPlotWindow
4 // Author: Robert Roebling
7 // Copyright: (c) Robert Roebling
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
15 #if defined(__GNUG__) && !defined(__APPLE__)
16 #pragma interface "plot.h"
21 #include "wx/scrolwin.h"
23 #include "wx/dynarray.h"
25 //-----------------------------------------------------------------------------
27 //-----------------------------------------------------------------------------
29 class WXDLLEXPORT wxPlotEvent
;
30 class WXDLLEXPORT wxPlotCurve
;
31 class WXDLLEXPORT wxPlotValues
;
32 class WXDLLEXPORT wxPlotArea
;
33 class WXDLLEXPORT wxPlotXAxisArea
;
34 class WXDLLEXPORT wxPlotYAxisArea
;
35 class WXDLLEXPORT wxPlotWindow
;
37 //-----------------------------------------------------------------------------
39 //-----------------------------------------------------------------------------
41 extern const int wxEVT_PLOT_SEL_CHANGING
;
42 extern const int wxEVT_PLOT_SEL_CHANGED
;
43 extern const int wxEVT_PLOT_CLICKED
;
44 extern const int wxEVT_PLOT_DOUBLECLICKED
;
45 extern const int wxEVT_PLOT_ZOOM_IN
;
46 extern const int wxEVT_PLOT_ZOOM_OUT
;
47 extern const int wxEVT_PLOT_VALUE_SEL_CREATING
;
48 extern const int wxEVT_PLOT_VALUE_SEL_CREATED
;
49 extern const int wxEVT_PLOT_VALUE_SEL_CHANGING
;
50 extern const int wxEVT_PLOT_VALUE_SEL_CHANGED
;
51 extern const int wxEVT_PLOT_AREA_SEL_CREATING
;
52 extern const int wxEVT_PLOT_AREA_SEL_CREATED
;
53 extern const int wxEVT_PLOT_AREA_SEL_CHANGING
;
54 extern const int wxEVT_PLOT_AREA_SEL_CHANGED
;
55 extern const int wxEVT_PLOT_BEGIN_X_LABEL_EDIT
;
56 extern const int wxEVT_PLOT_END_X_LABEL_EDIT
;
57 extern const int wxEVT_PLOT_BEGIN_Y_LABEL_EDIT
;
58 extern const int wxEVT_PLOT_END_Y_LABEL_EDIT
;
59 extern const int wxEVT_PLOT_BEGIN_TITLE_EDIT
;
60 extern const int wxEVT_PLOT_END_TITLE_EDIT
;
61 extern const int wxEVT_PLOT_AREA_CREATE
;
64 #define wxPLOT_X_AXIS 0x0004
65 #define wxPLOT_Y_AXIS 0x0008
66 #define wxPLOT_BUTTON_MOVE 0x0010
67 #define wxPLOT_BUTTON_ZOOM 0x0020
68 #define wxPLOT_BUTTON_ENLARGE 0x0040
70 #define wxPLOT_BUTTON_ALL (wxPLOT_BUTTON_MOVE|wxPLOT_BUTTON_ZOOM|wxPLOT_BUTTON_ENLARGE)
71 #define wxPLOT_DEFAULT (wxPLOT_X_AXIS|wxPLOT_Y_AXIS | wxPLOT_BUTTON_ALL)
73 //-----------------------------------------------------------------------------
75 //-----------------------------------------------------------------------------
77 class WXDLLEXPORT wxPlotEvent
: public wxNotifyEvent
80 wxPlotEvent( wxEventType commandType
= wxEVT_NULL
, int id
= 0 );
82 wxPlotCurve
*GetCurve()
84 void SetCurve( wxPlotCurve
*curve
)
89 void SetZoom( double zoom
)
93 { return m_position
; }
94 void SetPosition( wxInt32 pos
)
103 //-----------------------------------------------------------------------------
105 //-----------------------------------------------------------------------------
107 class WXDLLEXPORT wxPlotCurve
: public wxObject
110 wxPlotCurve( int offsetY
, double startY
, double endY
);
112 virtual wxInt32
GetStartX() = 0;
113 virtual wxInt32
GetEndX() = 0;
115 virtual double GetY( wxInt32 x
) = 0;
117 void SetStartY( double startY
)
118 { m_startY
= startY
; }
121 void SetEndY( double endY
)
125 void SetOffsetY( int offsetY
)
126 { m_offsetY
= offsetY
; }
128 { return m_offsetY
; }
130 void SetPenNormal( const wxPen
&pen
)
131 { m_penNormal
= pen
; }
132 void SetPenSelected( const wxPen
&pen
)
133 { m_penSelected
= pen
; }
142 DECLARE_ABSTRACT_CLASS(wxPlotCurve
)
145 //-----------------------------------------------------------------------------
147 //-----------------------------------------------------------------------------
149 class WXDLLEXPORT wxPlotOnOff
159 WX_DECLARE_EXPORTED_OBJARRAY(wxPlotOnOff
, wxArrayPlotOnOff
);
161 class WXDLLEXPORT wxPlotOnOffCurve
: public wxObject
164 wxPlotOnOffCurve( int offsetY
);
171 void SetOffsetY( int offsetY
)
172 { m_offsetY
= offsetY
; }
174 { return m_offsetY
; }
176 void Add( wxInt32 on
, wxInt32 off
, void *clientData
= NULL
);
179 wxInt32
GetOn( size_t index
);
180 wxInt32
GetOff( size_t index
);
181 void* GetClientData( size_t index
);
182 wxPlotOnOff
*GetAt( size_t index
);
184 virtual void DrawOnLine( wxDC
&dc
, wxCoord y
, wxCoord start
, wxCoord end
, void *clientData
);
185 virtual void DrawOffLine( wxDC
&dc
, wxCoord y
, wxCoord start
, wxCoord end
);
192 wxArrayPlotOnOff m_marks
;
194 DECLARE_CLASS(wxPlotOnOffCurve
)
197 //-----------------------------------------------------------------------------
199 //-----------------------------------------------------------------------------
201 class WXDLLEXPORT wxPlotArea
: public wxWindow
205 wxPlotArea( wxPlotWindow
*parent
);
207 void OnPaint( wxPaintEvent
&event
);
208 void OnMouse( wxMouseEvent
&event
);
210 void DrawCurve( wxDC
*dc
, wxPlotCurve
*curve
, int from
= -1, int to
= -1 );
211 void DrawOnOffCurve( wxDC
*dc
, wxPlotOnOffCurve
*curve
, int from
= -1, int to
= -1 );
212 void DeleteCurve( wxPlotCurve
*curve
, int from
= -1, int to
= -1 );
214 virtual void ScrollWindow( int dx
, int dy
, const wxRect
*rect
);
217 wxPlotWindow
*m_owner
;
220 DECLARE_CLASS(wxPlotArea
)
221 DECLARE_EVENT_TABLE()
224 //-----------------------------------------------------------------------------
226 //-----------------------------------------------------------------------------
228 class WXDLLEXPORT wxPlotXAxisArea
: public wxWindow
232 wxPlotXAxisArea( wxPlotWindow
*parent
);
234 void OnPaint( wxPaintEvent
&event
);
235 void OnMouse( wxMouseEvent
&event
);
238 wxPlotWindow
*m_owner
;
240 DECLARE_CLASS(wxPlotXAxisArea
)
241 DECLARE_EVENT_TABLE()
244 //-----------------------------------------------------------------------------
246 //-----------------------------------------------------------------------------
248 class WXDLLEXPORT wxPlotYAxisArea
: public wxWindow
252 wxPlotYAxisArea( wxPlotWindow
*parent
);
254 void OnPaint( wxPaintEvent
&event
);
255 void OnMouse( wxMouseEvent
&event
);
258 wxPlotWindow
*m_owner
;
260 DECLARE_CLASS(wxPlotYAxisArea
)
261 DECLARE_EVENT_TABLE()
264 //-----------------------------------------------------------------------------
266 //-----------------------------------------------------------------------------
268 class WXDLLEXPORT wxPlotWindow
: public wxScrolledWindow
272 wxPlotWindow( wxWindow
*parent
, wxWindowID id
, const wxPoint
&pos
, const wxSize
&size
, int flags
= wxPLOT_DEFAULT
);
278 void Add( wxPlotCurve
*curve
);
279 void Delete( wxPlotCurve
* curve
);
282 wxPlotCurve
*GetAt( size_t n
);
284 void SetCurrent( wxPlotCurve
* current
);
285 wxPlotCurve
*GetCurrent();
287 // mark list accessors
288 // -------------------
290 void Add( wxPlotOnOffCurve
*curve
);
291 void Delete( wxPlotOnOffCurve
* curve
);
293 size_t GetOnOffCurveCount();
294 wxPlotOnOffCurve
*GetOnOffCurveAt( size_t n
);
296 // vertical representation
297 // -----------------------
299 void Move( wxPlotCurve
* curve
, int pixels_up
);
300 void Enlarge( wxPlotCurve
*curve
, double factor
);
302 // horizontal representation
303 // -------------------------
305 void SetUnitsPerValue( double upv
);
306 double GetUnitsPerValue()
307 { return m_xUnitsPerValue
; }
309 void SetZoom( double zoom
);
316 void SetScrollOnThumbRelease( bool scrollOnThumbRelease
= TRUE
)
317 { m_scrollOnThumbRelease
= scrollOnThumbRelease
; }
318 bool GetScrollOnThumbRelease()
319 { return m_scrollOnThumbRelease
; }
321 void SetEnlargeAroundWindowCentre( bool enlargeAroundWindowCentre
= TRUE
)
322 { m_enlargeAroundWindowCentre
= enlargeAroundWindowCentre
; }
323 bool GetEnlargeAroundWindowCentre()
324 { return m_enlargeAroundWindowCentre
; }
326 // events (may be overridden)
327 // --------------------------
329 void OnMoveUp( wxCommandEvent
& event
);
330 void OnMoveDown( wxCommandEvent
& event
);
332 void OnEnlarge( wxCommandEvent
& event
);
333 void OnShrink( wxCommandEvent
& event
);
334 void OnZoomIn( wxCommandEvent
& event
);
335 void OnZoomOut( wxCommandEvent
& event
);
337 void OnScroll2( wxScrollWinEvent
& event
);
342 void RedrawEverything();
346 void ResetScrollbar();
349 friend class wxPlotArea
;
350 friend class wxPlotXAxisArea
;
351 friend class wxPlotYAxisArea
;
353 double m_xUnitsPerValue
;
357 wxList m_onOffCurves
;
360 wxPlotXAxisArea
*m_xaxis
;
361 wxPlotYAxisArea
*m_yaxis
;
362 wxPlotCurve
*m_current
;
364 bool m_scrollOnThumbRelease
;
365 bool m_enlargeAroundWindowCentre
;
367 DECLARE_CLASS(wxPlotWindow
)
368 DECLARE_EVENT_TABLE()
371 // ----------------------------------------------------------------------------
373 // ----------------------------------------------------------------------------
375 typedef void (wxEvtHandler::*wxPlotEventFunction
)(wxPlotEvent
&);
377 #if WXWIN_COMPATIBILITY_EVENT_TYPES
379 #define EVT_PLOT(id, fn) { wxEVT_PLOT_DOUBLECLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
380 #define EVT_PLOT_SEL_CHANGING(id, fn) { wxEVT_PLOT_SEL_CHANGING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
381 #define EVT_PLOT_SEL_CHANGED(id, fn) { wxEVT_PLOT_SEL_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
382 #define EVT_PLOT_CLICKED(id, fn) { wxEVT_PLOT_CLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
383 #define EVT_PLOT_DOUBLECLICKED(id, fn) { wxEVT_PLOT_DOUBLECLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
384 #define EVT_PLOT_ZOOM_IN(id, fn) { wxEVT_PLOT_ZOOM_IN, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
385 #define EVT_PLOT_ZOOM_OUT(id, fn) { wxEVT_PLOT_ZOOM_OUT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
386 #define EVT_PLOT_VALUE_SEL_CREATING(id, fn) { wxEVT_PLOT_VALUE_SEL_CREATING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
387 #define EVT_PLOT_VALUE_SEL_CREATED(id, fn) { wxEVT_PLOT_VALUE_SEL_CREATED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
388 #define EVT_PLOT_VALUE_SEL_CHANGING(id, fn) { wxEVT_PLOT_VALUE_SEL_CHANGING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
389 #define EVT_PLOT_VALUE_SEL_CHANGED(id, fn) { wxEVT_PLOT_VALUE_SEL_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
390 #define EVT_PLOT_AREA_SEL_CREATING(id, fn) { wxEVT_PLOT_AREA_SEL_CREATING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
391 #define EVT_PLOT_AREA_SEL_CREATED(id, fn) { wxEVT_PLOT_AREA_SEL_CREATED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
392 #define EVT_PLOT_AREA_SEL_CHANGING(id, fn) { wxEVT_PLOT_AREA_SEL_CHANGING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
393 #define EVT_PLOT_AREA_SEL_CHANGED(id, fn) { wxEVT_PLOT_AREA_SEL_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
394 #define EVT_PLOT_BEGIN_X_LABEL_EDIT(id, fn) { wxEVT_PLOT_BEGIN_X_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
395 #define EVT_PLOT_END_X_LABEL_EDIT(id, fn) { wxEVT_PLOT_END_X_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
396 #define EVT_PLOT_BEGIN_Y_LABEL_EDIT(id, fn) { wxEVT_PLOT_BEGIN_Y_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
397 #define EVT_PLOT_END_Y_LABEL_EDIT(id, fn) { wxEVT_PLOT_END_Y_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
398 #define EVT_PLOT_BEGIN_TITLE_EDIT(id, fn) { wxEVT_PLOT_BEGIN_TITLE_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
399 #define EVT_PLOT_END_TITLE_EDIT(id, fn) { wxEVT_PLOT_END_TITLE_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL },
403 #define EVT_PLOT(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_DOUBLECLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL ),
404 #define EVT_PLOT_SEL_CHANGING(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_SEL_CHANGING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL ),
405 #define EVT_PLOT_SEL_CHANGED(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_SEL_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL ),
406 #define EVT_PLOT_CLICKED(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_CLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL ),
407 #define EVT_PLOT_DOUBLECLICKED(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_DOUBLECLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL ),
408 #define EVT_PLOT_ZOOM_IN(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_ZOOM_IN, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL ),
409 #define EVT_PLOT_ZOOM_OUT(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_ZOOM_OUT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL ),
410 #define EVT_PLOT_VALUE_SEL_CREATING(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_VALUE_SEL_CREATING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL ),
411 #define EVT_PLOT_VALUE_SEL_CREATED(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_VALUE_SEL_CREATED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL ),
412 #define EVT_PLOT_VALUE_SEL_CHANGING(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_VALUE_SEL_CHANGING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL ),
413 #define EVT_PLOT_VALUE_SEL_CHANGED(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_VALUE_SEL_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL ),
414 #define EVT_PLOT_AREA_SEL_CREATING(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_AREA_SEL_CREATING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL ),
415 #define EVT_PLOT_AREA_SEL_CREATED(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_AREA_SEL_CREATED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL ),
416 #define EVT_PLOT_AREA_SEL_CHANGING(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_AREA_SEL_CHANGING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL ),
417 #define EVT_PLOT_AREA_SEL_CHANGED(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_AREA_SEL_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL ),
418 #define EVT_PLOT_BEGIN_X_LABEL_EDIT(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_BEGIN_X_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL ),
419 #define EVT_PLOT_END_X_LABEL_EDIT(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_END_X_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL ),
420 #define EVT_PLOT_BEGIN_Y_LABEL_EDIT(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_BEGIN_Y_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL ),
421 #define EVT_PLOT_END_Y_LABEL_EDIT(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_END_Y_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL ),
422 #define EVT_PLOT_BEGIN_TITLE_EDIT(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_BEGIN_TITLE_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL ),
423 #define EVT_PLOT_END_TITLE_EDIT(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_PLOT_END_TITLE_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL ),