1/////////////////////////////////////////////////////////////////////////////
2// Program:     wxWidgets Widgets Sample
3// Name:        searchctrl.cpp
4// Purpose:     Shows wxSearchCtrl
5// Author:      Robin Dunn
6// Created:     9-Dec-2006
7// Id:          $Id: searchctrl.cpp 43924 2006-12-11 13:48:18Z VZ $
8// Copyright:   (c) 2006
9// License:     wxWindows license
10/////////////////////////////////////////////////////////////////////////////
11
12// ============================================================================
13// declarations
14// ============================================================================
15
16// ----------------------------------------------------------------------------
17// headers
18// ----------------------------------------------------------------------------
19
20// for compilers that support precompilation, includes "wx/wx.h".
21#include "wx/wxprec.h"
22
23#ifdef __BORLANDC__
24    #pragma hdrstop
25#endif
26
27#if wxUSE_SEARCHCTRL
28
29// for all others, include the necessary headers
30#ifndef WX_PRECOMP
31    #include "wx/app.h"
32    #include "wx/log.h"
33    #include "wx/radiobox.h"
34    #include "wx/statbox.h"
35#endif
36
37#include "wx/artprov.h"
38#include "wx/sizer.h"
39#include "wx/stattext.h"
40#include "wx/checkbox.h"
41#include "wx/menu.h"
42
43#include "wx/srchctrl.h"
44
45#include "widgets.h"
46
47#include "icons/text.xpm"
48
49// ----------------------------------------------------------------------------
50// constants
51// ----------------------------------------------------------------------------
52
53// control ids
54enum
55{
56     ID_SEARCH_CB = wxID_HIGHEST,
57     ID_CANCEL_CB,
58     ID_MENU_CB,
59
60     ID_SEARCHMENU
61};
62
63
64// ----------------------------------------------------------------------------
65// ColourPickerWidgetsPage
66// ----------------------------------------------------------------------------
67
68class SearchCtrlWidgetsPage : public WidgetsPage
69{
70public:
71    SearchCtrlWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist);
72    virtual ~SearchCtrlWidgetsPage(){};
73
74    virtual wxControl *GetWidget() const { return m_srchCtrl; }
75    virtual void RecreateWidget() { CreateControl(); }
76
77    // lazy creation of the content
78    virtual void CreateContent();
79
80protected:
81
82    void OnToggleSearchButton(wxCommandEvent&);
83    void OnToggleCancelButton(wxCommandEvent&);
84    void OnToggleSearchMenu(wxCommandEvent&);
85
86    wxMenu* CreateTestMenu();
87
88    // (re)create the control
89    void CreateControl();
90
91    // reset the control parameters
92    void Reset();
93
94
95    wxSearchCtrl*       m_srchCtrl;
96    wxCheckBox*         m_searchBtnCheck;
97    wxCheckBox*         m_cancelBtnCheck;
98    wxCheckBox*         m_menuBtnCheck;
99
100private:
101    DECLARE_EVENT_TABLE()
102    DECLARE_WIDGETS_PAGE(SearchCtrlWidgetsPage)
103};
104
105// ----------------------------------------------------------------------------
106// event tables
107// ----------------------------------------------------------------------------
108
109BEGIN_EVENT_TABLE(SearchCtrlWidgetsPage, WidgetsPage)
110    EVT_CHECKBOX(ID_SEARCH_CB, SearchCtrlWidgetsPage::OnToggleSearchButton)
111    EVT_CHECKBOX(ID_CANCEL_CB, SearchCtrlWidgetsPage::OnToggleCancelButton)
112    EVT_CHECKBOX(ID_MENU_CB, SearchCtrlWidgetsPage::OnToggleSearchMenu)
113END_EVENT_TABLE()
114
115// ============================================================================
116// implementation
117// ============================================================================
118
119#if defined(__WXMAC__)
120    #define FAMILY_CTRLS NATIVE_CTRLS
121#else
122    #define FAMILY_CTRLS GENERIC_CTRLS
123#endif
124
125IMPLEMENT_WIDGETS_PAGE(SearchCtrlWidgetsPage, _T("SearchCtrl"),
126                       FAMILY_CTRLS | EDITABLE_CTRLS | ALL_CTRLS);
127
128SearchCtrlWidgetsPage::SearchCtrlWidgetsPage(WidgetsBookCtrl *book,
129                                     wxImageList *imaglist)
130                  : WidgetsPage(book, imaglist, text_xpm)
131{
132}
133
134void SearchCtrlWidgetsPage::CreateContent()
135{
136    m_srchCtrl = NULL;
137
138    Reset();
139    CreateControl();
140
141
142    wxSizer* box = new wxStaticBoxSizer(
143        new wxStaticBox(this, -1, wxT("Options")),
144        wxVERTICAL);
145
146    m_searchBtnCheck = new wxCheckBox(this, ID_SEARCH_CB, wxT("Search button"));
147    m_cancelBtnCheck = new wxCheckBox(this, ID_CANCEL_CB, wxT("Cancel button"));
148    m_menuBtnCheck   = new wxCheckBox(this, ID_MENU_CB,   wxT("Search menu"));
149
150    m_searchBtnCheck->SetValue(true);
151
152    box->Add(m_searchBtnCheck, 0, wxALL, 5);
153    box->Add(m_cancelBtnCheck, 0, wxALL, 5);
154    box->Add(m_menuBtnCheck,   0, wxALL, 5);
155
156    wxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
157    sizer->Add(box, 0,  wxALL|wxEXPAND, 15);
158    sizer->Add(m_srchCtrl, 0, wxALL|wxALIGN_CENTER, 15);
159
160    SetSizer(sizer);
161}
162
163void SearchCtrlWidgetsPage::CreateControl()
164{
165    if (m_srchCtrl)
166        m_srchCtrl->Destroy();
167
168    int style = 0;
169
170    m_srchCtrl = new wxSearchCtrl(this, -1, wxEmptyString, wxDefaultPosition,
171                                  wxSize(150, -1), style);
172}
173
174void SearchCtrlWidgetsPage::Reset()
175{
176}
177
178
179wxMenu* SearchCtrlWidgetsPage::CreateTestMenu()
180{
181    wxMenu* menu = new wxMenu;
182    const int SEARCH_MENU_SIZE = 5;
183    wxMenuItem* menuItem = menu->Append(wxID_ANY, _T("Recent Searches"), wxT(""), wxITEM_NORMAL);
184    menuItem->Enable(false);
185    for ( int i = 0; i < SEARCH_MENU_SIZE; i++ )
186    {
187        wxString itemText = wxString::Format(wxT("item %i"),i);
188        wxString tipText = wxString::Format(wxT("tip %i"),i);
189        menu->Append(ID_SEARCHMENU+i, itemText, tipText, wxITEM_NORMAL);
190    }
191//     target->Connect(
192//         ID_SEARCHMENU,
193//         ID_SEARCHMENU+SEARCH_MENU_SIZE,
194//         wxEVT_COMMAND_MENU_SELECTED,
195//         wxCommandEventHandler(MySearchCtrl::OnSearchMenu)
196//         );
197    return menu;
198}
199
200
201// ----------------------------------------------------------------------------
202// event handlers
203// ----------------------------------------------------------------------------
204
205void SearchCtrlWidgetsPage::OnToggleSearchButton(wxCommandEvent&)
206{
207    m_srchCtrl->ShowSearchButton( m_searchBtnCheck->GetValue() );
208}
209
210void SearchCtrlWidgetsPage::OnToggleCancelButton(wxCommandEvent&)
211{
212    m_srchCtrl->ShowCancelButton( m_cancelBtnCheck->GetValue() );
213
214}
215
216void SearchCtrlWidgetsPage::OnToggleSearchMenu(wxCommandEvent&)
217{
218    if ( m_menuBtnCheck->GetValue() )
219        m_srchCtrl->SetMenu( CreateTestMenu() );
220    else
221        m_srchCtrl->SetMenu(NULL);
222}
223
224
225#endif  //  wxUSE_SEARCHCTRL
226