From 56c7f41faa8767001379c903d4649878705410fd Mon Sep 17 00:00:00 2001 From: Valentino Orlandi Date: Sun, 4 Feb 2024 21:44:39 +0100 Subject: [PATCH] Added custom list model LogFieldsListModel --- logdoctor/CMakeLists.txt | 2 + .../customs/models/logfields_listmodel.cpp | 92 +++++++++++++++++++ .../customs/models/logfields_listmodel.h | 50 ++++++++++ 3 files changed, 144 insertions(+) create mode 100644 logdoctor/customs/models/logfields_listmodel.cpp create mode 100644 logdoctor/customs/models/logfields_listmodel.h diff --git a/logdoctor/CMakeLists.txt b/logdoctor/CMakeLists.txt index d0679b07..20fd0932 100644 --- a/logdoctor/CMakeLists.txt +++ b/logdoctor/CMakeLists.txt @@ -54,6 +54,8 @@ set(PROJECT_SOURCES globals/global_configs.cpp customs/logfile_treewidgetitem.h + customs/models/logfields_listmodel.h + customs/models/logfields_listmodel.cpp utilities/bwlists.h utilities/bwutils.cpp diff --git a/logdoctor/customs/models/logfields_listmodel.cpp b/logdoctor/customs/models/logfields_listmodel.cpp new file mode 100644 index 00000000..defea9cd --- /dev/null +++ b/logdoctor/customs/models/logfields_listmodel.cpp @@ -0,0 +1,92 @@ + +#include "logfields_listmodel.h" + +#include "modules/shared.h" + +#include "modules/crapview/lib.h" + +#include + + +LogFieldsListModel::LogFieldsListModel( real_data_t&& new_data, QObject* parent ) + : QAbstractListModel{ parent } + , real_data{ std::move(new_data) } + , view_data( this->real_data.size() ) +{ + this->translate(); +} + +void LogFieldsListModel::translate() +{ + if ( this->real_data.empty() ) { + return; + } + + std::transform( this->real_data.cbegin(), this->real_data.cend(), this->view_data.begin(), + [](const data_pair_t& p){ return TR::tr( p.second.c_str() ); } ); +} + +int LogFieldsListModel::rowCount( const QModelIndex& parent ) const +{ + Q_UNUSED(parent) + return this->view_data.count(); +} + +QVariant LogFieldsListModel::data( const QModelIndex& index, int role ) const +{ + if ( !index.isValid() || index.row() >= this->view_data.count() ) { + return QVariant{}; + } + + switch ( role ) { + case Qt::DisplayRole: + return this->view_data.at( index.row() ); + case Qt::UserRole: + return QVariant::fromValue( this->real_data.at( index.row() ).first ); + default: + return QVariant{}; + } +} + + + +DaytimeLogFieldsListModel::DaytimeLogFieldsListModel( QObject* parent ) + : LogFieldsListModel( + { + {LogField::Protocol, FIELDS__PROTOCOL}, + {LogField::Method, FIELDS__METHOD}, + {LogField::Uri, FIELDS__URI}, + {LogField::Query, FIELDS__QUERY}, + {LogField::ResponseCode, FIELDS__RESPONSE_CODE}, + {LogField::UserAgent, FIELDS__USER_AGENT}, + {LogField::Client, FIELDS__CLIENT}, + {LogField::Cookie, FIELDS__COOKIE}, + {LogField::Referrer, FIELDS__REFERRER} + }, + parent ) +{ + +} + + + +RelationslLogFieldsListModel::RelationslLogFieldsListModel( QObject* parent ) + : LogFieldsListModel( + { + {LogField::Protocol, FIELDS__PROTOCOL}, + {LogField::Method, FIELDS__METHOD}, + {LogField::Uri, FIELDS__URI}, + {LogField::Query, FIELDS__QUERY}, + {LogField::ResponseCode, FIELDS__RESPONSE_CODE}, + {LogField::TimeTaken, FIELDS__TIME_TAKEN}, + {LogField::BytesSent, FIELDS__BYTES_SENT}, + {LogField::BytesReceived, FIELDS__BYTES_RECEIVED}, + {LogField::UserAgent, FIELDS__USER_AGENT}, + {LogField::Client, FIELDS__CLIENT}, + {LogField::Cookie, FIELDS__COOKIE}, + {LogField::Referrer, FIELDS__REFERRER} + }, + parent ) +{ + +} diff --git a/logdoctor/customs/models/logfields_listmodel.h b/logdoctor/customs/models/logfields_listmodel.h new file mode 100644 index 00000000..1cf35d85 --- /dev/null +++ b/logdoctor/customs/models/logfields_listmodel.h @@ -0,0 +1,50 @@ +#ifndef LOGDOCTOR__CUSTOMS__LOGFIELDS_LISTMODEL_H +#define LOGDOCTOR__CUSTOMS__LOGFIELDS_LISTMODEL_H + + +#include + +enum class LogField; + + +class LogFieldsListModel : public QAbstractListModel +{ + Q_OBJECT + +protected: + using data_pair_t = std::pair; + using real_data_t = std::vector; + +public: + explicit LogFieldsListModel( real_data_t&& new_data, QObject* parent=nullptr ); + virtual ~LogFieldsListModel() = default; + + void translate(); + + int rowCount( const QModelIndex& parent=QModelIndex() ) const override; + QVariant data( const QModelIndex& index, int role ) const override; + +private: + real_data_t real_data; + QVector view_data; + +}; + + +class DaytimeLogFieldsListModel final : public LogFieldsListModel +{ + Q_OBJECT +public: + DaytimeLogFieldsListModel( QObject* parent=nullptr ); +}; + + +class RelationslLogFieldsListModel final : public LogFieldsListModel +{ + Q_OBJECT +public: + RelationslLogFieldsListModel( QObject* parent=nullptr ); +}; + + +#endif // LOGDOCTOR__CUSTOMS__LOGFIELDS_LISTMODEL_H