git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43485 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			152 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
 | |
| 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:])
 | |
| 
 |