the demo framework. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43385 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			154 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#----------------------------------------------------------------------------
 | 
						|
# 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)
 | 
						|
 | 
						|
        listmix.ListCtrlAutoWidthMixin.__init__(self)
 | 
						|
        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()
 | 
						|
 | 
						|
        sizer = wx.BoxSizer(wx.VERTICAL)
 | 
						|
        
 | 
						|
        if wx.Platform == "__WXMAC__" and \
 | 
						|
               hasattr(wx.GetApp().GetTopWindow(), "LoadDemo"):
 | 
						|
            self.useNative = wx.CheckBox(self, -1, "Use native listctrl")
 | 
						|
            self.useNative.SetValue( 
 | 
						|
                not wx.SystemOptions.GetOptionInt("mac.listctrl.always_use_generic") )
 | 
						|
            self.Bind(wx.EVT_CHECKBOX, self.OnUseNative, self.useNative)
 | 
						|
            sizer.Add(self.useNative, 0, wx.ALL | wx.ALIGN_RIGHT, 4)
 | 
						|
 | 
						|
        self.list = TestListCtrl(self, tID,
 | 
						|
                                 style=wx.LC_REPORT
 | 
						|
                                 | wx.BORDER_NONE
 | 
						|
                                 | wx.LC_SORT_ASCENDING
 | 
						|
                                 )
 | 
						|
 | 
						|
        sizer.Add(self.list, 1, wx.EXPAND)
 | 
						|
        self.SetSizer(sizer)
 | 
						|
        self.SetAutoLayout(True)
 | 
						|
 | 
						|
 | 
						|
    def OnUseNative(self, event):
 | 
						|
        wx.SystemOptions.SetOptionInt("mac.listctrl.always_use_generic", not event.IsChecked())
 | 
						|
        wx.GetApp().GetTopWindow().LoadDemo("ListCtrl_edit")
 | 
						|
 | 
						|
 | 
						|
 | 
						|
#---------------------------------------------------------------------------
 | 
						|
 | 
						|
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:])
 | 
						|
 |