controls/VariablePanel.py
changeset 1128 86527a6f06fb
parent 1122 84de51ab40d2
child 1140 80a91fc91595
equal deleted inserted replaced
1127:5315f26642e0 1128:86527a6f06fb
   165                         else:
   165                         else:
   166                             grid.SetReadOnly(row, col, True)
   166                             grid.SetReadOnly(row, col, True)
   167                     elif col != 0 and self.GetValueByName(row, "Edit"):
   167                     elif col != 0 and self.GetValueByName(row, "Edit"):
   168                         grid.SetReadOnly(row, col, False)
   168                         grid.SetReadOnly(row, col, False)
   169                         if colname == "Name":
   169                         if colname == "Name":
   170                             if self.Parent.PouIsUsed and var_class in ["Input", "Output", "InOut"]:
   170                             editor = wx.grid.GridCellTextEditor()
   171                                 grid.SetReadOnly(row, col, True)
   171                             renderer = wx.grid.GridCellStringRenderer()
   172                             else:
       
   173                                 editor = wx.grid.GridCellTextEditor()
       
   174                                 renderer = wx.grid.GridCellStringRenderer()
       
   175                         elif colname == "Initial Value":
   172                         elif colname == "Initial Value":
   176                             if var_class not in ["External", "InOut"]:
   173                             if var_class not in ["External", "InOut"]:
   177                                 if self.Parent.Controler.IsEnumeratedType(var_type):
   174                                 if self.Parent.Controler.IsEnumeratedType(var_type):
   178                                     editor = wx.grid.GridCellChoiceEditor()
   175                                     editor = wx.grid.GridCellChoiceEditor()
   179                                     editor.SetParameters(",".join(self.Parent.Controler.GetEnumeratedDataValues(var_type)))
   176                                     editor.SetParameters(",".join(self.Parent.Controler.GetEnumeratedDataValues(var_type)))
   187                                 editor = LocationCellEditor(self, self.Parent.Controler)
   184                                 editor = LocationCellEditor(self, self.Parent.Controler)
   188                                 renderer = wx.grid.GridCellStringRenderer()
   185                                 renderer = wx.grid.GridCellStringRenderer()
   189                             else:
   186                             else:
   190                                 grid.SetReadOnly(row, col, True)
   187                                 grid.SetReadOnly(row, col, True)
   191                         elif colname == "Class":
   188                         elif colname == "Class":
   192                             if len(self.Parent.ClassList) == 1 or self.Parent.PouIsUsed and var_class in ["Input", "Output", "InOut"]:
   189                             if len(self.Parent.ClassList) == 1:
   193                                 grid.SetReadOnly(row, col, True)
   190                                 grid.SetReadOnly(row, col, True)
   194                             else:
   191                             else:
   195                                 editor = wx.grid.GridCellChoiceEditor()
   192                                 editor = wx.grid.GridCellChoiceEditor()
   196                                 excluded = []
   193                                 excluded = []
   197                                 if self.Parent.PouIsUsed:
       
   198                                     excluded.extend(["Input","Output","InOut"])
       
   199                                 if self.Parent.IsFunctionBlockType(var_type):
   194                                 if self.Parent.IsFunctionBlockType(var_type):
   200                                     excluded.extend(["Local","Temp"])
   195                                     excluded.extend(["Local","Temp"])
   201                                 editor.SetParameters(",".join([_(choice) for choice in self.Parent.ClassList if choice not in excluded]))
   196                                 editor.SetParameters(",".join([_(choice) for choice in self.Parent.ClassList if choice not in excluded]))
   202                     elif colname != "Documentation":
   197                     elif colname != "Documentation":
   203                         grid.SetReadOnly(row, col, True)
   198                         grid.SetReadOnly(row, col, True)
   488                                        "Up": self.UpButton,
   483                                        "Up": self.UpButton,
   489                                        "Down": self.DownButton})
   484                                        "Down": self.DownButton})
   490         self.VariablesGrid.SetEditable(not self.Debug)
   485         self.VariablesGrid.SetEditable(not self.Debug)
   491         
   486         
   492         def _AddVariable(new_row):
   487         def _AddVariable(new_row):
   493             if not self.PouIsUsed or self.Filter not in ["Interface", "Input", "Output", "InOut"]:
   488             if new_row > 0:
   494                 if new_row > 0:
   489                 row_content = self.Values[new_row - 1].copy()
   495                     row_content = self.Values[new_row - 1].copy()
   490                 result = VARIABLE_NAME_SUFFIX_MODEL.search(row_content["Name"])
   496                     result = VARIABLE_NAME_SUFFIX_MODEL.search(row_content["Name"])
   491                 if result is not None:
   497                     if result is not None:
   492                     name = row_content["Name"][:result.start(1)]
   498                         name = row_content["Name"][:result.start(1)]
   493                     suffix = result.group(1)
   499                         suffix = result.group(1)
   494                     if suffix != "":
   500                         if suffix != "":
   495                         start_idx = int(suffix)
   501                             start_idx = int(suffix)
       
   502                         else:
       
   503                             start_idx = 0
       
   504                     else:
   496                     else:
   505                         name = row_content["Name"]
       
   506                         start_idx = 0
   497                         start_idx = 0
   507                     row_content["Name"] = self.Controler.GenerateNewName(
       
   508                         self.TagName, None, name + "%d", start_idx)
       
   509                 else:
   498                 else:
   510                     row_content = self.DefaultValue.copy()
   499                     name = row_content["Name"]
   511                     if self.Filter in self.DefaultTypes:
   500                     start_idx = 0
   512                         row_content["Class"] = self.DefaultTypes[self.Filter]
   501                 row_content["Name"] = self.Controler.GenerateNewName(
   513                     else:
   502                     self.TagName, None, name + "%d", start_idx)
   514                         row_content["Class"] = self.Filter
   503             else:
   515                 if self.Filter == "All" and len(self.Values) > 0:
   504                 row_content = self.DefaultValue.copy()
   516                     self.Values.insert(new_row, row_content)
   505                 if self.Filter in self.DefaultTypes:
       
   506                     row_content["Class"] = self.DefaultTypes[self.Filter]
   517                 else:
   507                 else:
   518                     self.Values.append(row_content)
   508                     row_content["Class"] = self.Filter
   519                     new_row = self.Table.GetNumberRows()
   509             if self.Filter == "All" and len(self.Values) > 0:
   520                 self.SaveValues()
   510                 self.Values.insert(new_row, row_content)
   521                 self.RefreshValues()
   511             else:
   522                 return new_row
   512                 self.Values.append(row_content)
   523             return self.VariablesGrid.GetGridCursorRow()
   513                 new_row = self.Table.GetNumberRows()
       
   514             self.SaveValues()
       
   515             self.RefreshValues()
       
   516             return new_row
   524         setattr(self.VariablesGrid, "_AddRow", _AddVariable)
   517         setattr(self.VariablesGrid, "_AddRow", _AddVariable)
   525         
   518         
   526         def _DeleteVariable(row):
   519         def _DeleteVariable(row):
   527             if (self.Table.GetValueByName(row, "Edit") and 
   520             if self.Table.GetValueByName(row, "Edit"):
   528                 (not self.PouIsUsed or self.Table.GetValueByName(row, "Class") not in ["Input", "Output", "InOut"])):
       
   529                 self.Values.remove(self.Table.GetRow(row))
   521                 self.Values.remove(self.Table.GetRow(row))
   530                 self.SaveValues()
   522                 self.SaveValues()
   531                 self.RefreshValues()
   523                 self.RefreshValues()
   532         setattr(self.VariablesGrid, "_DeleteRow", _DeleteVariable)
   524         setattr(self.VariablesGrid, "_DeleteRow", _DeleteVariable)
   533             
   525             
   534         def _MoveVariable(row, move):
   526         def _MoveVariable(row, move):
   535             if (self.Filter == "All" and 
   527             if self.Filter == "All":
   536                 (not self.PouIsUsed or self.Table.GetValueByName(row, "Class") not in ["Input", "Output", "InOut"])):
       
   537                 new_row = max(0, min(row + move, len(self.Values) - 1))
   528                 new_row = max(0, min(row + move, len(self.Values) - 1))
   538                 if new_row != row:
   529                 if new_row != row:
   539                     self.Values.insert(new_row, self.Values.pop(row))
   530                     self.Values.insert(new_row, self.Values.pop(row))
   540                     self.SaveValues()
   531                     self.SaveValues()
   541                     self.RefreshValues()
   532                     self.RefreshValues()
   550                 row_edit = True
   541                 row_edit = True
   551                 row = 0
   542                 row = 0
   552                 if table_length > 0:
   543                 if table_length > 0:
   553                     row = self.VariablesGrid.GetGridCursorRow()
   544                     row = self.VariablesGrid.GetGridCursorRow()
   554                     row_edit = self.Table.GetValueByName(row, "Edit")
   545                     row_edit = self.Table.GetValueByName(row, "Edit")
   555                     if self.PouIsUsed:
   546                 self.AddButton.Enable(not self.Debug)
   556                         row_class = self.Table.GetValueByName(row, "Class")
   547                 self.DeleteButton.Enable(not self.Debug and (table_length > 0 and row_edit))
   557                 self.AddButton.Enable(not self.Debug and (not self.PouIsUsed or self.Filter not in ["Interface", "Input", "Output", "InOut"]))
   548                 self.UpButton.Enable(not self.Debug and (table_length > 0 and row > 0 and self.Filter == "All"))
   558                 self.DeleteButton.Enable(not self.Debug and (table_length > 0 and row_edit and row_class not in ["Input", "Output", "InOut"]))
   549                 self.DownButton.Enable(not self.Debug and (table_length > 0 and row < table_length - 1 and self.Filter == "All"))
   559                 self.UpButton.Enable(not self.Debug and (table_length > 0 and row > 0 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"]))
       
   560                 self.DownButton.Enable(not self.Debug and (table_length > 0 and row < table_length - 1 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"]))
       
   561         setattr(self.VariablesGrid, "RefreshButtons", _RefreshButtons)
   550         setattr(self.VariablesGrid, "RefreshButtons", _RefreshButtons)
   562         
   551         
   563         self.VariablesGrid.SetRowLabelSize(0)
   552         self.VariablesGrid.SetRowLabelSize(0)
   564         for col in range(self.Table.GetNumberCols()):
   553         for col in range(self.Table.GetNumberCols()):
   565             attr = wx.grid.GridCellAttr()
   554             attr = wx.grid.GridCellAttr()
   590         returnType = None
   579         returnType = None
   591         description = None
   580         description = None
   592         
   581         
   593         words = self.TagName.split("::")
   582         words = self.TagName.split("::")
   594         if self.ElementType == "config":
   583         if self.ElementType == "config":
   595             self.PouIsUsed = False
       
   596             self.Values = self.Controler.GetConfigurationGlobalVars(words[1], self.Debug)
   584             self.Values = self.Controler.GetConfigurationGlobalVars(words[1], self.Debug)
   597         elif self.ElementType == "resource":
   585         elif self.ElementType == "resource":
   598             self.PouIsUsed = False
       
   599             self.Values = self.Controler.GetConfigurationResourceGlobalVars(words[1], words[2], self.Debug)
   586             self.Values = self.Controler.GetConfigurationResourceGlobalVars(words[1], words[2], self.Debug)
   600         else:
   587         else:
   601             if self.ElementType == "function":
   588             if self.ElementType == "function":
   602                 self.ReturnType.Clear()
   589                 self.ReturnType.Clear()
   603                 for data_type in self.Controler.GetDataTypes(self.TagName, debug=self.Debug):
   590                 for data_type in self.Controler.GetDataTypes(self.TagName, debug=self.Debug):
   604                     self.ReturnType.Append(data_type)
   591                     self.ReturnType.Append(data_type)
   605                 returnType = self.Controler.GetEditedElementInterfaceReturnType(self.TagName)
   592                 returnType = self.Controler.GetEditedElementInterfaceReturnType(self.TagName)
   606             description = self.Controler.GetPouDescription(words[1])
   593             description = self.Controler.GetPouDescription(words[1])
   607             self.PouIsUsed = self.Controler.PouIsUsed(words[1])
       
   608             self.Values = self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug)
   594             self.Values = self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug)
   609         
   595         
   610         if returnType is not None:
   596         if returnType is not None:
   611             self.ReturnType.SetStringSelection(returnType)
   597             self.ReturnType.SetStringSelection(returnType)
   612             self.ReturnType.Enable(not self.Debug)
   598             self.ReturnType.Enable(not self.Debug)