diff --git a/frappy/gui/logwindow.py b/frappy/gui/logwindow.py
index d620ddb..55ee8c7 100644
--- a/frappy/gui/logwindow.py
+++ b/frappy/gui/logwindow.py
@@ -1,45 +1,72 @@
-from logging import DEBUG, NOTSET, Handler
+from logging import NOTSET, Handler
from frappy.gui.qt import QMainWindow, QObject, pyqtSignal
-from frappy.gui.util import loadUi
+from frappy.gui.util import Colors, loadUi
class LogWindowHandler(Handler, QObject):
- logmessage = pyqtSignal(str, int)
+ logmessage = pyqtSignal(object)
def __init__(self, level=NOTSET):
QObject.__init__(self)
Handler.__init__(self, level)
+ self.log = []
def emit(self, record):
- self.logmessage.emit(record.getMessage(), record.levelno)
+ self.log.append(record)
+ self.logmessage.emit(record)
+
+ def getEntries(self, level):
+ return [rec for rec in self.log if rec.levelno >= level]
class LogWindow(QMainWindow):
+ closed = pyqtSignal()
levels = {'Debug':10, 'Info':20, 'Warning':30, 'Error':40}
- def __init__(self, logger, parent=None):
+
+ def __init__(self, handler, parent=None):
super().__init__(parent)
loadUi(self, 'logwindow.ui')
- self.log = []
+ self.timecolor = Colors.colors['gray']
self.level = self.levels['Info']
- handler = LogWindowHandler(DEBUG)
- handler.logmessage.connect(self.newEntry)
- logger.addHandler(handler)
+ self.messagecolors = {
+ 10 : Colors.colors['gray'],
+ 20 : Colors.palette.windowText().color(),
+ 30 : Colors.colors['orange'],
+ 40 : Colors.colors['red'],
+ }
+ self.handler = handler
+ self.handler.logmessage.connect(self.newEntry)
+ self.setMessages(self.handler.getEntries(self.level))
- def newEntry(self, msg, lvl):
- self.log.append((lvl, msg))
- if lvl >= self.level:
- self.logBrowser.append(msg)
+ def setMessages(self, msgs):
+ for msg in msgs:
+ self.appendMessage(msg)
+
+ def newEntry(self, record):
+ if record.levelno >= self.level:
+ self.appendMessage(record)
+
+ def appendMessage(self, record):
+ s = record.getMessage()
+ time = record.created
+ if record.levelno == self.levels['Error']:
+ s = '%s' %s
+ s='[%s] %s: %s' \
+ % (self.timecolor.name(), time, \
+ self.messagecolors[record.levelno].name(), \
+ record.name, s)
+ self.logBrowser.append(s)
def on_logLevel_currentTextChanged(self, level):
self.level = self.levels[level]
self.logBrowser.clear()
- self.logBrowser.setPlainText('\n'.join(msg for (lvl, msg) in self.log if lvl >= self.level))
+ self.setMessages(self.handler.getEntries(self.level))
def on_clear_pressed(self):
self.logBrowser.clear()
- self.log.clear()
- def onClose(self):
- pass
+ def closeEvent(self, event):
+ self.closed.emit()
+ self.deleteLater()
diff --git a/frappy/gui/mainwindow.py b/frappy/gui/mainwindow.py
index afe4450..14f9111 100644
--- a/frappy/gui/mainwindow.py
+++ b/frappy/gui/mainwindow.py
@@ -27,7 +27,7 @@ from frappy.gui.qt import QAction, QInputDialog, QKeySequence, QMainWindow, \
import frappy.version
from frappy.gui.connection import QSECNode
-from frappy.gui.logwindow import LogWindow
+from frappy.gui.logwindow import LogWindow, LogWindowHandler
from frappy.gui.nodewidget import NodeWidget
from frappy.gui.tabwidget import TearOffTabWidget
from frappy.gui.util import Colors, is_light_theme, loadUi
@@ -94,9 +94,11 @@ class MainWindow(QMainWindow):
def __init__(self, hosts, logger, parent=None):
super().__init__(parent)
+ # centralized handling for logging and cmd-history
+ self.loghandler = LogWindowHandler()
self.log = logger
- self.logwin = LogWindow(logger, self)
- self.logwin.hide()
+ self.log.addHandler(self.loghandler)
+ self.logwin = None
self.historySerializer = HistorySerializer()
loadUi(self, 'mainwin.ui')
@@ -173,7 +175,18 @@ class MainWindow(QMainWindow):
self._rebuildAdvanced(toggled)
def on_actionShow_Logs_toggled(self, active):
- self.logwin.setHidden(not active)
+ if not active and self.logwin:
+ self.logwin.close()
+ self.logwin = None
+ return
+ self.logwin = LogWindow(self.loghandler, self)
+ self.logwin.closed.connect(self.onLogWindowClose)
+ self.logwin.show()
+
+ def onLogWindowClose(self):
+ if self.actionShow_Logs.isChecked():
+ self.actionShow_Logs.toggle()
+ self.logwin = None
def on_actionHighlightAnimation_toggled(self, toggled):
settings = QSettings()
@@ -274,4 +287,3 @@ class MainWindow(QMainWindow):
# this is only qt signals deconnecting!
widget.getSecNode().terminate_connection()
self.historySerializer.saveHistory()
- self.logwin.onClose()
diff --git a/frappy/gui/ui/logwindow.ui b/frappy/gui/ui/logwindow.ui
index 9cae014..c74aeca 100644
--- a/frappy/gui/ui/logwindow.ui
+++ b/frappy/gui/ui/logwindow.ui
@@ -6,23 +6,35 @@
0
0
- 350
- 271
+ 659
+ 306
Log
-
+
0
10
- 351
- 261
+ 651
+ 291
+
+ 4
+
+
+ 4
+
+
+ 4
+
+
+ 10
+
-
-
@@ -30,6 +42,9 @@
Info
+
+ 2
+
-
Error
diff --git a/frappy/gui/util.py b/frappy/gui/util.py
index 154f352..51153e9 100644
--- a/frappy/gui/util.py
+++ b/frappy/gui/util.py
@@ -47,6 +47,8 @@ class Colors:
cls.palette = palette
if is_light_theme(palette): # light
cls.colors = {
+ 'gray' : QColor('#696969'),
+ 'red' : QColor('#FF0000'),
'orange': QColor('#FA6800'),
'yellow': QColor('#FCFFa4'),
'plot-fg': QColor('black'),
@@ -60,6 +62,8 @@ class Colors:
}
else: # dark
cls.colors = {
+ 'gray' : QColor('#AAAAAA'),
+ 'red' : QColor('#FF0000'),
'orange': QColor('#FA6800'),
'yellow': QColor('#FEFE22'),
'plot-fg': QColor('white'),