// JPM 11/04/2017 Added the local window\r
// JPM 08/31/2018 Added the call stack window\r
// JPM Sept./2018 Added the new Models and BIOS handler, a screenshot feature and source code files browsing\r
-// JPM Oct./2018 Added search paths in the settings, breakpoints feature\r
+// JPM Oct./2018 Added search paths in the settings, breakpoints feature, cartdridge view menu\r
+// JPM 11/18/2018 Fix crash with non-debugger mode\r
//\r
\r
// FIXED:\r
#include "debugger/localbrowser.h"\r
#include "debugger/heapallocatorbrowser.h"\r
#include "debugger/callstackbrowser.h"\r
+#include "debugger/CartFilesListWin.h"\r
\r
\r
// According to SebRmv, this header isn't seen on Arch Linux either... :-/\r
NewFunctionBreakpointWin = new NewFnctBreakpointWindow(this);\r
exceptionvectortableBrowseWin = new ExceptionVectorTableBrowserWindow(this);\r
CallStackBrowseWin = new CallStackBrowserWindow(this);\r
+ CartFilesListWin = new CartFilesListWindow(this);\r
\r
mem1BrowseWin = (Memory1BrowserWindow **)calloc(vjs.nbrmemory1browserwindow, sizeof(Memory1BrowserWindow));\r
#ifdef _MSC_VER\r
CallStackBrowseAct->setStatusTip(tr("Shows Call Stack browser window"));\r
connect(CallStackBrowseAct, SIGNAL(triggered()), this, SLOT(ShowCallStackBrowserWin()));\r
\r
+ // Cart files list\r
+ CartFilesListAct = new QAction(QIcon(""), tr("Directory and files"), this);\r
+ CartFilesListAct->setStatusTip(tr("List of the files in the cartdridge's directory"));\r
+ connect(CartFilesListAct, SIGNAL(triggered()), this, SLOT(ShowCartFilesListWin()));\r
+\r
// Memory windows\r
mem1BrowseAct = (QAction **)calloc(vjs.nbrmemory1browserwindow, sizeof(QAction));\r
QSignalMapper *signalMapper = new QSignalMapper(this);\r
fileMenu->addSeparator();\r
fileMenu->addAction(quitAppAct);\r
\r
+ // Alpine and debugger menus\r
if (vjs.hardwareTypeAlpine || vjs.softTypeDebugger)\r
{\r
+ // Create debug & view menu\r
debugMenu = menuBar()->addMenu(tr("&Debug"));\r
+ viewMenu = menuBar()->addMenu(tr("&View"));\r
+\r
+ // Create debugger menu\r
if (vjs.softTypeDebugger)\r
{\r
+ // Cart menu\r
+ viewCartMenu = viewMenu->addMenu(tr("&Cartridge"));\r
+ viewCartMenu->addAction(CartFilesListAct);\r
+#if 0\r
+ viewCartMenu->addSeparator();\r
+ viewCartMenu->addAction(CartStreamsAct);\r
+#endif\r
+\r
+ // Windows menu\r
debugWindowsMenu = debugMenu->addMenu(tr("&Windows"));\r
debugWindowsMenu->addAction(BreakpointsAct);\r
debugWindowExceptionMenu = debugWindowsMenu->addMenu(tr("&Exception"));\r
debugNewBreakpointMenu->addAction(newFunctionBreakpointAct);\r
debugMenu->addAction(deleteAllBreakpointsAct);\r
debugMenu->addAction(disableAllBreakpointsAct);\r
- //debugMenu->addSeparator();\r
- //debugMenu->addAction(DasmAct);\r
+#if 0\r
+ debugMenu->addSeparator();\r
+ debugMenu->addAction(DasmAct);\r
+#endif\r
}\r
else\r
{\r
+ // Create alpine menu\r
debugMenu->addAction(memBrowseAct);\r
debugMenu->addAction(stackBrowseAct);\r
debugMenu->addAction(cpuBrowseAct);\r
\r
WriteLog("GUI: Resetting Jaguar...\n");\r
JaguarReset();\r
- DeleteAllBreakpoints();\r
+ DebuggerReset();\r
DebuggerResetWindows();\r
DACPauseAudioThread(false);\r
}\r
traceStepIntoAct->setDisabled(true);\r
traceStepOverAct->setDisabled(true);\r
restartAct->setDisabled(true);\r
+ BreakpointsWin->RefreshContents();\r
}\r
\r
cpuBrowseWin->UnholdBPM();\r
- BreakpointsWin->RefreshContents();\r
}\r
\r
// Pause/unpause any running/non-running threads...\r
}\r
\r
\r
-//\r
+// Open, or display, the breakpoints list window\r
void MainWin::ShowBreakpointsWin(void)\r
{\r
BreakpointsWin->show();\r
}\r
\r
\r
-//\r
+// Delete all breakpoints\r
void MainWin::DeleteAllBreakpoints(void)\r
{\r
cpuBrowseWin->ResetBPM();\r
}\r
\r
\r
-//\r
+// Disable all breakpoints\r
void MainWin::DisableAllBreakpoints(void)\r
{\r
cpuBrowseWin->DisableBPM();\r
}\r
\r
\r
-//\r
+// Open, or display, the new breakpoint function window\r
void MainWin::ShowNewFunctionBreakpointWin(void)\r
{\r
NewFunctionBreakpointWin->show();\r
}\r
\r
\r
+// \r
+void MainWin::ShowCartFilesListWin(void)\r
+{\r
+ CartFilesListWin->show();\r
+ CartFilesListWin->RefreshContents();\r
+}\r
+\r
+\r
// Step Into trace\r
void MainWin::DebuggerTraceStepInto(void)\r
{\r
size = settings.value("CallStackBrowseWinSize", QSize(400, 400)).toSize();\r
CallStackBrowseWin->resize(size);\r
\r
+ // Cartdridge directory and files\r
+ pos = settings.value("CartFilesListWinPos", QPoint(200, 200)).toPoint();\r
+ CartFilesListWin->move(pos);\r
+ settings.value("CartFilesListWinIsVisible", false).toBool() ? ShowCartFilesListWin() : void();\r
+ size = settings.value("CartFilesListWinSize", QSize(400, 400)).toSize();\r
+ CartFilesListWin->resize(size);\r
+\r
// Breakpoints UI information\r
pos = settings.value("BreakpointsWinPos", QPoint(200, 200)).toPoint();\r
BreakpointsWin->move(pos);\r
settings.setValue("NewFunctionBreakpointWinPos", NewFunctionBreakpointWin->pos());\r
settings.setValue("NewFunctionBreakpointWinIsVisible", NewFunctionBreakpointWin->isVisible());\r
settings.setValue("NewFunctionBreakpointWinSize", NewFunctionBreakpointWin->size());\r
+ settings.setValue("CartFilesListWinPos", CartFilesListWin->pos());\r
+ settings.setValue("CartFilesListWinIsVisible", CartFilesListWin->isVisible());\r
+ settings.setValue("CartFilesListWinSize", CartFilesListWin->size());\r
+\r
for (i = 0; i < vjs.nbrmemory1browserwindow; i++)\r
{\r
sprintf(mem1Name, "mem1BrowseWinPos[%i]", (unsigned int)i);\r
}\r
\r
\r
+// Reset soft debugger\r
+void MainWin::DebuggerReset(void)\r
+{\r
+ if (vjs.softTypeDebugger)\r
+ {\r
+ DeleteAllBreakpoints();\r
+ }\r
+}\r
+\r
+\r
// Reset soft debugger windows\r
void MainWin::DebuggerResetWindows(void)\r
{\r
allWatchBrowseWin->Reset();\r
heapallocatorBrowseWin->Reset();\r
BreakpointsWin->Reset();\r
-\r
+ CartFilesListWin->Reset();\r
//ResetAlpineWindows();\r
}\r
}\r
\r
\r
+// Refresh view windows\r
+void MainWin::ViewRefreshWindows(void)\r
+{\r
+ CartFilesListWin->RefreshContents();\r
+}\r
+\r
+\r
// Refresh soft debugger & alpine debug windows\r
void MainWin::DebuggerRefreshWindows(void)\r
{\r
- size_t i;\r
-\r
if (vjs.softTypeDebugger)\r
{\r
FilesrcListWin->RefreshContents();\r
CallStackBrowseWin->RefreshContents();\r
heapallocatorBrowseWin->RefreshContents();\r
BreakpointsWin->RefreshContents();\r
- for (i = 0; i < vjs.nbrmemory1browserwindow; i++)\r
+ for (size_t i = 0; i < vjs.nbrmemory1browserwindow; i++)\r
{\r
mem1BrowseWin[i]->RefreshContents(i);\r
}\r
\r
AlpineRefreshWindows();\r
+ ViewRefreshWindows();\r
}\r
}\r
\r