From 60f7ea0d9a625a03296f64ed61e8161c6fd902d6 Mon Sep 17 00:00:00 2001 From: berrux_dev Date: Tue, 15 Sep 2026 10:37:29 +0200 Subject: [PATCH] Added LogViewer again --- .../Lts/Tools/LogViewer/CMakeLists.txt | 66 ++++ .../Lts/Tools/LogViewer/cmbfilterwidget.h | 31 ++ .../Lts/Tools/LogViewer/datafilterwidget.cpp | 31 ++ .../Lts/Tools/LogViewer/datafilterwidget.h | 33 ++ .../Lts/Tools/LogViewer/datefilterwidget.cpp | 112 ++++++ .../Lts/Tools/LogViewer/datefilterwidget.h | 54 +++ .../Lts/Tools/LogViewer/filterwidget.cpp | 57 ++++ .../Lts/Tools/LogViewer/filterwidget.h | 31 ++ .../Lts/Tools/LogViewer/lefilterwidget.cpp | 29 ++ .../Lts/Tools/LogViewer/lefilterwidget.h | 30 ++ .../Lts/Tools/LogViewer/levelfilterwidget.cpp | 54 +++ .../Lts/Tools/LogViewer/levelfilterwidget.h | 37 ++ .../Tools/LogViewer/locationfilterwidget.cpp | 31 ++ .../Tools/LogViewer/locationfilterwidget.h | 35 ++ .../Tools/LogViewer/loggerfilterwidget.cpp | 56 +++ .../Lts/Tools/LogViewer/loggerfilterwidget.h | 37 ++ .../Lts/Tools/LogViewer/logviewtablemodel.cpp | 259 ++++++++++++++ .../Lts/Tools/LogViewer/logviewtablemodel.h | 84 +++++ .../Lts/Tools/LogViewer/logviewtableview.cpp | 139 ++++++++ .../Lts/Tools/LogViewer/logviewtableview.h | 72 ++++ .../Lts/Tools/LogViewer/main.cpp | 36 ++ .../Lts/Tools/LogViewer/mainwindow.cpp | 318 ++++++++++++++++++ .../Lts/Tools/LogViewer/mainwindow.h | 70 ++++ .../Lts/Tools/LogViewer/sortfiltermodel.cpp | 129 +++++++ .../Lts/Tools/LogViewer/sortfiltermodel.h | 45 +++ .../Tools/LogViewer/ui/datafilterwidget.ui | 31 ++ .../Tools/LogViewer/ui/datefilterwidget.ui | 109 ++++++ .../Tools/LogViewer/ui/levelfilterwidget.ui | 24 ++ .../LogViewer/ui/locationfilterwidget.ui | 31 ++ .../Tools/LogViewer/ui/loggerfilterwidget.ui | 24 ++ .../Lts/Tools/LogViewer/ui/mainwindow.ui | 123 +++++++ 31 files changed, 2218 insertions(+) create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/CMakeLists.txt create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/cmbfilterwidget.h create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/datafilterwidget.cpp create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/datafilterwidget.h create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/datefilterwidget.cpp create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/datefilterwidget.h create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/filterwidget.cpp create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/filterwidget.h create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/lefilterwidget.cpp create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/lefilterwidget.h create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/levelfilterwidget.cpp create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/levelfilterwidget.h create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/locationfilterwidget.cpp create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/locationfilterwidget.h create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/loggerfilterwidget.cpp create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/loggerfilterwidget.h create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/logviewtablemodel.cpp create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/logviewtablemodel.h create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/logviewtableview.cpp create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/logviewtableview.h create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/main.cpp create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/mainwindow.cpp create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/mainwindow.h create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/sortfiltermodel.cpp create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/sortfiltermodel.h create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/datafilterwidget.ui create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/datefilterwidget.ui create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/levelfilterwidget.ui create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/locationfilterwidget.ui create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/loggerfilterwidget.ui create mode 100755 qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/mainwindow.ui diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/CMakeLists.txt new file mode 100755 index 000000000..38b930aa2 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/CMakeLists.txt @@ -0,0 +1,66 @@ +# +# $Id$ +# $HeadURL$ +# $Author$ +# Created by Malte Schroeder, SLSE, 2016-03-03 +# + +# Make ${Qt6_Widgets} optional +if(QT6_GUI_AVAILABLE AND TARGET Qt6::Widgets) + set(Qt6_Widgets ${Qt6_Widgets}) +else() + set(Qt6_Widgets "") +endif() + + +set(CMAKE_AUTOUIC_SEARCH_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/ui) + +SET(logView_SRCS + cmbfilterwidget.h + datafilterwidget.cpp + datafilterwidget.h + datefilterwidget.cpp + datefilterwidget.h + filterwidget.cpp + filterwidget.h + levelfilterwidget.cpp + levelfilterwidget.h + locationfilterwidget.cpp + locationfilterwidget.h + loggerfilterwidget.cpp + loggerfilterwidget.h + logviewtablemodel.cpp + logviewtablemodel.h + logviewtableview.cpp + logviewtableview.h + lefilterwidget.cpp + lefilterwidget.h + main.cpp + mainwindow.cpp + mainwindow.h + sortfiltermodel.cpp + sortfiltermodel.h +) + +NGL_WRAP_UI(logView_SRCS + ui/mainwindow.ui + ui/datafilterwidget.ui + ui/datefilterwidget.ui + ui/levelfilterwidget.ui + ui/locationfilterwidget.ui + ui/loggerfilterwidget.ui +) + +NGL_ADD_EXECUTABLE(TOOLSSV NO_TRANSLATION LogViewer ${logView_SRCS}) + +if(QT6_GUI_AVAILABLE) + NGL_TARGET_LINK_LIBRARIES(LogViewer + ${Qt6_Widgets} + Qt6::Core + nglapplication + nglwidgets + NGLLogger + ) +endif() + +NGL_INSTALL_TARGET(LogViewer) diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/cmbfilterwidget.h b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/cmbfilterwidget.h new file mode 100755 index 000000000..89486f3e3 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/cmbfilterwidget.h @@ -0,0 +1,31 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#pragma once + +#include "filterwidget.h" + +#include + +class CMBFilterWidget : public FilterWidget +{ + Q_OBJECT + +public: + using FilterWidget::FilterWidget; + + virtual void addItems(const QStringList &strList) = 0; + virtual int currentIndex() const = 0; + virtual QString currentText() const = 0; + virtual void clearCMB() = 0; + virtual bool contentInside() const = 0; + +signals: + void cmbTextChanged(const QString &str); +}; diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/datafilterwidget.cpp b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/datafilterwidget.cpp new file mode 100755 index 000000000..d6a52e842 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/datafilterwidget.cpp @@ -0,0 +1,31 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#include "datafilterwidget.h" +#include "ui_datafilterwidget.h" + +DataFilterWidget::DataFilterWidget(QWidget *parent) + : LEFilterWidget(parent) + , m_ui(new Ui::DataFilterWidget) +{ + m_ui->setupUi(this); + m_ui->leFilterData->setFocus(); + + connect(m_ui->leFilterData, &QLineEdit::textChanged, this, &DataFilterWidget::contentTextChanged); +} + +DataFilterWidget::~DataFilterWidget() +{ + delete m_ui; +} + +const QString DataFilterWidget::textContent() const +{ + return m_ui->leFilterData->text(); +} diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/datafilterwidget.h b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/datafilterwidget.h new file mode 100755 index 000000000..29e36cc90 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/datafilterwidget.h @@ -0,0 +1,33 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#pragma once + +#include "lefilterwidget.h" + +#include + +namespace Ui +{ +class DataFilterWidget; +} + +class DataFilterWidget : public LEFilterWidget +{ + Q_OBJECT + +public: + explicit DataFilterWidget(QWidget *parent = nullptr); + ~DataFilterWidget(); + + const QString textContent() const; + +private: + Ui::DataFilterWidget *m_ui; +}; diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/datefilterwidget.cpp b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/datefilterwidget.cpp new file mode 100755 index 000000000..44f63f2e5 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/datefilterwidget.cpp @@ -0,0 +1,112 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#include "datefilterwidget.h" +#include "ui_datefilterwidget.h" + +DateFilterWidget::DateFilterWidget(QWidget *parent) + : FilterWidget(parent) + , m_ui(new Ui::DateFilterWidget) +{ + m_ui->setupUi(this); + + m_ui->dteUp->setDisplayFormat(QLatin1String("dd.MM.yyyy HH:mm:ss")); + m_ui->dteTo->setDisplayFormat(QLatin1String("dd.MM.yyyy HH:mm:ss")); +} + +DateFilterWidget::~DateFilterWidget() +{ + delete m_ui; +} + +QDateTime DateFilterWidget::dtimeUp() const +{ + return m_ui->dteUp->dateTime(); +} + +QDateTime DateFilterWidget::dtimeTo() const +{ + return m_ui->dteTo->dateTime(); +} + +void DateFilterWidget::enableMilliSecs(int state) +{ + if (state == 0) + { + m_ui->dteUp->setDisplayFormat(QLatin1String("dd.MM.yyyy HH:mm:ss")); + m_ui->dteTo->setDisplayFormat(QLatin1String("dd.MM.yyyy HH:mm:ss")); + } + else if (state == 2) + { + m_ui->dteUp->setDisplayFormat(QLatin1String("dd.MM.yyyy HH:mm:ss,zzz")); + m_ui->dteTo->setDisplayFormat(QLatin1String("dd.MM.yyyy HH:mm:ss,zzz")); + } +} + +void DateFilterWidget::enableTime(int state) +{ + if (state == 0) + { + m_ui->dteUp->setDisplayFormat(QLatin1String("dd.MM.yyyy")); + m_ui->dteTo->setDisplayFormat(QLatin1String("dd.MM.yyyy")); + m_ui->chbMilliSecs->setEnabled(false); + m_ui->chbMilliSecs->setChecked(false); + } + else if (state == 2) + { + m_ui->dteUp->setDisplayFormat(QLatin1String("dd.MM.yyyy HH:mm:ss")); + m_ui->dteTo->setDisplayFormat(QLatin1String("dd.MM.yyyy HH:mm:ss")); + m_ui->chbMilliSecs->setEnabled(true); + } +} + +void DateFilterWidget::resetDTEs() +{ + m_ui->dteUp->setDateTime(m_start); + m_ui->dteTo->setDateTime(m_end); + m_ui->chbTime->setChecked(true); + m_ui->chbMilliSecs->setChecked(false); +} + +void DateFilterWidget::setStartDateTimeValue(const QDateTime &dtime) +{ + m_start = dtime.addMSecs(-1); + m_ui->dteUp->setDateTime(m_start); +} + +void DateFilterWidget::setEndDateTimeValue(const QDateTime &dtime) +{ + m_end = dtime.addMSecs(1); + m_ui->dteTo->setDateTime(m_end); +} + + +int DateFilterWidget::height() const +{ + return this->size().height(); +} + +int DateFilterWidget::width() const +{ + return this->size().width(); +} + +bool DateFilterWidget::init() +{ + connect(m_ui->dteUp, &QDateTimeEdit::dateTimeChanged, this, &DateFilterWidget::dateStartFilterChanged); + connect(m_ui->dteTo, &QDateTimeEdit::dateTimeChanged, this, &DateFilterWidget::dateEndFilterChanged); + connect(m_ui->chbMilliSecs, &QCheckBox::stateChanged, this, &DateFilterWidget::enableMilliSecs); + connect(m_ui->chbTime, &QCheckBox::stateChanged, this, &DateFilterWidget::enableTime); + connect(m_ui->pbReset, &QPushButton::clicked, this, &DateFilterWidget::resetDTEs); + + emit setStartDateTime(); + emit setEndDateTime(); + + return true; +} diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/datefilterwidget.h b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/datefilterwidget.h new file mode 100755 index 000000000..b92fbb2aa --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/datefilterwidget.h @@ -0,0 +1,54 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#pragma once + +#include "filterwidget.h" + +#include + +namespace Ui +{ +class DateFilterWidget; +} + +class DateFilterWidget : public FilterWidget +{ + Q_OBJECT + +public: + explicit DateFilterWidget(QWidget *parent = nullptr); + ~DateFilterWidget(); + + QDateTime dtimeUp() const; + QDateTime dtimeTo() const; + int height() const; + int width() const; + bool init(); + +signals: + void dateStartFilterChanged(const QDateTime &dtimeStart); + void dateEndFilterChanged(const QDateTime &dtimeEnd); + void setStartDateTime(); + void setEndDateTime(); + +public slots: + void setStartDateTimeValue(const QDateTime &dtime); + void setEndDateTimeValue(const QDateTime &dtime); + +private slots: + void enableMilliSecs(int state); + void enableTime(int state); + void resetDTEs(); + +private: + Ui::DateFilterWidget *m_ui; + QDateTime m_start; + QDateTime m_end; +}; diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/filterwidget.cpp b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/filterwidget.cpp new file mode 100755 index 000000000..6f8e0709a --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/filterwidget.cpp @@ -0,0 +1,57 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#include "filterwidget.h" +#include +#include + +FilterWidget::FilterWidget(QWidget *parent) + : QWidget(parent) +{ + setWindowFlags(windowFlags() | Qt::Popup); + setMouseTracking(true); +} + +FilterWidget::~FilterWidget() +{ +} + +void FilterWidget::mousePressEvent(QMouseEvent *e) +{ + QWidget::mousePressEvent(e); + if (e->buttons() == Qt::LeftButton) + { + // global coordinate of upper left corner of widget + m_widgetClickCoords = e->pos(); + } +} + +void FilterWidget::mouseMoveEvent(QMouseEvent *e) +{ + if (e->buttons() == Qt::LeftButton && !m_widgetClickCoords.isNull()) + { + m_coords = QWidget::mapToGlobal(e->pos()) - m_widgetClickCoords; + this->move(m_coords); + } + QWidget::mouseMoveEvent(e); +} + +void FilterWidget::mouseReleaseEvent(QMouseEvent *e) +{ + QWidget::mouseReleaseEvent(e); + if (e->buttons() == Qt::LeftButton) + m_widgetClickCoords = QPoint(); +} + +void FilterWidget::keyPressEvent(QKeyEvent *e) +{ + QWidget::keyPressEvent(e); + if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) + this->hide(); +} diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/filterwidget.h b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/filterwidget.h new file mode 100755 index 000000000..7a05c380d --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/filterwidget.h @@ -0,0 +1,31 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#pragma once + +#include +#include + +class FilterWidget : public QWidget +{ + Q_OBJECT + +public: + explicit FilterWidget(QWidget *parent = nullptr); + ~FilterWidget(); + +private: + void mousePressEvent(QMouseEvent *e) override; + void mouseMoveEvent(QMouseEvent *e) override; + void mouseReleaseEvent(QMouseEvent *e) override; + void keyPressEvent(QKeyEvent *e) override; + + QPoint m_coords; + QPoint m_widgetClickCoords; +}; diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/lefilterwidget.cpp b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/lefilterwidget.cpp new file mode 100755 index 000000000..a550221ef --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/lefilterwidget.cpp @@ -0,0 +1,29 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#include "lefilterwidget.h" + +LEFilterWidget::LEFilterWidget(QWidget *parent) + : FilterWidget(parent) +{ +} + +LEFilterWidget::~LEFilterWidget() +{ +} + +int LEFilterWidget::height() const +{ + return this->size().height(); +} + +int LEFilterWidget::width() const +{ + return this->size().width(); +} diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/lefilterwidget.h b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/lefilterwidget.h new file mode 100755 index 000000000..20fa230d4 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/lefilterwidget.h @@ -0,0 +1,30 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#pragma once + +#include "filterwidget.h" + +#include + +class LEFilterWidget : public FilterWidget +{ + Q_OBJECT + +public: + explicit LEFilterWidget(QWidget *parent = nullptr); + ~LEFilterWidget(); + + virtual const QString textContent() const = 0; + virtual int height() const; + virtual int width() const; + +signals: + void contentTextChanged(const QString &str); +}; diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/levelfilterwidget.cpp b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/levelfilterwidget.cpp new file mode 100755 index 000000000..66a4c9083 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/levelfilterwidget.cpp @@ -0,0 +1,54 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#include "levelfilterwidget.h" +#include "ui_levelfilterwidget.h" + +LevelFilterWidget::LevelFilterWidget(QWidget *parent) + : CMBFilterWidget(parent) + , m_ui(new Ui::LevelFilterWidget) +{ + m_ui->setupUi(this); + + connect(m_ui->cmbLevel, &QComboBox::currentTextChanged, this, &LevelFilterWidget::cmbTextChanged); +} + +LevelFilterWidget::~LevelFilterWidget() +{ + delete m_ui; +} + +void LevelFilterWidget::addItems(const QStringList &strList) +{ + m_ui->cmbLevel->addItems(strList); +} + + +int LevelFilterWidget::currentIndex() const +{ + return m_ui->cmbLevel->currentIndex(); +} + + +QString LevelFilterWidget::currentText() const +{ + return m_ui->cmbLevel->currentText(); +} + + +void LevelFilterWidget::clearCMB() +{ + m_ui->cmbLevel->clear(); +} + + +bool LevelFilterWidget::contentInside() const +{ + return (m_ui->cmbLevel->count() > 1); +} diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/levelfilterwidget.h b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/levelfilterwidget.h new file mode 100755 index 000000000..475974780 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/levelfilterwidget.h @@ -0,0 +1,37 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#pragma once + +#include "cmbfilterwidget.h" + +#include + +namespace Ui +{ +class LevelFilterWidget; +} + +class LevelFilterWidget : public CMBFilterWidget +{ + Q_OBJECT + +public: + explicit LevelFilterWidget(QWidget *parent = nullptr); + ~LevelFilterWidget(); + + void addItems(const QStringList &strList); + int currentIndex() const; + QString currentText() const; + void clearCMB(); + bool contentInside() const; + +private: + Ui::LevelFilterWidget *m_ui; +}; diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/locationfilterwidget.cpp b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/locationfilterwidget.cpp new file mode 100755 index 000000000..7c1a4c2f6 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/locationfilterwidget.cpp @@ -0,0 +1,31 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#include "locationfilterwidget.h" +#include "ui_locationfilterwidget.h" + +LocationFilterWidget::LocationFilterWidget(QWidget *parent) + : LEFilterWidget(parent) + , m_ui(new Ui::LocationFilterWidget) +{ + m_ui->setupUi(this); + m_ui->leFilterLocation->setFocus(); + + connect(m_ui->leFilterLocation, &QLineEdit::textChanged, this, &LocationFilterWidget::contentTextChanged); +} + +LocationFilterWidget::~LocationFilterWidget() +{ + delete m_ui; +} + +const QString LocationFilterWidget::textContent() const +{ + return m_ui->leFilterLocation->text(); +} diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/locationfilterwidget.h b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/locationfilterwidget.h new file mode 100755 index 000000000..94d789113 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/locationfilterwidget.h @@ -0,0 +1,35 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#pragma once + +#include "lefilterwidget.h" + +#include +#include +#include + +namespace Ui +{ +class LocationFilterWidget; +} + +class LocationFilterWidget : public LEFilterWidget +{ + Q_OBJECT + +public: + explicit LocationFilterWidget(QWidget *parent = nullptr); + ~LocationFilterWidget(); + + const QString textContent() const; + +private: + Ui::LocationFilterWidget *m_ui; +}; diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/loggerfilterwidget.cpp b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/loggerfilterwidget.cpp new file mode 100755 index 000000000..a6a2d0ac2 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/loggerfilterwidget.cpp @@ -0,0 +1,56 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#include "loggerfilterwidget.h" +#include "ui_loggerfilterwidget.h" + +LoggerFilterWidget::LoggerFilterWidget(QWidget *parent) + : CMBFilterWidget(parent) + , m_ui(new Ui::LoggerFilterWidget) +{ + m_ui->setupUi(this); + + setWindowFlags(windowFlags() | Qt::Popup); + + connect(m_ui->cmbLogger, &QComboBox::currentTextChanged, this, &LoggerFilterWidget::cmbTextChanged); +} + +LoggerFilterWidget::~LoggerFilterWidget() +{ + delete m_ui; +} + +void LoggerFilterWidget::addItems(const QStringList &strList) +{ + m_ui->cmbLogger->clear(); + m_ui->cmbLogger->addItems(strList); +} + +int LoggerFilterWidget::currentIndex() const +{ + return m_ui->cmbLogger->currentIndex(); +} + + +QString LoggerFilterWidget::currentText() const +{ + return m_ui->cmbLogger->currentText(); +} + + +void LoggerFilterWidget::clearCMB() +{ + m_ui->cmbLogger->clear(); +} + + +bool LoggerFilterWidget::contentInside() const +{ + return (m_ui->cmbLogger->count() > 1); +} diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/loggerfilterwidget.h b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/loggerfilterwidget.h new file mode 100755 index 000000000..a8499f479 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/loggerfilterwidget.h @@ -0,0 +1,37 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#pragma once + +#include "cmbfilterwidget.h" + +#include + +namespace Ui +{ +class LoggerFilterWidget; +} + +class LoggerFilterWidget : public CMBFilterWidget +{ + Q_OBJECT + +public: + explicit LoggerFilterWidget(QWidget *parent = nullptr); + ~LoggerFilterWidget(); + + void addItems(const QStringList &strList); + int currentIndex() const; + QString currentText() const; + void clearCMB(); + bool contentInside() const; + +private: + Ui::LoggerFilterWidget *m_ui; +}; diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/logviewtablemodel.cpp b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/logviewtablemodel.cpp new file mode 100755 index 000000000..eee2fed13 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/logviewtablemodel.cpp @@ -0,0 +1,259 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#include "logviewtablemodel.h" +#include +#include + +LogViewTableModel::LogViewTableModel(QObject *parent) + : QAbstractTableModel(parent) + , m_logger(NGL::NGLLoggerBootstrap::getNGLRootLogger().getNGLLogger("LogViewTableModel")) +{ + setStdColors(); +} + +void LogViewTableModel::setData(const QVector &logData) +{ + beginResetModel(); + m_logfile.clear(); + endResetModel(); + + if (logData.isEmpty()) + return; + + beginInsertRows(QModelIndex(), 0, logData.size() - 1); + m_logfile = logData; + endInsertRows(); +} + +void LogViewTableModel::addData(const LogViewTableModel::logInformation &logLine) +{ + beginInsertRows(QModelIndex(), m_logfile.size(), m_logfile.size()); + m_logfile.append(logLine); + endInsertRows(); +} + +bool LogViewTableModel::reset() +{ + beginResetModel(); + m_logfile.clear(); + m_cellColors.level.clear(); + setStdColors(); + endResetModel(); + return true; +} + +void LogViewTableModel::startDateTime() +{ + if (m_logfile.isEmpty()) + return; + const QDateTime dtime = m_logfile.first().date; + emit startTimeSetted(dtime); +} + +void LogViewTableModel::endDateTime() +{ + if (m_logfile.isEmpty()) + return; + const QDateTime dtime = m_logfile.last().date; + emit endTimeSetted(dtime); +} + + +int LogViewTableModel::rowCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent); + return m_logfile.size(); +} + +int LogViewTableModel::columnCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent); + return colLast + 1; +} + +QVariant LogViewTableModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) + return QVariant(); + + if (index.column() == colLevel) + { + switch (role) + { + case Qt::BackgroundRole: // BACKGROUND COLOR + { + const QString logLevel = m_logfile.at(index.row()).level; + QColor col = m_cellColors.level.value(logLevel); + if (col.isValid()) + return col; + return QVariant(); + } + + case Qt::TextColorRole: // TEXT COLOR + { + const QString logLevel = m_logfile.at(index.row()).level; + QColor col = m_fontColors.level.value(logLevel); + if (col.isValid()) + return col; + return QVariant(); + } + } + } + + if (role != Qt::DisplayRole && role != Qt::UserRole) + return QVariant(); + + int row = index.row(); + Columns col = static_cast(index.column()); + switch (col) + { + case colDate: + if (role == Qt::UserRole) + return m_logfile.at(row).date; + return m_logfile.at(row).date.toString(QLatin1String("yyyy-MM-dd hh:mm:ss,zzz")); + + case colLevel: + return m_logfile.at(row).level; + + case colLogger: + return m_logfile.at(row).logger; + + case colData: + return m_logfile.at(row).data; + + case colLocation: + return m_logfile.at(row).location; + } + + return QVariant(); +} + +bool LogViewTableModel::setData(const QModelIndex &index, const QVariant &value, int role) +{ + if (role != Qt::EditRole) + return false; + + int row = index.row(); + Columns col = static_cast(index.column()); + switch (col) + { + case colDate: + m_logfile[row].date = value.toDateTime(); + return true; + + case colLevel: + m_logfile[row].level = value.toString(); + return true; + + case colLogger: + m_logfile[row].logger = value.toString(); + return true; + + case colData: + m_logfile[row].data = value.toString(); + return true; + + case colLocation: + m_logfile[row].location = value.toString(); + return true; + } + return false; +} + +QVariant LogViewTableModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if (orientation == Qt::Horizontal + && role == Qt::DisplayRole) + { + Columns col = static_cast(section); + switch (col) + { + case colDate: + return tr("Date"); + + case colLevel: + return tr("Level"); + + case colLogger: + return tr("Logger"); + + case colData: + return tr("Data"); + + case colLocation: + return tr("Location"); + } + } + return QAbstractTableModel::headerData(section, orientation, role); +} + +int LogViewTableModel::length() const +{ + return m_logfile.length(); +} + +QString LogViewTableModel::itemAt(int row, int index) const +{ + switch (index) + { + case colDate: + return m_logfile.at(row).date.toString(QLatin1String("yyyy-MM-dd hh-mm-ss,zzz")); + + case colLevel: + return m_logfile.at(row).level; + + case colLogger: + return m_logfile.at(row).logger; + + case colData: + return m_logfile.at(row).data; + + case colLocation: + return m_logfile.at(row).location; + + default: + return QString(); + } +} + +void LogViewTableModel::adjustCellColor(const QColor &color, const QString &str) +{ + for (auto iter = m_cellColors.level.constBegin(); iter != m_cellColors.level.constEnd(); ++iter) + { + if (iter.key() == str) + m_cellColors.level.insert(str, color); + } +} + +void LogViewTableModel::adjustFontColor(const QColor &color, const QString &str) +{ + for (auto iter = m_fontColors.level.constBegin(); iter != m_fontColors.level.constEnd(); ++iter) + { + if (iter.key() == str) + m_fontColors.level.insert(str, color); + } +} + +void LogViewTableModel::setStdColors() +{ + m_cellColors.level[QLatin1String("INFO")] = Qt::blue; + m_cellColors.level[QLatin1String("WARN")] = Qt::yellow; + m_cellColors.level[QLatin1String("ERROR")] = Qt::darkRed; + m_cellColors.level[QLatin1String("FATAL")] = Qt::red; + m_cellColors.level[QLatin1String("DEBUG")] = Qt::green; + m_cellColors.level[QLatin1String("TRACE")] = Qt::lightGray; + + m_fontColors.level[QLatin1String("INFO")] = Qt::white; + m_fontColors.level[QLatin1String("WARN")] = Qt::black; + m_fontColors.level[QLatin1String("ERROR")] = Qt::white; + m_fontColors.level[QLatin1String("FATAL")] = Qt::black; + m_fontColors.level[QLatin1String("DEBUG")] = Qt::black; + m_fontColors.level[QLatin1String("TRACE")] = Qt::black; +} diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/logviewtablemodel.h b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/logviewtablemodel.h new file mode 100755 index 000000000..93fb1def0 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/logviewtablemodel.h @@ -0,0 +1,84 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#pragma once + +#include +#include +#include +#include +#include +#include + +class LogViewTableModel : public QAbstractTableModel +{ + Q_OBJECT + +public: + struct logInformation + { + QDateTime date; + QString level; + QString logger; + QString data; + QString location; + }; + + struct logColors + { + QColor date; + QMap level; + QColor logger; + QColor data; + QColor location; + }; + + enum Columns + { + colDate = 0, + colLevel = 1, + colLogger = 2, + colData = 3, + colLocation = 4, + colLast = colLocation + }; + +public: + explicit LogViewTableModel(QObject *parent = nullptr); + + void setData(const QVector &logData); + void addData(const logInformation &logLine); + bool reset(); + + int rowCount(const QModelIndex &parent) const override final; + int columnCount(const QModelIndex &parent) const override final; + QVariant data(const QModelIndex &index, int role) const override final; + bool setData(const QModelIndex &index, const QVariant &value, int role) override final; + QVariant headerData(int section, Qt::Orientation orientation, int role) const override final; + int length() const; + QString itemAt(int row, int index) const; + +signals: + void startTimeSetted(const QDateTime &dtime); + void endTimeSetted(const QDateTime &dtime); + +public slots: + void adjustCellColor(const QColor &color, const QString &str); + void adjustFontColor(const QColor &color, const QString &str); + void startDateTime(); + void endDateTime(); + +private: + void setStdColors(); + + QVector m_logfile; + logColors m_cellColors; + logColors m_fontColors; + NGL::INGLLogger &m_logger; +}; diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/logviewtableview.cpp b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/logviewtableview.cpp new file mode 100755 index 000000000..e5f846396 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/logviewtableview.cpp @@ -0,0 +1,139 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#include "logviewtableview.h" +#include "logviewtablemodel.h" + +#include +#include +#include +#include +#include +#include + +LogViewTableView::LogViewTableView(QWidget *parent) + : QTableView(parent) + , m_contextMenu(new QMenu(this)) + , m_colorMenu(new QMenu(tr("Select Color"), m_contextMenu)) + , m_actionSetCellColor(new QAction(m_colorMenu)) + , m_actionSetFontColor(new QAction(m_colorMenu)) + , m_filterMenu(new QMenu(tr("Select Filter"), m_contextMenu)) + , m_actionFilterDate(nullptr) + , m_actionFilterLevel(nullptr) + , m_actionFilterLogger(nullptr) + , m_actionFilterData(nullptr) + , m_actionFilterLocation(nullptr) + , m_actionResetFilter(nullptr) + , m_coords() + , m_contentAvailable(false) +{ + this->setMouseTracking(true); + + // ---------- COLOR --------- + m_actionSetCellColor = m_colorMenu->addAction(tr("Cell-Color")); + m_actionSetFontColor = m_colorMenu->addAction(tr("Font-Color")); + m_contextMenu->addMenu(m_colorMenu); + + + // ---------- FILTER --------- + m_actionFilterDate = m_filterMenu->addAction(tr("Date")); + m_actionFilterLevel = m_filterMenu->addAction(tr("Level")); + m_actionFilterLogger = m_filterMenu->addAction(tr("Logger")); + m_actionFilterData = m_filterMenu->addAction(tr("Data")); + m_actionFilterLocation = m_filterMenu->addAction(tr("Location")); + m_filterMenu->addSeparator(); + m_actionResetFilter = m_filterMenu->addAction(tr("Reset all filter")); + m_contextMenu->addMenu(m_filterMenu); + + // ICONS + m_actionFilterDate->setIcon(QIcon(QLatin1String("://icons/16x16/dialog-ok-apply.png"))); + m_actionFilterLevel->setIcon(QIcon(QLatin1String("://icons/16x16/dialog-ok-apply.png"))); + m_actionFilterLogger->setIcon(QIcon(QLatin1String("://icons/16x16/dialog-ok-apply.png"))); + m_actionFilterData->setIcon(QIcon(QLatin1String("://icons/16x16/dialog-ok-apply.png"))); + m_actionFilterLocation->setIcon(QIcon(QLatin1String("://icons/16x16/dialog-ok-apply.png"))); + m_actionResetFilter->setIcon(QIcon(QLatin1String("://icons/16x16/edit-undo.png"))); + m_actionFilterDate->setIconVisibleInMenu(false); + m_actionFilterLevel->setIconVisibleInMenu(false); + m_actionFilterLogger->setIconVisibleInMenu(false); + m_actionFilterData->setIconVisibleInMenu(false); + m_actionFilterLocation->setIconVisibleInMenu(false); + m_actionResetFilter->setIconVisibleInMenu(true); + + connect(m_actionSetCellColor, &QAction::triggered, this, &LogViewTableView::setCellColor); + connect(m_actionSetFontColor, &QAction::triggered, this, &LogViewTableView::setFontColor); + connect(m_actionFilterDate, &QAction::triggered, this, &LogViewTableView::dateFilterIsAboutToChange); + connect(m_actionFilterLevel, &QAction::triggered, this, &LogViewTableView::levelFilterIsAboutToChange); + connect(m_actionFilterLogger, &QAction::triggered, this, &LogViewTableView::loggerFilterIsAboutToChange); + connect(m_actionFilterData, &QAction::triggered, this, &LogViewTableView::dataFilterIsAboutToChange); + connect(m_actionResetFilter, &QAction::triggered, this, &LogViewTableView::resetAllFilter); + connect(m_actionFilterLocation, &QAction::triggered, this, &LogViewTableView::locationFilterIsAboutToChange); +} + +LogViewTableView::~LogViewTableView() +{ + delete m_contextMenu; + // all other menus and actions are children of m_contextMenu +} + + +void LogViewTableView::setCellColor() +{ + QColor color = QColorDialog::getColor(Qt::white, this, tr("Select cell color"), QColorDialog::DontUseNativeDialog); + QModelIndex index = indexAt(m_coords); + QString level = index.data().toString(); + emit cellColorIsAboutToChange(color, level); +} + +void LogViewTableView::setFontColor() +{ + QColor color = QColorDialog::getColor(Qt::white, this, tr("Select font color"), QColorDialog::DontUseNativeDialog); + QModelIndex index = indexAt(m_coords); + QString level = index.data().toString(); + emit fontColorIsAboutToChange(color, level); +} + +void LogViewTableView::showActivatedFilter(QVector &filter) +{ + m_actionFilterDate->setIconVisibleInMenu(filter.at(LogViewTableModel::colDate)); + m_actionFilterLevel->setIconVisibleInMenu(filter.at(LogViewTableModel::colLevel)); + m_actionFilterLogger->setIconVisibleInMenu(filter.at(LogViewTableModel::colLogger)); + m_actionFilterData->setIconVisibleInMenu(filter.at(LogViewTableModel::colData)); + m_actionFilterLocation->setIconVisibleInMenu(filter.at(LogViewTableModel::colLocation)); +} + + +void LogViewTableView::mouseReleaseEvent(QMouseEvent *event) +{ + if (QTableView::indexAt(m_coords).column() == LogViewTableModel::colLevel) + enableColorSubMenuActions(true); + else + enableColorSubMenuActions(false); + + if (event->button() == Qt::RightButton + && m_contentAvailable) + { + emit whichFilterAreActivated(); + m_contextMenu->exec(mapToGlobal(m_coords)); + } +} + + +void LogViewTableView::mouseMoveEvent(QMouseEvent *event) +{ + m_coords.setX(event->x()); + m_coords.setY(event->y()); + emit mouseMoved(m_coords); +} + + +void LogViewTableView::enableColorSubMenuActions(bool checkState) +{ + m_actionSetCellColor->setEnabled(checkState); + m_actionSetFontColor->setEnabled(checkState); +} diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/logviewtableview.h b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/logviewtableview.h new file mode 100755 index 000000000..b733f1fbf --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/logviewtableview.h @@ -0,0 +1,72 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#pragma once + +#include +#include + +class QAction; +class QMenu; + +class LogViewTableView : public QTableView +{ + Q_OBJECT + +public: + explicit LogViewTableView(QWidget *parent = nullptr); + ~LogViewTableView(); + + void setContentAvailable(bool state) + { + m_contentAvailable = state; + } + +public slots: + void showActivatedFilter(QVector &filter); + +private slots: + void setCellColor(); + void setFontColor(); + +signals: + void mouseMoved(const QPoint &coords); + void cellColorIsAboutToChange(const QColor &color, const QString &str); + void fontColorIsAboutToChange(const QColor &color, const QString &str); + void dateFilterIsAboutToChange(); + void levelFilterIsAboutToChange(); + void loggerFilterIsAboutToChange(); + void dataFilterIsAboutToChange(); + void locationFilterIsAboutToChange(); + void resetAllFilter(); + void whichFilterAreActivated(); + +private: + void mouseReleaseEvent(QMouseEvent *event) override; + void mouseMoveEvent(QMouseEvent *event) override; + void enableColorSubMenuActions(bool checkState); + + // Color + QMenu *m_contextMenu; + QMenu *m_colorMenu; + QAction *m_actionSetCellColor; + QAction *m_actionSetFontColor; + + // Filter + QMenu *m_filterMenu; + QAction *m_actionFilterDate; + QAction *m_actionFilterLevel; + QAction *m_actionFilterLogger; + QAction *m_actionFilterData; + QAction *m_actionFilterLocation; + QAction *m_actionResetFilter; + + QPoint m_coords; + bool m_contentAvailable; +}; diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/main.cpp b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/main.cpp new file mode 100755 index 000000000..4e6545990 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/main.cpp @@ -0,0 +1,36 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#include "mainwindow.h" +#include +#include + +int main(int argc, char *argv[]) +{ + NGLApplication app(argc, argv); + QCoreApplication::setApplicationName(QLatin1String("LogViewer")); + QCoreApplication::setOrganizationName(QLatin1String("RME")); + + app.createLogger("LogViewer", "log4cxx_logviewer.props"); + NGL::INGLLogger &logger = app.baseLogger(); + + STARTUP_LOG(logger); + + MainWindow w; + w.init(); + w.show(); + + app.setQuitOnLastWindowClosed(true); + + int retval = app.exec(); + + SHUTDOWN_LOG(logger); + + return retval; +} diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/mainwindow.cpp b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/mainwindow.cpp new file mode 100755 index 000000000..4a8f07c61 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/mainwindow.cpp @@ -0,0 +1,318 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#include "mainwindow.h" +#include "cmbfilterwidget.h" +#include "sortfiltermodel.h" +#include "ui_mainwindow.h" + +#include +#include +#include +#include +#include + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) + , m_ui(new Ui::MainWindow) + , m_logfileModel(new LogViewTableModel(this)) + , m_dateFilter(new DateFilterWidget()) + , m_levelFilter(new LevelFilterWidget()) + , m_loggerFilter(new LoggerFilterWidget()) + , m_dataFilter(new DataFilterWidget()) + , m_locationFilter(new LocationFilterWidget()) + , m_filterProxyModel(new SortFilterModel(this)) + , m_logger(NGL::NGLLoggerBootstrap::getNGLRootLogger().getNGLLogger("MainWindow")) + , m_lbItemCount(new QLabel(this)) + , m_lbCoords(new QLabel(this)) +{ + m_ui->setupUi(this); + m_filterProxyModel->setSourceModel(m_logfileModel); + m_ui->tvContent->setModel(m_filterProxyModel); + m_ui->tvContent->resizeColumnsToContents(); + m_ui->tvContent->horizontalHeader()->setStretchLastSection(true); + m_lbItemCount->setText(tr("Items: \t0")); + m_lbCoords->setText(QLatin1String("x: \ty:")); + m_ui->statusBar->addPermanentWidget(m_lbItemCount, 2); + m_ui->statusBar->addPermanentWidget(m_lbCoords, 2); + this->setWindowState(Qt::WindowMaximized); +} + +MainWindow::~MainWindow() +{ + delete m_ui; + delete m_logfileModel; + delete m_filterProxyModel; + delete m_lbItemCount; + delete m_dateFilter; + delete m_levelFilter; + delete m_loggerFilter; + delete m_dataFilter; + delete m_locationFilter; + delete m_lbCoords; +} + +bool MainWindow::init() +{ + connect(m_ui->actionOpen, &QAction::triggered, this, &MainWindow::onActionOpen); + connect(m_ui->actionReset, &QAction::triggered, this, &MainWindow::onActionReset); + connect(m_ui->actionExit, &QAction::triggered, this, &MainWindow::close); + connect(m_ui->tvContent, &LogViewTableView::cellColorIsAboutToChange, m_logfileModel, &LogViewTableModel::adjustCellColor); + connect(m_ui->tvContent, &LogViewTableView::fontColorIsAboutToChange, m_logfileModel, &LogViewTableModel::adjustFontColor); + connect(m_ui->tvContent, &LogViewTableView::mouseMoved, this, &MainWindow::showPosition); + connect(m_dateFilter, &DateFilterWidget::dateStartFilterChanged, m_filterProxyModel, &SortFilterModel::setStartDateFilter); + connect(m_dateFilter, &DateFilterWidget::dateEndFilterChanged, m_filterProxyModel, &SortFilterModel::setEndDateFilter); + connect(m_ui->tvContent, &LogViewTableView::resetAllFilter, this, &MainWindow::onActionResetFilter); + + connect(m_ui->tvContent, &LogViewTableView::whichFilterAreActivated, m_filterProxyModel, &SortFilterModel::figureFilterOut); + connect(m_filterProxyModel, &SortFilterModel::theseFilterAreActivated, m_ui->tvContent, &LogViewTableView::showActivatedFilter); + + connect(m_dateFilter, &DateFilterWidget::setStartDateTime, m_logfileModel, &LogViewTableModel::startDateTime); + connect(m_logfileModel, &LogViewTableModel::startTimeSetted, m_dateFilter, &DateFilterWidget::setStartDateTimeValue); + + connect(m_dateFilter, &DateFilterWidget::setEndDateTime, m_logfileModel, &LogViewTableModel::endDateTime); + connect(m_logfileModel, &LogViewTableModel::endTimeSetted, m_dateFilter, &DateFilterWidget::setEndDateTimeValue); + + connect(m_ui->tvContent, &LogViewTableView::dateFilterIsAboutToChange, this, &MainWindow::setFilterDate); + connect(m_dateFilter, &DateFilterWidget::dateStartFilterChanged, m_ui->tvContent, &LogViewTableView::dateFilterIsAboutToChange); + + connect(m_ui->tvContent, &LogViewTableView::dateFilterIsAboutToChange, this, &MainWindow::setFilterDate); + connect(m_dateFilter, &DateFilterWidget::dateEndFilterChanged, m_ui->tvContent, &LogViewTableView::dateFilterIsAboutToChange); + + connect(m_ui->tvContent, &LogViewTableView::levelFilterIsAboutToChange, this, &MainWindow::setFilterLevel); + connect(m_levelFilter, &LevelFilterWidget::cmbTextChanged, m_ui->tvContent, &LogViewTableView::levelFilterIsAboutToChange); + + connect(m_ui->tvContent, &LogViewTableView::loggerFilterIsAboutToChange, this, &MainWindow::setFilterLogger); + connect(m_loggerFilter, &LoggerFilterWidget::cmbTextChanged, m_ui->tvContent, &LogViewTableView::loggerFilterIsAboutToChange); + + connect(m_ui->tvContent, &LogViewTableView::dataFilterIsAboutToChange, this, &MainWindow::setFilterData); + connect(m_dataFilter, &DataFilterWidget::contentTextChanged, m_ui->tvContent, &LogViewTableView::dataFilterIsAboutToChange); + + connect(m_ui->tvContent, &LogViewTableView::locationFilterIsAboutToChange, this, &MainWindow::setFilterLocation); + connect(m_locationFilter, &LocationFilterWidget::contentTextChanged, m_ui->tvContent, &LogViewTableView::locationFilterIsAboutToChange); + + return true; +} + + +void MainWindow::onActionOpen() +{ + const QString fileName = QFileDialog::getOpenFileName(this, tr("Open Logfile"), QString(), tr("Logfile (*.log) (*.log)")); + QFile file(fileName); + + if (fileName.isEmpty()) + return; + + if (!file.exists() || !file.open(QIODevice::ReadOnly)) + { + file.close(); + return; + } + + QByteArray ba = file.readAll(); + file.close(); + + if (ba.isEmpty()) + { + m_logfileModel->setData(QVector()); + return; + } + + QString str(QString::fromUtf8(ba)); + + const QStringList strLines = str.split(QLatin1Char('\n'), QString::SkipEmptyParts); + for (const QString &tempLines : strLines) + { + const QStringList strWords = tempLines.split(QLatin1Char(' '), QString::SkipEmptyParts); + + LogViewTableModel::logInformation li; + QDateTime firstDate; + + // 2016-04-19 12:27:43,467 INFO zssiwi |#| Programm ist funktionsbereit (TDS-source-product/ZS/ZSSI/ZSSIWI/zssi_wi_Main.cpp:175) + for (int counter = 0; counter < strWords.size(); counter++) + { + if (counter >= 0 && counter <= 1) // 2016-04-19 12:27:43,467 + { + if (firstDate.date().isNull()) + { + if (counter == 0) + firstDate.setDate(QDate::fromString(strWords.at(counter), QLatin1String("yyyy-MM-dd"))); + } + else + { + if (counter == 1) + { + firstDate.setTime(QTime::fromString(strWords.at(counter), QLatin1String("hh:mm:ss,zzz"))); + li.date = firstDate; + } + } + } + else if (counter == 2) // INFO + li.level = strWords.at(counter); + else if (counter == 3) // zssiwi + li.logger = strWords.at(counter); + else // |#| + { + // |#| Programm ist funktionsbereit (TDS-source-product/ZS/ZSSI/ZSSIWI/zssi_wi_Main.cpp:175) + int index = tempLines.indexOf(QLatin1String("|#|"), 0) + 4; + + if (index < 0) + return; + + // Programm ist funktionsbereit (TDS-source-product/ZS/ZSSI/ZSSIWI/zssi_wi_Main.cpp:175) + QString subStrLines = tempLines.mid(index); + int lastOpenBracket = subStrLines.lastIndexOf(QLatin1Char('(')); + + if (lastOpenBracket < 0) + return; + + QString debugStr = subStrLines.left(lastOpenBracket); // Programm ist funktionsbereit + QString fileLine = subStrLines.mid(lastOpenBracket + 1); // (TDS-source-product/ZS/ZSSI/ZSSIWI/zssi_wi_Main.cpp:175) + fileLine = fileLine.mid(0, fileLine.length() - 2); + + li.data = debugStr; + li.location = fileLine; + } + } + m_logfileModel->addData(li); + } + + m_ui->tvContent->setContentAvailable(true); + m_ui->actionReset->setEnabled(true); + m_ui->actionResetFilter->setEnabled(true); + m_ui->actionShowCurrentFilter->setEnabled(true); + m_ui->tvContent->resizeColumnsToContents(); + m_ui->tvContent->horizontalHeader()->setStretchLastSection(true); + m_lbItemCount->setText(tr("Items: \t") + QString::number(m_logfileModel->rowCount(QModelIndex()))); +} + + +void MainWindow::onActionReset() +{ + int result = QMessageBox::critical(this, tr("Reset"), tr("Are you sure to reset the current view?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No); + if (result == QMessageBox::Yes) + { + m_logfileModel->reset(); + m_lbItemCount->setText(tr("Items: \t") + QString::number(m_logfileModel->rowCount(QModelIndex()))); + m_ui->actionReset->setEnabled(false); + m_ui->actionResetFilter->setEnabled(false); + m_ui->actionShowCurrentFilter->setEnabled(false); + m_ui->tvContent->setContentAvailable(false); + } +} + + +void MainWindow::onActionResetFilter() +{ + m_filterProxyModel->resetAllFilter(); + m_lbItemCount->setText(tr("Items: \t") + QString::number(m_logfileModel->rowCount(QModelIndex()))); +} + + +void MainWindow::showPosition(const QPoint &coords) +{ + QString out; + out.append(tr("x: ")); + out.append(QString::number(coords.x())); + out.append(QLatin1String("\ty: ")); + out.append(QString::number(coords.y())); + m_lbCoords->setText(out); +} + + +void MainWindow::setFilterDate() +{ + m_dateFilter->init(); + m_filterProxyModel->setStartDateFilter(m_dateFilter->dtimeUp()); + m_filterProxyModel->setEndDateFilter(m_dateFilter->dtimeTo()); + m_filterProxyModel->setFilterKeyColumn(0); + + m_filterProxyModel->invalidate(); + m_lbItemCount->setText(tr("Items: \t") + QString::number(m_filterProxyModel->rowCount(QModelIndex()))); + + m_dateFilter->move(QCursor::pos() - QPoint(m_dateFilter->width() / 2, m_dateFilter->height() / 2)); + m_dateFilter->show(); +} + + +void MainWindow::setFilterLevel() +{ + if (m_levelFilter->currentIndex() == 0) + m_filterProxyModel->setStringFilter(1, QString()); + else + m_filterProxyModel->setStringFilter(1, m_levelFilter->currentText()); + + m_filterProxyModel->invalidate(); + m_lbItemCount->setText(tr("Items: \t") + QString::number(m_filterProxyModel->rowCount(QModelIndex()))); + + if (!m_levelFilter->contentInside()) + this->loadDataInCMB(1); + + m_levelFilter->move(QCursor::pos() - QPoint(m_levelFilter->width() / 2, m_levelFilter->height() / 2)); + m_levelFilter->show(); +} + + +void MainWindow::setFilterLogger() +{ + if (m_loggerFilter->currentIndex() == 0) + m_filterProxyModel->setStringFilter(2, QString()); + else + m_filterProxyModel->setStringFilter(2, m_loggerFilter->currentText()); + + m_filterProxyModel->invalidate(); + m_lbItemCount->setText(tr("Items: \t") + QString::number(m_filterProxyModel->rowCount(QModelIndex()))); + + if (!m_loggerFilter->contentInside()) + this->loadDataInCMB(2); + + m_loggerFilter->move(QCursor::pos() - QPoint(m_loggerFilter->width() / 2, m_loggerFilter->height() / 2)); + m_loggerFilter->show(); +} + + +void MainWindow::setFilterData() +{ + m_filterProxyModel->setStringFilter(3, m_dataFilter->textContent()); + m_filterProxyModel->invalidate(); + m_lbItemCount->setText(tr("Items: \t") + QString::number(m_filterProxyModel->rowCount(QModelIndex()))); + + m_dataFilter->move(QCursor::pos() - QPoint(m_dataFilter->width() / 2, m_dataFilter->height() / 2)); + m_dataFilter->show(); +} + + +void MainWindow::setFilterLocation() +{ + m_filterProxyModel->setStringFilter(4, m_locationFilter->textContent()); + m_filterProxyModel->invalidate(); + m_lbItemCount->setText(tr("Items: \t") + QString::number(m_filterProxyModel->rowCount(QModelIndex()))); + + m_locationFilter->move(QCursor::pos() - QPoint(m_locationFilter->width() / 2, m_locationFilter->height() / 2)); + m_locationFilter->show(); +} + + +void MainWindow::loadDataInCMB(int column) +{ + QStringList strList; + strList.push_back(QLatin1String("- unfiltered -")); + strList.reserve(m_logfileModel->length()); + for (int i = 0; i < m_logfileModel->length(); i++) + { + const QString val = m_logfileModel->itemAt(i, column); + if (!strList.contains(val)) + strList.push_back(val); + } + + if (column == 1) + m_levelFilter->addItems(strList); + else if (column == 2) + m_loggerFilter->addItems(strList); +} diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/mainwindow.h b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/mainwindow.h new file mode 100755 index 000000000..a93f9b5e7 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/mainwindow.h @@ -0,0 +1,70 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#pragma once + +#include "logviewtablemodel.h" +#include "datefilterwidget.h" +#include "levelfilterwidget.h" +#include "loggerfilterwidget.h" +#include "datafilterwidget.h" +#include "locationfilterwidget.h" + +#include +#include +#include + +namespace Ui +{ +class MainWindow; +} + +class SortFilterModel; +class DateFilterWidget; +class LevelFilterWidget; +class LoggerFilterWidget; +class DataFilterWidget; +class LocationFilterWidget; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = nullptr); + ~MainWindow(); + + bool init(); + +private slots: + void onActionOpen(); + void onActionReset(); + void onActionResetFilter(); + void showPosition(const QPoint &coords); + void setFilterDate(); + void setFilterLevel(); + void setFilterLogger(); + void setFilterData(); + void setFilterLocation(); + +private: + Ui::MainWindow *m_ui; + LogViewTableModel *m_logfileModel; + DateFilterWidget *m_dateFilter; + LevelFilterWidget *m_levelFilter; + LoggerFilterWidget *m_loggerFilter; + DataFilterWidget *m_dataFilter; + LocationFilterWidget *m_locationFilter; + SortFilterModel *m_filterProxyModel; + NGL::INGLLogger &m_logger; + QLabel *m_lbItemCount; + QLabel *m_lbCoords; + + void loadDataInCMB(int column); +}; diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/sortfiltermodel.cpp b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/sortfiltermodel.cpp new file mode 100755 index 000000000..327115fad --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/sortfiltermodel.cpp @@ -0,0 +1,129 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#include "sortfiltermodel.h" +#include "logviewtablemodel.h" + +#include + +void SortFilterModel::setStartDateFilter(const QDateTime &start) +{ + if (m_start == start) + return; + m_start = start; + beginFilterChange(); + endFilterChange(); +} + + +void SortFilterModel::setEndDateFilter(const QDateTime &end) +{ + if (m_end == end) + return; + m_end = end; + beginFilterChange(); + endFilterChange(); +} + +void SortFilterModel::figureFilterOut() +{ + QVector vecOut = activatedStringFilter(); + emit theseFilterAreActivated(vecOut); +} + +void SortFilterModel::resetAllFilter() +{ + m_stringFilter.clear(); + m_start = QDateTime(); + m_end = QDateTime(); + figureFilterOut(); + beginFilterChange(); + endFilterChange(); +} + + +void SortFilterModel::setStringFilter(int col, const QString &filter) +{ + if (col < LogViewTableModel::colDate || col > LogViewTableModel::colLocation) + return; + + if (m_stringFilter.contains(col)) + { + QRegularExpression currentFilter(QRegularExpression::escape(m_stringFilter[col]), QRegularExpression::CaseInsensitiveOption); + if (currentFilter.match(filter).hasMatch()) + return; + else + m_stringFilter.insert(col, filter); + } + else + m_stringFilter.insert(col, filter); +} + + +bool SortFilterModel::stringFilterIsEmpty() const +{ + return (m_stringFilter.isEmpty()); +} + + +QVector SortFilterModel::activatedStringFilter() const +{ + QVector vecOut; + + // Col 0 -> DateFilter + vecOut.push_back(m_start.isValid() && m_end.isValid()); + // StringFilter - Columns prüfen + vecOut.push_back(m_stringFilter.contains(1) && !m_stringFilter.value(1).isEmpty()); + vecOut.push_back(m_stringFilter.contains(2) && !m_stringFilter.value(2).isEmpty()); + vecOut.push_back(m_stringFilter.contains(3)); + vecOut.push_back(m_stringFilter.contains(4)); + + return vecOut; +} + + +bool SortFilterModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const +{ + if (source_left.column() != source_right.column()) + return QSortFilterProxyModel::lessThan(source_left, source_right); + + if (source_left.column() != 0) + return QSortFilterProxyModel::lessThan(source_left, source_right); + + const QDateTime dtLeft = source_left.data(Qt::UserRole).toDateTime(); + const QDateTime dtRight = source_right.data(Qt::UserRole).toDateTime(); + return dtLeft < dtRight; +} + + +bool SortFilterModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const +{ + if (m_start.isValid() && m_end.isValid()) + { + const QModelIndex idx = sourceModel()->index(source_row, 0, source_parent); + const QDateTime dtime = sourceModel()->data(idx, Qt::UserRole).toDateTime(); + if (dtime <= m_start || dtime >= m_end) + return false; + } + + if (m_stringFilter.isEmpty()) + return true; + + for (auto iter = m_stringFilter.constBegin(); iter != m_stringFilter.constEnd(); ++iter) + { + const QString &filterString = iter.value(); + const int filterColumn = iter.key(); + + QModelIndex index = sourceModel()->index(source_row, filterColumn, source_parent); + if (!index.data().toString().contains(filterString)) + return false; + } + + return true; +} diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/sortfiltermodel.h b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/sortfiltermodel.h new file mode 100755 index 000000000..407c8cb0f --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/sortfiltermodel.h @@ -0,0 +1,45 @@ +/* + * @RDE_HEADER@ + * + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Malte Schröder, SLSE, 2016-07-14 + */ + +#pragma once + +#include +#include +#include +#include + +class SortFilterModel final : public QSortFilterProxyModel +{ + Q_OBJECT + +public: + using QSortFilterProxyModel::QSortFilterProxyModel; + + void setStringFilter(int col, const QString &filter); + bool stringFilterIsEmpty() const; + QVector activatedStringFilter() const; + +signals: + void theseFilterAreActivated(QVector &filter); + +public slots: + void setStartDateFilter(const QDateTime &start); + void setEndDateFilter(const QDateTime &end); + void figureFilterOut(); + void resetAllFilter(); + +protected: + bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override final; + bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override final; + +private: + QMap m_stringFilter; + QDateTime m_start; + QDateTime m_end; +}; diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/datafilterwidget.ui b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/datafilterwidget.ui new file mode 100755 index 000000000..f9032349a --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/datafilterwidget.ui @@ -0,0 +1,31 @@ + + + DataFilterWidget + + + + 0 + 0 + 250 + 44 + + + + Filter Data + + + + + + Data: + + + + + + + + + + + diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/datefilterwidget.ui b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/datefilterwidget.ui new file mode 100755 index 000000000..db50e60af --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/datefilterwidget.ui @@ -0,0 +1,109 @@ + + + DateFilterWidget + + + + 0 + 0 + 265 + 170 + + + + Filter Date + + + + + + + + + + 50 + 16777215 + + + + Up: + + + + + + + dd.MM.yy HH:mm:ss + + + true + + + + + + + + 50 + 16777215 + + + + To: + + + + + + + dd.MM.yy HH:mm:ss + + + true + + + + + + + + + + + + + + + + enable time + + + true + + + + + + + enable milliseconds + + + + + + + + + + Reset + + + + + + + + + + + diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/levelfilterwidget.ui b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/levelfilterwidget.ui new file mode 100755 index 000000000..1f9cfd342 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/levelfilterwidget.ui @@ -0,0 +1,24 @@ + + + LevelFilterWidget + + + + 0 + 0 + 250 + 43 + + + + Filter Level + + + + + + + + + + diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/locationfilterwidget.ui b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/locationfilterwidget.ui new file mode 100755 index 000000000..1a5b93b84 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/locationfilterwidget.ui @@ -0,0 +1,31 @@ + + + LocationFilterWidget + + + + 0 + 0 + 250 + 43 + + + + Filter Location + + + + + + Location: + + + + + + + + + + + diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/loggerfilterwidget.ui b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/loggerfilterwidget.ui new file mode 100755 index 000000000..174190655 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/loggerfilterwidget.ui @@ -0,0 +1,24 @@ + + + LoggerFilterWidget + + + + 0 + 0 + 250 + 43 + + + + Filter Logger + + + + + + + + + + diff --git a/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/mainwindow.ui b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/mainwindow.ui new file mode 100755 index 000000000..723a4ec72 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Tools/LogViewer/ui/mainwindow.ui @@ -0,0 +1,123 @@ + + + MainWindow + + + + 0 + 0 + 851 + 601 + + + + LogViewer + + + + + + + QAbstractItemView::DoubleClicked + + + QAbstractItemView::SelectRows + + + true + + + false + + + + + + + + + + 0 + 0 + 851 + 29 + + + + + Fi&le + + + + + + + + + + + :/icons/16x16/document-open.png:/icons/16x16/document-open.png + + + &Open + + + Ctrl+O + + + + + false + + + + :/icons/16x16/edit-undo.png:/icons/16x16/edit-undo.png + + + &Reset + + + Del + + + + + false + + + &Reset filter + + + + + false + + + &Show current filter + + + + + + :/icons/16x16/dialog-close.png:/icons/16x16/dialog-close.png + + + Exit + + + Ctrl+Q + + + + + + LogViewTableView + QTableView +
logviewtableview.h
+
+
+ + + + +
-- 2.54.0