+++ /dev/null
-#----------------------------------------------------------------------
-# 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,
- # is there a way to do this when buffering?
-
-#----------------------------------------------------------------------
-
-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.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 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()
- 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.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
-
-
-
-
-#----------------------------------------------------------------------
-
-