X-Git-Url: https://git.siccegge.de//index.cgi?p=frida%2Ffrida.git;a=blobdiff_plain;f=src%2Fgui%2Fwidgets%2FLogDockAppender.cxx;h=321860afb3313126060f68399d8b41987eb1bf5f;hp=f6419c27601b346d7651fe67fd74caaa2cf0b5bf;hb=1975fc2d8d5f1a2a7bf71717c0ca7cef6dd57566;hpb=5514e0b76ec9af2fa67abebe77cfe26052f2326f;ds=sidebyside diff --git a/src/gui/widgets/LogDockAppender.cxx b/src/gui/widgets/LogDockAppender.cxx index f6419c2..321860a 100644 --- a/src/gui/widgets/LogDockAppender.cxx +++ b/src/gui/widgets/LogDockAppender.cxx @@ -2,6 +2,7 @@ #include "LogDock.hxx" #include +#include using namespace log4cxx::helpers; @@ -15,28 +16,50 @@ LogDockAppender::LogDockAppender() void LogDockAppender::append(const spi::LoggingEventPtr& event, Pool& p) { log4cxx::LogString message, timestamp; - if ( this->layout == NULL ) { - LOG4CXX_ENCODE_CHAR(nameStr, name); - std::string msg("No Layout set for the appender named [ "); - msg.append(nameStr); - msg.append(" ]."); - - LOG4CXX_DECODE_CHAR(msgL, msg); - errorHandler->error(msgL); - return; - } - - layout->format(message, event, p); - timeformat.format(timestamp, event->getTimeStamp(), p); - LOG4CXX_ENCODE_CHAR(messageencode, message); - LOG4CXX_ENCODE_CHAR(timestampencode, timestamp); - - int rowcount = target->rowCount(); - target->insertRow(rowcount); - target->setItem(rowcount, 0, new QTableWidgetItem(timestampencode.c_str())); - target->setItem(rowcount, 1, new QTableWidgetItem(event->getLevel()->toString().c_str())); - target->setItem(rowcount, 2, new QTableWidgetItem(messageencode.c_str())); - target->resizeColumnsToContents(); + if ( this->layout == NULL ) { + LOG4CXX_ENCODE_CHAR(nameStr, name); + std::string msg("No Layout set for the appender named [ "); + msg.append(nameStr); + msg.append(" ]."); + + LOG4CXX_DECODE_CHAR(msgL, msg); + errorHandler->error(msgL); + return; + } + + layout->format(message, event, p); + timeformat.format(timestamp, event->getTimeStamp(), p); + LOG4CXX_ENCODE_CHAR(messageencode, message); + LOG4CXX_ENCODE_CHAR(timestampencode, timestamp); + + QColor rowcolor(0xff, 0xff, 0xff, 0xff); + if (log4cxx::Level::getFatal() == event->getLevel()) { + rowcolor.setRgb(0xff, 0x00, 0x22); + } else if (log4cxx::Level::getError() == event->getLevel()) { + rowcolor.setRgb(0xff, 0x00, 0x00); + } else if (log4cxx::Level::getWarn() == event->getLevel()) { + rowcolor.setRgb(0x00, 0xff, 0xff); + } else if (log4cxx::Level::getTrace() == event->getLevel()) { + rowcolor.setRgb(0xee, 0xff, 0xee); + } + + int rowcount = target->rowCount(); + target->insertRow(rowcount); + target->setItem(rowcount, 0, new QTableWidgetItem(timestampencode.c_str())); + target->setItem(rowcount, 1, new QTableWidgetItem(event->getLevel()->toString().c_str())); + target->setItem(rowcount, 2, new QTableWidgetItem(messageencode.c_str())); + target->item(rowcount, 0)->setBackground(rowcolor); + target->item(rowcount, 1)->setBackground(rowcolor); + target->item(rowcount, 2)->setBackground(rowcolor); + target->resizeColumnsToContents(); + + QTimer *timer = new QTimer(target); + timer->setSingleShot(true); + + QObject::connect(timer, &QTimer::timeout, [=]() { + target->scrollToItem(target->item(rowcount, 2), QAbstractItemView::PositionAtTop); + }); + timer->start(10); } void LogDockAppender::setTarget(LogDock *target) {