RessourceEditor.py
changeset 560 3757f0de0d07
parent 494 c91644c2bfa7
child 564 5024d42e1050
equal deleted inserted replaced
559:984c51d1bf6b 560:3757f0de0d07
    77 #                            Resource Editor class
    77 #                            Resource Editor class
    78 #-------------------------------------------------------------------------------
    78 #-------------------------------------------------------------------------------
    79 
    79 
    80 def GetTasksTableColnames():
    80 def GetTasksTableColnames():
    81     _ = lambda x : x
    81     _ = lambda x : x
    82     return [_("Name"), _("Single"), _("Interval"), _("Priority")]
    82     return [_("Name"), _("Triggering"), _("Single"), _("Interval"), _("Priority")]
       
    83 
       
    84 def GetTaskTriggeringOptions():
       
    85     _ = lambda x : x
       
    86     return [_("Interrupt"), _("Cyclic")]
       
    87 TASKTRIGGERINGOPTIONS_DICT = dict([(_(option), option) for option in GetTaskTriggeringOptions()])
    83 
    88 
    84 def GetInstancesTableColnames():
    89 def GetInstancesTableColnames():
    85     _ = lambda x : x
    90     _ = lambda x : x
    86     return [_("Name"), _("Type"), _("Task")]
    91     return [_("Name"), _("Type"), _("Task")]
    87 
    92 
   133     def GetRowLabelValues(self, row, translate=True):
   138     def GetRowLabelValues(self, row, translate=True):
   134         return row
   139         return row
   135 
   140 
   136     def GetValue(self, row, col):
   141     def GetValue(self, row, col):
   137         if row < self.GetNumberRows():
   142         if row < self.GetNumberRows():
   138             name = str(self.data[row].get(self.GetColLabelValue(col, False), ""))
   143             colname = self.GetColLabelValue(col, False)
   139             return name
   144             value = str(self.data[row].get(colname, ""))
   140     
   145             if colname == "Triggering":
       
   146                 return _(value)
       
   147             return value
       
   148         
   141     def GetValueByName(self, row, colname):
   149     def GetValueByName(self, row, colname):
   142         return self.data[row].get(colname)
   150         return self.data[row].get(colname)
   143 
   151 
   144     def SetValue(self, row, col, value):
   152     def SetValue(self, row, col, value):
   145         if col < len(self.colnames):
   153         if col < len(self.colnames):
   146             self.data[row][self.GetColLabelValue(col, False)] = value
   154             colname = self.GetColLabelValue(col, False)
       
   155             if colname == "Triggering":
       
   156                 value = TASKTRIGGERINGOPTIONS_DICT[value]
       
   157             self.data[row][colname] = value
   147     
   158     
   148     def SetValueByName(self, row, colname, value):
   159     def SetValueByName(self, row, colname, value):
   149         if colname in self.colnames:
   160         if colname in self.colnames:
   150             self.data[row][colname] = value
   161             self.data[row][colname] = value
   151     
   162     
   201             for col in range(self.GetNumberCols()):
   212             for col in range(self.GetNumberCols()):
   202                 editor = None
   213                 editor = None
   203                 renderer = None
   214                 renderer = None
   204                 colname = self.GetColLabelValue(col, False)
   215                 colname = self.GetColLabelValue(col, False)
   205                 grid.SetReadOnly(row, col, False)
   216                 grid.SetReadOnly(row, col, False)
   206                 if colname in ["Name","Interval"]:
   217                 if colname in ["Name", "Interval"]:
   207                     editor = wx.grid.GridCellTextEditor()
   218                     editor = wx.grid.GridCellTextEditor()
   208                     renderer = wx.grid.GridCellStringRenderer()
   219                     renderer = wx.grid.GridCellStringRenderer()
   209                     if colname == "Interval" and self.GetValueByName(row, "Single") != "":
   220                     if colname == "Interval" and self.GetValueByName(row, "Triggering") != "Cyclic":
   210                         grid.SetReadOnly(row, col, True)
   221                         grid.SetReadOnly(row, col, True)
   211                 elif colname == "Single":
   222                 elif colname == "Single":
   212                     editor = wx.grid.GridCellChoiceEditor()
   223                     editor = wx.grid.GridCellChoiceEditor()
   213                     editor.SetParameters(self.Parent.VariableList)
   224                     editor.SetParameters(self.Parent.VariableList)
   214                     if self.GetValueByName(row, "Interval") != "":
   225                     if self.GetValueByName(row, "Triggering") != "Interrupt":
   215                         grid.SetReadOnly(row, col, True)
   226                         grid.SetReadOnly(row, col, True)
       
   227                 elif colname == "Triggering":
       
   228                     editor = wx.grid.GridCellChoiceEditor()
       
   229                     editor.SetParameters(",".join([""] + GetTaskTriggeringOptions()))
   216                 elif colname == "Type":
   230                 elif colname == "Type":
   217                     editor = wx.grid.GridCellChoiceEditor()
   231                     editor = wx.grid.GridCellChoiceEditor()
   218                     editor.SetParameters(self.Parent.TypeList)
   232                     editor.SetParameters(self.Parent.TypeList)
   219                 elif colname == "Priority":
   233                 elif colname == "Priority":
   220                     editor = wx.grid.GridCellNumberEditor()
   234                     editor = wx.grid.GridCellNumberEditor()
   231                     grid.SetCellTextColour(row, col, wx.RED)
   245                     grid.SetCellTextColour(row, col, wx.RED)
   232                     grid.MakeCellVisible(row, col)
   246                     grid.MakeCellVisible(row, col)
   233                 else:
   247                 else:
   234                     grid.SetCellTextColour(row, col, wx.BLACK)
   248                     grid.SetCellTextColour(row, col, wx.BLACK)
   235                     grid.SetCellBackgroundColour(row, col, wx.WHITE)
   249                     grid.SetCellBackgroundColour(row, col, wx.WHITE)
       
   250             if wx.Platform == '__WXMSW__':
       
   251                 grid.SetRowMinimalHeight(row, 20)
       
   252             else:
       
   253                 grid.SetRowMinimalHeight(row, 28)
       
   254             grid.AutoSizeRow(row, False)
   236     
   255     
   237     def SetData(self, data):
   256     def SetData(self, data):
   238         self.data = data
   257         self.data = data
   239     
   258     
   240     def GetData(self):
   259     def GetData(self):
   247         self.CurrentIndex = index
   266         self.CurrentIndex = index
   248     
   267     
   249     def AppendRow(self, row_content):
   268     def AppendRow(self, row_content):
   250         self.data.append(row_content)
   269         self.data.append(row_content)
   251 
   270 
       
   271     def InsertRow(self, index, row_content):
       
   272         self.data.insert(index, row_content)
       
   273 
   252     def RemoveRow(self, row_index):
   274     def RemoveRow(self, row_index):
   253         self.data.pop(row_index)
   275         self.data.pop(row_index)
   254         
   276         
   255     def MoveRow(self, row_index, move, grid):
   277     def MoveRow(self, row_index, move):
   256         new_index = max(0, min(row_index + move, len(self.data) - 1))
   278         new_index = max(0, min(row_index + move, len(self.data) - 1))
   257         if new_index != row_index:
   279         if new_index != row_index:
   258             self.data.insert(new_index, self.data.pop(row_index))
   280             self.data.insert(new_index, self.data.pop(row_index))
   259             grid.SetGridCursor(new_index, grid.GetGridCursorCol())
   281             return new_index
       
   282         return None
   260 
   283 
   261     def Empty(self):
   284     def Empty(self):
   262         self.data = []
   285         self.data = []
   263         self.editors = []
   286         self.editors = []
   264 
   287 
   436         
   459         
   437         self.ParentWindow = window
   460         self.ParentWindow = window
   438         self.Controler = controler
   461         self.Controler = controler
   439         self.TagName = tagname
   462         self.TagName = tagname
   440         
   463         
   441         self.TasksDefaultValue = {"Name" : "", "Single" : "", "Interval" : "", "Priority" : 0}
   464         self.TasksDefaultValue = {"Name" : "", "Triggering" : "", "Single" : "", "Interval" : "", "Priority" : 0}
   442         self.TasksTable = ResourceTable(self, [], GetTasksTableColnames())
   465         self.TasksTable = ResourceTable(self, [], GetTasksTableColnames())
   443         self.TasksTable.SetColAlignements([wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_RIGHT, wx.ALIGN_RIGHT])
   466         self.TasksTable.SetColAlignements([wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_RIGHT, wx.ALIGN_RIGHT])
   444         self.TasksTable.SetColSizes([200, 100, 100, 100])
   467         self.TasksTable.SetColSizes([200, 100, 100, 100, 100])
   445         self.TasksGrid.SetTable(self.TasksTable)
   468         self.TasksGrid.SetTable(self.TasksTable)
   446         self.TasksGrid.SetRowLabelSize(0)
   469         self.TasksGrid.SetRowLabelSize(0)
   447         self.TasksTable.ResetView(self.TasksGrid)
   470         self.TasksTable.ResetView(self.TasksGrid)
   448 
   471 
   449         self.InstancesDefaultValue = {"Name" : "", "Type" : "", "Task" : ""}
   472         self.InstancesDefaultValue = {"Name" : "", "Type" : "", "Task" : ""}
   497         self.Controler.BufferProject()
   520         self.Controler.BufferProject()
   498         self.ParentWindow.RefreshTitle()
   521         self.ParentWindow.RefreshTitle()
   499         self.ParentWindow.RefreshFileMenu()
   522         self.ParentWindow.RefreshFileMenu()
   500         self.ParentWindow.RefreshEditMenu()
   523         self.ParentWindow.RefreshEditMenu()
   501 
   524 
   502     def RefreshView(self):
   525     def RefreshView(self, task_select=None, instance_select=None):
   503         tasks, instances = self.Controler.GetEditedResourceInfos(self.TagName)
   526         tasks, instances = self.Controler.GetEditedResourceInfos(self.TagName)
   504         self.TasksTable.SetData(tasks)
   527         self.TasksTable.SetData(tasks)
   505         self.InstancesTable.SetData(instances)
   528         self.InstancesTable.SetData(instances)
   506         self.RefreshTypeList()
   529         self.RefreshTypeList()
   507         self.RefreshTaskList()
   530         self.RefreshTaskList()
   508         self.RefreshVariableList()
   531         self.RefreshVariableList()
       
   532         self.TasksTable.ResetView(self.TasksGrid)
   509         self.InstancesTable.ResetView(self.InstancesGrid)
   533         self.InstancesTable.ResetView(self.InstancesGrid)
   510         self.TasksTable.ResetView(self.TasksGrid)
   534         if task_select is not None and len(tasks) > 0:
   511 
   535             if task_select == -1:
       
   536                 task_select = len(tasks) - 1
       
   537             else:
       
   538                 task_select = min(task_select, len(tasks) - 1)
       
   539             col = self.TasksGrid.GetGridCursorCol()
       
   540             self.TasksGrid.SetGridCursor(task_select, col)
       
   541             self.TasksGrid.MakeCellVisible(instance_select, col)
       
   542             self.TasksGrid.SetFocus()
       
   543         if instance_select is not None and len(instances) > 0:
       
   544             if instance_select == -1:
       
   545                 instance_select = len(instances) - 1
       
   546             else:
       
   547                 task_select = min(task_select, len(instances) - 1)
       
   548             col = self.InstancesGrid.GetGridCursorCol()
       
   549             self.InstancesGrid.SetGridCursor(instance_select, col)
       
   550             self.InstancesGrid.MakeCellVisible(instance_select, col)
       
   551             self.InstancesGrid.SetFocus()
       
   552         
   512     def RefreshScaling(self, refresh=True):
   553     def RefreshScaling(self, refresh=True):
   513         pass
   554         pass
   514 
   555 
       
   556     def CloseTasksGridEditControl(self):
       
   557         row = self.TasksGrid.GetGridCursorRow()
       
   558         col = self.TasksGrid.GetGridCursorCol()
       
   559         self.TasksGrid.SetGridCursor(row, col)
       
   560 
   515     def OnAddTaskButton(self, event):
   561     def OnAddTaskButton(self, event):
   516         self.TasksTable.AppendRow(self.TasksDefaultValue.copy())
   562         self.CloseTasksGridEditControl()
   517         self.RefreshModel()
   563         if len(self.TasksTable.data) > 0:
   518         self.RefreshView()
   564             row = self.TasksGrid.GetGridCursorRow() + 1
       
   565         else:
       
   566             row = -1
       
   567         self.TasksTable.InsertRow(row, self.TasksDefaultValue.copy())
       
   568         self.RefreshModel()
       
   569         self.RefreshView(task_select=row)
   519         event.Skip()
   570         event.Skip()
   520 
   571 
   521     def OnDeleteTaskButton(self, event):
   572     def OnDeleteTaskButton(self, event):
       
   573         self.CloseTasksGridEditControl()
   522         row = self.TasksGrid.GetGridCursorRow()
   574         row = self.TasksGrid.GetGridCursorRow()
   523         self.TasksTable.RemoveRow(row)
   575         self.TasksTable.RemoveRow(row)
   524         self.RefreshModel()
   576         self.RefreshModel()
   525         self.RefreshView()
   577         self.RefreshView(task_select=row)
   526         event.Skip()
   578         event.Skip()
   527 
   579 
   528     def OnUpTaskButton(self, event):
   580     def OnUpTaskButton(self, event):
       
   581         self.CloseTasksGridEditControl()
   529         row = self.TasksGrid.GetGridCursorRow()
   582         row = self.TasksGrid.GetGridCursorRow()
   530         self.TasksTable.MoveRow(row, -1, self.TasksGrid)
   583         new_row = self.TasksTable.MoveRow(row, -1)
   531         self.RefreshModel()
   584         self.RefreshModel()
   532         self.RefreshView()
   585         self.RefreshView(task_select=new_row)
   533         event.Skip()
   586         event.Skip()
   534 
   587 
   535     def OnDownTaskButton(self, event):
   588     def OnDownTaskButton(self, event):
       
   589         self.CloseTasksGridEditControl()
   536         row = self.TasksGrid.GetGridCursorRow()
   590         row = self.TasksGrid.GetGridCursorRow()
   537         self.TasksTable.MoveRow(row, 1, self.TasksGrid)
   591         new_row = self.TasksTable.MoveRow(row, 1)
   538         self.RefreshModel()
   592         self.RefreshModel()
   539         self.RefreshView()
   593         self.RefreshView(task_select=new_row)
   540         event.Skip()
   594         event.Skip()
       
   595 
       
   596     def CloseInstancesGridEditControl(self):
       
   597         row = self.InstancesGrid.GetGridCursorRow()
       
   598         col = self.InstancesGrid.GetGridCursorCol()
       
   599         self.InstancesGrid.SetGridCursor(row, col)
   541 
   600 
   542     def OnAddInstanceButton(self, event):
   601     def OnAddInstanceButton(self, event):
   543         self.InstancesTable.AppendRow(self.InstancesDefaultValue.copy())
   602         self.CloseInstancesGridEditControl()
   544         self.RefreshModel()
   603         if len(self.InstancesTable.data) > 0:
   545         self.RefreshView()
   604             row = self.InstancesGrid.GetGridCursorRow() + 1
       
   605         else:
       
   606             row = -1
       
   607         self.InstancesTable.InsertRow(row, self.InstancesDefaultValue.copy())
       
   608         self.RefreshModel()
       
   609         self.RefreshView(instance_select=row)
   546         self.ParentWindow.RefreshInstancesTree()
   610         self.ParentWindow.RefreshInstancesTree()
   547         event.Skip()
   611         event.Skip()
   548 
   612 
   549     def OnDeleteInstanceButton(self, event):
   613     def OnDeleteInstanceButton(self, event):
       
   614         self.CloseInstancesGridEditControl()
   550         row = self.InstancesGrid.GetGridCursorRow()
   615         row = self.InstancesGrid.GetGridCursorRow()
   551         self.InstancesTable.RemoveRow(row)
   616         self.InstancesTable.RemoveRow(row)
   552         self.RefreshModel()
   617         self.RefreshModel()
   553         self.RefreshView()
   618         self.RefreshView(instance_select=row)
   554         self.ParentWindow.RefreshInstancesTree()
   619         self.ParentWindow.RefreshInstancesTree()
   555         event.Skip()
   620         event.Skip()
   556 
   621 
   557     def OnUpInstanceButton(self, event):
   622     def OnUpInstanceButton(self, event):
       
   623         self.CloseInstancesGridEditControl()
   558         row = self.InstancesGrid.GetGridCursorRow()
   624         row = self.InstancesGrid.GetGridCursorRow()
   559         self.InstancesTable.MoveRow(row, -1, self.InstancesGrid)
   625         new_row = self.InstancesTable.MoveRow(row, -1)
   560         self.RefreshModel()
   626         self.RefreshModel()
   561         self.RefreshView()
   627         self.RefreshView(instance_select=new_row)
   562         self.ParentWindow.RefreshInstancesTree()
   628         self.ParentWindow.RefreshInstancesTree()
   563         event.Skip()
   629         event.Skip()
   564 
   630 
   565     def OnDownInstanceButton(self, event):
   631     def OnDownInstanceButton(self, event):
       
   632         self.CloseInstancesGridEditControl()
   566         row = self.InstancesGrid.GetGridCursorRow()
   633         row = self.InstancesGrid.GetGridCursorRow()
   567         self.InstancesTable.MoveRow(row, 1, self.InstancesGrid)
   634         new_row = self.InstancesTable.MoveRow(row, 1)
   568         self.RefreshModel()
   635         self.RefreshModel()
   569         self.RefreshView()
   636         self.RefreshView(instance_select=new_row)
   570         self.ParentWindow.RefreshInstancesTree()
   637         self.ParentWindow.RefreshInstancesTree()
   571         event.Skip()
   638         event.Skip()
   572 
   639 
   573     def OnTasksGridCellChange(self, event):
   640     def OnTasksGridCellChange(self, event):
   574         row, col = event.GetRow(), event.GetCol()
   641         row, col = event.GetRow(), event.GetCol()
   584                 new_name = self.TasksTable.GetValue(row, col)
   651                 new_name = self.TasksTable.GetValue(row, col)
   585                 for i in xrange(self.InstancesTable.GetNumberRows()):
   652                 for i in xrange(self.InstancesTable.GetNumberRows()):
   586                     if self.InstancesTable.GetValueByName(i, "Task") == old_name:
   653                     if self.InstancesTable.GetValueByName(i, "Task") == old_name:
   587                         self.InstancesTable.SetValueByName(i, "Task", new_name)
   654                         self.InstancesTable.SetValueByName(i, "Task", new_name)
   588         self.RefreshModel()
   655         self.RefreshModel()
   589         self.RefreshView()
   656         colname = self.TasksTable.GetColLabelValue(col, False)
       
   657         if colname == "Triggering":
       
   658             wx.CallAfter(self.RefreshView)
   590         event.Skip()
   659         event.Skip()
   591 
   660 
   592     def OnInstancesGridCellChange(self, event):
   661     def OnInstancesGridCellChange(self, event):
   593         self.RefreshModel()
   662         self.RefreshModel()
   594         self.RefreshView()
       
   595         self.ParentWindow.RefreshInstancesTree()
   663         self.ParentWindow.RefreshInstancesTree()
   596         event.Skip()
   664         event.Skip()
   597 
   665 
   598 #-------------------------------------------------------------------------------
   666 #-------------------------------------------------------------------------------
   599 #                        Errors showing functions
   667 #                        Errors showing functions