X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/70a2c6562fcc7088076ab421419069ef50e4a7d3..957f865c9703cd3e86c170cd7d2cb538a5628ebd:/src/os2/textctrl.cpp diff --git a/src/os2/textctrl.cpp b/src/os2/textctrl.cpp index a9e711e7b0..e4b53da391 100644 --- a/src/os2/textctrl.cpp +++ b/src/os2/textctrl.cpp @@ -86,6 +86,10 @@ wxTextCtrl::wxTextCtrl() { } +wxTextCtrl::~wxTextCtrl() +{ +} + bool wxTextCtrl::Create( wxWindow* pParent , wxWindowID vId @@ -93,14 +97,10 @@ bool wxTextCtrl::Create( , const wxPoint& rPos , const wxSize& rSize , long lStyle -#if wxUSE_VALIDATORS , const wxValidator& rValidator -#endif , const wxString& rsName ) { - HWND hParent; - int nTempy; // // Base initialization // @@ -109,9 +109,7 @@ bool wxTextCtrl::Create( ,rPos ,rSize ,lStyle -#if wxUSE_VALIDATORS ,rValidator -#endif ,rsName )) return FALSE; @@ -506,6 +504,15 @@ void wxTextCtrl::SetInsertionPointEnd() { long 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 @@ -597,8 +604,6 @@ void wxTextCtrl::Replace( { #if wxUSE_CLIPBOARD HWND hWnd = GetHwnd(); - long lFromChar = lFrom; - long lToChar = lTo; // // Set selection and remove it @@ -635,8 +640,6 @@ void wxTextCtrl::Remove( ) { HWND hWnd = GetHwnd(); - long lFromChar = lFrom; - long lToChar = lTo; if (m_bIsMLE) { @@ -660,7 +663,7 @@ void wxTextCtrl::SetSelection( 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)) @@ -700,6 +703,15 @@ bool wxTextCtrl::IsModified() const 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' // @@ -730,7 +742,6 @@ long wxTextCtrl::XYToPosition( , long lY ) const { - HWND hWnd = GetHwnd(); long lCharIndex = 0L; long lLen; @@ -993,7 +1004,6 @@ WXHBRUSH wxTextCtrl::OnCtlColor( ) { HPS hPS = (HPS)hWxDC; - wxBrush* pBrush = NULL; wxColour vColBack = GetBackgroundColour(); wxColour vColFore = GetForegroundColour(); wxBrush* pBackgroundBrush = wxTheBrushList->FindOrCreateBrush( GetBackgroundColour() @@ -1028,7 +1038,7 @@ void wxTextCtrl::OnChar( wxKeyEvent& rEvent ) { - switch (rEvent.KeyCode()) + switch (rEvent.GetKeyCode()) { case WXK_RETURN: if ( !(m_windowStyle & wxTE_MULTILINE) ) @@ -1135,10 +1145,11 @@ void wxTextCtrl::AdjustSpaceLimit() } else { - ENTRYFDATA* pEfd; + ENTRYFDATA Efd; WNDPARAMS vParams; vParams.fsStatus = WPM_CBCTLDATA; + vParams.pCtlData = &Efd; vParams.cbCtlData = sizeof(ENTRYFDATA); if (::WinSendMsg( GetHwnd() @@ -1146,10 +1157,7 @@ void wxTextCtrl::AdjustSpaceLimit() ,&vParams ,0 )) - { - pEfd = (ENTRYFDATA*)vParams.pCtlData; - uLimit = (unsigned int)pEfd->cchEditLimit; - } + uLimit = (unsigned int)Efd.cchEditLimit; else uLimit = 32; //PM's default } @@ -1163,16 +1171,18 @@ void wxTextCtrl::AdjustSpaceLimit() 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 { // - // 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 @@ -1183,7 +1193,7 @@ wxSize wxTextCtrl::DoGetBestSize() const wxGetCharSize(GetHWND(), &nCx, &nCy, (wxFont*)&GetFont()); 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) { @@ -1232,6 +1242,29 @@ void wxTextCtrl::OnRedo( Redo(); } // end of wxTextCtrl::OnRedo +void wxTextCtrl::OnDelete( + wxCommandEvent& rEvent +) +{ + long lFrom; + long lTo; + + GetSelection( &lFrom + ,&lTo + ); + if (lFrom != -1 && lTo != -1) + Remove( lFrom + ,lTo + ); +} // end of wxTextCtrl::OnDelete + +void wxTextCtrl::OnSelectAll( + wxCommandEvent& rEvent +) +{ + SetSelection(-1, -1); +} // end of wxTextCtrl::OnSelectAll + void wxTextCtrl::OnUpdateCut( wxUpdateUIEvent& rEvent ) @@ -1267,6 +1300,26 @@ void wxTextCtrl::OnUpdateRedo( rEvent.Enable(CanRedo()); } // end of wxTextCtrl::OnUpdateRedo +void wxTextCtrl::OnUpdateDelete( + wxUpdateUIEvent& rEvent +) +{ + long lFrom; + long 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 )