mirror of
https://github.com/wxWidgets/Phoenix.git
synced 2025-12-16 09:40:07 +01:00
set svn:eol-style to native
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxPython/Phoenix/trunk@71832 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
189
wx/lib/stattext.py
Normal file
189
wx/lib/stattext.py
Normal file
@@ -0,0 +1,189 @@
|
||||
#----------------------------------------------------------------------
|
||||
# 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
|
||||
|
||||
BUFFERED = 0 # In unbuffered mode we can let the theme shine through,
|
||||
# otherwise we draw the background ourselves.
|
||||
|
||||
if wx.Platform == "__WXMAC__":
|
||||
from Carbon.Appearance import kThemeBrushDialogBackgroundActive
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
class GenStaticText(wx.PyControl):
|
||||
labelDelta = 1
|
||||
|
||||
def __init__(self, parent, ID=-1, 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.InheritAttributes()
|
||||
self.SetInitialSize(size)
|
||||
|
||||
self.Bind(wx.EVT_PAINT, self.OnPaint)
|
||||
if BUFFERED:
|
||||
self.defBackClr = self.GetBackgroundColour()
|
||||
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
|
||||
else:
|
||||
self.SetBackgroundStyle(wx.BG_STYLE_SYSTEM)
|
||||
|
||||
|
||||
|
||||
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()
|
||||
self.InvalidateBestSize()
|
||||
if not style & wx.ST_NO_AUTORESIZE:
|
||||
self.SetSize(self.GetBestSize())
|
||||
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()
|
||||
self.InvalidateBestSize()
|
||||
if not style & wx.ST_NO_AUTORESIZE:
|
||||
self.SetSize(self.GetBestSize())
|
||||
self.Refresh()
|
||||
|
||||
|
||||
def DoGetBestSize(self):
|
||||
"""
|
||||
Overridden base class virtual. Determines the best size of
|
||||
the control based on the label size and the current font.
|
||||
"""
|
||||
label = self.GetLabel()
|
||||
font = self.GetFont()
|
||||
if not font:
|
||||
font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
|
||||
dc = wx.ClientDC(self)
|
||||
dc.SetFont(font)
|
||||
|
||||
maxWidth = totalHeight = 0
|
||||
for line in label.split('\n'):
|
||||
if line == '':
|
||||
w, h = dc.GetTextExtent('W') # empty lines have height too
|
||||
else:
|
||||
w, h = dc.GetTextExtent(line)
|
||||
totalHeight += h
|
||||
maxWidth = max(maxWidth, w)
|
||||
best = wx.Size(maxWidth, totalHeight)
|
||||
self.CacheBestSize(best)
|
||||
return best
|
||||
|
||||
|
||||
def Enable(self, enable=True):
|
||||
"""Overridden Enable() method to properly refresh the widget. """
|
||||
|
||||
wx.PyControl.Enable(self, enable)
|
||||
self.Refresh()
|
||||
|
||||
|
||||
def Disable(self):
|
||||
"""Overridden Disable() method to properly refresh the widget. """
|
||||
|
||||
wx.PyControl.Disable(self)
|
||||
self.Refresh()
|
||||
|
||||
|
||||
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):
|
||||
if BUFFERED:
|
||||
dc = wx.BufferedPaintDC(self)
|
||||
else:
|
||||
dc = wx.PaintDC(self)
|
||||
width, height = self.GetClientSize()
|
||||
if not width or not height:
|
||||
return
|
||||
|
||||
if BUFFERED:
|
||||
clr = self.GetBackgroundColour()
|
||||
if wx.Platform == "__WXMAC__" and clr == self.defBackClr:
|
||||
# if colour is still the default then use the theme's background on Mac
|
||||
themeColour = wx.MacThemeColour(kThemeBrushDialogBackgroundActive)
|
||||
backBrush = wx.Brush(themeColour)
|
||||
else:
|
||||
backBrush = wx.Brush(clr, wx.SOLID)
|
||||
dc.SetBackground(backBrush)
|
||||
dc.Clear()
|
||||
|
||||
if self.IsEnabled():
|
||||
dc.SetTextForeground(self.GetForegroundColour())
|
||||
else:
|
||||
dc.SetTextForeground(wx.SystemSettings.GetColour(wx.SYS_COLOUR_GRAYTEXT))
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user