Files
seer/src/SeerLogWidget.cpp
T

152 lines
4.0 KiB
C++
Raw Normal View History

2021-09-01 13:58:59 -05:00
#include "SeerLogWidget.h"
#include <QtWidgets/QTextEdit>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QFileDialog>
#include <QtWidgets/QMessageBox>
#include <QtWidgets/QScrollBar>
#include <QtPrintSupport/QPrinter>
#include <QtPrintSupport/QPrintDialog>
#include <QtGui/QFont>
#include <QtCore/QTextStream>
#include <QtCore/QDebug>
2021-09-01 13:58:59 -05:00
SeerLogWidget::SeerLogWidget (QWidget* parent) : QWidget(parent) {
setupUi(this);
// Setup the widgets
QFont font;
font.setFamily("monospace [Consolas]");
font.setFixedPitch(true);
font.setStyleHint(QFont::TypeWriter);
textEdit->setReadOnly(true);
textEdit->setFont(font);
textEdit->setLineWrapMode(QTextEdit::NoWrap); // No wrap
wrapTextCheckBox->setCheckState(Qt::Unchecked); // No wrap
// Connect things.
QObject::connect(clearButton, &QPushButton::clicked, this, &SeerLogWidget::handleClearButton);
QObject::connect(printButton, &QPushButton::clicked, this, &SeerLogWidget::handlePrintButton);
QObject::connect(saveButton, &QPushButton::clicked, this, &SeerLogWidget::handleSaveButton);
QObject::connect(wrapTextCheckBox, &QCheckBox::clicked, this, &SeerLogWidget::handleWrapTextCheckBox);
QObject::connect(enableCheckBox, &QCheckBox::clicked, this, &SeerLogWidget::handleEnableCheckBox);
2021-09-01 13:58:59 -05:00
}
SeerLogWidget::~SeerLogWidget () {
}
void SeerLogWidget::processText (const QString& text) {
// Add text to the end of the document.
2021-09-01 13:58:59 -05:00
textEdit->append(text);
}
bool SeerLogWidget::isLogEnabled () const {
return enableCheckBox->isChecked();
}
void SeerLogWidget::setLogEnabled (bool flag) {
enableCheckBox->setChecked(flag);
}
2022-03-12 17:51:32 -06:00
void SeerLogWidget::moveToEnd () {
// Move to the end and then to the beginning of that line.
QTextCursor cursor = textEdit->textCursor();
textEdit->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor);
textEdit->moveCursor(QTextCursor::StartOfBlock, QTextCursor::MoveAnchor);
textEdit->verticalScrollBar()->setValue(textEdit->verticalScrollBar()->maximum());
}
2021-09-01 13:58:59 -05:00
void SeerLogWidget::handleText (const QString& text) {
2022-03-12 17:51:32 -06:00
// Don't do anything if we're not enabled.
if (isLogEnabled() == false) {
return;
}
// Process the text.
2021-09-01 13:58:59 -05:00
processText(text);
2022-03-12 17:51:32 -06:00
// Move to the end of the document.
moveToEnd();
2021-09-01 13:58:59 -05:00
}
void SeerLogWidget::handleClearButton () {
textEdit->clear();
}
void SeerLogWidget::handlePrintButton () {
QPrinter printer;
QPrintDialog* dlg = new QPrintDialog(&printer, this);
if (dlg->exec() != QDialog::Accepted) {
return;
}
QTextDocument* document = textEdit->document();
document->print(&printer);
}
void SeerLogWidget::handleSaveButton () {
QFileDialog dialog(this, "Seer log file", "./", "Logs (*.log);;Text files (*.txt);;All files (*.*)");
2022-01-20 09:03:39 -06:00
dialog.setOptions(QFileDialog::DontUseNativeDialog);
2021-09-01 13:58:59 -05:00
dialog.setAcceptMode(QFileDialog::AcceptSave);
dialog.setFileMode(QFileDialog::AnyFile);
dialog.setDefaultSuffix("log");
dialog.selectFile("gdboutput.log");
if (dialog.exec() != QDialog::Accepted) {
return;
}
QStringList files = dialog.selectedFiles();
if (files.size() == 0) {
return;
}
if (files.size() > 1) {
QMessageBox::critical(this, tr("Error"), tr("Select only 1 file."));
return;
}
QFile file(files[0]);
if (file.open(QIODevice::ReadWrite)) {
QTextStream stream(&file);
stream << textEdit->toPlainText();
file.flush();
file.close();
}else{
QMessageBox::critical(this, tr("Error"), tr("Cannot save log to file."));
return;
}
}
void SeerLogWidget::handleWrapTextCheckBox () {
if (wrapTextCheckBox->checkState() == Qt::Unchecked) {
textEdit->setLineWrapMode(QTextEdit::NoWrap); // No wrap
}else{
textEdit->setLineWrapMode(QTextEdit::WidgetWidth); // Wrap at end of widget
}
}
void SeerLogWidget::handleEnableCheckBox () {
//qDebug() << "Enabled clicked!";
emit logEnabledChanged(enableCheckBox->isChecked());
}