]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/textctrl.cpp
check default library directories in WX_PATH_FIND_LIBRARIES; do *not* add default...
[wxWidgets.git] / src / os2 / textctrl.cpp
index c663907618a8ff7f78d32c31b1920555132665f0..c9bc9d241102e31d690d626be006c16f28595f48 100644 (file)
@@ -25,8 +25,9 @@
     #include "wx/log.h"
 #endif
 
     #include "wx/log.h"
 #endif
 
+#include "wx/app.h"
+
 #if wxUSE_CLIPBOARD
 #if wxUSE_CLIPBOARD
-    #include "wx/app.h"
     #include "wx/clipbrd.h"
 #endif
 
     #include "wx/clipbrd.h"
 #endif
 
@@ -86,6 +87,10 @@ wxTextCtrl::wxTextCtrl()
 {
 }
 
 {
 }
 
+wxTextCtrl::~wxTextCtrl()
+{
+}
+
 bool wxTextCtrl::Create(
   wxWindow*                         pParent
 , wxWindowID                        vId
 bool wxTextCtrl::Create(
   wxWindow*                         pParent
 , wxWindowID                        vId
@@ -93,14 +98,10 @@ bool wxTextCtrl::Create(
 , const wxPoint&                    rPos
 , const wxSize&                     rSize
 , long                              lStyle
 , const wxPoint&                    rPos
 , const wxSize&                     rSize
 , long                              lStyle
-#if wxUSE_VALIDATORS
 , const wxValidator&                rValidator
 , const wxValidator&                rValidator
-#endif
 , const wxString&                   rsName
 )
 {
 , const wxString&                   rsName
 )
 {
-    HWND                            hParent;
-    int                             nTempy;
     //
     // Base initialization
     //
     //
     // Base initialization
     //
@@ -109,12 +110,10 @@ bool wxTextCtrl::Create(
                      ,rPos
                      ,rSize
                      ,lStyle
                      ,rPos
                      ,rSize
                      ,lStyle
-#if wxUSE_VALIDATORS
                      ,rValidator
                      ,rValidator
-#endif
                      ,rsName
                     ))
                      ,rsName
                     ))
-        return FALSE;
+        return false;
 
     wxPoint                         vPos = rPos; // The OS/2 position
     SWP                             vSwp;
 
     wxPoint                         vPos = rPos; // The OS/2 position
     SWP                             vSwp;
@@ -125,6 +124,7 @@ bool wxTextCtrl::Create(
     }
 
     m_windowStyle = lStyle;
     }
 
     m_windowStyle = lStyle;
+    m_bIsMLE = false;
 
     long                            lSstyle = WS_VISIBLE | WS_TABSTOP;
 
 
     long                            lSstyle = WS_VISIBLE | WS_TABSTOP;
 
@@ -134,7 +134,7 @@ bool wxTextCtrl::Create(
     if ( m_windowStyle & wxTE_MULTILINE )
     {
         lSstyle |= MLS_BORDER | MLS_WORDWRAP;
     if ( m_windowStyle & wxTE_MULTILINE )
     {
         lSstyle |= MLS_BORDER | MLS_WORDWRAP;
-        m_bIsMLE = TRUE;
+        m_bIsMLE = true;
 
         if ((m_windowStyle & wxTE_NO_VSCROLL) == 0)
             lSstyle |= MLS_VSCROLL;
 
         if ((m_windowStyle & wxTE_NO_VSCROLL) == 0)
             lSstyle |= MLS_VSCROLL;
@@ -192,7 +192,7 @@ bool wxTextCtrl::Create(
 
     if (m_hWnd == 0)
     {
 
     if (m_hWnd == 0)
     {
-        return FALSE;
+        return false;
     }
 
     SubclassWin(GetHWND());
     }
 
     SubclassWin(GetHWND());
@@ -200,13 +200,13 @@ bool wxTextCtrl::Create(
     //
     // Set font, position, size and initial value
     //
     //
     // Set font, position, size and initial value
     //
-    wxFont*                          pTextFont = new wxFont( 10
+    wxFont*                          pTextFont = new wxFont( 8
                                                             ,wxMODERN
                                                             ,wxNORMAL
                                                             ,wxNORMAL
                                                            );
     SetFont(*pTextFont);
                                                             ,wxMODERN
                                                             ,wxNORMAL
                                                             ,wxNORMAL
                                                            );
     SetFont(*pTextFont);
-    if (!rsValue.IsEmpty())
+    if (!rsValue.empty())
     {
         SetValue(rsValue);
     }
     {
         SetValue(rsValue);
     }
@@ -218,13 +218,13 @@ bool wxTextCtrl::Create(
     ::WinQueryWindowPos(m_hWnd, &vSwp);
     SetXComp(vSwp.x);
     SetYComp(vSwp.y);
     ::WinQueryWindowPos(m_hWnd, &vSwp);
     SetXComp(vSwp.x);
     SetYComp(vSwp.y);
-    SetSize( vPos.x
-            ,vPos.y
+    SetSize( vPos.x - GetXComp()
+            ,vPos.y - GetYComp()
             ,rSize.x
             ,rSize.y
            );
     delete pTextFont;
             ,rSize.x
             ,rSize.y
            );
     delete pTextFont;
-    return TRUE;
+    return true;
 } // end of wxTextCtrl::Create
 
 //
 } // end of wxTextCtrl::Create
 
 //
@@ -340,7 +340,6 @@ wxString wxTextCtrl::GetValue() const
         if (*zStr == '\r')
             *zStr = '\n';
     }
         if (*zStr == '\r')
             *zStr = '\n';
     }
-    sStr = zStr;
     return sStr;
 } // end of wxTextCtrl::GetValue
 
     return sStr;
 } // end of wxTextCtrl::GetValue
 
