svghmi/svghmi.py
branchsvghmi
changeset 2818 65f32c94d7ec
parent 2817 45bbfb2e120f
child 2822 9101a72a1da0
equal deleted inserted replaced
2817:45bbfb2e120f 2818:65f32c94d7ec
   270 
   270 
   271         return ((["svghmi"], [(gen_svghmi_c_path, IECCFLAGS)], True), "",
   271         return ((["svghmi"], [(gen_svghmi_c_path, IECCFLAGS)], True), "",
   272                 ("runtime_svghmi0.py", open(runtimefile_path, "rb")))
   272                 ("runtime_svghmi0.py", open(runtimefile_path, "rb")))
   273 
   273 
   274 
   274 
   275 class SVGHMIEditor(ConfTreeNodeEditor):
   275 class HMITreeSelector(wx.TreeCtrl):
   276     CONFNODEEDITOR_TABS = [
   276     def __init__(self, parent):
   277         (_("HMI Tree"), "CreateHMITreeView")]
   277         global on_hmitree_update
       
   278         wx.TreeCtrl.__init__(self,parent,style=wx.TR_MULTIPLE)# | wx.TR_HIDE_ROOT)
       
   279 
       
   280         isz = (16,16)
       
   281         self.il = il = wx.ImageList(*isz)
       
   282         self.fldridx     = il.AddIcon(wx.ArtProvider.GetIcon(wx.ART_FOLDER,      wx.ART_OTHER, isz))
       
   283         self.fldropenidx = il.AddIcon(wx.ArtProvider.GetIcon(wx.ART_FOLDER_OPEN, wx.ART_OTHER, isz))
       
   284         self.fileidx     = il.AddIcon(wx.ArtProvider.GetIcon(wx.ART_NORMAL_FILE, wx.ART_OTHER, isz))
       
   285         self.SetImageList(il)
       
   286 
       
   287         on_hmitree_update = self.SVGHMIEditorUpdater()
       
   288         self.MakeTree()
       
   289 
       
   290     def _recurseTree(self, current_hmitree_root, current_tc_root):
       
   291         for c in current_hmitree_root.children:
       
   292             if hasattr(c, "children"):
       
   293                 display_name = ('{} (class={})'.format(c.name, c.hmiclass)) \
       
   294                                if c.hmiclass is not None else c.name
       
   295                 tc_child = self.AppendItem(current_tc_root, display_name)
       
   296                 self.SetPyData(tc_child, None)
       
   297                 self.SetItemImage(tc_child, self.fldridx, wx.TreeItemIcon_Normal)
       
   298                 self.SetItemImage(tc_child, self.fldropenidx, wx.TreeItemIcon_Expanded)
       
   299 
       
   300                 self._recurseTree(c,tc_child)
       
   301             else:
       
   302                 display_name = '{} {}'.format(c.nodetype[4:], c.name)
       
   303                 tc_child = self.AppendItem(current_tc_root, display_name)
       
   304                 self.SetPyData(tc_child, None)
       
   305                 self.SetItemImage(tc_child, self.fileidx, wx.TreeItemIcon_Normal)
       
   306                 self.SetItemImage(tc_child, self.fileidx, wx.TreeItemIcon_Expanded)
       
   307 
       
   308     def MakeTree(self):
       
   309         global hmi_tree_root
       
   310 
       
   311         self.Freeze()
       
   312 
       
   313         self.root = None
       
   314         self.DeleteAllItems()
       
   315 
       
   316         root_display_name = _("Please build to see HMI Tree") if hmi_tree_root is None else "HMI"
       
   317         self.root = self.AddRoot(root_display_name)
       
   318         self.SetPyData(self.root, None)
       
   319         self.SetItemImage(self.root, self.fldridx, wx.TreeItemIcon_Normal)
       
   320         self.SetItemImage(self.root, self.fldropenidx, wx.TreeItemIcon_Expanded)
       
   321 
       
   322         if hmi_tree_root is not None:
       
   323             self._recurseTree(hmi_tree_root, self.root)
       
   324 
       
   325         self.Thaw()
   278 
   326 
   279     def SVGHMIEditorUpdater(self):
   327     def SVGHMIEditorUpdater(self):
   280         selfref = weakref.ref(self)
   328         selfref = weakref.ref(self)
   281         def SVGHMIEditorUpdate():
   329         def SVGHMIEditorUpdate():
   282             o = selfref()
   330             o = selfref()
   283             if o is not None:
   331             if o is not None:
   284                 wx.CallAfter(o.MakeTree)
   332                 wx.CallAfter(o.MakeTree)
   285         return SVGHMIEditorUpdate
   333         return SVGHMIEditorUpdate
   286 
   334 
       
   335 class HMITreeView(wx.SplitterWindow):
       
   336 
       
   337     def __init__(self, parent):
       
   338         wx.SplitterWindow.__init__(self, parent,
       
   339                                    style=wx.SUNKEN_BORDER | wx.SP_3D)
       
   340 
       
   341         self.SelectionTree = HMITreeSelector(self)
       
   342         #self.Staging = wx.Panel(self)
       
   343         #self.SplitHorizontally(self.SelectionTree, self.Staging, 200)
       
   344         self.Initialize(self.SelectionTree)
       
   345 
       
   346 
       
   347 class SVGHMIEditor(ConfTreeNodeEditor):
       
   348     CONFNODEEDITOR_TABS = [
       
   349         (_("HMI Tree"), "CreateHMITreeView")]
       
   350 
   287     def CreateHMITreeView(self, parent):
   351     def CreateHMITreeView(self, parent):
   288         global hmi_tree_updated 
   352         #self.HMITreeView = HMITreeView(self)
   289 
   353         return HMITreeSelector(parent)
   290         dvtc = dv.DataViewTreeCtrl(parent)
   354 
   291         isz = (16,16)
       
   292         self.ImageList = il = wx.ImageList(*isz)
       
   293         self.fldridx     = il.AddIcon(wx.ArtProvider.GetIcon(wx.ART_FOLDER,      wx.ART_OTHER, isz))
       
   294         self.fldropenidx = il.AddIcon(wx.ArtProvider.GetIcon(wx.ART_FOLDER_OPEN, wx.ART_OTHER, isz))
       
   295         self.fileidx     = il.AddIcon(wx.ArtProvider.GetIcon(wx.ART_NORMAL_FILE, wx.ART_OTHER, isz))
       
   296         dvtc.SetImageList(il)
       
   297 
       
   298 
       
   299         self.HMITreeView = dvtc
       
   300         hmi_tree_updated = self.SVGHMIEditorUpdater()
       
   301         self.MakeTree()
       
   302         return self.HMITreeView
       
   303 
       
   304     def _recurseTree(self, current_hmitree_root, current_dvtc_root):
       
   305         dvtc = self.HMITreeView
       
   306         for c in current_hmitree_root.children:
       
   307             if hasattr(c, "children"):
       
   308                 display_name = ('{} (class={})'.format(c.name, c.hmiclass)) \
       
   309                                if c.hmiclass is not None else c.name
       
   310                 dvtc_child = dvtc.AppendContainer(
       
   311                                  current_dvtc_root, display_name,
       
   312                                  self.fldridx, self.fldropenidx)
       
   313 
       
   314                 self._recurseTree(c,dvtc_child)
       
   315             else:
       
   316                 display_name = '{} {}'.format(c.nodetype[4:], c.name)
       
   317                 dvtc.AppendContainer(
       
   318                     current_dvtc_root, display_name,
       
   319                     self.fileidx, self.fileidx)
       
   320 
       
   321     def MakeTree(self):
       
   322         global hmi_tree_root 
       
   323         
       
   324         dvtc = self.HMITreeView
       
   325 
       
   326         dvtc.Freeze()
       
   327         dvtc.DeleteAllItems()
       
   328 
       
   329         root_display_name = _("Please build to see HMI Tree") if hmi_tree_root is None else "HMI"
       
   330         root = dvtc.AppendContainer(dv.NullDataViewItem,
       
   331                                     root_display_name,
       
   332                                     self.fldridx, self.fldropenidx)
       
   333         if hmi_tree_root is not None:
       
   334             self._recurseTree(hmi_tree_root, root)
       
   335         dvtc.Thaw()
       
   336 
   355 
   337 class SVGHMI(object):
   356 class SVGHMI(object):
   338     XSD = """<?xml version="1.0" encoding="utf-8" ?>
   357     XSD = """<?xml version="1.0" encoding="utf-8" ?>
   339     <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   358     <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   340       <xsd:element name="SVGHMI">
   359       <xsd:element name="SVGHMI">