]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxTextCtrl::GetSelection() returning a wxString - useful for multiline controls...
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 14 Nov 2001 01:27:16 +0000 (01:27 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 14 Nov 2001 01:27:16 +0000 (01:27 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12408 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/text.tex
include/wx/msw/textctrl.h
include/wx/textctrl.h
samples/text/text.cpp
src/common/textcmn.cpp
src/msw/textctrl.cpp

index 8d26a475c31ec339757daa6013a355228fdb84cc..8bb889ce5db28d8fd48a71f16ff6e3b76e498f54 100644 (file)
@@ -368,6 +368,13 @@ working with controls that contain large amounts of text.
 Gets the current selection span. If the returned values are equal, there was
 no selection.
 
+Please note that the indices returned may be used with the other wxTextctrl
+methods but don't necessarily represent the correct indices into the string
+returned by \helpref{GetValue()}{wxtextctrlgetvalue} for multiline controls
+under Windows, you should use another version of 
+\helpref{GetSelection()}{wxtextctrlgetselectionstring} to get the selected
+text.
+
 \wxheading{Parameters}
 
 \docparam{from}{The returned first position.}
@@ -380,6 +387,13 @@ consisting of the from and to values.}
 \perlnote{In wxPerl this method takes no parameter and returns a
 2-element list {\tt ( from, to )}.}
 
+\membersection{wxTextCtrl::GetSelection}\label{wxtextctrlgetselectionstring}
+
+\func{virtual wxString}{GetSelection}{\void}
+
+Gets the text currently selected in the control. If there is no selection, the
+returned string is empty.
+
 \membersection{wxTextCtrl::GetValue}\label{wxtextctrlgetvalue}
 
 \constfunc{wxString}{GetValue}{\void}
index a57f54c7544f3925e78c39a51c3feec67b82d1d3..3e0174e66efb7fbeb8369c0225dc959be1031b16 100644 (file)
@@ -55,8 +55,8 @@ public:
     virtual bool IsModified() const;
     virtual bool IsEditable() const;
 
-    // If the return values from and to are the same, there is no selection.
     virtual void GetSelection(long* from, long* to) const;
+    virtual wxString GetSelection() const;
 
     // operations
     // ----------
index 3ecf9e17f9d8b918b037d846cf394a92b3d0d1c3..98155be3077018b602f1497bd040d0e5a2017009 100644 (file)
@@ -157,6 +157,8 @@ public:
     // If the return values from and to are the same, there is no selection.
     virtual void GetSelection(long* from, long* to) const = 0;
 
+    virtual wxString GetSelection() const;
+
     // operations
     // ----------
 
index 3872f7cccc4d496e3300227f6245c6c2aa0286a4..456e42c53d1c8efeb44ab3fdf3bc18161f357a83 100644 (file)
@@ -685,6 +685,18 @@ void MyTextCtrl::OnKeyDown(wxKeyEvent& event)
         case WXK_F7:
             ShowPosition(10);
             break;
+
+        case WXK_F10:
+            {
+                long from, to;
+                GetSelection(&from, &to);
+
+                wxString sel = GetSelection();
+
+                wxLogMessage(_T("Selection: from %ld to %ld."), from, to);
+                wxLogMessage(_T("Selection = '%s' (len = %u)"),
+                             sel.c_str(), sel.length());
+            }
     }
 
     if ( ms_logKey )
index b2e57eb854717655a8ae043e6fb60a65040d767e..0ada7cb2f2f492a22f06e4f048a1f83ed66880d2 100644 (file)
@@ -244,6 +244,20 @@ void wxTextCtrlBase::SelectAll()
     SetSelection(0, GetLastPosition());
 }
 
+wxString wxTextCtrlBase::GetSelection() const
+{
+    long from, to;
+    GetSelection(&from, &to);
+
+    wxString sel;
+    if ( from < to )
+    {
+        sel = GetValue().Mid(from, to - from);
+    }
+
+    return sel;
+}
+
 #else // !wxUSE_TEXTCTRL
 
 // define this one even if !wxUSE_TEXTCTRL because it is also used by other
index bc78ce19b0386d5c5629d8c9496fd72ca0cc097f..7d13ae10f4685b16f995a449a4b0d62fa66401ae 100644 (file)
@@ -648,6 +648,34 @@ void wxTextCtrl::GetSelection(long* from, long* to) const
     }
 }
 
+wxString wxTextCtrl::GetSelection() const
+{
+    // the base class version works correctly for the rich text controls
+    // because there the lines are terminated with just '\r' which means that
+    // the string length is not changed in the result of the translations doen
+    // in GetValue() but for the normal ones when we replace "\r\n" with '\n'
+    // we break the indices
+#if wxUSE_RICHEDIT
+    if ( m_isRich )
+        return wxTextCtrlBase::GetSelection();
+#endif // wxUSE_RICHEDIT
+
+    long from, to;
+    GetSelection(&from, &to);
+
+    wxString str;
+    if ( from < to )
+    {
+        str = wxGetWindowText(GetHWND()).Mid(from, to - from);
+
+        // and now that we have the correct selection, convert it to the
+        // correct format
+        str = wxTextFile::Translate(str, wxTextFileType_Unix);
+    }
+
+    return str;
+}
+
 bool wxTextCtrl::IsEditable() const
 {
     long style = ::GetWindowLong(GetHwnd(), GWL_STYLE);