]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/wxPython/lib/buttons.py
Added wxGenBitmapTextButton contrib from Lorne White.
[wxWidgets.git] / wxPython / wxPython / lib / buttons.py
index fb455c86c4b519ed8d1e0a8b484f4f6b131dfcea..d81475dbd684ba10d4ba794be32dc729402d3aef 100644 (file)
@@ -382,9 +382,68 @@ class wxGenBitmapButton(wxGenButton):
         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):
@@ -429,6 +488,8 @@ class wxGenToggleButton(__ToggleMixin, wxGenButton):
 class wxGenBitmapToggleButton(__ToggleMixin, wxGenBitmapButton):
     pass
 
+class wxGenBitmapTextToggleButton(__ToggleMixin, wxGenBitmapTextButton):
+    pass
 #----------------------------------------------------------------------