]> git.siccegge.de Git - frida/frida.git/blobdiff - src/gui/widgets/LogDockAppender.cxx
Add log widget to lower dock
[frida/frida.git] / src / gui / widgets / LogDockAppender.cxx
diff --git a/src/gui/widgets/LogDockAppender.cxx b/src/gui/widgets/LogDockAppender.cxx
new file mode 100644 (file)
index 0000000..f6419c2
--- /dev/null
@@ -0,0 +1,52 @@
+#include "LogDockAppender.hxx"
+#include "LogDock.hxx"
+
+#include <log4cxx/patternlayout.h>
+
+using namespace log4cxx::helpers;
+
+IMPLEMENT_LOG4CXX_OBJECT(LogDockAppender)
+
+LogDockAppender::LogDockAppender()
+: timeformat("%T") {
+       layout = new PatternLayout("%d{MMM dd yyyy HH:mm:ss,SSS} - %m %n");
+}
+
+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();
+}
+
+void LogDockAppender::setTarget(LogDock *target) {
+       this->target = target;
+}
+
+void LogDockAppender::close() {
+
+}
+
+bool LogDockAppender::requiresLayout() const {
+       return true;
+}