Beremiz.py
changeset 688 6324b40d82a5
parent 687 c59baa44ec2f
child 692 8b1ed486f374
equal deleted inserted replaced
687:c59baa44ec2f 688:6324b40d82a5
   281         dc.DrawRectangle(0, 0, *dc.GetSizeTuple())
   281         dc.DrawRectangle(0, 0, *dc.GetSizeTuple())
   282         if self._bitmap:
   282         if self._bitmap:
   283             dc.DrawBitmap(self._bitmap, 0, 0, True)
   283             dc.DrawBitmap(self._bitmap, 0, 0, True)
   284 
   284 
   285                         
   285                         
   286 from threading import Lock
   286 from threading import Lock,Timer
   287 REFRESH_PERIOD = 0.1
   287 REFRESH_PERIOD = 0.1
   288 from time import time as gettime
   288 from time import time as gettime
   289 class LogPseudoFile:
   289 class LogPseudoFile:
   290     """ Base class for file like objects to facilitate StdOut for the Shell."""
   290     """ Base class for file like objects to facilitate StdOut for the Shell."""
   291     def __init__(self, output, risecall):
   291     def __init__(self, output, risecall):
   299         self.rising_timer = 0
   299         self.rising_timer = 0
   300         self.lock = Lock()
   300         self.lock = Lock()
   301         self.RefreshLock = Lock()
   301         self.RefreshLock = Lock()
   302         self.stack = []
   302         self.stack = []
   303         self.LastRefreshTime = gettime()
   303         self.LastRefreshTime = gettime()
       
   304         self.LastRefreshTimer = None
   304 
   305 
   305     def write(self, s, style = None):
   306     def write(self, s, style = None):
   306         if self.lock.acquire():
   307         if self.lock.acquire():
   307             self.stack.append((s,style))
   308             self.stack.append((s,style))
   308             self.lock.release()
   309             self.lock.release()
   309             current_time = gettime()
   310             current_time = gettime()
       
   311             if self.LastRefreshTimer:
       
   312                 self.LastRefreshTimer.cancel()
       
   313                 self.LastRefreshTimer=None
   310             if current_time - self.LastRefreshTime > REFRESH_PERIOD and self.RefreshLock.acquire(False):
   314             if current_time - self.LastRefreshTime > REFRESH_PERIOD and self.RefreshLock.acquire(False):
   311                 wx.CallAfter(self._write)
   315                 wx.CallAfter(self._write)
       
   316             else:
       
   317                 self.LastRefreshTimer = Timer(REFRESH_PERIOD, wx.CallAfter, [self._write])
       
   318                 self.LastRefreshTimer.start()
   312 
   319 
   313     def _write(self):
   320     def _write(self):
   314         self.output.Freeze(); 
   321         self.output.Freeze(); 
   315         self.lock.acquire()
   322         self.lock.acquire()
   316         for s, style in self.stack:
   323         for s, style in self.stack:
   323         self.stack = []
   330         self.stack = []
   324         self.lock.release()
   331         self.lock.release()
   325         self.output.ShowPosition(self.output.GetLastPosition())
   332         self.output.ShowPosition(self.output.GetLastPosition())
   326         self.output.Thaw()
   333         self.output.Thaw()
   327         self.LastRefreshTime = gettime()
   334         self.LastRefreshTime = gettime()
   328         self.RefreshLock.release()
   335         try:
       
   336             self.RefreshLock.release()
       
   337         except:
       
   338             pass
   329         newtime = time.time()
   339         newtime = time.time()
   330         if newtime - self.rising_timer > 1:
   340         if newtime - self.rising_timer > 1:
   331             self.risecall()
   341             self.risecall()
   332         self.rising_timer = newtime
   342         self.rising_timer = newtime
   333 
   343