198 self.main_sizer.Add(self.desc, flag=wx.GROW) |
201 self.main_sizer.Add(self.desc, flag=wx.GROW) |
199 self.main_sizer.Add(self.edit_sizer, flag=wx.GROW) |
202 self.main_sizer.Add(self.edit_sizer, flag=wx.GROW) |
200 self.SetSizer(self.main_sizer) |
203 self.SetSizer(self.main_sizer) |
201 self.main_sizer.Fit(self) |
204 self.main_sizer.Fit(self) |
202 |
205 |
203 def setValidityNOK(self): |
206 def setValidity(self, validity): |
204 self.validity_sbmp.SetBitmap(self.invalid_bmp) |
207 if validity is not None: |
205 self.validity_sbmp.Show(True) |
208 bmp = self.valid_bmp if validity else self.invalid_bmp |
206 |
209 self.validity_sbmp.SetBitmap(bmp) |
207 def setValidityOK(self): |
210 self.validity_sbmp.Show(True) |
208 self.validity_sbmp.SetBitmap(self.valid_bmp) |
211 else : |
209 self.validity_sbmp.Show(True) |
212 self.validity_sbmp.Show(False) |
210 |
213 |
211 def setValidityUnknown(self): |
214 models = { typename: re.compile(regex) for typename, regex in [ |
212 self.validity_sbmp.Show(False) |
215 ("string", r".*"), |
|
216 ("int", r"^-?[1-9][0-9]*$"), |
|
217 ("real", r"^-?[1-9][0-9]*(\.[0-9]+)?$")]} |
213 |
218 |
214 class ArgEditor(ParamEditor): |
219 class ArgEditor(ParamEditor): |
215 pass |
220 def __init__(self, parent, argdesc): |
|
221 ParamEditor.__init__(self, parent, argdesc) |
|
222 self.ParentObj = parent |
|
223 self.argdesc = argdesc |
|
224 self.Bind(wx.EVT_TEXT, self.OnArgChanged, self.edit) |
|
225 |
|
226 def OnArgChanged(self, event): |
|
227 txt = self.edit.GetValue() |
|
228 accepts = self.argdesc.get("accepts").split(',') |
|
229 self.setValidity( |
|
230 reduce(or_, |
|
231 map(lambda typename: |
|
232 models[typename].match(txt) is not None, |
|
233 accepts), |
|
234 False) |
|
235 if accepts and txt else None) |
|
236 event.Skip() |
216 |
237 |
217 class PathEditor(ParamEditor): |
238 class PathEditor(ParamEditor): |
218 def __init__(self, parent, pathdesc): |
239 def __init__(self, parent, pathdesc): |
219 ParamEditor.__init__(self, parent, pathdesc) |
240 ParamEditor.__init__(self, parent, pathdesc) |
220 self.ParentObj = parent |
241 self.ParentObj = parent |
226 def OnHMITreeDnD(self): |
247 def OnHMITreeDnD(self): |
227 self.ParentObj.GotPathDnDOn(self) |
248 self.ParentObj.GotPathDnDOn(self) |
228 |
249 |
229 def SetPath(self, hmitree_node): |
250 def SetPath(self, hmitree_node): |
230 self.edit.ChangeValue(hmitree_node.hmi_path()) |
251 self.edit.ChangeValue(hmitree_node.hmi_path()) |
231 if hmitree_node.nodetype in self.pathdesc.get("accepts").split(","): |
252 self.setValidity( |
232 self.setValidityOK() |
253 hmitree_node.nodetype in self.pathdesc.get("accepts").split(",")) |
233 else: |
|
234 self.setValidityNOK() |
|
235 |
254 |
236 def OnPathChanged(self, event): |
255 def OnPathChanged(self, event): |
237 # TODO : find corresponding hmitre node and type to update validity |
256 # TODO : find corresponding hmitre node and type to update validity |
238 # Lazy way : hide validity |
257 # Lazy way : hide validity |
239 self.setValidityUnknown() |
258 self.setValidity(None) |
240 event.Skip() |
259 event.Skip() |
241 |
260 |
242 |
261 |
243 _conf_key = "SVGHMIWidgetLib" |
262 _conf_key = "SVGHMIWidgetLib" |
244 _preview_height = 200 |
263 _preview_height = 200 |