Merge pull request #166 from epasveer/157-ux-bug-or-flaw-seer-execution-messages-popup-is-getting-in-the-way-a-lot

Add 'raise mode' to raise message tab depending on message type.
This commit is contained in:
Ernie Pasveer
2023-10-08 10:58:05 -05:00
committed by GitHub
8 changed files with 151 additions and 7 deletions
+12
View File
@@ -137,6 +137,7 @@ SeerGdbWidget::SeerGdbWidget (QWidget* parent) : QWidget(parent) {
// Connect things.
QObject::connect(logsTabWidget->tabBar(), &QTabBar::tabMoved, this, &SeerGdbWidget::handleLogsTabMoved);
QObject::connect(logsTabWidget->tabBar(), &QTabBar::currentChanged, this, &SeerGdbWidget::handleLogsTabChanged);
QObject::connect(_messagesBrowserWidget, &SeerMessagesBrowserWidget::showMessages, this, &SeerGdbWidget::handleRaiseMessageTab);
QObject::connect(manualCommandComboBox->lineEdit(), &QLineEdit::returnPressed, this, &SeerGdbWidget::handleManualCommandExecute);
@@ -706,6 +707,17 @@ void SeerGdbWidget::handleLogsTabChanged (int index) {
writeLogsSettings();
}
void SeerGdbWidget::handleRaiseMessageTab () {
int idx = logsTabWidget->indexOf(_messagesBrowserWidget);
if (idx < 0) {
return;
}
logsTabWidget->setCurrentIndex(idx);
}
void SeerGdbWidget::writeLogsSettings () {
// Write tab order to settings.
+1
View File
@@ -208,6 +208,7 @@ class SeerGdbWidget : public QWidget, protected Ui::SeerGdbWidgetForm {
public slots:
void handleLogsTabMoved (int from, int to);
void handleLogsTabChanged (int index);
void handleRaiseMessageTab ();
void handleText (const QString& text);
void handleManualCommandExecute ();
+83 -7
View File
@@ -1,12 +1,15 @@
#include "SeerMessagesBrowserWidget.h"
#include <QtWidgets/QTreeWidget>
#include <QtWidgets/QTreeWidgetItemIterator>
#include <QtWidgets/QMessageBox>
#include <QtCore/QSettings>
#include <QtCore/QTime>
#include <QtCore/QDebug>
SeerMessagesBrowserWidget::SeerMessagesBrowserWidget (QWidget* parent) : QWidget(parent) {
_raiseMode = "any"; // Default. Raise message tab on any message.
_raiseMenu = 0;
// Construct the UI.
setupUi(this);
@@ -26,6 +29,19 @@ SeerMessagesBrowserWidget::SeerMessagesBrowserWidget (QWidget* parent) : QWidget
messagesTreeWidget->resizeColumnToContents(1); // message type icon
messagesTreeWidget->resizeColumnToContents(2); // message
_raiseMenu = new QMenu("Raise Messages Tab");
QMenu* menu = new QMenu();
menu->addMenu(_raiseMenu);
_anyMessageAction = _raiseMenu->addAction("Any message");
_importanMessagesAction = _raiseMenu->addAction("Important messages");
_neverMessagesAction = _raiseMenu->addAction("Never");
preferencesToolButton->setMenu(menu);
preferencesToolButton->setPopupMode(QToolButton::InstantPopup);
// Get icons.
_informationIcon = QIcon(":/seer/resources/RelaxLightIcons/data-information.svg");
_warningIcon = QIcon(":/seer/resources/RelaxLightIcons/data-warning.svg");
@@ -35,9 +51,14 @@ SeerMessagesBrowserWidget::SeerMessagesBrowserWidget (QWidget* parent) : QWidget
// Connect things.
QObject::connect(deleteMessagesToolButton, &QToolButton::clicked, this, &SeerMessagesBrowserWidget::handleDeleteToolButton);
QObject::connect(_raiseMenu, &QMenu::aboutToShow, this, &SeerMessagesBrowserWidget::handleRaiseMenuShow);
QObject::connect(_raiseMenu, &QMenu::triggered, this, &SeerMessagesBrowserWidget::handleRaiseMenuTriggered);
// Clear messages
clearMessages();
// Read the default settings.
readSettings();
}
SeerMessagesBrowserWidget::~SeerMessagesBrowserWidget () {
@@ -45,12 +66,6 @@ SeerMessagesBrowserWidget::~SeerMessagesBrowserWidget () {
void SeerMessagesBrowserWidget::addMessage (const QString& message, QMessageBox::Icon messageType) {
// Give this dialog the focus.
//setFocus(Qt::OtherFocusReason);
// Show messages any time a messaged is added.
emit showMessages();
// Create an entry with our message.
QTreeWidgetItem* item = new QTreeWidgetItem;
item->setText(0, QTime::currentTime().toString(Qt::TextDate));
@@ -93,6 +108,21 @@ void SeerMessagesBrowserWidget::addMessage (const QString& message, QMessageBox:
messagesTreeWidget->clearSelection();
lastItem->setSelected(true);
}
// Signal that a message was added, depending on the 'raise' mode.
if (_raiseMode == "any") {
emit showMessages();
}else if (_raiseMode == "important") {
if (messageType == QMessageBox::Warning || messageType == QMessageBox::Critical || messageType == QMessageBox::Question) {
emit showMessages();
}else if (message.startsWith("Program started")) {
emit showMessages();
}else if (message.startsWith("Program exited")) {
emit showMessages();
}
}else if (_raiseMode == "never") {
// Do nothing.
}
}
void SeerMessagesBrowserWidget::clearMessages () {
@@ -100,9 +130,55 @@ void SeerMessagesBrowserWidget::clearMessages () {
messagesTreeWidget->clear();
}
void SeerMessagesBrowserWidget::writeSettings () {
QSettings settings;
settings.beginGroup("executionmessages"); {
settings.setValue("raisetabmode", _raiseMode);
}settings.endGroup();
}
void SeerMessagesBrowserWidget::readSettings () {
QSettings settings;
settings.beginGroup("executionmessages"); {
_raiseMode = settings.value("raisetabmode", "any").toString();
} settings.endGroup();
}
void SeerMessagesBrowserWidget::handleDeleteToolButton () {
// Delete all messages.
clearMessages();
}
void SeerMessagesBrowserWidget::handleRaiseMenuShow () {
if (_raiseMode == "any") {
_raiseMenu->setDefaultAction(_anyMessageAction);
}else if (_raiseMode == "important") {
_raiseMenu->setDefaultAction(_importanMessagesAction);
}else if (_raiseMode == "never") {
_raiseMenu->setDefaultAction(_neverMessagesAction);
}else{
_raiseMenu->setDefaultAction(_anyMessageAction);
}
}
void SeerMessagesBrowserWidget::handleRaiseMenuTriggered (QAction* action) {
if (action == _anyMessageAction) {
_raiseMode = "any";
}else if (action == _importanMessagesAction) {
_raiseMode = "important";
}else if (action == _neverMessagesAction) {
_raiseMode = "never";
}else{
_raiseMode = "any";
}
writeSettings();
}
+11
View File
@@ -1,8 +1,10 @@
#pragma once
#include <QtWidgets/QMessageBox>
#include <QtWidgets/QMenu>
#include <QtWidgets/QWidget>
#include <QtGui/QIcon>
#include <QtGui/QAction>
#include <QtCore/QString>
#include "ui_SeerMessagesBrowserWidget.h"
@@ -20,13 +22,22 @@ class SeerMessagesBrowserWidget : public QWidget, protected Ui::SeerMessagesBrow
private slots:
void handleDeleteToolButton ();
void handleRaiseMenuShow ();
void handleRaiseMenuTriggered (QAction* action);
signals:
void showMessages ();
protected:
void writeSettings ();
void readSettings ();
private:
QString _raiseMode;
QMenu* _raiseMenu;
QAction* _anyMessageAction;
QAction* _importanMessagesAction;
QAction* _neverMessagesAction;
QIcon _noIcon;
QIcon _informationIcon;
QIcon _warningIcon;
+14
View File
@@ -57,6 +57,20 @@
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="preferencesToolButton">
<property name="toolTip">
<string>Preferences</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="resource.qrc">
<normaloff>:/seer/resources/RelaxLightIcons/application-menu.svg</normaloff>:/seer/resources/RelaxLightIcons/application-menu.svg</iconset>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
+1
View File
@@ -24,6 +24,7 @@
<file>resources/icons-icons/maximize.png</file>
<file>resources/icons-icons/minimize.png</file>
<file>resources/icons-icons/style.png</file>
<file>resources/RelaxLightIcons/application-menu.svg</file>
<file>resources/RelaxLightIcons/document-new.svg</file>
<file>resources/RelaxLightIcons/document-open.svg</file>
<file>resources/RelaxLightIcons/document-print.svg</file>
@@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<defs id="defs3051">
<style type="text/css" id="current-color-scheme">
.ColorScheme-Text {
color:#232629;
}
</style>
</defs>
<path style="fill:currentColor;fill-opacity:1;stroke:none"
d="M 4 6 L 4 8 L 20 8 L 20 6 L 4 6 z M 4 11 L 4 13 L 20 13 L 20 11 L 4 11 z M 4 16 L 4 18 L 20 18 L 20 16 L 4 16 z "
class="ColorScheme-Text"
/>
</svg>

After

Width:  |  Height:  |  Size: 448 B

@@ -3,6 +3,7 @@
### Introduction
This part of Seer shows Breakpoints, GDB log, and Seer log information. In detailed, the information is:
* Messages
* Breakpoints
* Watchpoints
* Catchpoints
@@ -12,6 +13,21 @@ This part of Seer shows Breakpoints, GDB log, and Seer log information. In detai
* Save and load breakpoints
* Manual GDB commands.
### Messages
Various gdb execution messages are listed in this tab. These occur as you debug the program. The message types are:
* Program startup and completion
* Breakpoint encouters
* Signal encounters
* General gdb errors
The message tab can be raised in various ways when a message is added to the tab:
* Any message
* Important messages (program startup, signal encounters)
* Never
### Breakpoints
Breakpoints sets up a stopping point of the program being debugged when a function and line number is reached.