X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/716ed2259a90954581baea38e4de16c772d6b27e..050c9e3c90c58b05d5b3f7384d1556ca9669f13e:/src/os2/textctrl.cpp?ds=sidebyside diff --git a/src/os2/textctrl.cpp b/src/os2/textctrl.cpp index 1895e9657b..0e4b7a4461 100644 --- a/src/os2/textctrl.cpp +++ b/src/os2/textctrl.cpp @@ -18,6 +18,7 @@ #ifndef WX_PRECOMP #include "wx/textctrl.h" + #include "wx/scrolwin.h" #include "wx/settings.h" #include "wx/brush.h" #include "wx/utils.h" @@ -43,7 +44,7 @@ # include #endif -#if defined(__EMX__) && !defined(MLE_INDEX) +#if !defined(MLE_INDEX) #define MLE_INDEX 0 #define MLE_RGB 1 #endif @@ -98,6 +99,8 @@ bool wxTextCtrl::Create( , const wxString& rsName ) { + HWND hParent; + int nTempy; // // Base initialization // @@ -118,17 +121,33 @@ bool wxTextCtrl::Create( if (pParent ) { pParent->AddChild(this); + hParent = GetWinHwnd(pParent); // // OS2 uses normal coordinates, no bassackwards Windows ones // -// vPos.y = pParent->GetSize().y - (vPos.y + rSize.y); + if (pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow)) || + pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) + ) + { + wxWindow* pGrandParent = NULL; + + pGrandParent = pParent->GetParent(); + if (pGrandParent) + nTempy = pGrandParent->GetSize().y - (vPos.y + rSize.y); + else + nTempy = pParent->GetSize().y - (vPos.y + rSize.y); + } + else + nTempy = pParent->GetSize().y - (vPos.y + rSize.y); + vPos.y = nTempy; } else { RECTL vRect; ::WinQueryWindowRect(HWND_DESKTOP, &vRect); -// vPos.y = vRect.yTop - (vPos.y + rSize.y); + hParent = HWND_DESKTOP; + vPos.y = vRect.yTop - (vPos.y + rSize.y); } m_windowStyle = lStyle; @@ -140,8 +159,8 @@ bool wxTextCtrl::Create( // if ( m_windowStyle & wxTE_MULTILINE ) { + lSstyle |= MLS_BORDER | MLS_WORDWRAP; m_bIsMLE = TRUE; - m_windowStyle |= wxTE_PROCESS_ENTER; if ((m_windowStyle & wxTE_NO_VSCROLL) == 0) lSstyle |= MLS_VSCROLL; @@ -152,7 +171,7 @@ bool wxTextCtrl::Create( } else { - lSstyle |= ES_LEFT; + lSstyle |= ES_LEFT | ES_AUTOSCROLL | ES_MARGIN; if (m_windowStyle & wxHSCROLL) lSstyle |= ES_AUTOSCROLL; @@ -161,6 +180,10 @@ bool wxTextCtrl::Create( if (m_windowStyle & wxTE_PASSWORD) // hidden input lSstyle |= ES_UNREADABLE; } + if ( pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow)) || + pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) + ) + lSstyle |= WS_CLIPSIBLINGS; if (m_bIsMLE) { m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle @@ -221,8 +244,8 @@ bool wxTextCtrl::Create( SetValue(rsValue); } SetupColours(); - SetSize( rPos.x - ,rPos.y + SetSize( vPos.x + ,vPos.y ,rSize.x ,rSize.y ); @@ -261,6 +284,14 @@ void wxTextCtrl::SetupColours() vBkgndColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW); SetBackgroundColour(vBkgndColour); SetForegroundColour(GetParent()->GetForegroundColour()); + if (m_bIsMLE) + { + ::WinSendMsg( GetHwnd() + ,MLM_SETTEXTCOLOR + ,(MPARAM)GetParent()->GetForegroundColour().GetPixel() + ,(MPARAM)MLE_RGB + ); + } } // end of wxTextCtrl::SetupColours // ---------------------------------------------------------------------------- @@ -1107,7 +1138,7 @@ wxSize wxTextCtrl::DoGetBestSize() const wxGetCharSize(GetHWND(), &nCx, &nCy, (wxFont*)&GetFont()); int wText = DEFAULT_ITEM_WIDTH; - int hText = EDIT_HEIGHT_FROM_CHAR_HEIGHT(nCy); + int hText = (EDIT_HEIGHT_FROM_CHAR_HEIGHT(nCy) * .8); if (m_windowStyle & wxTE_MULTILINE) { @@ -1209,3 +1240,50 @@ bool wxTextCtrl::SetForegroundColour( return TRUE; } // end of wxTextCtrl::SetForegroundColour +bool wxTextCtrl::SetStyle( + long lStart +, long lEnd +, const wxTextAttr& rStyle +) +{ + HWND hWnd = GetHwnd(); + + if (lStart > lEnd) + { + long lTmp = lStart; + + lStart = lEnd; + lEnd = lTmp; + } + + // + // 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; + + GetSelection( &lStartOld + ,&lEndOld + ); + + // + // But do we really have to change the selection? + // + bool bChangeSel = lStart != lStartOld || + lEnd != lEndOld; + + if (bChangeSel) + { + if (m_bIsMLE) + ::WinSendMsg(hWnd, MLM_SETSEL, MPFROM2SHORT((USHORT)lStart, (USHORT)lEnd), 0); + else + ::WinSendMsg(hWnd, EM_SETSEL, MPFROM2SHORT((USHORT)lStart, (USHORT)lEnd), 0); + } + + // + // TODO:: finish this part + // + return TRUE; +} // end of wxTextCtrl::SetStyle +