| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- ///////////////////////////////////////////////////////////////////////////////
- // Name: wx/univ/scrthumb.h
- // Purpose: wxScrollThumb class
- // Author: Vadim Zeitlin
- // Modified by:
- // Created: 12.02.01
- // Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com)
- // Licence: wxWindows licence
- ///////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_UNIV_SCRTHUMB_H_
- #define _WX_UNIV_SCRTHUMB_H_
- // ----------------------------------------------------------------------------
- // wxScrollThumb is not a control but just a class containing the common
- // functionality of scroll thumb such as used by scrollbars, sliders and maybe
- // other (user) controls
- //
- // This class is similar to wxScrollThumb.
- // ----------------------------------------------------------------------------
- class WXDLLIMPEXP_FWD_CORE wxControlWithThumb;
- class WXDLLIMPEXP_FWD_CORE wxMouseEvent;
- class WXDLLIMPEXP_FWD_CORE wxRect;
- class WXDLLIMPEXP_FWD_CORE wxScrollTimer;
- #include "wx/timer.h"
- // ----------------------------------------------------------------------------
- // wxScrollThumb: an abstraction of scrollbar thumb
- // ----------------------------------------------------------------------------
- class WXDLLIMPEXP_CORE wxScrollThumb
- {
- public:
- enum Shaft
- {
- Shaft_None = -1,
- Shaft_Above, // or to the left of the thumb
- Shaft_Below, // or to the right of the thumb
- Shaft_Thumb, // on the thumb
- Shaft_Max
- };
- // ctor requires a back pointer to wxControlWithThumb
- wxScrollThumb(wxControlWithThumb *control);
- // process a mouse click: will capture the mouse if the button was pressed
- // on either the thumb (start dragging it then) or the shaft (start
- // scrolling)
- bool HandleMouse(const wxMouseEvent& event) const;
- // process a mouse move
- bool HandleMouseMove(const wxMouseEvent& event) const;
- // dtor
- ~wxScrollThumb();
- private:
- // do we have the mouse capture?
- bool HasCapture() const { return m_captureData != NULL; }
- // get the coord of this event in the direction we're interested in (y for
- // vertical shaft or x for horizontal ones)
- wxCoord GetMouseCoord(const wxMouseEvent& event) const;
- // get the position of the thumb corresponding to the current mouse
- // position (can only be called while we're dragging the thumb!)
- int GetThumbPos(const wxMouseEvent& event) const;
- // the main control
- wxControlWithThumb *m_control;
- // the part of it where the mouse currently is
- Shaft m_shaftPart;
- // the data for the mouse capture
- struct WXDLLIMPEXP_FWD_CORE wxScrollThumbCaptureData *m_captureData;
- };
- // ----------------------------------------------------------------------------
- // wxControlWithThumb: interface implemented by controls using wxScrollThumb
- // ----------------------------------------------------------------------------
- class WXDLLIMPEXP_CORE wxControlWithThumb
- {
- public:
- virtual ~wxControlWithThumb() {}
- // simple accessors
- // ----------------
- // get the controls window (used for mouse capturing)
- virtual wxWindow *GetWindow() = 0;
- // get the orientation of the shaft (vertical or horizontal)
- virtual bool IsVertical() const = 0;
- // geometry functions
- // ------------------
- // hit testing: return part of the shaft the point is in (or Shaft_None)
- virtual wxScrollThumb::Shaft HitTest(const wxPoint& pt) const = 0;
- // get the current position in pixels of the thumb
- virtual wxCoord ThumbPosToPixel() const = 0;
- // transform from pixel offset to the thumb logical position
- virtual int PixelToThumbPos(wxCoord x) const = 0;
- // callbacks
- // ---------
- // set or clear the specified flag in the arrow state: this function is
- // responsible for refreshing the control
- virtual void SetShaftPartState(wxScrollThumb::Shaft shaftPart,
- int flag,
- bool set = true) = 0;
- // called when the user starts dragging the thumb
- virtual void OnThumbDragStart(int pos) = 0;
- // called while the user drags the thumb
- virtual void OnThumbDrag(int pos) = 0;
- // called when the user stops dragging the thumb
- virtual void OnThumbDragEnd(int pos) = 0;
- // called before starting to call OnPageScroll() - gives the control the
- // possibility to remember its current state
- virtual void OnPageScrollStart() = 0;
- // called while the user keeps the mouse pressed above/below the thumb,
- // return true to continue scrollign and false to stop it (e.g. because the
- // scrollbar has reached the top/bottom)
- virtual bool OnPageScroll(int pageInc) = 0;
- };
- #endif // _WX_UNIV_SCRTHUMB_H_
|