]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/textctrl.cpp
Fix --enable-webview_xxx options names in configure.
[wxWidgets.git] / src / os2 / textctrl.cpp
index be45467059a00b41b823ed7a70da71c3e598dbd6..3be381a95f154c62551524b43d0bb9327f2a8698 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        textctrl.cpp
+// Name:        src/os2/textctrl.cpp
 // Purpose:     wxTextCtrl
 // Author:      David Webster
 // Modified by:
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
+#include "wx/textctrl.h"
+
 #ifndef WX_PRECOMP
-    #include "wx/textctrl.h"
     #include "wx/scrolwin.h"
     #include "wx/settings.h"
     #include "wx/brush.h"
     #include "wx/utils.h"
     #include "wx/log.h"
+    #include "wx/app.h"
 #endif
 
 #if wxUSE_CLIPBOARD
-    #include "wx/app.h"
     #include "wx/clipbrd.h"
 #endif
 
@@ -54,9 +55,7 @@
 // event tables and other macros
 // ----------------------------------------------------------------------------
 
-IMPLEMENT_DYNAMIC_CLASS(wxTextCtrl, wxControl)
-
-BEGIN_EVENT_TABLE(wxTextCtrl, wxControl)
+BEGIN_EVENT_TABLE(wxTextCtrl, wxTextCtrlBase)
     EVT_CHAR(wxTextCtrl::OnChar)
     EVT_DROP_FILES(wxTextCtrl::OnDropFiles)
 