@@ -356,7 +355,7 @@ void wxTextCtrl::SetValue(
     //
     if ((rsValue.length() > 0x400) || (rsValue != GetValue()))
     {
     //
     if ((rsValue.length() > 0x400) || (rsValue != GetValue()))
     {
-        ::WinSetWindowText(GetHwnd(), rsValue.c_str());
+        ::WinSetWindowText(GetHwnd(), (PSZ)rsValue.c_str());
         AdjustSpaceLimit();
     }
 } // end of wxTextCtrl::SetValue
         AdjustSpaceLimit();
     }
 } // end of wxTextCtrl::SetValue
@@ -368,7 +367,7 @@ void wxTextCtrl::WriteText(
     if (m_bIsMLE)
         ::WinSendMsg(GetHwnd(), MLM_INSERT, MPARAM((PCHAR)rsValue.c_str()), MPARAM(0));
     else
     if (m_bIsMLE)
         ::WinSendMsg(GetHwnd(), MLM_INSERT, MPARAM((PCHAR)rsValue.c_str()), MPARAM(0));
     else
-        ::WinSetWindowText(GetHwnd(), rsValue.c_str());
+        ::WinSetWindowText(GetHwnd(), (PSZ)rsValue.c_str());
     AdjustSpaceLimit();
 } // end of wxTextCtrl::WriteText
 
     AdjustSpaceLimit();
 } // end of wxTextCtrl::WriteText
 
@@ -385,6 +384,14 @@ void wxTextCtrl::Clear()
     ::WinSetWindowText(GetHwnd(), "");
 } // end of wxTextCtrl::Clear
 
     ::WinSetWindowText(GetHwnd(), "");
 } // end of wxTextCtrl::Clear
 
+bool wxTextCtrl::EmulateKeyPress(
+  const wxKeyEvent&                 rEvent
+)
+{
+    SetFocus();
+    return(wxTextCtrlBase::EmulateKeyPress(rEvent));
+} // end of wxTextCtrl::EmulateKeyPress
+
 // ----------------------------------------------------------------------------
 // Clipboard operations
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // Clipboard operations
 // ----------------------------------------------------------------------------
