diff -r 072f9f830659 -r 62570186dad4 Viewer.py --- a/Viewer.py Thu May 28 08:10:18 2009 +0200 +++ b/Viewer.py Sat May 30 17:15:22 2009 +0200 @@ -234,7 +234,7 @@ manipulating graphic elements """ -class Viewer(wx.ScrolledWindow): +class Viewer(wx.ScrolledWindow, DebugViewer): if wx.VERSION < (2, 6, 0): def Bind(self, event, function, id = None): @@ -344,6 +344,7 @@ def __init__(self, parent, tagname, window, controler, debug = False, instancepath = ""): wx.ScrolledWindow.__init__(self, parent, pos=wx.Point(0, 0), size=wx.Size(0, 0), style=wx.HSCROLL | wx.VSCROLL | wx.ALWAYS_SHOW_SB) + DebugViewer.__init__(self, controler, debug) self._init_menus() # Adding a rubberband to Viewer self.rubberBand = RubberBand(drawingSurface=self) @@ -359,7 +360,6 @@ self.current_id = 0 self.TagName = tagname self.Errors = [] - self.Debug = debug self.InstancePath = instancepath self.StartMousePos = None self.StartScreenPos = None @@ -378,6 +378,8 @@ if not self.Debug: self.SetDropTarget(ViewerDropTarget(self)) + self.NewDataRefreshRect = None + dc = wx.ClientDC(self) font = wx.Font(faces["size"], wx.SWISS, wx.NORMAL, wx.NORMAL, faceName = faces["mono"]) dc.SetFont(font) @@ -388,6 +390,8 @@ dc.SetFont(font) width, height = dc.GetTextExtent("ABCDEFGHIJKLMNOPQRSTUVWXYZ") self.SetFont(font) + self.MiniTextDC = wx.MemoryDC() + self.MiniTextDC.SetFont(wx.Font(faces["size"] * 0.75, wx.SWISS, wx.NORMAL, wx.NORMAL, faceName = faces["helv"])) self.SetScale(len(ZOOM_FACTORS) / 2) @@ -442,6 +446,7 @@ # Destructor def __del__(self): + DebugViewer.__del__(self) self.Flush() self.ResetView() @@ -467,10 +472,12 @@ dc.SetUserScale(self.ViewScale[0], self.ViewScale[1]) return dc + def GetMiniTextExtent(self, text): + return self.MiniTextDC.GetTextExtent(text) + def GetMiniFont(self): - font = self.GetFont() - return wx.Font(font.GetPointSize() * 0.75, wx.SWISS, wx.NORMAL, wx.NORMAL, faceName = faces["helv"]) - + return self.MiniTextDC.GetFont() + #------------------------------------------------------------------------------- # Element management functions #------------------------------------------------------------------------------- @@ -549,7 +556,7 @@ iec_path = "%s.%s%d_%s"%(self.InstancePath, block.GetType(), block.GetId(), connectorname) elif isinstance(block, FBD_Variable): iec_path = "%s.%s"%(self.InstancePath, block.GetName()) - elif isinstance(element, (LD_Contact, LD_Coil)): + elif isinstance(element, LD_Contact): iec_path = "%s.%s"%(self.InstancePath, element.GetName()) elif isinstance(element, SFC_Step): iec_path = "%s.%s.X"%(self.InstancePath, element.GetName()) @@ -574,8 +581,7 @@ self.HighlightedElement = None def Flush(self): - for element, iec_path in self.Subscribed.iteritems(): - self.Controler.UnsubscribeDebugIECVariable(iec_path, element) + self.DeleteDataConsumers() for block in self.Blocks: block.Flush() @@ -643,6 +649,18 @@ # Refresh functions #------------------------------------------------------------------------------- + def UpdateRefreshRect(self, refresh_rect): + if self.NewDataRefreshRect is None: + self.NewDataRefreshRect = refresh_rect + else: + self.NewDataRefreshRect.Union(refresh_rect) + + def RefreshNewData(self): + if self.NewDataRefreshRect is not None: + refresh_rect, self.NewDataRefreshRect = self.NewDataRefreshRect, None + self.RefreshRect(self.GetScrolledRect(refresh_rect), False) + DebugViewer.RefreshNewData(self) + def ResetBuffer(self): pass @@ -679,15 +697,11 @@ iec_path = "%s.%s%d"%(self.InstancePath, block.GetType(), block.GetId()) else: iec_path = "%s.%s%d_%s"%(self.InstancePath, block.GetType(), block.GetId(), connectorname) - if self.Controler.SubscribeDebugIECVariable(iec_path.upper(), wire) is not None: - self.Subscribed[wire] = iec_path.upper() - else: + if self.AddDataConsumer(iec_path.upper(), wire) is None: wire.SetValue("undefined") elif isinstance(block, FBD_Variable): iec_path = "%s.%s"%(self.InstancePath, block.GetName()) - if self.Controler.SubscribeDebugIECVariable(iec_path.upper(), wire) is not None: - self.Subscribed[wire] = iec_path.upper() - else: + if self.AddDataConsumer(iec_path.upper(), wire) is None: wire.SetValue("undefined") elif isinstance(block, FBD_Connector): wire.SetValue("undefined") @@ -697,10 +711,8 @@ block.SpreadCurrent() iec_path = self.GetElementIECPath(block) if iec_path is not None: - result = self.Controler.SubscribeDebugIECVariable(iec_path.upper(), block) - if result is not None: - self.Subscribed[block] = iec_path.upper() - + self.AddDataConsumer(iec_path.upper(), block) + self.RefreshVisibleElements() self.ShowErrors() self.Refresh(False) @@ -2687,7 +2699,7 @@ names.update(dict([(varname.upper(), True) for varname in self.Controler.GetEditedElementVariables(self.TagName, self.Debug)])) format = "Block%d" elif isinstance(element, SFC_Step): - names.update(dict([block.GetName().upper() for block in self.Blocks if isinstance(block, SFC_Step)])) + names.update(dict([(block.GetName().upper(), True) for block in self.Blocks if isinstance(block, SFC_Step)])) format = "Step%d" i = 1 while names.get((format%i).upper(), False):