diff --git a/gui/builtinGraphs/fitDamageStats.py b/gui/builtinGraphs/fitDamageStats.py index 14bd2e663..1baef53cd 100644 --- a/gui/builtinGraphs/fitDamageStats.py +++ b/gui/builtinGraphs/fitDamageStats.py @@ -53,7 +53,7 @@ class FitDamageStatsGraph(Graph): Input(handle='time', unit='s', label='Time', iconID=1392, defaultValue=None, defaultRange=(0, 80), mainOnly=False), Input(handle='distance', unit='km', label='Distance', iconID=1391, defaultValue=50, defaultRange=(0, 100), mainOnly=False), Input(handle='tgtSpeed', unit='%', label='Target speed', iconID=1389, defaultValue=100, defaultRange=(0, 100), mainOnly=False), - Input(handle='tgtSigRad', unit='%', label='Target signature radius', iconID=1390, defaultValue=100, defaultRange=(100, 200), mainOnly=True)] + Input(handle='tgtSigRad', unit='%', label='Target signature', iconID=1390, defaultValue=100, defaultRange=(100, 200), mainOnly=True)] @property def srcVectorDef(self): diff --git a/gui/graphFrame/frame.py b/gui/graphFrame/frame.py index e23242d80..3b2d4a704 100644 --- a/gui/graphFrame/frame.py +++ b/gui/graphFrame/frame.py @@ -158,7 +158,7 @@ class GraphFrame(wx.Frame): event.Skip() def closeWindow(self): - from gui.builtinStatsViews.resistancesViewFull import EFFECTIVE_HP_TOGGLED # Grr gons + from gui.builtinStatsViews.resistancesViewFull import EFFECTIVE_HP_TOGGLED self.mainFrame.Unbind(GE.FIT_CHANGED, handler=self.OnFitChanged) self.mainFrame.Unbind(EFFECTIVE_HP_TOGGLED, handler=self.OnEhpToggled) self.ctrlPanel.unbindExternalEvents() diff --git a/gui/graphFrame/panel.py b/gui/graphFrame/panel.py index eac852ca8..339378ce6 100644 --- a/gui/graphFrame/panel.py +++ b/gui/graphFrame/panel.py @@ -32,6 +32,7 @@ class GraphControlPanel(wx.Panel): def __init__(self, graphFrame, parent): super().__init__(parent) self.graphFrame = graphFrame + self.inputs = {} mainSizer = wx.BoxSizer(wx.VERTICAL) optsSizer = wx.BoxSizer(wx.HORIZONTAL) @@ -41,6 +42,7 @@ class GraphControlPanel(wx.Panel): yText = wx.StaticText(self, wx.ID_ANY, 'Axis Y:') ySubSelectionSizer.Add(yText, 0, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, 5) self.ySubSelection = wx.Choice(self, wx.ID_ANY) + self.ySubSelection.Bind(wx.EVT_CHOICE, self.OnYTypeUpdate) ySubSelectionSizer.Add(self.ySubSelection, 1, wx.EXPAND | wx.ALL, 0) commonOptsSizer.Add(ySubSelectionSizer, 0, wx.EXPAND | wx.ALL, 0) @@ -48,6 +50,7 @@ class GraphControlPanel(wx.Panel): xText = wx.StaticText(self, wx.ID_ANY, 'Axis X:') xSubSelectionSizer.Add(xText, 0, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, 5) self.xSubSelection = wx.Choice(self, wx.ID_ANY) + self.xSubSelection.Bind(wx.EVT_CHOICE, self.OnXTypeUpdate) xSubSelectionSizer.Add(self.xSubSelection, 1, wx.EXPAND | wx.ALL, 0) commonOptsSizer.Add(xSubSelectionSizer, 0, wx.EXPAND | wx.TOP, 5) @@ -89,42 +92,22 @@ class GraphControlPanel(wx.Panel): srcTgtSizer.Add(self.targetList, 1, wx.EXPAND | wx.LEFT, 10) mainSizer.Add(srcTgtSizer, 1, wx.EXPAND | wx.LEFT | wx.BOTTOM | wx.RIGHT, 10) - self.indestructible = { - self.showY0Cb, yText, self.ySubSelection, self.xSubSelection, xText, - self.srcVectorLabel, self.srcVector, self.tgtVectorLabel, self.tgtVector, - self.fitList, self.targetList} - self.SetSizer(mainSizer) self.drawTimer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.OnDrawTimer, self.drawTimer) - def getValues(self): - values = {} - return values - - @property - def showY0(self): - return self.showY0Cb.GetValue() - def updateControls(self): view = self.graphFrame.getView() - self.inputsSizer.Clear() - for child in self.Children: - if child not in self.indestructible: - child.Destroy() self.ySubSelection.Clear() self.xSubSelection.Clear() - for yDef in view.yDefs: - self.ySubSelection.Append(self._formatLabel(yDef), yDef.handle) + self.ySubSelection.Append(self._formatLabel(yDef), (yDef.handle, yDef.unit)) self.ySubSelection.SetSelection(0) for xDef in view.xDefs: - self.xSubSelection.Append(self._formatLabel(xDef), xDef.handle) + self.xSubSelection.Append(self._formatLabel(xDef), (xDef.handle, xDef.unit)) self.xSubSelection.SetSelection(0) - self.updateInputs() - # Vectors if view.srcVectorDef is not None: self.srcVectorLabel.SetLabel(view.srcVectorDef.label) @@ -144,9 +127,19 @@ class GraphControlPanel(wx.Panel): # Target list self.targetList.Show(view.hasTargets) + self.updateInputs() self.Layout() def updateInputs(self): + # Clean up old inputs + for children in self.inputs.values(): + for child in children: + if child is not None: + child.Destroy() + self.inputsSizer.Clear() + self.inputs.clear() + + # Set up inputs from scratch view = self.graphFrame.getView() shownHandles = set() srcVectorDef = view.srcVectorDef @@ -157,8 +150,9 @@ class GraphControlPanel(wx.Panel): if tgtVectorDef is not None: shownHandles.add(tgtVectorDef.lengthHandle) shownHandles.add(tgtVectorDef.angleHandle) - for inputDef in (view.inputMap[view.xDefs[0].mainInput], *(i for i in view.inputs)): - if (inputDef.handle, inputDef.unit) != view.xDefs[0].mainInput and inputDef.mainOnly: + selectedX = view.xDefMap[self.xType] + for inputDef in (view.inputMap[selectedX.mainInput], *(i for i in view.inputs)): + if (inputDef.handle, inputDef.unit) != selectedX.mainInput and inputDef.mainOnly: continue if inputDef.handle in shownHandles: continue @@ -175,6 +169,7 @@ class GraphControlPanel(wx.Panel): inputDefault += '0' fieldTextBox.ChangeValue(inputDefault) fieldSizer.Add(fieldTextBox, 0, wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, 5) + fieldIcon = None if inputDef.iconID is not None: icon = BitmapLoader.getBitmap(inputDef.iconID, 'icons') if icon is not None: @@ -183,6 +178,7 @@ class GraphControlPanel(wx.Panel): fieldSizer.Add(fieldIcon, 0, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, 3) fieldLabel = wx.StaticText(self, wx.ID_ANY, self._formatLabel(inputDef)) fieldSizer.Add(fieldLabel, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 0) + self.inputs[(inputDef.handle, inputDef.unit)] = (fieldTextBox, fieldIcon, fieldLabel) self.inputsSizer.Add(fieldSizer, 0, wx.EXPAND | wx.BOTTOM, 5) def OnShowY0Change(self, event): @@ -191,8 +187,12 @@ class GraphControlPanel(wx.Panel): def OnYTypeUpdate(self, event): event.Skip() - obj = event.GetEventObject() - formatName = obj.GetLabel() + self.graphFrame.draw() + + def OnXTypeUpdate(self, event): + event.Skip() + self.updateInputs() + self.Layout() self.graphFrame.draw() def OnFieldChanged(self, event): @@ -205,6 +205,22 @@ class GraphControlPanel(wx.Panel): self.graphFrame.clearCache() self.graphFrame.draw() + def getValues(self): + values = {} + return values + + @property + def showY0(self): + return self.showY0Cb.GetValue() + + @property + def yType(self): + return self.ySubSelection.GetClientData(self.ySubSelection.GetSelection()) + + @property + def xType(self): + return self.xSubSelection.GetClientData(self.xSubSelection.GetSelection()) + def unbindExternalEvents(self): self.fitList.unbindExternalEvents()