]> git.siccegge.de Git - frida/frida.git/blobdiff - src/gui/widgets/LogDock.cxx
Make LogDock and LogDockAppender communicate by signals
[frida/frida.git] / src / gui / widgets / LogDock.cxx
index b8b92147ccb19158cc4bd6f4ba00654bcd989d8e..b4efc1d4d5ae6726f4bfe91d8061189def6046bd 100644 (file)
@@ -11,10 +11,31 @@ LogDock::LogDock(FridaDock* parent)
        horizontalHeader()->setStretchLastSection(true);
        verticalHeader()->setDefaultSectionSize(18);
        appender = new LogDockAppender;
-       appender->setTarget(this);
+       connect(appender, &LogDockAppender::newLogEntry,
+               this, &LogDock::handleNewLogEntry);
        log4cxx::BasicConfigurator::configure(appender);
 }
 
 LogDock::~LogDock() {
        delete appender;
 }
+
+void LogDock::handleNewLogEntry(QColor color, QString timestamp, QString level, QString message) {
+       int rowcount = rowCount();
+       insertRow(rowcount);
+       setItem(rowcount, 0, new QTableWidgetItem(timestamp));
+       setItem(rowcount, 1, new QTableWidgetItem(level));
+       setItem(rowcount, 2, new QTableWidgetItem(message));
+       item(rowcount, 0)->setBackground(color);
+       item(rowcount, 1)->setBackground(color);
+       item(rowcount, 2)->setBackground(color);
+       resizeColumnsToContents();
+
+       QTimer *timer = new QTimer(this);
+       timer->setSingleShot(true);
+
+       QObject::connect(timer, &QTimer::timeout, [=]() {
+                       scrollToItem(item(rowcount, 2), QAbstractItemView::PositionAtTop);
+               });
+       timer->start(2);
+}