553 self.CurrentIndex = index |
555 self.CurrentIndex = index |
554 |
556 |
555 def AppendRow(self, row_content): |
557 def AppendRow(self, row_content): |
556 self.data.append(row_content) |
558 self.data.append(row_content) |
557 |
559 |
|
560 def InsertRow(self, row_index, row_content): |
|
561 self.data.insert(row_index, row_content) |
|
562 |
558 def RemoveRow(self, row_index): |
563 def RemoveRow(self, row_index): |
559 self.data.pop(row_index) |
564 self.data.pop(row_index) |
560 |
565 |
561 def MoveRow(self, row_index, move, grid): |
566 def MoveRow(self, row_index, move): |
562 new_index = max(0, min(row_index + move, len(self.data) - 1)) |
567 new_index = max(0, min(row_index + move, len(self.data) - 1)) |
563 if new_index != row_index: |
568 if new_index != row_index: |
564 self.data.insert(new_index, self.data.pop(row_index)) |
569 self.data.insert(new_index, self.data.pop(row_index)) |
565 grid.SetGridCursor(new_index, grid.GetGridCursorCol()) |
570 return new_index |
566 |
571 |
567 def GetRow(self, row_index): |
572 def GetRow(self, row_index): |
568 return self.data[row_index] |
573 return self.data[row_index] |
569 |
574 |
570 def Empty(self): |
575 def Empty(self): |
571 self.data = [] |
576 self.data = [] |
617 |
622 |
618 def _init_ctrls(self, prnt): |
623 def _init_ctrls(self, prnt): |
619 wx.Panel.__init__(self, id=ID_VARIABLESEDITOR, name='', parent=prnt, |
624 wx.Panel.__init__(self, id=ID_VARIABLESEDITOR, name='', parent=prnt, |
620 size=wx.Size(0, 0), style=wx.SUNKEN_BORDER) |
625 size=wx.Size(0, 0), style=wx.SUNKEN_BORDER) |
621 |
626 |
622 self.VariablesGrid = wx.grid.Grid(id=ID_VARIABLESEDITORVARIABLESGRID, |
627 self.VariablesGrid = CustomGrid(id=ID_VARIABLESEDITORVARIABLESGRID, |
623 name='VariablesGrid', parent=self, pos=wx.Point(0, 0), |
628 name='VariablesGrid', parent=self, pos=wx.Point(0, 0), |
624 size=wx.Size(-1, -1), style=wx.VSCROLL) |
629 size=wx.Size(-1, -1), style=wx.VSCROLL) |
625 self.VariablesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, |
630 self.VariablesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, |
626 'Sans')) |
631 'Sans')) |
627 self.VariablesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL, |
632 self.VariablesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL, |
636 wx.grid.EVT_GRID_EDITOR_SHOWN(self.VariablesGrid, self.OnVariablesGridEditorShown) |
641 wx.grid.EVT_GRID_EDITOR_SHOWN(self.VariablesGrid, self.OnVariablesGridEditorShown) |
637 |
642 |
638 self.AddVariableButton = wx.Button(id=ID_VARIABLESEDITORADDVARIABLEBUTTON, label='Add Variable', |
643 self.AddVariableButton = wx.Button(id=ID_VARIABLESEDITORADDVARIABLEBUTTON, label='Add Variable', |
639 name='AddVariableButton', parent=self, pos=wx.Point(0, 0), |
644 name='AddVariableButton', parent=self, pos=wx.Point(0, 0), |
640 size=wx.Size(122, 32), style=0) |
645 size=wx.Size(122, 32), style=0) |
641 self.Bind(wx.EVT_BUTTON, self.OnAddVariableButton, id=ID_VARIABLESEDITORADDVARIABLEBUTTON) |
646 |
642 |
|
643 self.DeleteVariableButton = wx.Button(id=ID_VARIABLESEDITORDELETEVARIABLEBUTTON, label='Delete Variable', |
647 self.DeleteVariableButton = wx.Button(id=ID_VARIABLESEDITORDELETEVARIABLEBUTTON, label='Delete Variable', |
644 name='DeleteVariableButton', parent=self, pos=wx.Point(0, 0), |
648 name='DeleteVariableButton', parent=self, pos=wx.Point(0, 0), |
645 size=wx.Size(122, 32), style=0) |
649 size=wx.Size(122, 32), style=0) |
646 self.Bind(wx.EVT_BUTTON, self.OnDeleteVariableButton, id=ID_VARIABLESEDITORDELETEVARIABLEBUTTON) |
650 |
647 |
|
648 self.UpVariableButton = wx.Button(id=ID_VARIABLESEDITORUPVARIABLEBUTTON, label='^', |
651 self.UpVariableButton = wx.Button(id=ID_VARIABLESEDITORUPVARIABLEBUTTON, label='^', |
649 name='UpVariableButton', parent=self, pos=wx.Point(0, 0), |
652 name='UpVariableButton', parent=self, pos=wx.Point(0, 0), |
650 size=wx.Size(32, 32), style=0) |
653 size=wx.Size(32, 32), style=0) |
651 self.Bind(wx.EVT_BUTTON, self.OnUpVariableButton, id=ID_VARIABLESEDITORUPVARIABLEBUTTON) |
654 |
652 |
|
653 self.DownVariableButton = wx.Button(id=ID_VARIABLESEDITORDOWNVARIABLEBUTTON, label='v', |
655 self.DownVariableButton = wx.Button(id=ID_VARIABLESEDITORDOWNVARIABLEBUTTON, label='v', |
654 name='DownVariableButton', parent=self, pos=wx.Point(0, 0), |
656 name='DownVariableButton', parent=self, pos=wx.Point(0, 0), |
655 size=wx.Size(32, 32), style=0) |
657 size=wx.Size(32, 32), style=0) |
656 self.Bind(wx.EVT_BUTTON, self.OnDownVariableButton, id=ID_VARIABLESEDITORDOWNVARIABLEBUTTON) |
658 |
657 |
|
658 self._init_sizers() |
659 self._init_sizers() |
659 |
660 |
660 def __init__(self, parent, window, controler): |
661 def __init__(self, parent, window, controler): |
661 self._init_ctrls(parent) |
662 self._init_ctrls(parent) |
662 |
663 |
666 self.VariablesDefaultValue = {"Name" : "", "Class" : "input", "Type" : ""} |
667 self.VariablesDefaultValue = {"Name" : "", "Class" : "input", "Type" : ""} |
667 self.Table = VariablesTable(self, [], ["#", "Name", "Class", "Type"]) |
668 self.Table = VariablesTable(self, [], ["#", "Name", "Class", "Type"]) |
668 self.ColAlignements = [wx.ALIGN_RIGHT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT] |
669 self.ColAlignements = [wx.ALIGN_RIGHT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT] |
669 self.ColSizes = [40, 200, 150, 150] |
670 self.ColSizes = [40, 200, 150, 150] |
670 self.VariablesGrid.SetTable(self.Table) |
671 self.VariablesGrid.SetTable(self.Table) |
|
672 self.VariablesGrid.SetButtons({"Add": self.AddVariableButton, |
|
673 "Delete": self.DeleteVariableButton, |
|
674 "Up": self.UpVariableButton, |
|
675 "Down": self.DownVariableButton}) |
|
676 |
|
677 def _AddVariable(new_row): |
|
678 self.Table.InsertRow(new_row, self.VariablesDefaultValue.copy()) |
|
679 self.RefreshModel() |
|
680 self.RefreshView() |
|
681 return new_row |
|
682 setattr(self.VariablesGrid, "_AddRow", _AddVariable) |
|
683 |
|
684 def _DeleteVariable(row): |
|
685 self.Table.RemoveRow(row) |
|
686 self.RefreshModel() |
|
687 self.RefreshView() |
|
688 setattr(self.VariablesGrid, "_DeleteRow", _DeleteVariable) |
|
689 |
|
690 def _MoveVariable(row, move): |
|
691 new_row = self.Table.MoveRow(row, move) |
|
692 if new_row != row: |
|
693 self.RefreshModel() |
|
694 self.RefreshView() |
|
695 return new_row |
|
696 setattr(self.VariablesGrid, "_MoveRow", _MoveVariable) |
|
697 |
671 self.VariablesGrid.SetRowLabelSize(0) |
698 self.VariablesGrid.SetRowLabelSize(0) |
672 for col in range(self.Table.GetNumberCols()): |
699 for col in range(self.Table.GetNumberCols()): |
673 attr = wx.grid.GridCellAttr() |
700 attr = wx.grid.GridCellAttr() |
674 attr.SetAlignment(self.ColAlignements[col], wx.ALIGN_CENTRE) |
701 attr.SetAlignment(self.ColAlignements[col], wx.ALIGN_CENTRE) |
675 self.VariablesGrid.SetColAttr(col, attr) |
702 self.VariablesGrid.SetColAttr(col, attr) |
694 self.ParentWindow.RefreshEditMenu() |
721 self.ParentWindow.RefreshEditMenu() |
695 |
722 |
696 def RefreshView(self): |
723 def RefreshView(self): |
697 self.Table.SetData(self.Controler.GetVariables()) |
724 self.Table.SetData(self.Controler.GetVariables()) |
698 self.Table.ResetView(self.VariablesGrid) |
725 self.Table.ResetView(self.VariablesGrid) |
699 |
726 self.VariablesGrid.RefreshButtons() |
700 def OnAddVariableButton(self, event): |
727 |
701 self.Table.AppendRow(self.VariablesDefaultValue.copy()) |
|
702 self.RefreshModel() |
|
703 self.RefreshView() |
|
704 event.Skip() |
|
705 |
|
706 def OnDeleteVariableButton(self, event): |
|
707 row = self.VariablesGrid.GetGridCursorRow() |
|
708 self.Table.RemoveRow(row) |
|
709 self.RefreshModel() |
|
710 self.RefreshView() |
|
711 event.Skip() |
|
712 |
|
713 def OnUpVariableButton(self, event): |
|
714 row = self.VariablesGrid.GetGridCursorRow() |
|
715 self.Table.MoveRow(row, -1, self.VariablesGrid) |
|
716 self.RefreshModel() |
|
717 self.RefreshView() |
|
718 event.Skip() |
|
719 |
|
720 def OnDownVariableButton(self, event): |
|
721 row = self.VariablesGrid.GetGridCursorRow() |
|
722 self.Table.MoveRow(row, 1, self.VariablesGrid) |
|
723 self.RefreshModel() |
|
724 self.RefreshView() |
|
725 event.Skip() |
|
726 |
|
727 def OnVariablesGridCellChange(self, event): |
728 def OnVariablesGridCellChange(self, event): |
728 self.RefreshModel() |
729 self.RefreshModel() |
729 self.RefreshView() |
730 self.RefreshView() |
730 event.Skip() |
731 event.Skip() |
731 |
732 |