]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/demo/ListCtrl_edit.py
Applied patch from Pim Van Heuven that modifies 4 files:
[wxWidgets.git] / wxPython / demo / ListCtrl_edit.py
diff --git a/wxPython/demo/ListCtrl_edit.py b/wxPython/demo/ListCtrl_edit.py
new file mode 100644 (file)
index 0000000..cba1e24
--- /dev/null
@@ -0,0 +1,142 @@
+#----------------------------------------------------------------------------
+# 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)
+
+        # Divide remaining space over all columns
+        listmix.ListCtrlAutoWidthMixin.__init__(self, 0, 3)
+        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:])
+