23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
24 |
24 |
25 import wx |
25 import wx |
26 import wx.grid |
26 import wx.grid |
27 |
27 |
28 from dialogs import DurationEditorDialog |
28 from graphics.GraphicCommons import REFRESH_HIGHLIGHT_PERIOD |
29 from controls import CustomGrid |
29 from controls import CustomGrid, EditorPanel, DurationCellEditor |
30 |
30 |
31 #------------------------------------------------------------------------------- |
31 #------------------------------------------------------------------------------- |
32 # Configuration Editor class |
32 # Configuration Editor class |
33 #------------------------------------------------------------------------------- |
33 #------------------------------------------------------------------------------- |
34 |
34 |
35 [ID_CONFIGURATIONEDITOR, |
35 [ID_CONFIGURATIONEDITOR, |
36 ] = [wx.NewId() for _init_ctrls in range(1)] |
36 ] = [wx.NewId() for _init_ctrls in range(1)] |
37 |
37 |
38 class ConfigurationEditor(wx.Panel): |
38 class ConfigurationEditor(EditorPanel): |
39 |
39 |
40 def _init_ctrls(self, prnt): |
40 ID = ID_CONFIGURATIONEDITOR |
41 wx.Panel.__init__(self, id=ID_CONFIGURATIONEDITOR, name='', parent=prnt, |
41 VARIABLE_PANEL_TYPE = "config" |
42 size=wx.Size(0, 0), style=wx.SUNKEN_BORDER) |
42 |
43 |
43 def GetBufferState(self): |
44 def __init__(self, parent, tagname, window, controler): |
44 return self.Controler.GetBufferState() |
45 self._init_ctrls(parent) |
45 |
46 |
46 def Undo(self): |
47 self.ParentWindow = window |
47 self.Controler.LoadPrevious() |
48 self.Controler = controler |
48 self.ParentWindow.CloseTabsWithoutModel() |
49 self.TagName = tagname |
49 self.ParentWindow.RefreshEditor() |
50 |
50 |
51 def SetTagName(self, tagname): |
51 def Redo(self): |
52 self.TagName = tagname |
52 self.Controler.LoadNext() |
53 |
53 self.ParentWindow.CloseTabsWithoutModel() |
54 def GetTagName(self): |
54 self.ParentWindow.RefreshEditor() |
55 return self.TagName |
55 |
56 |
56 def HasNoModel(self): |
57 def IsViewing(self, tagname): |
57 return self.Controler.GetEditedElement(self.TagName) is None |
58 return self.TagName == tagname |
58 |
59 |
|
60 def IsDebugging(self): |
|
61 return False |
|
62 |
|
63 def SetMode(self, mode): |
|
64 pass |
|
65 |
|
66 def ResetBuffer(self): |
|
67 pass |
|
68 |
|
69 def RefreshView(self): |
|
70 pass |
|
71 |
|
72 def RefreshScaling(self, refresh=True): |
|
73 pass |
|
74 |
|
75 def ClearHighlights(self, highlight_type=None): |
|
76 pass |
|
77 |
59 |
78 #------------------------------------------------------------------------------- |
60 #------------------------------------------------------------------------------- |
79 # Resource Editor class |
61 # Resource Editor class |
80 #------------------------------------------------------------------------------- |
62 #------------------------------------------------------------------------------- |
81 |
63 |
304 if highlight_type in col_highlights: |
286 if highlight_type in col_highlights: |
305 col_highlights.remove(highlight_type) |
287 col_highlights.remove(highlight_type) |
306 if len(col_highlights) == 0: |
288 if len(col_highlights) == 0: |
307 row_highlights.pop(col) |
289 row_highlights.pop(col) |
308 |
290 |
309 [ID_RESOURCEEDITOR, ID_RESOURCEEDITORSTATICTEXT1, |
291 [ID_RESOURCEEDITOR, ID_RESOURCEEDITORPANEL, ID_RESOURCEEDITORSTATICTEXT1, |
310 ID_RESOURCEEDITORSTATICTEXT2, ID_RESOURCEEDITORINSTANCESGRID, |
292 ID_RESOURCEEDITORSTATICTEXT2, ID_RESOURCEEDITORINSTANCESGRID, |
311 ID_RESOURCEEDITORTASKSGRID, ID_RESOURCEEDITORADDINSTANCEBUTTON, |
293 ID_RESOURCEEDITORTASKSGRID, ID_RESOURCEEDITORADDINSTANCEBUTTON, |
312 ID_RESOURCEEDITORDELETEINSTANCEBUTTON, ID_RESOURCEEDITORUPINSTANCEBUTTON, |
294 ID_RESOURCEEDITORDELETEINSTANCEBUTTON, ID_RESOURCEEDITORUPINSTANCEBUTTON, |
313 ID_RESOURCEEDITORDOWNINSTANCEBUTTON, ID_RESOURCEEDITORADDTASKBUTTON, |
295 ID_RESOURCEEDITORDOWNINSTANCEBUTTON, ID_RESOURCEEDITORADDTASKBUTTON, |
314 ID_RESOURCEEDITORDELETETASKBUTTON, ID_RESOURCEEDITORUPTASKBUTTON, |
296 ID_RESOURCEEDITORDELETETASKBUTTON, ID_RESOURCEEDITORUPTASKBUTTON, |
315 ID_RESOURCEEDITORDOWNTASKBUTTON, |
297 ID_RESOURCEEDITORDOWNTASKBUTTON, |
316 ] = [wx.NewId() for _init_ctrls in range(13)] |
298 ] = [wx.NewId() for _init_ctrls in range(14)] |
317 |
299 |
318 class ResourceEditor(wx.Panel): |
300 class ResourceEditor(EditorPanel): |
319 |
301 |
320 if wx.VERSION < (2, 6, 0): |
302 ID = ID_RESOURCEEDITOR |
321 def Bind(self, event, function, id = None): |
303 VARIABLE_PANEL_TYPE = "resource" |
322 if id is not None: |
|
323 event(self, id, function) |
|
324 else: |
|
325 event(self, function) |
|
326 |
304 |
327 def _init_coll_InstancesSizer_Growables(self, parent): |
305 def _init_coll_InstancesSizer_Growables(self, parent): |
328 parent.AddGrowableCol(0) |
306 parent.AddGrowableCol(0) |
329 parent.AddGrowableRow(1) |
307 parent.AddGrowableRow(1) |
330 |
308 |
387 self._init_coll_TasksSizer_Growables(self.TasksSizer) |
365 self._init_coll_TasksSizer_Growables(self.TasksSizer) |
388 self._init_coll_TasksSizer_Items(self.TasksSizer) |
366 self._init_coll_TasksSizer_Items(self.TasksSizer) |
389 self._init_coll_TasksButtonsSizer_Growables(self.TasksButtonsSizer) |
367 self._init_coll_TasksButtonsSizer_Growables(self.TasksButtonsSizer) |
390 self._init_coll_TasksButtonsSizer_Items(self.TasksButtonsSizer) |
368 self._init_coll_TasksButtonsSizer_Items(self.TasksButtonsSizer) |
391 |
369 |
392 self.SetSizer(self.MainGridSizer) |
370 self.Editor.SetSizer(self.MainGridSizer) |
393 |
371 |
394 def _init_ctrls(self, prnt): |
372 def _init_Editor(self, prnt): |
395 wx.Panel.__init__(self, id=ID_RESOURCEEDITOR, name='', parent=prnt, |
373 self.Editor = wx.Panel(id=ID_RESOURCEEDITORPANEL, name='ResourceEditor', parent=prnt, |
396 size=wx.Size(0, 0), style=wx.SUNKEN_BORDER) |
374 size=wx.Size(0, 0), style=wx.SUNKEN_BORDER) |
397 |
375 |
398 self.staticText1 = wx.StaticText(id=ID_RESOURCEEDITORSTATICTEXT1, |
376 self.staticText1 = wx.StaticText(id=ID_RESOURCEEDITORSTATICTEXT1, |
399 label=_(u'Tasks:'), name='staticText2', parent=self, pos=wx.Point(0, |
377 label=_(u'Tasks:'), name='staticText2', parent=self.Editor, pos=wx.Point(0, |
400 0), size=wx.DefaultSize, style=wx.ALIGN_CENTER) |
378 0), size=wx.DefaultSize, style=wx.ALIGN_CENTER) |
401 |
379 |
402 self.TasksGrid = CustomGrid(id=ID_RESOURCEEDITORTASKSGRID, |
380 self.TasksGrid = CustomGrid(id=ID_RESOURCEEDITORTASKSGRID, |
403 name='TasksGrid', parent=self, pos=wx.Point(0, 0), |
381 name='TasksGrid', parent=self.Editor, pos=wx.Point(0, 0), |
404 size=wx.Size(-1, -1), style=wx.VSCROLL) |
382 size=wx.Size(-1, -1), style=wx.VSCROLL) |
405 self.TasksGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, |
383 self.TasksGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, |
406 'Sans')) |
384 'Sans')) |
407 self.TasksGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL, |
385 self.TasksGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL, |
408 False, 'Sans')) |
386 False, 'Sans')) |
410 self.TasksGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnTasksGridCellChange) |
388 self.TasksGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnTasksGridCellChange) |
411 else: |
389 else: |
412 wx.grid.EVT_GRID_CELL_CHANGE(self.TasksGrid, self.OnTasksGridCellChange) |
390 wx.grid.EVT_GRID_CELL_CHANGE(self.TasksGrid, self.OnTasksGridCellChange) |
413 |
391 |
414 self.AddTaskButton = wx.Button(id=ID_RESOURCEEDITORADDTASKBUTTON, label=_('Add Task'), |
392 self.AddTaskButton = wx.Button(id=ID_RESOURCEEDITORADDTASKBUTTON, label=_('Add Task'), |
415 name='AddTaskButton', parent=self, pos=wx.Point(0, 0), |
393 name='AddTaskButton', parent=self.Editor, pos=wx.Point(0, 0), |
416 size=wx.DefaultSize, style=0) |
394 size=wx.DefaultSize, style=0) |
417 |
395 |
418 self.DeleteTaskButton = wx.Button(id=ID_RESOURCEEDITORDELETETASKBUTTON, label=_('Delete Task'), |
396 self.DeleteTaskButton = wx.Button(id=ID_RESOURCEEDITORDELETETASKBUTTON, label=_('Delete Task'), |
419 name='DeleteTaskButton', parent=self, pos=wx.Point(0, 0), |
397 name='DeleteTaskButton', parent=self.Editor, pos=wx.Point(0, 0), |
420 size=wx.DefaultSize, style=0) |
398 size=wx.DefaultSize, style=0) |
421 |
399 |
422 self.UpTaskButton = wx.Button(id=ID_RESOURCEEDITORUPTASKBUTTON, label='^', |
400 self.UpTaskButton = wx.Button(id=ID_RESOURCEEDITORUPTASKBUTTON, label='^', |
423 name='UpTaskButton', parent=self, pos=wx.Point(0, 0), |
401 name='UpTaskButton', parent=self.Editor, pos=wx.Point(0, 0), |
424 size=wx.Size(32, 32), style=0) |
402 size=wx.Size(32, 32), style=0) |
425 |
403 |
426 self.DownTaskButton = wx.Button(id=ID_RESOURCEEDITORDOWNTASKBUTTON, label='v', |
404 self.DownTaskButton = wx.Button(id=ID_RESOURCEEDITORDOWNTASKBUTTON, label='v', |
427 name='DownTaskButton', parent=self, pos=wx.Point(0, 0), |
405 name='DownTaskButton', parent=self.Editor, pos=wx.Point(0, 0), |
428 size=wx.Size(32, 32), style=0) |
406 size=wx.Size(32, 32), style=0) |
429 |
407 |
430 self.staticText2 = wx.StaticText(id=ID_RESOURCEEDITORSTATICTEXT2, |
408 self.staticText2 = wx.StaticText(id=ID_RESOURCEEDITORSTATICTEXT2, |
431 label=_(u'Instances:'), name='staticText1', parent=self, |
409 label=_(u'Instances:'), name='staticText1', parent=self.Editor, |
432 pos=wx.Point(0, 0), size=wx.DefaultSize, style=wx.ALIGN_CENTER) |
410 pos=wx.Point(0, 0), size=wx.DefaultSize, style=wx.ALIGN_CENTER) |
433 |
411 |
434 self.InstancesGrid = CustomGrid(id=ID_RESOURCEEDITORINSTANCESGRID, |
412 self.InstancesGrid = CustomGrid(id=ID_RESOURCEEDITORINSTANCESGRID, |
435 name='InstancesGrid', parent=self, pos=wx.Point(0, 0), |
413 name='InstancesGrid', parent=self.Editor, pos=wx.Point(0, 0), |
436 size=wx.Size(-1, -1), style=wx.VSCROLL) |
414 size=wx.Size(-1, -1), style=wx.VSCROLL) |
437 self.InstancesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, |
415 self.InstancesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, |
438 'Sans')) |
416 'Sans')) |
439 self.InstancesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL, |
417 self.InstancesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL, |
440 False, 'Sans')) |
418 False, 'Sans')) |
442 self.InstancesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnInstancesGridCellChange) |
420 self.InstancesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnInstancesGridCellChange) |
443 else: |
421 else: |
444 wx.grid.EVT_GRID_CELL_CHANGE(self.InstancesGrid, self.OnInstancesGridCellChange) |
422 wx.grid.EVT_GRID_CELL_CHANGE(self.InstancesGrid, self.OnInstancesGridCellChange) |
445 |
423 |
446 self.AddInstanceButton = wx.Button(id=ID_RESOURCEEDITORADDINSTANCEBUTTON, label=_('Add Instance'), |
424 self.AddInstanceButton = wx.Button(id=ID_RESOURCEEDITORADDINSTANCEBUTTON, label=_('Add Instance'), |
447 name='AddInstanceButton', parent=self, pos=wx.Point(0, 0), |
425 name='AddInstanceButton', parent=self.Editor, pos=wx.Point(0, 0), |
448 size=wx.DefaultSize, style=0) |
426 size=wx.DefaultSize, style=0) |
449 |
427 |
450 self.DeleteInstanceButton = wx.Button(id=ID_RESOURCEEDITORDELETEINSTANCEBUTTON, label=_('Delete Instance'), |
428 self.DeleteInstanceButton = wx.Button(id=ID_RESOURCEEDITORDELETEINSTANCEBUTTON, label=_('Delete Instance'), |
451 name='DeleteInstanceButton', parent=self, pos=wx.Point(0, 0), |
429 name='DeleteInstanceButton', parent=self.Editor, pos=wx.Point(0, 0), |
452 size=wx.DefaultSize, style=0) |
430 size=wx.DefaultSize, style=0) |
453 |
431 |
454 self.UpInstanceButton = wx.Button(id=ID_RESOURCEEDITORUPINSTANCEBUTTON, label='^', |
432 self.UpInstanceButton = wx.Button(id=ID_RESOURCEEDITORUPINSTANCEBUTTON, label='^', |
455 name='UpInstanceButton', parent=self, pos=wx.Point(0, 0), |
433 name='UpInstanceButton', parent=self.Editor, pos=wx.Point(0, 0), |
456 size=wx.Size(32, 32), style=0) |
434 size=wx.Size(32, 32), style=0) |
457 |
435 |
458 self.DownInstanceButton = wx.Button(id=ID_RESOURCEEDITORDOWNINSTANCEBUTTON, label='v', |
436 self.DownInstanceButton = wx.Button(id=ID_RESOURCEEDITORDOWNINSTANCEBUTTON, label='v', |
459 name='DownInstanceButton', parent=self, pos=wx.Point(0, 0), |
437 name='DownInstanceButton', parent=self.Editor, pos=wx.Point(0, 0), |
460 size=wx.Size(32, 32), style=0) |
438 size=wx.Size(32, 32), style=0) |
461 |
439 |
462 self._init_sizers() |
440 self._init_sizers() |
463 |
441 |
464 def __init__(self, parent, tagname, window, controler): |
442 def __init__(self, parent, tagname, window, controler): |
465 self._init_ctrls(parent) |
443 EditorPanel.__init__(self, parent, tagname, window, controler) |
466 |
|
467 self.ParentWindow = window |
|
468 self.Controler = controler |
|
469 self.TagName = tagname |
|
470 |
444 |
471 self.RefreshHighlightsTimer = wx.Timer(self, -1) |
445 self.RefreshHighlightsTimer = wx.Timer(self, -1) |
472 self.Bind(wx.EVT_TIMER, self.OnRefreshHighlightsTimer, self.RefreshHighlightsTimer) |
446 self.Bind(wx.EVT_TIMER, self.OnRefreshHighlightsTimer, self.RefreshHighlightsTimer) |
473 |
447 |
474 self.TasksDefaultValue = {"Name" : "", "Triggering" : "", "Single" : "", "Interval" : "", "Priority" : 0} |
448 self.TasksDefaultValue = {"Name" : "", "Triggering" : "", "Single" : "", "Interval" : "", "Priority" : 0} |
592 |
551 |
593 def RefreshModel(self): |
552 def RefreshModel(self): |
594 self.Controler.SetEditedResourceInfos(self.TagName, self.TasksTable.GetData(), self.InstancesTable.GetData()) |
553 self.Controler.SetEditedResourceInfos(self.TagName, self.TasksTable.GetData(), self.InstancesTable.GetData()) |
595 self.RefreshBuffer() |
554 self.RefreshBuffer() |
596 |
555 |
597 def ResetBuffer(self): |
|
598 pass |
|
599 |
|
600 # Buffer the last model state |
556 # Buffer the last model state |
601 def RefreshBuffer(self): |
557 def RefreshBuffer(self): |
602 self.Controler.BufferProject() |
558 self.Controler.BufferProject() |
603 self.ParentWindow.RefreshTitle() |
559 self.ParentWindow.RefreshTitle() |
604 self.ParentWindow.RefreshFileMenu() |
560 self.ParentWindow.RefreshFileMenu() |
605 self.ParentWindow.RefreshEditMenu() |
561 self.ParentWindow.RefreshEditMenu() |
606 |
562 |
607 def RefreshView(self): |
563 def GetBufferState(self): |
|
564 return self.Controler.GetBufferState() |
|
565 |
|
566 def Undo(self): |
|
567 self.Controler.LoadPrevious() |
|
568 self.ParentWindow.CloseTabsWithoutModel() |
|
569 self.ParentWindow.RefreshEditor() |
|
570 |
|
571 def Redo(self): |
|
572 self.Controler.LoadNext() |
|
573 self.ParentWindow.CloseTabsWithoutModel() |
|
574 self.ParentWindow.RefreshEditor() |
|
575 |
|
576 def HasNoModel(self): |
|
577 return self.Controler.GetEditedElement(self.TagName) is None |
|
578 |
|
579 def RefreshView(self, variablepanel=True): |
|
580 EditorPanel.RefreshView(self, variablepanel) |
|
581 |
608 tasks, instances = self.Controler.GetEditedResourceInfos(self.TagName) |
582 tasks, instances = self.Controler.GetEditedResourceInfos(self.TagName) |
609 self.TasksTable.SetData(tasks) |
583 self.TasksTable.SetData(tasks) |
610 self.InstancesTable.SetData(instances) |
584 self.InstancesTable.SetData(instances) |
611 self.RefreshTypeList() |
585 self.RefreshTypeList() |
612 self.RefreshTaskList() |
586 self.RefreshTaskList() |
657 def AddHighlight(self, infos, start, end, highlight_type): |
628 def AddHighlight(self, infos, start, end, highlight_type): |
658 if infos[0] == "task": |
629 if infos[0] == "task": |
659 self.TasksTable.AddHighlight(infos[1:], highlight_type) |
630 self.TasksTable.AddHighlight(infos[1:], highlight_type) |
660 elif infos[0] == "instance": |
631 elif infos[0] == "instance": |
661 self.InstancesTable.AddHighlight(infos[1:], highlight_type) |
632 self.InstancesTable.AddHighlight(infos[1:], highlight_type) |
|
633 self.RefreshHighlightsTimer.Start(int(REFRESH_HIGHLIGHT_PERIOD * 1000), oneShot=True) |
662 |
634 |
663 def ClearHighlights(self, highlight_type=None): |
635 def ClearHighlights(self, highlight_type=None): |
|
636 EditorPanel.ClearHighlights(self, highlight_type) |
|
637 |
664 self.TasksTable.ClearHighlights(highlight_type) |
638 self.TasksTable.ClearHighlights(highlight_type) |
665 self.InstancesTable.ClearHighlights(highlight_type) |
639 self.InstancesTable.ClearHighlights(highlight_type) |
666 self.TasksTable.ResetView(self.TasksGrid) |
640 self.TasksTable.ResetView(self.TasksGrid) |
667 self.InstancesTable.ResetView(self.InstancesGrid) |
641 self.InstancesTable.ResetView(self.InstancesGrid) |
668 |
|
669 class DurationCellControl(wx.PyControl): |
|
670 |
|
671 def _init_coll_MainSizer_Items(self, parent): |
|
672 parent.AddWindow(self.Duration, 0, border=0, flag=wx.GROW) |
|
673 parent.AddWindow(self.EditButton, 0, border=0, flag=wx.GROW) |
|
674 |
|
675 def _init_coll_MainSizer_Growables(self, parent): |
|
676 parent.AddGrowableCol(0) |
|
677 parent.AddGrowableRow(0) |
|
678 |
|
679 def _init_sizers(self): |
|
680 self.MainSizer = wx.FlexGridSizer(cols=2, hgap=0, rows=1, vgap=0) |
|
681 |
|
682 self._init_coll_MainSizer_Items(self.MainSizer) |
|
683 self._init_coll_MainSizer_Growables(self.MainSizer) |
|
684 |
|
685 self.SetSizer(self.MainSizer) |
|
686 |
|
687 def _init_ctrls(self, prnt): |
|
688 wx.Control.__init__(self, id=-1, |
|
689 name='DurationCellControl', parent=prnt, |
|
690 size=wx.DefaultSize, style=0) |
|
691 |
|
692 # create location text control |
|
693 self.Duration = wx.TextCtrl(id=-1, name='Duration', parent=self, |
|
694 pos=wx.Point(0, 0), size=wx.Size(0, 0), style=wx.TE_PROCESS_ENTER) |
|
695 self.Duration.Bind(wx.EVT_KEY_DOWN, self.OnDurationChar) |
|
696 |
|
697 # create browse button |
|
698 self.EditButton = wx.Button(id=-1, label='...', |
|
699 name='EditButton', parent=self, pos=wx.Point(0, 0), |
|
700 size=wx.Size(30, 0), style=0) |
|
701 self.EditButton.Bind(wx.EVT_BUTTON, self.OnEditButtonClick) |
|
702 |
|
703 self.Bind(wx.EVT_SIZE, self.OnSize) |
|
704 |
|
705 self._init_sizers() |
|
706 |
|
707 ''' |
|
708 Custom cell editor control with a text box and a button that launches |
|
709 the DurationEditorDialog. |
|
710 ''' |
|
711 def __init__(self, parent): |
|
712 self._init_ctrls(parent) |
|
713 |
|
714 def SetValue(self, value): |
|
715 self.Duration.SetValue(value) |
|
716 |
|
717 def GetValue(self): |
|
718 return self.Duration.GetValue() |
|
719 |
|
720 def OnSize(self, event): |
|
721 self.Layout() |
|
722 |
|
723 def OnEditButtonClick(self, event): |
|
724 # pop up the Duration Editor dialog |
|
725 dialog = DurationEditorDialog(self) |
|
726 dialog.SetDuration(self.Duration.GetValue()) |
|
727 if dialog.ShowModal() == wx.ID_OK: |
|
728 # set the duration |
|
729 self.Duration.SetValue(dialog.GetDuration()) |
|
730 |
|
731 dialog.Destroy() |
|
732 |
|
733 self.Duration.SetFocus() |
|
734 |
|
735 def OnDurationChar(self, event): |
|
736 keycode = event.GetKeyCode() |
|
737 if keycode == wx.WXK_RETURN or keycode == wx.WXK_TAB: |
|
738 self.Parent.Parent.ProcessEvent(event) |
|
739 self.Parent.Parent.SetFocus() |
|
740 else: |
|
741 event.Skip() |
|
742 |
|
743 def SetInsertionPoint(self, i): |
|
744 self.Duration.SetInsertionPoint(i) |
|
745 |
|
746 def SetFocus(self): |
|
747 self.Duration.SetFocus() |
|
748 |
|
749 class DurationCellEditor(wx.grid.PyGridCellEditor): |
|
750 ''' |
|
751 Grid cell editor that uses DurationCellControl to display an edit button. |
|
752 ''' |
|
753 def __init__(self, table): |
|
754 wx.grid.PyGridCellEditor.__init__(self) |
|
755 self.Table = table |
|
756 |
|
757 def __del__(self): |
|
758 self.CellControl = None |
|
759 |
|
760 def Create(self, parent, id, evt_handler): |
|
761 self.CellControl = DurationCellControl(parent) |
|
762 self.SetControl(self.CellControl) |
|
763 if evt_handler: |
|
764 self.CellControl.PushEventHandler(evt_handler) |
|
765 |
|
766 def BeginEdit(self, row, col, grid): |
|
767 self.CellControl.SetValue(self.Table.GetValueByName(row, 'Interval')) |
|
768 self.CellControl.SetFocus() |
|
769 |
|
770 def EndEdit(self, row, col, grid): |
|
771 duration = self.CellControl.GetValue() |
|
772 old_duration = self.Table.GetValueByName(row, 'Interval') |
|
773 if duration != old_duration: |
|
774 self.Table.SetValueByName(row, 'Interval', duration) |
|
775 return True |
|
776 return False |
|
777 |
|
778 def SetSize(self, rect): |
|
779 self.CellControl.SetDimensions(rect.x + 1, rect.y, |
|
780 rect.width, rect.height, |
|
781 wx.SIZE_ALLOW_MINUS_ONE) |
|
782 |
|
783 def Clone(self): |
|
784 return DurationCellEditor(self.Table) |
|
785 |
|