X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3b339f106ca9fa0243f37dc9a5ec9e9509efa1e3..84dd1dd89e9f02edaaf9d61b3932c7feb3cd8898:/wxPython/demo/OwnerDrawnComboBox.py diff --git a/wxPython/demo/OwnerDrawnComboBox.py b/wxPython/demo/OwnerDrawnComboBox.py new file mode 100644 index 0000000000..3c2a90eba5 --- /dev/null +++ b/wxPython/demo/OwnerDrawnComboBox.py @@ -0,0 +1,151 @@ + +import wx +import wx.combo + +#---------------------------------------------------------------------- +# This ComboBox class graphically displays the various pen styles that +# are available, making it easy for the user to choose the style they +# want. + +class PenStyleComboBox(wx.combo.OwnerDrawnComboBox): + + # Overridden from OwnerDrawnComboBox, called to draw each + # item in the list + def OnDrawItem(self, dc, rect, item, flags): + if item == wx.NOT_FOUND: + # painting the control, but there is no valid item selected yet + return + + r = wx.Rect(*rect) # make a copy + r.Deflate(3, 5) + + penStyle = wx.SOLID + if item == 1: + penStyle = wx.TRANSPARENT + elif item == 2: + penStyle = wx.DOT + elif item == 3: + penStyle = wx.LONG_DASH + elif item == 4: + penStyle = wx.SHORT_DASH + elif item == 5: + penStyle = wx.DOT_DASH + elif item == 6: + penStyle = wx.BDIAGONAL_HATCH + elif item == 7: + penStyle = wx.CROSSDIAG_HATCH + elif item == 8: + penStyle = wx.FDIAGONAL_HATCH + elif item == 9: + penStyle = wx.CROSS_HATCH + elif item == 10: + penStyle = wx.HORIZONTAL_HATCH + elif item == 11: + penStyle = wx.VERTICAL_HATCH + + pen = wx.Pen(dc.GetTextForeground(), 3, penStyle) + dc.SetPen(pen) + + if flags & wx.combo.ODCB_PAINTING_CONTROL: + # for painting the control itself + dc.DrawLine( r.x+5, r.y+r.height/2, r.x+r.width - 5, r.y+r.height/2 ) + + else: + # for painting the items in the popup + dc.DrawText(self.GetString( item ), + r.x + 3, + (r.y + 0) + ( (r.height/2) - dc.GetCharHeight() )/2 + ) + dc.DrawLine( r.x+5, r.y+((r.height/4)*3)+1, r.x+r.width - 5, r.y+((r.height/4)*3)+1 ) + + + # Overridden from OwnerDrawnComboBox, called for drawing the + # background area of each item. + def OnDrawBackground(self, dc, rect, item, flags): + # If the item is selected, or its item # iseven, or we are painting the + # combo control itself, then use the default rendering. + if (item & 1 == 0 or flags & (wx.combo.ODCB_PAINTING_CONTROL | + wx.combo.ODCB_PAINTING_SELECTED)): + wx.combo.OwnerDrawnComboBox.OnDrawBackground(self, dc, rect, item, flags) + return + + # Otherwise, draw every other background with different colour. + bgCol = wx.Colour(240,240,250) + dc.SetBrush(wx.Brush(bgCol)) + dc.SetPen(wx.Pen(bgCol)) + dc.DrawRectangleRect(rect); + + + + # Overridden from OwnerDrawnComboBox, should return the height + # needed to display an item in the popup, or -1 for default + def OnMeasureItem(self, item): + # Simply demonstrate the ability to have variable-height items + if item & 1: + return 36 + else: + return 24 + + # Overridden from OwnerDrawnComboBox. Callback for item width, or + # -1 for default/undetermined + def OnMeasureItemWidth(self, item): + return -1; # default - will be measured from text width + + + + +#---------------------------------------------------------------------- + +class TestPanel(wx.Panel): + def __init__(self, parent, log): + self.log = log + wx.Panel.__init__(self, parent, -1) + + penStyles = [ + "Solid", + "Transparent", + "Dot", + "Long Dash", + "Short Dash", + "Dot Dash", + "Backward Diagonal Hatch", + "Cross-diagonal Hatch", + "Forward Diagonal Hatch", + "Cross Hatch", + "Horizontal Hatch", + "Vertical Hatch", + ] + + wx.StaticText(self, -1, "Pen Styles:", (20, 20)) + pscb = PenStyleComboBox(self, choices=penStyles, style=wx.CB_READONLY, + pos=(20,40), size=(250, -1)) + + self.pscb = pscb + +#---------------------------------------------------------------------- + +def runTest(frame, nb, log): + win = TestPanel(nb, log) + return win + +#---------------------------------------------------------------------- + + + +overview = """ +

wx.combo.OwnerDrawnComboBox

+ +wx.combo.OwnerDrawnComboBox is a combobox with owner-drawn list +items. In essence, it is a wx.combo.ComboCtrl with wx.VListBox popup and +wx.ControlWithItems interface. + + +""" + + + +if __name__ == '__main__': + import sys,os + import run + run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:]) +