--- a/svghmi/gen_dnd_widget_svg.ysl2 Fri Jun 18 10:57:33 2021 +0200
+++ b/svghmi/gen_dnd_widget_svg.ysl2 Fri Jun 18 11:47:33 2021 +0200
@@ -40,7 +40,8 @@
template "path", mode="replace_params";
template "widget", mode="replace_params" {
+ apply "@* | node()", mode="replace_params"; + copy "$widgetparams/*"; @@ -73,12 +74,6 @@
error > Multiple widget DnD not yet supported
- msg value "$svg_widget_type";
- value "ns:PassMessage($testmsg)";
apply "/", mode="inline_svg";
--- a/svghmi/ui.py Fri Jun 18 10:57:33 2021 +0200
+++ b/svghmi/ui.py Fri Jun 18 11:47:33 2021 +0200
@@ -88,7 +88,6 @@
@param event: wx.TreeEvent
# Just send a recognizable mime-type, drop destination
# will get python data from parent
data = wx.CustomDataObject(HMITreeDndMagicWord)
@@ -218,8 +217,8 @@
models = { typename: re.compile(regex) for typename, regex in [
- ("int", r"^-?([1-9][0-9]|0)*$"),
- ("real", r"^-?([1-9][0-9]|0)*(\.[0-9]+)?$")]}
+ ("int", r"^-?([1-9][0-9]*|0)$"), + ("real", r"^-?([1-9][0-9]*|0)(\.[0-9]+)?$")]} class ArgEditor(ParamEditor):
def __init__(self, parent, argdesc, prefillargdesc):
@@ -364,6 +363,10 @@
+ def SetMessage(self, msg): + self.staticmsg.SetLabel(msg) + self.main_sizer.Layout() def ResetSignature(self):
for editor in self.args_editors:
@@ -497,7 +500,7 @@
self.AnalyseWidgetAndUpdateUI(fname)
- self.staticmsg.SetLabel(self.msg)
+ self.SetMessage(self.msg) self.msg = _("Widget library must be writable")
@@ -518,14 +521,18 @@
dropSource.DoDragDrop(wx.Drag_AllowMove)
def RegenSVGLater(self, when=1):
+ self.SetMessage(_("SVG generation pending")) self.RegenSVGTimer.Start(milliseconds=when*1000, oneShot=True)
self.RegenSVGLater(when=0)
def RegenSVG(self, event):
+ self.SetMessage(_("Generating SVG...")) args = [arged.GetValue() for arged in self.args_editors]
+ while args and not args[-1]: args.pop(-1) paths = [pathed.GetValue() for pathed in self.paths_editors]
+ while paths and not paths[-1]: paths.pop(-1) if self.RegenSVGLock.acquire(True):
self.RegenSVGParams = (args, paths)
if self.RegenSVGThread is None:
@@ -558,7 +565,7 @@
wx.CallAfter(self.DoneRegenSVG)
- self.staticmsg.SetLabel(self.msg)
+ self.SetMessage(self.msg if self.msg else _("SVG ready for drag'n'drop")) def AnalyseWidgetAndUpdateUI(self, fname):
@@ -587,7 +594,6 @@
self.msg += "Widget " + fname + ": OK"
- print(etree.tostring(signature, pretty_print=True))
widgets = signature.getroot()
widget = widgets.find("widget")
defs = widget.find("defs")
@@ -598,7 +604,7 @@
_("No description given") if widget_desc is None else
KeepDoubleNewLines(widget_desc.text)
- defs.find("type").text + ":\n" +
+ defs.find("type").text + " Widget:\n" + KeepDoubleNewLines(defs.find("longdesc").text))
prefillargs = widget.findall("arg")
args = defs.findall("arg")
@@ -613,31 +619,20 @@
self.args_box.Show(len(args)!=0)
for arg, prefillarg in izip(args,prefillargs):
self.AddArgToSignature(arg, prefillarg)
- print(arg.get("accepts"))
paths = defs.findall("path")
self.paths_box.Show(len(paths)!=0)
self.AddPathToSignature(path)
- print(path.get("name"))
- print(path.get("accepts"))
widget_type = widget.get("type")
for path in widget.iterchildren("path"):
path_value = path.get("value")
str.strip, path.get("accepts", '')[1:-1].split(','))
- print(path, path_value, path_accepts)
self.main_panel.SetupScrolling(scroll_x=False)
- def PassMessage(self, _context, msgs):
- self.msg += msg.text + "\n"
def GetWidgetParams(self, _context):
args,paths = self.GenDnDSVGParams
root = etree.Element("params")
@@ -663,8 +658,7 @@
transform = XSLTransform(
os.path.join(ScriptDirectory, "gen_dnd_widget_svg.xslt"),
- [("GetWidgetParams", self.GetWidgetParams),
- ("PassMessage", self.PassMessage)])
+ [("GetWidgetParams", self.GetWidgetParams)]) svgdom = etree.parse(self.selected_SVG)