@@ -124,6 +123,7 @@ bool wxTextCtrl::Create(
 
     m_windowStyle = lStyle;
     m_bIsMLE = false;
+    m_bSkipUpdate = false;
 
     long                            lSstyle = WS_VISIBLE | WS_TABSTOP;
 
@@ -158,7 +158,7 @@ bool wxTextCtrl::Create(
     {
         m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle
                                            ,WC_MLE                   // Window class
-                                           ,(PSZ)rsValue.c_str()     // Initial Text
+                                           ,rsValue.c_str()     // Initial Text
                                            ,(ULONG)lSstyle           // Style flags
                                            ,(LONG)0                  // X pos of origin
                                            ,(LONG)0                  // Y pos of origin
@@ -175,7 +175,7 @@ bool wxTextCtrl::Create(
     {
         m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle
                                            ,WC_ENTRYFIELD            // Window class
-                                           ,(PSZ)rsValue.c_str()     // Initial Text
+                                           ,rsValue.c_str()     // Initial Text
                                            ,(ULONG)lSstyle           // Style flags
                                            ,(LONG)0                  // X pos of origin
                                            ,(LONG)0                  // Y pos of origin
@@ -327,7 +327,8 @@ void wxTextCtrl::SetupColours()
 wxString wxTextCtrl::GetValue() const
 {
     wxString                        sStr = wxGetWindowText(GetHWND());
-    char*                           zStr = (char*)sStr.c_str();
+    wxCharBuffer                    buf(sStr.char_str());
+    char*                           zStr = buf.data();
 
     for ( ; *zStr; zStr++ )
     {
@@ -339,11 +340,12 @@ wxString wxTextCtrl::GetValue() const
         if (*zStr == '\r')
             *zStr = '\n';
     }
-    return sStr;
+    return zStr;
 } // end of wxTextCtrl::GetValue
 
-void wxTextCtrl::SetValue(
-  const wxString&                   rsValue
+void wxTextCtrl::DoSetValue(
+  const wxString&                   rsValue,
+  int flags
 )
 {
     //
@@ -354,6 +356,9 @@ void wxTextCtrl::SetValue(
     //
     if ((rsValue.length() > 0x400) || (rsValue != GetValue()))
     {
+        if ( flags & SetValue_SendEvent )
+            m_bSkipUpdate = true;
+
         ::WinSetWindowText(GetHwnd(), rsValue.c_str());
         AdjustSpaceLimit();
     }
@@ -364,7 +369,7 @@ void wxTextCtrl::WriteText(
 )
 {
     if (m_bIsMLE)
-        ::WinSendMsg(GetHwnd(), MLM_INSERT, MPARAM((PCHAR)rsValue.c_str()), MPARAM(0));
+        ::WinSendMsg(GetHwnd(), MLM_INSERT, MPARAM(rsValue.wx_str()), MPARAM(0));
     else
         ::WinSetWindowText(GetHwnd(), rsValue.c_str());
     AdjustSpaceLimit();
@@ -596,14 +601,12 @@ bool wxTextCtrl::IsEditable() const
 // Editing
 // ----------------------------------------------------------------------------
 
-void wxTextCtrl::Replace(
-  long                              lFrom
-, long                              lTo
-, const wxString&                   rsValue
-)
+void wxTextCtrl::Replace( long lFrom,
+                          long lTo,
+                          const wxString& rsValue )
 {
 #if wxUSE_CLIPBOARD
-    HWND                            hWnd      = GetHwnd();
+    HWND hWnd = GetHwnd();
 
     //
     // Set selection and remove it
@@ -630,6 +633,9 @@ void wxTextCtrl::Replace(
     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
@@ -677,11 +683,12 @@ void wxTextCtrl::SetSelection(
         ::WinSendMsg(hWnd, EM_SETSEL, MPFROM2SHORT((USHORT)lFromChar, (USHORT)lToChar), (MPARAM)0);
 } // end of wxTextCtrl::SetSelection
 
-bool wxTextCtrl::LoadFile(
-  const wxString&                   rsFile
+bool wxTextCtrl::DoLoadFile(
+  const wxString&                   rsFile,
+  int                               fileType
 )
 {
-    if ( wxTextCtrlBase::LoadFile(rsFile) )
+    if ( wxTextCtrlBase::DoLoadFile(rsFile, fileType) )
     {
         //
         // Update the size limit if needed
@@ -690,7 +697,7 @@ bool wxTextCtrl::LoadFile(
         return true;
     }
     return false;
-} // end of wxTextCtrl::LoadFile
+} // end of wxTextCtrl::DoLoadFile
 
 bool wxTextCtrl::IsModified() const
 {
@@ -709,7 +716,7 @@ void wxTextCtrl::MarkDirty()
         ::WinSendMsg(GetHwnd(), MLM_SETCHANGED, MPFROMLONG(TRUE), 0);
     else
         // EM controls do not have a SETCHANGED, what can we do??
-        wxFAIL_MSG( _T("not implemented") );
+        wxFAIL_MSG( wxT("not implemented") );
 }
 
 //
@@ -819,12 +826,10 @@ bool wxTextCtrl::PositionToXY(
     return true;
 } // 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:
@@ -851,17 +856,17 @@ void 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)
+    {
         lLen = (long)::WinSendMsg(GetHwnd(), MLM_QUERYLINELENGTH, 0, 0);
+    }
     else
     {
-        WNDPARAMS                   vParams;
+        WNDPARAMS vParams;
 
         vParams.fsStatus = WPM_CCHTEXT;
         if (::WinSendMsg( GetHwnd()
@@ -884,14 +889,14 @@ wxString wxTextCtrl::GetLineText(
 {
     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);
-    zBuf = new char[lLen];
+    zBuf = new wxChar[lLen];
     if (m_bIsMLE)
     {
         long                        lIndex;
@@ -902,7 +907,7 @@ wxString wxTextCtrl::GetLineText(
         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';
@@ -917,7 +922,7 @@ wxString wxTextCtrl::GetLineText(
                          ,&vParams
                          ,0
                         ))
-         memcpy(zBuf, vParams.pszText, vParams.cchText);
+         memcpy((char*)zBuf, vParams.pszText, vParams.cchText);
          zBuf[vParams.cchText] = '\0';
      }
      sStr = zBuf;
@@ -994,21 +999,17 @@ void 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;
-    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)
     {
@@ -1046,7 +1047,7 @@ void wxTextCtrl::OnChar(
                 wxCommandEvent      vEvent(wxEVT_COMMAND_TEXT_ENTER, m_windowId);
 
                 vEvent.SetEventObject(this);
-                if ( GetEventHandler()->ProcessEvent(vEvent))
+                if ( HandleWindowEvent(vEvent))
                     return;
             }
             //else: multiline controls need Enter for themselves
@@ -1068,7 +1069,7 @@ void wxTextCtrl::OnChar(
                 vEventNav.SetWindowChange(false);
                 vEventNav.SetEventObject(this);
 
-                if ( GetEventHandler()->ProcessEvent(vEventNav) )
+                if ( HandleWindowEvent(vEventNav) )
                     return;
             }
             break;
@@ -1092,12 +1093,18 @@ bool wxTextCtrl::OS2Command(
                                           );
 
                 vEvent.SetEventObject(this);
-                GetEventHandler()->ProcessEvent(vEvent);
+                HandleWindowEvent(vEvent);
             }
             break;
 
         case EN_CHANGE:
             {
+                if (m_bSkipUpdate)
+                {
+                    m_bSkipUpdate = false;
+                    break;
+                }
+
                 wxCommandEvent      vEvent( wxEVT_COMMAND_TEXT_UPDATED
                                            ,m_windowId
                                           );
@@ -1162,11 +1169,17 @@ void wxTextCtrl::AdjustSpaceLimit()
     }
     if (uLen >= uLimit)
     {
-        uLimit = uLen + 0x8000;    // 32Kb
-        if (uLimit > 0xffff)
+        if (m_bIsMLE)
         {
-            uLimit = 0L;
+            uLimit = uLen + 0x8000;    // 32Kb
+            if (uLimit > 0xffff)
+            {
+                uLimit = 0L;
+            }
         }
+        else
+            uLimit = 0x7fff;
+
         if (m_bIsMLE)
             ::WinSendMsg(GetHwnd(), MLM_SETTEXTLIMIT, MPFROMLONG(uLimit), 0);
         else
@@ -1188,8 +1201,9 @@ 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                             hText = (int)(EDIT_HEIGHT_FROM_CHAR_HEIGHT(nCy) * .8);
@@ -1206,148 +1220,107 @@ wxSize wxTextCtrl::DoGetBestSize() const
 // standard handlers for standard edit menu events
 // ----------------------------------------------------------------------------
 
-void wxTextCtrl::OnCut(
-  wxCommandEvent&                   rEvent
-)
+void wxTextCtrl::OnCut( wxCommandEvent& WXUNUSED(rEvent) )
 {
     Cut();
 } // end of wxTextCtrl::OnCut
 
-void wxTextCtrl::OnCopy(
-  wxCommandEvent&                   rEvent
-)
+void wxTextCtrl::OnCopy( wxCommandEvent& WXUNUSED(rEvent) )
 {
     Copy();
 } // end of wxTextCtrl::OnCopy
 
-void wxTextCtrl::OnPaste(
-  wxCommandEvent&                   rEvent
-)
+void wxTextCtrl::OnPaste( wxCommandEvent& WXUNUSED(rEvent) )
 {
     Paste();
 } // end of wxTextCtrl::OnPaste
 
-void wxTextCtrl::OnUndo(
-  wxCommandEvent&                   rEvent
-)
+void wxTextCtrl::OnUndo( wxCommandEvent& WXUNUSED(rEvent) )
 {
     Undo();
 } // end of wxTextCtrl::OnUndo
 
-void wxTextCtrl::OnRedo(
-  wxCommandEvent&                   rEvent
-)
+void wxTextCtrl::OnRedo( wxCommandEvent& WXUNUSED(rEvent) )
 {
     Redo();
 } // end of wxTextCtrl::OnRedo
 
-void wxTextCtrl::OnDelete(
-  wxCommandEvent&                   rEvent
-)
+void wxTextCtrl::OnDelete( wxCommandEvent& WXUNUSED(rEvent) )
 {
-    long                            lFrom;
-    long                            lTo;
+    long lFrom, lTo;
+
+    GetSelection( &lFrom, &lTo );
 
-    GetSelection( &lFrom
-                 ,&lTo
-                );
     if (lFrom != -1 && lTo != -1)
-        Remove( lFrom
-               ,lTo
-              );
+        Remove( lFrom, lTo );
 } // end of wxTextCtrl::OnDelete
 
-void wxTextCtrl::OnSelectAll(
-  wxCommandEvent&                   rEvent
-)
+void wxTextCtrl::OnSelectAll( wxCommandEvent& WXUNUSED(rEvent) )
 {
     SetSelection(-1, -1);
 } // end of wxTextCtrl::OnSelectAll
 
-void wxTextCtrl::OnUpdateCut(
-  wxUpdateUIEvent&                  rEvent
-)
+void wxTextCtrl::OnUpdateCut( wxUpdateUIEvent& rEvent )
 {
     rEvent.Enable(CanCut());
 } // end of wxTextCtrl::OnUpdateCut
 
-void wxTextCtrl::OnUpdateCopy(
-  wxUpdateUIEvent&                  rEvent
-)
+void wxTextCtrl::OnUpdateCopy( wxUpdateUIEvent& rEvent )
 {
     rEvent.Enable(CanCopy());
 } // end of wxTextCtrl::OnUpdateCopy
 
-void wxTextCtrl::OnUpdatePaste(
-  wxUpdateUIEvent&                  rEvent
-)
+void wxTextCtrl::OnUpdatePaste( wxUpdateUIEvent& rEvent )
 {
     rEvent.Enable(CanPaste());
 } // end of wxTextCtrl::OnUpdatePaste
 
-void wxTextCtrl::OnUpdateUndo(
-  wxUpdateUIEvent&                  rEvent
-)
+void wxTextCtrl::OnUpdateUndo( wxUpdateUIEvent& rEvent )
 {
     rEvent.Enable(CanUndo());
 } // end of wxTextCtrl::OnUpdateUndo
 
-void wxTextCtrl::OnUpdateRedo(
-  wxUpdateUIEvent&                  rEvent
-)
+void wxTextCtrl::OnUpdateRedo( wxUpdateUIEvent& rEvent )
 {
     rEvent.Enable(CanRedo());
 } // end of wxTextCtrl::OnUpdateRedo
 
-void wxTextCtrl::OnUpdateDelete(
-  wxUpdateUIEvent&                  rEvent
-)
+void wxTextCtrl::OnUpdateDelete( wxUpdateUIEvent& rEvent )
 {
-    long                            lFrom;
-    long                            lTo;
+    long lFrom, lTo;
 
-    GetSelection( &lFrom
-                 ,&lTo
-                );
+    GetSelection( &lFrom, &lTo );
     rEvent.Enable( lFrom != -1L && lTo != -1L && lFrom != lTo && IsEditable()) ;
 } // end of wxTextCtrl::OnUpdateDelete
 
-void wxTextCtrl::OnUpdateSelectAll(
-  wxUpdateUIEvent&                  rEvent
-)
+void wxTextCtrl::OnUpdateSelectAll( wxUpdateUIEvent& rEvent )
 {
     rEvent.Enable(GetLastPosition() > 0);
 } // end of wxTextCtrl::OnUpdateSelectAll
 
-bool wxTextCtrl::SetBackgroundColour(
-  const wxColour&                   rColour
-)
+bool wxTextCtrl::SetBackgroundColour( const wxColour& rColour )
 {
     if (m_bIsMLE)
         ::WinSendMsg(GetHwnd(), MLM_SETBACKCOLOR, (MPARAM)rColour.GetPixel(), MLE_INDEX);
     return true;
 } // 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);
     return true;
 } // 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)
     {
-        long                        lTmp = lStart;
+        long lTmp = lStart;
 
         lStart = lEnd;
         lEnd   = lTmp;
@@ -1357,18 +1330,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
     //
-    long                            lStartOld;
-    long                            lEndOld;
+    long lStartOld, lEndOld;
 
-    GetSelection( &lStartOld
-                 ,&lEndOld
-                );
+    GetSelection( &lStartOld, &lEndOld );
 
     //
     // But do we really have to change the selection?
     //
-    bool                            bChangeSel = lStart != lStartOld ||
-                                                 lEnd != lEndOld;
+    bool bChangeSel = lStart != lStartOld ||
+                      lEnd != lEndOld;
 
     if (bChangeSel)
     {
@@ -1383,4 +1353,3 @@ bool wxTextCtrl::SetStyle(
     //
     return true;
 } // end of wxTextCtrl::SetStyle
-