2004-10-15 14:45:21 -04:00
|
|
|
#----------------------------------------------------------------------------
|
|
|
|
# Name: ListCtrl_edit.py
|
|
|
|
# Purpose: Testing editing a ListCtrl
|
|
|
|
#
|
|
|
|
# Author: Pim van Heuven
|
|
|
|
#
|
|
|
|
# Created: 2004/10/15
|
|
|
|
# Copyright: (c) Pim Van Heuven
|
|
|
|
# Licence: wxWindows license
|
|
|
|
#----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
import sys
|
|
|
|
import wx
|
|
|
|
import wx.lib.mixins.listctrl as listmix
|
|
|
|
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
listctrldata = {
|
|
|
|
1 : ("Hey!", "You can edit", "me!"),
|
|
|
|
2 : ("Try changing the contents", "by", "clicking"),
|
|
|
|
3 : ("in", "a", "cell"),
|
|
|
|
4 : ("See how the length columns", "change", "?"),
|
|
|
|
5 : ("You can use", "TAB,", "cursor down,"),
|
|
|
|
6 : ("and cursor up", "to", "navigate"),
|
|
|
|
}
|
|
|
|
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class TestListCtrl(wx.ListCtrl,
|
|
|
|
listmix.ListCtrlAutoWidthMixin,
|
|
|
|
listmix.TextEditMixin):
|
|
|
|
|
|
|
|
def __init__(self, parent, ID, pos=wx.DefaultPosition,
|
|
|
|
size=wx.DefaultSize, style=0):
|
|
|
|
wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
|
|
|
|
|
2004-10-16 13:46:29 -04:00
|
|
|
listmix.ListCtrlAutoWidthMixin.__init__(self)
|
2004-10-15 14:45:21 -04:00
|
|
|
self.Populate()
|
|
|
|
listmix.TextEditMixin.__init__(self)
|
|
|
|
|
|
|
|
def Populate(self):
|
|
|
|
# for normal, simple columns, you can add them like this:
|
|
|
|
self.InsertColumn(0, "Column 1")
|
|
|
|
self.InsertColumn(1, "Column 2")
|
|
|
|
self.InsertColumn(2, "Column 3")
|
|
|
|
self.InsertColumn(3, "Len 1", wx.LIST_FORMAT_RIGHT)
|
|
|
|
self.InsertColumn(4, "Len 2", wx.LIST_FORMAT_RIGHT)
|
|
|
|
self.InsertColumn(5, "Len 3", wx.LIST_FORMAT_RIGHT)
|
|
|
|
|
|
|
|
items = listctrldata.items()
|
|
|
|
for key, data in items:
|
|
|
|
index = self.InsertStringItem(sys.maxint, data[0])
|
|
|
|
self.SetStringItem(index, 0, data[0])
|
|
|
|
self.SetStringItem(index, 1, data[1])
|
|
|
|
self.SetStringItem(index, 2, data[2])
|
|
|
|
self.SetItemData(index, key)
|
|
|
|
|
|
|
|
self.SetColumnWidth(0, wx.LIST_AUTOSIZE)
|
|
|
|
self.SetColumnWidth(1, wx.LIST_AUTOSIZE)
|
|
|
|
self.SetColumnWidth(2, 100)
|
|
|
|
|
|
|
|
self.currentItem = 0
|
|
|
|
|
|
|
|
|
|
|
|
def SetStringItem(self, index, col, data):
|
|
|
|
if col in range(3):
|
|
|
|
wx.ListCtrl.SetStringItem(self, index, col, data)
|
|
|
|
wx.ListCtrl.SetStringItem(self, index, 3+col, str(len(data)))
|
|
|
|
else:
|
|
|
|
try:
|
|
|
|
datalen = int(data)
|
|
|
|
except:
|
|
|
|
return
|
|
|
|
|
|
|
|
wx.ListCtrl.SetStringItem(self, index, col, data)
|
|
|
|
|
|
|
|
data = self.GetItem(index, col-3).GetText()
|
|
|
|
wx.ListCtrl.SetStringItem(self, index, col-3, data[0:datalen])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestListCtrlPanel(wx.Panel):
|
|
|
|
def __init__(self, parent, log):
|
|
|
|
wx.Panel.__init__(self, parent, -1, style=wx.WANTS_CHARS)
|
|
|
|
|
|
|
|
self.log = log
|
|
|
|
tID = wx.NewId()
|
|
|
|
|
|
|
|
self.list = TestListCtrl(self, tID,
|
|
|
|
style=wx.LC_REPORT
|
|
|
|
| wx.BORDER_NONE
|
|
|
|
| wx.LC_SORT_ASCENDING
|
|
|
|
)
|
|
|
|
|
|
|
|
self.Bind(wx.EVT_SIZE, self.OnSize)
|
|
|
|
|
|
|
|
|
|
|
|
def OnSize(self, event):
|
|
|
|
w,h = self.GetClientSizeTuple()
|
|
|
|
self.list.SetDimensions(0, 0, w, h)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
def runTest(frame, nb, log):
|
|
|
|
win = TestListCtrlPanel(nb, log)
|
|
|
|
return win
|
|
|
|
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
overview = """\
|
|
|
|
<html>
|
|
|
|
<body>
|
|
|
|
|
|
|
|
This demo demonstrates direct editing of all cells of a ListCtrl. To
|
|
|
|
enable it just include the <b>TextEditMixin</b>. The ListCtrl can be
|
|
|
|
navigated with the TAB and up/down cursor keys.
|
|
|
|
|
|
|
|
<p>Another facet of this demo is that the remaining space of the
|
|
|
|
ListCtrls is divided over the first three columns. This is achieved
|
|
|
|
with the extended syntax of <b>ListCtrlAutoWidthMixin</b>:
|
|
|
|
<code>listmix.ListCtrlAutoWidthMixin.__init__(self, startcol, endcol)</code>
|
|
|
|
(Look at the general ListCtrl demo for more information about the
|
|
|
|
ListCtrlAutoWidthMixin)
|
|
|
|
|
|
|
|
<p>Finally, the ListCtrl is automatically scrolled, if needed, when
|
|
|
|
TAB is pressed consecutively (Windows only).
|
|
|
|
|
|
|
|
</body>
|
|
|
|
</html>
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
import sys,os
|
|
|
|
import run
|
|
|
|
run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
|
|
|
|
|