c2d349ea090d40b432f8419d6ce7b8e35b0ae7fb
2 // callstackbrowser.cpp - Call Stack
6 // JPM = Jean-Paul Mari <djipi.mari@gmail.com>
9 // --- ---------- -----------------------------------------------------------
10 // JPM 08/31/2018 Created this file
11 // JPM 09/12/2018 Added a status bar and better status report
15 // To set the information display at the right
16 // To use DWARF frame information
19 #include "debugger/callstackbrowser.h"
21 #include "debugger/DBGManager.h"
22 #include "m68000/m68kinterface.h"
26 CallStackBrowserWindow::CallStackBrowserWindow(QWidget
* parent
/*= 0*/) : QWidget(parent
, Qt::Dialog
),
28 text(new QTextBrowser
),
30 TableView(new QTableView
),
31 model(new QStandardItemModel
),
33 statusbar(new QStatusBar
),
34 layout(new QVBoxLayout
)
36 setWindowTitle(tr("Call Stack"));
39 QFont
fixedFont("Lucida Console", 8, QFont::Normal
);
40 fixedFont
.setStyleHint(QFont::TypeWriter
);
43 // Set original layout
44 text
->setFont(fixedFont
);
45 layout
->addWidget(text
);
47 // Set the new layout with proper identation and readibility
48 model
->setColumnCount(2);
49 model
->setHeaderData(0, Qt::Horizontal
, QObject::tr("Name"));
50 model
->setHeaderData(1, Qt::Horizontal
, QObject::tr("Line"));
52 TableView
->setModel(model
);
53 TableView
->setEditTriggers(QAbstractItemView::NoEditTriggers
);
54 TableView
->setShowGrid(0);
55 TableView
->setFont(fixedFont
);
56 TableView
->verticalHeader()->setDefaultSectionSize(TableView
->verticalHeader()->minimumSectionSize());
57 TableView
->verticalHeader()->setDefaultAlignment(Qt::AlignRight
);
58 layout
->addWidget(TableView
);
62 layout
->addWidget(statusbar
);
68 CallStackBrowserWindow::~CallStackBrowserWindow(void)
74 void CallStackBrowserWindow::RefreshContents(void)
77 size_t Error
= CS_NOERROR
;
78 unsigned int a6
, Sa6
, ret
;
90 #ifndef CS_LAYOUTTEXTS
91 model
->setRowCount(0);
93 if ((a6
= m68k_get_reg(NULL
, M68K_REG_A6
)) && DBGManager_GetType())
97 a6
= GET32(jaguarMainRAM
, Sa6
);
98 ret
= GET32(jaguarMainRAM
, Sa6
+ 4);
100 sprintf(string
, "0x%06X | Ret: 0x%06X | From: %s - 0x%06X | Line: %s", Sa6
, ret
, (FuncName
= DBGManager_GetFunctionName(ret
)), (unsigned int)DBGManager_GetAdrFromSymbolName(FuncName
), DBGManager_GetLineSrcFromAdr(ret
, DBG_NO_TAG
));
101 CallStack
+= QString(string
);
104 CallStack
+= QString("<br>");
107 model
->insertRow(NbRaw
);
108 model
->setItem(NbRaw
, 0, new QStandardItem(QString("%1").arg((FuncName
= DBGManager_GetFunctionName(ret
)) ? FuncName
: "(null)")));
109 FunctionName
= QString(FuncName
= DBGManager_GetLineSrcFromAdr(ret
, DBG_NO_TAG
));
110 FunctionName
.replace(" ", " ");
111 model
->setItem(NbRaw
++, 1, new QStandardItem(QString("%1").arg(FuncName
? FunctionName
: "(null)")));
114 #ifdef CS_LAYOUTTEXTS
116 text
->setText(CallStack
);
118 sprintf(msg
, "Ready");
123 sprintf(msg
, "Call Stack not available");
124 Error
= CS_NOCALLSTACK
;
125 #ifdef CS_LAYOUTTEXTS
130 // Display status bar
133 if ((Error
& CS_WARNING
))
135 statusbar
->setStyleSheet("background-color: lightyellow; font: bold");
139 statusbar
->setStyleSheet("background-color: tomato; font: bold");
144 statusbar
->setStyleSheet("background-color: lightgreen; font: bold");
146 statusbar
->showMessage(QString(msg
));
152 void CallStackBrowserWindow::keyPressEvent(QKeyEvent
* e
)
154 if (e
->key() == Qt::Key_Escape
)