Files
seer/src/SeerMessagesDialog.cpp
T
2025-12-16 09:42:08 -06:00

183 lines
4.9 KiB
C++

// SPDX-FileCopyrightText: 2021 Ernie Pasveer <epasveer@att.net>
//
// SPDX-License-Identifier: GPL-3.0-or-later
#include "SeerMessagesDialog.h"
#include <QtWidgets/QTreeWidget>
#include <QtWidgets/QTreeWidgetItem>
#include <QtWidgets/QDialogButtonBox>
#include <QtCore/QTime>
#include <QtCore/QSettings>
#include <QtCore/QDebug>
SeerMessagesDialog::SeerMessagesDialog (QWidget* parent) : QDialog(parent) {
_closePushButton = 0;
_clearPushButton = 0;
// Construct the UI.
setupUi(this);
setWindowIcon(QIcon(":/seer/resources/icons/hicolor/64x64/seergdb.png"));
setWindowTitle("Seer Execution Messages");
// Setup the widgets.
QString style = "QTreeWidget::item:!selected " // Items in tree widget will have a border.
"{ "
"border: 1px solid gainsboro; "
"border-left: none; "
"border-top: none; "
"}"
"QTreeWidget::item:selected {}";
messageTreeWidget->setRootIsDecorated(false);
messageTreeWidget->setStyleSheet(style);
messageTreeWidget->setSortingEnabled(false);
messageTreeWidget->resizeColumnToContents(0); // timestamp
messageTreeWidget->resizeColumnToContents(1); // message type icon
messageTreeWidget->resizeColumnToContents(2); // message
// Add a "CLEAR" button to the dialog's buttonbox.
// Make sure the CLOSE has the default action still.
QDialogButtonBox* buttonBox = findChild<QDialogButtonBox*>("buttonBox");
if (buttonBox) {
_clearPushButton = buttonBox->addButton("Clear", QDialogButtonBox::ActionRole);
QObject::connect(_clearPushButton, &QPushButton::clicked, this, &SeerMessagesDialog::clearMessages);
_closePushButton = buttonBox->button(QDialogButtonBox::Close);
}
resetDefaultButton();
// Get icons.
_informationIcon = QIcon(":/seer/resources/RelaxLightIcons/data-information.svg");
_warningIcon = QIcon(":/seer/resources/RelaxLightIcons/data-warning.svg");
_criticalIcon = QIcon(":/seer/resources/RelaxLightIcons/data-error.svg");
_questionIcon = QIcon(":/seer/resources/RelaxLightIcons/dialog-question.svg");
// Connect things.
// Clear messages
clearMessages();
// Restore window settings.
readSettings();
// Hide right away.
hide();
}
SeerMessagesDialog::~SeerMessagesDialog () {
}
void SeerMessagesDialog::addMessage (const QString& message, QMessageBox::Icon messageType) {
// Give this dialog the focus.
//setFocus(Qt::OtherFocusReason);
// Show messages any time a messaged is added.
showMessages();
// Create an entry with our message.
QTreeWidgetItem* item = new QTreeWidgetItem;
item->setText(0, QTime::currentTime().toString(Qt::TextDate));
switch (messageType) {
case QMessageBox::NoIcon:
item->setIcon(1, _noIcon);
break;
case QMessageBox::Information:
item->setIcon(1, _informationIcon);
break;
case QMessageBox::Warning:
item->setIcon(1, _warningIcon);
break;
case QMessageBox::Critical:
item->setIcon(1, _criticalIcon);
break;
case QMessageBox::Question:
item->setIcon(1, _questionIcon);
break;
default:
item->setIcon(1, _noIcon);
break;
}
item->setText(2, message);
// Insert the entry (at the end).
messageTreeWidget->addTopLevelItem(item);
// Re-adjust column sizes.
messageTreeWidget->resizeColumnToContents(0);
messageTreeWidget->resizeColumnToContents(1);
messageTreeWidget->resizeColumnToContents(2);
// Scroll to the bottom.
QTreeWidgetItem* lastItem = messageTreeWidget->topLevelItem(messageTreeWidget->topLevelItemCount()-1);
if (lastItem) {
messageTreeWidget->scrollToItem(lastItem);
messageTreeWidget->clearSelection();
lastItem->setSelected(true);
}
resetDefaultButton();
}
void SeerMessagesDialog::clearMessages () {
messageTreeWidget->clear();
resetDefaultButton();
}
void SeerMessagesDialog::showMessages () {
// Show the dialog.
show();
resetDefaultButton();
}
void SeerMessagesDialog::writeSettings () {
QSettings settings;
settings.beginGroup("executionmessagesdialog"); {
settings.setValue("size", size());
}settings.endGroup();
}
void SeerMessagesDialog::readSettings () {
QSettings settings;
settings.beginGroup("executionmessagesdialog"); {
resize(settings.value("size", QSize(425, 150)).toSize());
} settings.endGroup();
}
void SeerMessagesDialog::resizeEvent (QResizeEvent* event) {
// Write window settings.
writeSettings();
QDialog::resizeEvent(event);
}
void SeerMessagesDialog::resetDefaultButton () {
if (_clearPushButton) {
_clearPushButton->setDefault(false);
}
if (_closePushButton) {
_closePushButton->setDefault(true);
}
}