mirror of
https://github.com/epasveer/seer.git
synced 2026-08-30 00:50:42 +08:00
183 lines
4.9 KiB
C++
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);
|
|
}
|
|
}
|
|
|