]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/wx/lib/buttons.py
wxCheckListBox doesn't require wxUSE_OWNER_DRAWN when using WXUNIVERSAL
[wxWidgets.git] / wxPython / wx / lib / buttons.py
index 68260c0572e60fcffb8853985534abd93f707416..7f198175472734a279226436b5dd1c4d8435ed89 100644 (file)
 
 """
 This module implements various forms of generic buttons, meaning that
-they are not built on native controls but are self-drawn.
-
-The GenButton is the base.  It acts like a normal button but you
-are able to better control how it looks, bevel width, colours, etc.
-
-GenBitmapButton is a button with one or more bitmaps that show
-the various states the button can be in.
-
-GenToggleButton stays depressed when clicked, until clicked again.
-
-GenBitmapToggleButton the same but with bitmaps.
-
+they are not built on native controls but are self-drawn.  They act
+like normal buttons but you are able to better control how they look,
+bevel width, colours, etc.
 """
 
 import wx
@@ -39,6 +30,7 @@ import imageutils
 #----------------------------------------------------------------------
 
 class GenButtonEvent(wx.PyCommandEvent):
+    """Event sent from the generic buttons when the button is activated. """
     def __init__(self, eventType, ID):
         wx.PyCommandEvent.__init__(self, eventType, ID)
         self.isDown = False
@@ -60,24 +52,32 @@ class GenButtonEvent(wx.PyCommandEvent):
 #----------------------------------------------------------------------
 
 class GenButton(wx.PyControl):
+    """A generic button, and base class for the other generic buttons."""
+
     labelDelta = 1
 
     def __init__(self, parent, ID, label,
                  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.BORDER_NONE
+        wx.PyControl.__init__(self, parent, ID, pos, size, cstyle, validator, name)
 
         self.up = True
-        self.bezelWidth = 2
         self.hasFocus = False
-        self.useFocusInd = True
+        self.style = style
+        if style & wx.BORDER_NONE:
+            self.bezelWidth = 0
+            self.useFocusInd = False
+        else:
+            self.bezelWidth = 2
+            self.useFocusInd = True
 
         self.SetLabel(label)
         self.InheritAttributes()
-        self.SetBestSize(size)
+        self.SetBestFittingSize(size)
         self.InitColours()
 
         self.Bind(wx.EVT_LEFT_DOWN,        self.OnLeftDown)
@@ -89,7 +89,6 @@ class GenButton(wx.PyControl):
         self.Bind(wx.EVT_KILL_FOCUS,       self.OnLoseFocus)
         self.Bind(wx.EVT_KEY_DOWN,         self.OnKeyDown)
         self.Bind(wx.EVT_KEY_UP,           self.OnKeyUp)
-        self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
         self.Bind(wx.EVT_PAINT,            self.OnPaint)
 
 
@@ -100,7 +99,7 @@ class GenButton(wx.PyControl):
         """
         if size is None:
             size = wx.DefaultSize            
-        wx.PyControl.SetBestSize(self, size)
+        wx.PyControl.SetBestFittingSize(self, size)
 
 
     def DoGetBestSize(self):
@@ -197,7 +196,9 @@ class GenButton(wx.PyControl):
         wx.PyControl.SetForegroundColour(self, colour)
         self.InitColours()
 
-
+    def SetDefault(self):
+        self.GetParent().SetDefaultItem(self)
+        
     def _GetLabelSize(self):
         """ used internally """
         w, h = self.GetTextExtent(self.GetLabel())
@@ -260,22 +261,39 @@ class GenButton(wx.PyControl):
         x1 = y1 = 0
         x2 = width-1
         y2 = height-1
+        
         dc = wx.BufferedPaintDC(self)
+        brush = None
+        
         if self.up:
-            dc.SetBackground(wx.Brush(self.GetBackgroundColour(), wx.SOLID))
+            colBg = self.GetBackgroundColour()
+            brush = wx.Brush(colBg, wx.SOLID)
+            if self.style & wx.BORDER_NONE:
+                myAttr = self.GetDefaultAttributes()
+                parAttr = self.GetParent().GetDefaultAttributes()
+                myDef = colBg == myAttr.colBg
+                parDef = self.GetParent().GetBackgroundColour() == parAttr.colBg
+                if myDef and parDef:
+                    if wx.Platform == "__WXMAC__":
+                        brush.MacSetTheme(1) # 1 == kThemeBrushDialogBackgroundActive
+                    elif wx.Platform == "__WXMSW__":
+                        if self.DoEraseBackground(dc):
+                            brush = None
+                elif myDef and not parDef:
+                    colBg = self.GetParent().GetBackgroundColour()
+                    brush = wx.Brush(colBg, wx.SOLID)
         else:
-            dc.SetBackground(wx.Brush(self.faceDnClr, wx.SOLID))
-        dc.Clear()
+            brush = wx.Brush(self.faceDnClr, wx.SOLID)
+        if brush is not None:
+            dc.SetBackground(brush)
+            dc.Clear()
+                    
         self.DrawBezel(dc, x1, y1, x2, y2)
         self.DrawLabel(dc, width, height)
         if self.hasFocus and self.useFocusInd:
             self.DrawFocusIndicator(dc, width, height)
 
 
-    def OnEraseBackground(self, event):
-        pass
-
-
     def OnLeftDown(self, event):
         if not self.IsEnabled():
             return
@@ -349,6 +367,8 @@ class GenButton(wx.PyControl):
 #----------------------------------------------------------------------
 
 class GenBitmapButton(GenButton):
+    """A generic bitmap button."""
+
     def __init__(self, parent, ID, bitmap,
                  pos = wx.DefaultPosition, size = wx.DefaultSize,
                  style = 0, validator = wx.DefaultValidator,
@@ -422,7 +442,8 @@ class GenBitmapButton(GenButton):
 #----------------------------------------------------------------------
 
 
-class GenBitmapTextButton(GenBitmapButton):     # generic bitmapped button with Text Label
+class GenBitmapTextButton(GenBitmapButton):
+    """A generic bitmapped button with text label"""
     def __init__(self, parent, ID, bitmap, label,
                  pos = wx.DefaultPosition, size = wx.DefaultSize,
                  style = 0, validator = wx.DefaultValidator,
@@ -543,12 +564,15 @@ class __ToggleMixin:
 
 
 class GenToggleButton(__ToggleMixin, GenButton):
+    """A generic toggle button"""
     pass
 
 class GenBitmapToggleButton(__ToggleMixin, GenBitmapButton):
+    """A generic toggle bitmap button"""
     pass
 
 class GenBitmapTextToggleButton(__ToggleMixin, GenBitmapTextButton):
+    """A generic toggle bitmap button with text label"""
     pass
 
 #----------------------------------------------------------------------