# HG changeset patch # User Edouard Tisserant # Date 1529048885 -7200 # Node ID 7f59aa39866926bcc2e2494f5f6e82dced810b83 # Parent c6321473fac13f388e391db2e6e1ad9ce8b89045 WxGlade HMI extension now does only instanciate wx object who's name match extension's name. If no object match the name and no code is provided in 'start' user python code section, then a warning is issued diff -r c6321473fac1 -r 7f59aa398669 wxglade_hmi/wxglade_hmi.py --- a/wxglade_hmi/wxglade_hmi.py Wed Jun 13 08:54:13 2018 +0200 +++ b/wxglade_hmi/wxglade_hmi.py Fri Jun 15 09:48:05 2018 +0200 @@ -90,7 +90,10 @@ def CTNGenerate_C(self, buildpath, locations): - hmi_frames = [] + # list containing description of all objects declared in wxglade + hmi_objects = [] + # list containing only description of the main frame object + main_frames = [] wxgfile_path = self._getWXGLADEpath() if os.path.exists(wxgfile_path): @@ -100,12 +103,17 @@ for node in wxgtree.childNodes[1].childNodes: if node.nodeType == wxgtree.ELEMENT_NODE: - hmi_frames.append({ - "name": node.getAttribute("name"), + name = node.getAttribute("name") + wxglade_object_desc = { + "name": name, "class": node.getAttribute("class"), "handlers": [ hnode.firstChild.data for hnode in - node.getElementsByTagName("handler")]}) + node.getElementsByTagName("handler")]} + + hmi_objects.append(wxglade_object_desc) + if name == self.CTNName() : + main_frames.append(wxglade_object_desc) hmipyfile_path = os.path.join(self._getBuildPath(), "hmi.py") if wx.Platform == '__WXMSW__': @@ -122,12 +130,12 @@ else: define_hmi = "" - declare_hmi = "\n".join(["%(name)s = None\n" % x + - "\n".join(["%(class)s.%(h)s = %(h)s" % + declare_hmi = "\n".join(["%(name)s = None\n" % x for x in main_frames]) + declare_hmi += "\n".join(["\n".join(["%(class)s.%(h)s = %(h)s" % dict(x, h=h) for h in x['handlers']]) - for x in hmi_frames]) + for x in hmi_objects]) global_hmi = ("global %s\n" % ",".join( - [x["name"] for x in hmi_frames]) if len(hmi_frames) > 0 else "") + [x["name"] for x in main_frames]) if len(main_frames) > 0 else "") init_hmi = "\n".join(["""\ def OnCloseFrame(evt): wx.MessageBox(_("Please stop PLC to close")) @@ -135,10 +143,10 @@ %(name)s = %(class)s(None) %(name)s.Bind(wx.EVT_CLOSE, OnCloseFrame) %(name)s.Show() -""" % x for x in hmi_frames]) +""" % x for x in main_frames]) cleanup_hmi = "\n".join( ["if %(name)s is not None: %(name)s.Destroy()" % x - for x in hmi_frames]) + for x in main_frames]) self.PreSectionsTexts = { "globals": define_hmi, @@ -150,6 +158,11 @@ "start": init_hmi, } + if len(main_frames) == 0 and \ + len(getattr(self.CodeFile, "start").getanyText().strip()) == 0: + self.GetCTRoot().logger.write_warning( + _("Warning: WxGlade HMI has no object with name identical to extension name, and no python code is provided in start section to create object.\n")) + return PythonFileCTNMixin.CTNGenerate_C(self, buildpath, locations) def _editWXGLADE(self):