1/////////////////////////////////////////////////////////////////////////////
2// Name:        wx/gtk/combobox.h
3// Purpose:
4// Author:      Robert Roebling
5// Created:     01/02/97
6// Id:          $Id: combobox.h 41020 2006-09-05 20:47:48Z VZ $
7// Copyright:   (c) 1998 Robert Roebling
8// Licence:     wxWindows licence
9/////////////////////////////////////////////////////////////////////////////
10
11#ifndef _WX_GTK_COMBOBOX_H_
12#define _WX_GTK_COMBOBOX_H_
13
14//-----------------------------------------------------------------------------
15// wxComboBox
16//-----------------------------------------------------------------------------
17
18class WXDLLIMPEXP_CORE wxComboBox : public wxControl, public wxComboBoxBase
19{
20public:
21    inline wxComboBox() {}
22    inline wxComboBox(wxWindow *parent, wxWindowID id,
23           const wxString& value = wxEmptyString,
24           const wxPoint& pos = wxDefaultPosition,
25           const wxSize& size = wxDefaultSize,
26           int n = 0, const wxString choices[] = (const wxString *) NULL,
27           long style = 0,
28           const wxValidator& validator = wxDefaultValidator,
29           const wxString& name = wxComboBoxNameStr)
30    {
31        Create(parent, id, value, pos, size, n, choices, style, validator, name);
32    }
33    inline wxComboBox(wxWindow *parent, wxWindowID id,
34           const wxString& value,
35           const wxPoint& pos,
36           const wxSize& size,
37           const wxArrayString& choices,
38           long style = 0,
39           const wxValidator& validator = wxDefaultValidator,
40           const wxString& name = wxComboBoxNameStr)
41    {
42        Create(parent, id, value, pos, size, choices, style, validator, name);
43    }
44
45    virtual ~wxComboBox();
46
47    bool Create(wxWindow *parent, wxWindowID id,
48           const wxString& value = wxEmptyString,
49           const wxPoint& pos = wxDefaultPosition,
50           const wxSize& size = wxDefaultSize,
51           int n = 0, const wxString choices[] = (const wxString *) NULL,
52           long style = 0,
53           const wxValidator& validator = wxDefaultValidator,
54           const wxString& name = wxComboBoxNameStr);
55    bool Create(wxWindow *parent, wxWindowID id,
56           const wxString& value,
57           const wxPoint& pos,
58           const wxSize& size,
59           const wxArrayString& choices,
60           long style = 0,
61           const wxValidator& validator = wxDefaultValidator,
62           const wxString& name = wxComboBoxNameStr);
63
64    // From wxItemContainerImmutable:
65    virtual unsigned int GetCount() const;
66    virtual wxString GetString(unsigned int n) const;
67    virtual void SetString(unsigned int n, const wxString &text);
68    virtual int FindString(const wxString& s, bool bCase = false) const;
69    virtual void SetSelection(int n);
70    virtual int GetSelection() const;
71    wxString GetStringSelection() const; // not a virtual in parent class
72
73    // From wxItemContainer:
74    virtual void Clear();
75    virtual void Delete(unsigned int n);
76
77    // From wxBomboBoxBase:
78    virtual wxString GetValue() const;
79    virtual void SetValue(const wxString& value);
80    virtual void Copy();
81    virtual void Cut();
82    virtual void Paste();
83    virtual void SetInsertionPoint( long pos );
84    virtual long GetInsertionPoint() const;
85    virtual wxTextPos GetLastPosition() const;
86    virtual void Replace( long from, long to, const wxString& value );
87    virtual void SetSelection( long from, long to );
88    virtual void SetEditable( bool editable );
89    virtual void SetInsertionPointEnd() { SetInsertionPoint( -1 ); }
90    virtual void Remove(long from, long to) { Replace(from, to, wxEmptyString); }
91    virtual bool IsEditable() const;
92    virtual void Undo();
93    virtual void Redo();
94    virtual void SelectAll();
95    virtual bool CanCopy() const;
96    virtual bool CanCut() const;
97    virtual bool CanPaste() const;
98    virtual bool CanUndo() const;
99    virtual bool CanRedo() const;
100
101    // implementation
102    bool HasSelection() const;
103    void GetSelection( long* from, long* to ) const;
104    int GetCurrentSelection() const;
105
106    virtual void SetFocus();
107
108    void OnSize( wxSizeEvent &event );
109    void OnChar( wxKeyEvent &event );
110
111    // Standard event handling
112    void OnCut(wxCommandEvent& event);
113    void OnCopy(wxCommandEvent& event);
114    void OnPaste(wxCommandEvent& event);
115    void OnUndo(wxCommandEvent& event);
116    void OnRedo(wxCommandEvent& event);
117    void OnDelete(wxCommandEvent& event);
118    void OnSelectAll(wxCommandEvent& event);
119
120    void OnUpdateCut(wxUpdateUIEvent& event);
121    void OnUpdateCopy(wxUpdateUIEvent& event);
122    void OnUpdatePaste(wxUpdateUIEvent& event);
123    void OnUpdateUndo(wxUpdateUIEvent& event);
124    void OnUpdateRedo(wxUpdateUIEvent& event);
125    void OnUpdateDelete(wxUpdateUIEvent& event);
126    void OnUpdateSelectAll(wxUpdateUIEvent& event);
127
128    bool     m_ignoreNextUpdate:1;
129    wxList   m_clientDataList;
130    wxList   m_clientObjectList;
131    int      m_prevSelection;
132
133    void DisableEvents();
134    void EnableEvents();
135    GtkWidget* GetConnectWidget();
136
137    wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST
138
139    static wxVisualAttributes
140    GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
141
142protected:
143    // From wxWindowGTK:
144    virtual void DoApplyWidgetStyle(GtkRcStyle *style);
145    virtual GdkWindow *GTKGetWindow(wxArrayGdkWindows& windows) const;
146
147    // From wxItemContainer:
148    virtual int DoAppend(const wxString& item);
149    virtual int DoInsert(const wxString& item, unsigned int pos);
150
151    virtual void DoSetItemClientData(unsigned int n, void* clientData);
152    virtual void* DoGetItemClientData(unsigned int n) const;
153    virtual void DoSetItemClientObject(unsigned int n, wxClientData* clientData);
154    virtual wxClientData* DoGetItemClientObject(unsigned int n) const;
155
156    // From wxControl:
157    virtual wxSize DoGetBestSize() const;
158
159    // Widgets that use the style->base colour for the BG colour should
160    // override this and return true.
161    virtual bool UseGTKStyleBase() const { return true; }
162
163private:
164    DECLARE_DYNAMIC_CLASS_NO_COPY(wxComboBox)
165    DECLARE_EVENT_TABLE()
166};
167
168#endif // _WX_GTK_COMBOBOX_H_
169