Updated wxColumnSorterMixin to also be able to place sort icons on the

column headers, and updated the wxListCtrl demo to show it off by
using wxColumnSorterMixin.

Other odds and ends...


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11549 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2001-09-03 22:41:18 +00:00
parent 0188c70233
commit 6d19860fe8
14 changed files with 2659 additions and 1723 deletions

View File

@@ -1,3 +1,39 @@
*.py
*.pyc
*.pyd
__init__.py
__version__.py
calendar.py
clip_dnd.py
cmndlgs.py
controls.py
controls2.py
events.py
filesys.py
frames.py
gdi.py
glcanvas.py
grid.py
help.py
html.py
htmlhelp.py
image.py
mdi.py
misc.py
misc2.py
ogl.py
oglbasic.py
oglcanvas.py
oglshapes.py
oglshapes2.py
printfw.py
sizers.py
stattool.py
stc.py
stc_.py
streams.py
utils.py
windows.py
windows2.py
windows3.py
wx.py
xrc.py

View File

@@ -34,53 +34,99 @@ class wxColumnSorterMixin:
objects representing the values in each column. These values
are compared in the column sorter to determine sort order.
Interesting methods to override are GetColumnSorter,
GetSecondarySortValues, and GetSortImages. See below for details.
"""
def __init__(self, numColumns):
self._colSortFlag = [0] * numColumns
self._col = 0
self._colSortFlag[self._col] = 1
self._col = -1
list = self.GetListCtrl()
if not list:
raise ValueError, "No wxListCtrl available"
EVT_LIST_COL_CLICK(list, list.GetId(), self.OnColClick)
EVT_LIST_COL_CLICK(list, list.GetId(), self.__OnColClick)
def SortListItems(self, col=-1, ascending=1):
"""Sort the list on demand. Can also be used to set the sort column and order."""
oldCol = self._col
if col != -1:
self._col = col
self._colSortFlag[col] = ascending
self.GetListCtrl().SortItems(self.ColumnSorter)
def OnColClick(self, evt):
self._col = col = evt.m_col
self._colSortFlag[col] = not self._colSortFlag[col]
self.GetListCtrl().SortItems(self.ColumnSorter)
def ColumnSorter(self, key1, key2):
col = self._col
sortFlag = self._colSortFlag[col]
item1 = self.itemDataMap[key1][col]
item2 = self.itemDataMap[key2][col]
if item1 == item2: return 0
if sortFlag:
if item1 < item2: return -1
else: return 1
else:
if item1 > item2: return -1
else: return 1
self.GetListCtrl().SortItems(self.GetColumnSorter())
self.__updateImages(oldCol)
def GetColumnWidths(self):
"""
Returns a list of column widths. Can be used to help restore the current
view later.
"""
list = self.GetListCtrl()
rv = []
for x in range(len(self._colSortFlag)):
rv.append(list.GetColumnWidth(x))
return rv
def GetSortImages(self):
"""
Returns a tuple of image list indexesthe indexes in the image list for an image to be put on the column
header when sorting in descending order.
"""
return (-1, -1) # (decending, ascending) image IDs
def GetColumnSorter(self):
"""Returns a callable object to be used for comparing column values when sorting."""
return self.__ColumnSorter
def GetSecondarySortValues(self, col, key1, key2):
"""Returns a tuple of 2 values to use for secondary sort values when the
items in the selected column match equal. The default just returns the
item data values."""
return (key1, key2)
def __OnColClick(self, evt):
oldCol = self._col
self._col = col = evt.GetColumn()
self._colSortFlag[col] = not self._colSortFlag[col]
self.GetListCtrl().SortItems(self.GetColumnSorter())
self.__updateImages(oldCol)
evt.Skip()
def __ColumnSorter(self, key1, key2):
col = self._col
ascending = self._colSortFlag[col]
item1 = self.itemDataMap[key1][col]
item2 = self.itemDataMap[key2][col]
cmpVal = cmp(item1, item2)
# If the items are equal then pick something else to make the sort value unique
if cmpVal == 0:
cmpVal = apply(cmp, self.GetSecondarySortValues(col, key1, key2))
if ascending:
return cmpVal
else:
return -cmpVal
def __updateImages(self, oldCol):
sortImages = self.GetSortImages()
if self._col != -1 and sortImages[0] != -1:
img = sortImages[self._colSortFlag[self._col]]
list = self.GetListCtrl()
if oldCol != -1:
list.ClearColumnImage(oldCol)
list.SetColumnImage(self._col, img)
#----------------------------------------------------------------------------