--- a/svghmi/ui.py Wed Jun 09 10:06:23 2021 +0200
+++ b/svghmi/ui.py Thu Jun 10 13:47:58 2021 +0200
@@ -10,6 +10,9 @@
+from functools import reduce +from operator import or_ from tempfile import NamedTemporaryFile
@@ -200,19 +203,37 @@
self.SetSizer(self.main_sizer)
self.main_sizer.Fit(self)
- def setValidityNOK(self):
- self.validity_sbmp.SetBitmap(self.invalid_bmp)
- self.validity_sbmp.Show(True)
+ def setValidity(self, validity): + if validity is not None: + bmp = self.valid_bmp if validity else self.invalid_bmp + self.validity_sbmp.SetBitmap(bmp) + self.validity_sbmp.Show(True) + self.validity_sbmp.Show(False) - def setValidityOK(self):
- self.validity_sbmp.SetBitmap(self.valid_bmp)
- self.validity_sbmp.Show(True)
- def setValidityUnknown(self):
- self.validity_sbmp.Show(False)
+models = { typename: re.compile(regex) for typename, regex in [ + ("int", r"^-?[1-9][0-9]*$"), + ("real", r"^-?[1-9][0-9]*(\.[0-9]+)?$")]} class ArgEditor(ParamEditor):
+ def __init__(self, parent, argdesc): + ParamEditor.__init__(self, parent, argdesc) + self.ParentObj = parent + self.Bind(wx.EVT_TEXT, self.OnArgChanged, self.edit) + def OnArgChanged(self, event): + txt = self.edit.GetValue() + accepts = self.argdesc.get("accepts").split(',') + models[typename].match(txt) is not None, + if accepts and txt else None) class PathEditor(ParamEditor):
def __init__(self, parent, pathdesc):
@@ -228,15 +249,13 @@
def SetPath(self, hmitree_node):
self.edit.ChangeValue(hmitree_node.hmi_path())
- if hmitree_node.nodetype in self.pathdesc.get("accepts").split(","):
+ hmitree_node.nodetype in self.pathdesc.get("accepts").split(",")) def OnPathChanged(self, event):
# TODO : find corresponding hmitre node and type to update validity
# Lazy way : hide validity
- self.setValidityUnknown()