diff --git a/gui/display.py b/gui/display.py index cd778d9fa..eab22113d 100644 --- a/gui/display.py +++ b/gui/display.py @@ -41,37 +41,10 @@ class Display(wx.ListCtrl): self.mainFrame = gui.mainFrame.MainFrame.getInstance() for i, colName in enumerate(self.DEFAULT_COLS): - self.addColumnByName(i, colName) - - info = wx.ListItem() - # noinspection PyPropertyAccess - info.m_mask = wx.LIST_MASK_WIDTH - self.InsertColumn(len(self.DEFAULT_COLS), info) - self.SetColumnWidth(len(self.DEFAULT_COLS), 0) + self.insertColumnBySpec(i, colName) self.imageListBase = self.imageList.ImageCount - def addColumnByName(self, i, colName): - if ":" in colName: - colName, params = colName.split(":", 1) - params = params.split(",") - colClass = ViewColumn.getColumn(colName) - paramList = colClass.getParameters() - paramDict = {} - for x, param in enumerate(paramList): - name, type, defaultValue = param - value = params[x] if len(params) > x else defaultValue - value = value if value != "" else defaultValue - if type == bool and isinstance(value, str): - value = bool(value) if value.lower() != "false" and value != "0" else False - paramDict[name] = value - col = colClass(self, paramDict) - else: - col = ViewColumn.getColumn(colName)(self, None) - - self.addColumn(i, col) - self.columnsMinWidth.append(self.GetColumnWidth(i)) - # Override native HitTestSubItem (doesn't work as it should on GTK) # Source: ObjectListView @@ -127,6 +100,36 @@ class Display(wx.ListCtrl): col.size += 4 self.SetColumnWidth(i, col.size) + def appendColumnBySpec(self, colSpec): + self.insertColumnBySpec(len(self.activeColumns), colSpec) + + def insertColumnBySpec(self, i, colSpec): + if ":" in colSpec: + colSpec, params = colSpec.split(":", 1) + params = params.split(",") + colClass = ViewColumn.getColumn(colSpec) + paramList = colClass.getParameters() + paramDict = {} + for x, param in enumerate(paramList): + name, type, defaultValue = param + value = params[x] if len(params) > x else defaultValue + value = value if value != "" else defaultValue + if type == bool and isinstance(value, str): + value = bool(value) if value.lower() != "false" and value != "0" else False + paramDict[name] = value + col = colClass(self, paramDict) + else: + col = ViewColumn.getColumn(colSpec)(self, None) + + self.addColumn(i, col) + self.columnsMinWidth.append(self.GetColumnWidth(i)) + + def removeColumn(self, col): + i = self.getColIndex(type(col)) + del self.activeColumns[i] + del self.columnsMinWidth[i] + self.DeleteColumn(i) + def getColIndex(self, colClass): for i, col in enumerate(self.activeColumns): if col.__class__ == colClass: @@ -244,7 +247,6 @@ class Display(wx.ListCtrl): self.SetItemData(item, id_) - # self.Freeze() if 'wxMSW' in wx.PlatformInfo: for i, col in enumerate(self.activeColumns): if not col.resized: @@ -261,7 +263,6 @@ class Display(wx.ListCtrl): self.SetColumnWidth(i, headerWidth) else: self.SetColumnWidth(i, col.size) - # self.Thaw() def update(self, stuff): self.populate(stuff) diff --git a/gui/graphFrame/lists.py b/gui/graphFrame/lists.py index 3fbbd08c2..9f351b81e 100644 --- a/gui/graphFrame/lists.py +++ b/gui/graphFrame/lists.py @@ -88,6 +88,22 @@ class BaseList(gui.display.Display): if fit is not None: self.removeFits([fit]) + def refreshExtraColumns(self, extraColSpecs): + baseColNames = set() + for baseColName in self.DEFAULT_COLS: + if ":" in baseColName: + baseColName = baseColName.split(":", 1)[0] + baseColNames.add(baseColName) + columnsToRemove = set() + for col in self.activeColumns: + if col.name not in baseColNames: + columnsToRemove.add(col) + for col in columnsToRemove: + self.removeColumn(col) + for colSpec in extraColSpecs: + self.appendColumnBySpec(colSpec) + self.refresh(self.fits) + def OnFitRenamed(self, event): event.Skip() self.update(self.fits) diff --git a/gui/graphFrame/panel.py b/gui/graphFrame/panel.py index 8a82c6280..d5afd2d64 100644 --- a/gui/graphFrame/panel.py +++ b/gui/graphFrame/panel.py @@ -154,7 +154,9 @@ class GraphControlPanel(wx.Panel): self.tgtVector.Show(False) self.tgtVectorLabel.Show(False) - # Target list + # Source and target list + self.fitList.refreshExtraColumns(view.srcExtraCols) + self.targetList.refreshExtraColumns(view.tgtExtraCols) self.targetList.Show(view.hasTargets) # Inputs