bool AdjustSpaceLimit();
#if wxUSE_RICHEDIT
- // replace the selection with the given text in the specified encoding
- bool StreamIn(const wxString& value, wxFontEncoding encoding);
+ // replace the selection or the entire control contents with the given text
+ // in the specified encoding
+ bool StreamIn(const wxString& value,
+ wxFontEncoding encoding,
+ bool selOnly);
#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
void DoSetSelection(long from, long to, bool scrollCaret = TRUE);
// edit controls mostly)
if ( (value.length() > 0x400) || (value != GetValue()) )
{
- // it is simpler to do this but it could be more efficient to reproduce
- // WriteText() logic here
- Clear();
-
- WriteText(value);
+ DoWriteText(value, FALSE /* not selection only */);
// mark the control as being not dirty - we changed its text, not the
// user
extern long wxEncodingToCodepage(wxFontEncoding encoding); // from strconv.cpp
#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();
-#else
-bool wxTextCtrl::StreamIn(const wxString& value, wxFontEncoding encoding)
+#else // !wxUSE_UNICODE_MSLU
+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
// text in the non default charset - otherwise it thinks it knows better
eds.pfnCallback = (EDITSTREAMCALLBACK)wxRichEditStreamIn;
if ( !::SendMessage(GetHwnd(), EM_STREAMIN,
- SF_TEXT | SF_UNICODE | SFF_SELECTION,
+ SF_TEXT |
+ SF_UNICODE |
+ (selectionOnly ? SFF_SELECTION : 0),
(LPARAM)&eds) || eds.dwError )
{
wxLogLastError(_T("EM_STREAMIN"));
#endif // wxUSE_RICHEDIT
void wxTextCtrl::WriteText(const wxString& value)
+{
+ DoWriteText(value);
+}
+
+void wxTextCtrl::DoWriteText(const wxString& value, bool selectionOnly)
{
wxString valueDos;
if ( m_windowStyle & wxTE_MULTILINE )
// but EM_STREAMIN works
if ( wxGetOsVersion() == wxWIN95 && GetRichVersion() > 1 )
{
- done = StreamIn(valueDos, wxFONTENCODING_SYSTEM);
+ done = StreamIn(valueDos, wxFONTENCODING_SYSTEM, selectionOnly);
}
#endif // wxUSE_UNICODE_MSLU
wxFontEncoding encoding = font.GetEncoding();
if ( encoding != wxFONTENCODING_SYSTEM )
{
- done = StreamIn(valueDos, encoding);
+ done = StreamIn(valueDos, encoding, selectionOnly);
}
}
}
if ( !done )
#endif // wxUSE_RICHEDIT
{
+ if ( !selectionOnly )
+ {
+ SetSelection(-1, -1);
+ }
+
::SendMessage(GetHwnd(), EM_REPLACESEL, 0, (LPARAM)valueDos.c_str());
}