controls/DebugVariablePanel/DebugVariableGraphicPanel.py
changeset 1214 2ef048b5383c
parent 1213 599e43ec921b
child 1215 786f2533200a
equal deleted inserted replaced
1213:599e43ec921b 1214:2ef048b5383c
   213     
   213     
   214         DebugViewer.__init__(self, producer, True)
   214         DebugViewer.__init__(self, producer, True)
   215         
   215         
   216         self.SetSizer(main_sizer)
   216         self.SetSizer(main_sizer)
   217     
   217     
       
   218     def __del__(self):
       
   219         DebugViewer.__del__(self)
       
   220     
   218     def SetTickTime(self, ticktime=0):
   221     def SetTickTime(self, ticktime=0):
   219         self.Ticktime = ticktime
   222         self.Ticktime = ticktime
   220         if self.Ticktime == 0:
   223         if self.Ticktime == 0:
   221             self.Ticktime = MILLISECOND
   224             self.Ticktime = MILLISECOND
   222         self.CurrentRange = RANGE_VALUES[
   225         self.CurrentRange = RANGE_VALUES[
   375                 panel.ShowButtons(True)
   378                 panel.ShowButtons(True)
   376                 merge_type = GRAPH_PARALLEL
   379                 merge_type = GRAPH_PARALLEL
   377                 if isinstance(panel, DebugVariableTextViewer) or panel.Is3DCanvas():
   380                 if isinstance(panel, DebugVariableTextViewer) or panel.Is3DCanvas():
   378                     if y_mouse > yw + height / 2:
   381                     if y_mouse > yw + height / 2:
   379                         idx += 1
   382                         idx += 1
   380                     wx.CallAfter(self.MoveValue, variable, idx)
   383                     wx.CallAfter(self.MoveValue, variable, idx, True)
   381                 else:
   384                 else:
   382                     rect = panel.GetAxesBoundingBox(True)
   385                     rect = panel.GetAxesBoundingBox(True)
   383                     if rect.InsideXY(x_mouse, y_mouse):
   386                     if rect.InsideXY(x_mouse, y_mouse):
   384                         merge_rect = wx.Rect(rect.x, rect.y, rect.width / 2., rect.height)
   387                         merge_rect = wx.Rect(rect.x, rect.y, rect.width / 2., rect.height)
   385                         if merge_rect.InsideXY(x_mouse, y_mouse):
   388                         if merge_rect.InsideXY(x_mouse, y_mouse):
   386                             merge_type = GRAPH_ORTHOGONAL
   389                             merge_type = GRAPH_ORTHOGONAL
   387                         wx.CallAfter(self.MergeGraphs, variable, idx, merge_type, force=True)
   390                         wx.CallAfter(self.MergeGraphs, variable, idx, merge_type, force=True)
   388                     else:
   391                     else:
   389                         if y_mouse > yw + height / 2:
   392                         if y_mouse > yw + height / 2:
   390                             idx += 1
   393                             idx += 1
   391                         wx.CallAfter(self.MoveValue, variable, idx)
   394                         wx.CallAfter(self.MoveValue, variable, idx, True)
   392                 self.ForceRefresh()
   395                 self.ForceRefresh()
   393                 return 
   396                 return 
   394         width, height = self.GraphicsWindow.GetVirtualSize()
   397         width, height = self.GraphicsWindow.GetVirtualSize()
   395         rect = wx.Rect(0, 0, width, height)
   398         rect = wx.Rect(0, 0, width, height)
   396         if rect.InsideXY(x_mouse, y_mouse):
   399         if rect.InsideXY(x_mouse, y_mouse):
   397             wx.CallAfter(self.MoveValue, variable, len(self.GraphicPanels))
   400             wx.CallAfter(self.MoveValue, variable, len(self.GraphicPanels), True)
   398         self.ForceRefresh()
   401         self.ForceRefresh()
   399     
   402     
   400     def RefreshView(self):
   403     def RefreshView(self):
   401         self.RefreshCanvasPosition()
   404         self.RefreshCanvasPosition()
   402         
   405         
   589         return None
   592         return None
   590     
   593     
   591     def IsViewerFirst(self, viewer):
   594     def IsViewerFirst(self, viewer):
   592         return viewer == self.GraphicPanels[0]
   595         return viewer == self.GraphicPanels[0]
   593     
   596     
   594     def IsViewerLast(self, viewer):
       
   595         return viewer == self.GraphicPanels[-1]
       
   596     
       
   597     def HighlightPreviousViewer(self, viewer):
   597     def HighlightPreviousViewer(self, viewer):
   598         if self.IsViewerFirst(viewer):
   598         if self.IsViewerFirst(viewer):
   599             return
   599             return
   600         idx = self.GetViewerIndex(viewer)
   600         idx = self.GetViewerIndex(viewer)
   601         if idx is None:
   601         if idx is None:
   617         self.MaskLabel.SetInsertionPoint(self.MaskLabel.GetLastPosition())
   617         self.MaskLabel.SetInsertionPoint(self.MaskLabel.GetLastPosition())
   618             
   618             
   619     def GetVariableNameMask(self):
   619     def GetVariableNameMask(self):
   620         return self.VariableNameMask
   620         return self.VariableNameMask
   621     
   621     
   622     def InsertValue(self, iec_path, idx = None, force=False):
   622     def InsertValue(self, iec_path, idx = None, force=False, graph=False):
   623         for panel in self.GraphicPanels:
   623         for panel in self.GraphicPanels:
   624             if panel.GetItem(iec_path) is not None:
   624             if panel.GetItem(iec_path) is not None:
   625                 return
   625                 return
   626         if idx is None:
   626         if idx is None:
   627             idx = len(self.GraphicPanels)
   627             idx = len(self.GraphicPanels)
   628         item = DebugVariableItem(self, iec_path, True)
   628         item = DebugVariableItem(self, iec_path, True)
   629         result = self.AddDataConsumer(iec_path.upper(), item)
   629         result = self.AddDataConsumer(iec_path.upper(), item)
   630         if result is not None or force:
   630         if result is not None or force:
   631             
   631             
   632             self.Freeze()
   632             self.Freeze()
   633             if item.IsNumVariable():
   633             if item.IsNumVariable() and graph:
   634                 panel = DebugVariableGraphicViewer(self.GraphicsWindow, self, [item], GRAPH_PARALLEL)
   634                 panel = DebugVariableGraphicViewer(self.GraphicsWindow, self, [item], GRAPH_PARALLEL)
   635                 if self.CursorTick is not None:
   635                 if self.CursorTick is not None:
   636                     panel.SetCursorTick(self.CursorTick)
   636                     panel.SetCursorTick(self.CursorTick)
   637             else:
   637             else:
   638                 panel = DebugVariableTextViewer(self.GraphicsWindow, self, [item])
   638                 panel = DebugVariableTextViewer(self.GraphicsWindow, self, [item])
   643             self.ResetVariableNameMask()
   643             self.ResetVariableNameMask()
   644             self.RefreshGraphicsSizer()
   644             self.RefreshGraphicsSizer()
   645             self.Thaw()
   645             self.Thaw()
   646             self.ForceRefresh()
   646             self.ForceRefresh()
   647     
   647     
   648     def MoveValue(self, iec_path, idx = None):
   648     def MoveValue(self, iec_path, idx = None, graph=False):
   649         if idx is None:
   649         if idx is None:
   650             idx = len(self.GraphicPanels)
   650             idx = len(self.GraphicPanels)
   651         source_panel = None
   651         source_panel = None
   652         item = None
   652         item = None
   653         for panel in self.GraphicPanels:
   653         for panel in self.GraphicPanels:
   654             item = panel.GetItem(iec_path)
   654             item = panel.GetItem(iec_path)
   655             if item is not None:
   655             if item is not None:
   656                 source_panel = panel
   656                 source_panel = panel
   657                 break
   657                 break
   658         if source_panel is not None:
   658         if source_panel is not None:
       
   659             source_panel_idx = self.GraphicPanels.index(source_panel)
       
   660             if len(panel.GetItems()) == 1 and \
       
   661                idx in [source_panel_idx, source_panel_idx + 1]:
       
   662                 return
       
   663             
   659             source_panel.RemoveItem(item)
   664             source_panel.RemoveItem(item)
   660             source_size = source_panel.GetSize()
   665             source_size = source_panel.GetSize()
       
   666             if item.IsNumVariable() and graph:
       
   667                 panel = DebugVariableGraphicViewer(self.GraphicsWindow, self, [item], GRAPH_PARALLEL)
       
   668                 panel.SetCanvasSize(source_size.width, source_size.height)
       
   669                 if self.CursorTick is not None:
       
   670                     panel.SetCursorTick(self.CursorTick)
       
   671             else:
       
   672                 panel = DebugVariableTextViewer(self.GraphicsWindow, self, [item])
       
   673             
       
   674             self.GraphicPanels.insert(idx, panel)
       
   675             
   661             if source_panel.ItemsIsEmpty():
   676             if source_panel.ItemsIsEmpty():
   662                 if source_panel.HasCapture():
   677                 if source_panel.HasCapture():
   663                     source_panel.ReleaseMouse()
   678                     source_panel.ReleaseMouse()
   664                 self.GraphicPanels.remove(source_panel)
   679                 self.GraphicPanels.remove(source_panel)
   665                 source_panel.Destroy()
   680                 source_panel.Destroy()
   666             
   681             
   667             if item.IsNumVariable():
       
   668                 panel = DebugVariableGraphicViewer(self.GraphicsWindow, self, [item], GRAPH_PARALLEL)
       
   669                 panel.SetCanvasSize(source_size.width, source_size.height)
       
   670                 if self.CursorTick is not None:
       
   671                     panel.SetCursorTick(self.CursorTick)
       
   672             else:
       
   673                 panel = DebugVariableTextViewer(self.GraphicsWindow, self, [item])
       
   674             self.GraphicPanels.insert(idx, panel)
       
   675             self.ResetVariableNameMask()
   682             self.ResetVariableNameMask()
   676             self.RefreshGraphicsSizer()
   683             self.RefreshGraphicsSizer()
   677             self.ForceRefresh()
   684             self.ForceRefresh()
   678     
   685     
   679     def MergeGraphs(self, source, target_idx, merge_type, force=False):
   686     def MergeGraphs(self, source, target_idx, merge_type, force=False):
   749                     self.GraphicPanels.remove(source_panel)
   756                     self.GraphicPanels.remove(source_panel)
   750                     self.ResetVariableNameMask()
   757                     self.ResetVariableNameMask()
   751                     self.RefreshGraphicsSizer()
   758                     self.RefreshGraphicsSizer()
   752             self.ForceRefresh()
   759             self.ForceRefresh()
   753     
   760     
       
   761     def ToggleViewerType(self, panel):
       
   762         panel_idx = self.GetViewerIndex(panel)
       
   763         if panel_idx is not None:
       
   764             self.GraphicPanels.remove(panel)
       
   765             items = panel.GetItems()
       
   766             if isinstance(panel, DebugVariableGraphicViewer):
       
   767                 for idx, item in enumerate(items):
       
   768                     new_panel = DebugVariableTextViewer(self.GraphicsWindow, self, [item])
       
   769                     self.GraphicPanels.insert(panel_idx + idx, new_panel)
       
   770             else:
       
   771                 new_panel = DebugVariableGraphicViewer(self.GraphicsWindow, self, items, GRAPH_PARALLEL)
       
   772                 self.GraphicPanels.insert(panel_idx, new_panel)
       
   773             panel.Destroy()
       
   774         self.RefreshGraphicsSizer()
       
   775         self.ForceRefresh()
       
   776     
   754     def ResetGraphicsValues(self):
   777     def ResetGraphicsValues(self):
   755         self.Ticks = numpy.array([])
   778         self.Ticks = numpy.array([])
   756         self.StartTick = 0
   779         self.StartTick = 0
   757         self.Fixed = False
   780         self.Fixed = False
   758         for panel in self.GraphicPanels:
   781         for panel in self.GraphicPanels: