More code to control panel
This commit is contained in:
@@ -31,6 +31,7 @@ import gui.mainFrame
|
||||
from gui.bitmap_loader import BitmapLoader
|
||||
from gui.builtinGraphs.base import Graph
|
||||
from service.fit import Fit
|
||||
from .events import REFRESH_GRAPH
|
||||
from .panel import GraphControlPanel
|
||||
|
||||
|
||||
@@ -108,17 +109,11 @@ class GraphFrame(wx.Frame):
|
||||
self.ctrlPanel = GraphControlPanel(self, self)
|
||||
mainSizer.Add(self.ctrlPanel, 0, wx.EXPAND | wx.ALL, 0)
|
||||
|
||||
|
||||
|
||||
self.drawTimer = wx.Timer(self)
|
||||
self.Bind(wx.EVT_TIMER, self.draw, self.drawTimer)
|
||||
|
||||
for view in Graph.views:
|
||||
view = view()
|
||||
self.graphSelection.Append(view.name, view)
|
||||
|
||||
self.graphSelection.SetSelection(0)
|
||||
self.fields = {}
|
||||
self.updateGraphWidgets()
|
||||
self.sl1 = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL)
|
||||
mainSizer.Add(self.sl1, 0, wx.EXPAND)
|
||||
@@ -126,6 +121,7 @@ class GraphFrame(wx.Frame):
|
||||
|
||||
self.ctrlPanel.fitList.fitList.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDClick)
|
||||
self.ctrlPanel.fitList.fitList.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)
|
||||
self.Bind(REFRESH_GRAPH, self.OnRefreshGraph)
|
||||
self.ctrlPanel.showY0Cb.Bind(wx.EVT_CHECKBOX, self.OnNonDestructiveControlsUpdate)
|
||||
self.mainFrame.Bind(GE.FIT_CHANGED, self.OnFitChanged)
|
||||
self.mainFrame.Bind(GE.FIT_REMOVED, self.OnFitRemoved)
|
||||
@@ -211,7 +207,7 @@ class GraphFrame(wx.Frame):
|
||||
|
||||
def getValues(self):
|
||||
values = {}
|
||||
for fieldHandle, field in self.fields.items():
|
||||
for fieldHandle, field in self.ctrlPanel.fields.items():
|
||||
values[fieldHandle] = field.GetValue()
|
||||
|
||||
return values
|
||||
@@ -220,71 +216,14 @@ class GraphFrame(wx.Frame):
|
||||
event.Skip()
|
||||
self.draw()
|
||||
|
||||
def OnYTypeUpdate(self, event):
|
||||
event.Skip()
|
||||
obj = event.GetEventObject()
|
||||
formatName = obj.GetLabel()
|
||||
self.ctrlPanel.selectedY = self.ctrlPanel.selectedYRbMap[formatName]
|
||||
def OnRefreshGraph(self, event):
|
||||
self.draw()
|
||||
|
||||
def updateGraphWidgets(self):
|
||||
view = self.getView()
|
||||
view.clearCache()
|
||||
self.ctrlPanel.graphSubselSizer.Clear()
|
||||
self.ctrlPanel.inputsSizer.Clear()
|
||||
for child in self.ctrlPanel.Children:
|
||||
if child not in (self.ctrlPanel.showY0Cb, self.ctrlPanel.fitList, self.ctrlPanel.targetList):
|
||||
child.Destroy()
|
||||
self.fields.clear()
|
||||
|
||||
# Setup view options
|
||||
self.ctrlPanel.selectedYRbMap.clear()
|
||||
if len(view.yDefs) > 1:
|
||||
i = 0
|
||||
for yAlias, yDef in view.yDefs.items():
|
||||
if i == 0:
|
||||
rdo = wx.RadioButton(self.ctrlPanel, wx.ID_ANY, yDef.switchLabel, style=wx.RB_GROUP)
|
||||
else:
|
||||
rdo = wx.RadioButton(self.ctrlPanel, wx.ID_ANY, yDef.switchLabel)
|
||||
rdo.Bind(wx.EVT_RADIOBUTTON, self.OnYTypeUpdate)
|
||||
if i == (self.ctrlPanel.selectedY or 0):
|
||||
rdo.SetValue(True)
|
||||
self.ctrlPanel.graphSubselSizer.Add(rdo, 0, wx.ALL | wx.EXPAND, 0)
|
||||
self.ctrlPanel.selectedYRbMap[yDef.switchLabel] = i
|
||||
i += 1
|
||||
|
||||
# Setup inputs
|
||||
for fieldHandle, fieldDef in (('x', view.xDef), *view.extraInputs.items()):
|
||||
textBox = wx.TextCtrl(self.ctrlPanel, wx.ID_ANY, style=0)
|
||||
self.fields[fieldHandle] = textBox
|
||||
textBox.Bind(wx.EVT_TEXT, self.onFieldChanged)
|
||||
self.ctrlPanel.inputsSizer.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):
|
||||
inputDefault = ('%f' % inputDefault).rstrip('0')
|
||||
if inputDefault[-1:] == '.':
|
||||
inputDefault += '0'
|
||||
|
||||
textBox.ChangeValue(inputDefault)
|
||||
|
||||
imgLabelSizer = wx.BoxSizer(wx.HORIZONTAL)
|
||||
if fieldDef.inputIconID:
|
||||
icon = BitmapLoader.getBitmap(fieldDef.inputIconID, 'icons')
|
||||
if icon is not None:
|
||||
static = wx.StaticBitmap(self.ctrlPanel)
|
||||
static.SetBitmap(icon)
|
||||
imgLabelSizer.Add(static, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 1)
|
||||
|
||||
imgLabelSizer.Add(wx.StaticText(self.ctrlPanel, wx.ID_ANY, fieldDef.inputLabel), 0,
|
||||
wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 3)
|
||||
self.ctrlPanel.inputsSizer.Add(imgLabelSizer, 0, wx.ALIGN_CENTER_VERTICAL)
|
||||
self.Layout()
|
||||
self.ctrlPanel.updateControlsForView(view)
|
||||
self.draw()
|
||||
|
||||
def delayedDraw(self, event=None):
|
||||
self.drawTimer.Stop()
|
||||
self.drawTimer.Start(Fit.getInstance().serviceFittingOptions['marketSearchDelay'], True)
|
||||
|
||||
def draw(self, event=None):
|
||||
global mpl_version
|
||||
@@ -292,8 +231,6 @@ class GraphFrame(wx.Frame):
|
||||
if event is not None:
|
||||
event.Skip()
|
||||
|
||||
self.drawTimer.Stop()
|
||||
|
||||
# todo: FIX THIS, see #1430. draw() is not being unbound properly when the window closes, this is an easy fix,
|
||||
# but not a proper solution
|
||||
if not self:
|
||||
@@ -382,11 +319,6 @@ class GraphFrame(wx.Frame):
|
||||
self.canvas.draw()
|
||||
self.Refresh()
|
||||
|
||||
def onFieldChanged(self, event):
|
||||
view = self.getView()
|
||||
view.clearCache()
|
||||
self.delayedDraw()
|
||||
|
||||
def AppendFitToList(self, fitID):
|
||||
sFit = Fit.getInstance()
|
||||
fit = sFit.getFit(fitID)
|
||||
|
||||
@@ -21,7 +21,9 @@
|
||||
# noinspection PyPackageRequirements
|
||||
import wx
|
||||
|
||||
from gui.bitmap_loader import BitmapLoader
|
||||
from service.fit import Fit
|
||||
from .events import RefreshGraph
|
||||
from .lists import FitList, TargetList
|
||||
|
||||
|
||||
@@ -31,8 +33,11 @@ class GraphControlPanel(wx.Panel):
|
||||
super().__init__(parent)
|
||||
self.graphFrame = graphFrame
|
||||
|
||||
self.fields = {}
|
||||
self.selectedY = None
|
||||
self.selectedYRbMap = {}
|
||||
self.drawTimer = wx.Timer(self)
|
||||
self.Bind(wx.EVT_TIMER, self.redrawRequest, self.drawTimer)
|
||||
|
||||
mainSizer = wx.BoxSizer(wx.VERTICAL)
|
||||
|
||||
@@ -69,3 +74,75 @@ class GraphControlPanel(wx.Panel):
|
||||
def showY0(self):
|
||||
return self.showY0Cb.GetValue()
|
||||
|
||||
def updateControlsForView(self, view):
|
||||
view.clearCache()
|
||||
self.graphSubselSizer.Clear()
|
||||
self.inputsSizer.Clear()
|
||||
for child in self.Children:
|
||||
if child not in (self.showY0Cb, self.fitList, self.targetList):
|
||||
child.Destroy()
|
||||
self.fields.clear()
|
||||
|
||||
# Setup view options
|
||||
self.selectedYRbMap.clear()
|
||||
if len(view.yDefs) > 1:
|
||||
i = 0
|
||||
for yAlias, yDef in view.yDefs.items():
|
||||
if i == 0:
|
||||
rdo = wx.RadioButton(self, wx.ID_ANY, yDef.switchLabel, style=wx.RB_GROUP)
|
||||
else:
|
||||
rdo = wx.RadioButton(self, wx.ID_ANY, yDef.switchLabel)
|
||||
rdo.Bind(wx.EVT_RADIOBUTTON, self.OnYTypeUpdate)
|
||||
if i == (self.selectedY or 0):
|
||||
rdo.SetValue(True)
|
||||
self.graphSubselSizer.Add(rdo, 0, wx.ALL | wx.EXPAND, 0)
|
||||
self.selectedYRbMap[yDef.switchLabel] = i
|
||||
i += 1
|
||||
|
||||
# Setup inputs
|
||||
for fieldHandle, fieldDef in (('x', view.xDef), *view.extraInputs.items()):
|
||||
textBox = wx.TextCtrl(self, wx.ID_ANY, style=0)
|
||||
self.fields[fieldHandle] = textBox
|
||||
textBox.Bind(wx.EVT_TEXT, self.onFieldChanged)
|
||||
self.inputsSizer.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):
|
||||
inputDefault = ('%f' % inputDefault).rstrip('0')
|
||||
if inputDefault[-1:] == '.':
|
||||
inputDefault += '0'
|
||||
|
||||
textBox.ChangeValue(inputDefault)
|
||||
|
||||
imgLabelSizer = wx.BoxSizer(wx.HORIZONTAL)
|
||||
if fieldDef.inputIconID:
|
||||
icon = BitmapLoader.getBitmap(fieldDef.inputIconID, 'icons')
|
||||
if icon is not None:
|
||||
static = wx.StaticBitmap(self)
|
||||
static.SetBitmap(icon)
|
||||
imgLabelSizer.Add(static, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 1)
|
||||
|
||||
imgLabelSizer.Add(wx.StaticText(self, wx.ID_ANY, fieldDef.inputLabel), 0,
|
||||
wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 3)
|
||||
self.inputsSizer.Add(imgLabelSizer, 0, wx.ALIGN_CENTER_VERTICAL)
|
||||
self.Layout()
|
||||
|
||||
def OnYTypeUpdate(self, event):
|
||||
event.Skip()
|
||||
obj = event.GetEventObject()
|
||||
formatName = obj.GetLabel()
|
||||
self.selectedY = self.selectedYRbMap[formatName]
|
||||
self.redrawRequest()
|
||||
|
||||
def redrawRequest(self, event=None):
|
||||
self.drawTimer.Stop()
|
||||
wx.PostEvent(self.graphFrame, RefreshGraph())
|
||||
|
||||
def delayedDraw(self, event=None):
|
||||
self.drawTimer.Stop()
|
||||
self.drawTimer.Start(Fit.getInstance().serviceFittingOptions['marketSearchDelay'], True)
|
||||
|
||||
def onFieldChanged(self, event):
|
||||
view = self.graphFrame.getView()
|
||||
view.clearCache()
|
||||
self.delayedDraw()
|
||||
|
||||
Reference in New Issue
Block a user