diff -r bd8c7a033b17 -r 9aa96a36cf33 RessourceEditor.py --- a/RessourceEditor.py Mon Nov 07 10:55:17 2011 +0100 +++ b/RessourceEditor.py Tue Nov 08 21:59:22 2011 +0100 @@ -25,8 +25,8 @@ import wx import wx.grid -from dialogs import DurationEditorDialog -from controls import CustomGrid +from graphics.GraphicCommons import REFRESH_HIGHLIGHT_PERIOD +from controls import CustomGrid, EditorPanel, DurationCellEditor #------------------------------------------------------------------------------- # Configuration Editor class @@ -35,45 +35,27 @@ [ID_CONFIGURATIONEDITOR, ] = [wx.NewId() for _init_ctrls in range(1)] -class ConfigurationEditor(wx.Panel): - - def _init_ctrls(self, prnt): - wx.Panel.__init__(self, id=ID_CONFIGURATIONEDITOR, name='', parent=prnt, - size=wx.Size(0, 0), style=wx.SUNKEN_BORDER) - - def __init__(self, parent, tagname, window, controler): - self._init_ctrls(parent) - - self.ParentWindow = window - self.Controler = controler - self.TagName = tagname - - def SetTagName(self, tagname): - self.TagName = tagname - - def GetTagName(self): - return self.TagName - - def IsViewing(self, tagname): - return self.TagName == tagname - - def IsDebugging(self): - return False - - def SetMode(self, mode): - pass - - def ResetBuffer(self): - pass - - def RefreshView(self): - pass - - def RefreshScaling(self, refresh=True): - pass - - def ClearHighlights(self, highlight_type=None): - pass +class ConfigurationEditor(EditorPanel): + + ID = ID_CONFIGURATIONEDITOR + VARIABLE_PANEL_TYPE = "config" + + def GetBufferState(self): + return self.Controler.GetBufferState() + + def Undo(self): + self.Controler.LoadPrevious() + self.ParentWindow.CloseTabsWithoutModel() + self.ParentWindow.RefreshEditor() + + def Redo(self): + self.Controler.LoadNext() + self.ParentWindow.CloseTabsWithoutModel() + self.ParentWindow.RefreshEditor() + + def HasNoModel(self): + return self.Controler.GetEditedElement(self.TagName) is None + #------------------------------------------------------------------------------- # Resource Editor class @@ -306,23 +288,19 @@ if len(col_highlights) == 0: row_highlights.pop(col) -[ID_RESOURCEEDITOR, ID_RESOURCEEDITORSTATICTEXT1, +[ID_RESOURCEEDITOR, ID_RESOURCEEDITORPANEL, ID_RESOURCEEDITORSTATICTEXT1, ID_RESOURCEEDITORSTATICTEXT2, ID_RESOURCEEDITORINSTANCESGRID, ID_RESOURCEEDITORTASKSGRID, ID_RESOURCEEDITORADDINSTANCEBUTTON, ID_RESOURCEEDITORDELETEINSTANCEBUTTON, ID_RESOURCEEDITORUPINSTANCEBUTTON, ID_RESOURCEEDITORDOWNINSTANCEBUTTON, ID_RESOURCEEDITORADDTASKBUTTON, ID_RESOURCEEDITORDELETETASKBUTTON, ID_RESOURCEEDITORUPTASKBUTTON, ID_RESOURCEEDITORDOWNTASKBUTTON, -] = [wx.NewId() for _init_ctrls in range(13)] - -class ResourceEditor(wx.Panel): - - if wx.VERSION < (2, 6, 0): - def Bind(self, event, function, id = None): - if id is not None: - event(self, id, function) - else: - event(self, function) +] = [wx.NewId() for _init_ctrls in range(14)] + +class ResourceEditor(EditorPanel): + + ID = ID_RESOURCEEDITOR + VARIABLE_PANEL_TYPE = "resource" def _init_coll_InstancesSizer_Growables(self, parent): parent.AddGrowableCol(0) @@ -389,18 +367,18 @@ self._init_coll_TasksButtonsSizer_Growables(self.TasksButtonsSizer) self._init_coll_TasksButtonsSizer_Items(self.TasksButtonsSizer) - self.SetSizer(self.MainGridSizer) - - def _init_ctrls(self, prnt): - wx.Panel.__init__(self, id=ID_RESOURCEEDITOR, name='', parent=prnt, + self.Editor.SetSizer(self.MainGridSizer) + + def _init_Editor(self, prnt): + self.Editor = wx.Panel(id=ID_RESOURCEEDITORPANEL, name='ResourceEditor', parent=prnt, size=wx.Size(0, 0), style=wx.SUNKEN_BORDER) self.staticText1 = wx.StaticText(id=ID_RESOURCEEDITORSTATICTEXT1, - label=_(u'Tasks:'), name='staticText2', parent=self, pos=wx.Point(0, + label=_(u'Tasks:'), name='staticText2', parent=self.Editor, pos=wx.Point(0, 0), size=wx.DefaultSize, style=wx.ALIGN_CENTER) self.TasksGrid = CustomGrid(id=ID_RESOURCEEDITORTASKSGRID, - name='TasksGrid', parent=self, pos=wx.Point(0, 0), + name='TasksGrid', parent=self.Editor, 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')) @@ -412,27 +390,27 @@ wx.grid.EVT_GRID_CELL_CHANGE(self.TasksGrid, self.OnTasksGridCellChange) self.AddTaskButton = wx.Button(id=ID_RESOURCEEDITORADDTASKBUTTON, label=_('Add Task'), - name='AddTaskButton', parent=self, pos=wx.Point(0, 0), + name='AddTaskButton', parent=self.Editor, pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) self.DeleteTaskButton = wx.Button(id=ID_RESOURCEEDITORDELETETASKBUTTON, label=_('Delete Task'), - name='DeleteTaskButton', parent=self, pos=wx.Point(0, 0), + name='DeleteTaskButton', parent=self.Editor, pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) self.UpTaskButton = wx.Button(id=ID_RESOURCEEDITORUPTASKBUTTON, label='^', - name='UpTaskButton', parent=self, pos=wx.Point(0, 0), + name='UpTaskButton', parent=self.Editor, pos=wx.Point(0, 0), size=wx.Size(32, 32), style=0) self.DownTaskButton = wx.Button(id=ID_RESOURCEEDITORDOWNTASKBUTTON, label='v', - name='DownTaskButton', parent=self, pos=wx.Point(0, 0), + name='DownTaskButton', parent=self.Editor, pos=wx.Point(0, 0), size=wx.Size(32, 32), style=0) self.staticText2 = wx.StaticText(id=ID_RESOURCEEDITORSTATICTEXT2, - label=_(u'Instances:'), name='staticText1', parent=self, + label=_(u'Instances:'), name='staticText1', parent=self.Editor, pos=wx.Point(0, 0), size=wx.DefaultSize, style=wx.ALIGN_CENTER) self.InstancesGrid = CustomGrid(id=ID_RESOURCEEDITORINSTANCESGRID, - name='InstancesGrid', parent=self, pos=wx.Point(0, 0), + name='InstancesGrid', parent=self.Editor, 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')) @@ -444,29 +422,25 @@ wx.grid.EVT_GRID_CELL_CHANGE(self.InstancesGrid, self.OnInstancesGridCellChange) self.AddInstanceButton = wx.Button(id=ID_RESOURCEEDITORADDINSTANCEBUTTON, label=_('Add Instance'), - name='AddInstanceButton', parent=self, pos=wx.Point(0, 0), + name='AddInstanceButton', parent=self.Editor, pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) self.DeleteInstanceButton = wx.Button(id=ID_RESOURCEEDITORDELETEINSTANCEBUTTON, label=_('Delete Instance'), - name='DeleteInstanceButton', parent=self, pos=wx.Point(0, 0), + name='DeleteInstanceButton', parent=self.Editor, pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) self.UpInstanceButton = wx.Button(id=ID_RESOURCEEDITORUPINSTANCEBUTTON, label='^', - name='UpInstanceButton', parent=self, pos=wx.Point(0, 0), + name='UpInstanceButton', parent=self.Editor, pos=wx.Point(0, 0), size=wx.Size(32, 32), style=0) self.DownInstanceButton = wx.Button(id=ID_RESOURCEEDITORDOWNINSTANCEBUTTON, label='v', - name='DownInstanceButton', parent=self, pos=wx.Point(0, 0), + name='DownInstanceButton', parent=self.Editor, pos=wx.Point(0, 0), size=wx.Size(32, 32), style=0) self._init_sizers() def __init__(self, parent, tagname, window, controler): - self._init_ctrls(parent) - - self.ParentWindow = window - self.Controler = controler - self.TagName = tagname + EditorPanel.__init__(self, parent, tagname, window, controler) self.RefreshHighlightsTimer = wx.Timer(self, -1) self.Bind(wx.EVT_TIMER, self.OnRefreshHighlightsTimer, self.RefreshHighlightsTimer) @@ -559,21 +533,6 @@ def __del__(self): self.RefreshHighlightsTimer.Stop() - def SetTagName(self, tagname): - self.TagName = tagname - - def GetTagName(self): - return self.TagName - - def IsViewing(self, tagname): - return self.TagName == tagname - - def IsDebugging(self): - return False - - def SetMode(self, mode): - pass - def RefreshTypeList(self): self.TypeList = "" blocktypes = self.Controler.GetBlockResource() @@ -594,9 +553,6 @@ self.Controler.SetEditedResourceInfos(self.TagName, self.TasksTable.GetData(), self.InstancesTable.GetData()) self.RefreshBuffer() - def ResetBuffer(self): - pass - # Buffer the last model state def RefreshBuffer(self): self.Controler.BufferProject() @@ -604,7 +560,25 @@ self.ParentWindow.RefreshFileMenu() self.ParentWindow.RefreshEditMenu() - def RefreshView(self): + def GetBufferState(self): + return self.Controler.GetBufferState() + + def Undo(self): + self.Controler.LoadPrevious() + self.ParentWindow.CloseTabsWithoutModel() + self.ParentWindow.RefreshEditor() + + def Redo(self): + self.Controler.LoadNext() + self.ParentWindow.CloseTabsWithoutModel() + self.ParentWindow.RefreshEditor() + + def HasNoModel(self): + return self.Controler.GetEditedElement(self.TagName) is None + + def RefreshView(self, variablepanel=True): + EditorPanel.RefreshView(self, variablepanel) + tasks, instances = self.Controler.GetEditedResourceInfos(self.TagName) self.TasksTable.SetData(tasks) self.InstancesTable.SetData(instances) @@ -616,9 +590,6 @@ self.TasksGrid.RefreshButtons() self.InstancesGrid.RefreshButtons() - def RefreshScaling(self, refresh=True): - pass - def OnTasksGridCellChange(self, event): row, col = event.GetRow(), event.GetCol() if self.TasksTable.GetColLabelValue(event.GetCol()) == "Name": @@ -659,127 +630,12 @@ self.TasksTable.AddHighlight(infos[1:], highlight_type) elif infos[0] == "instance": self.InstancesTable.AddHighlight(infos[1:], highlight_type) + self.RefreshHighlightsTimer.Start(int(REFRESH_HIGHLIGHT_PERIOD * 1000), oneShot=True) def ClearHighlights(self, highlight_type=None): + EditorPanel.ClearHighlights(self, highlight_type) + self.TasksTable.ClearHighlights(highlight_type) self.InstancesTable.ClearHighlights(highlight_type) self.TasksTable.ResetView(self.TasksGrid) self.InstancesTable.ResetView(self.InstancesGrid) - -class DurationCellControl(wx.PyControl): - - def _init_coll_MainSizer_Items(self, parent): - parent.AddWindow(self.Duration, 0, border=0, flag=wx.GROW) - parent.AddWindow(self.EditButton, 0, border=0, flag=wx.GROW) - - def _init_coll_MainSizer_Growables(self, parent): - parent.AddGrowableCol(0) - parent.AddGrowableRow(0) - - def _init_sizers(self): - self.MainSizer = wx.FlexGridSizer(cols=2, hgap=0, rows=1, vgap=0) - - self._init_coll_MainSizer_Items(self.MainSizer) - self._init_coll_MainSizer_Growables(self.MainSizer) - - self.SetSizer(self.MainSizer) - - def _init_ctrls(self, prnt): - wx.Control.__init__(self, id=-1, - name='DurationCellControl', parent=prnt, - size=wx.DefaultSize, style=0) - - # create location text control - self.Duration = wx.TextCtrl(id=-1, name='Duration', parent=self, - pos=wx.Point(0, 0), size=wx.Size(0, 0), style=wx.TE_PROCESS_ENTER) - self.Duration.Bind(wx.EVT_KEY_DOWN, self.OnDurationChar) - - # create browse button - self.EditButton = wx.Button(id=-1, label='...', - name='EditButton', parent=self, pos=wx.Point(0, 0), - size=wx.Size(30, 0), style=0) - self.EditButton.Bind(wx.EVT_BUTTON, self.OnEditButtonClick) - - self.Bind(wx.EVT_SIZE, self.OnSize) - - self._init_sizers() - - ''' - Custom cell editor control with a text box and a button that launches - the DurationEditorDialog. - ''' - def __init__(self, parent): - self._init_ctrls(parent) - - def SetValue(self, value): - self.Duration.SetValue(value) - - def GetValue(self): - return self.Duration.GetValue() - - def OnSize(self, event): - self.Layout() - - def OnEditButtonClick(self, event): - # pop up the Duration Editor dialog - dialog = DurationEditorDialog(self) - dialog.SetDuration(self.Duration.GetValue()) - if dialog.ShowModal() == wx.ID_OK: - # set the duration - self.Duration.SetValue(dialog.GetDuration()) - - dialog.Destroy() - - self.Duration.SetFocus() - - def OnDurationChar(self, event): - keycode = event.GetKeyCode() - if keycode == wx.WXK_RETURN or keycode == wx.WXK_TAB: - self.Parent.Parent.ProcessEvent(event) - self.Parent.Parent.SetFocus() - else: - event.Skip() - - def SetInsertionPoint(self, i): - self.Duration.SetInsertionPoint(i) - - def SetFocus(self): - self.Duration.SetFocus() - -class DurationCellEditor(wx.grid.PyGridCellEditor): - ''' - Grid cell editor that uses DurationCellControl to display an edit button. - ''' - def __init__(self, table): - wx.grid.PyGridCellEditor.__init__(self) - self.Table = table - - def __del__(self): - self.CellControl = None - - def Create(self, parent, id, evt_handler): - self.CellControl = DurationCellControl(parent) - self.SetControl(self.CellControl) - if evt_handler: - self.CellControl.PushEventHandler(evt_handler) - - def BeginEdit(self, row, col, grid): - self.CellControl.SetValue(self.Table.GetValueByName(row, 'Interval')) - self.CellControl.SetFocus() - - def EndEdit(self, row, col, grid): - duration = self.CellControl.GetValue() - old_duration = self.Table.GetValueByName(row, 'Interval') - if duration != old_duration: - self.Table.SetValueByName(row, 'Interval', duration) - return True - return False - - def SetSize(self, rect): - self.CellControl.SetDimensions(rect.x + 1, rect.y, - rect.width, rect.height, - wx.SIZE_ALLOW_MINUS_ONE) - - def Clone(self): - return DurationCellEditor(self.Table) -