X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/57ff8a875bff6f8ba8a6616ed7095b74a835c622..5ccb95f690bd7265b1b86718149a79bb97dcf4d8:/src/os2/textctrl.cpp?ds=sidebyside diff --git a/src/os2/textctrl.cpp b/src/os2/textctrl.cpp index 3b2b97719a..c9bc9d2411 100644 --- a/src/os2/textctrl.cpp +++ b/src/os2/textctrl.cpp @@ -25,8 +25,9 @@ #include "wx/log.h" #endif +#include "wx/app.h" + #if wxUSE_CLIPBOARD - #include "wx/app.h" #include "wx/clipbrd.h" #endif @@ -101,9 +102,6 @@ bool wxTextCtrl::Create( , const wxString& rsName ) { - HWND hParent; - int nTempy; - // // Base initialization // @@ -115,7 +113,7 @@ bool wxTextCtrl::Create( ,rValidator ,rsName )) - return FALSE; + return false; wxPoint vPos = rPos; // The OS/2 position SWP vSwp; @@ -126,7 +124,7 @@ bool wxTextCtrl::Create( } m_windowStyle = lStyle; - m_bIsMLE = FALSE; + m_bIsMLE = false; long lSstyle = WS_VISIBLE | WS_TABSTOP; @@ -136,7 +134,7 @@ bool wxTextCtrl::Create( 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; @@ -194,7 +192,7 @@ bool wxTextCtrl::Create( if (m_hWnd == 0) { - return FALSE; + return false; } SubclassWin(GetHWND()); @@ -208,7 +206,7 @@ bool wxTextCtrl::Create( ,wxNORMAL ); SetFont(*pTextFont); - if (!rsValue.IsEmpty()) + if (!rsValue.empty()) { SetValue(rsValue); } @@ -226,7 +224,7 @@ bool wxTextCtrl::Create( ,rSize.y ); delete pTextFont; - return TRUE; + return true; } // end of wxTextCtrl::Create // @@ -357,7 +355,7 @@ void wxTextCtrl::SetValue( // if ((rsValue.length() > 0x400) || (rsValue != GetValue())) { - ::WinSetWindowText(GetHwnd(), rsValue.c_str()); + ::WinSetWindowText(GetHwnd(), (PSZ)rsValue.c_str()); AdjustSpaceLimit(); } } // end of wxTextCtrl::SetValue @@ -369,7 +367,7 @@ void wxTextCtrl::WriteText( 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 @@ -459,10 +457,10 @@ bool wxTextCtrl::CanCut() const bool wxTextCtrl::CanPaste() const { - bool bIsTextAvailable = FALSE; + bool bIsTextAvailable = false; if (!IsEditable()) - return FALSE; + return false; // // Check for straight text on clipboard @@ -505,8 +503,17 @@ void wxTextCtrl::SetInsertionPoint( 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 @@ -524,7 +531,7 @@ long wxTextCtrl::GetInsertionPoint() const return (dwPos & 0xFFFF); } // end of wxTextCtrl::GetInsertionPoint -long wxTextCtrl::GetLastPosition() const +wxTextPos wxTextCtrl::GetLastPosition() const { HWND hWnd = GetHwnd(); long lCharIndex; @@ -590,16 +597,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(); - long lFromChar = lFrom; - long lToChar = lTo; + HWND hWnd = GetHwnd(); // // Set selection and remove it @@ -626,6 +629,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 @@ -636,8 +642,6 @@ void wxTextCtrl::Remove( ) { HWND hWnd = GetHwnd(); - long lFromChar = lFrom; - long lToChar = lTo; if (m_bIsMLE) { @@ -661,7 +665,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)) @@ -685,9 +689,9 @@ bool wxTextCtrl::LoadFile( // Update the size limit if needed // AdjustSpaceLimit(); - return TRUE; + return true; } - return FALSE; + return false; } // end of wxTextCtrl::LoadFile bool wxTextCtrl::IsModified() const @@ -701,6 +705,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' // @@ -731,7 +744,6 @@ long wxTextCtrl::XYToPosition( , long lY ) const { - HWND hWnd = GetHwnd(); long lCharIndex = 0L; long lLen; @@ -763,7 +775,7 @@ bool wxTextCtrl::PositionToXY( if (nLineNo == -1) { // no such line - return FALSE; + return false; } // @@ -795,7 +807,7 @@ bool wxTextCtrl::PositionToXY( if (lCharIndex == -1) { - return FALSE; + return false; } // @@ -806,15 +818,13 @@ bool wxTextCtrl::PositionToXY( if (plY) *plY = nLineNo; - return TRUE; + 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: @@ -841,17 +851,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() @@ -874,14 +884,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; @@ -892,7 +902,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'; @@ -907,7 +917,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; @@ -946,7 +956,7 @@ bool wxTextCtrl::CanUndo() const 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 @@ -957,7 +967,7 @@ bool wxTextCtrl::CanRedo() const 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 @@ -984,22 +994,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; - 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) { @@ -1029,7 +1034,7 @@ void wxTextCtrl::OnChar( wxKeyEvent& rEvent ) { - switch (rEvent.KeyCode()) + switch (rEvent.GetKeyCode()) { case WXK_RETURN: if ( !(m_windowStyle & wxTE_MULTILINE) ) @@ -1056,7 +1061,7 @@ void wxTextCtrl::OnChar( wxNavigationKeyEvent vEventNav; vEventNav.SetDirection(!rEvent.ShiftDown()); - vEventNav.SetWindowChange(FALSE); + vEventNav.SetWindowChange(false); vEventNav.SetEventObject(this); if ( GetEventHandler()->ProcessEvent(vEventNav) ) @@ -1094,7 +1099,6 @@ bool wxTextCtrl::OS2Command( ); InitCommandEvent(vEvent); - vEvent.SetString((char*)GetValue().c_str()); ProcessCommand(vEvent); } break; @@ -1109,15 +1113,15 @@ bool wxTextCtrl::OS2Command( case EN_SCROLL: case EN_INSERTMODETOGGLE: case EN_MEMERROR: - return FALSE; + return false; default: - return FALSE; + return false; } // // Processed // - return TRUE; + return true; } // end of wxTextCtrl::OS2Command void wxTextCtrl::AdjustSpaceLimit() @@ -1136,10 +1140,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() @@ -1147,10 +1152,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 } @@ -1164,7 +1166,7 @@ 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 @@ -1182,11 +1184,12 @@ 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 = (EDIT_HEIGHT_FROM_CHAR_HEIGHT(nCy) * .8); + int hText = (int)(EDIT_HEIGHT_FROM_CHAR_HEIGHT(nCy) * .8); if (m_windowStyle & wxTE_MULTILINE) { @@ -1200,148 +1203,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; + 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; + 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; @@ -1351,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 // - 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) { @@ -1375,6 +1334,5 @@ bool wxTextCtrl::SetStyle( // // TODO:: finish this part // - return TRUE; + return true; } // end of wxTextCtrl::SetStyle -