--- a/Beremiz.py Wed Feb 15 16:39:56 2012 +0100
+++ b/Beremiz.py Wed Feb 15 18:52:31 2012 +0100
@@ -283,6 +283,9 @@
dc.DrawBitmap(self._bitmap, 0, 0, True)
+from threading import Lock +from time import time as gettime """ Base class for file like objects to facilitate StdOut for the Shell."""
def __init__(self, output, risecall):
@@ -294,21 +297,39 @@
# to prevent rapid fire on rising log panel
+ self.RefreshLock = Lock() + self.LastRefreshTime = gettime() def write(self, s, style = None):
- if style is None : style=self.black_white
+ if self.lock.acquire(): + self.stack.append((s,style)) + current_time = gettime() + if current_time - self.LastRefreshTime > REFRESH_PERIOD and self.RefreshLock.acquire(False): + wx.CallAfter(self._write) - if self.default_style != style:
- self.output.SetDefaultStyle(style)
- self.default_style = style
- self.output.AppendText(s)
- self.output.ScrollLines(s.count('\n')+1)
+ for s, style in self.stack: + if style is None : style=self.black_white + if self.default_style != style: + self.output.SetDefaultStyle(style) + self.default_style = style + self.output.AppendText(s) + #self.output.ScrollLines(s.count('\n')+1) self.output.ShowPosition(self.output.GetLastPosition())
+ self.LastRefreshTime = gettime() + self.RefreshLock.release() if newtime - self.rising_timer > 1:
- self.rising_timer = newtime
+ self.rising_timer = newtime def write_warning(self, s):
self.write(s,self.red_white)
--- a/plugger.py Wed Feb 15 16:39:56 2012 +0100
+++ b/plugger.py Wed Feb 15 18:52:31 2012 +0100
@@ -498,8 +498,6 @@
# Finally set IEC Channel
self.BaseParams.setIEC_Channel(res)
- if DesiredChannel != res:
- self.GetPlugRoot().logger.write_warning(_("A child with IEC channel %d already exist -> %d\n")%(DesiredChannel,res))
--- a/wxPopen.py Wed Feb 15 16:39:56 2012 +0100
+++ b/wxPopen.py Wed Feb 15 18:52:31 2012 +0100
@@ -126,19 +126,13 @@
- if wx.GetApp() is None:
- wx.CallAfter(self.logger.write,v)
- if wx.GetApp() is None:
- self.logger.write_warning(v)
- wx.CallAfter(self.logger.write_warning,v)
+ self.logger.write_warning(v) def log_the_end(self,ecode,pid):
self.logger.write(self.Command_str + "\n")
@@ -148,10 +142,7 @@
- if wx.GetApp() is None:
- self.log_the_end(ecode,pid)
- wx.CallAfter(self.log_the_end,ecode,pid)
+ self.log_the_end(ecode,pid) if self.finish_callback is not None:
self.finish_callback(self,ecode,pid)