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