From 6646ca90e801375fa3ce36206e02f76f202e13c6 Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Fri, 19 Jan 2007 05:27:16 +0000 Subject: [PATCH] Added wxSearchCtrl::[Get|Set]DescriptiveText Tweaked the layout of the subcontrols a bit Lightened the icons to be more like Mac git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44257 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/generic/srchctlg.h | 6 ++ include/wx/mac/carbon/srchctrl.h | 6 ++ src/generic/srchctlg.cpp | 138 ++++++++++++++++++++++++---- src/mac/carbon/srchctrl.cpp | 36 ++++++++ version-script.in | 2 + wxPython/src/_srchctrl.i | 16 ++++ wxPython/src/gtk/_controls.py | 19 ++++ wxPython/src/gtk/_controls_wrap.cpp | 84 +++++++++++++++++ wxPython/src/mac/_controls.py | 19 ++++ wxPython/src/mac/_controls_wrap.cpp | 84 +++++++++++++++++ wxPython/src/msw/_controls.py | 19 ++++ wxPython/src/msw/_controls_wrap.cpp | 84 +++++++++++++++++ 12 files changed, 493 insertions(+), 20 deletions(-) diff --git a/include/wx/generic/srchctlg.h b/include/wx/generic/srchctlg.h index 690048098d..d9f42af826 100644 --- a/include/wx/generic/srchctlg.h +++ b/include/wx/generic/srchctlg.h @@ -60,6 +60,12 @@ public: virtual void ShowCancelButton( bool show ); virtual bool IsCancelButtonVisible() const; +#if wxABI_VERSION >= 20802 + // TODO: In 2.9 these should probably be virtual, and declared in the base class... + void SetDescriptiveText(const wxString& text); + wxString GetDescriptiveText() const; +#endif + // accessors // --------- diff --git a/include/wx/mac/carbon/srchctrl.h b/include/wx/mac/carbon/srchctrl.h index 6c3f2496a2..7b368aa206 100644 --- a/include/wx/mac/carbon/srchctrl.h +++ b/include/wx/mac/carbon/srchctrl.h @@ -53,6 +53,12 @@ public: virtual void ShowCancelButton( bool show ); virtual bool IsCancelButtonVisible() const; +#if wxABI_VERSION >= 20802 + // TODO: In 2.9 these should probably be virtual, and declared in the base class... + void SetDescriptiveText(const wxString& text); + wxString GetDescriptiveText() const; +#endif + virtual wxInt32 MacSearchFieldSearchHit( WXEVENTHANDLERREF handler , WXEVENTREF event ) ; virtual wxInt32 MacSearchFieldCancelHit( WXEVENTHANDLERREF handler , WXEVENTREF event ) ; diff --git a/src/generic/srchctlg.cpp b/src/generic/srchctlg.cpp index 8edf081475..b40557a724 100644 --- a/src/generic/srchctlg.cpp +++ b/src/generic/srchctlg.cpp @@ -50,6 +50,57 @@ static const wxCoord ICON_MARGIN = 0; static const wxCoord ICON_OFFSET = 0; #endif +// ---------------------------------------------------------------------------- +// TODO: These functions or something like them should probably be made +// public. There are similar functions in src/aui/dockart.cpp... + +static double wxBlendColour(double fg, double bg, double alpha) +{ + double result = bg + (alpha * (fg - bg)); + if (result < 0.0) + result = 0.0; + if (result > 255) + result = 255; + return result; +} + +static wxColor wxStepColour(const wxColor& c, int ialpha) +{ + if (ialpha == 100) + return c; + + double r = c.Red(), g = c.Green(), b = c.Blue(); + double bg; + + // ialpha is 0..200 where 0 is completely black + // and 200 is completely white and 100 is the same + // convert that to normal alpha 0.0 - 1.0 + ialpha = wxMin(ialpha, 200); + ialpha = wxMax(ialpha, 0); + double alpha = ((double)(ialpha - 100.0))/100.0; + + if (ialpha > 100) + { + // blend with white + bg = 255.0; + alpha = 1.0 - alpha; // 0 = transparent fg; 1 = opaque fg + } + else + { + // blend with black + bg = 0.0; + alpha = 1.0 + alpha; // 0 = transparent fg; 1 = opaque fg + } + + r = wxBlendColour(r, bg, alpha); + g = wxBlendColour(g, bg, alpha); + b = wxBlendColour(b, bg, alpha); + + return wxColour((unsigned char)r, (unsigned char)g, (unsigned char)b); +} + +#define LIGHT_STEP 160 + // ---------------------------------------------------------------------------- // wxSearchTextCtrl: text control used by search control // ---------------------------------------------------------------------------- @@ -62,11 +113,27 @@ public: style | wxNO_BORDER) { m_search = search; - + m_defaultFG = GetForegroundColour(); + // remove the default minsize, the searchctrl will have one instead SetSizeHints(wxDefaultCoord,wxDefaultCoord); } + void SetDescriptiveText(const wxString& text) + { + if ( GetValue() == m_descriptiveText ) + { + SetValue(wxEmptyString); + } + + m_descriptiveText = text; + } + + wxString GetDescriptiveText() const + { + return m_descriptiveText; + } + protected: void OnText(wxCommandEvent& eventText) { @@ -92,9 +159,31 @@ protected: m_search->GetEventHandler()->ProcessEvent(event); } + void OnIdle(wxIdleEvent& WXUNUSED(event)) + { + if ( IsEmpty() && !(wxWindow::FindFocus() == this) ) + { + SetValue(m_descriptiveText); + SetInsertionPoint(0); + SetForegroundColour(wxStepColour(m_defaultFG, LIGHT_STEP)); + } + } + + void OnFocus(wxFocusEvent& event) + { + event.Skip(); + if ( GetValue() == m_descriptiveText ) + { + SetValue(wxEmptyString); + SetForegroundColour(m_defaultFG); + } + } + private: wxSearchCtrl* m_search; - + wxString m_descriptiveText; + wxColour m_defaultFG; + DECLARE_EVENT_TABLE() }; @@ -103,6 +192,8 @@ BEGIN_EVENT_TABLE(wxSearchTextCtrl, wxTextCtrl) EVT_TEXT_ENTER(wxID_ANY, wxSearchTextCtrl::OnText) EVT_TEXT_URL(wxID_ANY, wxSearchTextCtrl::OnTextUrl) EVT_TEXT_MAXLEN(wxID_ANY, wxSearchTextCtrl::OnText) + EVT_IDLE(wxSearchTextCtrl::OnIdle) + EVT_SET_FOCUS(wxSearchTextCtrl::OnFocus) END_EVENT_TABLE() // ---------------------------------------------------------------------------- @@ -234,7 +325,8 @@ bool wxSearchCtrl::Create(wxWindow *parent, wxWindowID id, } m_text = new wxSearchTextCtrl(this, value, style & ~wxBORDER_MASK); - + m_text->SetDescriptiveText(_("Search")); + wxSize sizeText = m_text->GetBestSize(); m_searchButton = new wxSearchButton(this,wxEVT_COMMAND_SEARCHCTRL_SEARCH_BTN,m_searchBitmap); @@ -280,12 +372,6 @@ void wxSearchCtrl::SetMenu( wxMenu* menu ) { m_searchButton->SetBitmapLabel(m_searchMenuBitmap); m_searchButton->Refresh(); - if ( !m_searchButtonVisible ) - { - // adding the menu will force the search button to be visible - wxRect rect = GetRect(); - LayoutControls(0, 0, rect.GetWidth(), rect.GetHeight()); - } } else if ( !m_menu && hadMenu ) { @@ -294,12 +380,9 @@ void wxSearchCtrl::SetMenu( wxMenu* menu ) { m_searchButton->Refresh(); } - else - { - wxRect rect = GetRect(); - LayoutControls(0, 0, rect.GetWidth(), rect.GetHeight()); - } } + wxRect rect = GetRect(); + LayoutControls(0, 0, rect.GetWidth(), rect.GetHeight()); } wxMenu* wxSearchCtrl::GetMenu() @@ -348,6 +431,15 @@ bool wxSearchCtrl::IsCancelButtonVisible() const return m_cancelButtonVisible; } +void wxSearchCtrl::SetDescriptiveText(const wxString& text) +{ + m_text->SetDescriptiveText(text); +} + +wxString wxSearchCtrl::GetDescriptiveText() const +{ + return m_text->GetDescriptiveText(); +} // ---------------------------------------------------------------------------- // geometry @@ -393,7 +485,7 @@ void wxSearchCtrl::LayoutControls(int x, int y, int width, int height) wxSize sizeText = m_text->GetBestSize(); // make room for the search menu & clear button - int horizontalBorder = 1 + ( sizeText.y - sizeText.y * 14 / 21 ) / 2; + int horizontalBorder = ( sizeText.y - sizeText.y * 14 / 21 ) / 2; x += horizontalBorder; y += BORDER; width -= horizontalBorder*2; @@ -427,13 +519,13 @@ void wxSearchCtrl::LayoutControls(int x, int y, int width, int height) // position the subcontrols inside the client area - m_searchButton->SetSize(x, y + ICON_OFFSET, sizeSearch.x, height); + m_searchButton->SetSize(x, y + ICON_OFFSET - 1, sizeSearch.x, height); m_text->SetSize( x + sizeSearch.x + searchMargin, y + ICON_OFFSET - BORDER, textWidth, height); m_cancelButton->SetSize(x + sizeSearch.x + searchMargin + textWidth + cancelMargin, - y + ICON_OFFSET, sizeCancel.x, height); + y + ICON_OFFSET - 1, sizeCancel.x, height); } @@ -811,7 +903,7 @@ static int GetMultiplier() wxBitmap wxSearchCtrl::RenderSearchBitmap( int x, int y, bool renderDrop ) { wxColour bg = GetBackgroundColour(); - wxColour fg = GetForegroundColour(); + wxColour fg = wxStepColour(GetForegroundColour(), LIGHT_STEP-20); //=============================================================================== // begin drawing code @@ -892,7 +984,8 @@ wxBitmap wxSearchCtrl::RenderSearchBitmap( int x, int y, bool renderDrop ) }; mem.DrawPolygon(WXSIZEOF(dropPolygon),dropPolygon,multiplier*triangleX,multiplier*triangleY); } - + mem.SelectObject(wxNullBitmap); + //=============================================================================== // end drawing code //=============================================================================== @@ -903,6 +996,11 @@ wxBitmap wxSearchCtrl::RenderSearchBitmap( int x, int y, bool renderDrop ) image.Rescale(x,y); bitmap = wxBitmap( image ); } + if ( !renderDrop ) + { + // Trim the edge where the arrow would have gone + bitmap = bitmap.GetSubBitmap(wxRect(0,0, y,y)); + } return bitmap; } @@ -910,7 +1008,7 @@ wxBitmap wxSearchCtrl::RenderSearchBitmap( int x, int y, bool renderDrop ) wxBitmap wxSearchCtrl::RenderCancelBitmap( int x, int y ) { wxColour bg = GetBackgroundColour(); - wxColour fg = GetForegroundColour(); + wxColour fg = wxStepColour(GetForegroundColour(), LIGHT_STEP); //=============================================================================== // begin drawing code diff --git a/src/mac/carbon/srchctrl.cpp b/src/mac/carbon/srchctrl.cpp index 223ed8fcb1..3fcb8d7d66 100644 --- a/src/mac/carbon/srchctrl.cpp +++ b/src/mac/carbon/srchctrl.cpp @@ -68,6 +68,10 @@ public : virtual void SetSearchMenu( wxMenu* menu ); virtual wxMenu* GetSearchMenu() const; + + virtual void SetDescriptiveText(const wxString& text); + virtual wxString GetDescriptiveText() const; + protected : virtual void CreateControl( wxTextCtrl* peer, const Rect* bounds, CFStringRef crf ); @@ -167,6 +171,28 @@ wxMenu* wxMacSearchFieldControl::GetSearchMenu() const return m_menu; } + +void wxMacSearchFieldControl::SetDescriptiveText(const wxString& text) +{ + verify_noerr( HISearchFieldSetDescriptiveText( + m_controlRef, + wxMacCFStringHolder( text, wxFont::GetDefaultEncoding() ))); +} + +wxString wxMacSearchFieldControl::GetDescriptiveText() const +{ + CFStringRef cfStr; + verify_noerr( HISearchFieldCopyDescriptiveText( m_controlRef, &cfStr )); + if ( cfStr ) + { + return wxMacCFStringHolder(cfStr).AsString(); + } + else + { + return wxEmptyString; + } +} + #endif // ============================================================================ @@ -351,6 +377,16 @@ bool wxSearchCtrl::IsCancelButtonVisible() const return GetPeer()->IsCancelButtonVisible(); } +void wxSearchCtrl::SetDescriptiveText(const wxString& text) +{ + GetPeer()->SetDescriptiveText(text); +} + +wxString wxSearchCtrl::GetDescriptiveText() const +{ + return GetPeer()->GetDescriptiveText(); +} + wxInt32 wxSearchCtrl::MacSearchFieldSearchHit(WXEVENTHANDLERREF WXUNUSED(handler) , WXEVENTREF WXUNUSED(event) ) { wxCommandEvent event(wxEVT_COMMAND_SEARCHCTRL_SEARCH_BTN, m_windowId ); diff --git a/version-script.in b/version-script.in index 14c3147846..231bb6a082 100644 --- a/version-script.in +++ b/version-script.in @@ -31,6 +31,8 @@ *wxFileHistory*etBaseId*; *wxSizerFlags*Shaped*; *wxSizerFlags*FixedMinSize*; + *wxSearchCtrl*SetDescriptiveText*; + *wxSearchCtrl*GetDescriptiveText*; }; # public symbols added in 2.8.1 (please keep in alphabetical order): diff --git a/wxPython/src/_srchctrl.i b/wxPython/src/_srchctrl.i index 1449811f15..894b8a49a6 100644 --- a/wxPython/src/_srchctrl.i +++ b/wxPython/src/_srchctrl.i @@ -58,6 +58,9 @@ public: virtual void ShowCancelButton( bool ) {} virtual bool IsCancelButtonVisible() const { return false; } + + virtual void SetDescriptiveText(const wxString& text); + virtual wxString GetDescriptiveText() const; }; #endif %} @@ -167,6 +170,17 @@ button visibility value. This always returns false in Mac OS X v10.3", ""); "Indicates whether the cancel button is visible. ", ""); + DocDeclStr( + virtual void , SetDescriptiveText(const wxString& text), + "Set the text to be displayed when the user has not yet typed anything +in the control.", ""); + + DocDeclStr( + virtual wxString , GetDescriptiveText() const, + "Get the text to be displayed when the user has not yet typed anything +in the control.", ""); + + DocStr(SetSearchBitmap, "Sets the bitmap to use for the search button. This currently does not work on the Mac.", ""); @@ -177,6 +191,7 @@ on the Mac.", ""); DocStr(SetCancelBitmap, "Sets the bitmap to use for the cancel button. This currently does not work on the Mac.", ""); + #ifdef __WXMAC__ %extend { @@ -194,6 +209,7 @@ work on the Mac.", ""); %property(Menu, GetMenu, SetMenu); %property(SearchButtonVisible, IsSearchButtonVisible, ShowSearchButton); %property(CancelButtonVisible, IsCancelButtonVisible, ShowCancelButton); + %property(DescriptiveText, GetDescriptiveText, SetDescriptiveText); }; diff --git a/wxPython/src/gtk/_controls.py b/wxPython/src/gtk/_controls.py index f1a81dc24b..233923129c 100644 --- a/wxPython/src/gtk/_controls.py +++ b/wxPython/src/gtk/_controls.py @@ -7268,6 +7268,24 @@ class SearchCtrl(TextCtrl): """ return _controls_.SearchCtrl_IsCancelButtonVisible(*args, **kwargs) + def SetDescriptiveText(*args, **kwargs): + """ + SetDescriptiveText(self, String text) + + Set the text to be displayed when the user has not yet typed anything + in the control. + """ + return _controls_.SearchCtrl_SetDescriptiveText(*args, **kwargs) + + def GetDescriptiveText(*args, **kwargs): + """ + GetDescriptiveText(self) -> String + + Get the text to be displayed when the user has not yet typed anything + in the control. + """ + return _controls_.SearchCtrl_GetDescriptiveText(*args, **kwargs) + def SetSearchBitmap(*args, **kwargs): """ SetSearchBitmap(self, Bitmap bitmap) @@ -7299,6 +7317,7 @@ class SearchCtrl(TextCtrl): Menu = property(GetMenu,SetMenu) SearchButtonVisible = property(IsSearchButtonVisible,ShowSearchButton) CancelButtonVisible = property(IsCancelButtonVisible,ShowCancelButton) + DescriptiveText = property(GetDescriptiveText,SetDescriptiveText) _controls_.SearchCtrl_swigregister(SearchCtrl) SearchCtrlNameStr = cvar.SearchCtrlNameStr diff --git a/wxPython/src/gtk/_controls_wrap.cpp b/wxPython/src/gtk/_controls_wrap.cpp index e0479c2ba9..889e70551b 100644 --- a/wxPython/src/gtk/_controls_wrap.cpp +++ b/wxPython/src/gtk/_controls_wrap.cpp @@ -3419,6 +3419,9 @@ public: virtual void ShowCancelButton( bool ) {} virtual bool IsCancelButtonVisible() const { return false; } + + virtual void SetDescriptiveText(const wxString& text); + virtual wxString GetDescriptiveText() const; }; #endif @@ -46659,6 +46662,85 @@ fail: } +SWIGINTERN PyObject *_wrap_SearchCtrl_SetDescriptiveText(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) { + PyObject *resultobj = 0; + wxSearchCtrl *arg1 = (wxSearchCtrl *) 0 ; + wxString *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + bool temp2 = false ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + char * kwnames[] = { + (char *) "self",(char *) "text", NULL + }; + + if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:SearchCtrl_SetDescriptiveText",kwnames,&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_wxSearchCtrl, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SearchCtrl_SetDescriptiveText" "', expected argument " "1"" of type '" "wxSearchCtrl *""'"); + } + arg1 = reinterpret_cast< wxSearchCtrl * >(argp1); + { + arg2 = wxString_in_helper(obj1); + if (arg2 == NULL) SWIG_fail; + temp2 = true; + } + { + PyThreadState* __tstate = wxPyBeginAllowThreads(); + (arg1)->SetDescriptiveText((wxString const &)*arg2); + wxPyEndAllowThreads(__tstate); + if (PyErr_Occurred()) SWIG_fail; + } + resultobj = SWIG_Py_Void(); + { + if (temp2) + delete arg2; + } + return resultobj; +fail: + { + if (temp2) + delete arg2; + } + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SearchCtrl_GetDescriptiveText(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + wxSearchCtrl *arg1 = (wxSearchCtrl *) 0 ; + wxString result; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject *swig_obj[1] ; + + if (!args) SWIG_fail; + swig_obj[0] = args; + res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_wxSearchCtrl, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SearchCtrl_GetDescriptiveText" "', expected argument " "1"" of type '" "wxSearchCtrl const *""'"); + } + arg1 = reinterpret_cast< wxSearchCtrl * >(argp1); + { + PyThreadState* __tstate = wxPyBeginAllowThreads(); + result = ((wxSearchCtrl const *)arg1)->GetDescriptiveText(); + wxPyEndAllowThreads(__tstate); + if (PyErr_Occurred()) SWIG_fail; + } + { +#if wxUSE_UNICODE + resultobj = PyUnicode_FromWideChar((&result)->c_str(), (&result)->Len()); +#else + resultobj = PyString_FromStringAndSize((&result)->c_str(), (&result)->Len()); +#endif + } + return resultobj; +fail: + return NULL; +} + + SWIGINTERN PyObject *_wrap_SearchCtrl_SetSearchBitmap(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) { PyObject *resultobj = 0; wxSearchCtrl *arg1 = (wxSearchCtrl *) 0 ; @@ -47863,6 +47945,8 @@ static PyMethodDef SwigMethods[] = { { (char *)"SearchCtrl_IsSearchButtonVisible", (PyCFunction)_wrap_SearchCtrl_IsSearchButtonVisible, METH_O, NULL}, { (char *)"SearchCtrl_ShowCancelButton", (PyCFunction) _wrap_SearchCtrl_ShowCancelButton, METH_VARARGS | METH_KEYWORDS, NULL}, { (char *)"SearchCtrl_IsCancelButtonVisible", (PyCFunction)_wrap_SearchCtrl_IsCancelButtonVisible, METH_O, NULL}, + { (char *)"SearchCtrl_SetDescriptiveText", (PyCFunction) _wrap_SearchCtrl_SetDescriptiveText, METH_VARARGS | METH_KEYWORDS, NULL}, + { (char *)"SearchCtrl_GetDescriptiveText", (PyCFunction)_wrap_SearchCtrl_GetDescriptiveText, METH_O, NULL}, { (char *)"SearchCtrl_SetSearchBitmap", (PyCFunction) _wrap_SearchCtrl_SetSearchBitmap, METH_VARARGS | METH_KEYWORDS, NULL}, { (char *)"SearchCtrl_SetSearchMenuBitmap", (PyCFunction) _wrap_SearchCtrl_SetSearchMenuBitmap, METH_VARARGS | METH_KEYWORDS, NULL}, { (char *)"SearchCtrl_SetCancelBitmap", (PyCFunction) _wrap_SearchCtrl_SetCancelBitmap, METH_VARARGS | METH_KEYWORDS, NULL}, diff --git a/wxPython/src/mac/_controls.py b/wxPython/src/mac/_controls.py index cb9f2787a6..09eaac9f35 100644 --- a/wxPython/src/mac/_controls.py +++ b/wxPython/src/mac/_controls.py @@ -7261,6 +7261,24 @@ class SearchCtrl(TextCtrl): """ return _controls_.SearchCtrl_IsCancelButtonVisible(*args, **kwargs) + def SetDescriptiveText(*args, **kwargs): + """ + SetDescriptiveText(self, String text) + + Set the text to be displayed when the user has not yet typed anything + in the control. + """ + return _controls_.SearchCtrl_SetDescriptiveText(*args, **kwargs) + + def GetDescriptiveText(*args, **kwargs): + """ + GetDescriptiveText(self) -> String + + Set the text to be displayed when the user has not yet typed anything + in the control. + """ + return _controls_.SearchCtrl_GetDescriptiveText(*args, **kwargs) + def SetSearchBitmap(*args, **kwargs): """ SetSearchBitmap(self, Bitmap ?) @@ -7292,6 +7310,7 @@ class SearchCtrl(TextCtrl): Menu = property(GetMenu,SetMenu) SearchButtonVisible = property(IsSearchButtonVisible,ShowSearchButton) CancelButtonVisible = property(IsCancelButtonVisible,ShowCancelButton) + DescriptiveText = property(GetDescriptiveText,SetDescriptiveText) _controls_.SearchCtrl_swigregister(SearchCtrl) SearchCtrlNameStr = cvar.SearchCtrlNameStr diff --git a/wxPython/src/mac/_controls_wrap.cpp b/wxPython/src/mac/_controls_wrap.cpp index 7a58693669..556a522a73 100644 --- a/wxPython/src/mac/_controls_wrap.cpp +++ b/wxPython/src/mac/_controls_wrap.cpp @@ -3418,6 +3418,9 @@ public: virtual void ShowCancelButton( bool ) {} virtual bool IsCancelButtonVisible() const { return false; } + + virtual void SetDescriptiveText(const wxString& text); + virtual wxString GetDescriptiveText() const; }; #endif @@ -46586,6 +46589,85 @@ fail: } +SWIGINTERN PyObject *_wrap_SearchCtrl_SetDescriptiveText(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) { + PyObject *resultobj = 0; + wxSearchCtrl *arg1 = (wxSearchCtrl *) 0 ; + wxString *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + bool temp2 = false ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + char * kwnames[] = { + (char *) "self",(char *) "text", NULL + }; + + if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:SearchCtrl_SetDescriptiveText",kwnames,&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_wxSearchCtrl, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SearchCtrl_SetDescriptiveText" "', expected argument " "1"" of type '" "wxSearchCtrl *""'"); + } + arg1 = reinterpret_cast< wxSearchCtrl * >(argp1); + { + arg2 = wxString_in_helper(obj1); + if (arg2 == NULL) SWIG_fail; + temp2 = true; + } + { + PyThreadState* __tstate = wxPyBeginAllowThreads(); + (arg1)->SetDescriptiveText((wxString const &)*arg2); + wxPyEndAllowThreads(__tstate); + if (PyErr_Occurred()) SWIG_fail; + } + resultobj = SWIG_Py_Void(); + { + if (temp2) + delete arg2; + } + return resultobj; +fail: + { + if (temp2) + delete arg2; + } + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SearchCtrl_GetDescriptiveText(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + wxSearchCtrl *arg1 = (wxSearchCtrl *) 0 ; + wxString result; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject *swig_obj[1] ; + + if (!args) SWIG_fail; + swig_obj[0] = args; + res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_wxSearchCtrl, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SearchCtrl_GetDescriptiveText" "', expected argument " "1"" of type '" "wxSearchCtrl const *""'"); + } + arg1 = reinterpret_cast< wxSearchCtrl * >(argp1); + { + PyThreadState* __tstate = wxPyBeginAllowThreads(); + result = ((wxSearchCtrl const *)arg1)->GetDescriptiveText(); + wxPyEndAllowThreads(__tstate); + if (PyErr_Occurred()) SWIG_fail; + } + { +#if wxUSE_UNICODE + resultobj = PyUnicode_FromWideChar((&result)->c_str(), (&result)->Len()); +#else + resultobj = PyString_FromStringAndSize((&result)->c_str(), (&result)->Len()); +#endif + } + return resultobj; +fail: + return NULL; +} + + SWIGINTERN PyObject *_wrap_SearchCtrl_SetSearchBitmap(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) { PyObject *resultobj = 0; wxSearchCtrl *arg1 = (wxSearchCtrl *) 0 ; @@ -47788,6 +47870,8 @@ static PyMethodDef SwigMethods[] = { { (char *)"SearchCtrl_IsSearchButtonVisible", (PyCFunction)_wrap_SearchCtrl_IsSearchButtonVisible, METH_O, NULL}, { (char *)"SearchCtrl_ShowCancelButton", (PyCFunction) _wrap_SearchCtrl_ShowCancelButton, METH_VARARGS | METH_KEYWORDS, NULL}, { (char *)"SearchCtrl_IsCancelButtonVisible", (PyCFunction)_wrap_SearchCtrl_IsCancelButtonVisible, METH_O, NULL}, + { (char *)"SearchCtrl_SetDescriptiveText", (PyCFunction) _wrap_SearchCtrl_SetDescriptiveText, METH_VARARGS | METH_KEYWORDS, NULL}, + { (char *)"SearchCtrl_GetDescriptiveText", (PyCFunction)_wrap_SearchCtrl_GetDescriptiveText, METH_O, NULL}, { (char *)"SearchCtrl_SetSearchBitmap", (PyCFunction) _wrap_SearchCtrl_SetSearchBitmap, METH_VARARGS | METH_KEYWORDS, NULL}, { (char *)"SearchCtrl_SetSearchMenuBitmap", (PyCFunction) _wrap_SearchCtrl_SetSearchMenuBitmap, METH_VARARGS | METH_KEYWORDS, NULL}, { (char *)"SearchCtrl_SetCancelBitmap", (PyCFunction) _wrap_SearchCtrl_SetCancelBitmap, METH_VARARGS | METH_KEYWORDS, NULL}, diff --git a/wxPython/src/msw/_controls.py b/wxPython/src/msw/_controls.py index 6fd0cbd7df..c9408dd9c5 100644 --- a/wxPython/src/msw/_controls.py +++ b/wxPython/src/msw/_controls.py @@ -7287,6 +7287,24 @@ class SearchCtrl(TextCtrl): """ return _controls_.SearchCtrl_IsCancelButtonVisible(*args, **kwargs) + def SetDescriptiveText(*args, **kwargs): + """ + SetDescriptiveText(self, String text) + + Set the text to be displayed when the user has not yet typed anything + in the control. + """ + return _controls_.SearchCtrl_SetDescriptiveText(*args, **kwargs) + + def GetDescriptiveText(*args, **kwargs): + """ + GetDescriptiveText(self) -> String + + Get the text to be displayed when the user has not yet typed anything + in the control. + """ + return _controls_.SearchCtrl_GetDescriptiveText(*args, **kwargs) + def SetSearchBitmap(*args, **kwargs): """ SetSearchBitmap(self, Bitmap bitmap) @@ -7318,6 +7336,7 @@ class SearchCtrl(TextCtrl): Menu = property(GetMenu,SetMenu) SearchButtonVisible = property(IsSearchButtonVisible,ShowSearchButton) CancelButtonVisible = property(IsCancelButtonVisible,ShowCancelButton) + DescriptiveText = property(GetDescriptiveText,SetDescriptiveText) _controls_.SearchCtrl_swigregister(SearchCtrl) SearchCtrlNameStr = cvar.SearchCtrlNameStr diff --git a/wxPython/src/msw/_controls_wrap.cpp b/wxPython/src/msw/_controls_wrap.cpp index fe413e8179..0b2dc3130a 100644 --- a/wxPython/src/msw/_controls_wrap.cpp +++ b/wxPython/src/msw/_controls_wrap.cpp @@ -3419,6 +3419,9 @@ public: virtual void ShowCancelButton( bool ) {} virtual bool IsCancelButtonVisible() const { return false; } + + virtual void SetDescriptiveText(const wxString& text); + virtual wxString GetDescriptiveText() const; }; #endif @@ -46871,6 +46874,85 @@ fail: } +SWIGINTERN PyObject *_wrap_SearchCtrl_SetDescriptiveText(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) { + PyObject *resultobj = 0; + wxSearchCtrl *arg1 = (wxSearchCtrl *) 0 ; + wxString *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + bool temp2 = false ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + char * kwnames[] = { + (char *) "self",(char *) "text", NULL + }; + + if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:SearchCtrl_SetDescriptiveText",kwnames,&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_wxSearchCtrl, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SearchCtrl_SetDescriptiveText" "', expected argument " "1"" of type '" "wxSearchCtrl *""'"); + } + arg1 = reinterpret_cast< wxSearchCtrl * >(argp1); + { + arg2 = wxString_in_helper(obj1); + if (arg2 == NULL) SWIG_fail; + temp2 = true; + } + { + PyThreadState* __tstate = wxPyBeginAllowThreads(); + (arg1)->SetDescriptiveText((wxString const &)*arg2); + wxPyEndAllowThreads(__tstate); + if (PyErr_Occurred()) SWIG_fail; + } + resultobj = SWIG_Py_Void(); + { + if (temp2) + delete arg2; + } + return resultobj; +fail: + { + if (temp2) + delete arg2; + } + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SearchCtrl_GetDescriptiveText(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + wxSearchCtrl *arg1 = (wxSearchCtrl *) 0 ; + wxString result; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject *swig_obj[1] ; + + if (!args) SWIG_fail; + swig_obj[0] = args; + res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_wxSearchCtrl, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SearchCtrl_GetDescriptiveText" "', expected argument " "1"" of type '" "wxSearchCtrl const *""'"); + } + arg1 = reinterpret_cast< wxSearchCtrl * >(argp1); + { + PyThreadState* __tstate = wxPyBeginAllowThreads(); + result = ((wxSearchCtrl const *)arg1)->GetDescriptiveText(); + wxPyEndAllowThreads(__tstate); + if (PyErr_Occurred()) SWIG_fail; + } + { +#if wxUSE_UNICODE + resultobj = PyUnicode_FromWideChar((&result)->c_str(), (&result)->Len()); +#else + resultobj = PyString_FromStringAndSize((&result)->c_str(), (&result)->Len()); +#endif + } + return resultobj; +fail: + return NULL; +} + + SWIGINTERN PyObject *_wrap_SearchCtrl_SetSearchBitmap(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) { PyObject *resultobj = 0; wxSearchCtrl *arg1 = (wxSearchCtrl *) 0 ; @@ -48080,6 +48162,8 @@ static PyMethodDef SwigMethods[] = { { (char *)"SearchCtrl_IsSearchButtonVisible", (PyCFunction)_wrap_SearchCtrl_IsSearchButtonVisible, METH_O, NULL}, { (char *)"SearchCtrl_ShowCancelButton", (PyCFunction) _wrap_SearchCtrl_ShowCancelButton, METH_VARARGS | METH_KEYWORDS, NULL}, { (char *)"SearchCtrl_IsCancelButtonVisible", (PyCFunction)_wrap_SearchCtrl_IsCancelButtonVisible, METH_O, NULL}, + { (char *)"SearchCtrl_SetDescriptiveText", (PyCFunction) _wrap_SearchCtrl_SetDescriptiveText, METH_VARARGS | METH_KEYWORDS, NULL}, + { (char *)"SearchCtrl_GetDescriptiveText", (PyCFunction)_wrap_SearchCtrl_GetDescriptiveText, METH_O, NULL}, { (char *)"SearchCtrl_SetSearchBitmap", (PyCFunction) _wrap_SearchCtrl_SetSearchBitmap, METH_VARARGS | METH_KEYWORDS, NULL}, { (char *)"SearchCtrl_SetSearchMenuBitmap", (PyCFunction) _wrap_SearchCtrl_SetSearchMenuBitmap, METH_VARARGS | METH_KEYWORDS, NULL}, { (char *)"SearchCtrl_SetCancelBitmap", (PyCFunction) _wrap_SearchCtrl_SetCancelBitmap, METH_VARARGS | METH_KEYWORDS, NULL}, -- 2.45.2