779 wx.CallAfter(self.ParentWindow.RefreshView, False) |
779 wx.CallAfter(self.ParentWindow.RefreshView, False) |
780 self.ParentWindow._Refresh(TITLE, FILEMENU, EDITMENU, PAGETITLES, POUINSTANCEVARIABLESPANEL, LIBRARYTREE) |
780 self.ParentWindow._Refresh(TITLE, FILEMENU, EDITMENU, PAGETITLES, POUINSTANCEVARIABLESPANEL, LIBRARYTREE) |
781 else: |
781 else: |
782 self.SaveValues() |
782 self.SaveValues() |
783 if colname == "Class": |
783 if colname == "Class": |
784 wx.CallAfter(self.ParentWindow.RefreshView, False) |
784 self.ClearLocation(row, col, value) |
|
785 wx.CallAfter(self.ParentWindow.RefreshView) |
785 elif colname == "Location": |
786 elif colname == "Location": |
786 wx.CallAfter(self.ParentWindow.RefreshView) |
787 wx.CallAfter(self.ParentWindow.RefreshView) |
787 |
788 |
788 if message is not None: |
789 if message is not None: |
789 wx.CallAfter(self.ShowErrorMessage, message) |
790 wx.CallAfter(self.ShowErrorMessage, message) |
790 event.Veto() |
791 event.Veto() |
791 else: |
792 else: |
792 event.Skip() |
793 event.Skip() |
|
794 |
|
795 def ClearLocation(self, row, col, value): |
|
796 if self.Values[row].Location != '': |
|
797 if self.Table.GetColLabelValue(col, False) == 'Class' and value not in ["Local", "Global"] or \ |
|
798 self.Table.GetColLabelValue(col, False) == 'Type' and not self.Parent.Controler.IsLocatableType(value): |
|
799 self.Values[row].Location = '' |
|
800 self.RefreshValues() |
793 |
801 |
794 def BuildStdIECTypesMenu(self,type_menu): |
802 def BuildStdIECTypesMenu(self,type_menu): |
795 # build a submenu containing standard IEC types |
803 # build a submenu containing standard IEC types |
796 base_menu = wx.Menu(title='') |
804 base_menu = wx.Menu(title='') |
797 for base_type in self.Controler.GetBaseTypes(): |
805 for base_type in self.Controler.GetBaseTypes(): |
847 def OnVariablesGridEditorShown(self, event): |
855 def OnVariablesGridEditorShown(self, event): |
848 row, col = event.GetRow(), event.GetCol() |
856 row, col = event.GetRow(), event.GetCol() |
849 |
857 |
850 label_value = self.Table.GetColLabelValue(col, False) |
858 label_value = self.Table.GetColLabelValue(col, False) |
851 if label_value == "Type": |
859 if label_value == "Type": |
|
860 old_value = self.Values[row].Type |
852 classtype = self.Table.GetValueByName(row, "Class") |
861 classtype = self.Table.GetValueByName(row, "Class") |
853 type_menu = wx.Menu(title='') # the root menu |
862 type_menu = wx.Menu(title='') # the root menu |
854 |
863 |
855 self.BuildStdIECTypesMenu(type_menu) |
864 self.BuildStdIECTypesMenu(type_menu) |
856 |
865 |
868 |
877 |
869 # pop up this new menu |
878 # pop up this new menu |
870 self.VariablesGrid.PopupMenuXY(type_menu, corner_x, corner_y) |
879 self.VariablesGrid.PopupMenuXY(type_menu, corner_x, corner_y) |
871 type_menu.Destroy() |
880 type_menu.Destroy() |
872 event.Veto() |
881 event.Veto() |
|
882 value = self.Values[row].Type |
|
883 if old_value != value: |
|
884 self.ClearLocation(row, col, value) |
873 else: |
885 else: |
874 event.Skip() |
886 event.Skip() |
875 |
887 |
876 def GetVariableTypeFunction(self, base_type): |
888 def GetVariableTypeFunction(self, base_type): |
877 def VariableTypeFunction(event): |
889 def VariableTypeFunction(event): |