/* * * ChartCursor.h * * Written by Cédric Moonen (cedric_moonen@hotmail.com) * * * * This code may be used for any non-commercial and commercial purposes in a compiled form. * The code may be redistributed as long as it remains unmodified and providing that the * author name and this disclaimer remain intact. The sources can be modified WITH the author * consent only. * * This code is provided without any garanties. I cannot be held responsible for the damage or * the loss of time it causes. Use it at your own risks * * An e-mail to notify me that you are using this code is appreciated also. * * */ #ifndef _CHARTCURSOR_H_ #define _CHARTCURSOR_H_ #include class CChartCtrl; class CChartCursor; //! Interface to implement in order to be notified about a cursor movement. /** This class must be overriden and registered with a CChartCursor by calling RegisterListener. **/ class CChartCursorListener { public: //! Default constructor CChartCursorListener() { } //! Destructor virtual ~CChartCursorListener() { } //! Pure virtual function to implement in order to be notified about a cursor movement. /** Note that not all cursor types have an X and a Y value, in which case, only the relevant information is passed, the other value will be 0. @param pCursor The cursor which was moved @param xValue The cursor xValue @param yValue The cursor yValue **/ virtual void OnCursorMoved(CChartCursor* pCursor, double xValue, double yValue) = 0; }; //! Base class for cursors which can be added to the chart control. /** This class must be overriden for specific cursor types. This is already done for a cross-hair cursor and a dragline cursor. Each cursor is assigned an Id when it is added to the control. **/ class CChartCursor { friend CChartCtrl; public: //! Sets the cursor color. void SetColor(COLORREF cursorColor); //! Retrieves the cursor Id. unsigned GetCursorId() const { return m_uCursorId; } //! Registers a cursor listener with this cursor. void RegisterListener(CChartCursorListener* pListener); protected: //! Default constructor CChartCursor(CChartCtrl* pParent); //! Default destructor virtual ~CChartCursor(); //! Pure virtual function that is called when the mouse moved on the plot area. /** This function must be overriden by child classes to take appropriate actions on the mouse move event. **/ virtual void OnMouseMove(CPoint mousePoint) = 0; //! Virtual function that is called when the left mouse button is pressed. /** This function can be overriden by child classes to take appropriate actions on the mouse click event. **/ virtual void OnMouseButtonDown(CPoint /*mousePoint*/) { } //! Virtual function that is called when the left mouse button is released. /** This function can be overriden by child classes to take appropriate actions on the mouse click event. **/ virtual void OnMouseButtonUp(CPoint /*mousePoint*/) { } //! Pure virtual function that draws the cursor. virtual void Draw(CDC* pDC) = 0; //! Function that is called by the child classes when the cursor has been moved. /** This will notify all the listeners registered with the cursor. **/ void CursorMoved(double newXValue, double newYValue); //! The color of the cursor. COLORREF m_colCursor; //! The parent charting control. CChartCtrl* m_pParentCtrl; //! Static variable holding the next free cursor Id. static unsigned m_uNextFreeId; //! The Id of this curosr. unsigned m_uCursorId; typedef std::list TListenerList; //! List of all listeners registered with this cursor. TListenerList m_lstListeners; }; #endif // _CHARTCURSOR_H_