graphics/GraphicCommons.py
changeset 372 8cab11dd2325
parent 368 591ba4003d74
child 381 98890d848701
equal deleted inserted replaced
371:a69a5a72daa1 372:8cab11dd2325
   199         self.Value = None
   199         self.Value = None
   200         self.Inhibited = False
   200         self.Inhibited = False
   201     
   201     
   202     def Inhibit(self, inhibit):
   202     def Inhibit(self, inhibit):
   203         self.Inhibited = inhibit
   203         self.Inhibited = inhibit
   204         if inhibit and self.LastValue is not None:
   204         if not inhibit and self.LastValue is not None:
   205             self.SetValue(self.LastValue)
   205             self.SetValue(self.LastValue)
   206             self.LastValue = None
   206             self.LastValue = None
   207         
   207         
   208     def NewValue(self, tick, value):
   208     def NewValue(self, tick, value):
   209         if self.Inhibited:
   209         if self.Inhibited:
   223 class DebugViewer:
   223 class DebugViewer:
   224     
   224     
   225     def __init__(self, producer, debug, register_tick=True):
   225     def __init__(self, producer, debug, register_tick=True):
   226         self.DataProducer = producer
   226         self.DataProducer = producer
   227         self.Debug = debug
   227         self.Debug = debug
       
   228         self.Inhibited = False
   228         
   229         
   229         self.DataConsumers = {}
   230         self.DataConsumers = {}
   230         
   231         
   231         self.LastRefreshTime = gettime()
   232         self.LastRefreshTime = gettime()
   232         
   233         
       
   234         self.RefreshTimer = wx.Timer(self, -1)
       
   235         self.Bind(wx.EVT_TIMER, self.OnRefreshTimer, self.RefreshTimer)
       
   236         
   233         if register_tick and debug:
   237         if register_tick and debug:
   234             self.DataProducer.SubscribeDebugIECVariable("__tick__", self)
   238             self.DataProducer.SubscribeDebugIECVariable("__tick__", self)
   235         
   239         
   236         self.RefreshTimer = wx.Timer(self, -1)
       
   237         self.Bind(wx.EVT_TIMER, self.OnRefreshTimer, self.RefreshTimer)
       
   238     
       
   239     def __del__(self):
   240     def __del__(self):
   240         if self.Debug:
   241         if self.Debug:
   241             self.DataProducer.UnsubscribeDebugIECVariable("__tick__", self)
   242             self.DataProducer.UnsubscribeDebugIECVariable("__tick__", self)
   242         self.DeleteDataConsumers()
   243         self.DeleteDataConsumers()
   243         self.RefreshTimer.Stop()
   244         self.RefreshTimer.Stop()
   244         
   245         
   245     def Inhibit(self, inhibit):
   246     def Inhibit(self, inhibit):
       
   247         self.Inhibited = inhibit
   246         for consumer, iec_path in self.DataConsumers.iteritems():
   248         for consumer, iec_path in self.DataConsumers.iteritems():
   247             consumer.Inhibit(inhibit)
   249             consumer.Inhibit(inhibit)
   248     
   250     
   249     def AddDataConsumer(self, iec_path, consumer):
   251     def AddDataConsumer(self, iec_path, consumer):
   250         result = self.DataProducer.SubscribeDebugIECVariable(iec_path, consumer) is not None
   252         result = self.DataProducer.SubscribeDebugIECVariable(iec_path, consumer) is not None
   265     def OnRefreshTimer(self, event):
   267     def OnRefreshTimer(self, event):
   266         self.RefreshNewData()
   268         self.RefreshNewData()
   267         event.Skip()
   269         event.Skip()
   268     
   270     
   269     def NewDataAvailable(self):
   271     def NewDataAvailable(self):
   270         self.Inhibit(True)
   272         self.RefreshTimer.Stop()
   271         current_time = gettime()
   273         if not self.Inhibited:
   272         if current_time - self.LastRefreshTime > REFRESH_PERIOD:
   274             current_time = gettime()
   273             self.LastRefreshTime = current_time
   275             if current_time - self.LastRefreshTime > REFRESH_PERIOD:
   274             wx.CallAfter(self.RefreshViewOnNewData)
   276                 self.LastRefreshTime = current_time
   275 
   277                 self.Inhibit(True)
       
   278                 wx.CallAfter(self.RefreshViewOnNewData)
       
   279             
   276     def RefreshViewOnNewData(self):
   280     def RefreshViewOnNewData(self):
   277         if self:
   281         if self:
   278             self.RefreshNewData()
   282             self.RefreshNewData()
   279             self.RefreshTimer.Start(int(REFRESH_PERIOD * 1000), oneShot=True)
   283             self.RefreshTimer.Start(int(REFRESH_PERIOD * 1000), oneShot=True)
   280     
   284