Do not recreate checkbox on each graphical switch

Leads to weird graphical glitches on GTK
This commit is contained in:
DarkPhoenix
2019-05-21 22:09:08 +03:00
parent 527c66dca4
commit 2964f3b009

View File

@@ -144,8 +144,18 @@ class GraphFrame(wx.Frame):
self.graphCtrlPanel = wx.Panel(self)
self.mainSizer.Add(self.graphCtrlPanel, 0, wx.EXPAND | wx.ALL, 5)
self.showY0 = True
self.selectedY = None
self.selectedYRbMap = {}
ctrlPanelSizer = wx.BoxSizer(wx.HORIZONTAL)
self.viewOptSizer = wx.BoxSizer(wx.VERTICAL)
self.showY0Cb = wx.CheckBox(self.graphCtrlPanel, wx.ID_ANY, "Always show Y = 0", wx.DefaultPosition, wx.DefaultSize, 0)
self.showY0Cb.SetValue(self.showY0)
self.showY0Cb.Bind(wx.EVT_CHECKBOX, self.OnShowY0Update)
self.viewOptSizer.Add(self.showY0Cb, 0, wx.LEFT | wx.TOP | wx.RIGHT | wx.EXPAND, 5)
self.graphSubselSizer = wx.BoxSizer(wx.VERTICAL)
self.viewOptSizer.Add(self.graphSubselSizer, 0, wx.ALL | wx.EXPAND, 5)
ctrlPanelSizer.Add(self.viewOptSizer, 0, wx.EXPAND | wx.ALL, 0)
inputsVertSizer = wx.BoxSizer(wx.VERTICAL)
self.inputsSizer = wx.FlexGridSizer(0, 4, 0, 0)
@@ -154,10 +164,6 @@ class GraphFrame(wx.Frame):
ctrlPanelSizer.Add(inputsVertSizer, 1, wx.EXPAND | wx.ALL, 0)
self.graphCtrlPanel.SetSizer(ctrlPanelSizer)
self.showY0 = True
self.selectedY = None
self.selectedYRbMap = {}
for view in Graph.views:
view = view()
self.graphSelection.Append(view.name, view)
@@ -274,18 +280,16 @@ class GraphFrame(wx.Frame):
def updateGraphWidgets(self):
view = self.getView()
view.clearCache()
viewSizer = self.viewOptSizer
viewSizer.Clear()
graphSubselSizer = self.graphSubselSizer
graphSubselSizer.Clear()
inputSizer = self.inputsSizer
inputSizer.Clear()
self.graphCtrlPanel.DestroyChildren()
for child in self.graphCtrlPanel.Children:
if child is not self.showY0Cb:
child.Destroy()
self.fields.clear()
# Setup view options
self.showY0Cb = wx.CheckBox(self.graphCtrlPanel, wx.ID_ANY, "Always show Y = 0", wx.DefaultPosition, wx.DefaultSize, 0)
self.showY0Cb.SetValue(self.showY0)
self.showY0Cb.Bind(wx.EVT_CHECKBOX, self.OnShowY0Update)
viewSizer.Add(self.showY0Cb, 0, wx.ALL | wx.EXPAND, 0)
self.selectedYRbMap.clear()
if len(view.yDefs) > 1:
i = 0
@@ -297,10 +301,10 @@ class GraphFrame(wx.Frame):
rdo.Bind(wx.EVT_RADIOBUTTON, self.OnYTypeUpdate)
if i == (self.selectedY or 0):
rdo.SetValue(True)
viewSizer.Add(rdo, 0, wx.ALL | wx.EXPAND, 0)
graphSubselSizer.Add(rdo, 0, wx.ALL | wx.EXPAND, 0)
self.selectedYRbMap[yDef.switchLabel] = i
i += 1
viewSizer.Layout()
self.viewOptSizer.Layout()
# Setup inputs
for fieldHandle, fieldDef in (('x', view.xDef), *view.extraInputs.items()):
@@ -388,6 +392,9 @@ class GraphFrame(wx.Frame):
y_range = max_y - min_y
min_y -= y_range * 0.05
max_y += y_range * 0.05
if min_y == max_y:
min_y -= min_y * 0.05
max_y += min_y * 0.05
if min_y == max_y:
min_y -= 5
max_y += 5