X-Git-Url: http://git.maemo.org/git/?p=dorian;a=blobdiff_plain;f=trace.cpp;h=ee9ee59dcedd32a5abdccd3ef73eb82e1e1595cc;hp=f3a2bef0d09d0c962596fc9b01eb45f12786d3fa;hb=HEAD;hpb=198b9339f119bc261ee0d25a1a66b3b7c73e1226 diff --git a/trace.cpp b/trace.cpp index f3a2bef..ee9ee59 100644 --- a/trace.cpp +++ b/trace.cpp @@ -1,11 +1,11 @@ -#include -#include #include +#include #include "trace.h" int Trace::indent; QtMsgType Trace::level = QtDebugMsg; +QFile Trace::file; Trace::EventName Trace::eventTab[] = { {QEvent::None, "QEvent::None"}, @@ -204,7 +204,6 @@ Trace::EventName Trace::eventTab[] = { {QEvent::UngrabMouse, "QEvent::UngrabMouse"}, {QEvent::GrabKeyboard, "QEvent::GrabKeyboard"}, {QEvent::UngrabKeyboard, "QEvent::UngrabKeyboard"}, - {QEvent::CocoaRequestModal, "QEvent::CocoaRequestModal"}, {QEvent::MacGLClearDrawable, "QEvent::MacGLClearDrawable"}, {QEvent::StateMachineSignal, "QEvent::StateMachineSignal"}, @@ -256,28 +255,41 @@ QString Trace::event(QEvent::Type t) } } -const char *Trace::prefix() +QString Trace::prefix() { - return (QTime::currentTime().toString("hh:mm:ss.zzz ") + - QString(" ").repeated(indent)).toAscii().constData(); + return QTime::currentTime().toString("hh:mm:ss.zzz ") + + QString(" ").repeated(indent); } void Trace::messageHandler(QtMsgType type, const char *msg) { if (type >= Trace::level) { + QtMsgHandler oldHandler = qInstallMsgHandler(0); switch (type) { case QtDebugMsg: - fprintf(stderr, "%s%s\n", prefix(), msg); + qt_message_output(QtDebugMsg, (prefix()+msg).toUtf8().constData()); break; - case QtWarningMsg: - fprintf(stderr, "Warning: %s\n", msg); - break; - case QtCriticalMsg: - fprintf(stderr, "Critical: %s\n", msg); - break; - case QtFatalMsg: - fprintf(stderr, "Fatal: %s\n", msg); - abort(); + default: + qt_message_output(type, msg); + } + qInstallMsgHandler(oldHandler); + if (Trace::file.isOpen()) { + Trace::file.write((prefix() + msg + "\n").toUtf8()); + Trace::file.flush(); } } } + +void Trace::setFileName(const QString &fileName) +{ + Trace::file.close(); + Trace::file.setFileName(fileName); + if (!fileName.isEmpty()) { + (void)Trace::file.open(QIODevice::WriteOnly); + } +} + +QString Trace::fileName() +{ + return Trace::file.fileName(); +}