]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/ListCtrl_edit.py
   1 #---------------------------------------------------------------------------- 
   2 # Name:         ListCtrl_edit.py 
   3 # Purpose:      Testing editing a ListCtrl 
   5 # Author:       Pim van Heuven 
   8 # Copyright:    (c) Pim Van Heuven 
   9 # Licence:      wxWindows license 
  10 #---------------------------------------------------------------------------- 
  14 import  wx
.lib
.mixins
.listctrl  
as  listmix
 
  16 #--------------------------------------------------------------------------- 
  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"), 
  27 #--------------------------------------------------------------------------- 
  29 class TestListCtrl(wx
.ListCtrl
, 
  30                    listmix
.ListCtrlAutoWidthMixin
, 
  31                    listmix
.TextEditMixin
): 
  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
) 
  37         listmix
.ListCtrlAutoWidthMixin
.__init
__(self
) 
  39         listmix
.TextEditMixin
.__init
__(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
) 
  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
) 
  58         self
.SetColumnWidth(0, wx
.LIST_AUTOSIZE
) 
  59         self
.SetColumnWidth(1, wx
.LIST_AUTOSIZE
) 
  60         self
.SetColumnWidth(2, 100) 
  65     def SetStringItem(self
, index
, col
, data
): 
  67             wx
.ListCtrl
.SetStringItem(self
, index
, col
, data
) 
  68             wx
.ListCtrl
.SetStringItem(self
, index
, 3+col
, str(len(data
))) 
  75             wx
.ListCtrl
.SetStringItem(self
, index
, col
, data
) 
  77             data 
= self
.GetItem(index
, col
-3).GetText() 
  78             wx
.ListCtrl
.SetStringItem(self
, index
, col
-3, data
[0:datalen
]) 
  83 class TestListCtrlPanel(wx
.Panel
): 
  84     def __init__(self
, parent
, log
): 
  85         wx
.Panel
.__init
__(self
, parent
, -1, style
=wx
.WANTS_CHARS
) 
  90         sizer 
= wx
.BoxSizer(wx
.VERTICAL
) 
  92         if wx
.Platform 
== "__WXMAC__" and \
 
  93                hasattr(wx
.GetApp().GetTopWindow(), "LoadDemo"): 
  94             self
.useNative 
= wx
.CheckBox(self
, -1, "Use native listctrl") 
  95             self
.useNative
.SetValue(  
  96                 not wx
.SystemOptions
.GetOptionInt("mac.listctrl.always_use_generic") ) 
  97             self
.Bind(wx
.EVT_CHECKBOX
, self
.OnUseNative
, self
.useNative
) 
  98             sizer
.Add(self
.useNative
, 0, wx
.ALL | wx
.ALIGN_RIGHT
, 4) 
 100         self
.list = TestListCtrl(self
, tID
, 
 103                                  | wx
.LC_SORT_ASCENDING
 
 106         sizer
.Add(self
.list, 1, wx
.EXPAND
) 
 108         self
.SetAutoLayout(True) 
 111     def OnUseNative(self
, event
): 
 112         wx
.SystemOptions
.SetOptionInt("mac.listctrl.always_use_generic", not event
.IsChecked()) 
 113         wx
.GetApp().GetTopWindow().LoadDemo("ListCtrl_edit") 
 117 #--------------------------------------------------------------------------- 
 119 def runTest(frame
, nb
, log
): 
 120     win 
= TestListCtrlPanel(nb
, log
) 
 123 #--------------------------------------------------------------------------- 
 130 This demo demonstrates direct editing of all cells of a ListCtrl. To 
 131 enable it just include the <b>TextEditMixin</b>. The ListCtrl can be 
 132 navigated with the TAB and up/down cursor keys. 
 134 <p>Another facet of this demo is that the remaining space of the 
 135 ListCtrls is divided over the first three columns. This is achieved 
 136 with the extended syntax of <b>ListCtrlAutoWidthMixin</b>: 
 137 <code>listmix.ListCtrlAutoWidthMixin.__init__(self, startcol, endcol)</code> 
 138 (Look at the general ListCtrl demo for more information about the 
 139 ListCtrlAutoWidthMixin) 
 141 <p>Finally, the ListCtrl is automatically scrolled, if needed, when 
 142 TAB is pressed consecutively (Windows only). 
 149 if __name__ 
== '__main__': 
 152     run
.main(['', os
.path
.basename(sys
.argv
[0])] + sys
.argv
[1:])