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 """ |