compilation fix for PCH-less build
[wxWidgets.git] / src / generic / stattextg.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/generic/stattextg.cpp
3 // Purpose: wxGenericStaticText
4 // Author: Marcin Wojdyr
5 // Created: 2008-06-26
6 // RCS-ID: $Id$
7 // Copyright: Marcin Wojdyr
8 // Licence: wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
10
11 #include "wx/wxprec.h"
12
13 #ifdef __BORLANDC__
14 #pragma hdrstop
15 #endif
16
17 #if wxUSE_STATTEXT
18
19 #ifndef WX_PRECOMP
20 #include "wx/dcclient.h"
21 #include "wx/settings.h"
22 #include "wx/validate.h"
23 #endif
24
25 #include "wx/generic/stattextg.h"
26
27
28 IMPLEMENT_DYNAMIC_CLASS(wxGenericStaticText, wxStaticTextBase)
29
30
31 bool wxGenericStaticText::Create(wxWindow *parent,
32 wxWindowID id,
33 const wxString &label,
34 const wxPoint &pos,
35 const wxSize &size,
36 long style,
37 const wxString &name)
38 {
39 if ( !wxControl::Create(parent, id, pos, size, style,
40 wxDefaultValidator, name) )
41 return false;
42
43 SetLabel(label);
44 SetInitialSize(size);
45 Connect(wxEVT_PAINT, wxPaintEventHandler(wxGenericStaticText::OnPaint));
46 return true;
47 }
48
49 void wxGenericStaticText::OnPaint(wxPaintEvent& WXUNUSED(event))
50 {
51 if ( m_label.empty() )
52 return;
53 wxPaintDC dc(this);
54 PrepareDC(dc);
55
56 wxRect rect = GetClientRect();
57 if ( IsEnabled() )
58 {
59 dc.SetTextForeground(
60 wxSystemSettings::GetColour(wxSYS_COLOUR_BTNTEXT));
61 }
62 else // paint disabled text
63 {
64 // draw shadow of the text
65 dc.SetTextForeground(
66 wxSystemSettings::GetColour(wxSYS_COLOUR_BTNHIGHLIGHT));
67 wxRect rectShadow = rect;
68 rectShadow.Offset(1, 1);
69 dc.DrawLabel(m_label, rectShadow, GetAlignment(), m_mnemonic);
70 dc.SetTextForeground(
71 wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW));
72 }
73 dc.DrawLabel(m_label, wxNullBitmap, rect, GetAlignment(), m_mnemonic);
74 }
75
76
77 wxSize wxGenericStaticText::DoGetBestClientSize() const
78 {
79 wxClientDC dc(wxConstCast(this, wxGenericStaticText));
80 wxCoord width, height;
81 dc.GetMultiLineTextExtent(GetLabel(), &width, &height);
82 return wxSize(width, height);
83 }
84
85 wxSize wxGenericStaticText::DoGetBestSize() const
86 {
87 wxSize ret = DoGetBestClientSize();
88 CacheBestSize(ret);
89 return ret;
90 }
91
92
93 void wxGenericStaticText::SetLabel(const wxString& label)
94 {
95 wxControl::SetLabel(label);
96 DoSetLabel(GetEllipsizedLabelWithoutMarkup());
97 if ( !HasFlag(wxST_NO_AUTORESIZE) && !IsEllipsized() )
98 InvalidateBestSize();
99 Refresh();
100 }
101
102 void wxGenericStaticText::DoSetLabel(const wxString& label)
103 {
104 m_mnemonic = FindAccelIndex(label, &m_label);
105 }
106
107 bool wxGenericStaticText::SetFont(const wxFont &font)
108 {
109 if ( !wxControl::SetFont(font) )
110 return false;
111 if ( !HasFlag(wxST_NO_AUTORESIZE) )
112 InvalidateBestSize();
113 Refresh();
114 return true;
115 }
116
117 void wxGenericStaticText::DoSetSize(int x, int y, int width, int height,
118 int sizeFlags)
119 {
120 wxStaticTextBase::DoSetSize(x, y, width, height, sizeFlags);
121 UpdateLabel();
122 }
123
124
125 #endif // wxUSE_STATTEXT