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