spinbutt.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // Name: wx/univ/spinbutt.h
  3. // Purpose: universal version of wxSpinButton
  4. // Author: Vadim Zeitlin
  5. // Modified by:
  6. // Created: 21.01.01
  7. // Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com)
  8. // Licence: wxWindows licence
  9. ///////////////////////////////////////////////////////////////////////////////
  10. #ifndef _WX_UNIV_SPINBUTT_H_
  11. #define _WX_UNIV_SPINBUTT_H_
  12. #include "wx/univ/scrarrow.h"
  13. // ----------------------------------------------------------------------------
  14. // wxSpinButton
  15. // ----------------------------------------------------------------------------
  16. // actions supported by this control
  17. #define wxACTION_SPIN_INC wxT("inc")
  18. #define wxACTION_SPIN_DEC wxT("dec")
  19. class WXDLLIMPEXP_CORE wxSpinButton : public wxSpinButtonBase,
  20. public wxControlWithArrows
  21. {
  22. public:
  23. wxSpinButton();
  24. wxSpinButton(wxWindow *parent,
  25. wxWindowID id = wxID_ANY,
  26. const wxPoint& pos = wxDefaultPosition,
  27. const wxSize& size = wxDefaultSize,
  28. long style = wxSP_VERTICAL | wxSP_ARROW_KEYS,
  29. const wxString& name = wxSPIN_BUTTON_NAME);
  30. bool Create(wxWindow *parent,
  31. wxWindowID id = wxID_ANY,
  32. const wxPoint& pos = wxDefaultPosition,
  33. const wxSize& size = wxDefaultSize,
  34. long style = wxSP_VERTICAL | wxSP_ARROW_KEYS,
  35. const wxString& name = wxSPIN_BUTTON_NAME);
  36. // implement wxSpinButtonBase methods
  37. virtual int GetValue() const;
  38. virtual void SetValue(int val);
  39. virtual void SetRange(int minVal, int maxVal);
  40. // implement wxControlWithArrows methods
  41. virtual wxRenderer *GetRenderer() const { return m_renderer; }
  42. virtual wxWindow *GetWindow() { return this; }
  43. virtual bool IsVertical() const { return wxSpinButtonBase::IsVertical(); }
  44. virtual int GetArrowState(wxScrollArrows::Arrow arrow) const;
  45. virtual void SetArrowFlag(wxScrollArrows::Arrow arrow, int flag, bool set);
  46. virtual bool OnArrow(wxScrollArrows::Arrow arrow);
  47. virtual wxScrollArrows::Arrow HitTestArrow(const wxPoint& pt) const;
  48. // for wxStdSpinButtonInputHandler
  49. const wxScrollArrows& GetArrows() { return m_arrows; }
  50. virtual bool PerformAction(const wxControlAction& action,
  51. long numArg = 0,
  52. const wxString& strArg = wxEmptyString);
  53. static wxInputHandler *GetStdInputHandler(wxInputHandler *handlerDef);
  54. virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef)
  55. {
  56. return GetStdInputHandler(handlerDef);
  57. }
  58. protected:
  59. virtual wxSize DoGetBestClientSize() const;
  60. virtual void DoDraw(wxControlRenderer *renderer);
  61. virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; }
  62. // the common part of all ctors
  63. void Init();
  64. // normalize the value to fit into min..max range
  65. int NormalizeValue(int value) const;
  66. // change the value by +1/-1 and send the event, return true if value was
  67. // changed
  68. bool ChangeValue(int inc);
  69. // get the rectangles for our 2 arrows
  70. void CalcArrowRects(wxRect *rect1, wxRect *rect2) const;
  71. // the current controls value
  72. int m_value;
  73. private:
  74. // the object which manages our arrows
  75. wxScrollArrows m_arrows;
  76. // the state (combination of wxCONTROL_XXX flags) of the arrows
  77. int m_arrowsState[wxScrollArrows::Arrow_Max];
  78. DECLARE_DYNAMIC_CLASS(wxSpinButton)
  79. };
  80. // ----------------------------------------------------------------------------
  81. // wxStdSpinButtonInputHandler: manages clicks on them (use arrows like
  82. // wxStdScrollBarInputHandler) and processes keyboard events too
  83. // ----------------------------------------------------------------------------
  84. class WXDLLIMPEXP_CORE wxStdSpinButtonInputHandler : public wxStdInputHandler
  85. {
  86. public:
  87. wxStdSpinButtonInputHandler(wxInputHandler *inphand);
  88. virtual bool HandleKey(wxInputConsumer *consumer,
  89. const wxKeyEvent& event,
  90. bool pressed);
  91. virtual bool HandleMouse(wxInputConsumer *consumer,
  92. const wxMouseEvent& event);
  93. virtual bool HandleMouseMove(wxInputConsumer *consumer,
  94. const wxMouseEvent& event);
  95. };
  96. #endif // _WX_UNIV_SPINBUTT_H_