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