| 1 | |
| 2 | import wx |
| 3 | import cStringIO |
| 4 | |
| 5 | #import os; print os.getpid(); raw_input("Press enter...") |
| 6 | |
| 7 | |
| 8 | class Panel(wx.Panel): |
| 9 | def __init__(self, parent): |
| 10 | wx.Panel.__init__(self, parent) |
| 11 | self.Bind(wx.EVT_PAINT, self.OnPaint) |
| 12 | |
| 13 | def OnPaint(self, evt): |
| 14 | dc = wx.PaintDC(self) |
| 15 | dc.SetFont(self.GetFont()) |
| 16 | r = wx.RendererNative.Get() |
| 17 | rect = wx.Rect(40,10, 95,r.GetHeaderButtonHeight(self)) |
| 18 | #print rect |
| 19 | |
| 20 | # simple helper to make calling DrawHeaderButton so many times a |
| 21 | # bit easier and less messy |
| 22 | def dhb(idx, rect, flags=0, sort=0, params=None): |
| 23 | dc.DrawText("%02d." % idx, rect.x-25, rect.y) |
| 24 | r.DrawHeaderButton(self, dc, rect, flags, sort, params) |
| 25 | rect.y += 30 |
| 26 | |
| 27 | dhb(1, rect) |
| 28 | dhb(2, rect, wx.CONTROL_SELECTED) |
| 29 | dhb(3, rect, wx.CONTROL_CURRENT) |
| 30 | dhb(4, rect, wx.CONTROL_SELECTED|wx.CONTROL_CURRENT) |
| 31 | dhb(5, rect, 0, wx.HDR_SORT_ICON_UP) |
| 32 | dhb(6, rect, 0, wx.HDR_SORT_ICON_DOWN) |
| 33 | dhb(7, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_UP) |
| 34 | dhb(8, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_DOWN) |
| 35 | |
| 36 | rect.x = 180 |
| 37 | rect.y = 10 |
| 38 | hp = wx.HeaderButtonParams() |
| 39 | hp.m_labelText = "Hello" |
| 40 | dhb(9, rect, params=hp) |
| 41 | hp.m_labelAlignment = wx.ALIGN_CENTER |
| 42 | dhb(10, rect, params=hp) |
| 43 | hp.m_labelAlignment = wx.ALIGN_RIGHT |
| 44 | dhb(11, rect, params=hp) |
| 45 | hp.m_labelAlignment = wx.ALIGN_CENTER |
| 46 | dhb(12, rect, wx.CONTROL_SELECTED, 0, hp) |
| 47 | dhb(13, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_UP, hp) |
| 48 | hp.m_labelText = "This label is too long" |
| 49 | dhb(14, rect, params=hp) |
| 50 | dhb(15, rect, wx.CONTROL_SELECTED, 0, hp) |
| 51 | dhb(16, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_UP, hp) |
| 52 | |
| 53 | rect.x = 320 |
| 54 | rect.y = 10 |
| 55 | hp = wx.HeaderButtonParams() |
| 56 | hp.m_labelBitmap = getBitmap() |
| 57 | dhb(17, rect, params=hp) |
| 58 | hp.m_labelAlignment = wx.ALIGN_CENTER |
| 59 | dhb(18, rect, params=hp) |
| 60 | hp.m_labelAlignment = wx.ALIGN_RIGHT |
| 61 | dhb(19, rect, params=hp) |
| 62 | hp.m_labelAlignment = wx.ALIGN_CENTER |
| 63 | dhb(20, rect, wx.CONTROL_SELECTED, 0, hp) |
| 64 | dhb(21, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_UP, hp) |
| 65 | |
| 66 | |
| 67 | hp.m_labelText = "label" |
| 68 | hp.m_labelAlignment = wx.ALIGN_LEFT |
| 69 | dhb(22, rect, 0, 0, hp) |
| 70 | hp.m_labelAlignment = wx.ALIGN_CENTER |
| 71 | dhb(23, rect, 0, 0, hp) |
| 72 | hp.m_labelAlignment = wx.ALIGN_RIGHT |
| 73 | dhb(24, rect, 0, 0, hp) |
| 74 | |
| 75 | rect.x = 460 |
| 76 | rect.y = 10 |
| 77 | hp.m_labelAlignment = wx.ALIGN_LEFT |
| 78 | dhb(25, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_UP, hp) |
| 79 | hp.m_labelAlignment = wx.ALIGN_CENTER |
| 80 | dhb(26, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_UP, hp) |
| 81 | hp.m_labelAlignment = wx.ALIGN_RIGHT |
| 82 | dhb(27, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_UP, hp) |
| 83 | |
| 84 | hp.m_labelText = "longer label" |
| 85 | hp.m_labelAlignment = wx.ALIGN_LEFT |
| 86 | dhb(28, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_UP, hp) |
| 87 | hp.m_labelAlignment = wx.ALIGN_CENTER |
| 88 | dhb(29, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_UP, hp) |
| 89 | hp.m_labelAlignment = wx.ALIGN_RIGHT |
| 90 | dhb(30, rect, wx.CONTROL_SELECTED, wx.HDR_SORT_ICON_UP, hp) |
| 91 | |
| 92 | |
| 93 | def getData(): |
| 94 | return \ |
| 95 | '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ |
| 96 | \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ |
| 97 | \x00\x01\xceIDAT8\x8d\x95\x93=h\x14A\x14\xc7\x7f\xfbq\xc7m\xce\x0b\xe4\xa2F/\ |
| 98 | ~\x04\x9b\x03O\x0bE\x10\x04\x91\x10\x88X\xa4J\xe7&\x8a\x10A\xc4Bb\xe9uje\xc0\ |
| 99 | \xd2\xd2\xca\x94V\xa9\xa3X\x88i\x14\x0b\x91\x14\xae$dO\x8d\x97#\xf1<n/;\xb3k\ |
| 100 | !;\xd9\xbd\xdd\x14\xfea\x9a7\xef\xff{\x8f7\xf34M7\x88+\x90"d\x1f\xe9\x86\xa9\ |
| 101 | \xf5\xc7\xcc~\xf3\x8d\x87W\xb9pbR\xc5\xb6\xfc5\x00\xbe}_%\x90"\xec\x87\x98q\ |
| 102 | \xf3\xfc\xc2,\xf7\xef=\x00\xa0\xc36\x8d\xf0\x03#\x0c\x00p\x9asL?:\x9b\x82\ |
| 103 | \x98q\xf3\x8c=\xcbr\xf3E\xa2E\xcf\xf7\x01\x90\x81`|\xae\x96\x82\xe8\x81\x14\ |
| 104 | \xe1\xf4\x9d\te\xf6|_\x9dN\xaf\x8b\x0c\x04\x83\xc6a\xa6F\xef\xe2\xfd\xb0\x18\ |
| 105 | \x9f\xabq\xf1\xfa\xa8\x9a\x95\x1eUjt\xbf&*\xcb@\x000\x94\xab`W\xeb\x9c?:I^\ |
| 106 | \xb7\x0084r0{\x88Q\xbb\x91\x8a\xc6\x10v\xb5\xcep\xa1\xc2\xe7\xd6;~\xcbM\xacP\ |
| 107 | &r\x12\x80\x82V\xe2\xda\xc9\xdb\x1c\x19\x18\xe3\xe5\xeac&\x8e\xcf0\\\xa8\xb0\ |
| 108 | \xe4<gy\xfd\x159\xd3\xc0\xc2\xe2\xd7\xcf\xa6\xf2\xe8q@^\xb7h\xf56(\xe5\xca\ |
| 109 | \xd8\xd5:\xb5\xf2%e\xdeO\x89\x0e\xdc\xb6\x83\xdbv\xf8\xb8\xf9\x06\xbbZO\x99}\ |
| 110 | !\x91\xa1\xc8\x06\xec\xc85\xda\x9d.\xa5\xa2\x85\xdbvx\xf2\xfef"\xd1\xeb\xed\ |
| 111 | \x02`h\x07\x92\x00\xdd0\xb5@\x8ap\xea\xd6e\xae\xcc\x1f\xa3\xb1\xd5T\xc9\xfd\ |
| 112 | \x1a;3\xc8\xeb\xa7\x0e+\x8b\xae\xfa\xd6&\xfc\xfb\xe3qHP\xfeCgg\xefEtS\xc3*\ |
| 113 | \x9a\xbc]Xg\xe9\xd9\'v\xa5\xa7\xee\xb4\xf82E\x90\xfc\xa9\xedT\xf5\x8d/-V\x16\ |
| 114 | ]\xa2\x82\x99\x80\x08\x92\xd9?\xd9\xdb\x98\x02\xfc\xaf\xfe\x02\xb1S\xd1)\xa5\ |
| 115 | \x1a\xc2\x99\x00\x00\x00\x00IEND\xaeB`\x82' |
| 116 | |
| 117 | def getBitmap(): |
| 118 | return wx.BitmapFromImage(getImage()) |
| 119 | |
| 120 | def getImage(): |
| 121 | stream = cStringIO.StringIO(getData()) |
| 122 | return wx.ImageFromStream(stream) |
| 123 | |
| 124 | |
| 125 | app = wx.App(False) |
| 126 | frm = wx.Frame(None, title="DrawHeaderButton Test", size=(580,300)) |
| 127 | pnl = Panel(frm) |
| 128 | frm.Show() |
| 129 | app.MainLoop() |
| 130 | |