]> 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.
 
 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.}
 \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 )}.}
 
 \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}
 \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;
 
     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 void GetSelection(long* from, long* to) const;
+    virtual wxString GetSelection() const;
 
     // operations
     // ----------
 
     // 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;
 
     // 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
     // ----------
 
     // operations
     // ----------
 
index 3872f7cccc4d496e3300227f6245c6c2aa0286a4..456e42c53d1c8efeb44ab3fdf3bc18161f357a83 100644 (file)
@@ -685,6 +685,18 @@ void MyTextCtrl::OnKeyDown(wxKeyEvent& event)
         case WXK_F7:
             ShowPosition(10);
             break;
         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 )
     }
 
     if ( ms_logKey )
index b2e57eb854717655a8ae043e6fb60a65040d767e..0ada7cb2f2f492a22f06e4f048a1f83ed66880d2 100644 (file)
@@ -244,6 +244,20 @@ void wxTextCtrlBase::SelectAll()
     SetSelection(0, GetLastPosition());
 }
 
     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
 #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);
 bool wxTextCtrl::IsEditable() const
 {
     long style = ::GetWindowLong(GetHwnd(), GWL_STYLE);