00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include <util/string.h>
00029
00030 #include "logtreeitem.h"
00031 #include "logtreewidget.h"
00032
00033
00034 #define DATETIME_FMT "MMM dd hh:mm:ss.zzz"
00035
00036
00037 #define COL_TIME LogTreeWidget::TimeColumn
00038 #define COL_TYPE LogTreeWidget::TypeColumn
00039 #define COL_MESG LogTreeWidget::MessageColumn
00040 #define ROLE_TYPE Qt::UserRole
00041
00042
00043
00044 LogTreeItem::LogTreeItem(LogEvent::Severity type, QString message,
00045 QDateTime timestamp)
00046 : QTreeWidgetItem()
00047 {
00048 static quint32 seqnum = 0;
00049
00050
00051 _seqnum = seqnum++;
00052
00053 setTimestamp(timestamp);
00054
00055 setSeverity(type);
00056
00057 setMessage(message);
00058 }
00059
00060
00061 QString
00062 LogTreeItem::toString() const
00063 {
00064 return QString("%1 [%2] %3\n").arg(text(COL_TIME))
00065 .arg(text(COL_TYPE))
00066 .arg(text(COL_MESG).trimmed());
00067 }
00068
00069
00070 void
00071 LogTreeItem::setTimestamp(QDateTime timestamp)
00072 {
00073 QString strtime = timestamp.toString(DATETIME_FMT);
00074 setText(COL_TIME, strtime);
00075 setToolTip(COL_TIME, strtime);
00076 }
00077
00078
00079 void
00080 LogTreeItem::setSeverity(LogEvent::Severity type)
00081 {
00082
00083 if (type == LogEvent::Error) {
00084
00085 for (int i = 0; i < 3; i++) {
00086 setBackgroundColor(i, Qt::red);
00087 setTextColor(i, Qt::white);
00088 }
00089 } else if (type == LogEvent::Warn) {
00090
00091 for (int i = 0; i < 3; i++) {
00092 setBackgroundColor(i, Qt::yellow);
00093 }
00094 }
00095
00096 setTextAlignment(COL_TYPE, Qt::AlignCenter);
00097 setText(COL_TYPE, LogEvent::severityToString(type));
00098 setData(COL_TYPE, ROLE_TYPE, (uint)type);
00099 }
00100
00101
00102 void
00103 LogTreeItem::setMessage(QString message)
00104 {
00105 setText(COL_MESG, message);
00106 setToolTip(COL_MESG, string_wrap(message, 80, " ", "\r\n"));
00107 }
00108
00109
00110 LogEvent::Severity
00111 LogTreeItem::severity() const
00112 {
00113 return (LogEvent::Severity)data(COL_TYPE, ROLE_TYPE).toUInt();
00114 }
00115
00116
00117 QDateTime
00118 LogTreeItem::timestamp() const
00119 {
00120 return QDateTime::fromString(text(COL_TIME), DATETIME_FMT);
00121 }
00122
00123
00124 QString
00125 LogTreeItem::message() const
00126 {
00127 return text(COL_MESG);
00128 }
00129
00130
00131
00132 bool
00133 LogTreeItem::operator<(const QTreeWidgetItem &other) const
00134 {
00135 LogTreeItem *that = (LogTreeItem *)&other;
00136 int sortColumn = (treeWidget() ? treeWidget()->sortColumn() : COL_TIME);
00137
00138 switch (sortColumn) {
00139 case COL_TIME:
00140
00141 return (this->_seqnum < that->_seqnum);
00142 case COL_TYPE:
00143
00144 if (this->severity() == that->severity()) {
00145 return (this->_seqnum < that->_seqnum);
00146 }
00147
00148
00149 return (this->severity() > that->severity());
00150 default:
00151
00152 QString thisMessage = this->message().toLower();
00153 QString thatMessage = that->message().toLower();
00154
00155 if (thisMessage == thatMessage) {
00156 return (this->_seqnum < that->_seqnum);
00157 }
00158 return (thisMessage < thatMessage);
00159 }
00160 return QTreeWidgetItem::operator<(other);
00161 }
00162