wx.lib.mixins.listctrl: Patches from Toni Brkic:
* Bugfix for TextEditMixin when the view can't be scrolled * Enhancement for ListCtrlAutoWidthMixin, allowing it to manage the width of any column. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33131 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -176,12 +176,25 @@ class ListCtrlAutoWidthMixin:
|
||||
def __init__(self):
|
||||
""" Standard initialiser.
|
||||
"""
|
||||
self._lastColMinWidth = None
|
||||
|
||||
self._resizeColMinWidth = None
|
||||
self._resizeColStyle = "LAST"
|
||||
self._resizeCol = 0
|
||||
self.Bind(wx.EVT_SIZE, self._onResize)
|
||||
self.Bind(wx.EVT_LIST_COL_END_DRAG, self._onResize, self)
|
||||
|
||||
|
||||
def setResizeColumn(self, col):
|
||||
"""
|
||||
Specify which column that should be autosized. Pass either
|
||||
'LAST' or the column number. Default is 'LAST'.
|
||||
"""
|
||||
if col == "LAST":
|
||||
self._resizeColStyle = "LAST"
|
||||
else:
|
||||
self._resizeColStyle = "COL"
|
||||
self._resizeCol = col
|
||||
|
||||
|
||||
def resizeLastColumn(self, minWidth):
|
||||
""" Resize the last column appropriately.
|
||||
|
||||
@@ -196,8 +209,13 @@ class ListCtrlAutoWidthMixin:
|
||||
|
||||
'minWidth' is the preferred minimum width for the last column.
|
||||
"""
|
||||
self._lastColMinWidth = minWidth
|
||||
self.resizeCloumn(self, minWidth)
|
||||
|
||||
|
||||
def resizeColumn(self, minWidth):
|
||||
self._resizeColMinWidth = minWidth
|
||||
self._doResize()
|
||||
|
||||
|
||||
# =====================
|
||||
# == Private Methods ==
|
||||
@@ -231,8 +249,13 @@ class ListCtrlAutoWidthMixin:
|
||||
numCols = self.GetColumnCount()
|
||||
if numCols == 0: return # Nothing to resize.
|
||||
|
||||
if self._lastColMinWidth == None:
|
||||
self._lastColMinWidth = self.GetColumnWidth(numCols - 1)
|
||||
if(self._resizeColStyle == "LAST"):
|
||||
resizeCol = self.GetColumnCount()
|
||||
else:
|
||||
resizeCol = self._resizeCol
|
||||
|
||||
if self._resizeColMinWidth == None:
|
||||
self._resizeColMinWidth = self.GetColumnWidth(resizeCol - 1)
|
||||
|
||||
# We're showing the vertical scrollbar -> allow for scrollbar width
|
||||
# NOTE: on GTK, the scrollbar is included in the client size, but on
|
||||
@@ -244,21 +267,23 @@ class ListCtrlAutoWidthMixin:
|
||||
listWidth = listWidth - scrollWidth
|
||||
|
||||
totColWidth = 0 # Width of all columns except last one.
|
||||
for col in range(numCols-1):
|
||||
totColWidth = totColWidth + self.GetColumnWidth(col)
|
||||
for col in range(numCols):
|
||||
if col != (resizeCol-1):
|
||||
totColWidth = totColWidth + self.GetColumnWidth(col)
|
||||
|
||||
lastColWidth = self.GetColumnWidth(numCols - 1)
|
||||
resizeColWidth = self.GetColumnWidth(resizeCol - 1)
|
||||
|
||||
if totColWidth + self._lastColMinWidth > listWidth:
|
||||
if totColWidth + self._resizeColMinWidth > listWidth:
|
||||
# We haven't got the width to show the last column at its minimum
|
||||
# width -> set it to its minimum width and allow the horizontal
|
||||
# scrollbar to show.
|
||||
self.SetColumnWidth(numCols-1, self._lastColMinWidth)
|
||||
self.SetColumnWidth(resizeCol-1, self._resizeColMinWidth)
|
||||
return
|
||||
|
||||
# Resize the last column to take up the remaining available space.
|
||||
|
||||
self.SetColumnWidth(numCols-1, listWidth - totColWidth)
|
||||
self.SetColumnWidth(resizeCol-1, listWidth - totColWidth)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -394,7 +419,10 @@ class TextEditMixin:
|
||||
editor = wx.PreTextCtrl()
|
||||
|
||||
style =wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB|wx.TE_RICH2
|
||||
style |= {wx.LIST_FORMAT_LEFT: wx.TE_LEFT, wx.LIST_FORMAT_RIGHT: wx.TE_RIGHT, wx.LIST_FORMAT_CENTRE : wx.TE_CENTRE}[col_style]
|
||||
style |= {wx.LIST_FORMAT_LEFT: wx.TE_LEFT,
|
||||
wx.LIST_FORMAT_RIGHT: wx.TE_RIGHT,
|
||||
wx.LIST_FORMAT_CENTRE : wx.TE_CENTRE
|
||||
}[col_style]
|
||||
|
||||
editor.Create(self, -1, style=style)
|
||||
editor.SetBackgroundColour(wx.Colour(red=255,green=255,blue=175)) #Yellow
|
||||
@@ -493,7 +521,7 @@ class TextEditMixin:
|
||||
|
||||
scrolloffset = self.GetScrollPos(wx.HORIZONTAL)
|
||||
|
||||
# scroll foreward
|
||||
# scroll forward
|
||||
if x0+x1-scrolloffset > self.GetSize()[0]:
|
||||
if wx.Platform == "__WXMSW__":
|
||||
# don't start scrolling unless we really need to
|
||||
@@ -512,6 +540,9 @@ class TextEditMixin:
|
||||
# Since we can not programmatically scroll the ListCtrl
|
||||
# close the editor so the user can scroll and open the editor
|
||||
# again
|
||||
self.editor.SetValue(self.GetItem(row, col).GetText())
|
||||
self.curRow = row
|
||||
self.curCol = col
|
||||
self.CloseEditor()
|
||||
return
|
||||
|
||||
|
Reference in New Issue
Block a user