]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/generic/plot.h
rewrote wxFileName::Normalize(), added a few methods, general clean up,
[wxWidgets.git] / include / wx / generic / plot.h
index 449d68fed1652fd3ec51ae827b49f2ffb1cb2e76..a929055c57036018e5021d3705a7e5cb52478fe0 100644 (file)
 #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,99 +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 );
     
+    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_