git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37168 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			141 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| ///////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        wx/univ/scrthumb.h
 | |
| // Purpose:     wxScrollThumb class
 | |
| // Author:      Vadim Zeitlin
 | |
| // Modified by:
 | |
| // Created:     12.02.01
 | |
| // RCS-ID:      $Id$
 | |
| // 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 WXDLLEXPORT wxControlWithThumb;
 | |
| class WXDLLEXPORT wxMouseEvent;
 | |
| class WXDLLEXPORT wxRect;
 | |
| class WXDLLEXPORT wxScrollTimer;
 | |
| 
 | |
| #include "wx/timer.h"
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // wxScrollThumb: an abstraction of scrollbar thumb
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| class WXDLLEXPORT 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 WXDLLEXPORT wxScrollThumbCaptureData *m_captureData;
 | |
| };
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // wxControlWithThumb: interface implemented by controls using wxScrollThumb
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| class WXDLLEXPORT 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_
 |