diff -r 984c51d1bf6b -r 3757f0de0d07 RessourceEditor.py --- a/RessourceEditor.py Thu Sep 15 22:29:32 2011 +0200 +++ b/RessourceEditor.py Tue Sep 20 23:58:31 2011 +0200 @@ -79,7 +79,12 @@ def GetTasksTableColnames(): _ = lambda x : x - return [_("Name"), _("Single"), _("Interval"), _("Priority")] + return [_("Name"), _("Triggering"), _("Single"), _("Interval"), _("Priority")] + +def GetTaskTriggeringOptions(): + _ = lambda x : x + return [_("Interrupt"), _("Cyclic")] +TASKTRIGGERINGOPTIONS_DICT = dict([(_(option), option) for option in GetTaskTriggeringOptions()]) def GetInstancesTableColnames(): _ = lambda x : x @@ -135,15 +140,21 @@ def GetValue(self, row, col): if row < self.GetNumberRows(): - name = str(self.data[row].get(self.GetColLabelValue(col, False), "")) - return name - + colname = self.GetColLabelValue(col, False) + value = str(self.data[row].get(colname, "")) + if colname == "Triggering": + return _(value) + return value + def GetValueByName(self, row, colname): return self.data[row].get(colname) def SetValue(self, row, col, value): if col < len(self.colnames): - self.data[row][self.GetColLabelValue(col, False)] = value + colname = self.GetColLabelValue(col, False) + if colname == "Triggering": + value = TASKTRIGGERINGOPTIONS_DICT[value] + self.data[row][colname] = value def SetValueByName(self, row, colname, value): if colname in self.colnames: @@ -203,16 +214,19 @@ renderer = None colname = self.GetColLabelValue(col, False) grid.SetReadOnly(row, col, False) - if colname in ["Name","Interval"]: + if colname in ["Name", "Interval"]: editor = wx.grid.GridCellTextEditor() renderer = wx.grid.GridCellStringRenderer() - if colname == "Interval" and self.GetValueByName(row, "Single") != "": + if colname == "Interval" and self.GetValueByName(row, "Triggering") != "Cyclic": grid.SetReadOnly(row, col, True) elif colname == "Single": editor = wx.grid.GridCellChoiceEditor() editor.SetParameters(self.Parent.VariableList) - if self.GetValueByName(row, "Interval") != "": + if self.GetValueByName(row, "Triggering") != "Interrupt": grid.SetReadOnly(row, col, True) + elif colname == "Triggering": + editor = wx.grid.GridCellChoiceEditor() + editor.SetParameters(",".join([""] + GetTaskTriggeringOptions())) elif colname == "Type": editor = wx.grid.GridCellChoiceEditor() editor.SetParameters(self.Parent.TypeList) @@ -233,6 +247,11 @@ else: grid.SetCellTextColour(row, col, wx.BLACK) grid.SetCellBackgroundColour(row, col, wx.WHITE) + if wx.Platform == '__WXMSW__': + grid.SetRowMinimalHeight(row, 20) + else: + grid.SetRowMinimalHeight(row, 28) + grid.AutoSizeRow(row, False) def SetData(self, data): self.data = data @@ -249,14 +268,18 @@ def AppendRow(self, row_content): self.data.append(row_content) + def InsertRow(self, index, row_content): + self.data.insert(index, row_content) + def RemoveRow(self, row_index): self.data.pop(row_index) - def MoveRow(self, row_index, move, grid): + def MoveRow(self, row_index, move): new_index = max(0, min(row_index + move, len(self.data) - 1)) if new_index != row_index: self.data.insert(new_index, self.data.pop(row_index)) - grid.SetGridCursor(new_index, grid.GetGridCursorCol()) + return new_index + return None def Empty(self): self.data = [] @@ -438,10 +461,10 @@ self.Controler = controler self.TagName = tagname - self.TasksDefaultValue = {"Name" : "", "Single" : "", "Interval" : "", "Priority" : 0} + self.TasksDefaultValue = {"Name" : "", "Triggering" : "", "Single" : "", "Interval" : "", "Priority" : 0} self.TasksTable = ResourceTable(self, [], GetTasksTableColnames()) - self.TasksTable.SetColAlignements([wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_RIGHT, wx.ALIGN_RIGHT]) - self.TasksTable.SetColSizes([200, 100, 100, 100]) + self.TasksTable.SetColAlignements([wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_RIGHT, wx.ALIGN_RIGHT]) + self.TasksTable.SetColSizes([200, 100, 100, 100, 100]) self.TasksGrid.SetTable(self.TasksTable) self.TasksGrid.SetRowLabelSize(0) self.TasksTable.ResetView(self.TasksGrid) @@ -499,74 +522,118 @@ self.ParentWindow.RefreshFileMenu() self.ParentWindow.RefreshEditMenu() - def RefreshView(self): + def RefreshView(self, task_select=None, instance_select=None): tasks, instances = self.Controler.GetEditedResourceInfos(self.TagName) self.TasksTable.SetData(tasks) self.InstancesTable.SetData(instances) self.RefreshTypeList() self.RefreshTaskList() self.RefreshVariableList() + self.TasksTable.ResetView(self.TasksGrid) self.InstancesTable.ResetView(self.InstancesGrid) - self.TasksTable.ResetView(self.TasksGrid) - + if task_select is not None and len(tasks) > 0: + if task_select == -1: + task_select = len(tasks) - 1 + else: + task_select = min(task_select, len(tasks) - 1) + col = self.TasksGrid.GetGridCursorCol() + self.TasksGrid.SetGridCursor(task_select, col) + self.TasksGrid.MakeCellVisible(instance_select, col) + self.TasksGrid.SetFocus() + if instance_select is not None and len(instances) > 0: + if instance_select == -1: + instance_select = len(instances) - 1 + else: + task_select = min(task_select, len(instances) - 1) + col = self.InstancesGrid.GetGridCursorCol() + self.InstancesGrid.SetGridCursor(instance_select, col) + self.InstancesGrid.MakeCellVisible(instance_select, col) + self.InstancesGrid.SetFocus() + def RefreshScaling(self, refresh=True): pass + def CloseTasksGridEditControl(self): + row = self.TasksGrid.GetGridCursorRow() + col = self.TasksGrid.GetGridCursorCol() + self.TasksGrid.SetGridCursor(row, col) + def OnAddTaskButton(self, event): - self.TasksTable.AppendRow(self.TasksDefaultValue.copy()) - self.RefreshModel() - self.RefreshView() + self.CloseTasksGridEditControl() + if len(self.TasksTable.data) > 0: + row = self.TasksGrid.GetGridCursorRow() + 1 + else: + row = -1 + self.TasksTable.InsertRow(row, self.TasksDefaultValue.copy()) + self.RefreshModel() + self.RefreshView(task_select=row) event.Skip() def OnDeleteTaskButton(self, event): + self.CloseTasksGridEditControl() row = self.TasksGrid.GetGridCursorRow() self.TasksTable.RemoveRow(row) self.RefreshModel() - self.RefreshView() + self.RefreshView(task_select=row) event.Skip() def OnUpTaskButton(self, event): + self.CloseTasksGridEditControl() row = self.TasksGrid.GetGridCursorRow() - self.TasksTable.MoveRow(row, -1, self.TasksGrid) - self.RefreshModel() - self.RefreshView() + new_row = self.TasksTable.MoveRow(row, -1) + self.RefreshModel() + self.RefreshView(task_select=new_row) event.Skip() def OnDownTaskButton(self, event): + self.CloseTasksGridEditControl() row = self.TasksGrid.GetGridCursorRow() - self.TasksTable.MoveRow(row, 1, self.TasksGrid) - self.RefreshModel() - self.RefreshView() - event.Skip() + new_row = self.TasksTable.MoveRow(row, 1) + self.RefreshModel() + self.RefreshView(task_select=new_row) + event.Skip() + + def CloseInstancesGridEditControl(self): + row = self.InstancesGrid.GetGridCursorRow() + col = self.InstancesGrid.GetGridCursorCol() + self.InstancesGrid.SetGridCursor(row, col) def OnAddInstanceButton(self, event): - self.InstancesTable.AppendRow(self.InstancesDefaultValue.copy()) - self.RefreshModel() - self.RefreshView() + self.CloseInstancesGridEditControl() + if len(self.InstancesTable.data) > 0: + row = self.InstancesGrid.GetGridCursorRow() + 1 + else: + row = -1 + self.InstancesTable.InsertRow(row, self.InstancesDefaultValue.copy()) + self.RefreshModel() + self.RefreshView(instance_select=row) self.ParentWindow.RefreshInstancesTree() event.Skip() def OnDeleteInstanceButton(self, event): + self.CloseInstancesGridEditControl() row = self.InstancesGrid.GetGridCursorRow() self.InstancesTable.RemoveRow(row) self.RefreshModel() - self.RefreshView() + self.RefreshView(instance_select=row) self.ParentWindow.RefreshInstancesTree() event.Skip() def OnUpInstanceButton(self, event): + self.CloseInstancesGridEditControl() row = self.InstancesGrid.GetGridCursorRow() - self.InstancesTable.MoveRow(row, -1, self.InstancesGrid) - self.RefreshModel() - self.RefreshView() + new_row = self.InstancesTable.MoveRow(row, -1) + self.RefreshModel() + self.RefreshView(instance_select=new_row) self.ParentWindow.RefreshInstancesTree() event.Skip() def OnDownInstanceButton(self, event): + self.CloseInstancesGridEditControl() row = self.InstancesGrid.GetGridCursorRow() - self.InstancesTable.MoveRow(row, 1, self.InstancesGrid) - self.RefreshModel() - self.RefreshView() + new_row = self.InstancesTable.MoveRow(row, 1) + self.RefreshModel() + self.RefreshView(instance_select=new_row) self.ParentWindow.RefreshInstancesTree() event.Skip() @@ -586,12 +653,13 @@ if self.InstancesTable.GetValueByName(i, "Task") == old_name: self.InstancesTable.SetValueByName(i, "Task", new_name) self.RefreshModel() - self.RefreshView() + colname = self.TasksTable.GetColLabelValue(col, False) + if colname == "Triggering": + wx.CallAfter(self.RefreshView) event.Skip() def OnInstancesGridCellChange(self, event): self.RefreshModel() - self.RefreshView() self.ParentWindow.RefreshInstancesTree() event.Skip()