RessourceEditor.py
changeset 577 9dbb79722fbc
parent 573 0a6b2e1f8ce3
child 578 73138d14d88d
equal deleted inserted replaced
576:3f2024f30553 577:9dbb79722fbc
    24 
    24 
    25 import wx
    25 import wx
    26 import wx.grid
    26 import wx.grid
    27 
    27 
    28 from dialogs import DurationEditorDialog
    28 from dialogs import DurationEditorDialog
       
    29 from controls import CustomGrid
    29 
    30 
    30 #-------------------------------------------------------------------------------
    31 #-------------------------------------------------------------------------------
    31 #                          Configuration Editor class
    32 #                          Configuration Editor class
    32 #-------------------------------------------------------------------------------
    33 #-------------------------------------------------------------------------------
    33 
    34 
   277         
   278         
   278     def MoveRow(self, row_index, move):
   279     def MoveRow(self, row_index, move):
   279         new_index = max(0, min(row_index + move, len(self.data) - 1))
   280         new_index = max(0, min(row_index + move, len(self.data) - 1))
   280         if new_index != row_index:
   281         if new_index != row_index:
   281             self.data.insert(new_index, self.data.pop(row_index))
   282             self.data.insert(new_index, self.data.pop(row_index))
   282             return new_index
   283         return new_index
   283         return None
   284         
   284 
       
   285     def Empty(self):
   285     def Empty(self):
   286         self.data = []
   286         self.data = []
   287         self.editors = []
   287     
   288 
       
   289 #-------------------------------------------------------------------------------
   288 #-------------------------------------------------------------------------------
   290 #                        Highlights showing functions
   289 #                        Highlights showing functions
   291 #-------------------------------------------------------------------------------
   290 #-------------------------------------------------------------------------------
   292 
       
   293     def OnRefreshHighlightsTimer(self, event):
       
   294         self.Table.ResetView(self.VariablesGrid)
       
   295         event.Skip()
       
   296 
   291 
   297     def AddHighlight(self, infos, highlight_type):
   292     def AddHighlight(self, infos, highlight_type):
   298         row_highlights = self.Highlights.setdefault(infos[0], {})
   293         row_highlights = self.Highlights.setdefault(infos[0], {})
   299         col_highlights = row_highlights.setdefault(infos[1], [])
   294         col_highlights = row_highlights.setdefault(infos[1], [])
   300         col_highlights.append(highlight_type)
   295         col_highlights.append(highlight_type)
   301         self.RefreshHighlightsTimer.Start(int(REFRESH_HIGHLIGHT_PERIOD * 1000), oneShot=True)
   296     
   302 
       
   303     def ClearHighlights(self, highlight_type=None):
   297     def ClearHighlights(self, highlight_type=None):
   304         if highlight_type is None:
   298         if highlight_type is None:
   305             self.Highlights = {}
   299             self.Highlights = {}
   306         else:
   300         else:
   307             for row, row_highlights in self.Highlights.iteritems():
   301             for row, row_highlights in self.Highlights.iteritems():
   403         
   397         
   404         self.staticText1 = wx.StaticText(id=ID_RESOURCEEDITORSTATICTEXT1,
   398         self.staticText1 = wx.StaticText(id=ID_RESOURCEEDITORSTATICTEXT1,
   405               label=_(u'Tasks:'), name='staticText2', parent=self, pos=wx.Point(0,
   399               label=_(u'Tasks:'), name='staticText2', parent=self, pos=wx.Point(0,
   406               0), size=wx.DefaultSize, style=wx.ALIGN_CENTER)
   400               0), size=wx.DefaultSize, style=wx.ALIGN_CENTER)
   407 
   401 
   408         self.TasksGrid = wx.grid.Grid(id=ID_RESOURCEEDITORTASKSGRID,
   402         self.TasksGrid = CustomGrid(id=ID_RESOURCEEDITORTASKSGRID,
   409               name='TasksGrid', parent=self, pos=wx.Point(0, 0), 
   403               name='TasksGrid', parent=self, pos=wx.Point(0, 0), 
   410               size=wx.Size(-1, -1), style=wx.VSCROLL)
   404               size=wx.Size(-1, -1), style=wx.VSCROLL)
   411         self.TasksGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False,
   405         self.TasksGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False,
   412               'Sans'))
   406               'Sans'))
   413         self.TasksGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL,
   407         self.TasksGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL,
   414               False, 'Sans'))
   408               False, 'Sans'))
   415         if wx.VERSION >= (2, 5, 0):
   409         if wx.VERSION >= (2, 6, 0):
   416             self.TasksGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnTasksGridCellChange)
   410             self.TasksGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnTasksGridCellChange)
   417         else:
   411         else:
   418             wx.grid.EVT_GRID_CELL_CHANGE(self.TasksGrid, self.OnTasksGridCellChange)
   412             wx.grid.EVT_GRID_CELL_CHANGE(self.TasksGrid, self.OnTasksGridCellChange)
   419         
   413         
   420         self.AddTaskButton = wx.Button(id=ID_RESOURCEEDITORADDTASKBUTTON, label=_('Add Task'),
   414         self.AddTaskButton = wx.Button(id=ID_RESOURCEEDITORADDTASKBUTTON, label=_('Add Task'),
   421               name='AddTaskButton', parent=self, pos=wx.Point(0, 0),
   415               name='AddTaskButton', parent=self, pos=wx.Point(0, 0),
   422               size=wx.DefaultSize, style=0)
   416               size=wx.DefaultSize, style=0)
   423         self.Bind(wx.EVT_BUTTON, self.OnAddTaskButton, id=ID_RESOURCEEDITORADDTASKBUTTON)
   417         
   424 
       
   425         self.DeleteTaskButton = wx.Button(id=ID_RESOURCEEDITORDELETETASKBUTTON, label=_('Delete Task'),
   418         self.DeleteTaskButton = wx.Button(id=ID_RESOURCEEDITORDELETETASKBUTTON, label=_('Delete Task'),
   426               name='DeleteTaskButton', parent=self, pos=wx.Point(0, 0),
   419               name='DeleteTaskButton', parent=self, pos=wx.Point(0, 0),
   427               size=wx.DefaultSize, style=0)
   420               size=wx.DefaultSize, style=0)
   428         self.Bind(wx.EVT_BUTTON, self.OnDeleteTaskButton, id=ID_RESOURCEEDITORDELETETASKBUTTON)
   421         
   429 
       
   430         self.UpTaskButton = wx.Button(id=ID_RESOURCEEDITORUPTASKBUTTON, label='^',
   422         self.UpTaskButton = wx.Button(id=ID_RESOURCEEDITORUPTASKBUTTON, label='^',
   431               name='UpTaskButton', parent=self, pos=wx.Point(0, 0),
   423               name='UpTaskButton', parent=self, pos=wx.Point(0, 0),
   432               size=wx.Size(32, 32), style=0)
   424               size=wx.Size(32, 32), style=0)
   433         self.Bind(wx.EVT_BUTTON, self.OnUpTaskButton, id=ID_RESOURCEEDITORUPTASKBUTTON)
   425         
   434 
       
   435         self.DownTaskButton = wx.Button(id=ID_RESOURCEEDITORDOWNTASKBUTTON, label='v',
   426         self.DownTaskButton = wx.Button(id=ID_RESOURCEEDITORDOWNTASKBUTTON, label='v',
   436               name='DownTaskButton', parent=self, pos=wx.Point(0, 0),
   427               name='DownTaskButton', parent=self, pos=wx.Point(0, 0),
   437               size=wx.Size(32, 32), style=0)
   428               size=wx.Size(32, 32), style=0)
   438         self.Bind(wx.EVT_BUTTON, self.OnDownTaskButton, id=ID_RESOURCEEDITORDOWNTASKBUTTON)
   429         
   439 
       
   440         self.staticText2 = wx.StaticText(id=ID_RESOURCEEDITORSTATICTEXT2,
   430         self.staticText2 = wx.StaticText(id=ID_RESOURCEEDITORSTATICTEXT2,
   441               label=_(u'Instances:'), name='staticText1', parent=self,
   431               label=_(u'Instances:'), name='staticText1', parent=self,
   442               pos=wx.Point(0, 0), size=wx.DefaultSize, style=wx.ALIGN_CENTER)
   432               pos=wx.Point(0, 0), size=wx.DefaultSize, style=wx.ALIGN_CENTER)
   443 
   433 
   444         self.InstancesGrid = wx.grid.Grid(id=ID_RESOURCEEDITORINSTANCESGRID,
   434         self.InstancesGrid = CustomGrid(id=ID_RESOURCEEDITORINSTANCESGRID,
   445               name='InstancesGrid', parent=self, pos=wx.Point(0, 0), 
   435               name='InstancesGrid', parent=self, pos=wx.Point(0, 0), 
   446               size=wx.Size(-1, -1), style=wx.VSCROLL)
   436               size=wx.Size(-1, -1), style=wx.VSCROLL)
   447         self.InstancesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False,
   437         self.InstancesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False,
   448               'Sans'))
   438               'Sans'))
   449         self.InstancesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL,
   439         self.InstancesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL,
   450               False, 'Sans'))
   440               False, 'Sans'))
   451         if wx.VERSION >= (2, 5, 0):
   441         if wx.VERSION >= (2, 6, 0):
   452             self.InstancesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnInstancesGridCellChange)
   442             self.InstancesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnInstancesGridCellChange)
   453         else:
   443         else:
   454             wx.grid.EVT_GRID_CELL_CHANGE(self.InstancesGrid, self.OnInstancesGridCellChange)
   444             wx.grid.EVT_GRID_CELL_CHANGE(self.InstancesGrid, self.OnInstancesGridCellChange)
   455         
   445         
   456         self.AddInstanceButton = wx.Button(id=ID_RESOURCEEDITORADDINSTANCEBUTTON, label=_('Add Instance'),
   446         self.AddInstanceButton = wx.Button(id=ID_RESOURCEEDITORADDINSTANCEBUTTON, label=_('Add Instance'),
   457               name='AddInstanceButton', parent=self, pos=wx.Point(0, 0),
   447               name='AddInstanceButton', parent=self, pos=wx.Point(0, 0),
   458               size=wx.DefaultSize, style=0)
   448               size=wx.DefaultSize, style=0)
   459         self.Bind(wx.EVT_BUTTON, self.OnAddInstanceButton, id=ID_RESOURCEEDITORADDINSTANCEBUTTON)
   449         
   460 
       
   461         self.DeleteInstanceButton = wx.Button(id=ID_RESOURCEEDITORDELETEINSTANCEBUTTON, label=_('Delete Instance'),
   450         self.DeleteInstanceButton = wx.Button(id=ID_RESOURCEEDITORDELETEINSTANCEBUTTON, label=_('Delete Instance'),
   462               name='DeleteInstanceButton', parent=self, pos=wx.Point(0, 0),
   451               name='DeleteInstanceButton', parent=self, pos=wx.Point(0, 0),
   463               size=wx.DefaultSize, style=0)
   452               size=wx.DefaultSize, style=0)
   464         self.Bind(wx.EVT_BUTTON, self.OnDeleteInstanceButton, id=ID_RESOURCEEDITORDELETEINSTANCEBUTTON)
   453         
   465 
       
   466         self.UpInstanceButton = wx.Button(id=ID_RESOURCEEDITORUPINSTANCEBUTTON, label='^',
   454         self.UpInstanceButton = wx.Button(id=ID_RESOURCEEDITORUPINSTANCEBUTTON, label='^',
   467               name='UpInstanceButton', parent=self, pos=wx.Point(0, 0),
   455               name='UpInstanceButton', parent=self, pos=wx.Point(0, 0),
   468               size=wx.Size(32, 32), style=0)
   456               size=wx.Size(32, 32), style=0)
   469         self.Bind(wx.EVT_BUTTON, self.OnUpInstanceButton, id=ID_RESOURCEEDITORUPINSTANCEBUTTON)
   457         
   470 
       
   471         self.DownInstanceButton = wx.Button(id=ID_RESOURCEEDITORDOWNINSTANCEBUTTON, label='v',
   458         self.DownInstanceButton = wx.Button(id=ID_RESOURCEEDITORDOWNINSTANCEBUTTON, label='v',
   472               name='DownInstanceButton', parent=self, pos=wx.Point(0, 0),
   459               name='DownInstanceButton', parent=self, pos=wx.Point(0, 0),
   473               size=wx.Size(32, 32), style=0)
   460               size=wx.Size(32, 32), style=0)
   474         self.Bind(wx.EVT_BUTTON, self.OnDownInstanceButton, id=ID_RESOURCEEDITORDOWNINSTANCEBUTTON)
   461         
   475 
       
   476         self._init_sizers()
   462         self._init_sizers()
   477 
   463 
   478     def __init__(self, parent, tagname, window, controler):
   464     def __init__(self, parent, tagname, window, controler):
   479         self._init_ctrls(parent)
   465         self._init_ctrls(parent)
   480         
   466         
   488         self.TasksDefaultValue = {"Name" : "", "Triggering" : "", "Single" : "", "Interval" : "", "Priority" : 0}
   474         self.TasksDefaultValue = {"Name" : "", "Triggering" : "", "Single" : "", "Interval" : "", "Priority" : 0}
   489         self.TasksTable = ResourceTable(self, [], GetTasksTableColnames())
   475         self.TasksTable = ResourceTable(self, [], GetTasksTableColnames())
   490         self.TasksTable.SetColAlignements([wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_RIGHT, wx.ALIGN_RIGHT])
   476         self.TasksTable.SetColAlignements([wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_RIGHT, wx.ALIGN_RIGHT])
   491         self.TasksTable.SetColSizes([200, 100, 100, 150, 100])
   477         self.TasksTable.SetColSizes([200, 100, 100, 150, 100])
   492         self.TasksGrid.SetTable(self.TasksTable)
   478         self.TasksGrid.SetTable(self.TasksTable)
       
   479         self.TasksGrid.SetButtons({"Add": self.AddTaskButton,
       
   480                                    "Delete": self.DeleteTaskButton,
       
   481                                    "Up": self.UpTaskButton,
       
   482                                    "Down": self.DownTaskButton})
       
   483         
       
   484         def _AddTask(new_row):
       
   485             self.TasksTable.InsertRow(new_row, self.TasksDefaultValue.copy())
       
   486             self.RefreshModel()
       
   487             self.RefreshView()
       
   488             return new_row
       
   489         setattr(self.TasksGrid, "_AddRow", _AddTask)
       
   490         
       
   491         def _DeleteTask(row):
       
   492             self.TasksTable.RemoveRow(row)
       
   493             self.RefreshModel()
       
   494             self.RefreshView()
       
   495         setattr(self.TasksGrid, "_DeleteRow", _DeleteTask)
       
   496         
       
   497         def _MoveTask(row, move):
       
   498             new_row = self.TasksTable.MoveRow(row, move)
       
   499             if new_row != row:
       
   500                 self.RefreshModel()
       
   501                 self.RefreshView()
       
   502             return new_row
       
   503         setattr(self.TasksGrid, "_MoveRow", _MoveTask)
       
   504         
   493         self.TasksGrid.SetRowLabelSize(0)
   505         self.TasksGrid.SetRowLabelSize(0)
   494         self.TasksTable.ResetView(self.TasksGrid)
   506         self.TasksTable.ResetView(self.TasksGrid)
   495 
   507         self.TasksGrid.RefreshButtons()
       
   508         
   496         self.InstancesDefaultValue = {"Name" : "", "Type" : "", "Task" : ""}
   509         self.InstancesDefaultValue = {"Name" : "", "Type" : "", "Task" : ""}
   497         self.InstancesTable = ResourceTable(self, [], GetInstancesTableColnames())
   510         self.InstancesTable = ResourceTable(self, [], GetInstancesTableColnames())
   498         self.InstancesTable.SetColAlignements([wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT])
   511         self.InstancesTable.SetColAlignements([wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT])
   499         self.InstancesTable.SetColSizes([200, 150, 150])
   512         self.InstancesTable.SetColSizes([200, 150, 150])
   500         self.InstancesGrid.SetTable(self.InstancesTable)
   513         self.InstancesGrid.SetTable(self.InstancesTable)
       
   514         self.InstancesGrid.SetButtons({"Add": self.AddInstanceButton,
       
   515                                        "Delete": self.DeleteInstanceButton,
       
   516                                        "Up": self.UpInstanceButton,
       
   517                                        "Down": self.DownInstanceButton})
       
   518         
       
   519         def _AddInstance(new_row):
       
   520             self.InstancesTable.InsertRow(new_row, self.InstancesDefaultValue.copy())
       
   521             self.RefreshModel()
       
   522             self.RefreshView()
       
   523             return new_row
       
   524         setattr(self.InstancesGrid, "_AddRow", _AddInstance)
       
   525         
       
   526         def _DeleteInstance(row):
       
   527             self.InstancesTable.RemoveRow(row)
       
   528             self.RefreshModel()
       
   529             self.RefreshView()
       
   530         setattr(self.InstancesGrid, "_DeleteRow", _DeleteInstance)
       
   531         
       
   532         def _MoveInstance(row, move):
       
   533             new_row = max(0, min(row + move, self.InstancesTable.GetNumberRows() - 1))
       
   534             if new_row != row:
       
   535                 if self.InstancesTable.GetValueByName(row, "Task") != self.InstancesTable.GetValueByName(new_row, "Task"):
       
   536                     return row 
       
   537                 self.InstancesTable.MoveRow(row, move)
       
   538                 self.RefreshModel()
       
   539                 self.RefreshView()
       
   540             return new_row
       
   541         setattr(self.InstancesGrid, "_MoveRow", _MoveInstance)
       
   542         
       
   543         def _RefreshInstanceButtons():
       
   544             rows = self.InstancesTable.GetNumberRows()
       
   545             row = self.InstancesGrid.GetGridCursorRow()
       
   546             self.DeleteInstanceButton.Enable(rows > 0)
       
   547             self.UpInstanceButton.Enable(row > 0 and 
       
   548                 self.InstancesTable.GetValueByName(row, "Task") == self.InstancesTable.GetValueByName(row - 1, "Task"))
       
   549             self.DownInstanceButton.Enable(0 <= row < rows - 1 and 
       
   550                 self.InstancesTable.GetValueByName(row, "Task") == self.InstancesTable.GetValueByName(row + 1, "Task"))
       
   551         setattr(self.InstancesGrid, "RefreshButtons", _RefreshInstanceButtons)
       
   552         
   501         self.InstancesGrid.SetRowLabelSize(0)
   553         self.InstancesGrid.SetRowLabelSize(0)
   502         self.InstancesTable.ResetView(self.InstancesGrid)
   554         self.InstancesTable.ResetView(self.InstancesGrid)
   503 
   555         self.InstancesGrid.RefreshButtons()
       
   556         
       
   557         self.TasksGrid.SetFocus()
       
   558         
   504     def __del__(self):
   559     def __del__(self):
   505         self.RefreshHighlightsTimer.Stop()
   560         self.RefreshHighlightsTimer.Stop()
   506 
   561 
   507     def SetTagName(self, tagname):
   562     def SetTagName(self, tagname):
   508         self.TagName = tagname
   563         self.TagName = tagname
   547         self.Controler.BufferProject()
   602         self.Controler.BufferProject()
   548         self.ParentWindow.RefreshTitle()
   603         self.ParentWindow.RefreshTitle()
   549         self.ParentWindow.RefreshFileMenu()
   604         self.ParentWindow.RefreshFileMenu()
   550         self.ParentWindow.RefreshEditMenu()
   605         self.ParentWindow.RefreshEditMenu()
   551 
   606 
   552     def RefreshView(self, task_select=None, instance_select=None):
   607     def RefreshView(self):
   553         tasks, instances = self.Controler.GetEditedResourceInfos(self.TagName)
   608         tasks, instances = self.Controler.GetEditedResourceInfos(self.TagName)
   554         self.TasksTable.SetData(tasks)
   609         self.TasksTable.SetData(tasks)
   555         self.InstancesTable.SetData(instances)
   610         self.InstancesTable.SetData(instances)
   556         self.RefreshTypeList()
   611         self.RefreshTypeList()
   557         self.RefreshTaskList()
   612         self.RefreshTaskList()
   558         self.RefreshVariableList()
   613         self.RefreshVariableList()
   559         self.TasksTable.ResetView(self.TasksGrid)
   614         self.TasksTable.ResetView(self.TasksGrid)
   560         self.InstancesTable.ResetView(self.InstancesGrid)
   615         self.InstancesTable.ResetView(self.InstancesGrid)
   561         if task_select is not None and len(tasks) > 0:
   616         self.TasksGrid.RefreshButtons()
   562             if task_select == -1:
   617         self.InstancesGrid.RefreshButtons()
   563                 task_select = len(tasks) - 1
       
   564             else:
       
   565                 task_select = min(task_select, len(tasks) - 1)
       
   566             col = self.TasksGrid.GetGridCursorCol()
       
   567             self.TasksGrid.SetGridCursor(task_select, col)
       
   568             self.TasksGrid.MakeCellVisible(task_select, col)
       
   569             self.TasksGrid.SetFocus()
       
   570         if instance_select is not None and len(instances) > 0:
       
   571             if instance_select == -1:
       
   572                 instance_select = len(instances) - 1
       
   573             else:
       
   574                 instance_select = min(instance_select, len(instances) - 1)
       
   575             col = self.InstancesGrid.GetGridCursorCol()
       
   576             self.InstancesGrid.SetGridCursor(instance_select, col)
       
   577             self.InstancesGrid.MakeCellVisible(instance_select, col)
       
   578             self.InstancesGrid.SetFocus()
       
   579         
   618         
   580     def RefreshScaling(self, refresh=True):
   619     def RefreshScaling(self, refresh=True):
   581         pass
   620         pass
   582 
   621     
   583     def CloseTasksGridEditControl(self):
       
   584         row = self.TasksGrid.GetGridCursorRow()
       
   585         col = self.TasksGrid.GetGridCursorCol()
       
   586         self.TasksGrid.SetGridCursor(row, col)
       
   587 
       
   588     def OnAddTaskButton(self, event):
       
   589         self.CloseTasksGridEditControl()
       
   590         if len(self.TasksTable.data) > 0:
       
   591             row = self.TasksGrid.GetGridCursorRow() + 1
       
   592         else:
       
   593             row = -1
       
   594         self.TasksTable.InsertRow(row, self.TasksDefaultValue.copy())
       
   595         self.RefreshModel()
       
   596         self.RefreshView(task_select=row)
       
   597         event.Skip()
       
   598 
       
   599     def OnDeleteTaskButton(self, event):
       
   600         self.CloseTasksGridEditControl()
       
   601         row = self.TasksGrid.GetGridCursorRow()
       
   602         self.TasksTable.RemoveRow(row)
       
   603         self.RefreshModel()
       
   604         self.RefreshView(task_select=row)
       
   605         event.Skip()
       
   606 
       
   607     def OnUpTaskButton(self, event):
       
   608         self.CloseTasksGridEditControl()
       
   609         row = self.TasksGrid.GetGridCursorRow()
       
   610         new_row = self.TasksTable.MoveRow(row, -1)
       
   611         self.RefreshModel()
       
   612         self.RefreshView(task_select=new_row)
       
   613         event.Skip()
       
   614 
       
   615     def OnDownTaskButton(self, event):
       
   616         self.CloseTasksGridEditControl()
       
   617         row = self.TasksGrid.GetGridCursorRow()
       
   618         new_row = self.TasksTable.MoveRow(row, 1)
       
   619         self.RefreshModel()
       
   620         self.RefreshView(task_select=new_row)
       
   621         event.Skip()
       
   622 
       
   623     def CloseInstancesGridEditControl(self):
       
   624         row = self.InstancesGrid.GetGridCursorRow()
       
   625         col = self.InstancesGrid.GetGridCursorCol()
       
   626         self.InstancesGrid.SetGridCursor(row, col)
       
   627 
       
   628     def OnAddInstanceButton(self, event):
       
   629         self.CloseInstancesGridEditControl()
       
   630         if len(self.InstancesTable.data) > 0:
       
   631             row = self.InstancesGrid.GetGridCursorRow() + 1
       
   632         else:
       
   633             row = -1
       
   634         self.InstancesTable.InsertRow(row, self.InstancesDefaultValue.copy())
       
   635         self.RefreshModel()
       
   636         self.RefreshView(instance_select=row)
       
   637         self.ParentWindow.RefreshInstancesTree()
       
   638         event.Skip()
       
   639 
       
   640     def OnDeleteInstanceButton(self, event):
       
   641         self.CloseInstancesGridEditControl()
       
   642         row = self.InstancesGrid.GetGridCursorRow()
       
   643         self.InstancesTable.RemoveRow(row)
       
   644         self.RefreshModel()
       
   645         self.RefreshView(instance_select=row)
       
   646         self.ParentWindow.RefreshInstancesTree()
       
   647         event.Skip()
       
   648 
       
   649     def OnUpInstanceButton(self, event):
       
   650         self.CloseInstancesGridEditControl()
       
   651         row = self.InstancesGrid.GetGridCursorRow()
       
   652         new_row = self.InstancesTable.MoveRow(row, -1)
       
   653         self.RefreshModel()
       
   654         self.RefreshView(instance_select=new_row)
       
   655         self.ParentWindow.RefreshInstancesTree()
       
   656         event.Skip()
       
   657 
       
   658     def OnDownInstanceButton(self, event):
       
   659         self.CloseInstancesGridEditControl()
       
   660         row = self.InstancesGrid.GetGridCursorRow()
       
   661         new_row = self.InstancesTable.MoveRow(row, 1)
       
   662         self.RefreshModel()
       
   663         self.RefreshView(instance_select=new_row)
       
   664         self.ParentWindow.RefreshInstancesTree()
       
   665         event.Skip()
       
   666 
       
   667     def OnTasksGridCellChange(self, event):
   622     def OnTasksGridCellChange(self, event):
   668         row, col = event.GetRow(), event.GetCol()
   623         row, col = event.GetRow(), event.GetCol()
   669         if self.TasksTable.GetColLabelValue(event.GetCol()) == "Name":
   624         if self.TasksTable.GetColLabelValue(event.GetCol()) == "Name":
   670             tasklist = self.TaskList.split(",")
   625             tasklist = self.TaskList.split(",")
   671             for i in xrange(self.TasksTable.GetNumberRows()):
   626             for i in xrange(self.TasksTable.GetNumberRows()):
   686         event.Skip()
   641         event.Skip()
   687 
   642 
   688     def OnInstancesGridCellChange(self, event):
   643     def OnInstancesGridCellChange(self, event):
   689         self.RefreshModel()
   644         self.RefreshModel()
   690         self.ParentWindow.RefreshInstancesTree()
   645         self.ParentWindow.RefreshInstancesTree()
       
   646         self.InstancesGrid.RefreshButtons()
   691         event.Skip()
   647         event.Skip()
   692 
   648 
   693 #-------------------------------------------------------------------------------
   649 #-------------------------------------------------------------------------------
   694 #                        Highlights showing functions
   650 #                        Highlights showing functions
   695 #-------------------------------------------------------------------------------
   651 #-------------------------------------------------------------------------------