diff --git a/src/blackgui/models/listmodelbase.cpp b/src/blackgui/models/listmodelbase.cpp index aa6570158..2e7d03c6c 100644 --- a/src/blackgui/models/listmodelbase.cpp +++ b/src/blackgui/models/listmodelbase.cpp @@ -623,7 +623,7 @@ namespace BlackGui // http://www.parashift.com/c++-faq/separate-template-class-defn-from-decl.html template class CListModelBase; template class CListModelBase; - template class CListModelBase; + template class CListModelBase; template class CListModelBase; template class CListModelBase; template class CListModelBase; diff --git a/src/blackgui/models/statusmessagelistmodel.cpp b/src/blackgui/models/statusmessagelistmodel.cpp index 37cc6f662..b86ce4a56 100644 --- a/src/blackgui/models/statusmessagelistmodel.cpp +++ b/src/blackgui/models/statusmessagelistmodel.cpp @@ -21,7 +21,7 @@ namespace BlackGui namespace Models { CStatusMessageListModel::CStatusMessageListModel(QObject *parent) : - CListModelBase("ViewStatusMessageList", parent) + CListModelBase("ViewStatusMessageList", parent) { setMode(Detailed); @@ -41,7 +41,7 @@ namespace BlackGui case Detailed: { this->m_columns.addColumn(CColumn("time", CStatusMessage::IndexUtcTimestamp, new CDateTimeFormatter(CDateTimeFormatter::formatHms()))); - this->m_columns.addColumn(CColumn::standardString("category", CStatusMessage::IndexCategoryHumanReadable)); + this->m_columns.addColumn(CColumn::standardString("category", CStatusMessage::IndexCategoryHumanReadableOrTechnicalAsString)); CColumn col = CColumn("severity", CStatusMessage::IndexIcon); col.setSortPropertyIndex(CStatusMessage::IndexSeverityAsString); this->m_columns.addColumn(col); diff --git a/src/blackgui/models/statusmessagelistmodel.h b/src/blackgui/models/statusmessagelistmodel.h index f8cc04013..eb2bd438e 100644 --- a/src/blackgui/models/statusmessagelistmodel.h +++ b/src/blackgui/models/statusmessagelistmodel.h @@ -25,9 +25,8 @@ namespace BlackGui /*! * Server list model */ - class BLACKGUI_EXPORT CStatusMessageListModel : public CListModelBase + class BLACKGUI_EXPORT CStatusMessageListModel : public CListModelBase { - public: //! Mode enum Mode diff --git a/src/blackmisc/statusmessage.cpp b/src/blackmisc/statusmessage.cpp index 20bb01d35..d5095f9b0 100644 --- a/src/blackmisc/statusmessage.cpp +++ b/src/blackmisc/statusmessage.cpp @@ -14,6 +14,7 @@ #include "iconlist.h" #include "loghandler.h" #include "logmessage.h" +#include "comparefunctions.h" #include namespace BlackMisc @@ -39,19 +40,19 @@ namespace BlackMisc } CStatusMessage::CStatusMessage(const QString &message) - : m_message(message) + : m_message(message.trimmed()) {} CStatusMessage::CStatusMessage(StatusSeverity severity, const QString &message) - : m_severity(severity), m_message(message) + : m_severity(severity), m_message(message.trimmed()) {} CStatusMessage::CStatusMessage(const CLogCategoryList &categories, StatusSeverity severity, const QString &message) - : m_categories(categories), m_severity(severity), m_message(message) + : m_categories(categories), m_severity(severity), m_message(message.trimmed()) {} CStatusMessage::CStatusMessage(QtMsgType type, const QMessageLogContext &context, const QString &message) - : CStatusMessage(message) + : CStatusMessage(message.trimmed()) { bool debug = CLogMessageHelper::hasDebugFlag(context.category); auto categories = CLogMessageHelper::stripFlags(context.category); @@ -113,6 +114,11 @@ namespace BlackMisc } } + QString CStatusMessage::getCategoriesAsString() const + { + return this->m_categories.toQString(); + } + QString CStatusMessage::getHumanReadablePattern() const { QStringList patternNames(getHumanReadablePatterns()); @@ -129,6 +135,13 @@ namespace BlackMisc return patternNames; } + QString CStatusMessage::getHumanOrTechnicalCategoriesAsString() const + { + if (this->m_categories.isEmpty()) { return ""; } + QString c(getHumanReadablePattern()); + return c.isEmpty() ? this->getCategoriesAsString() : c; + } + void CStatusMessage::prependMessage(const QString &msg) { if (msg.isEmpty()) { return; } @@ -303,10 +316,12 @@ namespace BlackMisc return CVariant::from(this->m_severity); case IndexSeverityAsString: return CVariant::from(this->getSeverityAsString()); - case IndexCategories: + case IndexCategoriesAsString: return CVariant::from(this->m_categories.toQString()); - case IndexCategoryHumanReadable: + case IndexCategoriesHumanReadableAsString: return CVariant::from(this->getHumanReadablePattern()); + case IndexCategoryHumanReadableOrTechnicalAsString: + return CVariant::from(this->getHumanOrTechnicalCategoriesAsString()); default: return CValueObject::propertyByIndex(index); } @@ -325,7 +340,7 @@ namespace BlackMisc case IndexSeverity: this->m_severity = variant.value(); break; - case IndexCategories: + case IndexCategoriesAsString: this->m_categories = variant.value(); break; default: @@ -334,6 +349,32 @@ namespace BlackMisc } } + int CStatusMessage::comparePropertyByIndex(const CStatusMessage &compareValue, const CPropertyIndex &index) const + { + if (index.isMyself()) { return Compare::compare(this->getSeverity(), compareValue.getSeverity()); } + if (ITimestampBased::canHandleIndex(index)) { return ITimestampBased::comparePropertyByIndex(compareValue, index); } + ColumnIndex i = index.frontCasted(); + switch (i) + { + case IndexMessage: + return this->getMessage().compare(compareValue.getMessage()); + case IndexSeverity: + return Compare::compare(this->getSeverity(), compareValue.getSeverity()); + case IndexSeverityAsString: + return this->getSeverityAsString().compare(compareValue.getSeverityAsString()); + case IndexCategoriesAsString: + return this->getCategoriesAsString().compare(compareValue.getCategoriesAsString()); + case IndexCategoriesHumanReadableAsString: + return this->getHumanReadablePattern().compare(compareValue.getHumanReadablePattern()); + case IndexCategoryHumanReadableOrTechnicalAsString: + return this->getHumanOrTechnicalCategoriesAsString().compare(compareValue.getHumanOrTechnicalCategoriesAsString()); + default: + break; + } + Q_ASSERT_X(false, Q_FUNC_INFO, "Comapre failed"); + return 0; + } + QString CStatusMessage::toHtml() const { QString html; diff --git a/src/blackmisc/statusmessage.h b/src/blackmisc/statusmessage.h index e7b78877b..3b5f72e00 100644 --- a/src/blackmisc/statusmessage.h +++ b/src/blackmisc/statusmessage.h @@ -43,8 +43,9 @@ namespace BlackMisc //! Properties by index enum ColumnIndex { - IndexCategories = BlackMisc::CPropertyIndex::GlobalIndexCStatusMessage, - IndexCategoryHumanReadable, + IndexCategoriesAsString = BlackMisc::CPropertyIndex::GlobalIndexCStatusMessage, + IndexCategoriesHumanReadableAsString, + IndexCategoryHumanReadableOrTechnicalAsString, IndexSeverity, IndexSeverityAsString, IndexMessage @@ -82,15 +83,21 @@ namespace BlackMisc //! If message is empty then do nothing, otherwise throw a CStatusException. void maybeThrow() const; - //! Message category + //! Message categories const CLogCategoryList &getCategories() const { return this->m_categories; } + //! Message categories as string + QString getCategoriesAsString() const; + //! Human readable category QString getHumanReadablePattern() const; //! All human readable categories QStringList getHumanReadablePatterns() const; + //! The human or technical categories + QString getHumanOrTechnicalCategoriesAsString() const; + //! Message severity StatusSeverity getSeverity() const { return this->m_severity; } @@ -165,6 +172,9 @@ namespace BlackMisc //! \copydoc CValueObject::setPropertyByIndex void setPropertyByIndex(const CVariant &variant, const BlackMisc::CPropertyIndex &index); + //! Compare for index + int comparePropertyByIndex(const CStatusMessage &compareValue, const CPropertyIndex &index) const; + //! To HTML QString toHtml() const;