Set the string to search for in wxSearchCtrl events.

It's more convenient to have the string to search for directly in the event
object than to retrieve it from wxSearchCtrl itself as it had to be done
before.

Closes #4665.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64886 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2010-07-11 10:44:18 +00:00
parent 68abd97d19
commit ac63bc407e
4 changed files with 25 additions and 1 deletions

View File

@@ -44,7 +44,10 @@
just as you would with wxTextCtrl. just as you would with wxTextCtrl.
@event{EVT_SEARCHCTRL_SEARCH_BTN(id, func)} @event{EVT_SEARCHCTRL_SEARCH_BTN(id, func)}
Respond to a wxEVT_SEARCHCTRL_SEARCH_BTN event, generated when the Respond to a wxEVT_SEARCHCTRL_SEARCH_BTN event, generated when the
search button is clicked. Note that this does not initiate a search. search button is clicked. Note that this does not initiate a search on
its own, you need to perform the appropriate action in your event
handler. You may use @code event.GetString() @endcode to retrieve the
string to search for in the event handler code.
@event{EVT_SEARCHCTRL_CANCEL_BTN(id, func)} @event{EVT_SEARCHCTRL_CANCEL_BTN(id, func)}
Respond to a wxEVT_SEARCHCTRL_CANCEL_BTN event, generated when the Respond to a wxEVT_SEARCHCTRL_CANCEL_BTN event, generated when the
cancel button is clicked. cancel button is clicked.

View File

@@ -84,6 +84,8 @@ protected:
void OnToggleCancelButton(wxCommandEvent&); void OnToggleCancelButton(wxCommandEvent&);
void OnToggleSearchMenu(wxCommandEvent&); void OnToggleSearchMenu(wxCommandEvent&);
void OnSearch(wxCommandEvent& event);
wxMenu* CreateTestMenu(); wxMenu* CreateTestMenu();
// (re)create the control // (re)create the control
@@ -111,6 +113,8 @@ BEGIN_EVENT_TABLE(SearchCtrlWidgetsPage, WidgetsPage)
EVT_CHECKBOX(ID_SEARCH_CB, SearchCtrlWidgetsPage::OnToggleSearchButton) EVT_CHECKBOX(ID_SEARCH_CB, SearchCtrlWidgetsPage::OnToggleSearchButton)
EVT_CHECKBOX(ID_CANCEL_CB, SearchCtrlWidgetsPage::OnToggleCancelButton) EVT_CHECKBOX(ID_CANCEL_CB, SearchCtrlWidgetsPage::OnToggleCancelButton)
EVT_CHECKBOX(ID_MENU_CB, SearchCtrlWidgetsPage::OnToggleSearchMenu) EVT_CHECKBOX(ID_MENU_CB, SearchCtrlWidgetsPage::OnToggleSearchMenu)
EVT_SEARCHCTRL_SEARCH_BTN(wxID_ANY, SearchCtrlWidgetsPage::OnSearch)
END_EVENT_TABLE() END_EVENT_TABLE()
// ============================================================================ // ============================================================================
@@ -222,5 +226,9 @@ void SearchCtrlWidgetsPage::OnToggleSearchMenu(wxCommandEvent&)
m_srchCtrl->SetMenu(NULL); m_srchCtrl->SetMenu(NULL);
} }
void SearchCtrlWidgetsPage::OnSearch(wxCommandEvent& event)
{
wxLogMessage("Search button: search for \"%s\".", event.GetString());
}
#endif // wxUSE_SEARCHCTRL #endif // wxUSE_SEARCHCTRL

View File

@@ -242,6 +242,14 @@ protected:
wxCommandEvent event(m_eventType, m_search->GetId()); wxCommandEvent event(m_eventType, m_search->GetId());
event.SetEventObject(m_search); event.SetEventObject(m_search);
if ( m_eventType == wxEVT_COMMAND_SEARCHCTRL_SEARCH_BTN )
{
// it's convenient to have the string to search for directly in the
// event instead of having to retrieve it from the control in the
// event handler code later, so provide it here
event.SetString(m_search->GetValue());
}
GetEventHandler()->ProcessEvent(event); GetEventHandler()->ProcessEvent(event);
m_search->SetFocus(); m_search->SetFocus();

View File

@@ -205,6 +205,11 @@ bool wxSearchCtrl::HandleSearchFieldSearchHit()
{ {
wxCommandEvent event(wxEVT_COMMAND_SEARCHCTRL_SEARCH_BTN, m_windowId ); wxCommandEvent event(wxEVT_COMMAND_SEARCHCTRL_SEARCH_BTN, m_windowId );
event.SetEventObject(this); event.SetEventObject(this);
// provide the string to search for directly in the event, this is more
// convenient than retrieving it from the control in event handler code
event.SetString(GetValue());
return ProcessCommand(event); return ProcessCommand(event);
} }