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:
Vadim Zeitlin
2002-01-12 22:45:23 +00:00
parent c97ff4d83d
commit 79d26b329e
2 changed files with 32 additions and 13 deletions

View File

@@ -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);

View File

@@ -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());
} }