459 def _init_ctrls(self, prnt): |
460 def _init_ctrls(self, prnt): |
460 wx.Panel.__init__(self, id=ID_VARIABLEEDITORPANEL, |
461 wx.Panel.__init__(self, id=ID_VARIABLEEDITORPANEL, |
461 name='VariableEditorPanel', parent=prnt, pos=wx.Point(0, 0), |
462 name='VariableEditorPanel', parent=prnt, pos=wx.Point(0, 0), |
462 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
463 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
463 |
464 |
464 self.VariablesGrid = wx.grid.Grid(id=ID_VARIABLEEDITORPANELVARIABLESGRID, |
465 self.VariablesGrid = CustomGrid(id=ID_VARIABLEEDITORPANELVARIABLESGRID, |
465 name='VariablesGrid', parent=self, pos=wx.Point(0, 0), |
466 name='VariablesGrid', parent=self, pos=wx.Point(0, 0), |
466 size=wx.Size(0, 0), style=wx.VSCROLL) |
467 size=wx.Size(0, 0), style=wx.VSCROLL) |
467 self.VariablesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, |
468 self.VariablesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, |
468 'Sans')) |
469 'Sans')) |
469 self.VariablesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL, |
470 self.VariablesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL, |
470 False, 'Sans')) |
471 False, 'Sans')) |
471 self.VariablesGrid.SetSelectionBackground(wx.WHITE) |
472 self.VariablesGrid.SetSelectionBackground(wx.WHITE) |
472 self.VariablesGrid.SetSelectionForeground(wx.BLACK) |
473 self.VariablesGrid.SetSelectionForeground(wx.BLACK) |
473 if wx.VERSION >= (2, 6, 0): |
474 if wx.VERSION >= (2, 6, 0): |
474 self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnVariablesGridCellChange) |
475 self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnVariablesGridCellChange) |
475 self.VariablesGrid.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnVariablesGridSelectCell) |
|
476 self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.OnVariablesGridCellLeftClick) |
476 self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.OnVariablesGridCellLeftClick) |
477 self.VariablesGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, self.OnVariablesGridEditorShown) |
477 self.VariablesGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, self.OnVariablesGridEditorShown) |
478 #self.VariablesGrid.Bind(wx.EVT_KEY_DOWN, self.OnChar) |
|
479 else: |
478 else: |
480 wx.grid.EVT_GRID_CELL_CHANGE(self.VariablesGrid, self.OnVariablesGridCellChange) |
479 wx.grid.EVT_GRID_CELL_CHANGE(self.VariablesGrid, self.OnVariablesGridCellChange) |
481 wx.grid.EVT_GRID_SELECT_CELL(self.VariablesGrid, self.OnVariablesGridSelectCell) |
|
482 wx.grid.EVT_GRID_CELL_LEFT_CLICK(self.VariablesGrid, self.OnVariablesGridCellLeftClick) |
480 wx.grid.EVT_GRID_CELL_LEFT_CLICK(self.VariablesGrid, self.OnVariablesGridCellLeftClick) |
483 wx.grid.EVT_GRID_EDITOR_SHOWN(self.VariablesGrid, self.OnVariablesGridEditorShown) |
481 wx.grid.EVT_GRID_EDITOR_SHOWN(self.VariablesGrid, self.OnVariablesGridEditorShown) |
484 #wx.EVT_KEY_DOWN(self.VariablesGrid, self.OnChar) |
|
485 self.VariablesGrid.SetDropTarget(VariableDropTarget(self)) |
|
486 |
482 |
487 self.ControlPanel = wx.ScrolledWindow(id=ID_VARIABLEEDITORCONTROLPANEL, |
483 self.ControlPanel = wx.ScrolledWindow(id=ID_VARIABLEEDITORCONTROLPANEL, |
488 name='ControlPanel', parent=self, pos=wx.Point(0, 0), |
484 name='ControlPanel', parent=self, pos=wx.Point(0, 0), |
489 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
485 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
490 self.ControlPanel.SetScrollRate(0, 10) |
486 self.ControlPanel.SetScrollRate(0, 10) |
508 self.Bind(wx.EVT_COMBOBOX, self.OnClassFilter, id=ID_VARIABLEEDITORPANELCLASSFILTER) |
504 self.Bind(wx.EVT_COMBOBOX, self.OnClassFilter, id=ID_VARIABLEEDITORPANELCLASSFILTER) |
509 |
505 |
510 self.AddButton = wx.Button(id=ID_VARIABLEEDITORPANELADDBUTTON, label=_('Add'), |
506 self.AddButton = wx.Button(id=ID_VARIABLEEDITORPANELADDBUTTON, label=_('Add'), |
511 name='AddButton', parent=self.ControlPanel, pos=wx.Point(0, 0), |
507 name='AddButton', parent=self.ControlPanel, pos=wx.Point(0, 0), |
512 size=wx.DefaultSize, style=0) |
508 size=wx.DefaultSize, style=0) |
513 self.Bind(wx.EVT_BUTTON, self.OnAddButton, id=ID_VARIABLEEDITORPANELADDBUTTON) |
509 |
514 |
|
515 self.DeleteButton = wx.Button(id=ID_VARIABLEEDITORPANELDELETEBUTTON, label=_('Delete'), |
510 self.DeleteButton = wx.Button(id=ID_VARIABLEEDITORPANELDELETEBUTTON, label=_('Delete'), |
516 name='DeleteButton', parent=self.ControlPanel, pos=wx.Point(0, 0), |
511 name='DeleteButton', parent=self.ControlPanel, pos=wx.Point(0, 0), |
517 size=wx.DefaultSize, style=0) |
512 size=wx.DefaultSize, style=0) |
518 self.Bind(wx.EVT_BUTTON, self.OnDeleteButton, id=ID_VARIABLEEDITORPANELDELETEBUTTON) |
513 |
519 |
|
520 self.UpButton = wx.Button(id=ID_VARIABLEEDITORPANELUPBUTTON, label='^', |
514 self.UpButton = wx.Button(id=ID_VARIABLEEDITORPANELUPBUTTON, label='^', |
521 name='UpButton', parent=self.ControlPanel, pos=wx.Point(0, 0), |
515 name='UpButton', parent=self.ControlPanel, pos=wx.Point(0, 0), |
522 size=wx.Size(32, 32), style=0) |
516 size=wx.Size(32, 32), style=0) |
523 self.Bind(wx.EVT_BUTTON, self.OnUpButton, id=ID_VARIABLEEDITORPANELUPBUTTON) |
517 |
524 |
|
525 self.DownButton = wx.Button(id=ID_VARIABLEEDITORPANELDOWNBUTTON, label='v', |
518 self.DownButton = wx.Button(id=ID_VARIABLEEDITORPANELDOWNBUTTON, label='v', |
526 name='DownButton', parent=self.ControlPanel, pos=wx.Point(0, 0), |
519 name='DownButton', parent=self.ControlPanel, pos=wx.Point(0, 0), |
527 size=wx.Size(32, 32), style=0) |
520 size=wx.Size(32, 32), style=0) |
528 self.Bind(wx.EVT_BUTTON, self.OnDownButton, id=ID_VARIABLEEDITORPANELDOWNBUTTON) |
521 |
529 |
|
530 self._init_sizers() |
522 self._init_sizers() |
531 |
523 |
532 def __init__(self, parent, window, controler, element_type): |
524 def __init__(self, parent, window, controler, element_type): |
533 self._init_ctrls(parent) |
525 self._init_ctrls(parent) |
534 self.ParentWindow = window |
526 self.ParentWindow = window |
601 reverse_transfer[choice] = filter |
593 reverse_transfer[choice] = filter |
602 self.ClassFilter.SetStringSelection(_(reverse_transfer[self.Filter])) |
594 self.ClassFilter.SetStringSelection(_(reverse_transfer[self.Filter])) |
603 self.RefreshTypeList() |
595 self.RefreshTypeList() |
604 |
596 |
605 self.VariablesGrid.SetTable(self.Table) |
597 self.VariablesGrid.SetTable(self.Table) |
606 self.VariablesGrid.SetRowLabelSize(0) |
598 self.VariablesGrid.SetButtons({"Add": self.AddButton, |
607 for col in range(self.Table.GetNumberCols()): |
599 "Delete": self.DeleteButton, |
608 attr = wx.grid.GridCellAttr() |
600 "Up": self.UpButton, |
609 attr.SetAlignment(self.ColAlignements[col], wx.ALIGN_CENTRE) |
601 "Down": self.DownButton}) |
610 self.VariablesGrid.SetColAttr(col, attr) |
602 |
611 self.VariablesGrid.SetColMinimalWidth(col, self.ColSizes[col]) |
603 def _AddVariable(new_row): |
612 self.VariablesGrid.AutoSizeColumn(col, False) |
604 if not self.PouIsUsed or self.Filter not in ["Interface", "Input", "Output", "InOut"]: |
613 |
605 row_content = self.DefaultValue.copy() |
614 def __del__(self): |
606 if self.Filter in self.DefaultTypes: |
615 self.RefreshHighlightsTimer.Stop() |
607 row_content["Class"] = self.DefaultTypes[self.Filter] |
616 |
608 else: |
617 def SetTagName(self, tagname): |
609 row_content["Class"] = self.Filter |
618 self.TagName = tagname |
610 if self.Filter == "All" and len(self.Values) > 0: |
619 |
611 self.Values.insert(new_row, row_content) |
620 def IsFunctionBlockType(self, name): |
612 else: |
621 bodytype = self.Controler.GetEditedElementBodyType(self.TagName) |
613 self.Values.append(row_content) |
622 pouname, poutype = self.Controler.GetEditedElementType(self.TagName) |
614 new_row = self.Table.GetNumberRows() |
623 if poutype != "function" and bodytype in ["ST", "IL"]: |
615 self.SaveValues() |
624 return False |
616 self.RefreshValues() |
625 else: |
617 return new_row |
626 return name in self.Controler.GetFunctionBlockTypes(self.TagName) |
618 return self.VariablesGrid.GetGridCursorRow() |
627 |
619 setattr(self.VariablesGrid, "_AddRow", _AddVariable) |
628 def RefreshView(self): |
620 |
629 self.PouNames = self.Controler.GetProjectPouNames() |
621 def _DeleteVariable(row): |
630 |
622 if (self.Table.GetValueByName(row, "Edit") and |
631 words = self.TagName.split("::") |
623 (not self.PouIsUsed or self.Table.GetValueByName(row, "Class") not in ["Input", "Output", "InOut"])): |
632 if self.ElementType == "config": |
624 self.Values.remove(self.Table.GetRow(row)) |
633 self.PouIsUsed = False |
625 self.SaveValues() |
634 returnType = None |
626 self.RefreshValues() |
635 self.Values = self.Controler.GetConfigurationGlobalVars(words[1]) |
627 setattr(self.VariablesGrid, "_DeleteRow", _DeleteVariable) |
636 elif self.ElementType == "resource": |
628 |
637 self.PouIsUsed = False |
629 def _MoveVariable(row, move): |
638 returnType = None |
630 if (self.Filter == "All" and |
639 self.Values = self.Controler.GetConfigurationResourceGlobalVars(words[1], words[2]) |
631 (not self.PouIsUsed or self.Table.GetValueByName(row, "Class") not in ["Input", "Output", "InOut"])): |
640 else: |
632 new_row = max(0, min(row + move, len(self.Values) - 1)) |
641 if self.ElementType == "function": |
633 if new_row != row: |
642 self.ReturnType.Clear() |
634 self.Values.insert(new_row, self.Values.pop(row)) |
643 for base_type in self.Controler.GetDataTypes(self.TagName, True): |
635 self.SaveValues() |
644 self.ReturnType.Append(base_type) |
636 self.RefreshValues() |
645 returnType = self.Controler.GetEditedElementInterfaceReturnType(self.TagName) |
637 return new_row |
646 else: |
638 return row |
647 returnType = None |
639 setattr(self.VariablesGrid, "_MoveRow", _MoveVariable) |
648 self.PouIsUsed = self.Controler.PouIsUsed(words[1]) |
640 |
649 self.Values = self.Controler.GetEditedElementInterfaceVars(self.TagName) |
641 def _RefreshButtons(): |
650 |
|
651 if returnType is not None: |
|
652 self.ReturnType.SetStringSelection(returnType) |
|
653 self.ReturnType.Enable(True) |
|
654 self.staticText1.Show() |
|
655 self.ReturnType.Show() |
|
656 else: |
|
657 self.ReturnType.Enable(False) |
|
658 self.staticText1.Hide() |
|
659 self.ReturnType.Hide() |
|
660 |
|
661 self.RefreshValues() |
|
662 self.RefreshButtons() |
|
663 |
|
664 def OnReturnTypeChanged(self, event): |
|
665 words = self.TagName.split("::") |
|
666 self.Controler.SetPouInterfaceReturnType(words[1], self.ReturnType.GetStringSelection()) |
|
667 self.Controler.BufferProject() |
|
668 self.ParentWindow.RefreshEditor(variablepanel = False) |
|
669 self.ParentWindow._Refresh(TITLE, FILEMENU, EDITMENU, INSTANCESTREE, LIBRARYTREE) |
|
670 event.Skip() |
|
671 |
|
672 def OnClassFilter(self, event): |
|
673 self.Filter = self.FilterChoiceTransfer[VARIABLE_CHOICES_DICT[self.ClassFilter.GetStringSelection()]] |
|
674 self.RefreshTypeList() |
|
675 self.RefreshValues() |
|
676 self.RefreshButtons() |
|
677 event.Skip() |
|
678 |
|
679 def RefreshTypeList(self): |
|
680 if self.Filter == "All": |
|
681 self.ClassList = [self.FilterChoiceTransfer[choice] for choice in self.FilterChoices if self.FilterChoiceTransfer[choice] not in ["All","Interface","Variables"]] |
|
682 elif self.Filter == "Interface": |
|
683 self.ClassList = ["Input","Output","InOut","External"] |
|
684 elif self.Filter == "Variables": |
|
685 self.ClassList = ["Local","Temp"] |
|
686 else: |
|
687 self.ClassList = [self.Filter] |
|
688 |
|
689 def RefreshButtons(self): |
|
690 if getattr(self, "Table", None): |
|
691 table_length = len(self.Table.data) |
642 table_length = len(self.Table.data) |
692 row_class = None |
643 row_class = None |
693 row_edit = True |
644 row_edit = True |
694 row = 0 |
645 row = 0 |
695 if table_length > 0: |
646 if table_length > 0: |
699 row_class = self.Table.GetValueByName(row, "Class") |
650 row_class = self.Table.GetValueByName(row, "Class") |
700 self.AddButton.Enable(not self.PouIsUsed or self.Filter not in ["Interface", "Input", "Output", "InOut"]) |
651 self.AddButton.Enable(not self.PouIsUsed or self.Filter not in ["Interface", "Input", "Output", "InOut"]) |
701 self.DeleteButton.Enable(table_length > 0 and row_edit and row_class not in ["Input", "Output", "InOut"]) |
652 self.DeleteButton.Enable(table_length > 0 and row_edit and row_class not in ["Input", "Output", "InOut"]) |
702 self.UpButton.Enable(table_length > 0 and row > 0 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"]) |
653 self.UpButton.Enable(table_length > 0 and row > 0 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"]) |
703 self.DownButton.Enable(table_length > 0 and row < table_length - 1 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"]) |
654 self.DownButton.Enable(table_length > 0 and row < table_length - 1 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"]) |
704 |
655 setattr(self.VariablesGrid, "RefreshButtons", _RefreshButtons) |
705 def CloseVariablesGridEditControl(self): |
656 |
706 row = self.VariablesGrid.GetGridCursorRow() |
657 self.VariablesGrid.SetRowLabelSize(0) |
707 col = self.VariablesGrid.GetGridCursorCol() |
658 for col in range(self.Table.GetNumberCols()): |
708 self.VariablesGrid.SetGridCursor(row, col) |
659 attr = wx.grid.GridCellAttr() |
709 |
660 attr.SetAlignment(self.ColAlignements[col], wx.ALIGN_CENTRE) |
710 def OnAddButton(self, event): |
661 self.VariablesGrid.SetColAttr(col, attr) |
711 self.CloseVariablesGridEditControl() |
662 self.VariablesGrid.SetColMinimalWidth(col, self.ColSizes[col]) |
712 new_row = self.DefaultValue.copy() |
663 self.VariablesGrid.AutoSizeColumn(col, False) |
713 if self.Filter in self.DefaultTypes: |
664 |
714 new_row["Class"] = self.DefaultTypes[self.Filter] |
665 def __del__(self): |
715 else: |
666 self.RefreshHighlightsTimer.Stop() |
716 new_row["Class"] = self.Filter |
667 |
717 if self.Filter == "All" and len(self.Values) > 0: |
668 def SetTagName(self, tagname): |
718 row_index = self.VariablesGrid.GetGridCursorRow() + 1 |
669 self.TagName = tagname |
719 self.Values.insert(row_index, new_row) |
670 |
720 else: |
671 def IsFunctionBlockType(self, name): |
721 row_index = -1 |
672 bodytype = self.Controler.GetEditedElementBodyType(self.TagName) |
722 self.Values.append(new_row) |
673 pouname, poutype = self.Controler.GetEditedElementType(self.TagName) |
723 self.SaveValues() |
674 if poutype != "function" and bodytype in ["ST", "IL"]: |
724 self.RefreshValues(row_index) |
675 return False |
725 self.RefreshButtons() |
676 else: |
|
677 return name in self.Controler.GetFunctionBlockTypes(self.TagName) |
|
678 |
|
679 def RefreshView(self): |
|
680 self.PouNames = self.Controler.GetProjectPouNames() |
|
681 |
|
682 words = self.TagName.split("::") |
|
683 if self.ElementType == "config": |
|
684 self.PouIsUsed = False |
|
685 returnType = None |
|
686 self.Values = self.Controler.GetConfigurationGlobalVars(words[1]) |
|
687 elif self.ElementType == "resource": |
|
688 self.PouIsUsed = False |
|
689 returnType = None |
|
690 self.Values = self.Controler.GetConfigurationResourceGlobalVars(words[1], words[2]) |
|
691 else: |
|
692 if self.ElementType == "function": |
|
693 self.ReturnType.Clear() |
|
694 for base_type in self.Controler.GetDataTypes(self.TagName, True): |
|
695 self.ReturnType.Append(base_type) |
|
696 returnType = self.Controler.GetEditedElementInterfaceReturnType(self.TagName) |
|
697 else: |
|
698 returnType = None |
|
699 self.PouIsUsed = self.Controler.PouIsUsed(words[1]) |
|
700 self.Values = self.Controler.GetEditedElementInterfaceVars(self.TagName) |
|
701 |
|
702 if returnType is not None: |
|
703 self.ReturnType.SetStringSelection(returnType) |
|
704 self.ReturnType.Enable(True) |
|
705 self.staticText1.Show() |
|
706 self.ReturnType.Show() |
|
707 else: |
|
708 self.ReturnType.Enable(False) |
|
709 self.staticText1.Hide() |
|
710 self.ReturnType.Hide() |
|
711 |
|
712 self.RefreshValues() |
|
713 self.VariablesGrid.RefreshButtons() |
|
714 |
|
715 def OnReturnTypeChanged(self, event): |
|
716 words = self.TagName.split("::") |
|
717 self.Controler.SetPouInterfaceReturnType(words[1], self.ReturnType.GetStringSelection()) |
|
718 self.Controler.BufferProject() |
|
719 self.ParentWindow.RefreshEditor(variablepanel = False) |
|
720 self.ParentWindow._Refresh(TITLE, FILEMENU, EDITMENU, INSTANCESTREE, LIBRARYTREE) |
726 event.Skip() |
721 event.Skip() |
727 |
722 |
728 def OnDeleteButton(self, event): |
723 def OnClassFilter(self, event): |
729 self.CloseVariablesGridEditControl() |
724 self.Filter = self.FilterChoiceTransfer[VARIABLE_CHOICES_DICT[self.ClassFilter.GetStringSelection()]] |
730 row_index = self.Table.GetRow(self.VariablesGrid.GetGridCursorRow()) |
725 self.RefreshTypeList() |
731 self.Values.remove(row_index) |
726 self.RefreshValues() |
732 self.SaveValues() |
727 self.VariablesGrid.RefreshButtons() |
733 self.RefreshValues(row_index) |
|
734 self.RefreshButtons() |
|
735 event.Skip() |
728 event.Skip() |
736 |
729 |
737 def OnUpButton(self, event): |
730 def RefreshTypeList(self): |
738 self.CloseVariablesGridEditControl() |
731 if self.Filter == "All": |
739 self.MoveValue(self.VariablesGrid.GetGridCursorRow(), -1) |
732 self.ClassList = [self.FilterChoiceTransfer[choice] for choice in self.FilterChoices if self.FilterChoiceTransfer[choice] not in ["All","Interface","Variables"]] |
740 self.RefreshButtons() |
733 elif self.Filter == "Interface": |
741 event.Skip() |
734 self.ClassList = ["Input","Output","InOut","External"] |
742 |
735 elif self.Filter == "Variables": |
743 def OnDownButton(self, event): |
736 self.ClassList = ["Local","Temp"] |
744 self.CloseVariablesGridEditControl() |
737 else: |
745 self.MoveValue(self.VariablesGrid.GetGridCursorRow(), 1) |
738 self.ClassList = [self.Filter] |
746 self.RefreshButtons() |
|
747 event.Skip() |
|
748 |
739 |
749 def OnVariablesGridCellChange(self, event): |
740 def OnVariablesGridCellChange(self, event): |
750 row, col = event.GetRow(), event.GetCol() |
741 row, col = event.GetRow(), event.GetCol() |
751 colname = self.Table.GetColLabelValue(col, False) |
742 colname = self.Table.GetColLabelValue(col, False) |
752 value = self.Table.GetValue(row, col) |
743 value = self.Table.GetValue(row, col) |
881 dragSource = wx.DropSource(self.VariablesGrid) |
872 dragSource = wx.DropSource(self.VariablesGrid) |
882 dragSource.SetData(data) |
873 dragSource.SetData(data) |
883 dragSource.DoDragDrop() |
874 dragSource.DoDragDrop() |
884 event.Skip() |
875 event.Skip() |
885 |
876 |
886 def OnVariablesGridSelectCell(self, event): |
877 def RefreshValues(self): |
887 wx.CallAfter(self.RefreshButtons) |
|
888 event.Skip() |
|
889 |
|
890 def OnChar(self, event): |
|
891 keycode = event.GetKeyCode() |
|
892 if keycode == wx.WXK_DELETE: |
|
893 row = self.Table.GetRow(self.VariablesGrid.GetGridCursorRow()) |
|
894 self.Values.remove(row) |
|
895 self.SaveValues() |
|
896 self.RefreshValues() |
|
897 self.RefreshButtons() |
|
898 event.Skip() |
|
899 |
|
900 def MoveValue(self, value_index, move): |
|
901 new_index = max(0, min(value_index + move, len(self.Values) - 1)) |
|
902 if new_index != value_index: |
|
903 self.Values.insert(new_index, self.Values.pop(value_index)) |
|
904 self.SaveValues() |
|
905 self.RefreshValues() |
|
906 self.VariablesGrid.SetGridCursor(new_index, self.VariablesGrid.GetGridCursorCol()) |
|
907 |
|
908 def RefreshValues(self, select=0): |
|
909 data = [] |
878 data = [] |
910 for num, variable in enumerate(self.Values): |
879 for num, variable in enumerate(self.Values): |
911 if variable["Class"] in self.ClassList: |
880 if variable["Class"] in self.ClassList: |
912 variable["Number"] = num + 1 |
881 variable["Number"] = num + 1 |
913 data.append(variable) |
882 data.append(variable) |
914 self.Table.SetData(data) |
883 self.Table.SetData(data) |
915 self.Table.ResetView(self.VariablesGrid) |
884 self.Table.ResetView(self.VariablesGrid) |
916 if len(self.Table.data) > 0: |
885 |
917 if select == -1: |
|
918 select = len(self.Table.data) - 1 |
|
919 else: |
|
920 select = min(select, len(self.Table.data) - 1) |
|
921 col = max(1, self.VariablesGrid.GetGridCursorCol()) |
|
922 self.VariablesGrid.SetGridCursor(select, col) |
|
923 self.VariablesGrid.MakeCellVisible(select, col) |
|
924 self.VariablesGrid.SetFocus() |
|
925 |
|
926 def SaveValues(self, buffer = True): |
886 def SaveValues(self, buffer = True): |
927 words = self.TagName.split("::") |
887 words = self.TagName.split("::") |
928 if self.ElementType == "config": |
888 if self.ElementType == "config": |
929 self.Controler.SetConfigurationGlobalVars(words[1], self.Values) |
889 self.Controler.SetConfigurationGlobalVars(words[1], self.Values) |
930 elif self.ElementType == "resource": |
890 elif self.ElementType == "resource": |