]> git.saurik.com Git - wxWidgets.git/blame - samples/widgets/searchctrl.cpp
Don't move the insertion point if text didn't change in wxTextEntry.
[wxWidgets.git] / samples / widgets / searchctrl.cpp
CommitLineData
3f7f284d
RD
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$
ce00f59b 8// Copyright: (c) 2006
526954c5 9// Licence: wxWindows licence
3f7f284d
RD
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"
0bf0b6bb 34 #include "wx/statbox.h"
3f7f284d
RD
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; }
6a8d7937 75 virtual wxTextEntryBase *GetTextEntry() const { return m_srchCtrl; }
07d304d2 76 virtual void RecreateWidget();
3f7f284d
RD
77
78 // lazy creation of the content
79 virtual void CreateContent();
80
81protected:
82
83 void OnToggleSearchButton(wxCommandEvent&);
84 void OnToggleCancelButton(wxCommandEvent&);
85 void OnToggleSearchMenu(wxCommandEvent&);
86
ac63bc40
VZ
87 void OnSearch(wxCommandEvent& event);
88
3f7f284d 89 wxMenu* CreateTestMenu();
ce00f59b 90
3f7f284d
RD
91 // (re)create the control
92 void CreateControl();
93
ce00f59b 94
3f7f284d
RD
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)
ac63bc40
VZ
113
114 EVT_SEARCHCTRL_SEARCH_BTN(wxID_ANY, SearchCtrlWidgetsPage::OnSearch)
3f7f284d
RD
115END_EVENT_TABLE()
116
117// ============================================================================
118// implementation
119// ============================================================================
120
121#if defined(__WXMAC__)
122 #define FAMILY_CTRLS NATIVE_CTRLS
123#else
124 #define FAMILY_CTRLS GENERIC_CTRLS
125#endif
126
9a83f860 127IMPLEMENT_WIDGETS_PAGE(SearchCtrlWidgetsPage, wxT("SearchCtrl"),
8138b9a4 128 FAMILY_CTRLS | EDITABLE_CTRLS | ALL_CTRLS);
3f7f284d
RD
129
130SearchCtrlWidgetsPage::SearchCtrlWidgetsPage(WidgetsBookCtrl *book,
131 wxImageList *imaglist)
132 : WidgetsPage(book, imaglist, text_xpm)
133{
134}
135
136void SearchCtrlWidgetsPage::CreateContent()
137{
138 m_srchCtrl = NULL;
139
3f7f284d
RD
140 CreateControl();
141
142
143 wxSizer* box = new wxStaticBoxSizer(
144 new wxStaticBox(this, -1, wxT("Options")),
145 wxVERTICAL);
146
147 m_searchBtnCheck = new wxCheckBox(this, ID_SEARCH_CB, wxT("Search button"));
148 m_cancelBtnCheck = new wxCheckBox(this, ID_CANCEL_CB, wxT("Cancel button"));
149 m_menuBtnCheck = new wxCheckBox(this, ID_MENU_CB, wxT("Search menu"));
150
151 m_searchBtnCheck->SetValue(true);
ce00f59b 152
3f7f284d
RD
153 box->Add(m_searchBtnCheck, 0, wxALL, 5);
154 box->Add(m_cancelBtnCheck, 0, wxALL, 5);
155 box->Add(m_menuBtnCheck, 0, wxALL, 5);
156
157 wxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
158 sizer->Add(box, 0, wxALL|wxEXPAND, 15);
159 sizer->Add(m_srchCtrl, 0, wxALL|wxALIGN_CENTER, 15);
160
161 SetSizer(sizer);
162}
163
164void SearchCtrlWidgetsPage::CreateControl()
165{
166 if (m_srchCtrl)
167 m_srchCtrl->Destroy();
168
169 int style = 0;
ce00f59b 170
3f7f284d
RD
171 m_srchCtrl = new wxSearchCtrl(this, -1, wxEmptyString, wxDefaultPosition,
172 wxSize(150, -1), style);
173}
174
07d304d2
VZ
175void SearchCtrlWidgetsPage::RecreateWidget()
176{
177 CreateControl();
178
179 GetSizer()->Add(m_srchCtrl, wxSizerFlags().Centre().TripleBorder());
180
181 Layout();
182}
3f7f284d
RD
183
184wxMenu* SearchCtrlWidgetsPage::CreateTestMenu()
185{
186 wxMenu* menu = new wxMenu;
187 const int SEARCH_MENU_SIZE = 5;
9a83f860 188 wxMenuItem* menuItem = menu->Append(wxID_ANY, wxT("Recent Searches"), wxT(""), wxITEM_NORMAL);
3f7f284d
RD
189 menuItem->Enable(false);
190 for ( int i = 0; i < SEARCH_MENU_SIZE; i++ )
191 {
192 wxString itemText = wxString::Format(wxT("item %i"),i);
193 wxString tipText = wxString::Format(wxT("tip %i"),i);
194 menu->Append(ID_SEARCHMENU+i, itemText, tipText, wxITEM_NORMAL);
195 }
ce00f59b 196// target->Connect(
3f7f284d
RD
197// ID_SEARCHMENU,
198// ID_SEARCHMENU+SEARCH_MENU_SIZE,
199// wxEVT_COMMAND_MENU_SELECTED,
200// wxCommandEventHandler(MySearchCtrl::OnSearchMenu)
201// );
202 return menu;
203}
204
205
206// ----------------------------------------------------------------------------
207// event handlers
208// ----------------------------------------------------------------------------
209
210void SearchCtrlWidgetsPage::OnToggleSearchButton(wxCommandEvent&)
211{
ec184e32 212 m_srchCtrl->ShowSearchButton( m_searchBtnCheck->GetValue() );
3f7f284d
RD
213}
214
215void SearchCtrlWidgetsPage::OnToggleCancelButton(wxCommandEvent&)
216{
ec184e32 217 m_srchCtrl->ShowCancelButton( m_cancelBtnCheck->GetValue() );
ce00f59b 218
3f7f284d
RD
219}
220
221void SearchCtrlWidgetsPage::OnToggleSearchMenu(wxCommandEvent&)
222{
223 if ( m_menuBtnCheck->GetValue() )
224 m_srchCtrl->SetMenu( CreateTestMenu() );
225 else
226 m_srchCtrl->SetMenu(NULL);
227}
228
ac63bc40
VZ
229void SearchCtrlWidgetsPage::OnSearch(wxCommandEvent& event)
230{
231 wxLogMessage("Search button: search for \"%s\".", event.GetString());
232}
3f7f284d
RD
233
234#endif // wxUSE_SEARCHCTRL