X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a5a0dd06b67fecd5e571bd9d4221101393d5561b..99f73df9b4865aa3276319fb206127da9027fa63:/include/wx/generic/plot.h?ds=sidebyside diff --git a/include/wx/generic/plot.h b/include/wx/generic/plot.h index 919bbebc82..a929055c57 100644 --- a/include/wx/generic/plot.h +++ b/include/wx/generic/plot.h @@ -16,8 +16,13 @@ #pragma interface "plot.h" #endif +#include "wx/defs.h" + +#if wxUSE_PLOT + #include "wx/scrolwin.h" #include "wx/event.h" +#include "wx/dynarray.h" //----------------------------------------------------------------------------- // classes @@ -25,6 +30,7 @@ class WXDLLEXPORT wxPlotEvent; class WXDLLEXPORT wxPlotCurve; +class WXDLLEXPORT wxPlotValues; class WXDLLEXPORT wxPlotArea; class WXDLLEXPORT wxPlotXAxisArea; class WXDLLEXPORT wxPlotYAxisArea; @@ -51,22 +57,22 @@ class WXDLLEXPORT wxPlotEvent: public wxNotifyEvent { public: wxPlotEvent( wxEventType commandType = wxEVT_NULL, int id = 0 ); - + wxPlotCurve *GetCurve() { return m_curve; } void SetCurve( wxPlotCurve *curve ) { m_curve = curve; } - + double GetZoom() { return m_zoom; } void SetZoom( double zoom ) { m_zoom = zoom; } - + wxInt32 GetPosition() { return m_position; } void SetPosition( wxInt32 pos ) { m_position = pos; } - + private: wxPlotCurve *m_curve; double m_zoom; @@ -81,7 +87,7 @@ class WXDLLEXPORT wxPlotCurve: public wxObject { public: wxPlotCurve( int offsetY, double startY, double endY ); - + virtual wxInt32 GetStartX() = 0; virtual wxInt32 GetEndX() = 0; @@ -99,15 +105,74 @@ public: { m_offsetY = offsetY; } int GetOffsetY() { return m_offsetY; } - + + void SetPenNormal( const wxPen &pen ) + { m_penNormal = pen; } + void SetPenSelected( const wxPen &pen ) + { m_penSelected = pen; } + private: int m_offsetY; double m_startY; double m_endY; + wxPen m_penNormal; + wxPen m_penSelected; DECLARE_ABSTRACT_CLASS(wxPlotCurve) }; +//----------------------------------------------------------------------------- +// wxPlotOnOffCurve +//----------------------------------------------------------------------------- + +class WXDLLEXPORT wxPlotOnOff +{ +public: + wxPlotOnOff() { } + + wxInt32 m_on; + wxInt32 m_off; + void *m_clientData; +}; + +WX_DECLARE_EXPORTED_OBJARRAY(wxPlotOnOff, wxArrayPlotOnOff); + +class WXDLLEXPORT wxPlotOnOffCurve: public wxObject +{ +public: + wxPlotOnOffCurve( int offsetY ); + + wxInt32 GetStartX() + { return m_minX; } + wxInt32 GetEndX() + { return m_maxX; } + + void SetOffsetY( int offsetY ) + { m_offsetY = offsetY; } + int GetOffsetY() + { return m_offsetY; } + + void Add( wxInt32 on, wxInt32 off, void *clientData = NULL ); + size_t GetCount(); + + wxInt32 GetOn( size_t index ); + wxInt32 GetOff( size_t index ); + void* GetClientData( size_t index ); + wxPlotOnOff *GetAt( size_t index ); + + virtual void DrawOnLine( wxDC &dc, wxCoord y, wxCoord start, wxCoord end, void *clientData ); + virtual void DrawOffLine( wxDC &dc, wxCoord y, wxCoord start, wxCoord end ); + +private: + int m_offsetY; + wxInt32 m_minX; + wxInt32 m_maxX; + + wxArrayPlotOnOff m_marks; + + DECLARE_CLASS(wxPlotOnOffCurve) +}; + //----------------------------------------------------------------------------- // wxPlotArea //----------------------------------------------------------------------------- @@ -117,15 +182,16 @@ class WXDLLEXPORT wxPlotArea: public wxWindow public: wxPlotArea() {} wxPlotArea( wxPlotWindow *parent ); - + void OnPaint( wxPaintEvent &event ); void OnMouse( wxMouseEvent &event ); void DrawCurve( wxDC *dc, wxPlotCurve *curve, int from = -1, int to = -1 ); + void DrawOnOffCurve( wxDC *dc, wxPlotOnOffCurve *curve, int from = -1, int to = -1 ); void DeleteCurve( wxPlotCurve *curve, int from = -1, int to = -1 ); - + virtual void ScrollWindow( int dx, int dy, const wxRect *rect ); - + private: wxPlotWindow *m_owner; bool m_zooming; @@ -143,10 +209,10 @@ class WXDLLEXPORT wxPlotXAxisArea: public wxWindow public: wxPlotXAxisArea() {} wxPlotXAxisArea( wxPlotWindow *parent ); - + void OnPaint( wxPaintEvent &event ); void OnMouse( wxMouseEvent &event ); - + private: wxPlotWindow *m_owner; @@ -163,10 +229,10 @@ class WXDLLEXPORT wxPlotYAxisArea: public wxWindow public: wxPlotYAxisArea() {} wxPlotYAxisArea( wxPlotWindow *parent ); - + void OnPaint( wxPaintEvent &event ); void OnMouse( wxMouseEvent &event ); - + private: wxPlotWindow *m_owner; @@ -184,101 +250,132 @@ public: wxPlotWindow() {} wxPlotWindow( wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size, int flags = wxPLOT_DEFAULT ); ~wxPlotWindow(); - + // curve accessors // --------------- - + void Add( wxPlotCurve *curve ); + void Delete( wxPlotCurve* curve ); + size_t GetCount(); wxPlotCurve *GetAt( size_t n ); void SetCurrent( wxPlotCurve* current ); wxPlotCurve *GetCurrent(); + + // mark list accessors + // ------------------- + + void Add( wxPlotOnOffCurve *curve ); + void Delete( wxPlotOnOffCurve* curve ); - void Delete( wxPlotCurve* curve ); - + size_t GetOnOffCurveCount(); + wxPlotOnOffCurve *GetOnOffCurveAt( size_t n ); + // vertical representation // ----------------------- - + void Move( wxPlotCurve* curve, int pixels_up ); void Enlarge( wxPlotCurve *curve, double factor ); // horizontal representation // ------------------------- - + void SetUnitsPerValue( double upv ); double GetUnitsPerValue() { return m_xUnitsPerValue; } - + void SetZoom( double zoom ); double GetZoom() { return m_xZoom; } - + + // options + // ------- + + void SetScrollOnThumbRelease( bool scrollOnThumbRelease = TRUE ) + { m_scrollOnThumbRelease = scrollOnThumbRelease; } + bool GetScrollOnThumbRelease() + { return m_scrollOnThumbRelease; } + + void SetEnlargeAroundWindowCentre( bool enlargeAroundWindowCentre = TRUE ) + { m_enlargeAroundWindowCentre = enlargeAroundWindowCentre; } + bool GetEnlargeAroundWindowCentre() + { return m_enlargeAroundWindowCentre; } + // events (may be overridden) // -------------------------- void OnMoveUp( wxCommandEvent& event ); void OnMoveDown( wxCommandEvent& event ); - + void OnEnlarge( wxCommandEvent& event ); void OnShrink( wxCommandEvent& event ); void OnZoomIn( wxCommandEvent& event ); void OnZoomOut( wxCommandEvent& event ); - + void OnScroll2( wxScrollWinEvent& event ); - + // utilities // --------- - + void RedrawEverything(); void RedrawXAxis(); void RedrawYAxis(); - + void ResetScrollbar(); - + private: - friend wxPlotArea; - friend wxPlotXAxisArea; - friend wxPlotYAxisArea; - + friend class wxPlotArea; + friend class wxPlotXAxisArea; + friend class wxPlotYAxisArea; + double m_xUnitsPerValue; double m_xZoom; - + wxList m_curves; + wxList m_onOffCurves; + wxPlotArea *m_area; wxPlotXAxisArea *m_xaxis; wxPlotYAxisArea *m_yaxis; wxPlotCurve *m_current; + bool m_scrollOnThumbRelease; + bool m_enlargeAroundWindowCentre; + DECLARE_CLASS(wxPlotWindow) DECLARE_EVENT_TABLE() }; // ---------------------------------------------------------------------------- -// calendar events macros +// plot event macros // ---------------------------------------------------------------------------- -#define EVT_PLOT(id, fn) { wxEVT_PLOT_DOUBLECLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_PLOT_SEL_CHANGING(id, fn) { wxEVT_PLOT_SEL_CHANGING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_PLOT_SEL_CHANGED(id, fn) { wxEVT_PLOT_SEL_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_PLOT_CLICKED(id, fn) { wxEVT_PLOT_CLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_PLOT_DOUBLECLICKED(id, fn) { wxEVT_PLOT_DOUBLECLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_PLOT_ZOOM_IN(id, fn) { wxEVT_PLOT_ZOOM_IN, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_PLOT_ZOOM_OUT(id, fn) { wxEVT_PLOT_ZOOM_OUT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_PLOT_VALUE_SEL_CREATING(id, fn) { wxEVT_PLOT_VALUE_SEL_CREATING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_PLOT_VALUE_SEL_CREATED(id, fn) { wxEVT_PLOT_VALUE_SEL_CREATED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_PLOT_VALUE_SEL_CHANGING(id, fn) { wxEVT_PLOT_VALUE_SEL_CHANGING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_PLOT_VALUE_SEL_CHANGED(id, fn) { wxEVT_PLOT_VALUE_SEL_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_PLOT_AREA_SEL_CREATING(id, fn) { wxEVT_PLOT_AREA_SEL_CREATING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_PLOT_AREA_SEL_CREATED(id, fn) { wxEVT_PLOT_AREA_SEL_CREATED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_PLOT_AREA_SEL_CHANGING(id, fn) { wxEVT_PLOT_AREA_SEL_CHANGING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_PLOT_AREA_SEL_CHANGED(id, fn) { wxEVT_PLOT_AREA_SEL_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_PLOT_BEGIN_X_LABEL_EDIT(id, fn) { wxEVT_PLOT_BEGIN_X_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_PLOT_END_X_LABEL_EDIT(id, fn) { wxEVT_PLOT_END_X_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_PLOT_BEGIN_Y_LABEL_EDIT(id, fn) { wxEVT_PLOT_BEGIN_Y_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_PLOT_END_Y_LABEL_EDIT(id, fn) { wxEVT_PLOT_END_Y_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_PLOT_BEGIN_TITLE_EDIT(id, fn) { wxEVT_PLOT_BEGIN_TITLE_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_PLOT_END_TITLE_EDIT(id, fn) { wxEVT_PLOT_END_TITLE_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, +typedef void (wxEvtHandler::*wxPlotEventFunction)(wxPlotEvent&); + +#define EVT_PLOT(id, fn) { wxEVT_PLOT_DOUBLECLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL }, +#define EVT_PLOT_SEL_CHANGING(id, fn) { wxEVT_PLOT_SEL_CHANGING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL }, +#define EVT_PLOT_SEL_CHANGED(id, fn) { wxEVT_PLOT_SEL_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL }, +#define EVT_PLOT_CLICKED(id, fn) { wxEVT_PLOT_CLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL }, +#define EVT_PLOT_DOUBLECLICKED(id, fn) { wxEVT_PLOT_DOUBLECLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL }, +#define EVT_PLOT_ZOOM_IN(id, fn) { wxEVT_PLOT_ZOOM_IN, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL }, +#define EVT_PLOT_ZOOM_OUT(id, fn) { wxEVT_PLOT_ZOOM_OUT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL }, +#define EVT_PLOT_VALUE_SEL_CREATING(id, fn) { wxEVT_PLOT_VALUE_SEL_CREATING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL }, +#define EVT_PLOT_VALUE_SEL_CREATED(id, fn) { wxEVT_PLOT_VALUE_SEL_CREATED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL }, +#define EVT_PLOT_VALUE_SEL_CHANGING(id, fn) { wxEVT_PLOT_VALUE_SEL_CHANGING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL }, +#define EVT_PLOT_VALUE_SEL_CHANGED(id, fn) { wxEVT_PLOT_VALUE_SEL_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL }, +#define EVT_PLOT_AREA_SEL_CREATING(id, fn) { wxEVT_PLOT_AREA_SEL_CREATING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL }, +#define EVT_PLOT_AREA_SEL_CREATED(id, fn) { wxEVT_PLOT_AREA_SEL_CREATED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL }, +#define EVT_PLOT_AREA_SEL_CHANGING(id, fn) { wxEVT_PLOT_AREA_SEL_CHANGING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL }, +#define EVT_PLOT_AREA_SEL_CHANGED(id, fn) { wxEVT_PLOT_AREA_SEL_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL }, +#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 }, +#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 }, +#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 }, +#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 }, +#define EVT_PLOT_BEGIN_TITLE_EDIT(id, fn) { wxEVT_PLOT_BEGIN_TITLE_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL }, +#define EVT_PLOT_END_TITLE_EDIT(id, fn) { wxEVT_PLOT_END_TITLE_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) (wxPlotEventFunction) & fn, (wxObject *) NULL }, + +#endif // wxUSE_PLOT #endif // _WX_PLOT_H_