]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/wx/lib/stattext.py
Bug fix from Pierre
[wxWidgets.git] / wxPython / wx / lib / stattext.py
index 4c152232d4a26d9092a42331878c82b32ccda680..f69d9b6160c6983d01545ddca17fc826c34ed308 100644 (file)
+#----------------------------------------------------------------------
+# 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