]> git.saurik.com Git - wxWidgets.git/commitdiff
SetValue() doesn't call Clear()
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 12 Jan 2002 22:45:23 +0000 (22:45 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 12 Jan 2002 22:45:23 +0000 (22:45 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13529 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/textctrl.h
src/msw/textctrl.cpp

index 499163b037f2a91dcd55705cbcba0598517d461e..270a4550e65ef9426d881e61cc1d522e1e084b17 100644 (file)
@@ -179,10 +179,17 @@ protected:
     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);
 
index b19e84b06f029e636d12b02ea81284f2b4fd7eb1..7d2875e37c83eb98fa0e0eee324a0d4691f6c970 100644 (file)
@@ -493,11 +493,7 @@ void wxTextCtrl::SetValue(const wxString& value)
     // 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
@@ -532,11 +528,15 @@ DWORD CALLBACK wxRichEditStreamIn(DWORD dwCookie, BYTE *buf, LONG cb, LONG *pcb)
 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
@@ -570,7 +570,9 @@ bool wxTextCtrl::StreamIn(const wxString& value, wxFontEncoding encoding)
     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"));
@@ -584,6 +586,11 @@ bool wxTextCtrl::StreamIn(const wxString& value, wxFontEncoding encoding)
 #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 )
@@ -609,7 +616,7 @@ void wxTextCtrl::WriteText(const wxString& value)
         // but EM_STREAMIN works
         if ( wxGetOsVersion() == wxWIN95 && GetRichVersion() > 1 )
         {
-           done = StreamIn(valueDos, wxFONTENCODING_SYSTEM);
+           done = StreamIn(valueDos, wxFONTENCODING_SYSTEM, selectionOnly);
         }
 #endif // wxUSE_UNICODE_MSLU
 
@@ -627,7 +634,7 @@ void wxTextCtrl::WriteText(const wxString& value)
                wxFontEncoding encoding = font.GetEncoding();
                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 )
 #endif // wxUSE_RICHEDIT
     {
+        if ( !selectionOnly )
+        {
+            SetSelection(-1, -1);
+        }
+
         ::SendMessage(GetHwnd(), EM_REPLACESEL, 0, (LPARAM)valueDos.c_str());
     }