Add/remove fit list columns dynamically as graph is switched

This commit is contained in:
DarkPhoenix
2019-07-07 17:00:42 +03:00
parent 1cd10d2109
commit efd8a6964e
3 changed files with 50 additions and 31 deletions

View File

@@ -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)

View File

@@ -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)

View File

@@ -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