"""
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
#----------------------------------------------------------------------
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
#----------------------------------------------------------------------
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)
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)
"""
if size is None:
size = wx.DefaultSize
- wx.PyControl.SetBestSize(self, size)
+ wx.PyControl.SetBestFittingSize(self, size)
def DoGetBestSize(self):
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())
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
#----------------------------------------------------------------------
class GenBitmapButton(GenButton):
+ """A generic bitmap button."""
+
def __init__(self, parent, ID, bitmap,
pos = wx.DefaultPosition, size = wx.DefaultSize,
style = 0, validator = wx.DefaultValidator,
#----------------------------------------------------------------------
-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,
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
#----------------------------------------------------------------------