96 lines
3.3 KiB
C++
96 lines
3.3 KiB
C++
#include "LogDetailWindow.h"
|
|
|
|
#include <QVBoxLayout>
|
|
#include <QHBoxLayout>
|
|
#include <QLabel>
|
|
#include <QTextEdit>
|
|
#include <QPushButton>
|
|
#include <QClipboard>
|
|
#include <QApplication>
|
|
#include <QPixmap>
|
|
#include <QScrollArea>
|
|
|
|
LogDetailWindow::LogDetailWindow(const GeneralLogEntry &entry, QWidget *parent)
|
|
: QDialog(parent) {
|
|
setWindowTitle("Лог #" + QString::number(entry.id));
|
|
resize(700, 500);
|
|
|
|
auto *layout = new QVBoxLayout(this);
|
|
|
|
// Заголовок
|
|
auto *headerLayout = new QHBoxLayout;
|
|
auto *idLabel = new QLabel("<b>#" + QString::number(entry.id) + "</b>");
|
|
headerLayout->addWidget(idLabel);
|
|
|
|
auto *levelLabel = new QLabel(entry.level);
|
|
if (entry.level == "WARNING")
|
|
levelLabel->setStyleSheet("color: orange; font-weight: bold;");
|
|
else if (entry.level == "CRITICAL" || entry.level == "FATAL")
|
|
levelLabel->setStyleSheet("color: red; font-weight: bold;");
|
|
else
|
|
levelLabel->setStyleSheet("color: gray;");
|
|
headerLayout->addWidget(levelLabel);
|
|
|
|
auto *timeLabel = new QLabel(entry.timestamp.toLocalTime().toString("dd.MM.yyyy HH:mm:ss"));
|
|
timeLabel->setStyleSheet("color: gray;");
|
|
headerLayout->addWidget(timeLabel);
|
|
headerLayout->addStretch();
|
|
layout->addLayout(headerLayout);
|
|
|
|
// Источник
|
|
auto *sourceLabel = new QLabel("<b>Источник:</b> " + entry.source);
|
|
sourceLabel->setWordWrap(true);
|
|
sourceLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
|
layout->addWidget(sourceLabel);
|
|
|
|
// Сообщение
|
|
layout->addWidget(new QLabel("<b>Сообщение:</b>"));
|
|
auto *messageEdit = new QTextEdit;
|
|
messageEdit->setPlainText(entry.message);
|
|
messageEdit->setReadOnly(true);
|
|
layout->addWidget(messageEdit, 1);
|
|
|
|
// Скриншот
|
|
if (!entry.screenshot.isEmpty()) {
|
|
QPixmap pixmap;
|
|
pixmap.loadFromData(entry.screenshot);
|
|
if (!pixmap.isNull()) {
|
|
layout->addWidget(new QLabel("<b>Скриншот:</b>"));
|
|
auto *imgLabel = new QLabel;
|
|
imgLabel->setPixmap(pixmap.scaledToWidth(
|
|
qMin(pixmap.width(), 600), Qt::SmoothTransformation));
|
|
imgLabel->setAlignment(Qt::AlignCenter);
|
|
|
|
auto *scrollArea = new QScrollArea;
|
|
scrollArea->setWidget(imgLabel);
|
|
scrollArea->setWidgetResizable(false);
|
|
scrollArea->setMaximumHeight(300);
|
|
layout->addWidget(scrollArea);
|
|
}
|
|
}
|
|
|
|
// Кнопки
|
|
auto *btnLayout = new QHBoxLayout;
|
|
|
|
auto *copyBtn = new QPushButton("Копировать");
|
|
copyBtn->setStyleSheet("background-color: #1565C0; color: white; padding: 4px 16px;");
|
|
connect(copyBtn, &QPushButton::clicked, this, [entry]() {
|
|
const QString text = QString("ID: %1\nУровень: %2\nВремя: %3\nИсточник: %4\nСообщение: %5")
|
|
.arg(entry.id)
|
|
.arg(entry.level)
|
|
.arg(entry.timestamp.toLocalTime().toString("dd.MM.yyyy HH:mm:ss"))
|
|
.arg(entry.source)
|
|
.arg(entry.message);
|
|
QApplication::clipboard()->setText(text);
|
|
});
|
|
btnLayout->addWidget(copyBtn);
|
|
|
|
btnLayout->addStretch();
|
|
|
|
auto *closeBtn = new QPushButton("Закрыть");
|
|
connect(closeBtn, &QPushButton::clicked, this, &QDialog::close);
|
|
btnLayout->addWidget(closeBtn);
|
|
|
|
layout->addLayout(btnLayout);
|
|
}
|