From 072681b9396097f286768494c8dd05ed62067b6e Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 2 Nov 2010 18:23:01 +0200 Subject: [PATCH] Allow column resize in fitting view. If a column gets resized it will maintain its width when doing a refresh. --- gui/builtinViewColumns/activityCheckbox.py | 1 + gui/builtinViewColumns/moduleAmmoIcon.py | 1 + gui/display.py | 47 ++++++++++++++-------- gui/viewColumn.py | 1 + 4 files changed, 34 insertions(+), 16 deletions(-) diff --git a/gui/builtinViewColumns/activityCheckbox.py b/gui/builtinViewColumns/activityCheckbox.py index 0de50b94e..4a790b7e7 100644 --- a/gui/builtinViewColumns/activityCheckbox.py +++ b/gui/builtinViewColumns/activityCheckbox.py @@ -28,6 +28,7 @@ class ActivityCheckbox(ViewColumn): ViewColumn.__init__(self, fittingView) self.resizable = False self.size = 24 + self.maxsize = self.size self.mask = wx.LIST_MASK_WIDTH for name, state in (("checked", wx.CONTROL_CHECKED), ("unchecked", 0)): bitmap = wx.EmptyBitmap(16, 16) diff --git a/gui/builtinViewColumns/moduleAmmoIcon.py b/gui/builtinViewColumns/moduleAmmoIcon.py index 0c36dca4a..18ec5431d 100644 --- a/gui/builtinViewColumns/moduleAmmoIcon.py +++ b/gui/builtinViewColumns/moduleAmmoIcon.py @@ -27,6 +27,7 @@ class ModuleAmmoIcon(ViewColumn): def __init__(self, fittingView, params): ViewColumn.__init__(self, fittingView) self.size = 16 + self.maxsize = self.size self.mask = wx.LIST_MASK_IMAGE self.columnText = "" diff --git a/gui/display.py b/gui/display.py index c9b37d54d..ca06838b5 100644 --- a/gui/display.py +++ b/gui/display.py @@ -29,7 +29,9 @@ class Display(wx.ListCtrl): self.imageList = wx.ImageList(16, 16) self.SetImageList(self.imageList, wx.IMAGE_LIST_SMALL) self.activeColumns = [] - self.Bind(wx.EVT_LIST_COL_BEGIN_DRAG, self.resizeChecker) + self.columnsMinWidth = [] + self.Bind(wx.EVT_LIST_COL_END_DRAG, self.resizeChecker) + self.Bind(wx.EVT_LIST_COL_BEGIN_DRAG, self.resizeSkip) self.mainFrame = gui.mainFrame.MainFrame.getInstance() @@ -45,6 +47,7 @@ class Display(wx.ListCtrl): col = ViewColumn.getColumn(colName)(self, None) self.addColumn(i, col) + self.columnsMinWidth.append(self.GetColumnWidth(i)) i += 1 info = wx.ListItem() @@ -76,13 +79,23 @@ class Display(wx.ListCtrl): def resizeChecker(self, event): # we veto header cell resize by default till we find a way # to assure a minimal size for the resized header cell + column = event.GetColumn() + wx.CallAfter(self.checkColumnSize,column) + event.Skip() - event.Veto() + def resizeSkip(self, event): + column = event.GetColumn() + colItem = self.activeColumns[column] + if self.activeColumns[column].maxsize != -1: + event.Veto() + else: + event.Skip() -# if self.activeColumns[event.Column].resizable is False: -# event.Veto() -# else: -# self.activeColumns[event.Column].resized = True + def checkColumnSize(self,column): + colItem = self.activeColumns[column] + if self.GetColumnWidth(column) < self.columnsMinWidth[column]: + self.SetColumnWidth(column,self.columnsMinWidth[column]) + colItem.resized = True def clearItemImages(self): for i in xrange(self.imageList.ImageCount - 1, self.imageListBase, -1): @@ -144,18 +157,20 @@ class Display(wx.ListCtrl): self.Freeze() if 'wxMSW' in wx.PlatformInfo: for i,col in enumerate(self.activeColumns): - self.SetColumnWidth(i, col.size) + if not col.resized: + self.SetColumnWidth(i, col.size) else: for i, col in enumerate(self.activeColumns): - if col.size == wx.LIST_AUTOSIZE_USEHEADER: - self.SetColumnWidth(i, wx.LIST_AUTOSIZE_USEHEADER) - headerWidth = self.GetColumnWidth(i) - self.SetColumnWidth(i, wx.LIST_AUTOSIZE) - baseWidth = self.GetColumnWidth(i) - if baseWidth < headerWidth: - self.SetColumnWidth(i, headerWidth) - else: - self.SetColumnWidth(i, col.size) + if not col.resized: + if col.size == wx.LIST_AUTOSIZE_USEHEADER: + self.SetColumnWidth(i, wx.LIST_AUTOSIZE_USEHEADER) + headerWidth = self.GetColumnWidth(i) + self.SetColumnWidth(i, wx.LIST_AUTOSIZE) + baseWidth = self.GetColumnWidth(i) + if baseWidth < headerWidth: + self.SetColumnWidth(i, headerWidth) + else: + self.SetColumnWidth(i, col.size) self.Thaw() for sel in selection: diff --git a/gui/viewColumn.py b/gui/viewColumn.py index 4a1566d51..5f704c448 100644 --- a/gui/viewColumn.py +++ b/gui/viewColumn.py @@ -32,6 +32,7 @@ class ViewColumn(object): self.imageId = -1 self.size = wx.LIST_AUTOSIZE_USEHEADER self.mask = 0 + self.maxsize = -1 @classmethod