]> git.saurik.com Git - wxWidgets.git/blame - wxPython/wx/lib/stattext.py
fixing memleak, correcting huge background erase area
[wxWidgets.git] / wxPython / wx / lib / stattext.py
CommitLineData
d14a1e28
RD
1#----------------------------------------------------------------------
2# Name: wx.lib.stattext
3# Purpose: A generic wxGenStaticText class. Using this should
4# eliminate some of the platform differences in wxStaticText,
5# such as background colours and mouse sensitivity.
6#
7# Author: Robin Dunn
8#
9# Created: 8-July-2002
10# RCS-ID: $Id$
11# Copyright: (c) 2002 by Total Control Software
12# Licence: wxWindows license
13#----------------------------------------------------------------------
b881fc78
RD
14# 12/12/2003 - Jeff Grimmett (grimmtooth@softhome.net)
15#
16# o 2.5 compatability update.
17# o Untested.
18#
d14a1e28
RD
19
20import wx
21
22#----------------------------------------------------------------------
23
24class GenStaticText(wx.PyControl):
25 labelDelta = 1
26
27 def __init__(self, parent, ID, label,
28 pos = wx.DefaultPosition, size = wx.DefaultSize,
29 style = 0,
30 name = "genstattext"):
31 wx.PyControl.__init__(self, parent, ID, pos, size, style|wx.NO_BORDER,
32 wx.DefaultValidator, name)
33
34 wx.PyControl.SetLabel(self, label) # don't check wx.ST_NO_AUTORESIZE yet
969d9b6f
RD
35 self.defBackClr = self.GetBackgroundColour()
36 self.InheritAttributes()
37 self.SetBestSize(size)
d14a1e28 38
b881fc78
RD
39 self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
40 self.Bind(wx.EVT_PAINT, self.OnPaint)
d14a1e28
RD
41
42
43 def SetLabel(self, label):
44 """
45 Sets the static text label and updates the control's size to exactly
46 fit the label unless the control has wx.ST_NO_AUTORESIZE flag.
47 """
48 wx.PyControl.SetLabel(self, label)
49 style = self.GetWindowStyleFlag()
50 if not style & wx.ST_NO_AUTORESIZE:
969d9b6f
RD
51 best = self.GetBestSize()
52 self.SetSize(best)
53 self.SetSizeHints(best)
d14a1e28
RD
54 self.Refresh()
55
56
57 def SetFont(self, font):
58 """
59 Sets the static text font and updates the control's size to exactly
60 fit the label unless the control has wx.ST_NO_AUTORESIZE flag.
61 """
62 wx.PyControl.SetFont(self, font)
63 style = self.GetWindowStyleFlag()
64 if not style & wx.ST_NO_AUTORESIZE:
969d9b6f
RD
65 best = self.GetBestSize()
66 self.SetSize(best)
67 self.SetSizeHints(best)
d14a1e28
RD
68 self.Refresh()
69
70
71 def DoGetBestSize(self):
969d9b6f
RD
72 """
73 Overridden base class virtual. Determines the best size of
74 the button based on the label size.
75 """
d14a1e28
RD
76 label = self.GetLabel()
77 maxWidth = totalHeight = 0
78 for line in label.split('\n'):
79 if line == '':
80 w, h = self.GetTextExtent('W') # empty lines have height too
81 else:
82 w, h = self.GetTextExtent(line)
83 totalHeight += h
84 maxWidth = max(maxWidth, w)
85 return wx.Size(maxWidth, totalHeight)
86
87
88 def AcceptsFocus(self):
89 """Overridden base class virtual."""
90 return False
91
92
969d9b6f
RD
93 def GetDefaultAttributes(self):
94 """
95 Overridden base class virtual. By default we should use
96 the same font/colour attributes as the native StaticText.
97 """
98 return wx.StaticText.GetClassDefaultAttributes()
99
100
101 def ShouldInheritColours(self):
102 """
103 Overridden base class virtual. If the parent has non-default
104 colours then we want this control to inherit them.
105 """
106 return True
107
108
d14a1e28
RD
109 def OnPaint(self, event):
110 dc = wx.BufferedPaintDC(self)
111 #dc = wx.PaintDC(self)
112 width, height = self.GetClientSize()
113 if not width or not height:
114 return
115
116 clr = self.GetBackgroundColour()
117 backBrush = wx.Brush(clr, wx.SOLID)
118 if wx.Platform == "__WXMAC__" and clr == self.defBackClr:
119 # if colour is still the default then use the striped background on Mac
7efa87d2 120 backBrush.MacSetTheme(1) # 1 == kThemeBrushDialogBackgroundActive
d14a1e28
RD
121 dc.SetBackground(backBrush)
122
123 dc.SetTextForeground(self.GetForegroundColour())
124 dc.Clear()
125 dc.SetFont(self.GetFont())
126 label = self.GetLabel()
127 style = self.GetWindowStyleFlag()
128 x = y = 0
129 for line in label.split('\n'):
130 if line == '':
131 w, h = self.GetTextExtent('W') # empty lines have height too
132 else:
133 w, h = self.GetTextExtent(line)
134 if style & wx.ALIGN_RIGHT:
135 x = width - w
136 if style & wx.ALIGN_CENTER:
137 x = (width - w)/2
d7403ad2 138 dc.DrawText(line, x, y)
d14a1e28
RD
139 y += h
140
141
142 def OnEraseBackground(self, event):
143 pass
144
145
146
147
148#----------------------------------------------------------------------
1fded56b 149
1fded56b 150