A patch for wxListCtrlAutoWidthMixin from anthony@computronix.com

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@17256 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2002-09-18 20:35:36 +00:00
parent 02b2d73690
commit 1176111c0d

View File

@@ -149,12 +149,10 @@ class wxListCtrlAutoWidthMixin:
def __init__(self):
""" Standard initialiser.
"""
self._needResize = false
self._lastColMinWidth = None
EVT_SIZE(self, self._onResize)
EVT_LIST_COL_END_DRAG(self, self.GetId(), self._onEndColDrag)
EVT_IDLE(self, self._onIdle)
EVT_LIST_COL_END_DRAG(self, self.GetId(), self._onResize)
def resizeLastColumn(self, minWidth):
@@ -183,29 +181,7 @@ class wxListCtrlAutoWidthMixin:
We automatically resize the last column in the list.
"""
self._doResize()
event.Skip()
def _onEndColDrag(self, event):
""" Respond to the user resizing one of our columns.
We resize the last column in the list to match. Note that, because
of a quirk in the way columns are resized under MS Windows, we
actually have to do the column resize in idle time.
"""
self._needResize = true
event.Skip()
def _onIdle(self, event):
""" Respond to an idle event.
We resize the last column, if we've been asked to do so.
"""
if self._needResize:
self._doResize()
self.Refresh() # Fixes redraw problem under MS Windows.
self._needResize = false
wxCallAfter(self._doResize)
event.Skip()
@@ -227,9 +203,12 @@ class wxListCtrlAutoWidthMixin:
if self._lastColMinWidth == None:
self._lastColMinWidth = self.GetColumnWidth(numCols - 1)
listWidth = self.GetSize().width
if self.GetItemCount() > self.GetCountPerPage():
# We're showing the vertical scrollbar -> allow for scrollbar width
# NOTE: on GTK, the scrollbar is included in the client size, but on
# Windows it is not included
listWidth = self.GetClientSize().width
if wxPlatform != '__WXMSW__':
if self.GetItemCount() > self.GetCountPerPage():
scrollWidth = wxSystemSettings_GetSystemMetric(wxSYS_VSCROLL_X)
listWidth = listWidth - scrollWidth
@@ -239,21 +218,7 @@ class wxListCtrlAutoWidthMixin:
lastColWidth = self.GetColumnWidth(numCols - 1)
# NOTE: This is the extra number of pixels required to make the
# wxListCtrl size correctly, at least under Windows 2000.
# Unfortunately, different OSs and even different versions of the
# same OS may implement the wxListCtrl differently, so different
# margins may be needed to get the columns resized correctly. No
# doubt the margin could be calculated in a more intelligent
# manner...
if wxPlatform == '__WXMSW__':
margin = 6
elif wxPlatform == '__WXGTK__':
margin = 8
else:
margin = 0
if totColWidth + self._lastColMinWidth > listWidth - margin:
if totColWidth + self._lastColMinWidth > 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.
@@ -262,7 +227,7 @@ class wxListCtrlAutoWidthMixin:
# Resize the last column to take up the remaining available space.
self.SetColumnWidth(numCols-1, listWidth - totColWidth - margin)
self.SetColumnWidth(numCols-1, listWidth - totColWidth)