X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1fded56b375bf7a4687af1cdb182899614c1b2a8..46831f391b0e5cbf41b76cd314bf1dfc1b390a9e:/wxPython/wx/lib/stattext.py diff --git a/wxPython/wx/lib/stattext.py b/wxPython/wx/lib/stattext.py index 4c152232d4..f69d9b6160 100644 --- a/wxPython/wx/lib/stattext.py +++ b/wxPython/wx/lib/stattext.py @@ -1,11 +1,170 @@ +#---------------------------------------------------------------------- +# 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. +# -"""Renamer stub: provides a way to drop the wx prefix from wxPython objects.""" +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 + + + + +#---------------------------------------------------------------------- -__cvsid__ = "$Id$" -__revision__ = "$Revision$"[11:-2] -from wx import _rename -from wxPython.lib import stattext -_rename(globals(), stattext.__dict__, modulename='lib.stattext') -del stattext -del _rename