X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/738f9e5a12b8bb3936cc10347be98390602d3660..d8359d3ca077993d3ef61d6c09000ce7beeb577b:/include/wx/spinctrl.h diff --git a/include/wx/spinctrl.h b/include/wx/spinctrl.h index 84e20dc840..6e8bd54bca 100644 --- a/include/wx/spinctrl.h +++ b/include/wx/spinctrl.h @@ -12,51 +12,133 @@ #ifndef _WX_SPINCTRL_H_ #define _WX_SPINCTRL_H_ -#include "wx/control.h" -#include "wx/event.h" +#include "wx/defs.h" + +#if wxUSE_SPINCTRL + +#include "wx/spinbutt.h" // should make wxSpinEvent visible to the app + +// Events +class WXDLLIMPEXP_FWD_CORE wxSpinDoubleEvent; + +wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_COMMAND_SPINCTRL_UPDATED, wxSpinEvent) +wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_COMMAND_SPINCTRLDOUBLE_UPDATED, wxSpinDoubleEvent) // ---------------------------------------------------------------------------- -// a spin ctrl is a text control with a spin button which is usually used to -// prompt the user for a numeric input +// A spin ctrl is a text control with a spin button which is usually used to +// prompt the user for a numeric input. +// There are two kinds for number types T=integer or T=double. // ---------------------------------------------------------------------------- -/* there is no generic base class for this control because it's imlpemented - very differently under MSW and other platforms +class WXDLLIMPEXP_CORE wxSpinCtrlBase : public wxControl +{ +public: + wxSpinCtrlBase() {} + + // accessor functions that derived classes are expected to have + // T GetValue() const + // T GetMin() const + // T GetMax() const + // T GetIncrement() const + virtual bool GetSnapToTicks() const = 0; + // unsigned GetDigits() const - wxSpinCtrlDouble only + + // operation functions that derived classes are expected to have + virtual void SetValue(const wxString& value) = 0; + // void SetValue(T val) + // void SetRange(T minVal, T maxVal) + // void SetIncrement(T inc) + virtual void SetSnapToTicks(bool snap_to_ticks) = 0; + // void SetDigits(unsigned digits) - wxSpinCtrlDouble only -class WXDLLEXPORT wxSpinCtrlBase : public wxControl + // Select text in the textctrl + virtual void SetSelection(long from, long to) = 0; + +private: + DECLARE_NO_COPY_CLASS(wxSpinCtrlBase) +}; + +// ---------------------------------------------------------------------------- +// wxSpinDoubleEvent - a wxSpinEvent for double valued controls +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_CORE wxSpinDoubleEvent : public wxNotifyEvent { public: - wxSpinCtrlBase() { Init(); } + wxSpinDoubleEvent(wxEventType commandType = wxEVT_NULL, int winid = 0, + double value = 0) + : wxNotifyEvent(commandType, winid), m_value(value) + { + } + + wxSpinDoubleEvent(const wxSpinDoubleEvent& event) + : wxNotifyEvent(event), m_value(event.GetValue()) + { + } - // accessors - virtual int GetValue() const = 0; - virtual int GetMin() const { return m_min; } - virtual int GetMax() const { return m_max; } + double GetValue() const { return m_value; } + void SetValue(double value) { m_value = value; } - // operations - virtual void SetValue(int val) = 0; - virtual void SetRange(int minVal, int maxVal) = 0; + virtual wxEvent *Clone() const { return new wxSpinDoubleEvent(*this); } protected: - // initialize m_min/max with the default values - void Init() { m_min = 0; m_max = 100; } + double m_value; - int m_min; - int m_max; +private: + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxSpinDoubleEvent) }; -*/ + +// ---------------------------------------------------------------------------- +// wxSpinDoubleEvent event type, see also wxSpinEvent in wx/spinbutt.h +// ---------------------------------------------------------------------------- + +typedef void (wxEvtHandler::*wxSpinDoubleEventFunction)(wxSpinDoubleEvent&); + +#define wxSpinDoubleEventHandler(func) \ + wxEVENT_HANDLER_CAST(wxSpinDoubleEventFunction, func) + +// macros for handling spinctrl events + +#define EVT_SPINCTRL(id, fn) \ + wx__DECLARE_EVT1(wxEVT_COMMAND_SPINCTRL_UPDATED, id, wxSpinEventHandler(fn)) + +#define EVT_SPINCTRLDOUBLE(id, fn) \ + wx__DECLARE_EVT1(wxEVT_COMMAND_SPINCTRLDOUBLE_UPDATED, id, wxSpinDoubleEventHandler(fn)) // ---------------------------------------------------------------------------- // include the platform-dependent class implementation // ---------------------------------------------------------------------------- -#if defined(__WXMSW__) && defined(__WIN32__) +// we may have a native wxSpinCtrl implementation, native wxSpinCtrl and +// wxSpinCtrlDouble implementations or neither, define the appropriate symbols +// and include the generic version if necessary to provide the missing class(es) + +#if defined(__WXUNIVERSAL__) || \ + defined(__WXMOTIF__) || \ + defined(__WXCOCOA__) + // nothing, use generic controls +#elif defined(__WXMSW__) + #define wxHAS_NATIVE_SPINCTRL #include "wx/msw/spinctrl.h" -#elif defined(__WXGTK__) +#elif defined(__WXPM__) + #define wxHAS_NATIVE_SPINCTRL + #include "wx/os2/spinctrl.h" +#elif defined(__WXGTK20__) + #define wxHAS_NATIVE_SPINCTRL + #define wxHAS_NATIVE_SPINCTRLDOUBLE #include "wx/gtk/spinctrl.h" -#else // Win16 || !Win - #include "wx/generic/spinctrl.h" +#elif defined(__WXGTK__) + #define wxHAS_NATIVE_SPINCTRL + #include "wx/gtk1/spinctrl.h" +#elif defined(__WXMAC__) + #define wxHAS_NATIVE_SPINCTRL + #include "wx/osx/spinctrl.h" #endif // platform -#endif // _WX_SPINCTRL_H_ +#if !defined(wxHAS_NATIVE_SPINCTRL) || !defined(wxHAS_NATIVE_SPINCTRLDOUBLE) + #include "wx/generic/spinctlg.h" +#endif + +#endif // wxUSE_SPINCTRL +#endif // _WX_SPINCTRL_H_