214 try: |
214 try: |
215 values = eval(event.GetDragText()) |
215 values = eval(event.GetDragText()) |
216 except: |
216 except: |
217 values = event.GetDragText() |
217 values = event.GetDragText() |
218 if isinstance(values, tuple): |
218 if isinstance(values, tuple): |
219 if values[1] in ["functionBlock", "program", "location", "debug"]: |
219 message = None |
|
220 if values[1] in ["functionBlock", "program", "debug"]: |
220 event.SetDragText("") |
221 event.SetDragText("") |
221 elif values[1] == "function": |
222 elif values[1] == "function": |
222 event.SetDragText(values[0]) |
223 event.SetDragText(values[0]) |
223 elif values[1] != "location": |
224 elif values[1] == "location": |
224 if values[3] == self.TagName: |
225 pou_name, pou_type = self.Controler.GetEditedElementType(self.TagName, self.Debug) |
225 self.ResetBuffer() |
226 if len(values) > 2 and pou_type == "program": |
226 event.SetDragText(values[0]) |
227 var_name = values[3] |
227 wx.CallAfter(self.RefreshModel) |
228 if var_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames(self.Debug)]: |
|
229 message = _("\"%s\" pou already exists!")%blockname |
|
230 elif var_name.upper() in [name.upper() for name in self.Controler.GetEditedElementVariables(self.TagName, self.Debug)]: |
|
231 message = _("\"%s\" element for this pou already exists!")%blockname |
|
232 else: |
|
233 if values[2] is not None: |
|
234 var_type = values[2] |
|
235 else: |
|
236 var_type = LOCATIONDATATYPES.get(values[0][2], ["BOOL"])[0] |
|
237 self.Controler.AddEditedElementPouVar(self.TagName, var_type, var_name, values[0], values[4]) |
|
238 self.ParentWindow.RefreshVariablePanel(self.TagName) |
|
239 self.RefreshVariableTree() |
|
240 event.SetDragText(var_name) |
228 else: |
241 else: |
229 event.SetDragText("") |
242 event.SetDragText("") |
230 message = wx.MessageDialog(self.ParentWindow, _("Variable don't belong to this POU!"), _("Error"), wx.OK|wx.ICON_ERROR) |
243 elif values[3] == self.TagName: |
231 message.ShowModal() |
244 self.ResetBuffer() |
232 message.Destroy() |
245 event.SetDragText(values[0]) |
|
246 wx.CallAfter(self.RefreshModel) |
|
247 else: |
|
248 message = _("Variable don't belong to this POU!") |
|
249 if message is not None: |
|
250 dialog = wx.MessageDialog(self, message, _("Error"), wx.OK|wx.ICON_ERROR) |
|
251 dialog.ShowModal() |
|
252 dialog.Destroy() |
|
253 event.SetDragText("") |
233 event.Skip() |
254 event.Skip() |
234 |
255 |
235 def SetTextSyntax(self, syntax): |
256 def SetTextSyntax(self, syntax): |
236 self.TextSyntax = syntax |
257 self.TextSyntax = syntax |
237 |
258 |
276 self.ScrollToColumn(0) |
297 self.ScrollToColumn(0) |
277 self.RefreshJumpList() |
298 self.RefreshJumpList() |
278 self.EmptyUndoBuffer() |
299 self.EmptyUndoBuffer() |
279 self.DisableEvents = False |
300 self.DisableEvents = False |
280 |
301 |
281 words = self.TagName.split("::") |
302 self.RefreshVariableTree() |
282 |
|
283 self.Variables = self.GenerateVariableTree([(variable["Name"], variable["Type"], variable["Tree"]) for variable in self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug)]) |
|
284 if self.Controler.GetEditedElementType(self.TagName, self.Debug)[1] == "function" or words[0] == "T" and self.TextSyntax == "IL": |
|
285 self.Variables[words[-1].upper()] = {} |
|
286 |
303 |
287 self.Functions = [] |
304 self.Functions = [] |
288 for category in self.Controler.GetBlockTypes(self.TagName, self.Debug): |
305 for category in self.Controler.GetBlockTypes(self.TagName, self.Debug): |
289 for blocktype in category["list"]: |
306 for blocktype in category["list"]: |
290 if blocktype["type"] == "function" and blocktype["name"] not in self.Keywords and blocktype["name"] not in self.Variables.keys(): |
307 if blocktype["type"] == "function" and blocktype["name"] not in self.Keywords and blocktype["name"] not in self.Variables.keys(): |
293 self.EnumeratedValues = [] |
310 self.EnumeratedValues = [] |
294 for value in self.Controler.GetEnumeratedDataValues(): |
311 for value in self.Controler.GetEnumeratedDataValues(): |
295 self.EnumeratedValues.append(value.upper()) |
312 self.EnumeratedValues.append(value.upper()) |
296 |
313 |
297 self.Colourise(0, -1) |
314 self.Colourise(0, -1) |
|
315 |
|
316 def RefreshVariableTree(self): |
|
317 words = self.TagName.split("::") |
|
318 self.Variables = self.GenerateVariableTree([(variable["Name"], variable["Type"], variable["Tree"]) for variable in self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug)]) |
|
319 if self.Controler.GetEditedElementType(self.TagName, self.Debug)[1] == "function" or words[0] == "T" and self.TextSyntax == "IL": |
|
320 self.Variables[words[-1].upper()] = {} |
298 |
321 |
299 def GenerateVariableTree(self, list): |
322 def GenerateVariableTree(self, list): |
300 tree = {} |
323 tree = {} |
301 for var_name, var_type, (var_tree, var_dimension) in list: |
324 for var_name, var_type, (var_tree, var_dimension) in list: |
302 tree[var_name.upper()] = self.GenerateVariableTree(var_tree) |
325 tree[var_name.upper()] = self.GenerateVariableTree(var_tree) |