fix bug when submitting changes
[sface.git] / sface / logwindow.py
index 64d4e9f..fd252ef 100644 (file)
@@ -1,20 +1,53 @@
+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):
+        val = self.io.getvalue()
+        # looks like there is no other way
+        # to empty the StringIO
+        del self.io
+        self.io = StringIO()
+        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)
 
-    def setText(self, txt):
-        self.text.setText(txt)
-        
-        
+        self.logio = LogIO(self, sys.stdout)
+
+    def redirectOutput(self):
+        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.logio
+        sys.stderr = self.logio
+
+    def update(self):
+        self.text.insertPlainText(self.logio.getText())
+        c = self.text.textCursor()
+        c.movePosition(QTextCursor.End)
+        self.text.setTextCursor(c)