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
17class WXDLLIMPEXP_FWD_CORE wxSubwindows;
18
19// ----------------------------------------------------------------------------
20// wxRadioBox
21// ----------------------------------------------------------------------------
22
23class WXDLLEXPORT wxRadioBox : public wxStaticBox, public wxRadioBoxBase
24{
25public:
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);
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
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
118    virtual bool AcceptsFocus() const { return wxControl::AcceptsFocus(); }
119
120    void SetLabelFont(const wxFont& WXUNUSED(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
131protected:
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
169private:
170    DECLARE_DYNAMIC_CLASS(wxRadioBox)
171    DECLARE_NO_COPY_CLASS(wxRadioBox)
172};
173
174#endif
175    // _WX_RADIOBOX_H_
176