Add option whether 0 value should be shown or not on graphs

This commit is contained in:
DarkPhoenix
2019-05-21 17:51:50 +03:00
parent 2adc150811
commit a09a2a5f4b

View File

@@ -141,15 +141,20 @@ class GraphFrame(wx.Frame):
self.mainSizer.Add(wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL), 0,
wx.EXPAND)
self.gridPanel = wx.Panel(self)
self.mainSizer.Add(self.gridPanel, 0, wx.EXPAND)
self.graphCtrlPanel = wx.Panel(self)
self.mainSizer.Add(self.graphCtrlPanel, 0, wx.EXPAND | wx.ALL, 5)
dummyBox = wx.BoxSizer(wx.VERTICAL)
self.gridPanel.SetSizer(dummyBox)
ctrlPanelSizer = wx.BoxSizer(wx.HORIZONTAL)
self.viewOptSizer = wx.BoxSizer(wx.VERTICAL)
ctrlPanelSizer.Add(self.viewOptSizer, 0, wx.EXPAND | wx.ALL, 0)
inputsVertSizer = wx.BoxSizer(wx.VERTICAL)
self.inputsSizer = wx.FlexGridSizer(0, 4, 0, 0)
self.inputsSizer.AddGrowableCol(1)
inputsVertSizer.Add(self.inputsSizer, 0, wx.EXPAND | wx.ALL, 0)
ctrlPanelSizer.Add(inputsVertSizer, 1, wx.EXPAND | wx.ALL, 0)
self.graphCtrlPanel.SetSizer(ctrlPanelSizer)
self.gridSizer = wx.FlexGridSizer(0, 4, 0, 0)
self.gridSizer.AddGrowableCol(1)
dummyBox.Add(self.gridSizer, 0, wx.EXPAND | wx.ALL, 5)
self.showY0 = True
for view in Graph.views:
view = view()
@@ -157,7 +162,7 @@ class GraphFrame(wx.Frame):
self.graphSelection.SetSelection(0)
self.fields = {}
self.select(0)
self.updateGraphWidgets()
self.sl1 = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL)
self.mainSizer.Add(self.sl1, 0, wx.EXPAND)
self.mainSizer.Add(self.fitList, 0, wx.EXPAND)
@@ -230,7 +235,7 @@ class GraphFrame(wx.Frame):
self.removeFits([fit])
def graphChanged(self, event):
self.select(self.graphSelection.GetSelection())
self.updateGraphWidgets()
event.Skip()
def closeWindow(self):
@@ -251,20 +256,33 @@ class GraphFrame(wx.Frame):
return values
def select(self, index):
def OnShowY0Update(self, event):
self.showY0 = self.showY0Cb.GetValue()
self.draw()
def updateGraphWidgets(self):
view = self.getView()
view.clearCache()
sizer = self.gridSizer
sizer.Clear()
self.gridPanel.DestroyChildren()
viewSizer = self.viewOptSizer
viewSizer.Clear()
inputSizer = self.inputsSizer
inputSizer.Clear()
self.graphCtrlPanel.DestroyChildren()
self.fields.clear()
# Setup textboxes
# 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, 5)
# Setup inputs
for fieldHandle, fieldDef in (('x', view.xDef), *view.extraInputs.items()):
textBox = wx.TextCtrl(self.gridPanel, wx.ID_ANY, style=0)
textBox = wx.TextCtrl(self.graphCtrlPanel, wx.ID_ANY, style=0)
self.fields[fieldHandle] = textBox
textBox.Bind(wx.EVT_TEXT, self.onFieldChanged)
sizer.Add(textBox, 1, wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.ALL, 3)
inputSizer.Add(textBox, 1, wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.ALL, 3)
if fieldDef.inputDefault is not None:
inputDefault = fieldDef.inputDefault
if not isinstance(inputDefault, str):
@@ -278,14 +296,14 @@ class GraphFrame(wx.Frame):
if fieldDef.inputIconID:
icon = BitmapLoader.getBitmap(fieldDef.inputIconID, "icons")
if icon is not None:
static = wx.StaticBitmap(self.gridPanel)
static = wx.StaticBitmap(self.graphCtrlPanel)
static.SetBitmap(icon)
imgLabelSizer.Add(static, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 1)
imgLabelSizer.Add(wx.StaticText(self.gridPanel, wx.ID_ANY, fieldDef.inputLabel), 0,
imgLabelSizer.Add(wx.StaticText(self.graphCtrlPanel, wx.ID_ANY, fieldDef.inputLabel), 0,
wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 3)
sizer.Add(imgLabelSizer, 0, wx.ALIGN_CENTER_VERTICAL)
sizer.Layout()
inputSizer.Add(imgLabelSizer, 0, wx.ALIGN_CENTER_VERTICAL)
inputSizer.Layout()
self.draw()
def draw(self, event=None):
@@ -306,8 +324,8 @@ class GraphFrame(wx.Frame):
self.subplot.grid(True)
legend = []
min_y = 0
max_y = 0
min_y = 0 if self.showY0 else None
max_y = 0 if self.showY0 else None
xRange = values['x']
extraInputs = {ih: values[ih] for ih in view.extraInputs}
@@ -322,8 +340,17 @@ class GraphFrame(wx.Frame):
try:
xs, ys = view.getPlotPoints(fit, extraInputs, xRange, 100, chosenY)
min_y = min(min_y, min(ys, default=0))
max_y = max(max_y, max(ys, default=0))
# Figure out min and max Y
min_y_this = min(ys, default=None)
if min_y is None:
min_y = min_y_this
elif min_y_this is not None:
min_y = min(min_y, min_y_this)
max_y_this = max(ys, default=None)
if max_y is None:
max_y = max_y_this
elif max_y_this is not None:
max_y = max(max_y, max_y_this)
self.subplot.plot(xs, ys)
legend.append('{} ({})'.format(fit.name, fit.ship.item.getShortName()))