SetValue() doesn't call Clear()
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13529 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -179,10 +179,17 @@ protected:
|
|||||||
bool AdjustSpaceLimit();
|
bool AdjustSpaceLimit();
|
||||||
|
|
||||||
#if wxUSE_RICHEDIT
|
#if wxUSE_RICHEDIT
|
||||||
// replace the selection with the given text in the specified encoding
|
// replace the selection or the entire control contents with the given text
|
||||||
bool StreamIn(const wxString& value, wxFontEncoding encoding);
|
// in the specified encoding
|
||||||
|
bool StreamIn(const wxString& value,
|
||||||
|
wxFontEncoding encoding,
|
||||||
|
bool selOnly);
|
||||||
#endif // wxUSE_RICHEDIT
|
#endif // wxUSE_RICHEDIT
|
||||||
|
|
||||||
|
// replace the contents of the selection or of the entire control with the
|
||||||
|
// given text
|
||||||
|
void DoWriteText(const wxString& text, bool selectionOnly = TRUE);
|
||||||
|
|
||||||
// set the selection possibly without scrolling the caret into view
|
// set the selection possibly without scrolling the caret into view
|
||||||
void DoSetSelection(long from, long to, bool scrollCaret = TRUE);
|
void DoSetSelection(long from, long to, bool scrollCaret = TRUE);
|
||||||
|
|
||||||
|
@@ -493,11 +493,7 @@ void wxTextCtrl::SetValue(const wxString& value)
|
|||||||
// edit controls mostly)
|
// edit controls mostly)
|
||||||
if ( (value.length() > 0x400) || (value != GetValue()) )
|
if ( (value.length() > 0x400) || (value != GetValue()) )
|
||||||
{
|
{
|
||||||
// it is simpler to do this but it could be more efficient to reproduce
|
DoWriteText(value, FALSE /* not selection only */);
|
||||||
// WriteText() logic here
|
|
||||||
Clear();
|
|
||||||
|
|
||||||
WriteText(value);
|
|
||||||
|
|
||||||
// mark the control as being not dirty - we changed its text, not the
|
// mark the control as being not dirty - we changed its text, not the
|
||||||
// user
|
// user
|
||||||
@@ -532,11 +528,15 @@ DWORD CALLBACK wxRichEditStreamIn(DWORD dwCookie, BYTE *buf, LONG cb, LONG *pcb)
|
|||||||
extern long wxEncodingToCodepage(wxFontEncoding encoding); // from strconv.cpp
|
extern long wxEncodingToCodepage(wxFontEncoding encoding); // from strconv.cpp
|
||||||
|
|
||||||
#if wxUSE_UNICODE_MSLU
|
#if wxUSE_UNICODE_MSLU
|
||||||
bool wxTextCtrl::StreamIn(const wxString& value, wxFontEncoding WXUNUSED(encoding))
|
bool wxTextCtrl::StreamIn(const wxString& value,
|
||||||
|
wxFontEncoding WXUNUSED(encoding),
|
||||||
|
bool selectionOnly)
|
||||||
{
|
{
|
||||||
const wchar_t *wpc = value.c_str();
|
const wchar_t *wpc = value.c_str();
|
||||||
#else
|
#else // !wxUSE_UNICODE_MSLU
|
||||||
bool wxTextCtrl::StreamIn(const wxString& value, wxFontEncoding encoding)
|
bool wxTextCtrl::StreamIn(const wxString& value,
|
||||||
|
wxFontEncoding encoding,
|
||||||
|
bool selectionOnly)
|
||||||
{
|
{
|
||||||
// we have to use EM_STREAMIN to force richedit control 2.0+ to show any
|
// we have to use EM_STREAMIN to force richedit control 2.0+ to show any
|
||||||
// text in the non default charset - otherwise it thinks it knows better
|
// text in the non default charset - otherwise it thinks it knows better
|
||||||
@@ -570,7 +570,9 @@ bool wxTextCtrl::StreamIn(const wxString& value, wxFontEncoding encoding)
|
|||||||
eds.pfnCallback = (EDITSTREAMCALLBACK)wxRichEditStreamIn;
|
eds.pfnCallback = (EDITSTREAMCALLBACK)wxRichEditStreamIn;
|
||||||
|
|
||||||
if ( !::SendMessage(GetHwnd(), EM_STREAMIN,
|
if ( !::SendMessage(GetHwnd(), EM_STREAMIN,
|
||||||
SF_TEXT | SF_UNICODE | SFF_SELECTION,
|
SF_TEXT |
|
||||||
|
SF_UNICODE |
|
||||||
|
(selectionOnly ? SFF_SELECTION : 0),
|
||||||
(LPARAM)&eds) || eds.dwError )
|
(LPARAM)&eds) || eds.dwError )
|
||||||
{
|
{
|
||||||
wxLogLastError(_T("EM_STREAMIN"));
|
wxLogLastError(_T("EM_STREAMIN"));
|
||||||
@@ -584,6 +586,11 @@ bool wxTextCtrl::StreamIn(const wxString& value, wxFontEncoding encoding)
|
|||||||
#endif // wxUSE_RICHEDIT
|
#endif // wxUSE_RICHEDIT
|
||||||
|
|
||||||
void wxTextCtrl::WriteText(const wxString& value)
|
void wxTextCtrl::WriteText(const wxString& value)
|
||||||
|
{
|
||||||
|
DoWriteText(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTextCtrl::DoWriteText(const wxString& value, bool selectionOnly)
|
||||||
{
|
{
|
||||||
wxString valueDos;
|
wxString valueDos;
|
||||||
if ( m_windowStyle & wxTE_MULTILINE )
|
if ( m_windowStyle & wxTE_MULTILINE )
|
||||||
@@ -609,7 +616,7 @@ void wxTextCtrl::WriteText(const wxString& value)
|
|||||||
// but EM_STREAMIN works
|
// but EM_STREAMIN works
|
||||||
if ( wxGetOsVersion() == wxWIN95 && GetRichVersion() > 1 )
|
if ( wxGetOsVersion() == wxWIN95 && GetRichVersion() > 1 )
|
||||||
{
|
{
|
||||||
done = StreamIn(valueDos, wxFONTENCODING_SYSTEM);
|
done = StreamIn(valueDos, wxFONTENCODING_SYSTEM, selectionOnly);
|
||||||
}
|
}
|
||||||
#endif // wxUSE_UNICODE_MSLU
|
#endif // wxUSE_UNICODE_MSLU
|
||||||
|
|
||||||
@@ -627,7 +634,7 @@ void wxTextCtrl::WriteText(const wxString& value)
|
|||||||
wxFontEncoding encoding = font.GetEncoding();
|
wxFontEncoding encoding = font.GetEncoding();
|
||||||
if ( encoding != wxFONTENCODING_SYSTEM )
|
if ( encoding != wxFONTENCODING_SYSTEM )
|
||||||
{
|
{
|
||||||
done = StreamIn(valueDos, encoding);
|
done = StreamIn(valueDos, encoding, selectionOnly);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -637,6 +644,11 @@ void wxTextCtrl::WriteText(const wxString& value)
|
|||||||
if ( !done )
|
if ( !done )
|
||||||
#endif // wxUSE_RICHEDIT
|
#endif // wxUSE_RICHEDIT
|
||||||
{
|
{
|
||||||
|
if ( !selectionOnly )
|
||||||
|
{
|
||||||
|
SetSelection(-1, -1);
|
||||||
|
}
|
||||||
|
|
||||||
::SendMessage(GetHwnd(), EM_REPLACESEL, 0, (LPARAM)valueDos.c_str());
|
::SendMessage(GetHwnd(), EM_REPLACESEL, 0, (LPARAM)valueDos.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user