Beremiz.py
changeset 718 5d4dc150b956
parent 717 1c23952dbde1
child 722 a94f361fc42e
equal deleted inserted replaced
717:1c23952dbde1 718:5d4dc150b956
   672                                  TextViewer, 
   672                                  TextViewer, 
   673                                  GraphicViewer, 
   673                                  GraphicViewer, 
   674                                  ResourceEditor, 
   674                                  ResourceEditor, 
   675                                  ConfigurationEditor, 
   675                                  ConfigurationEditor, 
   676                                  DataTypeEditor))):
   676                                  DataTypeEditor))):
   677             return ("confnode", tab.Controler.PlugFullName())
   677             return ("confnode", tab.Controler.CTNFullName())
   678         elif (isinstance(tab, TextViewer) and 
   678         elif (isinstance(tab, TextViewer) and 
   679               (tab.Controler is None or isinstance(tab.Controler, MiniTextControler))):
   679               (tab.Controler is None or isinstance(tab.Controler, MiniTextControler))):
   680             return ("confnode", None, tab.GetInstancePath())
   680             return ("confnode", None, tab.GetInstancePath())
   681         else:
   681         else:
   682             return IDEFrame.GetTabInfos(self, tab)
   682             return IDEFrame.GetTabInfos(self, tab)
   850         self.Freeze()
   850         self.Freeze()
   851         self.ClearSizer(self.PLCParamsSizer)
   851         self.ClearSizer(self.PLCParamsSizer)
   852         
   852         
   853         if self.CTR is not None:    
   853         if self.CTR is not None:    
   854             plcwindow = wx.Panel(self.PLCConfig, -1, size=wx.Size(-1, -1))
   854             plcwindow = wx.Panel(self.PLCConfig, -1, size=wx.Size(-1, -1))
   855             if self.CTR.PlugTestModified():
   855             if self.CTR.CTNTestModified():
   856                 bkgdclr = CHANGED_TITLE_COLOUR
   856                 bkgdclr = CHANGED_TITLE_COLOUR
   857             else:
   857             else:
   858                 bkgdclr = TITLE_COLOUR
   858                 bkgdclr = TITLE_COLOUR
   859                 
   859                 
   860             if self.CTR not in self.ConfNodeInfos:
   860             if self.CTR not in self.ConfNodeInfos:
   931         self.PLCConfigMainSizer.Layout()
   931         self.PLCConfigMainSizer.Layout()
   932         self.RefreshScrollBars()
   932         self.RefreshScrollBars()
   933         self.Thaw()
   933         self.Thaw()
   934 
   934 
   935     def GenerateEnableButton(self, parent, sizer, confnode):
   935     def GenerateEnableButton(self, parent, sizer, confnode):
   936         enabled = confnode.PlugEnabled()
   936         enabled = confnode.CTNEnabled()
   937         if enabled is not None:
   937         if enabled is not None:
   938             enablebutton_id = wx.NewId()
   938             enablebutton_id = wx.NewId()
   939             enablebutton = wx.lib.buttons.GenBitmapToggleButton(id=enablebutton_id, bitmap=wx.Bitmap(Bpath( 'images', 'Disabled.png')),
   939             enablebutton = wx.lib.buttons.GenBitmapToggleButton(id=enablebutton_id, bitmap=wx.Bitmap(Bpath( 'images', 'Disabled.png')),
   940                   name='EnableButton', parent=parent, size=wx.Size(16, 16), pos=wx.Point(0, 0), style=0)#wx.NO_BORDER)
   940                   name='EnableButton', parent=parent, size=wx.Size(16, 16), pos=wx.Point(0, 0), style=0)#wx.NO_BORDER)
   941             enablebutton.SetToolTipString(_("Enable/Disable this confnode"))
   941             enablebutton.SetToolTipString(_("Enable/Disable this confnode"))
  1044 
  1044 
  1045     def RefreshConfNodeTree(self):
  1045     def RefreshConfNodeTree(self):
  1046         self.Freeze()
  1046         self.Freeze()
  1047         self.ClearSizer(self.ConfNodeTreeSizer)
  1047         self.ClearSizer(self.ConfNodeTreeSizer)
  1048         if self.CTR is not None:
  1048         if self.CTR is not None:
  1049             for child in self.CTR.IECSortedChilds():
  1049             for child in self.CTR.IECSortedChildren():
  1050                 self.GenerateTreeBranch(child)
  1050                 self.GenerateTreeBranch(child)
  1051                 if not self.ConfNodeInfos[child]["expanded"]:
  1051                 if not self.ConfNodeInfos[child]["expanded"]:
  1052                     self.CollapseConfNode(child)
  1052                     self.CollapseConfNode(child)
  1053         self.PLCConfigMainSizer.Layout()
  1053         self.PLCConfigMainSizer.Layout()
  1054         self.RefreshScrollBars()
  1054         self.RefreshScrollBars()
  1129         if locations_infos["root"]["left"] is not None and refresh_size:
  1129         if locations_infos["root"]["left"] is not None and refresh_size:
  1130             self.RefreshTreeCtrlSize(locations_infos["root"]["left"])
  1130             self.RefreshTreeCtrlSize(locations_infos["root"]["left"])
  1131     
  1131     
  1132     def GenerateTreeBranch(self, confnode):
  1132     def GenerateTreeBranch(self, confnode):
  1133         leftwindow = wx.Panel(self.PLCConfig, -1, size=wx.Size(-1, -1))
  1133         leftwindow = wx.Panel(self.PLCConfig, -1, size=wx.Size(-1, -1))
  1134         if confnode.PlugTestModified():
  1134         if confnode.CTNTestModified():
  1135             bkgdclr=CHANGED_WINDOW_COLOUR
  1135             bkgdclr=CHANGED_WINDOW_COLOUR
  1136         else:
  1136         else:
  1137             bkgdclr=WINDOW_COLOUR
  1137             bkgdclr=WINDOW_COLOUR
  1138 
  1138 
  1139         leftwindow.SetBackgroundColour(bkgdclr)
  1139         leftwindow.SetBackgroundColour(bkgdclr)
  1140         
  1140         
  1141         if not self.ConfNodeInfos.has_key(confnode):
  1141         if not self.ConfNodeInfos.has_key(confnode):
  1142             self.ConfNodeInfos[confnode] = {"expanded" : False, "right_visible" : False}
  1142             self.ConfNodeInfos[confnode] = {"expanded" : False, "right_visible" : False}
  1143             
  1143             
  1144         self.ConfNodeInfos[confnode]["children"] = confnode.IECSortedChilds()
  1144         self.ConfNodeInfos[confnode]["children"] = confnode.IECSortedChildren()
  1145         confnode_locations = []
  1145         confnode_locations = []
  1146         if len(self.ConfNodeInfos[confnode]["children"]) == 0:
  1146         if len(self.ConfNodeInfos[confnode]["children"]) == 0:
  1147             confnode_locations = confnode.GetVariableLocationTree()["children"]
  1147             confnode_locations = confnode.GetVariableLocationTree()["children"]
  1148             if not self.ConfNodeInfos[confnode].has_key("locations_infos"):
  1148             if not self.ConfNodeInfos[confnode].has_key("locations_infos"):
  1149                 self.ConfNodeInfos[confnode]["locations_infos"] = {"root": {"expanded" : False}}
  1149                 self.ConfNodeInfos[confnode]["locations_infos"] = {"root": {"expanded" : False}}
  1172         leftsizer.AddSizer(rolesizer, 0, border=0, flag=wx.GROW|wx.RIGHT)
  1172         leftsizer.AddSizer(rolesizer, 0, border=0, flag=wx.GROW|wx.RIGHT)
  1173         
  1173         
  1174         #self.GenerateEnableButton(leftwindow, rolesizer, confnode)
  1174         #self.GenerateEnableButton(leftwindow, rolesizer, confnode)
  1175 
  1175 
  1176         roletext = wx.StaticText(leftwindow, -1)
  1176         roletext = wx.StaticText(leftwindow, -1)
  1177         roletext.SetLabel(confnode.PlugHelp)
  1177         roletext.SetLabel(confnode.CTNHelp)
  1178         rolesizer.AddWindow(roletext, 0, border=5, flag=wx.RIGHT|wx.ALIGN_LEFT)
  1178         rolesizer.AddWindow(roletext, 0, border=5, flag=wx.RIGHT|wx.ALIGN_LEFT)
  1179         
  1179         
  1180         confnode_IECChannel = confnode.BaseParams.getIEC_Channel()
  1180         confnode_IECChannel = confnode.BaseParams.getIEC_Channel()
  1181         
  1181         
  1182         iecsizer = wx.BoxSizer(wx.HORIZONTAL)
  1182         iecsizer = wx.BoxSizer(wx.HORIZONTAL)
  1214               size=wx.Size(16, 16), style=wx.NO_BORDER)
  1214               size=wx.Size(16, 16), style=wx.NO_BORDER)
  1215         deletebutton.SetToolTipString(_("Delete this confnode"))
  1215         deletebutton.SetToolTipString(_("Delete this confnode"))
  1216         deletebutton.Bind(wx.EVT_BUTTON, self.GetDeleteButtonFunction(confnode), id=deletebutton_id)
  1216         deletebutton.Bind(wx.EVT_BUTTON, self.GetDeleteButtonFunction(confnode), id=deletebutton_id)
  1217         adddeletesizer.AddWindow(deletebutton, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER)
  1217         adddeletesizer.AddWindow(deletebutton, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER)
  1218 
  1218 
  1219         if len(confnode.PlugChildsTypes) > 0:
  1219         if len(confnode.CTNChildrenTypes) > 0:
  1220             addbutton_id = wx.NewId()
  1220             addbutton_id = wx.NewId()
  1221             addbutton = wx.lib.buttons.GenBitmapButton(id=addbutton_id, bitmap=wx.Bitmap(Bpath( 'images', 'Add.png')),
  1221             addbutton = wx.lib.buttons.GenBitmapButton(id=addbutton_id, bitmap=wx.Bitmap(Bpath( 'images', 'Add.png')),
  1222                   name='AddConfNodeButton', parent=leftwindow, pos=wx.Point(0, 0),
  1222                   name='AddConfNodeButton', parent=leftwindow, pos=wx.Point(0, 0),
  1223                   size=wx.Size(16, 16), style=wx.NO_BORDER)
  1223                   size=wx.Size(16, 16), style=wx.NO_BORDER)
  1224             addbutton.SetToolTipString(_("Add a sub confnode"))
  1224             addbutton.SetToolTipString(_("Add a sub confnode"))
  1413         return OnConfNodeMenu
  1413         return OnConfNodeMenu
  1414     
  1414     
  1415     def Gen_AddConfNodeMenu(self, confnode):
  1415     def Gen_AddConfNodeMenu(self, confnode):
  1416         def AddConfNodeMenu(event):
  1416         def AddConfNodeMenu(event):
  1417             main_menu = wx.Menu(title='')
  1417             main_menu = wx.Menu(title='')
  1418             if len(confnode.PlugChildsTypes) > 0:
  1418             if len(confnode.CTNChildrenTypes) > 0:
  1419                 for name, XSDClass, help in confnode.PlugChildsTypes:
  1419                 for name, XSDClass, help in confnode.CTNChildrenTypes:
  1420                     new_id = wx.NewId()
  1420                     new_id = wx.NewId()
  1421                     main_menu.Append(help=help, id=new_id, kind=wx.ITEM_NORMAL, text=_("Append ")+help)
  1421                     main_menu.Append(help=help, id=new_id, kind=wx.ITEM_NORMAL, text=_("Append ")+help)
  1422                     self.Bind(wx.EVT_MENU, self._GetAddConfNodeFunction(name, confnode), id=new_id)
  1422                     self.Bind(wx.EVT_MENU, self._GetAddConfNodeFunction(name, confnode), id=new_id)
  1423             self.PopupMenuXY(main_menu)
  1423             self.PopupMenuXY(main_menu)
  1424             main_menu.Destroy()
  1424             main_menu.Destroy()
  1772         wx.CallAfter(self.RefreshConfNodeMenu)
  1772         wx.CallAfter(self.RefreshConfNodeMenu)
  1773         IDEFrame.OnPageClose(self, event)
  1773         IDEFrame.OnPageClose(self, event)
  1774     
  1774     
  1775     def GetAddButtonFunction(self, confnode, window):
  1775     def GetAddButtonFunction(self, confnode, window):
  1776         def AddButtonFunction(event):
  1776         def AddButtonFunction(event):
  1777             if confnode and len(confnode.PlugChildsTypes) > 0:
  1777             if confnode and len(confnode.CTNChildrenTypes) > 0:
  1778                 confnode_menu = wx.Menu(title='')
  1778                 confnode_menu = wx.Menu(title='')
  1779                 for name, XSDClass, help in confnode.PlugChildsTypes:
  1779                 for name, XSDClass, help in confnode.CTNChildrenTypes:
  1780                     new_id = wx.NewId()
  1780                     new_id = wx.NewId()
  1781                     confnode_menu.Append(help=help, id=new_id, kind=wx.ITEM_NORMAL, text=name)
  1781                     confnode_menu.Append(help=help, id=new_id, kind=wx.ITEM_NORMAL, text=name)
  1782                     self.Bind(wx.EVT_MENU, self._GetAddConfNodeFunction(name, confnode), id=new_id)
  1782                     self.Bind(wx.EVT_MENU, self._GetAddConfNodeFunction(name, confnode), id=new_id)
  1783                 window_pos = window.GetPosition()
  1783                 window_pos = window.GetPosition()
  1784                 wx.CallAfter(self.PLCConfig.PopupMenu, confnode_menu)
  1784                 wx.CallAfter(self.PLCConfig.PopupMenu, confnode_menu)
  1794     def AddConfNode(self, ConfNodeType, confnode):
  1794     def AddConfNode(self, ConfNodeType, confnode):
  1795         if self.CTR.CheckProjectPathPerm():
  1795         if self.CTR.CheckProjectPathPerm():
  1796             dialog = wx.TextEntryDialog(self, _("Please enter a name for confnode:"), _("Add ConfNode"), "", wx.OK|wx.CANCEL)
  1796             dialog = wx.TextEntryDialog(self, _("Please enter a name for confnode:"), _("Add ConfNode"), "", wx.OK|wx.CANCEL)
  1797             if dialog.ShowModal() == wx.ID_OK:
  1797             if dialog.ShowModal() == wx.ID_OK:
  1798                 ConfNodeName = dialog.GetValue()
  1798                 ConfNodeName = dialog.GetValue()
  1799                 confnode.PlugAddChild(ConfNodeName, ConfNodeType)
  1799                 confnode.CTNAddChild(ConfNodeName, ConfNodeType)
  1800                 self.CTR.RefreshConfNodesBlockLists()
  1800                 self.CTR.RefreshConfNodesBlockLists()
  1801                 self._Refresh(TITLE, FILEMENU)
  1801                 self._Refresh(TITLE, FILEMENU)
  1802                 self.RefreshConfNodeTree()
  1802                 self.RefreshConfNodeTree()
  1803             dialog.Destroy()
  1803             dialog.Destroy()
  1804     
  1804     
  1805     def DeleteConfNode(self, confnode):
  1805     def DeleteConfNode(self, confnode):
  1806         if self.CTR.CheckProjectPathPerm():
  1806         if self.CTR.CheckProjectPathPerm():
  1807             dialog = wx.MessageDialog(self, _("Really delete confnode ?"), _("Remove confnode"), wx.YES_NO|wx.NO_DEFAULT)
  1807             dialog = wx.MessageDialog(self, _("Really delete confnode ?"), _("Remove confnode"), wx.YES_NO|wx.NO_DEFAULT)
  1808             if dialog.ShowModal() == wx.ID_YES:
  1808             if dialog.ShowModal() == wx.ID_YES:
  1809                 self.ConfNodeInfos.pop(confnode)
  1809                 self.ConfNodeInfos.pop(confnode)
  1810                 confnode.PlugRemove()
  1810                 confnode.CTNRemove()
  1811                 del confnode
  1811                 del confnode
  1812                 self.CTR.RefreshConfNodesBlockLists()
  1812                 self.CTR.RefreshConfNodesBlockLists()
  1813                 self._Refresh(TITLE, FILEMENU)
  1813                 self._Refresh(TITLE, FILEMENU)
  1814                 self.RefreshConfNodeTree()
  1814                 self.RefreshConfNodeTree()
  1815             dialog.Destroy()
  1815             dialog.Destroy()