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