wxWidgets/wxPython/wx/lib/stattext.py
Robin Dunn 969d9b6fa9 Added a generic StaticBitmap class in wx.lib.statbmp for the same
reasons that stattext was created, so it could be mouse sensitive on
all platforms like normal windows.  Also updated stattext.py and
buttons.py to handle attribute (font & colour) defaults and
inheritance the new way.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27278 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2004-05-14 21:22:39 +00:00

151 lines
4.6 KiB
Python

#----------------------------------------------------------------------
# Name: wx.lib.stattext
# Purpose: A generic wxGenStaticText class. Using this should
# eliminate some of the platform differences in wxStaticText,
# such as background colours and mouse sensitivity.
#
# Author: Robin Dunn
#
# Created: 8-July-2002
# RCS-ID: $Id$
# Copyright: (c) 2002 by Total Control Software
# Licence: wxWindows license
#----------------------------------------------------------------------
# 12/12/2003 - Jeff Grimmett (grimmtooth@softhome.net)
#
# o 2.5 compatability update.
# o Untested.
#
import wx
#----------------------------------------------------------------------
class GenStaticText(wx.PyControl):
labelDelta = 1
def __init__(self, parent, ID, label,
pos = wx.DefaultPosition, size = wx.DefaultSize,
style = 0,
name = "genstattext"):
wx.PyControl.__init__(self, parent, ID, pos, size, style|wx.NO_BORDER,
wx.DefaultValidator, name)
wx.PyControl.SetLabel(self, label) # don't check wx.ST_NO_AUTORESIZE yet
self.defBackClr = self.GetBackgroundColour()
self.InheritAttributes()
self.SetBestSize(size)
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
self.Bind(wx.EVT_PAINT, self.OnPaint)
def SetLabel(self, label):
"""
Sets the static text label and updates the control's size to exactly
fit the label unless the control has wx.ST_NO_AUTORESIZE flag.
"""
wx.PyControl.SetLabel(self, label)
style = self.GetWindowStyleFlag()
if not style & wx.ST_NO_AUTORESIZE:
best = self.GetBestSize()
self.SetSize(best)
self.SetSizeHints(best)
self.Refresh()
def SetFont(self, font):
"""
Sets the static text font and updates the control's size to exactly
fit the label unless the control has wx.ST_NO_AUTORESIZE flag.
"""
wx.PyControl.SetFont(self, font)
style = self.GetWindowStyleFlag()
if not style & wx.ST_NO_AUTORESIZE:
best = self.GetBestSize()
self.SetSize(best)
self.SetSizeHints(best)
self.Refresh()
def DoGetBestSize(self):
"""
Overridden base class virtual. Determines the best size of
the button based on the label size.
"""
label = self.GetLabel()
maxWidth = totalHeight = 0
for line in label.split('\n'):
if line == '':
w, h = self.GetTextExtent('W') # empty lines have height too
else:
w, h = self.GetTextExtent(line)
totalHeight += h
maxWidth = max(maxWidth, w)
return wx.Size(maxWidth, totalHeight)
def AcceptsFocus(self):
"""Overridden base class virtual."""
return False
def GetDefaultAttributes(self):
"""
Overridden base class virtual. By default we should use
the same font/colour attributes as the native StaticText.
"""
return wx.StaticText.GetClassDefaultAttributes()
def ShouldInheritColours(self):
"""
Overridden base class virtual. If the parent has non-default
colours then we want this control to inherit them.
"""
return True
def OnPaint(self, event):
dc = wx.BufferedPaintDC(self)
#dc = wx.PaintDC(self)
width, height = self.GetClientSize()
if not width or not height:
return
clr = self.GetBackgroundColour()
backBrush = wx.Brush(clr, wx.SOLID)
if wx.Platform == "__WXMAC__" and clr == self.defBackClr:
# if colour is still the default then use the striped background on Mac
backBrush.MacSetTheme(1) # 1 == kThemeBrushDialogBackgroundActive
dc.SetBackground(backBrush)
dc.SetTextForeground(self.GetForegroundColour())
dc.Clear()
dc.SetFont(self.GetFont())
label = self.GetLabel()
style = self.GetWindowStyleFlag()
x = y = 0
for line in label.split('\n'):
if line == '':
w, h = self.GetTextExtent('W') # empty lines have height too
else:
w, h = self.GetTextExtent(line)
if style & wx.ALIGN_RIGHT:
x = width - w
if style & wx.ALIGN_CENTER:
x = (width - w)/2
dc.DrawText(line, x, y)
y += h
def OnEraseBackground(self, event):
pass
#----------------------------------------------------------------------