#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
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)
};
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
//-----------------------------------------------------------------------------
{
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 );
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_