]>
git.saurik.com Git - wxWidgets.git/blob - src/os2/stattext.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/os2/stattext.cpp
3 // Purpose: wxStaticText
4 // Author: David Webster
8 // Copyright: (c) David Webster
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 // For compilers that support precompilation, includes "wx.h".
13 #include "wx/wxprec.h"
15 #include "wx/stattext.h"
21 #include "wx/scrolwin.h"
24 #include "wx/os2/private.h"
27 IMPLEMENT_DYNAMIC_CLASS(wxStaticText
, wxControl
)
29 bool wxStaticText::Create( wxWindow
* pParent
,
31 const wxString
& rsLabel
,
35 const wxString
& rsName
)
39 pParent
->AddChild(this);
41 SetBackgroundColour(pParent
->GetBackgroundColour()) ;
42 SetForegroundColour(pParent
->GetForegroundColour()) ;
44 if ( vId
== wxID_ANY
)
45 m_windowId
= (int)NewControlId();
52 int nHeight
= rSize
.y
;
54 m_windowStyle
= lStyle
;
58 // Used to have DT_VCENTER but that doesn't work correctly with
59 // multiline strings and DT_WORDBREAK. Accept a reasonable
61 lSstyle
= WS_VISIBLE
| SS_TEXT
| DT_WORDBREAK
| DT_MNEMONIC
;
62 if (m_windowStyle
& wxALIGN_CENTRE
)
64 else if (m_windowStyle
& wxALIGN_RIGHT
)
69 wxString sLabel
= ::wxPMTextToLabel(rsLabel
);
71 m_hWnd
= (WXHWND
)::WinCreateWindow( (HWND
)GetHwndOf(pParent
) // Parent window handle
72 ,WC_STATIC
// Window class
73 ,(PSZ
)sLabel
.c_str() // Initial Text
74 ,(ULONG
)lSstyle
// Style flags
75 ,0L, 0L, 0L, 0L // Origin -- 0 size
76 ,(HWND
)GetHwndOf(pParent
) // owner window handle (same as parent
77 ,HWND_TOP
// initial z position
78 ,(ULONG
)m_windowId
// Window identifier
79 ,NULL
// no control data
80 ,NULL
// no Presentation parameters
83 wxCHECK_MSG(m_hWnd
, false, wxT("Failed to create static ctrl"));
85 LONG lColor
= (LONG
)wxBLACK
->GetPixel();
87 ::WinSetPresParam( m_hWnd
92 lColor
= (LONG
)m_backgroundColour
.GetPixel();
94 ::WinSetPresParam( m_hWnd
101 SetFont(*wxSMALL_FONT
);
104 SetSize( nX
, nY
, nWidth
, nHeight
);
107 } // end of wxStaticText::Create
109 wxSize
wxStaticText::DoGetBestSize() const
111 wxString
sText(wxGetWindowText(GetHWND()));
112 int nWidthTextMax
= 0;
114 int nHeightTextTotal
= 0;
115 int nHeightLineDefault
= 0;
118 bool bLastWasTilde
= false;
120 for (const wxChar
*pc
= sText
; ; pc
++)
122 if ( *pc
== wxT('\n') || *pc
== wxT('\0') )
127 // We can't use GetTextExtent - it will return 0 for both width
128 // and height and an empty line should count in height
131 if (!nHeightLineDefault
)
132 nHeightLineDefault
= nHeightLine
;
133 if (!nHeightLineDefault
)
134 GetTextExtent(_T("W"), NULL
, &nHeightLineDefault
);
135 nHeightTextTotal
+= nHeightLineDefault
;
139 GetTextExtent( sCurLine
143 if (nWidthLine
> nWidthTextMax
)
144 nWidthTextMax
= nWidthLine
;
145 nHeightTextTotal
+= nHeightLine
;
148 if ( *pc
== wxT('\n') )
160 // We shouldn't take into account the '~' which just introduces the
161 // mnemonic characters and so are not shown on the screen -- except
162 // when it is preceded by another '~' in which case it stands for a
169 bLastWasTilde
= true;
172 // Skip the statement adding pc to curLine below
178 // It is a literal tilde
180 bLastWasTilde
= false;
185 return wxSize( nWidthTextMax
188 } // end of wxStaticText::DoGetBestSize
190 void wxStaticText::DoSetSize(
199 // We need to refresh the window after changing its size as the standard
200 // control doesn't always update itself properly.
202 wxStaticTextBase::DoSetSize( nX
209 } // end of wxStaticText::DoSetSize
211 bool wxStaticText::SetFont(
215 bool bRet
= wxControl::SetFont(rFont
);
218 // Adjust the size of the window to fit to the label unless autoresizing is
221 if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE
) )
223 DoSetSize(-1, -1, -1, -1, wxSIZE_AUTO_WIDTH
| wxSIZE_AUTO_HEIGHT
);
226 } // end of wxStaticText::SetFont
228 void wxStaticText::SetLabel(
229 const wxString
& rsLabel
232 wxString sLabel
= ::wxPMTextToLabel(rsLabel
);
233 ::WinSetWindowText(GetHwnd(), (PSZ
)sLabel
.c_str());
236 // Adjust the size of the window to fit to the label unless autoresizing is
239 if (!(GetWindowStyle() & wxST_NO_AUTORESIZE
))
246 GetPosition(&vX
, &vY
);
247 GetSize(&vWidth
, &vHeight
);
248 if (!(vX
== -1 && vY
== -1 && vWidth
== -1 && vHeight
== -1))
249 DoSetSize(vX
, vY
, vWidth
, vHeight
, wxSIZE_AUTO_WIDTH
| wxSIZE_AUTO_HEIGHT
);
251 DoSetSize(-1, -1, -1, -1, wxSIZE_AUTO_WIDTH
| wxSIZE_AUTO_HEIGHT
);
253 } // end of wxStaticText::SetLabel
255 MRESULT
wxStaticText::OS2WindowProc(
261 return wxWindow::OS2WindowProc( uMsg
265 } // end of wxStaticText::OS2WindowProc