mirror of
https://github.com/epasveer/seer.git
synced 2026-08-29 16:40:42 +08:00
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:
@@ -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.
|
||||
|
||||
@@ -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 ();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user