| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- ////////////////////////////////////////////////////////////////////////////
- // Name: wx/msw/spinctrl.h
- // Purpose: wxSpinCtrl class declaration for Win32
- // Author: Vadim Zeitlin
- // Modified by:
- // Created: 22.07.99
- // Copyright: (c) Vadim Zeitlin
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_MSW_SPINCTRL_H_
- #define _WX_MSW_SPINCTRL_H_
- #include "wx/spinbutt.h" // the base class
- #if wxUSE_SPINCTRL
- #include "wx/dynarray.h"
- class WXDLLIMPEXP_FWD_CORE wxSpinCtrl;
- WX_DEFINE_EXPORTED_ARRAY_PTR(wxSpinCtrl *, wxArraySpins);
- // ----------------------------------------------------------------------------
- // Under Win32, wxSpinCtrl is a wxSpinButton with a buddy (as MSDN docs call
- // it) text window whose contents is automatically updated when the spin
- // control is clicked.
- // ----------------------------------------------------------------------------
- class WXDLLIMPEXP_CORE wxSpinCtrl : public wxSpinButton
- {
- public:
- wxSpinCtrl() { Init(); }
- wxSpinCtrl(wxWindow *parent,
- wxWindowID id = wxID_ANY,
- const wxString& value = wxEmptyString,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = wxSP_ARROW_KEYS | wxALIGN_RIGHT,
- int min = 0, int max = 100, int initial = 0,
- const wxString& name = wxT("wxSpinCtrl"))
- {
- Init();
- Create(parent, id, value, pos, size, style, min, max, initial, name);
- }
- bool Create(wxWindow *parent,
- wxWindowID id = wxID_ANY,
- const wxString& value = wxEmptyString,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = wxSP_ARROW_KEYS | wxALIGN_RIGHT,
- int min = 0, int max = 100, int initial = 0,
- const wxString& name = wxT("wxSpinCtrl"));
- // a wxTextCtrl-like method (but we can't have GetValue returning wxString
- // because the base class already has one returning int!)
- void SetValue(const wxString& text);
- // another wxTextCtrl-like method
- void SetSelection(long from, long to);
- // wxSpinCtrlBase methods
- virtual int GetBase() const;
- virtual bool SetBase(int base);
- // implementation only from now on
- // -------------------------------
- virtual ~wxSpinCtrl();
- virtual void SetValue(int val);
- virtual int GetValue() const;
- virtual void SetRange(int minVal, int maxVal);
- virtual bool SetFont(const wxFont &font);
- virtual void SetFocus();
- virtual bool Enable(bool enable = true);
- virtual bool Show(bool show = true);
- virtual bool Reparent(wxWindowBase *newParent);
- // wxSpinButton doesn't accept focus, but we do
- virtual bool AcceptsFocus() const { return wxWindow::AcceptsFocus(); }
- // we're like wxTextCtrl and not (default) wxButton
- virtual wxVisualAttributes GetDefaultAttributes() const
- {
- return GetClassDefaultAttributes(GetWindowVariant());
- }
- static wxVisualAttributes
- GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL)
- {
- return GetCompositeControlsDefaultAttributes(variant);
- }
- // for internal use only
- // get the subclassed window proc of the buddy text
- WXFARPROC GetBuddyWndProc() const { return m_wndProcBuddy; }
- // return the spinctrl object whose buddy is the given window or NULL
- static wxSpinCtrl *GetSpinForTextCtrl(WXHWND hwndBuddy);
- // process a WM_COMMAND generated by the buddy text control
- bool ProcessTextCommand(WXWORD cmd, WXWORD id);
- // recognize buddy window as part of this control at wx level
- virtual bool ContainsHWND(WXHWND hWnd) const { return hWnd == m_hwndBuddy; }
- protected:
- virtual void DoGetPosition(int *x, int *y) const;
- virtual void DoMoveWindow(int x, int y, int width, int height);
- virtual wxSize DoGetBestSize() const;
- virtual wxSize DoGetSizeFromTextSize(int xlen, int ylen = -1) const;
- virtual void DoGetSize(int *width, int *height) const;
- virtual void DoGetClientSize(int *x, int *y) const;
- #if wxUSE_TOOLTIPS
- virtual void DoSetToolTip( wxToolTip *tip );
- #endif // wxUSE_TOOLTIPS
- virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
- virtual bool MSWOnScroll(int orientation, WXWORD wParam,
- WXWORD pos, WXHWND control);
- // handle processing of special keys
- void OnChar(wxKeyEvent& event);
- void OnSetFocus(wxFocusEvent& event);
- void OnKillFocus(wxFocusEvent& event);
- // generate spin control update event with the given value
- void SendSpinUpdate(int value);
- // called to ensure that the value is in the correct range
- virtual void NormalizeValue();
- // the value of the control before the latest change (which might not have
- // changed anything in fact -- this is why we need this field)
- int m_oldValue;
- // the data for the "buddy" text ctrl
- WXHWND m_hwndBuddy;
- WXFARPROC m_wndProcBuddy;
- // Block text update event after SetValue()
- bool m_blockEvent;
- private:
- // Common part of all ctors.
- void Init();
- // Adjust the text control style depending on whether we need to enter only
- // digits or may need to enter something else (e.g. "-" sign, "x"
- // hexadecimal prefix, ...) in it.
- void UpdateBuddyStyle();
- DECLARE_DYNAMIC_CLASS(wxSpinCtrl)
- DECLARE_EVENT_TABLE()
- wxDECLARE_NO_COPY_CLASS(wxSpinCtrl);
- };
- #endif // wxUSE_SPINCTRL
- #endif // _WX_MSW_SPINCTRL_H_
|