1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        wx/msw/radiobox.h
3 // Purpose:     wxRadioBox class
4 // Author:      Julian Smart
5 // Modified by:
6 // Created:     01/02/97
7 // RCS-ID:      $Id: radiobox.h 53135 2008-04-12 02:31:04Z VZ $
8 // Copyright:   (c) Julian Smart
9 // Licence:     wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11 
12 #ifndef _WX_RADIOBOX_H_
13 #define _WX_RADIOBOX_H_
14 
15 #include "wx/statbox.h"
16 
17 class WXDLLIMPEXP_FWD_CORE wxSubwindows;
18 
19 // ----------------------------------------------------------------------------
20 // wxRadioBox
21 // ----------------------------------------------------------------------------
22 
23 class WXDLLEXPORT wxRadioBox : public wxStaticBox, public wxRadioBoxBase
24 {
25 public:
wxRadioBox()26     wxRadioBox() { Init(); }
27 
28     wxRadioBox(wxWindow *parent,
29                wxWindowID id,
30                const wxString& title,
31                const wxPoint& pos = wxDefaultPosition,
32                const wxSize& size = wxDefaultSize,
33                int n = 0, const wxString choices[] = NULL,
34                int majorDim = 0,
35                long style = wxRA_HORIZONTAL,
36                const wxValidator& val = wxDefaultValidator,
37                const wxString& name = wxRadioBoxNameStr)
38     {
39         Init();
40 
41         (void)Create(parent, id, title, pos, size, n, choices, majorDim,
42                      style, val, name);
43     }
44 
45     wxRadioBox(wxWindow *parent,
46                wxWindowID id,
47                const wxString& title,
48                const wxPoint& pos,
49                const wxSize& size,
50                const wxArrayString& choices,
51                int majorDim = 0,
52                long style = wxRA_HORIZONTAL,
53                const wxValidator& val = wxDefaultValidator,
54                const wxString& name = wxRadioBoxNameStr)
55     {
56         Init();
57 
58         (void)Create(parent, id, title, pos, size, choices, majorDim,
59                      style, val, name);
60     }
61 
62     virtual ~wxRadioBox();
63 
64     bool Create(wxWindow *parent,
65                 wxWindowID id,
66                 const wxString& title,
67                 const wxPoint& pos = wxDefaultPosition,
68                 const wxSize& size = wxDefaultSize,
69                 int n = 0, const wxString choices[] = NULL,
70                 int majorDim = 0,
71                 long style = wxRA_HORIZONTAL,
72                 const wxValidator& val = wxDefaultValidator,
73                 const wxString& name = wxRadioBoxNameStr);
74     bool Create(wxWindow *parent,
75                 wxWindowID id,
76                 const wxString& title,
77                 const wxPoint& pos,
78                 const wxSize& size,
79                 const wxArrayString& choices,
80                 int majorDim = 0,
81                 long style = wxRA_HORIZONTAL,
82                 const wxValidator& val = wxDefaultValidator,
83                 const wxString& name = wxRadioBoxNameStr);
84 
85     // implement the radiobox interface
86     virtual void SetSelection(int n);
GetSelection()87     virtual int GetSelection() const { return m_selectedButton; }
88     virtual unsigned int GetCount() const;
89     virtual wxString GetString(unsigned int n) const;
90     virtual void SetString(unsigned int n, const wxString& label);
91     virtual bool Enable(unsigned int n, bool enable = true);
92     virtual bool Show(unsigned int n, bool show = true);
93     virtual bool IsItemEnabled(unsigned int n) const;
94     virtual bool IsItemShown(unsigned int n) const;
95     virtual int GetItemFromPoint(const wxPoint& pt) const;
96 
97     // override some base class methods
98     virtual bool Show(bool show = true);
99     virtual bool Enable(bool enable = true);
100     virtual void SetFocus();
101     virtual bool SetFont(const wxFont& font);
102     virtual bool ContainsHWND(WXHWND hWnd) const;
103 #if wxUSE_TOOLTIPS
104     virtual bool HasToolTips() const;
105 #endif // wxUSE_TOOLTIPS
106 #if wxUSE_HELP
107     // override virtual function with a platform-independent implementation
GetHelpTextAtPoint(const wxPoint & pt,wxHelpEvent::Origin origin)108     virtual wxString GetHelpTextAtPoint(const wxPoint & pt, wxHelpEvent::Origin origin) const
109     {
110         return wxRadioBoxBase::DoGetHelpTextAtPoint( this, pt, origin );
111     }
112 #endif // wxUSE_HELP
113 
114     virtual bool Reparent(wxWindowBase *newParent);
115 
116     // we inherit a version always returning false from wxStaticBox, override
117     // it to behave normally
AcceptsFocus()118     virtual bool AcceptsFocus() const { return wxControl::AcceptsFocus(); }
119 
SetLabelFont(const wxFont & WXUNUSED (font))120     void SetLabelFont(const wxFont& WXUNUSED(font)) {}
SetButtonFont(const wxFont & font)121     void SetButtonFont(const wxFont& font) { SetFont(font); }
122 
123     // implementation only from now on
124     // -------------------------------
125 
126     virtual bool MSWCommand(WXUINT param, WXWORD id);
127     void Command(wxCommandEvent& event);
128 
129     void SendNotificationEvent();
130 
131 protected:
132     // common part of all ctors
133     void Init();
134 
135     // subclass one radio button
136     void SubclassRadioButton(WXHWND hWndBtn);
137 
138     // get the max size of radio buttons
139     wxSize GetMaxButtonSize() const;
140 
141     // get the total size occupied by the radio box buttons
142     wxSize GetTotalButtonSize(const wxSize& sizeBtn) const;
143 
144     virtual void DoSetSize(int x, int y,
145                            int width, int height,
146                            int sizeFlags = wxSIZE_AUTO);
147     virtual wxSize DoGetBestSize() const;
148 
149 #if wxUSE_TOOLTIPS
150     virtual void DoSetItemToolTip(unsigned int n, wxToolTip * tooltip);
151 #endif
152 
153 #ifndef __WXWINCE__
154     virtual WXHRGN MSWGetRegionWithoutChildren();
155 #endif // __WXWINCE__
156 
157 
158     // the buttons we contain
159     wxSubwindows *m_radioButtons;
160 
161     // array of widths and heights of the buttons, may be wxDefaultCoord if the
162     // corresponding quantity should be computed
163     int *m_radioWidth;
164     int *m_radioHeight;
165 
166     // currently selected button or wxNOT_FOUND if none
167     int m_selectedButton;
168 
169 private:
170     DECLARE_DYNAMIC_CLASS(wxRadioBox)
171     DECLARE_NO_COPY_CLASS(wxRadioBox)
172 };
173 
174 #endif
175     // _WX_RADIOBOX_H_
176