Beremiz.py
changeset 686 e4e1da75d411
parent 683 57aa9da845d5
child 687 c59baa44ec2f
equal deleted inserted replaced
685:2db8b87016a0 686:e4e1da75d411
   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
       
   287 REFRESH_PERIOD = 0.1
       
   288 from time import time as gettime
   286 class LogPseudoFile:
   289 class LogPseudoFile:
   287     """ 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."""
   288     def __init__(self, output, risecall):
   291     def __init__(self, output, risecall):
   289         self.red_white = wx.TextAttr("RED", "WHITE")
   292         self.red_white = wx.TextAttr("RED", "WHITE")
   290         self.red_yellow = wx.TextAttr("RED", "YELLOW")
   293         self.red_yellow = wx.TextAttr("RED", "YELLOW")
   292         self.default_style = None
   295         self.default_style = None
   293         self.output = output
   296         self.output = output
   294         self.risecall = risecall
   297         self.risecall = risecall
   295         # to prevent rapid fire on rising log panel
   298         # to prevent rapid fire on rising log panel
   296         self.rising_timer = 0
   299         self.rising_timer = 0
       
   300         self.lock = Lock()
       
   301         self.RefreshLock = Lock()
       
   302         self.stack = []
       
   303         self.LastRefreshTime = gettime()
   297 
   304 
   298     def write(self, s, style = None):
   305     def write(self, s, style = None):
   299         if style is None : style=self.black_white
   306         if self.lock.acquire():
       
   307             self.stack.append((s,style))
       
   308             self.lock.release()
       
   309             current_time = gettime()
       
   310             if current_time - self.LastRefreshTime > REFRESH_PERIOD and self.RefreshLock.acquire(False):
       
   311                 wx.CallAfter(self._write)
       
   312 
       
   313     def _write(self):
   300         self.output.Freeze(); 
   314         self.output.Freeze(); 
   301         if self.default_style != style: 
   315         self.lock.acquire()
   302             self.output.SetDefaultStyle(style)
   316         for s, style in self.stack:
   303             self.default_style = style
   317             if style is None : style=self.black_white
   304         self.output.AppendText(s)
   318             if self.default_style != style: 
   305         self.output.ScrollLines(s.count('\n')+1)
   319                 self.output.SetDefaultStyle(style)
       
   320                 self.default_style = style
       
   321             self.output.AppendText(s)
       
   322             #self.output.ScrollLines(s.count('\n')+1)
       
   323         self.stack = []
       
   324         self.lock.release()
   306         self.output.ShowPosition(self.output.GetLastPosition())
   325         self.output.ShowPosition(self.output.GetLastPosition())
   307         self.output.Thaw()
   326         self.output.Thaw()
       
   327         self.LastRefreshTime = gettime()
       
   328         self.RefreshLock.release()
   308         newtime = time.time()
   329         newtime = time.time()
   309         if newtime - self.rising_timer > 1:
   330         if newtime - self.rising_timer > 1:
   310             self.risecall()
   331             self.risecall()
   311         self.rising_timer = newtime 
   332         self.rising_timer = newtime
   312 
   333 
   313     def write_warning(self, s):
   334     def write_warning(self, s):
   314         self.write(s,self.red_white)
   335         self.write(s,self.red_white)
   315 
   336 
   316     def write_error(self, s):
   337     def write_error(self, s):