X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6e348b12dcc7f994da8c2552b80d60140578a745..d58526d55433162cef8ad2ed7f422689862c3019:/src/os2/stattext.cpp diff --git a/src/os2/stattext.cpp b/src/os2/stattext.cpp index d5cfd5c9e4..1ee58a4b8c 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,30 @@ // 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,30 +41,34 @@ 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; + // 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) lSstyle |= DT_RIGHT; else lSstyle |= DT_LEFT; + m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle ,WC_STATIC // Window class - ,(PSZ)rsLabel.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 @@ -79,13 +78,9 @@ bool wxStaticText::Create( ,NULL // no Presentation parameters ); - wxCHECK_MSG(m_hWnd, FALSE, wxT("Failed to create static ctrl")); - - wxColour vColour; - - vColour.Set(wxString("BLACK")); + wxCHECK_MSG(m_hWnd, false, wxT("Failed to create static ctrl")); - LONG lColor = (LONG)vColour.GetPixel(); + LONG lColor = (LONG)wxBLACK->GetPixel(); ::WinSetPresParam( m_hWnd ,PP_FOREGROUNDCOLOR @@ -104,24 +99,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 bLastWasAmpersand = 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++) { @@ -163,16 +157,16 @@ wxSize wxStaticText::DoGetBestSize() const else { // - // We shouldn't take into account the '&' which just introduces the + // We shouldn't take into account the '~' which just introduces the // mnemonic characters and so are not shown on the screen -- except - // when it is preceded by another '&' in which case it stands for a - // literal ampersand + // when it is preceded by another '~' in which case it stands for a + // literal tilde // - if (*pc == _T('&')) + if (*pc == _T('~')) { - if (!bLastWasAmpersand) + if (!bLastWasTilde) { - bLastWasAmpersand = TRUE; + bLastWasTilde = true; // // Skip the statement adding pc to curLine below @@ -181,9 +175,9 @@ wxSize wxStaticText::DoGetBestSize() const } // - // It is a literal ampersand + // It is a literal tilde // - bLastWasAmpersand = FALSE; + bLastWasTilde = false; } sCurLine += *pc; } @@ -211,6 +205,10 @@ void wxStaticText::DoSetSize( ,nHeight ,nSizeFlags ); + + // eventually update label (if ellipsizing is on): + UpdateLabel(); + Refresh(); } // end of wxStaticText::DoSetSize @@ -235,13 +233,18 @@ void wxStaticText::SetLabel( const wxString& rsLabel ) { - ::WinSetWindowText(GetHwnd(), rsLabel.c_str()); + m_labelOrig = rsLabel; // save original label + + // OS/2 does not support neither ellipsize nor markup in static text: + DoSetLabel(rsLabel); + DoSetLabel(GetEllipsizedLabelWithoutMarkup()); // // 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; @@ -268,3 +271,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()); +} +