diff -r f3bb091f803f -r 59e33406eea8 TextViewer.py --- a/TextViewer.py Thu Sep 24 18:18:04 2009 +0200 +++ b/TextViewer.py Thu Sep 24 18:20:07 2009 +0200 @@ -216,20 +216,41 @@ except: values = event.GetDragText() if isinstance(values, tuple): - if values[1] in ["functionBlock", "program", "location", "debug"]: + message = None + if values[1] in ["functionBlock", "program", "debug"]: event.SetDragText("") elif values[1] == "function": event.SetDragText(values[0]) - elif values[1] != "location": - if values[3] == self.TagName: - self.ResetBuffer() - event.SetDragText(values[0]) - wx.CallAfter(self.RefreshModel) + elif values[1] == "location": + pou_name, pou_type = self.Controler.GetEditedElementType(self.TagName, self.Debug) + if len(values) > 2 and pou_type == "program": + var_name = values[3] + if var_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames(self.Debug)]: + message = _("\"%s\" pou already exists!")%blockname + elif var_name.upper() in [name.upper() for name in self.Controler.GetEditedElementVariables(self.TagName, self.Debug)]: + message = _("\"%s\" element for this pou already exists!")%blockname + else: + if values[2] is not None: + var_type = values[2] + else: + var_type = LOCATIONDATATYPES.get(values[0][2], ["BOOL"])[0] + self.Controler.AddEditedElementPouVar(self.TagName, var_type, var_name, values[0], values[4]) + self.ParentWindow.RefreshVariablePanel(self.TagName) + self.RefreshVariableTree() + event.SetDragText(var_name) else: event.SetDragText("") - message = wx.MessageDialog(self.ParentWindow, _("Variable don't belong to this POU!"), _("Error"), wx.OK|wx.ICON_ERROR) - message.ShowModal() - message.Destroy() + elif values[3] == self.TagName: + self.ResetBuffer() + event.SetDragText(values[0]) + wx.CallAfter(self.RefreshModel) + else: + message = _("Variable don't belong to this POU!") + if message is not None: + dialog = wx.MessageDialog(self, message, _("Error"), wx.OK|wx.ICON_ERROR) + dialog.ShowModal() + dialog.Destroy() + event.SetDragText("") event.Skip() def SetTextSyntax(self, syntax): @@ -278,11 +299,7 @@ self.EmptyUndoBuffer() self.DisableEvents = False - words = self.TagName.split("::") - - self.Variables = self.GenerateVariableTree([(variable["Name"], variable["Type"], variable["Tree"]) for variable in self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug)]) - if self.Controler.GetEditedElementType(self.TagName, self.Debug)[1] == "function" or words[0] == "T" and self.TextSyntax == "IL": - self.Variables[words[-1].upper()] = {} + self.RefreshVariableTree() self.Functions = [] for category in self.Controler.GetBlockTypes(self.TagName, self.Debug): @@ -296,6 +313,12 @@ self.Colourise(0, -1) + def RefreshVariableTree(self): + words = self.TagName.split("::") + self.Variables = self.GenerateVariableTree([(variable["Name"], variable["Type"], variable["Tree"]) for variable in self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug)]) + if self.Controler.GetEditedElementType(self.TagName, self.Debug)[1] == "function" or words[0] == "T" and self.TextSyntax == "IL": + self.Variables[words[-1].upper()] = {} + def GenerateVariableTree(self, list): tree = {} for var_name, var_type, (var_tree, var_dimension) in list: