]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/demo/OwnerDrawnComboBox.py
Add docstrings for ComboCtrl and ComboPopup, and added OwnerDrawnComboBox
[wxWidgets.git] / wxPython / demo / OwnerDrawnComboBox.py
diff --git a/wxPython/demo/OwnerDrawnComboBox.py b/wxPython/demo/OwnerDrawnComboBox.py
new file mode 100644 (file)
index 0000000..3c2a90e
--- /dev/null
@@ -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 = """<html><body>
+<h2><center>wx.combo.OwnerDrawnComboBox</center></h2>
+
+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.
+
+</body></html>
+"""
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
+