1/////////////////////////////////////////////////////////////////////////////
2// Name:        wx/palmos/radiobox.h
3// Purpose:     wxRadioBox class
4// Author:      William Osborne - minimal working wxPalmOS port
5// Modified by: Wlodzimierz ABX Skiba - native wxRadioBox implementation
6// Created:     10/13/04
7// RCS-ID:      $Id: radiobox.h 42816 2006-10-31 08:50:17Z RD $
8// Copyright:   (c) William Osborne, Wlodzimierz Skiba
9// Licence:     wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_RADIOBOX_H_
13#define _WX_RADIOBOX_H_
14
15class WXDLLEXPORT wxBitmap;
16class WXDLLEXPORT wxRadioButton;
17
18// ----------------------------------------------------------------------------
19// wxRadioBox
20// ----------------------------------------------------------------------------
21
22class WXDLLEXPORT wxRadioBox : public wxControl, public wxRadioBoxBase
23{
24public:
25    wxRadioBox():m_radios(wxKEY_INTEGER,32)
26    {
27        Init();
28    }
29
30    wxRadioBox(wxWindow *parent,
31               wxWindowID id,
32               const wxString& title,
33               const wxPoint& pos = wxDefaultPosition,
34               const wxSize& size = wxDefaultSize,
35               int n = 0, const wxString choices[] = NULL,
36               int majorDim = 0,
37               long style = wxRA_SPECIFY_COLS,
38               const wxValidator& val = wxDefaultValidator,
39               const wxString& name = wxRadioBoxNameStr)
40              :m_radios(wxKEY_INTEGER,n+1)
41    {
42        Init();
43        (void)Create(parent, id, title, pos, size, n, choices, majorDim,
44                     style, val, name);
45    }
46
47    wxRadioBox(wxWindow *parent,
48               wxWindowID id,
49               const wxString& title,
50               const wxPoint& pos,
51               const wxSize& size,
52               const wxArrayString& choices,
53               int majorDim = 0,
54               long style = wxRA_SPECIFY_COLS,
55               const wxValidator& val = wxDefaultValidator,
56               const wxString& name = wxRadioBoxNameStr)
57              :m_radios(wxKEY_INTEGER,choices.GetCount()+1)
58    {
59        Init();
60        (void)Create(parent, id, title, pos, size, choices, majorDim,
61                     style, val, name);
62    }
63
64    virtual ~wxRadioBox();
65
66    bool Create(wxWindow *parent,
67                wxWindowID id,
68                const wxString& title,
69                const wxPoint& pos = wxDefaultPosition,
70                const wxSize& size = wxDefaultSize,
71                int n = 0, const wxString choices[] = NULL,
72                int majorDim = 0,
73                long style = wxRA_SPECIFY_COLS,
74                const wxValidator& val = wxDefaultValidator,
75                const wxString& name = wxRadioBoxNameStr);
76
77    bool Create(wxWindow *parent,
78                wxWindowID id,
79                const wxString& title,
80                const wxPoint& pos,
81                const wxSize& size,
82                const wxArrayString& choices,
83                int majorDim = 0,
84                long style = wxRA_SPECIFY_COLS,
85                const wxValidator& val = wxDefaultValidator,
86                const wxString& name = wxRadioBoxNameStr);
87
88    // Enabling
89    virtual bool Enable(bool enable = true);
90    virtual bool Enable(unsigned int n, bool enable = true);
91    virtual bool IsItemEnabled(unsigned int WXUNUSED(n)) const
92    {
93        /* TODO */
94        return true;
95    }
96
97    // Showing
98    virtual bool Show(bool show = true);
99    virtual bool Show(unsigned int n, bool show = true);
100    virtual bool IsItemShown(unsigned int WXUNUSED(n)) const
101    {
102        /* TODO */
103        return true;
104    }
105
106    // implement the radiobox interface
107    virtual void SetSelection(int n);
108    virtual int GetSelection() const;
109    virtual unsigned int GetCount() const;
110    virtual wxString GetString(unsigned int n) const;
111    virtual void SetString(unsigned int n, const wxString& label);
112
113    virtual void SetLabel(const wxString& label);
114    virtual wxString GetLabel();
115
116    virtual void DoGetPosition( int *x, int *y ) const;
117    virtual void DoGetSize( int *width, int *height ) const;
118    virtual void DoMoveWindow(int x, int y, int width, int height);
119
120    virtual wxPoint GetClientAreaOrigin() const;
121
122    void SetFocus();
123    void SetLabelFont(const wxFont& WXUNUSED(font)) {};
124    void SetButtonFont(const wxFont& font) { SetFont(font); }
125
126    virtual void Refresh( bool eraseBackground = true,
127                          const wxRect *rect = NULL );
128
129    void Command(wxCommandEvent& event);
130
131    int GetNumberOfRowsOrCols() const { return m_noRowsOrCols; }
132    void SetNumberOfRowsOrCols(int n) { m_noRowsOrCols = n; }
133
134    // implementation only from now on
135    // -------------------------------
136
137    virtual bool SetFont(const wxFont& font);
138
139    void SendNotificationEvent();
140
141protected:
142    // get the max size of radio buttons
143    wxSize GetMaxButtonSize() const;
144
145    // get the total size occupied by the radio box buttons
146    wxSize GetTotalButtonSize(const wxSize& sizeBtn) const;
147
148    int *m_radioWidth;  // for bitmaps
149    int *m_radioHeight;
150
151    int  m_noRowsOrCols;
152    int  m_selectedButton;
153
154    virtual wxSize DoGetBestSize() const;
155
156private:
157
158    void Init();
159    wxRadioButton *GetRadioButton(int i) const;
160
161    wxPoint m_pos;
162    wxSize m_size;
163    wxHashTable m_radios;
164
165    DECLARE_DYNAMIC_CLASS(wxRadioBox)
166    DECLARE_NO_COPY_CLASS(wxRadioBox)
167};
168
169#endif
170    // _WX_RADIOBOX_H_
171