lpcmanager

#2565 Removed dangerous optimization
revamp
2018-02-06, Edouard Tisserant
9b18df89c4c1
#2565 Removed dangerous optimization
import wx
import sys
[ID_OPTIONSWIZARDDIALOG,ID_ONCHANGE,ID_OPTIONSTYPECHOICE,ID_SUBGROUPTEXT,ID_UNITTEXT,ID_VALUECHECKBOX,ID_MINSPIN,ID_MAXSPIN,ID_PRECISIONSPIN,ID_SCADACHECKBOX,ID_OTHERTEXT,ID_DESCRIPTION,ID_STATIC] = [wx.NewId() for _init_ctrls in range(13)]
VARIABLETYPE = ["", "Static", "Session", "Alarm"]
class WampOptionsEditor(wx.Dialog):
def _init_sizers(self):
#self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
self.MainSizer = wx.BoxSizer(wx.VERTICAL)
#self.OptionsSizer = wx.FlexGridSizer(cols=2, hgap=10, rows=12, vgap=10)
self.TypeSizer = wx.BoxSizer(wx.HORIZONTAL)
self.TypeSizer.Add(wx.StaticText(self,wx.ID_ANY,"Type:"), flag=wx.LEFT, border=10, proportion=1)
self.TypeSizer.Add(self.OptionsTypeChoice, proportion=2)
self.MainSizer.Add(self.TypeSizer, flag=wx.EXPAND|wx.RIGHT|wx.TOP, border=10)
self.OnChangeSizer = wx.BoxSizer(wx.HORIZONTAL)
self.OnChangeSizer.Add(self.OnChangeCheckbox, flag=wx.LEFT, border=10)
self.OnChangeSizer.Add(wx.StaticText(self, wx.ID_ANY, "On Change"), flag=wx.LEFT | wx.ALIGN_RIGHT, border=10)
self.MainSizer.Add(self.OnChangeSizer, flag=wx.EXPAND | wx.RIGHT | wx.TOP, border=10)
self.ScadaSizer = wx.BoxSizer(wx.HORIZONTAL)
self.ScadaSizer.Add(self.ScadaCheckbox, flag=wx.LEFT, border=10)
self.ScadaSizer.Add(wx.StaticText(self, wx.ID_ANY, "Scada"), flag=wx.LEFT, proportion=1, border=10)
self.MainSizer.Add(self.ScadaSizer, flag=wx.EXPAND | wx.RIGHT | wx.TOP, border=10)
self.StaticSizer = wx.BoxSizer(wx.HORIZONTAL)
self.StaticSizer.Add(self.StaticCheckbox, flag=wx.LEFT, border=10)
self.StaticSizer.Add(wx.StaticText(self, wx.ID_ANY, "Static"), flag=wx.LEFT, proportion=1, border=10)
self.MainSizer.Add(self.StaticSizer, flag=wx.EXPAND | wx.RIGHT | wx.TOP, border=10)
self.SubgroupSizer = wx.BoxSizer(wx.HORIZONTAL)
self.SubgroupSizer.Add(wx.StaticText(self,wx.ID_ANY,"Subgroup:"), flag=wx.LEFT, proportion=1, border=10)
self.SubgroupSizer.Add(self.SubgroupText, flag=wx.LEFT, border=10, proportion=2)
self.MainSizer.Add(self.SubgroupSizer, flag=wx.EXPAND | wx.RIGHT | wx.TOP, border=10)
self.UnitSizer = wx.BoxSizer(wx.HORIZONTAL)
self.UnitSizer.Add(wx.StaticText(self,wx.ID_ANY,"Unit:"), flag=wx.LEFT, proportion=1, border=10)
self.UnitSizer.Add(self.UnitText, flag=wx.LEFT, proportion=2, border=10)
self.MainSizer.Add(self.UnitSizer, flag=wx.EXPAND | wx.RIGHT | wx.TOP, border=10)
self.ValueSizer = wx.BoxSizer(wx.HORIZONTAL)
self.ValueSizer.Add(self.ValueCheckbox, flag=wx.LEFT, border=10)
self.ValueSizer.Add(wx.StaticText(self,wx.ID_ANY,"Enable min/max value"), flag=wx.LEFT, proportion=1, border=10)
self.MainSizer.Add(self.ValueSizer, flag=wx.EXPAND | wx.RIGHT | wx.TOP, proportion=2, border=10)
self.minValue=wx.StaticText(self, wx.ID_ANY, "Min value:")
self.maxValue=wx.StaticText(self, wx.ID_ANY, "Max value:")
self.PrecisionValue = wx.StaticText(self, wx.ID_ANY, "Precision:")
self.MinSizer = wx.BoxSizer(wx.HORIZONTAL)
self.MinSizer.Add(self.minValue, flag=wx.LEFT, border=10, proportion=1)
self.MinSizer.Add(self.MinSpin, flag=wx.LEFT, proportion=2, border=10)
self.MainSizer.Add(self.MinSizer, flag=wx.EXPAND | wx.RIGHT | wx.TOP, border=10)
self.MaxSizer = wx.BoxSizer(wx.HORIZONTAL)
self.MaxSizer.Add(self.maxValue, flag=wx.LEFT, border=10, proportion=1)
self.MaxSizer.Add(self.MaxSpin, flag=wx.LEFT, proportion=2, border=10)
self.MainSizer.Add(self.MaxSizer, flag=wx.EXPAND | wx.RIGHT | wx.TOP, border=10)
self.PrecisionSizer = wx.BoxSizer(wx.HORIZONTAL)
self.PrecisionSizer.Add(self.PrecisionValue, flag=wx.LEFT, border=10, proportion=1)
self.PrecisionSizer.Add(self.PrecisionSpin, flag=wx.LEFT, proportion=2, border=10)
self.MainSizer.Add(self.PrecisionSizer, flag=wx.EXPAND | wx.RIGHT | wx.TOP, border=10)
self.OtherSizer = wx.BoxSizer(wx.HORIZONTAL)
self.OtherSizer.Add(wx.StaticText(self, wx.ID_ANY, "Other:"), flag=wx.LEFT, border=10, proportion=1)
self.OtherSizer.Add(self.OtherText, flag=wx.LEFT, proportion=2, border=10)
self.MainSizer.Add(self.OtherSizer, flag=wx.EXPAND | wx.RIGHT | wx.TOP, border=10)
self.DescriptionSizer = wx.BoxSizer(wx.VERTICAL)
self.DescriptionSizer.Add(wx.StaticText(self, wx.ID_ANY, "Description:"), border=10)
self.DescriptionSizer.Add(self.DescriptionText, flag=wx.EXPAND | wx.UP | wx.DOWN, proportion=1, border=10)
self.MainSizer.Add(self.DescriptionSizer, flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, border=10)
self.ButtonSizer.AddWindow(self.ClearButton, flag=wx.ALIGN_CENTER_HORIZONTAL)
#self.MainSizer.AddSizer(self.OptionsSizer, 0, border=20, flag=wx.ALL)
self.MainSizer.AddSizer(self.ButtonSizer, 0, border=10, flag=wx.ALIGN_CENTER_HORIZONTAL | wx.BOTTOM)
self.SetSizer(self.MainSizer)
self.CenterOnParent()
def _init_ctrls(self, prnt):
wx.Dialog.__init__(self, id=ID_OPTIONSWIZARDDIALOG,
name='OptionsWizard', parent=prnt,
size=wx.Size(258, 520), style=wx.DEFAULT_DIALOG_STYLE,
title='Options')
self.OptionsTypeChoice = wx.Choice(parent=self, id=ID_OPTIONSWIZARDDIALOG,
choices=VARIABLETYPE)
self.Bind(wx.EVT_CHOICE, self.OnTypeChoice, self.OptionsTypeChoice)
self.OnChangeCheckbox = wx.CheckBox(parent=self, id=ID_ONCHANGE)
self.SubgroupText = wx.TextCtrl(parent=self, id=ID_SUBGROUPTEXT)
self.UnitText = wx.TextCtrl(parent=self, id=ID_UNITTEXT)
self.ValueCheckbox = wx.CheckBox(parent=self, id=ID_VALUECHECKBOX)
self.MinSpin = wx.SpinCtrl(parent=self, id=ID_MINSPIN, style=wx.SP_VERTICAL)
self.MaxSpin = wx.SpinCtrl(parent=self, id=ID_MAXSPIN, style=wx.SP_VERTICAL)
self.PrecisionSpin = wx.SpinCtrl(parent=self, id=ID_PRECISIONSPIN, style=wx.SP_VERTICAL)
#self.MinSpin.SetRange(-sys.maxsize, sys.maxsize)
self.MinSpin.SetRange(-9999, 9999)
#self.MaxSpin.SetRange(-sys.maxsize, sys.maxsize)
self.MaxSpin.SetRange(-9999, 9999)
self.ScadaCheckbox = wx.CheckBox(parent=self, id=ID_SCADACHECKBOX)
self.StaticCheckbox = wx.CheckBox(parent=self, id=ID_SCADACHECKBOX)
self.OtherText = wx.TextCtrl(parent=self, id=ID_OTHERTEXT)
self.DescriptionText = wx.TextCtrl(parent=self, id=ID_DESCRIPTION, size=(-1, 100), style=wx.TE_MULTILINE | wx.SUNKEN_BORDER)
self.ClearButton = wx.Button(self, wx.ID_CLEAR, "Clear")
self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL)
self.ValueCheckbox.Bind(wx.EVT_CHECKBOX, self.EnableValue)
self.MinSpin.Enable(False)
self.MaxSpin.Enable(False)
self.OnChangeCheckbox.Enable(False)
self.StaticCheckbox.Enable(False)
self.Bind(wx.EVT_CHOICE, self.Enabler, self.OptionsTypeChoice)
self.Bind(wx.EVT_BUTTON, self.clearOptions, self.ClearButton)
self.Bind(wx.EVT_CHECKBOX, self.Enabler, self.ScadaCheckbox)
def __init__(self, parent, opt, desc):
self.TypeSelected = 0
self.value = ""
self.Description = ""
self.OnChange = False
self._init_ctrls(parent)
self._init_sizers()
self.SetOptions(opt, desc)
self.GetOptions()
def Enabler(self, event):
if self.OptionsTypeChoice.GetSelection() in [1,3]:
self.OnChangeCheckbox.Enable(True)
else:
self.OnChangeCheckbox.Enable(False)
if self.OptionsTypeChoice.GetSelection() == 3 and self.ScadaCheckbox.GetValue():
self.StaticCheckbox.Enable(True)
else:
self.StaticCheckbox.Enable(False)
def clearOptions(self, event):
"""Zbrisi vsebino"""
self.OptionsTypeChoice.SetSelection(0)
self.SubgroupText.SetLabel("")
self.UnitText.SetLabel("")
self.MinSpin.SetValue(0)
self.MaxSpin.SetValue(0)
self.ValueCheckbox.SetValue(False)
self.ScadaCheckbox.SetValue(False)
self.StaticCheckbox.SetValue(False)
self.OtherText.SetLabel("")
self.MinSpin.Enable(False)
self.MaxSpin.Enable(False)
self.StaticCheckbox.Enable(False)
self.PrecisionSpin.SetValue(0)
self.OnChangeCheckbox.SetValue(False)
self.DescriptionText.SetLabel("")
def OnTypeChoice(self, event):
self.selected = event.GetSelection()
def EnableValue(self, event):
self.MinSpin.Enable(self.ValueCheckbox.GetValue())
self.MaxSpin.Enable(self.ValueCheckbox.GetValue())
# def MinChange(self,event):
# self.minValue.SetLabel("Min value: " + str(self.MinSpin.GetValue()))
#
# def MaxChange(self,event):
# self.maxValue.SetLabel("Max value: " + str(self.MaxSpin.GetValue()))
def SetOptions(self, opt, desc):
opt1 = opt[0]
opt2 = opt[1]
optionsTemp = opt1.split(" ")
options = []
for el in optionsTemp:
options.append(el.split("="))
self.clearOptions(None)
# self.ScadaCheckbox.SetValue(False)
# self.StaticCheckbox.Enable(False)
# self.StaticCheckbox.SetValue(False)
for el in options:
if len(el) == 1:
if el[0] == "":
self.OptionsTypeChoice.SetSelection(0)
elif el[0] == "Static":
self.OptionsTypeChoice.SetSelection(1)
elif el[0] == "Session":
self.OptionsTypeChoice.SetSelection(2)
elif el[0] == "Alarm":
self.OptionsTypeChoice.SetSelection(3)
if el[0] == "scada":
self.ScadaCheckbox.SetValue(True)
if el[0] == "static":
self.StaticCheckbox.Enable(True)
self.StaticCheckbox.SetValue(True)
else:
if el[0] == "subgroup":
self.SubgroupText.SetLabel(el[1])
elif el[0] == "unit":
self.UnitText.SetLabel(el[1])
elif el[0] == "min":
self.ValueCheckbox.SetValue(True)
self.MinSpin.SetValue(int(el[1]))
self.MinSpin.Enable(True)
elif el[0] == "max":
self.ValueCheckbox.SetValue(True)
self.MaxSpin.SetValue(int(el[1]))
self.MaxSpin.Enable(True)
elif el[0] == "other":
self.OtherText.SetLabel(el[1])
elif el[0] == "precision":
self.PrecisionSpin.SetValue(int(el[1]))
if len(opt2)>0:
self.OnChangeCheckbox.Enable(True)
self.OnChangeCheckbox.SetValue(True)
if self.OptionsTypeChoice.GetSelection() == 3 and self.ScadaCheckbox.GetValue():
self.StaticCheckbox.Enable(True)
self.DescriptionText.SetLabel(desc)
def GetOptions(self):
self.TypeSelected = self.OptionsTypeChoice.GetSelection()
if self.TypeSelected<0:
self.TypeSelected = 0
options = VARIABLETYPE[self.TypeSelected]
if self.ScadaCheckbox.GetValue():
options += " scada"
if self.StaticCheckbox.GetValue():
options += " static"
if self.SubgroupText.GetLineText(0) != "":
options += " subgroup=" + self.SubgroupText.GetLineText(0)
if self.UnitText.GetLineText(0) != "":
options += " unit=" + self.UnitText.GetLineText(0)
if self.MinSpin.IsEnabled():
options += " min=" + str(self.MinSpin.GetValue())
options += " max=" + str(self.MaxSpin.GetValue())
if self.PrecisionSpin.GetValue() != 0:
options += " precision=" + str(self.PrecisionSpin.GetValue())
if self.OtherText.GetLineText(0) != "":
options += " other=" + self.OtherText.GetLineText(0)
if self.OnChangeCheckbox.GetValue():
self.OnChange = True
else:
self.OnChange = False
if VARIABLETYPE[self.TypeSelected] == "Alarm":
self.value = "Alarm"
elif VARIABLETYPE[self.TypeSelected] == "Static":
self.value = "StoredValue"
else:
self.value = ""
self.OnChange = True
self.Description = self.DescriptionText.GetValue()
return options, self.OnChange,self.value, self.Description