+ We remember the current size of the last column, before resizing,
+ as the preferred minimum width if we haven't previously been given
+ or calculated a minimum width. This ensure that repeated calls to
+ _doResize() don't cause the last column to size itself too large.
+ """
+ numCols = self.GetColumnCount()
+ if numCols == 0: return # Nothing to resize.
+
+ 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
+ scrollWidth = wxSystemSettings_GetSystemMetric(wxSYS_VSCROLL_X)
+ listWidth = listWidth - scrollWidth
+
+ totColWidth = 0 # Width of all columns except last one.
+ for col in range(numCols-1):
+ totColWidth = totColWidth + self.GetColumnWidth(col)
+
+ lastColWidth = self.GetColumnWidth(numCols - 1)
+
+ margin = 6 # 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 totColWidth + self._lastColMinWidth > listWidth - margin:
+ # 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)
+ return
+
+ # Resize the last column to take up the remaining available space.
+
+ self.SetColumnWidth(numCols-1, listWidth - totColWidth - margin)
+
+
+
+#----------------------------------------------------------------------------