--- 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()