import sys
+from cStringIO import StringIO
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from sface.config import config
+import time
+
+class LogIO(QObject):
+ def __init__(self, parent, old_stdout):
+ QObject.__init__(self, parent)
+ self.io = StringIO()
+ self.old_stdout = old_stdout
+
+ def write(self, txt):
+ self.io.write(txt)
+ self.parent().update()
+
+ def getText(self):
+ self.old_stdout.write("getText: ENTERING\n")
+ val = self.io.getvalue()
+ # looks like there is no other way
+ # to empty the StringIO
+ del self.io
+ self.io = StringIO()
+ self.old_stdout.write("getText: GOT VALUE\n")
+ self.old_stdout.write(val + "\n")
+ return val
class LogWindow(QDialog):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.setWindowTitle("SFI Log")
self.text = QTextBrowser(self)
+ self.text.ensureCursorVisible()
layout = QVBoxLayout()
layout.addWidget(self.text)
self.setLayout(layout)
- self.io = QIODevice(self)
- self.connect(self.io, SIGNAL('canReadLine()'), self.appendLine)
+ self.logio = LogIO(self, sys.stdout)
def redirectOutput(self):
- print "Redirecting all output to Log Window. Please open the log window to see the output"
+ print "\n\nRedirecting all output to Log Window. Please open the log window to see the output\n"
self.old_stdout = sys.stdout
self.old_stderr = sys.stderr
- sys.stdout = self.io
- sys.stderr = self.io
-
- self.old_stdout.write("test")
- self.text.append("io Test\n")
+ sys.stdout = self.logio
+ sys.stderr = self.logio
- def appendLine(self):
- self.text.append(self.io.readLine())
-
-
-
+ def update(self):
+ #starttime = time.time()
+ #self.logio.old_stdout.write("update: entering\n")#.flush()
+ #self.logio.old_stdout.write('one\n')#.flush()
+ self.text.insertPlainText(self.logio.getText())
+ #self.logio.old_stdout.write('two\n')#.flush()
+ c = self.text.textCursor()
+ #self.logio.old_stdout.write('three\n')#.flush()
+ c.movePosition(QTextCursor.End)
+ #self.logio.old_stdout.write('four\n')#.flush()
+ self.text.setTextCursor(c)
+ #self.logio.old_stdout.write('five\n')#.flush()
+ #self.logio.old_stdout.write("update: done \n")# + time.strftime(('%M:%S'),"[%.3f s]"%(time.time() - starttime)))#.flush()