X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e94d504dd67a41cd194862ddc9b602def6d9cf53..04fa04d8067d235ab45b5bc05b65f0679634b541:/src/os2/stattext.cpp diff --git a/src/os2/stattext.cpp b/src/os2/stattext.cpp index bcb0bb2a44..3e11757d38 100644 --- a/src/os2/stattext.cpp +++ b/src/os2/stattext.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: stattext.cpp +// Name: src/os2/stattext.cpp // Purpose: wxStaticText // Author: David Webster // Modified by: @@ -9,35 +9,28 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "stattext.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" +#include "wx/stattext.h" + #ifndef WX_PRECOMP -#include "wx/event.h" -#include "wx/app.h" -#include "wx/brush.h" -#include "wx/scrolwin.h" + #include "wx/event.h" + #include "wx/app.h" + #include "wx/brush.h" + #include "wx/scrolwin.h" #endif -#include "wx/stattext.h" #include "wx/os2/private.h" #include -IMPLEMENT_DYNAMIC_CLASS(wxStaticText, wxControl) - -bool wxStaticText::Create( - wxWindow* pParent -, wxWindowID vId -, const wxString& rsLabel -, const wxPoint& rPos -, const wxSize& rSize -, long lStyle -, const wxString& rsName -) +bool wxStaticText::Create( wxWindow* pParent, + wxWindowID vId, + const wxString& rsLabel, + const wxPoint& rPos, + const wxSize& rSize, + long lStyle, + const wxString& rsName ) { SetName(rsName); if (pParent) @@ -46,21 +39,24 @@ bool wxStaticText::Create( SetBackgroundColour(pParent->GetBackgroundColour()) ; SetForegroundColour(pParent->GetForegroundColour()) ; - if ( vId == -1 ) + if ( vId == wxID_ANY ) m_windowId = (int)NewControlId(); else m_windowId = vId; - int nX = rPos.x; - int nY = rPos.y; - int nWidth = rSize.x; - int nHeight = rSize.y; + int nX = rPos.x; + int nY = rPos.y; + int nWidth = rSize.x; + int nHeight = rSize.y; m_windowStyle = lStyle; - long lSstyle = 0L; + long lSstyle = 0L; - lSstyle = WS_VISIBLE | SS_TEXT | DT_VCENTER | DT_MNEMONIC; + // Used to have DT_VCENTER but that doesn't work correctly with + // multiline strings and DT_WORDBREAK. Accept a reasonable + // compromise for now + lSstyle = WS_VISIBLE | SS_TEXT | DT_WORDBREAK | DT_MNEMONIC; if (m_windowStyle & wxALIGN_CENTRE) lSstyle |= DT_CENTER; else if (m_windowStyle & wxALIGN_RIGHT) @@ -68,11 +64,9 @@ bool wxStaticText::Create( else lSstyle |= DT_LEFT; - wxString sLabel = ::wxPMTextToLabel(rsLabel); - m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle ,WC_STATIC // Window class - ,(PSZ)sLabel.c_str() // Initial Text + ,NULL // Initial Text ,(ULONG)lSstyle // Style flags ,0L, 0L, 0L, 0L // Origin -- 0 size ,(HWND)GetHwndOf(pParent) // owner window handle (same as parent @@ -82,13 +76,9 @@ bool wxStaticText::Create( ,NULL // no Presentation parameters ); - wxCHECK_MSG(m_hWnd, FALSE, wxT("Failed to create static ctrl")); - - wxColour vColour; + wxCHECK_MSG(m_hWnd, false, wxT("Failed to create static ctrl")); - vColour.Set(wxString(wxT("BLACK"))); - - LONG lColor = (LONG)vColour.GetPixel(); + LONG lColor = (LONG)wxBLACK->GetPixel(); ::WinSetPresParam( m_hWnd ,PP_FOREGROUNDCOLOR @@ -107,24 +97,23 @@ bool wxStaticText::Create( SetFont(*wxSMALL_FONT); SetXComp(0); SetYComp(0); - SetSize( nX - ,nY - ,nWidth - ,nHeight - ); - return TRUE; + SetSize( nX, nY, nWidth, nHeight ); + + SetLabel(rsLabel); + + return true; } // end of wxStaticText::Create wxSize wxStaticText::DoGetBestSize() const { - wxString sText(wxGetWindowText(GetHWND())); - int nWidthTextMax = 0; - int nWidthLine = 0; - int nHeightTextTotal = 0; - int nHeightLineDefault = 0; - int nHeightLine = 0; - wxString sCurLine; - bool bLastWasTilde = FALSE; + wxString sText(GetLabel()); + int nWidthTextMax = 0; + int nWidthLine = 0; + int nHeightTextTotal = 0; + int nHeightLineDefault = 0; + int nHeightLine = 0; + wxString sCurLine; + bool bLastWasTilde = false; for (const wxChar *pc = sText; ; pc++) { @@ -140,7 +129,7 @@ wxSize wxStaticText::DoGetBestSize() const if (!nHeightLineDefault) nHeightLineDefault = nHeightLine; if (!nHeightLineDefault) - GetTextExtent(_T("W"), NULL, &nHeightLineDefault); + GetTextExtent(wxT("W"), NULL, &nHeightLineDefault); nHeightTextTotal += nHeightLineDefault; } else @@ -171,11 +160,11 @@ wxSize wxStaticText::DoGetBestSize() const // when it is preceded by another '~' in which case it stands for a // literal tilde // - if (*pc == _T('~')) + if (*pc == wxT('~')) { if (!bLastWasTilde) { - bLastWasTilde = TRUE; + bLastWasTilde = true; // // Skip the statement adding pc to curLine below @@ -186,7 +175,7 @@ wxSize wxStaticText::DoGetBestSize() const // // It is a literal tilde // - bLastWasTilde = FALSE; + bLastWasTilde = false; } sCurLine += *pc; } @@ -214,6 +203,10 @@ void wxStaticText::DoSetSize( ,nHeight ,nSizeFlags ); + + // eventually update label (if ellipsizing is on): + UpdateLabel(); + Refresh(); } // end of wxStaticText::DoSetSize @@ -238,14 +231,17 @@ void wxStaticText::SetLabel( const wxString& rsLabel ) { - wxString sLabel = ::wxPMTextToLabel(rsLabel); - ::WinSetWindowText(GetHwnd(), (PSZ)sLabel.c_str()); + m_labelOrig = rsLabel; // save original label + + // OS/2 does not support ellipsized labels in static text: + DoSetLabel(GetEllipsizedLabel()); // // Adjust the size of the window to fit to the label unless autoresizing is // disabled // - if (!(GetWindowStyle() & wxST_NO_AUTORESIZE)) + if (!(GetWindowStyle() & wxST_NO_AUTORESIZE) && + !IsEllipsized()) { wxCoord vX; wxCoord vY; @@ -272,3 +268,18 @@ MRESULT wxStaticText::OS2WindowProc( ,lParam ); } // end of wxStaticText::OS2WindowProc + + +// for wxST_ELLIPSIZE_* support: + +void wxStaticText::DoSetLabel(const wxString& str) +{ + wxString sLabel = ::wxPMTextToLabel(str); + ::WinSetWindowText(GetHwnd(), sLabel.c_str()); +} + +wxString wxStaticText::DoGetLabel() const +{ + return wxGetWindowText(GetHwnd()); +} +