Files
seer/src/SeerMessagesDialog.cpp
T

179 lines
4.8 KiB
C++
Raw Normal View History

2023-07-07 20:25:36 -05:00
#include "SeerMessagesDialog.h"
2023-07-04 11:08:33 -05:00
#include <QtWidgets/QTreeWidget>
#include <QtWidgets/QTreeWidgetItem>
2023-07-08 11:35:51 -05:00
#include <QtWidgets/QDialogButtonBox>
2023-07-04 11:08:33 -05:00
#include <QtCore/QTime>
2023-07-07 15:34:04 -05:00
#include <QtCore/QSettings>
2023-07-04 11:08:33 -05:00
#include <QtCore/QDebug>
2023-07-07 20:25:36 -05:00
SeerMessagesDialog::SeerMessagesDialog (QWidget* parent) : QDialog(parent) {
2023-07-04 11:08:33 -05:00
2023-07-08 12:12:13 -05:00
_closePushButton = 0;
_clearPushButton = 0;
2023-07-04 11:08:33 -05:00
// Construct the UI.
setupUi(this);
2023-07-07 20:25:36 -05:00
setWindowIcon(QIcon(":/seer/resources/seergdb_64x64.png"));
setWindowTitle("Seer Execution Messages");
2023-07-04 11:08:33 -05:00
// Setup the widgets.
2023-07-07 20:32:08 -05:00
QString style = "QTreeWidget::item:!selected " // Items in tree widget will have a border.
2023-07-07 14:54:27 -05:00
"{ "
"border: 1px solid gainsboro; "
"border-left: none; "
"border-top: none; "
"}"
"QTreeWidget::item:selected {}";
messageTreeWidget->setRootIsDecorated(false);
messageTreeWidget->setStyleSheet(style);
2023-07-04 11:08:33 -05:00
messageTreeWidget->setSortingEnabled(false);
messageTreeWidget->resizeColumnToContents(0); // timestamp
messageTreeWidget->resizeColumnToContents(1); // message type icon
messageTreeWidget->resizeColumnToContents(2); // message
2023-07-08 11:35:51 -05:00
// Add a "CLEAR" button to the dialog's buttonbox.
2023-07-08 12:12:13 -05:00
// Make sure the CLOSE has the default action still.
2023-07-08 11:35:51 -05:00
QDialogButtonBox* buttonBox = findChild<QDialogButtonBox*>("buttonBox");
2023-07-08 12:12:13 -05:00
2023-07-08 11:35:51 -05:00
if (buttonBox) {
2023-07-08 12:12:13 -05:00
_clearPushButton = buttonBox->addButton("Clear", QDialogButtonBox::ActionRole);
QObject::connect(_clearPushButton, &QPushButton::clicked, this, &SeerMessagesDialog::clearMessages);
_closePushButton = buttonBox->button(QDialogButtonBox::Close);
}
2023-07-08 12:23:42 -05:00
resetDefaultButton();
2023-07-04 11:08:33 -05:00
// Get icons.
2023-07-05 19:08:25 -05:00
_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");
2023-07-04 11:08:33 -05:00
// Connect things.
2023-07-08 11:35:51 -05:00
// Clear messages
clearMessages();
2023-07-07 15:34:04 -05:00
// Restore window settings.
readSettings();
// Hide right away.
2023-07-04 11:08:33 -05:00
hide();
}
2023-07-07 20:25:36 -05:00
SeerMessagesDialog::~SeerMessagesDialog () {
2023-07-04 11:08:33 -05:00
}
2023-07-07 20:25:36 -05:00
void SeerMessagesDialog::addMessage (const QString& message, QMessageBox::Icon messageType) {
2023-07-04 11:08:33 -05:00
2023-07-08 12:28:34 -05:00
// Give this dialog the focus.
//setFocus(Qt::OtherFocusReason);
2023-07-08 12:12:13 -05:00
// Show messages any time a messaged is added.
showMessages();
2023-07-04 11:08:33 -05:00
// 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);
2023-07-04 11:35:02 -05:00
messageTreeWidget->clearSelection();
lastItem->setSelected(true);
2023-07-04 11:08:33 -05:00
}
2023-07-08 12:12:13 -05:00
2023-07-08 12:23:42 -05:00
resetDefaultButton();
2023-07-04 11:08:33 -05:00
}
2023-07-08 11:35:51 -05:00
void SeerMessagesDialog::clearMessages () {
messageTreeWidget->clear();
2023-07-08 12:12:13 -05:00
2023-07-08 12:23:42 -05:00
resetDefaultButton();
2023-07-08 12:12:13 -05:00
}
void SeerMessagesDialog::showMessages () {
// Show the dialog.
show();
2023-07-08 12:23:42 -05:00
resetDefaultButton();
2023-07-08 11:35:51 -05:00
}
void SeerMessagesDialog::writeSettings () {
2023-07-07 15:34:04 -05:00
QSettings settings;
settings.beginGroup("executionmessagesdialog"); {
settings.setValue("size", size());
}settings.endGroup();
}
2023-07-08 11:35:51 -05:00
void SeerMessagesDialog::readSettings () {
2023-07-07 15:34:04 -05:00
QSettings settings;
settings.beginGroup("executionmessagesdialog"); {
resize(settings.value("size", QSize(425, 150)).toSize());
} settings.endGroup();
}
2023-07-07 20:25:36 -05:00
void SeerMessagesDialog::resizeEvent (QResizeEvent* event) {
2023-07-07 15:34:04 -05:00
// Write window settings.
writeSettings();
2023-07-07 20:25:36 -05:00
QDialog::resizeEvent(event);
2023-07-07 15:34:04 -05:00
}
2023-07-08 12:23:42 -05:00
void SeerMessagesDialog::resetDefaultButton () {
if (_clearPushButton) {
_clearPushButton->setDefault(false);
}
if (_closePushButton) {
_closePushButton->setDefault(true);
}
}