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:
@@ -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)
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user