Files
seer/src/SeerRunStatusIndicator.cpp
T

94 lines
2.9 KiB
C++
Raw Normal View History

2025-08-26 17:26:05 -05:00
// SPDX-FileCopyrightText: 2021 Ernie Pasveer <epasveer@att.net>
//
// SPDX-License-Identifier: GPL-3.0-or-later
2021-09-01 13:58:59 -05:00
#include "SeerRunStatusIndicator.h"
#include <QtGui/QFontMetrics>
2021-09-01 13:58:59 -05:00
#include <QtWidgets/QApplication>
#include <QtCore/QDebug>
SeerRunStatusIndicator::SeerRunStatusIndicator(QWidget* parent) : QLabel(parent) {
QSize size = fontMetrics().size(Qt::TextSingleLine, "XXXXXXXXXXXXXXXXXX");
setAlignment(Qt::AlignCenter);
setFixedWidth(size.width());
setText("Status");
setStyleSheet("background-color: lightgray; color: black; font-weight: bold;");
2021-09-01 13:58:59 -05:00
}
SeerRunStatusIndicator::~SeerRunStatusIndicator() {
}
void SeerRunStatusIndicator::setRunStatus (SeerRunStatusIndicator::RunStatus status) {
2021-09-01 13:58:59 -05:00
if (status == RunStatus::Idle) {
setText("Session Terminated");
setStyleSheet("background-color: lightgray; color: black; font-weight: bold;");
2025-12-18 13:17:45 +07:00
}else if (status == RunStatus::Stopped) {
setText("Stopped");
setStyleSheet("background-color: red; color: black; font-weight: bold;");
2025-12-18 13:17:45 +07:00
}else if (status == RunStatus::Stop_By_Breakpoint) {
setText("Stop by breakpoint");
setStyleSheet("background-color: yellow; color: black; font-weight: bold;");
2025-12-18 13:17:45 +07:00
}else if (status == RunStatus::Running) {
setText("Running");
setStyleSheet("background-color: green; color: black; font-weight: bold;");
}else{
setText("Unknown");
2025-12-18 13:17:45 +07:00
}
emit statusChanged(status);
2021-09-01 13:58:59 -05:00
}
void SeerRunStatusIndicator::handleText (const QString& text) {
if (text.startsWith("*running,thread-id=\"")) {
// *running,thread-id="all"
// *running,thread-id="2"
setRunStatus(SeerRunStatusIndicator::Running);
2022-02-20 17:51:06 -06:00
}else if (text.startsWith("*stopped")) {
2025-12-18 13:17:45 +07:00
if (text.startsWith("*stopped,reason=\"breakpoint-hit\""))
setRunStatus(SeerRunStatusIndicator::Stop_By_Breakpoint);
else
//^connected,frame={level=\"0\",addr=\"0x00007f48351f80c1\",func=\"read\",args=[],from=\"/lib64/libc.so.6\",arch=\"i386:x86-64\"}"
setRunStatus(SeerRunStatusIndicator::Stopped);
2021-09-01 13:58:59 -05:00
}else if (text.startsWith("=thread-exited")) {
//=thread-exited,id="1",group-id="i1"
setRunStatus(SeerRunStatusIndicator::Stopped);
}else if (text.startsWith("=thread-group-exited")) {
//=thread-group-exited,id="i1"
setRunStatus(SeerRunStatusIndicator::Stopped);
2021-09-01 13:58:59 -05:00
2025-12-18 13:17:45 +07:00
}
else if (text.startsWith("^done,stack")) {
// When finish command is invoked
setRunStatus(SeerRunStatusIndicator::Stopped);
}
else{
2021-09-01 13:58:59 -05:00
// All other text is ignored by this widget.
2025-04-19 10:51:15 -05:00
// qDebug() << text;
2021-09-01 13:58:59 -05:00
}
}
2025-12-18 13:17:45 +07:00
// handle when program stop/ killed
2025-12-18 14:06:28 +07:00
void SeerRunStatusIndicator::handleSessionTerminated() {
setText("Session Terminated");
setStyleSheet("background-color: lightgray; color: black; font-weight: bold;");
2025-12-18 13:17:45 +07:00
// also tell SeerProgressIndicator to stop spinning
2025-12-18 14:06:28 +07:00
setRunStatus(SeerRunStatusIndicator::Idle);
}