1
0
forked from BRT/arc
arc/views/log/LogDetailWindow.cpp

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);
}