File indexing completed on 2024-05-05 05:48:56
0001 /* 0002 SPDX-FileCopyrightText: 2007 Nicolas Ternisien <nicolas.ternisien@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "logLine.h" 0008 0009 #include "logMode.h" 0010 #include "logModeItemBuilder.h" 0011 #include "logViewWidgetItem.h" 0012 0013 #include "ksystemlogConfig.h" 0014 #include "ksystemlog_debug.h" 0015 0016 LogLine::LogLine(long internalId, const QDateTime &dateTime, const QStringList &logItems, const QString &file, LogLevel *logLevel, LogMode *logMode) 0017 { 0018 mInternalId = internalId; 0019 mTime = dateTime; 0020 mLogItems = logItems; 0021 mOriginalFile = file; 0022 mLogLevel = logLevel; 0023 mLogMode = logMode; 0024 0025 // By default in newly created item has the recent state 0026 setRecent(true); 0027 } 0028 0029 LogLine::~LogLine() 0030 { 0031 // logLevel is managed by Globals 0032 0033 // item is managed by LogMode 0034 // itemBuilder is managed by LogMode 0035 } 0036 0037 LogMode *LogLine::logMode() const 0038 { 0039 return mLogMode; 0040 } 0041 0042 void LogLine::setLogMode(LogMode *logMode) 0043 { 0044 mLogMode = logMode; 0045 } 0046 0047 bool LogLine::equals(const LogLine &other) const 0048 { 0049 if (logMode()->id() != other.logMode()->id()) { 0050 return false; 0051 } 0052 0053 if (time() != other.time()) { 0054 return false; 0055 } 0056 0057 if (logLevel()->id() != other.logLevel()->id()) { 0058 return false; 0059 } 0060 0061 if (mLogItems != other.mLogItems) { 0062 return false; 0063 } 0064 0065 return true; 0066 } 0067 0068 LogLevel *LogLine::logLevel() const 0069 { 0070 return mLogLevel; 0071 } 0072 0073 void LogLine::setLogLevel(LogLevel *level) 0074 { 0075 mLogLevel = level; 0076 } 0077 0078 QDateTime LogLine::time() const 0079 { 0080 return mTime; 0081 } 0082 0083 void LogLine::setLogItems(const QStringList &logItems) 0084 { 0085 mLogItems = logItems; 0086 } 0087 0088 QStringList LogLine::logItems() const 0089 { 0090 return mLogItems; 0091 } 0092 0093 QString LogLine::sourceFileName() const 0094 { 0095 return mOriginalFile; 0096 } 0097 0098 bool LogLine::isOlderThan(const LogLine &other) const 0099 { 0100 if (mTime == other.time()) { 0101 return mInternalId < other.internalId(); 0102 } 0103 0104 return mTime < other.time(); 0105 } 0106 0107 bool LogLine::isNewerThan(const LogLine &other) const 0108 { 0109 if (mTime == other.time()) { 0110 return mInternalId > other.internalId(); 0111 } 0112 0113 return mTime > other.time(); 0114 } 0115 0116 bool LogLine::isSameTime(const LogLine &other) const 0117 { 0118 return mTime == other.time(); 0119 } 0120 0121 long LogLine::internalId() const 0122 { 0123 return mInternalId; 0124 } 0125 0126 void LogLine::setRecent(bool recent) 0127 { 0128 mRecent = recent; 0129 0130 if (mItem) { 0131 QFont currentFont = mItem->font(mItem->columnCount() - 1); 0132 0133 // We avoid doing the same process 0134 if (mRecent != currentFont.bold()) { 0135 currentFont.setBold(recent); 0136 mItem->setFont(mItem->columnCount() - 1, currentFont); 0137 } 0138 } 0139 } 0140 0141 QString LogLine::exportToText() const 0142 { 0143 QString exporting; 0144 0145 if (!mItem) { 0146 qCCritical(KSYSTEMLOG) << "Trying to export text from NULL item"; 0147 return exporting; 0148 } 0149 0150 for (int i = 0; i < mItem->columnCount(); ++i) { 0151 if (i > 0) { 0152 exporting.append(QLatin1Char('\t')); 0153 } 0154 0155 exporting.append(mItem->text(i)); 0156 } 0157 0158 return exporting; 0159 } 0160 0161 QString LogLine::formattedText() 0162 { 0163 return mLogMode->itemBuilder()->createFormattedText(this); 0164 } 0165 0166 void LogLine::setItem(LogViewWidgetItem *item) 0167 { 0168 mItem = item; 0169 0170 initializeItem(); 0171 } 0172 0173 void LogLine::initializeItem() 0174 { 0175 mLogMode->itemBuilder()->prepareItem(mItem); 0176 0177 // Call methods that change the look of the item 0178 setRecent(mRecent); 0179 0180 if (KSystemLogConfig::colorizeLogLines()) { 0181 // Last column index = logItems.count() = (logItems.count() -1) +1 (the date column) 0182 mItem->setForeground(mLogItems.count(), QBrush(mLogLevel->color())); 0183 } 0184 0185 mItem->toggleToolTip(KSystemLogConfig::tooltipEnabled()); 0186 }