don't lose encoding information when getting/setting the text in the control

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24052 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2003-10-02 12:24:45 +00:00
parent 1a8aa6a1e3
commit e669d18427

View File

@@ -534,24 +534,40 @@ wxString wxTextCtrl::GetRange(long from, long to) const
// we must use EM_STREAMOUT if we don't want to lose all characters // we must use EM_STREAMOUT if we don't want to lose all characters
// not representable in the current character set (EM_GETTEXTRANGE // not representable in the current character set (EM_GETTEXTRANGE
// simply replaces them with question marks...) // simply replaces them with question marks...)
// if ( GetRichVersion() > 1 )
// as EM_STREAMOUT only works for the entire controls contents (or
// just the selection but it's probably a bad idea to play games
// with selection here...), we can't use it unless we're called
// from GetValue(), i.e. we want to retrieve all text
if ( GetRichVersion() > 1 && (from == 0 && to >= len) )
{ {
// we must have some encoding, otherwise any 8bit chars in the
// control are simply *lost* (replaced by '?')
wxFontEncoding encoding = wxFONTENCODING_SYSTEM;
wxFont font = m_defaultStyle.GetFont(); wxFont font = m_defaultStyle.GetFont();
if ( !font.Ok() ) if ( !font.Ok() )
font = GetFont(); font = GetFont();
if ( font.Ok() ) if ( font.Ok() )
{ {
wxFontEncoding encoding = font.GetEncoding(); encoding = font.GetEncoding();
if ( encoding != wxFONTENCODING_SYSTEM )
{
str = StreamOut(encoding);
} }
if ( encoding == wxFONTENCODING_SYSTEM )
{
encoding = wxLocale::GetSystemEncoding();
}
if ( encoding == wxFONTENCODING_SYSTEM )
{
encoding = wxFONTENCODING_ISO8859_1;
}
str = StreamOut(encoding);
if ( !str.empty() )
{
// we have to manually extract the required part, luckily
// this is easy in this case as EOL characters in richedit
// version > 1 are just '\r's and so positions map to
// string indices one to one (unlike with richedit 1)
str = str.Mid(from, to - from + 1);
} }
} }
@@ -1229,13 +1245,7 @@ void wxTextCtrl::Replace(long from, long to, const wxString& value)
// Set selection and remove it // Set selection and remove it
DoSetSelection(from, to, FALSE /* don't scroll caret into view */); DoSetSelection(from, to, FALSE /* don't scroll caret into view */);
SendMessage(GetHwnd(), EM_REPLACESEL, DoWriteText(value, TRUE /* selection only */);
#ifdef __WIN32__
TRUE,
#else
FALSE,
#endif
(LPARAM)value.c_str());
} }
void wxTextCtrl::Remove(long from, long to) void wxTextCtrl::Remove(long from, long to)