plugins/c_ext/CFileEditor.py
changeset 626 2b9bd5dcf8d2
parent 610 00df5b1db283
child 630 91b2ae63ea3d
equal deleted inserted replaced
622:885a224a35be 626:2b9bd5dcf8d2
     1 import  wx, wx.grid
     1 import  wx, wx.grid
     2 import  wx.stc  as  stc
     2 import  wx.stc  as  stc
     3 import keyword
     3 import keyword
       
     4 
       
     5 from controls import CustomGrid
     4 
     6 
     5 if wx.Platform == '__WXMSW__':
     7 if wx.Platform == '__WXMSW__':
     6     faces = { 'times': 'Times New Roman',
     8     faces = { 'times': 'Times New Roman',
     7               'mono' : 'Courier New',
     9               'mono' : 'Courier New',
     8               'helv' : 'Arial',
    10               'helv' : 'Arial',
   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