1/////////////////////////////////////////////////////////////////////////////
2// Name:        wx/spinbutt.h
3// Purpose:     wxSpinButtonBase class
4// Author:      Julian Smart, Vadim Zeitlin
5// Modified by:
6// Created:     23.07.99
7// RCS-ID:      $Id: spinbutt.h 61872 2009-09-09 22:37:05Z VZ $
8// Copyright:   (c) Julian Smart
9// Licence:     wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_SPINBUTT_H_BASE_
13#define _WX_SPINBUTT_H_BASE_
14
15// ----------------------------------------------------------------------------
16// headers
17// ----------------------------------------------------------------------------
18
19#include "wx/defs.h"
20
21#if wxUSE_SPINBTN
22
23#include "wx/control.h"
24#include "wx/event.h"
25
26#define wxSPIN_BUTTON_NAME wxT("wxSpinButton")
27
28// ----------------------------------------------------------------------------
29//  The wxSpinButton is like a small scrollbar than is often placed next
30//  to a text control.
31//
32//  Styles:
33//  wxSP_HORIZONTAL:   horizontal spin button
34//  wxSP_VERTICAL:     vertical spin button (the default)
35//  wxSP_ARROW_KEYS:   arrow keys increment/decrement value
36//  wxSP_WRAP:         value wraps at either end
37// ----------------------------------------------------------------------------
38
39class WXDLLEXPORT wxSpinButtonBase : public wxControl
40{
41public:
42    // ctor initializes the range with the default (0..100) values
43    wxSpinButtonBase() { m_min = 0; m_max = 100; }
44
45    // accessors
46    virtual int GetValue() const = 0;
47    virtual int GetMin() const { return m_min; }
48    virtual int GetMax() const { return m_max; }
49
50    // operations
51    virtual void SetValue(int val) = 0;
52    virtual void SetMin(int minVal) { SetRange ( minVal , m_max ) ; }
53    virtual void SetMax(int maxVal) { SetRange ( m_min , maxVal ) ; }
54    virtual void SetRange(int minVal, int maxVal)
55    {
56        m_min = minVal;
57        m_max = maxVal;
58    }
59
60    // is this spin button vertically oriented?
61    bool IsVertical() const { return (m_windowStyle & wxSP_VERTICAL) != 0; }
62
63protected:
64    // the range value
65    int   m_min;
66    int   m_max;
67
68    DECLARE_NO_COPY_CLASS(wxSpinButtonBase)
69};
70
71// ----------------------------------------------------------------------------
72// include the declaration of the real class
73// ----------------------------------------------------------------------------
74
75#if defined(__WXUNIVERSAL__)
76    #include "wx/univ/spinbutt.h"
77#elif defined(__WXMSW__)
78    #include "wx/msw/spinbutt.h"
79#elif defined(__WXMOTIF__)
80    #include "wx/motif/spinbutt.h"
81#elif defined(__WXGTK20__)
82    #include "wx/gtk/spinbutt.h"
83#elif defined(__WXGTK__)
84    #include "wx/gtk1/spinbutt.h"
85#elif defined(__WXMAC__)
86    #include "wx/mac/spinbutt.h"
87#elif defined(__WXCOCOA__)
88    #include "wx/cocoa/spinbutt.h"
89#elif defined(__WXPM__)
90    #include "wx/os2/spinbutt.h"
91#endif
92
93// ----------------------------------------------------------------------------
94// the wxSpinButton event
95// ----------------------------------------------------------------------------
96
97class WXDLLEXPORT wxSpinEvent : public wxNotifyEvent
98{
99public:
100    wxSpinEvent(wxEventType commandType = wxEVT_NULL, int winid = 0)
101           : wxNotifyEvent(commandType, winid)
102    {
103    }
104
105    // get the current value of the control
106    int GetPosition() const { return m_commandInt; }
107    void SetPosition(int pos) { m_commandInt = pos; }
108
109private:
110    DECLARE_DYNAMIC_CLASS_NO_COPY(wxSpinEvent)
111};
112
113typedef void (wxEvtHandler::*wxSpinEventFunction)(wxSpinEvent&);
114
115#define wxSpinEventHandler(func) \
116    (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxSpinEventFunction, &func)
117
118// macros for handling spin events
119#define EVT_SPIN_UP(winid, func) \
120    wx__DECLARE_EVT1(wxEVT_SCROLL_LINEUP, winid, wxSpinEventHandler(func))
121#define EVT_SPIN_DOWN(winid, func) \
122    wx__DECLARE_EVT1(wxEVT_SCROLL_LINEDOWN, winid, wxSpinEventHandler(func))
123#define EVT_SPIN(winid, func) \
124    wx__DECLARE_EVT1(wxEVT_SCROLL_THUMBTRACK, winid, wxSpinEventHandler(func))
125
126#endif // wxUSE_SPINBTN
127
128#endif
129    // _WX_SPINBUTT_H_BASE_
130