]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/wx/lib/buttons.py
added a test to check how exception handling works with Win32 SEH; corrected copyright
[wxWidgets.git] / wxPython / wx / lib / buttons.py
index 7078664585f2ccea43b654241a32b9f3d10428e0..acc7ee46a475ea16d263a11241cbc0765f5e9fef 100644 (file)
@@ -66,22 +66,23 @@ class GenButton(wx.PyControl):
                  pos = wx.DefaultPosition, size = wx.DefaultSize,
                  style = 0, validator = wx.DefaultValidator,
                  name = "genbutton"):
-        if style == 0:
-            style = wx.NO_BORDER
-        wx.PyControl.__init__(self, parent, ID, pos, size, style, validator, name)
+        cstyle = style
+        if cstyle == 0:
+            cstyle = wx.NO_BORDER
+        wx.PyControl.__init__(self, parent, ID, pos, size, cstyle, validator, name)
 
         self.up = True
-        self.bezelWidth = 2
         self.hasFocus = False
-        self.useFocusInd = True
+        if style & wx.NO_BORDER:
+            self.bezelWidth = 0
+            self.useFocusInd = False
+        else:
+            self.bezelWidth = 2
+            self.useFocusInd = True
 
         self.SetLabel(label)
-        self.SetPosition(pos)
-        font = parent.GetFont()
-        if not font.Ok():
-            font = wx.SystemSettings.GetSystemFont(wx.SYS_DEFAULT_GUI_FONT)
-        self.SetFont(font)
-        self.SetBestSize(size)
+        self.InheritAttributes()
+        self.SetBestFittingSize(size)
         self.InitColours()
 
         self.Bind(wx.EVT_LEFT_DOWN,        self.OnLeftDown)
@@ -103,23 +104,15 @@ class GenButton(wx.PyControl):
         and set a good size.
         """
         if size is None:
-            size = wx.Size(-1,-1)
-        if type(size) == type(()):
-            size = wx.Size(size[0], size[1])
-        size = wx.Size(size.width, size.height)  # make a copy
-
-        best = self.GetBestSize()
-        if size.width == -1:
-            size.width = best.width
-        if size.height == -1:
-            size.height = best.height
-
-        self.SetSize(size)
+            size = wx.DefaultSize            
+        wx.PyControl.SetBestFittingSize(self, size)
 
 
     def DoGetBestSize(self):
-        """Overridden base class virtual.  Determines the best size of the
-        button based on the label and bezel size."""
+        """
+        Overridden base class virtual.  Determines the best size of the
+        button based on the label and bezel size.
+        """
         w, h, useMin = self._GetLabelSize()
         defSize = wx.Button.GetDefaultSize()
         width = 12 + w
@@ -138,6 +131,22 @@ class GenButton(wx.PyControl):
         return self.IsShown() and self.IsEnabled()
 
 
+    def GetDefaultAttributes(self):
+        """
+        Overridden base class virtual.  By default we should use
+        the same font/colour attributes as the native Button.
+        """
+        return wx.Button.GetClassDefaultAttributes()
+
+
+    def ShouldInheritColours(self):
+        """
+        Overridden base class virtual.  Buttons usually don't inherit
+        the parent's colours.
+        """
+        return False
+    
+
     def Enable(self, enable=True):
         wx.PyControl.Enable(self, enable)
         self.Refresh()
@@ -161,39 +170,37 @@ class GenButton(wx.PyControl):
 
 
     def InitColours(self):
-        faceClr      = wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNFACE)
-        textClr      = wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNTEXT)
-        self.faceDnClr = faceClr
-        self.SetBackgroundColour(faceClr)
-        self.SetForegroundColour(textClr)
-
-        shadowClr    = wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNSHADOW)
-        highlightClr = wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNHIGHLIGHT)
-        self.shadowPen    = wx.Pen(shadowClr, 1, wx.SOLID)
-        self.highlightPen = wx.Pen(highlightClr, 1, wx.SOLID)
+        """
+        Calculate a new set of highlight and shadow colours based on
+        the background colour.  Works okay if the colour is dark...
+        """
+        faceClr = self.GetBackgroundColour()
+        r, g, b = faceClr.Get()
+        fr, fg, fb = min(255,r+32), min(255,g+32), min(255,b+32)
+        self.faceDnClr = wx.Colour(fr, fg, fb)
+        sr, sg, sb = max(0,r-32), max(0,g-32), max(0,b-32)
+        self.shadowPen = wx.Pen(wx.Colour(sr,sg,sb), 1, wx.SOLID)
+        hr, hg, hb = min(255,r+64), min(255,g+64), min(255,b+64)
+        self.highlightPen = wx.Pen(wx.Colour(hr,hg,hb), 1, wx.SOLID)
+        self.focusClr = wx.Colour(hr, hg, hb)
+
+        textClr = self.GetForegroundColour()
         if wx.Platform == "__WXMAC__":
             self.focusIndPen = wx.Pen(textClr, 1, wx.SOLID)
         else:
             self.focusIndPen  = wx.Pen(textClr, 1, wx.USER_DASH)
             self.focusIndPen.SetDashes([1,1])
             self.focusIndPen.SetCap(wx.CAP_BUTT)
-        self.focusClr = highlightClr
-
-
+        
+        
     def SetBackgroundColour(self, colour):
         wx.PyControl.SetBackgroundColour(self, colour)
-        colour = self.GetBackgroundColour()
+        self.InitColours()
 
-        # Calculate a new set of highlight and shadow colours based on
-        # the new background colour.  Works okay if the colour is dark...
-        r, g, b = colour.Get()
-        fr, fg, fb = min(255,r+32), min(255,g+32), min(255,b+32)
-        self.faceDnClr = wx.Colour(fr, fg, fb)
-        sr, sg, sb = max(0,r-32), max(0,g-32), max(0,b-32)
-        self.shadowPen = wx.Pen(wx.Colour(sr,sg,sb), 1, wx.SOLID)
-        hr, hg, hb = min(255,r+64), min(255,g+64), min(255,b+64)
-        self.highlightPen = wx.Pen(wx.Colour(hr,hg,hb), 1, wx.SOLID)
-        self.focusClr = wx.Colour(hr, hg, hb)
+
+    def SetForegroundColour(self, colour):
+        wx.PyControl.SetForegroundColour(self, colour)
+        self.InitColours()
 
 
     def _GetLabelSize(self):
@@ -245,11 +252,6 @@ class GenButton(wx.PyControl):
 
     def DrawFocusIndicator(self, dc, w, h):
         bw = self.bezelWidth
-##         if self.hasFocus:
-##             self.focusIndPen.SetColour(self.GetForegroundColour())
-##         else:
-##             #self.focusIndPen.SetColour(self.GetBackgroundColour())
-##             self.focusIndPen.SetColour(self.GetForegroundColour())
         self.focusIndPen.SetColour(self.focusClr)
         dc.SetLogicalFunction(wx.INVERT)
         dc.SetPen(self.focusIndPen)