| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- ///////////////////////////////////////////////////////////////////////////////
- // Name: wx/univ/slider.h
- // Purpose: wxSlider control for wxUniversal
- // Author: Vadim Zeitlin
- // Modified by:
- // Created: 09.02.01
- // Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com)
- // Licence: wxWindows licence
- ///////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_UNIV_SLIDER_H_
- #define _WX_UNIV_SLIDER_H_
- #include "wx/univ/scrthumb.h"
- // ----------------------------------------------------------------------------
- // the actions supported by this control
- // ----------------------------------------------------------------------------
- // our actions are the same as scrollbars
- #define wxACTION_SLIDER_START wxT("start") // to the beginning
- #define wxACTION_SLIDER_END wxT("end") // to the end
- #define wxACTION_SLIDER_LINE_UP wxT("lineup") // one line up/left
- #define wxACTION_SLIDER_PAGE_UP wxT("pageup") // one page up/left
- #define wxACTION_SLIDER_LINE_DOWN wxT("linedown") // one line down/right
- #define wxACTION_SLIDER_PAGE_DOWN wxT("pagedown") // one page down/right
- #define wxACTION_SLIDER_PAGE_CHANGE wxT("pagechange")// change page by numArg
- #define wxACTION_SLIDER_THUMB_DRAG wxT("thumbdrag")
- #define wxACTION_SLIDER_THUMB_MOVE wxT("thumbmove")
- #define wxACTION_SLIDER_THUMB_RELEASE wxT("thumbrelease")
- // ----------------------------------------------------------------------------
- // wxSlider
- // ----------------------------------------------------------------------------
- class WXDLLIMPEXP_CORE wxSlider : public wxSliderBase,
- public wxControlWithThumb
- {
- public:
- // ctors and such
- wxSlider();
- wxSlider(wxWindow *parent,
- wxWindowID id,
- int value, int minValue, int maxValue,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = wxSL_HORIZONTAL,
- const wxValidator& validator = wxDefaultValidator,
- const wxString& name = wxSliderNameStr);
- bool Create(wxWindow *parent,
- wxWindowID id,
- int value, int minValue, int maxValue,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = wxSL_HORIZONTAL,
- const wxValidator& validator = wxDefaultValidator,
- const wxString& name = wxSliderNameStr);
- // implement base class pure virtuals
- virtual int GetValue() const;
- virtual void SetValue(int value);
- virtual void SetRange(int minValue, int maxValue);
- virtual int GetMin() const;
- virtual int GetMax() const;
- virtual void SetLineSize(int lineSize);
- virtual void SetPageSize(int pageSize);
- virtual int GetLineSize() const;
- virtual int GetPageSize() const;
- virtual void SetThumbLength(int lenPixels);
- virtual int GetThumbLength() const;
- virtual int GetTickFreq() const { return m_tickFreq; }
- // wxUniv-specific methods
- // -----------------------
- // is this a vertical slider?
- bool IsVert() const { return (GetWindowStyle() & wxSL_VERTICAL) != 0; }
- // get the slider orientation
- wxOrientation GetOrientation() const
- { return IsVert() ? wxVERTICAL : wxHORIZONTAL; }
- // do we have labels?
- bool HasLabels() const
- { return ((GetWindowStyle() & wxSL_LABELS) != 0) &&
- ((GetWindowStyle() & (wxSL_TOP|wxSL_BOTTOM|wxSL_LEFT|wxSL_RIGHT)) != 0); }
- // do we have ticks?
- bool HasTicks() const
- { return ((GetWindowStyle() & wxSL_TICKS) != 0) &&
- ((GetWindowStyle() & (wxSL_TOP|wxSL_BOTTOM|wxSL_LEFT|wxSL_RIGHT|wxSL_BOTH)) != 0); }
- // implement wxControlWithThumb interface
- virtual wxWindow *GetWindow() { return this; }
- virtual bool IsVertical() const { return IsVert(); }
- virtual wxScrollThumb::Shaft HitTest(const wxPoint& pt) const;
- virtual wxCoord ThumbPosToPixel() const;
- virtual int PixelToThumbPos(wxCoord x) const;
- virtual void SetShaftPartState(wxScrollThumb::Shaft shaftPart,
- int flag,
- bool set = true);
- virtual void OnThumbDragStart(int pos);
- virtual void OnThumbDrag(int pos);
- virtual void OnThumbDragEnd(int pos);
- virtual void OnPageScrollStart();
- virtual bool OnPageScroll(int pageInc);
- // for wxStdSliderInputHandler
- wxScrollThumb& GetThumb() { return m_thumb; }
- virtual bool PerformAction(const wxControlAction& action,
- long numArg = 0,
- const wxString& strArg = wxEmptyString);
- static wxInputHandler *GetStdInputHandler(wxInputHandler *handlerDef);
- virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef)
- {
- return GetStdInputHandler(handlerDef);
- }
- protected:
- enum
- {
- INVALID_THUMB_VALUE = -0xffff
- };
- // Platform-specific implementation of SetTickFreq
- virtual void DoSetTickFreq(int freq);
- // overridden base class virtuals
- virtual wxSize DoGetBestClientSize() const;
- virtual void DoDraw(wxControlRenderer *renderer);
- virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; }
- // event handlers
- void OnSize(wxSizeEvent& event);
- // common part of all ctors
- void Init();
- // normalize the value to fit in the range
- int NormalizeValue(int value) const;
- // change the value by the given increment, return true if really changed
- bool ChangeValueBy(int inc);
- // change the value to the given one
- bool ChangeValueTo(int value);
- // is the value inside the range?
- bool IsInRange(int value) { return (value >= m_min) && (value <= m_max); }
- // format the value for printing as label
- virtual wxString FormatValue(int value) const;
- // calculate max label size
- wxSize CalcLabelSize() const;
- // calculate m_rectLabel/Slider
- void CalcGeometry();
- // get the thumb size
- wxSize GetThumbSize() const;
- // get the shaft rect (uses m_rectSlider which is supposed to be calculated)
- wxRect GetShaftRect() const;
- // calc the current thumb position using the shaft rect (if the pointer is
- // NULL, we calculate it here too)
- void CalcThumbRect(const wxRect *rectShaft,
- wxRect *rectThumbOut,
- wxRect *rectLabelOut,
- int value = INVALID_THUMB_VALUE) const;
- // return the slider rect calculating it if needed
- const wxRect& GetSliderRect() const;
- // refresh the current thumb position
- void RefreshThumb();
- private:
- // get the default thumb size (without using m_thumbSize)
- wxSize GetDefaultThumbSize() const;
- // the object which manages our thumb
- wxScrollThumb m_thumb;
- // the slider range and value
- int m_min,
- m_max,
- m_value;
- // the tick frequence (default is 1)
- int m_tickFreq;
- // the line and page increments (logical units)
- int m_lineSize,
- m_pageSize;
- // the size of the thumb (in pixels)
- int m_thumbSize;
- // the part of the client area reserved for the label, the ticks and the
- // part for the slider itself
- wxRect m_rectLabel,
- m_rectTicks,
- m_rectSlider;
- // the state of the thumb (wxCONTROL_XXX constants sum)
- int m_thumbFlags;
- DECLARE_EVENT_TABLE()
- DECLARE_DYNAMIC_CLASS(wxSlider)
- };
- #endif // _WX_UNIV_SLIDER_H_
|