from wxPython.wx import *
-from wxPython.lib.buttons import wxGenButton, wxGenBitmapButton, \
- wxGenToggleButton, wxGenBitmapToggleButton
+from wxPython.lib.buttons import *
import images
#----------------------------------------------------------------------
b.SetToggle(true)
b.SetBestSize()
+ b = wxGenBitmapTextButton(self, -1, None, "Bitmapped Text", (220, 230), size = (200, 45))
+ EVT_BUTTON(self, b.GetId(), self.OnButton)
+ bmp = images.getBulb1Bitmap()
+ mask = wxMaskColour(bmp, wxBLUE)
+ bmp.SetMask(mask)
+ b.SetBitmapLabel(bmp)
+ bmp = images.getBulb2Bitmap()
+ mask = wxMaskColour(bmp, wxBLUE)
+ bmp.SetMask(mask)
+ b.SetBitmapSelected(bmp)
+ b.SetUseFocusIndicator(false)
+ b.SetBestSize()
+
def OnButton(self, event):
self.log.WriteText("Button Clicked: %d\n" % event.GetId())
dc.DrawBitmap(bmp, (width-bw)/2+dw, (height-bh)/2+dy, hasMask)
-
#----------------------------------------------------------------------
+class wxGenBitmapTextButton(wxGenBitmapButton): # generic bitmapped button with Text Label
+ def __init__(self, parent, ID, bitmap, label,
+ pos = wxDefaultPosition, size = wxDefaultSize,
+ style = 0, validator = wxDefaultValidator,
+ name = "genbutton"):
+ wxGenBitmapButton.__init__(self, parent, ID, bitmap, pos, size, style, validator, name)
+ self.SetLabel(label)
+
+
+ def _GetLabelSize(self):
+ """ used internally """
+ w, h = self.GetTextExtent(self.GetLabel())
+ if not self.bmpLabel:
+ return w, h, true # if there isn't a bitmap use the size of the text
+
+ w_bmp = self.bmpLabel.GetWidth()+2
+ h_bmp = self.bmpLabel.GetHeight()+2
+ width = w + w_bmp
+ if h_bmp > h:
+ height = h_bmp
+ else:
+ height = h
+ return width, height, true
+
+
+ def DrawLabel(self, dc, width, height, dw=0, dy=0):
+ bmp = self.bmpLabel
+ if bmp != None: # if the bitmap is used
+ if self.bmpDisabled and not self.IsEnabled():
+ bmp = self.bmpDisabled
+ if self.bmpFocus and self.hasFocus:
+ bmp = self.bmpFocus
+ if self.bmpSelected and not self.up:
+ bmp = self.bmpSelected
+ bw,bh = bmp.GetWidth(), bmp.GetHeight()
+ if not self.up:
+ dw = dy = self.labelDelta
+ hasMask = bmp.GetMask() != None
+ else:
+ bw = bh = 0 # no bitmap -> size is zero
+
+ dc.SetFont(self.GetFont())
+ if self.IsEnabled():
+ dc.SetTextForeground(self.GetForegroundColour())
+ else:
+ dc.SetTextForeground(wxSystemSettings_GetSystemColour(wxSYS_COLOUR_GRAYTEXT))
+
+ label = self.GetLabel()
+ tw, th = dc.GetTextExtent(label) # size of text
+ if not self.up:
+ dw = dy = self.labelDelta
+
+ pos_x = (width-bw-tw)/2+dw # adjust for bitmap and text to centre
+ if bmp !=None:
+ dc.DrawBitmap(bmp, pos_x, (height-bh)/2+dy, hasMask) # draw bitmap if available
+ pos_x = pos_x + 2 # extra spacing from bitmap
+
+ dc.DrawText(label, pos_x + dw+bw, (height-th)/2+dy) # draw the text
+
+#----------------------------------------------------------------------
class __ToggleMixin:
def SetToggle(self, flag):
class wxGenBitmapToggleButton(__ToggleMixin, wxGenBitmapButton):
pass
+class wxGenBitmapTextToggleButton(__ToggleMixin, wxGenBitmapTextButton):
+ pass
#----------------------------------------------------------------------