diff -r 3f2024f30553 -r 9dbb79722fbc RessourceEditor.py --- a/RessourceEditor.py Wed Oct 12 23:47:48 2011 +0200 +++ b/RessourceEditor.py Fri Oct 14 19:26:29 2011 +0200 @@ -26,6 +26,7 @@ import wx.grid from dialogs import DurationEditorDialog +from controls import CustomGrid #------------------------------------------------------------------------------- # Configuration Editor class @@ -279,27 +280,20 @@ 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)) - return new_index - return None - + return new_index + def Empty(self): self.data = [] - self.editors = [] - + #------------------------------------------------------------------------------- # Highlights showing functions #------------------------------------------------------------------------------- - def OnRefreshHighlightsTimer(self, event): - self.Table.ResetView(self.VariablesGrid) - event.Skip() - def AddHighlight(self, infos, highlight_type): row_highlights = self.Highlights.setdefault(infos[0], {}) col_highlights = row_highlights.setdefault(infos[1], []) col_highlights.append(highlight_type) - self.RefreshHighlightsTimer.Start(int(REFRESH_HIGHLIGHT_PERIOD * 1000), oneShot=True) - + def ClearHighlights(self, highlight_type=None): if highlight_type is None: self.Highlights = {} @@ -405,14 +399,14 @@ label=_(u'Tasks:'), name='staticText2', parent=self, pos=wx.Point(0, 0), size=wx.DefaultSize, style=wx.ALIGN_CENTER) - self.TasksGrid = wx.grid.Grid(id=ID_RESOURCEEDITORTASKSGRID, + self.TasksGrid = CustomGrid(id=ID_RESOURCEEDITORTASKSGRID, name='TasksGrid', parent=self, pos=wx.Point(0, 0), size=wx.Size(-1, -1), style=wx.VSCROLL) self.TasksGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, 'Sans')) self.TasksGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL, False, 'Sans')) - if wx.VERSION >= (2, 5, 0): + if wx.VERSION >= (2, 6, 0): self.TasksGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnTasksGridCellChange) else: wx.grid.EVT_GRID_CELL_CHANGE(self.TasksGrid, self.OnTasksGridCellChange) @@ -420,35 +414,31 @@ self.AddTaskButton = wx.Button(id=ID_RESOURCEEDITORADDTASKBUTTON, label=_('Add Task'), name='AddTaskButton', parent=self, pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) - self.Bind(wx.EVT_BUTTON, self.OnAddTaskButton, id=ID_RESOURCEEDITORADDTASKBUTTON) - + self.DeleteTaskButton = wx.Button(id=ID_RESOURCEEDITORDELETETASKBUTTON, label=_('Delete Task'), name='DeleteTaskButton', parent=self, pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) - self.Bind(wx.EVT_BUTTON, self.OnDeleteTaskButton, id=ID_RESOURCEEDITORDELETETASKBUTTON) - + self.UpTaskButton = wx.Button(id=ID_RESOURCEEDITORUPTASKBUTTON, label='^', name='UpTaskButton', parent=self, pos=wx.Point(0, 0), size=wx.Size(32, 32), style=0) - self.Bind(wx.EVT_BUTTON, self.OnUpTaskButton, id=ID_RESOURCEEDITORUPTASKBUTTON) - + self.DownTaskButton = wx.Button(id=ID_RESOURCEEDITORDOWNTASKBUTTON, label='v', name='DownTaskButton', parent=self, pos=wx.Point(0, 0), size=wx.Size(32, 32), style=0) - self.Bind(wx.EVT_BUTTON, self.OnDownTaskButton, id=ID_RESOURCEEDITORDOWNTASKBUTTON) - + self.staticText2 = wx.StaticText(id=ID_RESOURCEEDITORSTATICTEXT2, label=_(u'Instances:'), name='staticText1', parent=self, pos=wx.Point(0, 0), size=wx.DefaultSize, style=wx.ALIGN_CENTER) - self.InstancesGrid = wx.grid.Grid(id=ID_RESOURCEEDITORINSTANCESGRID, + self.InstancesGrid = CustomGrid(id=ID_RESOURCEEDITORINSTANCESGRID, name='InstancesGrid', parent=self, pos=wx.Point(0, 0), size=wx.Size(-1, -1), style=wx.VSCROLL) self.InstancesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, 'Sans')) self.InstancesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL, False, 'Sans')) - if wx.VERSION >= (2, 5, 0): + if wx.VERSION >= (2, 6, 0): self.InstancesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnInstancesGridCellChange) else: wx.grid.EVT_GRID_CELL_CHANGE(self.InstancesGrid, self.OnInstancesGridCellChange) @@ -456,23 +446,19 @@ self.AddInstanceButton = wx.Button(id=ID_RESOURCEEDITORADDINSTANCEBUTTON, label=_('Add Instance'), name='AddInstanceButton', parent=self, pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) - self.Bind(wx.EVT_BUTTON, self.OnAddInstanceButton, id=ID_RESOURCEEDITORADDINSTANCEBUTTON) - + self.DeleteInstanceButton = wx.Button(id=ID_RESOURCEEDITORDELETEINSTANCEBUTTON, label=_('Delete Instance'), name='DeleteInstanceButton', parent=self, pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) - self.Bind(wx.EVT_BUTTON, self.OnDeleteInstanceButton, id=ID_RESOURCEEDITORDELETEINSTANCEBUTTON) - + self.UpInstanceButton = wx.Button(id=ID_RESOURCEEDITORUPINSTANCEBUTTON, label='^', name='UpInstanceButton', parent=self, pos=wx.Point(0, 0), size=wx.Size(32, 32), style=0) - self.Bind(wx.EVT_BUTTON, self.OnUpInstanceButton, id=ID_RESOURCEEDITORUPINSTANCEBUTTON) - + self.DownInstanceButton = wx.Button(id=ID_RESOURCEEDITORDOWNINSTANCEBUTTON, label='v', name='DownInstanceButton', parent=self, pos=wx.Point(0, 0), size=wx.Size(32, 32), style=0) - self.Bind(wx.EVT_BUTTON, self.OnDownInstanceButton, id=ID_RESOURCEEDITORDOWNINSTANCEBUTTON) - + self._init_sizers() def __init__(self, parent, tagname, window, controler): @@ -490,17 +476,86 @@ self.TasksTable.SetColAlignements([wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_RIGHT, wx.ALIGN_RIGHT]) self.TasksTable.SetColSizes([200, 100, 100, 150, 100]) self.TasksGrid.SetTable(self.TasksTable) + self.TasksGrid.SetButtons({"Add": self.AddTaskButton, + "Delete": self.DeleteTaskButton, + "Up": self.UpTaskButton, + "Down": self.DownTaskButton}) + + def _AddTask(new_row): + self.TasksTable.InsertRow(new_row, self.TasksDefaultValue.copy()) + self.RefreshModel() + self.RefreshView() + return new_row + setattr(self.TasksGrid, "_AddRow", _AddTask) + + def _DeleteTask(row): + self.TasksTable.RemoveRow(row) + self.RefreshModel() + self.RefreshView() + setattr(self.TasksGrid, "_DeleteRow", _DeleteTask) + + def _MoveTask(row, move): + new_row = self.TasksTable.MoveRow(row, move) + if new_row != row: + self.RefreshModel() + self.RefreshView() + return new_row + setattr(self.TasksGrid, "_MoveRow", _MoveTask) + self.TasksGrid.SetRowLabelSize(0) self.TasksTable.ResetView(self.TasksGrid) - + self.TasksGrid.RefreshButtons() + self.InstancesDefaultValue = {"Name" : "", "Type" : "", "Task" : ""} self.InstancesTable = ResourceTable(self, [], GetInstancesTableColnames()) self.InstancesTable.SetColAlignements([wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT]) self.InstancesTable.SetColSizes([200, 150, 150]) self.InstancesGrid.SetTable(self.InstancesTable) + self.InstancesGrid.SetButtons({"Add": self.AddInstanceButton, + "Delete": self.DeleteInstanceButton, + "Up": self.UpInstanceButton, + "Down": self.DownInstanceButton}) + + def _AddInstance(new_row): + self.InstancesTable.InsertRow(new_row, self.InstancesDefaultValue.copy()) + self.RefreshModel() + self.RefreshView() + return new_row + setattr(self.InstancesGrid, "_AddRow", _AddInstance) + + def _DeleteInstance(row): + self.InstancesTable.RemoveRow(row) + self.RefreshModel() + self.RefreshView() + setattr(self.InstancesGrid, "_DeleteRow", _DeleteInstance) + + def _MoveInstance(row, move): + new_row = max(0, min(row + move, self.InstancesTable.GetNumberRows() - 1)) + if new_row != row: + if self.InstancesTable.GetValueByName(row, "Task") != self.InstancesTable.GetValueByName(new_row, "Task"): + return row + self.InstancesTable.MoveRow(row, move) + self.RefreshModel() + self.RefreshView() + return new_row + setattr(self.InstancesGrid, "_MoveRow", _MoveInstance) + + def _RefreshInstanceButtons(): + rows = self.InstancesTable.GetNumberRows() + row = self.InstancesGrid.GetGridCursorRow() + self.DeleteInstanceButton.Enable(rows > 0) + self.UpInstanceButton.Enable(row > 0 and + self.InstancesTable.GetValueByName(row, "Task") == self.InstancesTable.GetValueByName(row - 1, "Task")) + self.DownInstanceButton.Enable(0 <= row < rows - 1 and + self.InstancesTable.GetValueByName(row, "Task") == self.InstancesTable.GetValueByName(row + 1, "Task")) + setattr(self.InstancesGrid, "RefreshButtons", _RefreshInstanceButtons) + self.InstancesGrid.SetRowLabelSize(0) self.InstancesTable.ResetView(self.InstancesGrid) - + self.InstancesGrid.RefreshButtons() + + self.TasksGrid.SetFocus() + def __del__(self): self.RefreshHighlightsTimer.Stop() @@ -549,7 +604,7 @@ self.ParentWindow.RefreshFileMenu() self.ParentWindow.RefreshEditMenu() - def RefreshView(self, task_select=None, instance_select=None): + def RefreshView(self): tasks, instances = self.Controler.GetEditedResourceInfos(self.TagName) self.TasksTable.SetData(tasks) self.InstancesTable.SetData(instances) @@ -558,112 +613,12 @@ self.RefreshVariableList() self.TasksTable.ResetView(self.TasksGrid) self.InstancesTable.ResetView(self.InstancesGrid) - 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(task_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: - instance_select = min(instance_select, len(instances) - 1) - col = self.InstancesGrid.GetGridCursorCol() - self.InstancesGrid.SetGridCursor(instance_select, col) - self.InstancesGrid.MakeCellVisible(instance_select, col) - self.InstancesGrid.SetFocus() + self.TasksGrid.RefreshButtons() + self.InstancesGrid.RefreshButtons() 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.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(task_select=row) - event.Skip() - - def OnUpTaskButton(self, event): - self.CloseTasksGridEditControl() - row = self.TasksGrid.GetGridCursorRow() - 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() - 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.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(instance_select=row) - self.ParentWindow.RefreshInstancesTree() - event.Skip() - - def OnUpInstanceButton(self, event): - self.CloseInstancesGridEditControl() - row = self.InstancesGrid.GetGridCursorRow() - 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() - new_row = self.InstancesTable.MoveRow(row, 1) - self.RefreshModel() - self.RefreshView(instance_select=new_row) - self.ParentWindow.RefreshInstancesTree() - event.Skip() - + def OnTasksGridCellChange(self, event): row, col = event.GetRow(), event.GetCol() if self.TasksTable.GetColLabelValue(event.GetCol()) == "Name": @@ -688,6 +643,7 @@ def OnInstancesGridCellChange(self, event): self.RefreshModel() self.ParentWindow.RefreshInstancesTree() + self.InstancesGrid.RefreshButtons() event.Skip() #-------------------------------------------------------------------------------