graphics/GraphicCommons.py
changeset 645 41782a92c2de
parent 634 cc3335911c01
child 666 d4bb66691248
equal deleted inserted replaced
644:6ff54a34102b 645:41782a92c2de
    25 import wx
    25 import wx
    26 from time import time as gettime
    26 from time import time as gettime
    27 from math import *
    27 from math import *
    28 from types import *
    28 from types import *
    29 import datetime
    29 import datetime
       
    30 from threading import Semaphore
    30 
    31 
    31 #-------------------------------------------------------------------------------
    32 #-------------------------------------------------------------------------------
    32 #                               Common constants
    33 #                               Common constants
    33 #-------------------------------------------------------------------------------
    34 #-------------------------------------------------------------------------------
    34 
    35 
   302         self.Inhibited = False
   303         self.Inhibited = False
   303         
   304         
   304         self.DataConsumers = {}
   305         self.DataConsumers = {}
   305         
   306         
   306         self.LastRefreshTime = gettime()
   307         self.LastRefreshTime = gettime()
       
   308         self.RefreshLock = Semaphore()
   307         
   309         
   308         self.RefreshTimer = wx.Timer(self, -1)
   310         self.RefreshTimer = wx.Timer(self, -1)
   309         self.Bind(wx.EVT_TIMER, self.OnRefreshTimer, self.RefreshTimer)
   311         self.Bind(wx.EVT_TIMER, self.OnRefreshTimer, self.RefreshTimer)
   310         
   312         
   311         self.SetDataProducer(producer)
   313         self.SetDataProducer(producer)
   325     
   327     
   326     def IsDebugging(self):
   328     def IsDebugging(self):
   327         return self.Debug
   329         return self.Debug
   328     
   330     
   329     def Inhibit(self, inhibit):
   331     def Inhibit(self, inhibit):
   330         self.Inhibited = inhibit
       
   331         for consumer, iec_path in self.DataConsumers.iteritems():
   332         for consumer, iec_path in self.DataConsumers.iteritems():
   332             consumer.Inhibit(inhibit)
   333             consumer.Inhibit(inhibit)
       
   334         self.Inhibited = inhibit
   333     
   335     
   334     def AddDataConsumer(self, iec_path, consumer):
   336     def AddDataConsumer(self, iec_path, consumer):
   335         if self.DataProducer is None:
   337         if self.DataProducer is None:
   336             return None
   338             return None
   337         result = self.DataProducer.SubscribeDebugIECVariable(iec_path, consumer)
   339         result = self.DataProducer.SubscribeDebugIECVariable(iec_path, consumer)
   366     
   368     
   367     def OnRefreshTimer(self, event):
   369     def OnRefreshTimer(self, event):
   368         self.RefreshNewData()
   370         self.RefreshNewData()
   369         event.Skip()
   371         event.Skip()
   370     
   372     
   371     def NewDataAvailable(self):
   373     def NewDataAvailable(self, *args, **kwargs):
   372         self.RefreshTimer.Stop()
   374         self.RefreshTimer.Stop()
   373         if not self.Inhibited:
   375         if not self.Inhibited:
   374             current_time = gettime()
   376             current_time = gettime()
   375             if current_time - self.LastRefreshTime > REFRESH_PERIOD:
   377             if current_time - self.LastRefreshTime > REFRESH_PERIOD and self.RefreshLock.acquire(False):
   376                 self.LastRefreshTime = current_time
   378                 self.LastRefreshTime = gettime()
   377                 self.Inhibit(True)
   379                 self.Inhibit(True)
   378                 wx.CallAfter(self.RefreshViewOnNewData)
   380                 wx.CallAfter(self.RefreshViewOnNewData, *args, **kwargs)
   379             
   381             
   380     def RefreshViewOnNewData(self):
   382     def RefreshViewOnNewData(self, *args, **kwargs):
   381         if self:
   383         if self:
   382             self.RefreshNewData()
   384             self.RefreshNewData(*args, **kwargs)
   383             self.RefreshTimer.Start(int(REFRESH_PERIOD * 1000), oneShot=True)
   385             self.RefreshTimer.Start(int(REFRESH_PERIOD * 1000), oneShot=True)
   384     
   386     
   385     def RefreshNewData(self):
   387     def RefreshNewData(self, *args, **kwargs):
   386         self.Inhibit(False)
   388         self.Inhibit(False)
   387 
   389         self.RefreshLock.release()
       
   390         
   388 #-------------------------------------------------------------------------------
   391 #-------------------------------------------------------------------------------
   389 #                               Viewer Rubberband
   392 #                               Viewer Rubberband
   390 #-------------------------------------------------------------------------------
   393 #-------------------------------------------------------------------------------
   391 
   394 
   392 """
   395 """