wxWidgets/include/wx/univ/scrthumb.h

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 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_