22 #License along with this library; if not, write to the Free Software |
22 #License along with this library; if not, write to the Free Software |
23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
24 |
24 |
25 import wx |
25 import wx |
26 import wx.grid |
26 import wx.grid |
27 import wx.gizmos |
27 |
28 from plcopen.structures import IEC_KEYWORDS, TestIdentifier |
28 from plcopen.structures import IEC_KEYWORDS, TestIdentifier |
29 from graphics.GraphicCommons import REFRESH_HIGHLIGHT_PERIOD |
29 from graphics.GraphicCommons import REFRESH_HIGHLIGHT_PERIOD |
|
30 from controls import CustomEditableListBox, CustomGrid |
30 |
31 |
31 import re |
32 import re |
32 |
33 |
33 DIMENSION_MODEL = re.compile("([0-9]+)\.\.([0-9]+)$") |
34 DIMENSION_MODEL = re.compile("([0-9]+)\.\.([0-9]+)$") |
34 |
35 |
185 return self.data |
186 return self.data |
186 |
187 |
187 def AppendRow(self, row_content): |
188 def AppendRow(self, row_content): |
188 self.data.append(row_content) |
189 self.data.append(row_content) |
189 |
190 |
|
191 def InsertRow(self, row_index, row_content): |
|
192 self.data.insert(row_index, row_content) |
|
193 |
190 def RemoveRow(self, row_index): |
194 def RemoveRow(self, row_index): |
191 self.data.pop(row_index) |
195 self.data.pop(row_index) |
192 |
196 |
193 def MoveRow(self, idx, move): |
197 def MoveRow(self, idx, move): |
194 new_idx = max(0, min(idx + move, len(self.data) - 1)) |
198 new_idx = max(0, min(idx + move, len(self.data) - 1)) |
195 if new_idx != idx: |
199 if new_idx != idx: |
196 self.data.insert(new_idx, self.data.pop(idx)) |
200 self.data.insert(new_idx, self.data.pop(idx)) |
197 return new_idx |
201 return new_idx |
198 return None |
202 |
199 |
|
200 def GetRow(self, row_index): |
203 def GetRow(self, row_index): |
201 return self.data[row_index] |
204 return self.data[row_index] |
202 |
205 |
203 def Empty(self): |
206 def Empty(self): |
204 self.data = [] |
207 self.data = [] |
458 |
461 |
459 self.EnumeratedPanel = wx.Panel(id=ID_DATATYPEEDITORENUMERATEDPANEL, |
462 self.EnumeratedPanel = wx.Panel(id=ID_DATATYPEEDITORENUMERATEDPANEL, |
460 name='EnumeratedPanel', parent=self, pos=wx.Point(0, 0), |
463 name='EnumeratedPanel', parent=self, pos=wx.Point(0, 0), |
461 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
464 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
462 |
465 |
463 self.EnumeratedValues = wx.gizmos.EditableListBox(id=ID_DATATYPEEDITORENUMERATEDVALUES, |
466 self.EnumeratedValues = CustomEditableListBox(id=ID_DATATYPEEDITORENUMERATEDVALUES, |
464 name='EnumeratedValues', parent=self.EnumeratedPanel, label=_("Values:"), pos=wx.Point(0, 0), |
467 name='EnumeratedValues', parent=self.EnumeratedPanel, label=_("Values:"), pos=wx.Point(0, 0), |
465 size=wx.Size(0, 0), style=wx.gizmos.EL_ALLOW_NEW | wx.gizmos.EL_ALLOW_EDIT | wx.gizmos.EL_ALLOW_DELETE) |
468 size=wx.Size(0, 0), style=wx.gizmos.EL_ALLOW_NEW | wx.gizmos.EL_ALLOW_EDIT | wx.gizmos.EL_ALLOW_DELETE) |
466 self.EnumeratedValues.GetListCtrl().Bind(wx.EVT_LIST_END_LABEL_EDIT, self.OnEnumeratedValueEndEdit) |
469 for func in ["_OnAddButton", "_OnDelButton", "_OnUpButton", "_OnDownButton"]: |
467 self.EnumeratedValues.GetEditButton().SetToolTipString(_("Edit item")) |
470 setattr(self.EnumeratedValues, func, self.OnEnumeratedValuesChanged) |
468 new_button = self.EnumeratedValues.GetNewButton() |
|
469 new_button.SetToolTipString(_("New item")) |
|
470 new_button.Bind(wx.EVT_BUTTON, self.OnEnumeratedValuesChanged) |
|
471 del_button = self.EnumeratedValues.GetDelButton() |
|
472 del_button.SetToolTipString(_("Delete item")) |
|
473 del_button.Bind(wx.EVT_BUTTON, self.OnEnumeratedValuesChanged) |
|
474 up_button = self.EnumeratedValues.GetUpButton() |
|
475 up_button.SetToolTipString(_("Move up")) |
|
476 up_button.Bind(wx.EVT_BUTTON, self.OnEnumeratedValuesChanged) |
|
477 down_button = self.EnumeratedValues.GetDownButton() |
|
478 down_button.SetToolTipString(_("Move down")) |
|
479 down_button.Bind(wx.EVT_BUTTON, self.OnEnumeratedValuesChanged) |
|
480 |
471 |
481 self.staticText8 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT8, |
472 self.staticText8 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT8, |
482 label=_('Initial Value:'), name='staticText8', parent=self.EnumeratedPanel, |
473 label=_('Initial Value:'), name='staticText8', parent=self.EnumeratedPanel, |
483 pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) |
474 pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) |
484 |
475 |
500 self.ArrayBaseType = wx.ComboBox(id=ID_DATATYPEEDITORARRAYBASETYPE, |
491 self.ArrayBaseType = wx.ComboBox(id=ID_DATATYPEEDITORARRAYBASETYPE, |
501 name='ArrayBaseType', parent=self.ArrayPanel, pos=wx.Point(0, 0), |
492 name='ArrayBaseType', parent=self.ArrayPanel, pos=wx.Point(0, 0), |
502 size=wx.Size(0, 28), style=wx.CB_READONLY) |
493 size=wx.Size(0, 28), style=wx.CB_READONLY) |
503 self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, id=ID_DATATYPEEDITORARRAYBASETYPE) |
494 self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, id=ID_DATATYPEEDITORARRAYBASETYPE) |
504 |
495 |
505 self.ArrayDimensions = wx.gizmos.EditableListBox(id=ID_DATATYPEEDITORARRAYDIMENSIONS, |
496 self.ArrayDimensions = CustomEditableListBox(id=ID_DATATYPEEDITORARRAYDIMENSIONS, |
506 name='ArrayDimensions', parent=self.ArrayPanel, label=_("Dimensions:"), pos=wx.Point(0, 0), |
497 name='ArrayDimensions', parent=self.ArrayPanel, label=_("Dimensions:"), pos=wx.Point(0, 0), |
507 size=wx.Size(0, 24), style=wx.gizmos.EL_ALLOW_NEW | wx.gizmos.EL_ALLOW_EDIT | wx.gizmos.EL_ALLOW_DELETE) |
498 size=wx.Size(0, 24), style=wx.gizmos.EL_ALLOW_NEW | wx.gizmos.EL_ALLOW_EDIT | wx.gizmos.EL_ALLOW_DELETE) |
508 self.ArrayDimensions.GetListCtrl().Bind(wx.EVT_LIST_END_LABEL_EDIT, self.OnDimensionsChanged) |
499 self.ArrayDimensions.GetListCtrl().Bind(wx.EVT_LIST_END_LABEL_EDIT, self.OnDimensionsChanged) |
509 self.ArrayDimensions.GetEditButton().SetToolTipString(_("Edit item")) |
500 for func in ["_OnAddButton", "_OnDelButton", "_OnUpButton", "_OnDownButton"]: |
510 new_button = self.ArrayDimensions.GetNewButton() |
501 setattr(self.EnumeratedValues, func, self.OnDimensionsChanged) |
511 new_button.SetToolTipString(_("New item")) |
502 |
512 new_button.Bind(wx.EVT_BUTTON, self.OnDimensionsChanged) |
|
513 del_button = self.ArrayDimensions.GetDelButton() |
|
514 del_button.SetToolTipString(_("Delete item")) |
|
515 del_button.Bind(wx.EVT_BUTTON, self.OnDimensionsChanged) |
|
516 up_button = self.ArrayDimensions.GetUpButton() |
|
517 up_button.SetToolTipString(_("Move up")) |
|
518 up_button.Bind(wx.EVT_BUTTON, self.OnDimensionsChanged) |
|
519 down_button = self.ArrayDimensions.GetDownButton() |
|
520 down_button.SetToolTipString(_("Move down")) |
|
521 down_button.Bind(wx.EVT_BUTTON, self.OnDimensionsChanged) |
|
522 |
|
523 self.staticText10 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT10, |
503 self.staticText10 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT10, |
524 label=_('Initial Value:'), name='staticText10', parent=self.ArrayPanel, |
504 label=_('Initial Value:'), name='staticText10', parent=self.ArrayPanel, |
525 pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) |
505 pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) |
526 |
506 |
527 self.ArrayInitialValue = wx.TextCtrl(id=ID_DATATYPEEDITORARRAYINITIALVALUE, |
507 self.ArrayInitialValue = wx.TextCtrl(id=ID_DATATYPEEDITORARRAYINITIALVALUE, |
537 |
517 |
538 self.staticText11 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT11, |
518 self.staticText11 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT11, |
539 label=_('Elements :'), name='staticText11', parent=self.StructurePanel, |
519 label=_('Elements :'), name='staticText11', parent=self.StructurePanel, |
540 pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) |
520 pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) |
541 |
521 |
542 self.StructureElementsGrid = wx.grid.Grid(id=ID_DATATYPEEDITORSTRUCTUREELEMENTSGRID, |
522 self.StructureElementsGrid = CustomGrid(id=ID_DATATYPEEDITORSTRUCTUREELEMENTSGRID, |
543 name='StructureElementsGrid', parent=self.StructurePanel, pos=wx.Point(0, 0), |
523 name='StructureElementsGrid', parent=self.StructurePanel, pos=wx.Point(0, 0), |
544 size=wx.Size(0, 150), style=wx.VSCROLL) |
524 size=wx.Size(0, 150), style=wx.VSCROLL) |
545 self.StructureElementsGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, |
525 self.StructureElementsGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, |
546 'Sans')) |
526 'Sans')) |
547 self.StructureElementsGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL, |
527 self.StructureElementsGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL, |
552 self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnStructureElementsGridCellChange) |
532 self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnStructureElementsGridCellChange) |
553 self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, self.OnStructureElementsGridEditorShown) |
533 self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, self.OnStructureElementsGridEditorShown) |
554 else: |
534 else: |
555 wx.grid.EVT_GRID_CELL_CHANGE(self.StructureElementsGrid, self.OnStructureElementsGridCellChange) |
535 wx.grid.EVT_GRID_CELL_CHANGE(self.StructureElementsGrid, self.OnStructureElementsGridCellChange) |
556 wx.grid.EVT_GRID_EDITOR_SHOWN(self.StructureElementsGrid, self.OnStructureElementsGridEditorShown) |
536 wx.grid.EVT_GRID_EDITOR_SHOWN(self.StructureElementsGrid, self.OnStructureElementsGridEditorShown) |
557 |
537 |
558 self.StructureAddButton = wx.Button(id=ID_DATATYPEEDITORSTRUCTUREADDBUTTON, label=_('Add'), |
538 self.StructureAddButton = wx.Button(id=ID_DATATYPEEDITORSTRUCTUREADDBUTTON, label=_('Add'), |
559 name='StructureAddButton', parent=self.StructurePanel, pos=wx.Point(0, 0), |
539 name='StructureAddButton', parent=self.StructurePanel, pos=wx.Point(0, 0), |
560 size=wx.DefaultSize, style=0) |
540 size=wx.DefaultSize, style=0) |
561 self.Bind(wx.EVT_BUTTON, self.OnStructureAddButton, id=ID_DATATYPEEDITORSTRUCTUREADDBUTTON) |
541 |
562 |
|
563 self.StructureDeleteButton = wx.Button(id=ID_DATATYPEEDITORSTRUCTUREDELETEBUTTON, label=_('Delete'), |
542 self.StructureDeleteButton = wx.Button(id=ID_DATATYPEEDITORSTRUCTUREDELETEBUTTON, label=_('Delete'), |
564 name='StructureDeleteButton', parent=self.StructurePanel, pos=wx.Point(0, 0), |
543 name='StructureDeleteButton', parent=self.StructurePanel, pos=wx.Point(0, 0), |
565 size=wx.DefaultSize, style=0) |
544 size=wx.DefaultSize, style=0) |
566 self.Bind(wx.EVT_BUTTON, self.OnStructureDeleteButton, id=ID_DATATYPEEDITORSTRUCTUREDELETEBUTTON) |
545 |
567 |
|
568 self.StructureUpButton = wx.Button(id=ID_DATATYPEEDITORSTRUCTUREUPBUTTON, label='^', |
546 self.StructureUpButton = wx.Button(id=ID_DATATYPEEDITORSTRUCTUREUPBUTTON, label='^', |
569 name='StructureUpButton', parent=self.StructurePanel, pos=wx.Point(0, 0), |
547 name='StructureUpButton', parent=self.StructurePanel, pos=wx.Point(0, 0), |
570 size=wx.Size(32, 32), style=0) |
548 size=wx.Size(32, 32), style=0) |
571 self.Bind(wx.EVT_BUTTON, self.OnStructureUpButton, id=ID_DATATYPEEDITORSTRUCTUREUPBUTTON) |
549 |
572 |
|
573 self.StructureDownButton = wx.Button(id=ID_DATATYPEEDITORSTRUCTUREDOWNBUTTON, label='v', |
550 self.StructureDownButton = wx.Button(id=ID_DATATYPEEDITORSTRUCTUREDOWNBUTTON, label='v', |
574 name='StructureDownButton', parent=self.StructurePanel, pos=wx.Point(0, 0), |
551 name='StructureDownButton', parent=self.StructurePanel, pos=wx.Point(0, 0), |
575 size=wx.Size(32, 32), style=0) |
552 size=wx.Size(32, 32), style=0) |
576 self.Bind(wx.EVT_BUTTON, self.OnStructureDownButton, id=ID_DATATYPEEDITORSTRUCTUREDOWNBUTTON) |
553 |
577 |
|
578 self._init_sizers() |
554 self._init_sizers() |
579 |
555 |
580 def __init__(self, parent, tagname, window, controler): |
556 def __init__(self, parent, tagname, window, controler): |
581 self._init_ctrls(parent) |
557 self._init_ctrls(parent) |
582 |
558 |
584 self.StructureElementsTable = ElementsTable(self, [], GetElementsTableColnames()) |
560 self.StructureElementsTable = ElementsTable(self, [], GetElementsTableColnames()) |
585 self.StructureColSizes = [40, 150, 100, 250] |
561 self.StructureColSizes = [40, 150, 100, 250] |
586 self.StructureColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT] |
562 self.StructureColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT] |
587 |
563 |
588 self.StructureElementsGrid.SetTable(self.StructureElementsTable) |
564 self.StructureElementsGrid.SetTable(self.StructureElementsTable) |
|
565 self.StructureElementsGrid.SetButtons({"Add": self.StructureAddButton, |
|
566 "Delete": self.StructureDeleteButton, |
|
567 "Up": self.StructureUpButton, |
|
568 "Down": self.StructureDownButton}) |
|
569 |
|
570 def _AddStructureElement(new_row): |
|
571 self.StructureElementsTable.InsertRow(new_row, self.StructureElementDefaultValue.copy()) |
|
572 self.RefreshTypeInfos() |
|
573 self.StructureElementsTable.ResetView(self.StructureElementsGrid) |
|
574 return new_row |
|
575 setattr(self.StructureElementsGrid, "_AddRow", _AddStructureElement) |
|
576 |
|
577 def _DeleteStructureElement(row): |
|
578 self.StructureElementsTable.RemoveRow(row) |
|
579 self.RefreshTypeInfos() |
|
580 self.StructureElementsTable.ResetView(self.StructureElementsGrid) |
|
581 setattr(self.StructureElementsGrid, "_DeleteRow", _DeleteStructureElement) |
|
582 |
|
583 def _MoveStructureElement(row, move): |
|
584 new_row = self.StructureElementsTable.MoveRow(row, move) |
|
585 if new_row != row: |
|
586 self.RefreshTypeInfos() |
|
587 self.StructureElementsTable.ResetView(self.StructureElementsGrid) |
|
588 return new_row |
|
589 setattr(self.StructureElementsGrid, "_MoveRow", _MoveStructureElement) |
|
590 |
589 self.StructureElementsGrid.SetRowLabelSize(0) |
591 self.StructureElementsGrid.SetRowLabelSize(0) |
590 for col in range(self.StructureElementsTable.GetNumberCols()): |
592 for col in range(self.StructureElementsTable.GetNumberCols()): |
591 attr = wx.grid.GridCellAttr() |
593 attr = wx.grid.GridCellAttr() |
592 attr.SetAlignment(self.StructureColAlignements[col], wx.ALIGN_CENTRE) |
594 attr.SetAlignment(self.StructureColAlignements[col], wx.ALIGN_CENTRE) |
593 self.StructureElementsGrid.SetColAttr(col, attr) |
595 self.StructureElementsGrid.SetColAttr(col, attr) |
594 self.StructureElementsGrid.SetColMinimalWidth(col, self.StructureColSizes[col]) |
596 self.StructureElementsGrid.SetColMinimalWidth(col, self.StructureColSizes[col]) |
595 self.StructureElementsGrid.AutoSizeColumn(col, False) |
597 self.StructureElementsGrid.AutoSizeColumn(col, False) |
|
598 self.StructureElementsGrid.RefreshButtons() |
596 |
599 |
597 for datatype in GetDatatypeTypes(): |
600 for datatype in GetDatatypeTypes(): |
598 self.DerivationType.Append(_(datatype)) |
601 self.DerivationType.Append(_(datatype)) |
599 self.SubrangePanel.Hide() |
602 self.SubrangePanel.Hide() |
600 self.EnumeratedPanel.Hide() |
603 self.EnumeratedPanel.Hide() |
756 def OnEnumeratedValuesChanged(self, event): |
760 def OnEnumeratedValuesChanged(self, event): |
757 wx.CallAfter(self.RefreshEnumeratedValues) |
761 wx.CallAfter(self.RefreshEnumeratedValues) |
758 wx.CallAfter(self.RefreshTypeInfos) |
762 wx.CallAfter(self.RefreshTypeInfos) |
759 event.Skip() |
763 event.Skip() |
760 |
764 |
761 def OnStructureAddButton(self, event): |
|
762 new_row = self.StructureElementDefaultValue.copy() |
|
763 self.StructureElementsTable.AppendRow(new_row) |
|
764 self.RefreshTypeInfos() |
|
765 self.StructureElementsTable.ResetView(self.StructureElementsGrid) |
|
766 event.Skip() |
|
767 |
|
768 def OnStructureDeleteButton(self, event): |
|
769 row = self.StructureElementsGrid.GetGridCursorRow() |
|
770 self.StructureElementsTable.RemoveRow(row) |
|
771 self.RefreshTypeInfos() |
|
772 self.StructureElementsTable.ResetView(self.StructureElementsGrid) |
|
773 event.Skip() |
|
774 |
|
775 def OnStructureUpButton(self, event): |
|
776 row = self.StructureElementsGrid.GetGridCursorRow() |
|
777 new_index = self.StructureElementsTable.MoveRow(row, -1) |
|
778 if new_index is not None: |
|
779 self.RefreshTypeInfos() |
|
780 self.StructureElementsTable.ResetView(self.StructureElementsGrid) |
|
781 self.StructureElementsGrid.SetGridCursor(new_index, self.StructureElementsGrid.GetGridCursorCol()) |
|
782 event.Skip() |
|
783 |
|
784 def OnStructureDownButton(self, event): |
|
785 row = self.StructureElementsGrid.GetGridCursorRow() |
|
786 new_index = self.StructureElementsTable.MoveRow(row, 1) |
|
787 if new_index is not None: |
|
788 self.RefreshTypeInfos() |
|
789 self.StructureElementsTable.ResetView(self.StructureElementsGrid) |
|
790 self.StructureElementsGrid.SetGridCursor(new_index, self.StructureElementsGrid.GetGridCursorCol()) |
|
791 event.Skip() |
|
792 |
|
793 def OnStructureElementsGridCellChange(self, event): |
765 def OnStructureElementsGridCellChange(self, event): |
794 row, col = event.GetRow(), event.GetCol() |
766 row, col = event.GetRow(), event.GetCol() |
795 colname = self.StructureElementsTable.GetColLabelValue(col) |
767 colname = self.StructureElementsTable.GetColLabelValue(col) |
796 value = self.StructureElementsTable.GetValue(row, col) |
768 value = self.StructureElementsTable.GetValue(row, col) |
797 if colname == "Name": |
769 if colname == "Name": |
815 message.ShowModal() |
787 message.ShowModal() |
816 message.Destroy() |
788 message.Destroy() |
817 event.Veto() |
789 event.Veto() |
818 else: |
790 else: |
819 self.RefreshTypeInfos() |
791 self.RefreshTypeInfos() |
820 self.StructureElementsTable.ResetView(self.StructureElementsGrid) |
792 wx.CallAfter(self.StructureElementsTable.ResetView, self.StructureElementsGrid) |
821 ## old_value = self.Table.GetOldValue() |
793 ## old_value = self.Table.GetOldValue() |
822 ## if old_value != "": |
794 ## if old_value != "": |
823 ## self.Controler.UpdateEditedElementUsedVariable(self.TagName, old_value, value) |
795 ## self.Controler.UpdateEditedElementUsedVariable(self.TagName, old_value, value) |
824 ## self.Controler.BufferProject() |
796 ## self.Controler.BufferProject() |
825 event.Skip() |
797 event.Skip() |
826 else: |
798 else: |
827 self.RefreshTypeInfos() |
799 self.RefreshTypeInfos() |
828 self.StructureElementsTable.ResetView(self.StructureElementsGrid) |
800 wx.CallAfter(self.StructureElementsTable.ResetView, self.StructureElementsGrid) |
829 event.Skip() |
801 event.Skip() |
|
802 |
|
803 def OnStructureElementsGridSelectCell(self, event): |
|
804 wx.CallAfter(self.RefreshStructureButtons) |
|
805 event.Skip() |
830 |
806 |
831 def OnStructureElementsGridEditorShown(self, event): |
807 def OnStructureElementsGridEditorShown(self, event): |
832 row, col = event.GetRow(), event.GetCol() |
808 row, col = event.GetRow(), event.GetCol() |
833 if self.StructureElementsTable.GetColLabelValue(col) == "Type": |
809 if self.StructureElementsTable.GetColLabelValue(col) == "Type": |
834 type_menu = wx.Menu(title='') |
810 type_menu = wx.Menu(title='') |