searchctrl.cpp 6.7 KB

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