Viewer.py
changeset 239 d12779e971bd
parent 235 7b58a3b5b6ec
child 243 c5da8b706cde
equal deleted inserted replaced
238:389f2046e495 239:d12779e971bd
   106                     message = "Function Blocks can't be used by Functions!"
   106                     message = "Function Blocks can't be used by Functions!"
   107                 elif self.ParentWindow.Controler.PouIsUsedBy(name, values[0]):
   107                 elif self.ParentWindow.Controler.PouIsUsedBy(name, values[0]):
   108                     message = "\"%s\" is already used by \"%s\"!"%(name, values[0])
   108                     message = "\"%s\" is already used by \"%s\"!"%(name, values[0])
   109                 else:
   109                 else:
   110                     blockname = values[2]
   110                     blockname = values[2]
       
   111                     if len(values) > 3:
       
   112                         blockinputs = values[3]
       
   113                     else:
       
   114                         blockinputs = None
   111                     if values[1] != "function" and blockname == "":
   115                     if values[1] != "function" and blockname == "":
   112                         dialog = wx.TextEntryDialog(self.ParentWindow, "Block name", "Please enter a block name", "", wx.OK|wx.CANCEL|wx.CENTRE)
   116                         dialog = wx.TextEntryDialog(self.ParentWindow.ParentWindow, "Block name", "Please enter a block name", "", wx.OK|wx.CANCEL|wx.CENTRE)
   113                         if dialog.ShowModal():
   117                         if dialog.ShowModal() == wx.ID_OK:
   114                             blockname = dialog.GetValue()
   118                             blockname = dialog.GetValue()
       
   119                         else:
       
   120                             return
   115                         dialog.Destroy()
   121                         dialog.Destroy()
   116                     if blockname.upper() in [name.upper() for name in self.ParentWindow.Controler.GetProjectPouNames()]:
   122                     if blockname.upper() in [name.upper() for name in self.ParentWindow.Controler.GetProjectPouNames()]:
   117                         message = "\"%s\" pou already exists!"%blockname
   123                         message = "\"%s\" pou already exists!"%blockname
   118                     elif blockname.upper() in [name.upper() for name in self.ParentWindow.Controler.GetEditedElementVariables(self.ParentWindow.GetTagName())]:
   124                     elif blockname.upper() in [name.upper() for name in self.ParentWindow.Controler.GetEditedElementVariables(self.ParentWindow.GetTagName())]:
   119                         message = "\"%s\" element for this pou already exists!"%blockname
   125                         message = "\"%s\" element for this pou already exists!"%blockname
   120                     else:
   126                     else:
   121                         id = self.ParentWindow.GetNewId()
   127                         id = self.ParentWindow.GetNewId()
   122                         block = FBD_Block(self.ParentWindow, values[0], blockname, id)
   128                         block = FBD_Block(self.ParentWindow, values[0], blockname, id, inputs = blockinputs)
   123                         width, height = block.GetMinSize()
   129                         width, height = block.GetMinSize()
   124                         if scaling is not None:
   130                         if scaling is not None:
   125                             x = round(float(x) / float(scaling[0])) * scaling[0]
   131                             x = round(float(x) / float(scaling[0])) * scaling[0]
   126                             y = round(float(y) / float(scaling[1])) * scaling[1]
   132                             y = round(float(y) / float(scaling[1])) * scaling[1]
   127                             width = round(float(width) / float(scaling[0]) + 0.5) * scaling[0]
   133                             width = round(float(width) / float(scaling[0]) + 0.5) * scaling[0]
  1430             self.Controler.AddEditedElementBlock(self.TagName, id, values["type"], values.get("name", None))
  1436             self.Controler.AddEditedElementBlock(self.TagName, id, values["type"], values.get("name", None))
  1431             self.RefreshBlockModel(block)
  1437             self.RefreshBlockModel(block)
  1432             self.RefreshBuffer()
  1438             self.RefreshBuffer()
  1433             self.RefreshScrollBars()
  1439             self.RefreshScrollBars()
  1434             self.ParentWindow.RefreshVariablePanel(self.TagName)
  1440             self.ParentWindow.RefreshVariablePanel(self.TagName)
       
  1441             self.ParentWindow.RefreshInstancesTree()
  1435             block.Refresh()
  1442             block.Refresh()
  1436         dialog.Destroy()
  1443         dialog.Destroy()
  1437     
  1444     
  1438     def AddNewVariable(self, bbox):
  1445     def AddNewVariable(self, bbox):
  1439         dialog = VariablePropertiesDialog(self.ParentWindow, self.Controler)
  1446         dialog = VariablePropertiesDialog(self.ParentWindow, self.Controler)
  1719             if old_values["executionOrder"] != new_values["executionOrder"]:
  1726             if old_values["executionOrder"] != new_values["executionOrder"]:
  1720                 self.RefreshView()
  1727                 self.RefreshView()
  1721             self.RefreshBuffer()
  1728             self.RefreshBuffer()
  1722             self.RefreshScrollBars()
  1729             self.RefreshScrollBars()
  1723             self.ParentWindow.RefreshVariablePanel(self.TagName)
  1730             self.ParentWindow.RefreshVariablePanel(self.TagName)
       
  1731             self.ParentWindow.RefreshInstancesTree()
  1724             block.Refresh(rect)
  1732             block.Refresh(rect)
  1725         dialog.Destroy()
  1733         dialog.Destroy()
  1726 
  1734 
  1727     def EditVariableContent(self, variable):
  1735     def EditVariableContent(self, variable):
  1728         dialog = VariablePropertiesDialog(self.ParentWindow, self.Controler)
  1736         dialog = VariablePropertiesDialog(self.ParentWindow, self.Controler)
  2103         self.RemoveBlock(block)
  2111         self.RemoveBlock(block)
  2104         self.Controler.RemoveEditedElementInstance(self.TagName, block.GetId())
  2112         self.Controler.RemoveEditedElementInstance(self.TagName, block.GetId())
  2105         for element in elements:
  2113         for element in elements:
  2106             element.RefreshModel()
  2114             element.RefreshModel()
  2107         wx.CallAfter(self.ParentWindow.RefreshVariablePanel, self.TagName)
  2115         wx.CallAfter(self.ParentWindow.RefreshVariablePanel, self.TagName)
  2108 
  2116         wx.CallAfter(self.ParentWindow.RefreshInstancesTree)
       
  2117         
  2109     def DeleteVariable(self, variable):
  2118     def DeleteVariable(self, variable):
  2110         connectors = variable.GetConnectors()
  2119         connectors = variable.GetConnectors()
  2111         if connectors["output"]:
  2120         if connectors["output"]:
  2112             elements = connectors["output"].GetConnectedBlocks()
  2121             elements = connectors["output"].GetConnectedBlocks()
  2113         else:
  2122         else:
  2236             rect = self.SelectedElement.GetRedrawRect(1, 1)
  2245             rect = self.SelectedElement.GetRedrawRect(1, 1)
  2237             self.SelectedElement.Delete()
  2246             self.SelectedElement.Delete()
  2238             self.SelectedElement = None
  2247             self.SelectedElement = None
  2239             self.RefreshBuffer()
  2248             self.RefreshBuffer()
  2240             self.RefreshScrollBars()
  2249             self.RefreshScrollBars()
       
  2250             self.ParentWindow.RefreshVariablePanel(self.TagName)
       
  2251             self.ParentWindow.RefreshInstancesTree()
  2241             self.RefreshRect(self.GetScrolledRect(rect), False)
  2252             self.RefreshRect(self.GetScrolledRect(rect), False)
  2242         
  2253         
  2243     def Copy(self):
  2254     def Copy(self):
  2244         if self.IsBlock(self.SelectedElement) or self.IsComment(self.SelectedElement):
  2255         if self.IsBlock(self.SelectedElement) or self.IsComment(self.SelectedElement):
  2245             self.ParentWindow.SetCopyBuffer(self.SelectedElement.Clone(self))
  2256             self.ParentWindow.SetCopyBuffer(self.SelectedElement.Clone(self))
  2253             self.SelectedElement = block
  2264             self.SelectedElement = block
  2254             self.SelectedElement.SetSelected(True)
  2265             self.SelectedElement.SetSelected(True)
  2255             self.RefreshBuffer()
  2266             self.RefreshBuffer()
  2256             self.RefreshScrollBars()
  2267             self.RefreshScrollBars()
  2257             self.ParentWindow.RefreshVariablePanel(self.TagName)
  2268             self.ParentWindow.RefreshVariablePanel(self.TagName)
       
  2269             self.ParentWindow.RefreshInstancesTree()
  2258 
  2270 
  2259     def CanAddBlock(self, block):
  2271     def CanAddBlock(self, block):
  2260         if self.CurrentLanguage == "SFC":
  2272         if self.CurrentLanguage == "SFC":
  2261             return True
  2273             return True
  2262         elif self.CurrentLanguage == "LD" and not isinstance(block, (SFC_Step, SFC_Transition, SFC_Divergence, SFC_Jump, SFC_ActionBlock)):
  2274         elif self.CurrentLanguage == "LD" and not isinstance(block, (SFC_Step, SFC_Transition, SFC_Divergence, SFC_Jump, SFC_ActionBlock)):