]>
Commit | Line | Data |
---|---|---|
1 | #---------------------------------------------------------------------------- | |
2 | # Name: ListCtrl_edit.py | |
3 | # Purpose: Testing editing a ListCtrl | |
4 | # | |
5 | # Author: Pim van Heuven | |
6 | # | |
7 | # Created: 2004/10/15 | |
8 | # Copyright: (c) Pim Van Heuven | |
9 | # Licence: wxWindows license | |
10 | #---------------------------------------------------------------------------- | |
11 | ||
12 | import sys | |
13 | import wx | |
14 | import wx.lib.mixins.listctrl as listmix | |
15 | ||
16 | #--------------------------------------------------------------------------- | |
17 | ||
18 | listctrldata = { | |
19 | 1 : ("Hey!", "You can edit", "me!"), | |
20 | 2 : ("Try changing the contents", "by", "clicking"), | |
21 | 3 : ("in", "a", "cell"), | |
22 | 4 : ("See how the length columns", "change", "?"), | |
23 | 5 : ("You can use", "TAB,", "cursor down,"), | |
24 | 6 : ("and cursor up", "to", "navigate"), | |
25 | } | |
26 | ||
27 | #--------------------------------------------------------------------------- | |
28 | ||
29 | class TestListCtrl(wx.ListCtrl, | |
30 | listmix.ListCtrlAutoWidthMixin, | |
31 | listmix.TextEditMixin): | |
32 | ||
33 | def __init__(self, parent, ID, pos=wx.DefaultPosition, | |
34 | size=wx.DefaultSize, style=0): | |
35 | wx.ListCtrl.__init__(self, parent, ID, pos, size, style) | |
36 | ||
37 | listmix.ListCtrlAutoWidthMixin.__init__(self) | |
38 | self.Populate() | |
39 | listmix.TextEditMixin.__init__(self) | |
40 | ||
41 | def Populate(self): | |
42 | # for normal, simple columns, you can add them like this: | |
43 | self.InsertColumn(0, "Column 1") | |
44 | self.InsertColumn(1, "Column 2") | |
45 | self.InsertColumn(2, "Column 3") | |
46 | self.InsertColumn(3, "Len 1", wx.LIST_FORMAT_RIGHT) | |
47 | self.InsertColumn(4, "Len 2", wx.LIST_FORMAT_RIGHT) | |
48 | self.InsertColumn(5, "Len 3", wx.LIST_FORMAT_RIGHT) | |
49 | ||
50 | items = listctrldata.items() | |
51 | for key, data in items: | |
52 | index = self.InsertStringItem(sys.maxint, data[0]) | |
53 | self.SetStringItem(index, 0, data[0]) | |
54 | self.SetStringItem(index, 1, data[1]) | |
55 | self.SetStringItem(index, 2, data[2]) | |
56 | self.SetItemData(index, key) | |
57 | ||
58 | self.SetColumnWidth(0, wx.LIST_AUTOSIZE) | |
59 | self.SetColumnWidth(1, wx.LIST_AUTOSIZE) | |
60 | self.SetColumnWidth(2, 100) | |
61 | ||
62 | self.currentItem = 0 | |
63 | ||
64 | ||
65 | def SetStringItem(self, index, col, data): | |
66 | if col in range(3): | |
67 | wx.ListCtrl.SetStringItem(self, index, col, data) | |
68 | wx.ListCtrl.SetStringItem(self, index, 3+col, str(len(data))) | |
69 | else: | |
70 | try: | |
71 | datalen = int(data) | |
72 | except: | |
73 | return | |
74 | ||
75 | wx.ListCtrl.SetStringItem(self, index, col, data) | |
76 | ||
77 | data = self.GetItem(index, col-3).GetText() | |
78 | wx.ListCtrl.SetStringItem(self, index, col-3, data[0:datalen]) | |
79 | ||
80 | ||
81 | ||
82 | ||
83 | class TestListCtrlPanel(wx.Panel): | |
84 | def __init__(self, parent, log): | |
85 | wx.Panel.__init__(self, parent, -1, style=wx.WANTS_CHARS) | |
86 | ||
87 | self.log = log | |
88 | tID = wx.NewId() | |
89 | ||
90 | self.list = TestListCtrl(self, tID, | |
91 | style=wx.LC_REPORT | |
92 | | wx.BORDER_NONE | |
93 | | wx.LC_SORT_ASCENDING | |
94 | ) | |
95 | ||
96 | self.Bind(wx.EVT_SIZE, self.OnSize) | |
97 | ||
98 | ||
99 | def OnSize(self, event): | |
100 | w,h = self.GetClientSizeTuple() | |
101 | self.list.SetDimensions(0, 0, w, h) | |
102 | ||
103 | ||
104 | ||
105 | #--------------------------------------------------------------------------- | |
106 | ||
107 | def runTest(frame, nb, log): | |
108 | win = TestListCtrlPanel(nb, log) | |
109 | return win | |
110 | ||
111 | #--------------------------------------------------------------------------- | |
112 | ||
113 | ||
114 | overview = """\ | |
115 | <html> | |
116 | <body> | |
117 | ||
118 | This demo demonstrates direct editing of all cells of a ListCtrl. To | |
119 | enable it just include the <b>TextEditMixin</b>. The ListCtrl can be | |
120 | navigated with the TAB and up/down cursor keys. | |
121 | ||
122 | <p>Another facet of this demo is that the remaining space of the | |
123 | ListCtrls is divided over the first three columns. This is achieved | |
124 | with the extended syntax of <b>ListCtrlAutoWidthMixin</b>: | |
125 | <code>listmix.ListCtrlAutoWidthMixin.__init__(self, startcol, endcol)</code> | |
126 | (Look at the general ListCtrl demo for more information about the | |
127 | ListCtrlAutoWidthMixin) | |
128 | ||
129 | <p>Finally, the ListCtrl is automatically scrolled, if needed, when | |
130 | TAB is pressed consecutively (Windows only). | |
131 | ||
132 | </body> | |
133 | </html> | |
134 | """ | |
135 | ||
136 | ||
137 | if __name__ == '__main__': | |
138 | import sys,os | |
139 | import run | |
140 | run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:]) | |
141 |