introduce widget that shows logs

This commit is contained in:
Bob van der Linden 2022-03-06 14:45:48 +01:00
parent a6afb6be7c
commit 53d3fcb2fd
No known key found for this signature in database
GPG Key ID: EEBE8E3EC4A31364
3 changed files with 113 additions and 0 deletions

View File

@ -30,6 +30,7 @@ set( calamaresui_SOURCES
widgets/ErrorDialog.cpp
widgets/FixedAspectRatioLabel.cpp
widgets/PrettyRadioButton.cpp
widgets/LogWidget.cpp
widgets/TranslationFix.cpp
widgets/WaitingWidget.cpp
${CMAKE_SOURCE_DIR}/3rdparty/waitingspinnerwidget.cpp

View File

@ -0,0 +1,75 @@
#include "LogWidget.h"
#include <QStackedLayout>
#include "utils/Logger.h"
#include <QTextStream>
#include <QThread>
#include <QFile>
namespace Calamares
{
LogThread::LogThread(QObject *parent)
: QThread(parent) {
}
void LogThread::run()
{
auto filePath = Logger::logFile();
qint64 lastPosition = 0;
while (!QThread::currentThread()->isInterruptionRequested()) {
auto filePath = Logger::logFile();
QFile file(filePath);
qint64 fileSize = file.size();
// Check whether the file size has changed since last time
// we read the file.
if (lastPosition != fileSize && file.open(QFile::ReadOnly | QFile::Text)) {
// Start reading at the position we ended up last time we read the file.
file.seek(lastPosition);
QTextStream in(&file);
auto chunk = in.readAll();
qint64 newPosition = in.pos();
lastPosition = newPosition;
onLogChunk(chunk);
}
QThread::msleep(100);
}
}
LogWidget::LogWidget(QWidget *parent)
: QWidget(parent)
, m_text( new QPlainTextEdit )
, m_log_thread( this )
{
auto layout = new QStackedLayout(this);
setLayout(layout);
m_text->setReadOnly(true);
QFont monospaceFont("monospace");
monospaceFont.setStyleHint(QFont::Monospace);
m_text->setFont(monospaceFont);
layout->addWidget(m_text);
connect(&m_log_thread, &LogThread::onLogChunk, this, &LogWidget::handleLogChunk);
m_log_thread.start();
}
void
LogWidget::handleLogChunk(const QString &logChunk)
{
m_text->appendPlainText(logChunk);
m_text->moveCursor(QTextCursor::End);
m_text->ensureCursorVisible();
}
}

View File

@ -0,0 +1,37 @@
#ifndef LIBCALAMARESUI_LOGWIDGET_H
#define LIBCALAMARESUI_LOGWIDGET_H
#include <QWidget>
#include <QPlainTextEdit>
#include <QThread>
namespace Calamares
{
class LogThread : public QThread
{
Q_OBJECT
void run() override;
public:
explicit LogThread(QObject *parent = nullptr);
signals:
void onLogChunk(const QString &logChunk);
};
class LogWidget : public QWidget
{
Q_OBJECT
QPlainTextEdit* m_text;
LogThread m_log_thread;
public:
explicit LogWidget(QWidget *parent = nullptr);
void handleLogChunk(const QString &logChunk);
};
}
#endif // LOGWIDGET_H