X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/981b25083e41288f142e717f917e709347c34a02..0dfef5a8124ac0f1bb2aed6ef5ddfa833e8e2c6e:/include/wx/generic/plot.h diff --git a/include/wx/generic/plot.h b/include/wx/generic/plot.h index dc6faebba3..919bbebc82 100644 --- a/include/wx/generic/plot.h +++ b/include/wx/generic/plot.h @@ -17,14 +17,61 @@ #endif #include "wx/scrolwin.h" +#include "wx/event.h" //----------------------------------------------------------------------------- // classes //----------------------------------------------------------------------------- -class wxPlotCurve; -class wxPlotArea; -class wxPlotWindow; +class WXDLLEXPORT wxPlotEvent; +class WXDLLEXPORT wxPlotCurve; +class WXDLLEXPORT wxPlotArea; +class WXDLLEXPORT wxPlotXAxisArea; +class WXDLLEXPORT wxPlotYAxisArea; +class WXDLLEXPORT wxPlotWindow; + +//----------------------------------------------------------------------------- +// consts +//----------------------------------------------------------------------------- + +#define wxPLOT_X_AXIS 0x0004 +#define wxPLOT_Y_AXIS 0x0008 +#define wxPLOT_BUTTON_MOVE 0x0010 +#define wxPLOT_BUTTON_ZOOM 0x0020 +#define wxPLOT_BUTTON_ENLARGE 0x0040 + +#define wxPLOT_BUTTON_ALL (wxPLOT_BUTTON_MOVE|wxPLOT_BUTTON_ZOOM|wxPLOT_BUTTON_ENLARGE) +#define wxPLOT_DEFAULT (wxPLOT_X_AXIS|wxPLOT_Y_AXIS | wxPLOT_BUTTON_ALL) + +//----------------------------------------------------------------------------- +// wxPlotEvent +//----------------------------------------------------------------------------- + +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; + wxInt32 m_position; +}; //----------------------------------------------------------------------------- // wxPlotCurve @@ -33,18 +80,30 @@ class wxPlotWindow; class WXDLLEXPORT wxPlotCurve: public wxObject { public: - wxPlotCurve( int offsetY ); + wxPlotCurve( int offsetY, double startY, double endY ); virtual wxInt32 GetStartX() = 0; virtual wxInt32 GetEndX() = 0; - + + virtual double GetY( wxInt32 x ) = 0; + + void SetStartY( double startY ) + { m_startY = startY; } + double GetStartY() + { return m_startY; } + void SetEndY( double endY ) + { m_endY = endY; } + double GetEndY() + { return m_endY; } + void SetOffsetY( int offsetY ) + { m_offsetY = offsetY; } int GetOffsetY() { return m_offsetY; } - virtual double GetY( wxInt32 x ) = 0; - private: int m_offsetY; + double m_startY; + double m_endY; DECLARE_ABSTRACT_CLASS(wxPlotCurve) }; @@ -61,14 +120,60 @@ public: void OnPaint( wxPaintEvent &event ); void OnMouse( wxMouseEvent &event ); + + void DrawCurve( wxDC *dc, wxPlotCurve *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; + wxPlotWindow *m_owner; + bool m_zooming; DECLARE_CLASS(wxPlotArea) DECLARE_EVENT_TABLE() }; +//----------------------------------------------------------------------------- +// wxPlotXAxisArea +//----------------------------------------------------------------------------- + +class WXDLLEXPORT wxPlotXAxisArea: public wxWindow +{ +public: + wxPlotXAxisArea() {} + wxPlotXAxisArea( wxPlotWindow *parent ); + + void OnPaint( wxPaintEvent &event ); + void OnMouse( wxMouseEvent &event ); + +private: + wxPlotWindow *m_owner; + + DECLARE_CLASS(wxPlotXAxisArea) + DECLARE_EVENT_TABLE() +}; + +//----------------------------------------------------------------------------- +// wxPlotYAxisArea +//----------------------------------------------------------------------------- + +class WXDLLEXPORT wxPlotYAxisArea: public wxWindow +{ +public: + wxPlotYAxisArea() {} + wxPlotYAxisArea( wxPlotWindow *parent ); + + void OnPaint( wxPaintEvent &event ); + void OnMouse( wxMouseEvent &event ); + +private: + wxPlotWindow *m_owner; + + DECLARE_CLASS(wxPlotYAxisArea) + DECLARE_EVENT_TABLE() +}; + //----------------------------------------------------------------------------- // wxPlotWindow //----------------------------------------------------------------------------- @@ -77,9 +182,12 @@ class WXDLLEXPORT wxPlotWindow: public wxScrolledWindow { public: wxPlotWindow() {} - wxPlotWindow( wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size, int flags ); + wxPlotWindow( wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size, int flags = wxPLOT_DEFAULT ); ~wxPlotWindow(); + // curve accessors + // --------------- + void Add( wxPlotCurve *curve ); size_t GetCount(); wxPlotCurve *GetAt( size_t n ); @@ -87,18 +195,90 @@ public: void SetCurrent( wxPlotCurve* current ); wxPlotCurve *GetCurrent(); - void OnPaint( wxPaintEvent &event ); + void Delete( wxPlotCurve* curve ); + + // 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; } + + // 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; - - wxList m_curves; - wxPlotArea *m_area; - wxPlotCurve *m_current; + friend wxPlotXAxisArea; + friend wxPlotYAxisArea; + + double m_xUnitsPerValue; + double m_xZoom; + + wxList m_curves; + wxPlotArea *m_area; + wxPlotXAxisArea *m_xaxis; + wxPlotYAxisArea *m_yaxis; + wxPlotCurve *m_current; DECLARE_CLASS(wxPlotWindow) DECLARE_EVENT_TABLE() }; +// ---------------------------------------------------------------------------- +// calendar events 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 }, + #endif // _WX_PLOT_H_