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