From 2964f3b0098666b5cb254156f54a802e987b54b2 Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Tue, 21 May 2019 22:09:08 +0300 Subject: [PATCH] Do not recreate checkbox on each graphical switch Leads to weird graphical glitches on GTK --- gui/graphFrame.py | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/gui/graphFrame.py b/gui/graphFrame.py index e71d02b93..821eae43a 100644 --- a/gui/graphFrame.py +++ b/gui/graphFrame.py @@ -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