TextViewer.py
changeset 437 59e33406eea8
parent 411 9ab97d517ae8
child 448 93a2f2034f98
equal deleted inserted replaced
436:f3bb091f803f 437:59e33406eea8
   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)