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 |