Instead of checking for all text-like controls one by one in wxCommandEvent::GetString(), call a virtual function checking for this. This is simpler, less error-prone and faster -- at the cost of increasing the vtbl size of all wxWindow-derived classes. Closes https://github.com/wxWidgets/wxWidgets/pull/1696
		
			
				
	
	
		
			130 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        wx/srchctrl.h
 | |
| // Purpose:     wxSearchCtrlBase class
 | |
| // Author:      Vince Harron
 | |
| // Created:     2006-02-18
 | |
| // Copyright:   (c) Vince Harron
 | |
| // Licence:     wxWindows licence
 | |
| /////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #ifndef _WX_SEARCHCTRL_H_BASE_
 | |
| #define _WX_SEARCHCTRL_H_BASE_
 | |
| 
 | |
| #include "wx/defs.h"
 | |
| 
 | |
| #if wxUSE_SEARCHCTRL
 | |
| 
 | |
| #include "wx/textctrl.h"
 | |
| 
 | |
| #if (!defined(__WXMAC__) && !defined(__WXGTK20__)) || defined(__WXUNIVERSAL__)
 | |
|     // no native version, use the generic one
 | |
|     #define wxUSE_NATIVE_SEARCH_CONTROL 0
 | |
| 
 | |
|     #include "wx/compositewin.h"
 | |
|     #include "wx/containr.h"
 | |
| 
 | |
|     class WXDLLIMPEXP_CORE wxSearchCtrlBaseBaseClass
 | |
|         : public wxCompositeWindow< wxNavigationEnabled<wxControl> >,
 | |
|           public wxTextCtrlIface
 | |
|     {
 | |
|     };
 | |
| #elif defined(__WXMAC__)
 | |
|     // search control was introduced in Mac OS X 10.3 Panther
 | |
|     #define wxUSE_NATIVE_SEARCH_CONTROL 1
 | |
| 
 | |
|     #define wxSearchCtrlBaseBaseClass wxTextCtrl
 | |
| #elif defined(__WXGTK20__)
 | |
|     // Use GtkSearchEntry if available, construct a similar one using GtkEntry
 | |
|     // otherwise.
 | |
|     #define wxUSE_NATIVE_SEARCH_CONTROL 1
 | |
| 
 | |
|     class WXDLLIMPEXP_CORE wxGTKSearchCtrlBase
 | |
|         : public wxControl, public wxTextEntry
 | |
|     {
 | |
|     };
 | |
| 
 | |
|     #define wxSearchCtrlBaseBaseClass wxGTKSearchCtrlBase
 | |
| #endif
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // constants
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| extern WXDLLIMPEXP_DATA_CORE(const char) wxSearchCtrlNameStr[];
 | |
| 
 | |
| wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_SEARCH_CANCEL, wxCommandEvent);
 | |
| wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_SEARCH, wxCommandEvent);
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // a search ctrl is a text control with a search button and a cancel button
 | |
| // it is based on the MacOSX 10.3 control HISearchFieldCreate
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| class WXDLLIMPEXP_CORE wxSearchCtrlBase : public wxSearchCtrlBaseBaseClass
 | |
| {
 | |
| public:
 | |
|     wxSearchCtrlBase() { }
 | |
|     virtual ~wxSearchCtrlBase() { }
 | |
| 
 | |
|     // search control
 | |
| #if wxUSE_MENUS
 | |
|     virtual void SetMenu(wxMenu *menu) = 0;
 | |
|     virtual wxMenu *GetMenu() = 0;
 | |
| #endif // wxUSE_MENUS
 | |
| 
 | |
|     // get/set options
 | |
|     virtual void ShowSearchButton( bool show ) = 0;
 | |
|     virtual bool IsSearchButtonVisible() const = 0;
 | |
| 
 | |
|     virtual void ShowCancelButton( bool show ) = 0;
 | |
|     virtual bool IsCancelButtonVisible() const = 0;
 | |
| 
 | |
|     virtual void SetDescriptiveText(const wxString& text) = 0;
 | |
|     virtual wxString GetDescriptiveText() const = 0;
 | |
| 
 | |
| #if wxUSE_NATIVE_SEARCH_CONTROL
 | |
|     virtual const wxTextEntry* WXGetTextEntry() const wxOVERRIDE { return this; }
 | |
| #endif // wxUSE_NATIVE_SEARCH_CONTROL
 | |
| 
 | |
| private:
 | |
|     // implement wxTextEntry pure virtual method
 | |
|     virtual wxWindow *GetEditableWindow() wxOVERRIDE { return this; }
 | |
| };
 | |
| 
 | |
| 
 | |
| // include the platform-dependent class implementation
 | |
| #if wxUSE_NATIVE_SEARCH_CONTROL
 | |
|     #if defined(__WXMAC__)
 | |
|         #include "wx/osx/srchctrl.h"
 | |
|     #elif defined(__WXGTK__)
 | |
|         #include "wx/gtk/srchctrl.h"
 | |
|     #endif
 | |
| #else
 | |
|     #include "wx/generic/srchctlg.h"
 | |
| #endif
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // macros for handling search events
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| #define EVT_SEARCH_CANCEL(id, fn) \
 | |
|     wx__DECLARE_EVT1(wxEVT_SEARCH_CANCEL, id, wxCommandEventHandler(fn))
 | |
| 
 | |
| #define EVT_SEARCH(id, fn) \
 | |
|     wx__DECLARE_EVT1(wxEVT_SEARCH, id, wxCommandEventHandler(fn))
 | |
| 
 | |
| // old synonyms
 | |
| #define wxEVT_SEARCHCTRL_CANCEL_BTN wxEVT_SEARCH_CANCEL
 | |
| #define wxEVT_SEARCHCTRL_SEARCH_BTN wxEVT_SEARCH
 | |
| 
 | |
| #define EVT_SEARCHCTRL_CANCEL_BTN(id, fn) EVT_SEARCH_CANCEL(id, fn)
 | |
| #define EVT_SEARCHCTRL_SEARCH_BTN(id, fn) EVT_SEARCH(id, fn)
 | |
| 
 | |
| // even older wxEVT_COMMAND_* constants
 | |
| #define wxEVT_COMMAND_SEARCHCTRL_CANCEL_BTN   wxEVT_SEARCHCTRL_CANCEL_BTN
 | |
| #define wxEVT_COMMAND_SEARCHCTRL_SEARCH_BTN   wxEVT_SEARCHCTRL_SEARCH_BTN
 | |
| 
 | |
| #endif // wxUSE_SEARCHCTRL
 | |
| 
 | |
| #endif // _WX_SEARCHCTRL_H_BASE_
 |