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
--- 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):