@@ -450,10 +457,10 @@ bool wxTextCtrl::CanCut() const
 
 bool wxTextCtrl::CanPaste() const
 {
 
 bool wxTextCtrl::CanPaste() const
 {
-    bool                            bIsTextAvailable = FALSE;
+    bool                            bIsTextAvailable = false;
 
     if (!IsEditable())
 
     if (!IsEditable())
-        return FALSE;
+        return false;
 
     //
     // Check for straight text on clipboard
 
     //
     // Check for straight text on clipboard
@@ -496,8 +503,17 @@ void wxTextCtrl::SetInsertionPoint(
 
 void wxTextCtrl::SetInsertionPointEnd()
 {
 
 void wxTextCtrl::SetInsertionPointEnd()
 {
-    long                            lPos = GetLastPosition();
+    wxTextPos                       lPos = GetLastPosition();
 
 
+    //
+    // We must not do anything if the caret is already there because calling
+    // SetInsertionPoint() thaws the controls if Freeze() had been called even
+    // if it doesn't actually move the caret anywhere and so the simple fact of
+    // doing it results in horrible flicker when appending big amounts of text
+    // to the control in a few chunks (see DoAddText() test in the text sample)
+    //
+    if (GetInsertionPoint() == GetLastPosition())
+        return;
     SetInsertionPoint(lPos);
 } // end of wxTextCtrl::SetInsertionPointEnd
 
     SetInsertionPoint(lPos);
 } // end of wxTextCtrl::SetInsertionPointEnd
 
@@ -515,7 +531,7 @@ long wxTextCtrl::GetInsertionPoint() const
     return (dwPos & 0xFFFF);
 } // end of wxTextCtrl::GetInsertionPoint
 
     return (dwPos & 0xFFFF);
 } // end of wxTextCtrl::GetInsertionPoint
 
-long wxTextCtrl::GetLastPosition() const
+wxTextPos wxTextCtrl::GetLastPosition() const
 {
     HWND                            hWnd = GetHwnd();
     long                            lCharIndex;
 {
     HWND                            hWnd = GetHwnd();
     long                            lCharIndex;
@@ -581,16 +597,12 @@ bool wxTextCtrl::IsEditable() const
 // Editing
 // ----------------------------------------------------------------------------
 
 // Editing
 // ----------------------------------------------------------------------------
 
-void wxTextCtrl::Replace(
-  long                              lFrom
-, long                              lTo
-, const wxString&                   rsValue
-)
+void wxTextCtrl::Replace( long lFrom,
+                          long lTo,
+                          const wxString& rsValue )
 {
 #if wxUSE_CLIPBOARD
 {
 #if wxUSE_CLIPBOARD
-    HWND                            hWnd      = GetHwnd();
-    long                            lFromChar = lFrom;
-    long                            lToChar   = lTo;
+    HWND hWnd = GetHwnd();
 
     //
     // Set selection and remove it
 
     //
     // Set selection and remove it
@@ -617,6 +629,9 @@ void wxTextCtrl::Replace(
     else
         ::WinSendMsg(hWnd, EM_PASTE, (MPARAM)0, (MPARAM)0);
 #else
     else
         ::WinSendMsg(hWnd, EM_PASTE, (MPARAM)0, (MPARAM)0);
 #else
+    wxUnusedVar(lFrom);
+    wxUnusedVar(lTo);
+    wxUnusedVar(rsValue);
     wxFAIL_MSG("wxTextCtrl::Replace not implemented if wxUSE_CLIPBOARD is 0.");
 #endif
 }  // end of wxTextCtrl::Replace
     wxFAIL_MSG("wxTextCtrl::Replace not implemented if wxUSE_CLIPBOARD is 0.");
 #endif
 }  // end of wxTextCtrl::Replace
@@ -627,8 +642,6 @@ void wxTextCtrl::Remove(
 )
 {
     HWND                            hWnd      = GetHwnd();
 )
 {
     HWND                            hWnd      = GetHwnd();
-    long                            lFromChar = lFrom;
-    long                            lToChar   = lTo;
 
     if (m_bIsMLE)
     {
 
     if (m_bIsMLE)
     {
@@ -652,7 +665,7 @@ void wxTextCtrl::SetSelection(
     long                            lToChar = lTo;
 
     //
     long                            lToChar = lTo;
 
     //
-    // If from and to are both -1, it means (in wxWindows) that all text should
+    // If from and to are both -1, it means (in wxWidgets) that all text should
     // be selected. Translate into Windows convention
     //
     if ((lFrom == -1L) && (lTo == -1L))
     // be selected. Translate into Windows convention
     //
     if ((lFrom == -1L) && (lTo == -1L))
@@ -676,9 +689,9 @@ bool wxTextCtrl::LoadFile(
         // Update the size limit if needed
         //
         AdjustSpaceLimit();
         // Update the size limit if needed
         //
         AdjustSpaceLimit();
-        return TRUE;
+        return true;
     }
     }
-    return FALSE;
+    return false;
 } // end of wxTextCtrl::LoadFile
 
 bool wxTextCtrl::IsModified() const
 } // end of wxTextCtrl::LoadFile
 
 bool wxTextCtrl::IsModified() const
@@ -692,6 +705,15 @@ bool wxTextCtrl::IsModified() const
     return bRc;
 } // end of wxTextCtrl::IsModified
 
     return bRc;
 } // end of wxTextCtrl::IsModified
 
+void wxTextCtrl::MarkDirty()
+{
+    if (m_bIsMLE)
+        ::WinSendMsg(GetHwnd(), MLM_SETCHANGED, MPFROMLONG(TRUE), 0);
+    else
+        // EM controls do not have a SETCHANGED, what can we do??
+        wxFAIL_MSG( _T("not implemented") );
+}
+
 //
 // Makes 'unmodified'
 //
 //
 // Makes 'unmodified'
 //
@@ -722,7 +744,6 @@ long wxTextCtrl::XYToPosition(
 , long                              lY
 ) const
 {
 , long                              lY
 ) const
 {
-    HWND                            hWnd = GetHwnd();
     long                            lCharIndex = 0L;
     long                            lLen;
 
     long                            lCharIndex = 0L;
     long                            lLen;
 
@@ -754,7 +775,7 @@ bool wxTextCtrl::PositionToXY(
     if (nLineNo == -1)
     {
         // no such line
     if (nLineNo == -1)
     {
         // no such line
-        return FALSE;
+        return false;
     }
 
     //
     }
 
     //
@@ -786,7 +807,7 @@ bool wxTextCtrl::PositionToXY(
 
     if (lCharIndex == -1)
     {
 
     if (lCharIndex == -1)
     {
-        return FALSE;
+        return false;
     }
 
     //
     }
 
     //
@@ -797,15 +818,13 @@ bool wxTextCtrl::PositionToXY(
     if (plY)
         *plY = nLineNo;
 
     if (plY)
         *plY = nLineNo;
 
-    return TRUE;
+    return true;
 } // end of wxTextCtrl::PositionToXY
 
 } // end of wxTextCtrl::PositionToXY
 
-void wxTextCtrl::ShowPosition(
-  long                              lPos
-)
+void wxTextCtrl::ShowPosition( long WXUNUSED(lPos) )
 {
 {
-    HWND                            hWnd = GetHwnd();
-    long                            lCurrentLineLineNo = 0L;
+    HWND hWnd = GetHwnd();
+    long lCurrentLineLineNo = 0L;
 
     // To scroll to a position, we pass the number of lines and characters
     // to scroll *by*. This means that we need to:
 
     // To scroll to a position, we pass the number of lines and characters
     // to scroll *by*. This means that we need to:
@@ -832,17 +851,17 @@ void wxTextCtrl::ShowPosition(
     }
 } // end of wxTextCtrl::ShowPosition
 
     }
 } // end of wxTextCtrl::ShowPosition
 
-int wxTextCtrl::GetLineLength(
-  long                              lLineNo
-) const
+int wxTextCtrl::GetLineLength( long WXUNUSED(lLineNo) ) const
 {
 {
-    long                            lLen = 0L;
+    long lLen = 0L;
 
     if (m_bIsMLE)
 
     if (m_bIsMLE)
+    {
         lLen = (long)::WinSendMsg(GetHwnd(), MLM_QUERYLINELENGTH, 0, 0);
         lLen = (long)::WinSendMsg(GetHwnd(), MLM_QUERYLINELENGTH, 0, 0);
+    }
     else
     {
     else
     {
-        WNDPARAMS                   vParams;
+        WNDPARAMS vParams;
 
         vParams.fsStatus = WPM_CCHTEXT;
         if (::WinSendMsg( GetHwnd()
 
         vParams.fsStatus = WPM_CCHTEXT;
         if (::WinSendMsg( GetHwnd()
@@ -865,14 +884,14 @@ wxString wxTextCtrl::GetLineText(
 {
     long                            lLen = (long)GetLineLength((long)lLineNo) + 1;
     wxString                        sStr;
 {
     long                            lLen = (long)GetLineLength((long)lLineNo) + 1;
     wxString                        sStr;
-    char*                           zBuf;
+    wxChar*                         zBuf;
 
     //
     // There must be at least enough place for the length WORD in the
     // buffer
     //
     lLen += sizeof(WORD);
 
     //
     // There must be at least enough place for the length WORD in the
     // buffer
     //
     lLen += sizeof(WORD);
-    zBuf = new char[lLen];
+    zBuf = new wxChar[lLen];
     if (m_bIsMLE)
     {
         long                        lIndex;
     if (m_bIsMLE)
     {
         long                        lIndex;
@@ -883,7 +902,7 @@ wxString wxTextCtrl::GetLineText(
         lIndex = lLen * lLineNo;
 
         ::WinSendMsg(GetHwnd(), MLM_SETSEL, (MPARAM)lIndex, (MPARAM)lIndex);
         lIndex = lLen * lLineNo;
 
         ::WinSendMsg(GetHwnd(), MLM_SETSEL, (MPARAM)lIndex, (MPARAM)lIndex);
-        ::WinSendMsg(GetHwnd(), MLM_SETIMPORTEXPORT, MPFROMP(zBuf), MPFROMSHORT((USHORT)sizeof(zBuf)));
+        ::WinSendMsg(GetHwnd(), MLM_SETIMPORTEXPORT, MPFROMP(zBuf), MPFROMSHORT((USHORT)WXSIZEOF(zBuf)));
         lBuflen = (long)::WinSendMsg(GetHwnd(), MLM_QUERYFORMATTEXTLENGTH, MPFROMLONG(lIndex), MPFROMLONG(-1));
         lCopied = (long)::WinSendMsg(GetHwnd(), MLM_EXPORT, MPFROMP(&lIndex), MPFROMP(&lBuflen));
         zBuf[lCopied] = '\0';
         lBuflen = (long)::WinSendMsg(GetHwnd(), MLM_QUERYFORMATTEXTLENGTH, MPFROMLONG(lIndex), MPFROMLONG(-1));
         lCopied = (long)::WinSendMsg(GetHwnd(), MLM_EXPORT, MPFROMP(&lIndex), MPFROMP(&lBuflen));
         zBuf[lCopied] = '\0';
@@ -898,7 +917,7 @@ wxString wxTextCtrl::GetLineText(
                          ,&vParams
                          ,0
                         ))
                          ,&vParams
                          ,0
                         ))
-         memcpy(zBuf, vParams.pszText, vParams.cchText);
+         memcpy((char*)zBuf, vParams.pszText, vParams.cchText);
          zBuf[vParams.cchText] = '\0';
      }
      sStr = zBuf;
          zBuf[vParams.cchText] = '\0';
      }
      sStr = zBuf;
@@ -937,7 +956,7 @@ bool wxTextCtrl::CanUndo() const
     if (m_bIsMLE)
         bOk = (::WinSendMsg(GetHwnd(), MLM_QUERYUNDO, 0, 0) != 0);
     else
     if (m_bIsMLE)
         bOk = (::WinSendMsg(GetHwnd(), MLM_QUERYUNDO, 0, 0) != 0);
     else
-        bOk = FALSE; // can't undo regular edit fields in PM
+        bOk = false; // can't undo regular edit fields in PM
     return bOk;
 } // end of wxTextCtrl::CanUndo
 
     return bOk;
 } // end of wxTextCtrl::CanUndo
 
@@ -948,7 +967,7 @@ bool wxTextCtrl::CanRedo() const
     if (m_bIsMLE)
         bOk = (::WinSendMsg(GetHwnd(), MLM_QUERYUNDO, 0, 0) != 0);
     else
     if (m_bIsMLE)
         bOk = (::WinSendMsg(GetHwnd(), MLM_QUERYUNDO, 0, 0) != 0);
     else
-        bOk = FALSE; // can't undo regular edit fields in PM
+        bOk = false; // can't undo regular edit fields in PM
     return bOk;
 } // end of wxTextCtrl::CanRedo
 
     return bOk;
 } // end of wxTextCtrl::CanRedo
 
@@ -975,22 +994,17 @@ void wxTextCtrl::OnDropFiles(
     }
 } // end of wxTextCtrl::OnDropFiles
 
     }
 } // end of wxTextCtrl::OnDropFiles
 
-WXHBRUSH wxTextCtrl::OnCtlColor(
-  WXHDC                             hWxDC
-, WXHWND                            hWnd
-, WXUINT                            uCtlColor
-, WXUINT                            uMessage
-, WXWPARAM                          wParam
-, WXLPARAM                          lParam
-)
+WXHBRUSH wxTextCtrl::OnCtlColor( WXHDC    hWxDC,
+                                 WXHWND   WXUNUSED(hWnd),
+                                 WXUINT   WXUNUSED(uCtlColor),
+                                 WXUINT   WXUNUSED(uMessage),
+                                 WXWPARAM WXUNUSED(wParam),
+                                 WXLPARAM WXUNUSED(lParam) )
 {
 {
-    HPS                             hPS = (HPS)hWxDC;
-    wxBrush*                        pBrush = NULL;
-    wxColour                        vColBack = GetBackgroundColour();
-    wxColour                        vColFore = GetForegroundColour();
-    wxBrush*                        pBackgroundBrush = wxTheBrushList->FindOrCreateBrush( GetBackgroundColour()
-                                                                                         ,wxSOLID
-                                                                                        );
+    HPS      hPS = (HPS)hWxDC;
+    wxColour vColBack = GetBackgroundColour();
+    wxColour vColFore = GetForegroundColour();
+    wxBrush* pBackgroundBrush = wxTheBrushList->FindOrCreateBrush( vColBack, wxSOLID );
 
     if (m_bUseCtl3D)
     {
 
     if (m_bUseCtl3D)
     {
@@ -1020,7 +1034,7 @@ void wxTextCtrl::OnChar(
   wxKeyEvent&                       rEvent
 )
 {
   wxKeyEvent&                       rEvent
 )
 {
-    switch (rEvent.KeyCode())
+    switch (rEvent.GetKeyCode())
     {
         case WXK_RETURN:
             if ( !(m_windowStyle & wxTE_MULTILINE) )
     {
         case WXK_RETURN:
             if ( !(m_windowStyle & wxTE_MULTILINE) )
@@ -1047,7 +1061,7 @@ void wxTextCtrl::OnChar(
                 wxNavigationKeyEvent    vEventNav;
 
                 vEventNav.SetDirection(!rEvent.ShiftDown());
                 wxNavigationKeyEvent    vEventNav;
 
                 vEventNav.SetDirection(!rEvent.ShiftDown());
-                vEventNav.SetWindowChange(FALSE);
+                vEventNav.SetWindowChange(false);
                 vEventNav.SetEventObject(this);
 
                 if ( GetEventHandler()->ProcessEvent(vEventNav) )
                 vEventNav.SetEventObject(this);
 
                 if ( GetEventHandler()->ProcessEvent(vEventNav) )
@@ -1085,7 +1099,6 @@ bool wxTextCtrl::OS2Command(
                                           );
 
                 InitCommandEvent(vEvent);
                                           );
 
                 InitCommandEvent(vEvent);
-                vEvent.SetString((char*)GetValue().c_str());
                 ProcessCommand(vEvent);
             }
             break;
                 ProcessCommand(vEvent);
             }
             break;
@@ -1100,15 +1113,15 @@ bool wxTextCtrl::OS2Command(
         case EN_SCROLL:
         case EN_INSERTMODETOGGLE:
         case EN_MEMERROR:
         case EN_SCROLL:
         case EN_INSERTMODETOGGLE:
         case EN_MEMERROR:
-            return FALSE;
+            return false;
         default:
         default:
-            return FALSE;
+            return false;
     }
 
     //
     // Processed
     //
     }
 
     //
     // Processed
     //
-    return TRUE;
+    return true;
 } // end of wxTextCtrl::OS2Command
 
 void wxTextCtrl::AdjustSpaceLimit()
 } // end of wxTextCtrl::OS2Command
 
 void wxTextCtrl::AdjustSpaceLimit()
@@ -1127,10 +1140,11 @@ void wxTextCtrl::AdjustSpaceLimit()
     }
     else
     {
     }
     else
     {
-        ENTRYFDATA*                 pEfd;
+        ENTRYFDATA                  Efd;
         WNDPARAMS                   vParams;
 
         vParams.fsStatus = WPM_CBCTLDATA;
         WNDPARAMS                   vParams;
 
         vParams.fsStatus = WPM_CBCTLDATA;
+        vParams.pCtlData = &Efd;
         vParams.cbCtlData = sizeof(ENTRYFDATA);
 
         if (::WinSendMsg( GetHwnd()
         vParams.cbCtlData = sizeof(ENTRYFDATA);
 
         if (::WinSendMsg( GetHwnd()
@@ -1138,10 +1152,7 @@ void wxTextCtrl::AdjustSpaceLimit()
                          ,&vParams
                          ,0
                         ))
                          ,&vParams
                          ,0
                         ))
-        {
-            pEfd = (ENTRYFDATA*)vParams.pCtlData;
-            uLimit = (unsigned int)pEfd->cchEditLimit;
-        }
+            uLimit = (unsigned int)Efd.cchEditLimit;
         else
             uLimit = 32; //PM's default
     }
         else
             uLimit = 32; //PM's default
     }
@@ -1155,27 +1166,30 @@ void wxTextCtrl::AdjustSpaceLimit()
         if (m_bIsMLE)
             ::WinSendMsg(GetHwnd(), MLM_SETTEXTLIMIT, MPFROMLONG(uLimit), 0);
         else
         if (m_bIsMLE)
             ::WinSendMsg(GetHwnd(), MLM_SETTEXTLIMIT, MPFROMLONG(uLimit), 0);
         else
-            ::WinSendMsg(GetHwnd(), EM_SETTEXTLIMIT, MPFROMLONG(uLimit), 0);
+            ::WinSendMsg(GetHwnd(), EM_SETTEXTLIMIT, MPFROMSHORT(uLimit), 0);
     }
 } // end of wxTextCtrl::AdjustSpaceLimit
 
 bool wxTextCtrl::AcceptsFocus() const
 {
     //
     }
 } // end of wxTextCtrl::AdjustSpaceLimit
 
 bool wxTextCtrl::AcceptsFocus() const
 {
     //
-    // We don't want focus if we can't be edited
+    // We don't want focus if we can't be edited unless we're a multiline
+    // control because then it might be still nice to get focus from keyboard
+    // to be able to scroll it without mouse
     //
     //
-    return IsEditable() && wxControl::AcceptsFocus();
+    return (IsEditable() || IsMultiLine()) && wxControl::AcceptsFocus();
 } // end of wxTextCtrl::Command
 
 wxSize wxTextCtrl::DoGetBestSize() const
 {
     int                             nCx;
     int                             nCy;
 } // end of wxTextCtrl::Command
 
 wxSize wxTextCtrl::DoGetBestSize() const
 {
     int                             nCx;
     int                             nCy;
+    wxFont                          vFont = (wxFont)GetFont();
 
 
-    wxGetCharSize(GetHWND(), &nCx, &nCy, (wxFont*)&GetFont());
+    wxGetCharSize(GetHWND(), &nCx, &nCy, &vFont);
 
     int                             wText = DEFAULT_ITEM_WIDTH;
 
     int                             wText = DEFAULT_ITEM_WIDTH;
-    int                             hText = (EDIT_HEIGHT_FROM_CHAR_HEIGHT(nCy) * .8);
+    int                             hText = (int)(EDIT_HEIGHT_FROM_CHAR_HEIGHT(nCy) * .8);
 
     if (m_windowStyle & wxTE_MULTILINE)
     {
 
     if (m_windowStyle & wxTE_MULTILINE)
     {
@@ -1189,105 +1203,107 @@ wxSize wxTextCtrl::DoGetBestSize() const
 // standard handlers for standard edit menu events
 // ----------------------------------------------------------------------------
 
 // standard handlers for standard edit menu events
 // ----------------------------------------------------------------------------
 
-void wxTextCtrl::OnCut(
-  wxCommandEvent&                   rEvent
-)
+void wxTextCtrl::OnCut( wxCommandEvent& WXUNUSED(rEvent) )
 {
     Cut();
 } // end of wxTextCtrl::OnCut
 
 {
     Cut();
 } // end of wxTextCtrl::OnCut
 
-void wxTextCtrl::OnCopy(
-  wxCommandEvent&                   rEvent
-)
+void wxTextCtrl::OnCopy( wxCommandEvent& WXUNUSED(rEvent) )
 {
     Copy();
 } // end of wxTextCtrl::OnCopy
 
 {
     Copy();
 } // end of wxTextCtrl::OnCopy
 
-void wxTextCtrl::OnPaste(
-  wxCommandEvent&                   rEvent
-)
+void wxTextCtrl::OnPaste( wxCommandEvent& WXUNUSED(rEvent) )
 {
     Paste();
 } // end of wxTextCtrl::OnPaste
 
 {
     Paste();
 } // end of wxTextCtrl::OnPaste
 
-void wxTextCtrl::OnUndo(
-  wxCommandEvent&                   rEvent
-)
+void wxTextCtrl::OnUndo( wxCommandEvent& WXUNUSED(rEvent) )
 {
     Undo();
 } // end of wxTextCtrl::OnUndo
 
 {
     Undo();
 } // end of wxTextCtrl::OnUndo
 
-void wxTextCtrl::OnRedo(
-  wxCommandEvent&                   rEvent
-)
+void wxTextCtrl::OnRedo( wxCommandEvent& WXUNUSED(rEvent) )
 {
     Redo();
 } // end of wxTextCtrl::OnRedo
 
 {
     Redo();
 } // end of wxTextCtrl::OnRedo
 
-void wxTextCtrl::OnUpdateCut(
-  wxUpdateUIEvent&                  rEvent
-)
+void wxTextCtrl::OnDelete( wxCommandEvent& WXUNUSED(rEvent) )
+{
+    long lFrom, lTo;
+
+    GetSelection( &lFrom, &lTo );
+
+    if (lFrom != -1 && lTo != -1)
+        Remove( lFrom, lTo );
+} // end of wxTextCtrl::OnDelete
+
+void wxTextCtrl::OnSelectAll( wxCommandEvent& WXUNUSED(rEvent) )
+{
+    SetSelection(-1, -1);
+} // end of wxTextCtrl::OnSelectAll
+
+void wxTextCtrl::OnUpdateCut( wxUpdateUIEvent& rEvent )
 {
     rEvent.Enable(CanCut());
 } // end of wxTextCtrl::OnUpdateCut
 
 {
     rEvent.Enable(CanCut());
 } // end of wxTextCtrl::OnUpdateCut
 
-void wxTextCtrl::OnUpdateCopy(
-  wxUpdateUIEvent&                  rEvent
-)
+void wxTextCtrl::OnUpdateCopy( wxUpdateUIEvent& rEvent )
 {
     rEvent.Enable(CanCopy());
 } // end of wxTextCtrl::OnUpdateCopy
 
 {
     rEvent.Enable(CanCopy());
 } // end of wxTextCtrl::OnUpdateCopy
 
-void wxTextCtrl::OnUpdatePaste(
-  wxUpdateUIEvent&                  rEvent
-)
+void wxTextCtrl::OnUpdatePaste( wxUpdateUIEvent& rEvent )
 {
     rEvent.Enable(CanPaste());
 } // end of wxTextCtrl::OnUpdatePaste
 
 {
     rEvent.Enable(CanPaste());
 } // end of wxTextCtrl::OnUpdatePaste
 
-void wxTextCtrl::OnUpdateUndo(
-  wxUpdateUIEvent&                  rEvent
-)
+void wxTextCtrl::OnUpdateUndo( wxUpdateUIEvent& rEvent )
 {
     rEvent.Enable(CanUndo());
 } // end of wxTextCtrl::OnUpdateUndo
 
 {
     rEvent.Enable(CanUndo());
 } // end of wxTextCtrl::OnUpdateUndo
 
-void wxTextCtrl::OnUpdateRedo(
-  wxUpdateUIEvent&                  rEvent
-)
+void wxTextCtrl::OnUpdateRedo( wxUpdateUIEvent& rEvent )
 {
     rEvent.Enable(CanRedo());
 } // end of wxTextCtrl::OnUpdateRedo
 
 {
     rEvent.Enable(CanRedo());
 } // end of wxTextCtrl::OnUpdateRedo
 
-bool wxTextCtrl::SetBackgroundColour(
-  const wxColour&                   rColour
-)
+void wxTextCtrl::OnUpdateDelete( wxUpdateUIEvent& rEvent )
+{
+    long lFrom, lTo;
+
+    GetSelection( &lFrom, &lTo );
+    rEvent.Enable( lFrom != -1L && lTo != -1L && lFrom != lTo && IsEditable()) ;
+} // end of wxTextCtrl::OnUpdateDelete
+
+void wxTextCtrl::OnUpdateSelectAll( wxUpdateUIEvent& rEvent )
+{
+    rEvent.Enable(GetLastPosition() > 0);
+} // end of wxTextCtrl::OnUpdateSelectAll
+
+bool wxTextCtrl::SetBackgroundColour( const wxColour& rColour )
 {
     if (m_bIsMLE)
         ::WinSendMsg(GetHwnd(), MLM_SETBACKCOLOR, (MPARAM)rColour.GetPixel(), MLE_INDEX);
 {
     if (m_bIsMLE)
         ::WinSendMsg(GetHwnd(), MLM_SETBACKCOLOR, (MPARAM)rColour.GetPixel(), MLE_INDEX);
-    return TRUE;
+    return true;
 } // end of wxTextCtrl::SetBackgroundColour
 
 } // end of wxTextCtrl::SetBackgroundColour
 
-bool wxTextCtrl::SetForegroundColour(
-  const wxColour&                   rColour
-)
+bool wxTextCtrl::SetForegroundColour( const wxColour& rColour )
 {
     if (m_bIsMLE)
         ::WinSendMsg(GetHwnd(), MLM_SETTEXTCOLOR, (MPARAM)rColour.GetPixel(), MLE_INDEX);
 {
     if (m_bIsMLE)
         ::WinSendMsg(GetHwnd(), MLM_SETTEXTCOLOR, (MPARAM)rColour.GetPixel(), MLE_INDEX);
-    return TRUE;
+    return true;
 } // end of wxTextCtrl::SetForegroundColour
 
 } // end of wxTextCtrl::SetForegroundColour
 
-bool wxTextCtrl::SetStyle(
-  long                              lStart
-, long                              lEnd
-, const wxTextAttr&                 rStyle
-)
+bool wxTextCtrl::SetStyle( long lStart,
+                           long lEnd,
+                           const wxTextAttr& WXUNUSED(rStyle) )
 {
 {
-    HWND                            hWnd = GetHwnd();
+    HWND hWnd = GetHwnd();
 
     if (lStart > lEnd)
     {
 
     if (lStart > lEnd)
     {
-        long                        lTmp = lStart;
+        long lTmp = lStart;
 
         lStart = lEnd;
         lEnd   = lTmp;
 
         lStart = lEnd;
         lEnd   = lTmp;
@@ -1297,18 +1313,15 @@ bool wxTextCtrl::SetStyle(
     // We can only change the format of the selection, so select the range we
     // want and restore the old selection later
     //
     // We can only change the format of the selection, so select the range we
     // want and restore the old selection later
     //
-    long                            lStartOld;
-    long                            lEndOld;
+    long lStartOld, lEndOld;
 
 
-    GetSelection( &lStartOld
-                 ,&lEndOld
-                );
+    GetSelection( &lStartOld, &lEndOld );
 
     //
     // But do we really have to change the selection?
     //
 
     //
     // But do we really have to change the selection?
     //
-    bool                            bChangeSel = lStart != lStartOld ||
-                                                 lEnd != lEndOld;
+    bool bChangeSel = lStart != lStartOld ||
+                      lEnd != lEndOld;
 
     if (bChangeSel)
     {
 
     if (bChangeSel)
     {
@@ -1321,6 +1334,5 @@ bool wxTextCtrl::SetStyle(
     //
     // TODO:: finish this part
     //
     //
     // TODO:: finish this part
     //
-    return TRUE;
+    return true;
 } // end of wxTextCtrl::SetStyle
 } // end of wxTextCtrl::SetStyle
-