Add/remove fit list columns dynamically as graph is switched
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user