// JPM 09/02/2017 Save size windows in the settings
// JPM 09/05/2017 Added Exception Vector Table window
// JPM 09/06/2017 Added the 'Rx' word to the emulator window name
-
+// JPM 09/12/2017 Added the keybindings in the settings
//
// FIXED:
// Uncomment this for debugging...
//#define DEBUG
-//#define DEBUGFOO // Various tool debugging...
-//#define DEBUGTP // Toolpalette debugging...
+//#define DEBUGFOO // Various tool debugging... but not used
+//#define DEBUGTP // Toolpalette debugging... but not used
#include "mainwin.h"
#include "about.h"
#include "configdialog.h"
#include "controllertab.h"
+#include "keybindingstab.h"
#include "filepicker.h"
#include "gamepad.h"
#include "generaltab.h"
setWindowIcon(QIcon(":/res/vj-icon.png"));
- QString title = QString(tr("Virtual Jaguar " VJ_RELEASE_VERSION "Rx"));
+ QString title = QString(tr("Virtual Jaguar " VJ_RELEASE_VERSION " Rx"));
if (vjs.hardwareTypeAlpine)
title += QString(tr(" - Alpine Mode"));
quitAppAct = new QAction(tr("E&xit"), this);
// quitAppAct->setShortcuts(QKeySequence::Quit);
// quitAppAct->setShortcut(QKeySequence(tr("Alt+x")));
- quitAppAct->setShortcut(QKeySequence(tr("Ctrl+q")));
+ //quitAppAct->setShortcut(QKeySequence(tr("Ctrl+q")));
+ quitAppAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBQUIT].KBSettingValue)));
quitAppAct->setShortcutContext(Qt::ApplicationShortcut);
quitAppAct->setStatusTip(tr("Quit Virtual Jaguar"));
connect(quitAppAct, SIGNAL(triggered()), this, SLOT(close()));
pauseAct->setStatusTip(tr("Toggles the running state"));
pauseAct->setCheckable(true);
pauseAct->setDisabled(true);
- pauseAct->setShortcut(QKeySequence(tr("Esc")));
+ //pauseAct->setShortcut(QKeySequence(tr("Esc")));
+ pauseAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBPAUSE].KBSettingValue)));
pauseAct->setShortcutContext(Qt::ApplicationShortcut);
connect(pauseAct, SIGNAL(triggered()), this, SLOT(ToggleRunState()));
filePickAct = new QAction(QIcon(":/res/software.png"), tr("&Insert executable file..."), this);
filePickAct->setStatusTip(tr("Insert an executable into Virtual Jaguar"));
}
- filePickAct->setShortcut(QKeySequence(tr("Ctrl+i")));
+ //filePickAct->setShortcut(QKeySequence(tr("Ctrl+i")));
+ filePickAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBPICKFILE].KBSettingValue)));
filePickAct->setShortcutContext(Qt::ApplicationShortcut);
connect(filePickAct, SIGNAL(triggered()), this, SLOT(InsertCart()));
configAct = new QAction(QIcon(":/res/wrench.png"), tr("&Configure"), this);
configAct->setStatusTip(tr("Configure options for Virtual Jaguar"));
- configAct->setShortcut(QKeySequence(tr("Ctrl+c")));
+ //configAct->setShortcut(QKeySequence(tr("Ctrl+c")));
+ configAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBCONFIGURE].KBSettingValue)));
configAct->setShortcutContext(Qt::ApplicationShortcut);
connect(configAct, SIGNAL(triggered()), this, SLOT(Configure()));
emustatusAct = new QAction(QIcon(""), tr("&Status"), this);
emustatusAct->setStatusTip(tr("Emulator status"));
- emustatusAct->setShortcut(QKeySequence(tr("Ctrl+s")));
+ //emustatusAct->setShortcut(QKeySequence(tr("Ctrl+s")));
+ emustatusAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBEMUSTATUS].KBSettingValue)));
emustatusAct->setShortcutContext(Qt::ApplicationShortcut);
connect(emustatusAct, SIGNAL(triggered()), this, SLOT(ShowEmuStatusWin()));
connect(useCDAct, SIGNAL(triggered()), this, SLOT(ToggleCDUsage()));
frameAdvanceAct = new QAction(QIcon(":/res/frame-advance.png"), tr("&Frame Advance"), this);
- frameAdvanceAct->setShortcut(QKeySequence(tr("F7")));
+ //frameAdvanceAct->setShortcut(QKeySequence(tr("F7")));
+ frameAdvanceAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBFRAMEADVANCE].KBSettingValue)));
frameAdvanceAct->setShortcutContext(Qt::ApplicationShortcut);
frameAdvanceAct->setDisabled(true);
connect(frameAdvanceAct, SIGNAL(triggered()), this, SLOT(FrameAdvance()));
if (vjs.softTypeDebugger)
{
restartAct = new QAction(QIcon(":/res/Restart.png"), tr("&Restart"), this);
- restartAct->setShortcut(QKeySequence(tr("Ctrl+Shift+F5")));
+ //restartAct->setShortcut(QKeySequence(tr("Ctrl+Shift+F5")));
+ restartAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBRESTART].KBSettingValue)));
restartAct->setShortcutContext(Qt::ApplicationShortcut);
restartAct->setCheckable(false);
restartAct->setDisabled(true);
connect(restartAct, SIGNAL(triggered()), this, SLOT(Restart()));
traceStepOverAct = new QAction(QIcon(":/res/StepOver.png"), tr("&Step Over"), this);
- traceStepOverAct->setShortcut(QKeySequence(tr("F10")));
+ //traceStepOverAct->setShortcut(QKeySequence(tr("F10")));
+ traceStepOverAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBSTEPOVER].KBSettingValue)));
traceStepOverAct->setShortcutContext(Qt::ApplicationShortcut);
traceStepOverAct->setCheckable(false);
traceStepOverAct->setDisabled(true);
connect(traceStepOverAct, SIGNAL(triggered()), this, SLOT(TraceStepOver()));
traceStepIntoAct = new QAction(QIcon(":/res/StepInto.png"), tr("&Step Into"), this);
- traceStepIntoAct->setShortcut(QKeySequence(tr("F11")));
+ //traceStepIntoAct->setShortcut(QKeySequence(tr("F11")));
+ traceStepIntoAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBSTEPINTO].KBSettingValue)));
traceStepIntoAct->setShortcutContext(Qt::ApplicationShortcut);
traceStepIntoAct->setCheckable(false);
traceStepIntoAct->setDisabled(true);
}
fullScreenAct = new QAction(QIcon(":/res/fullscreen.png"), tr("F&ull Screen"), this);
- fullScreenAct->setShortcut(QKeySequence(tr("F9")));
+ //fullScreenAct->setShortcut(QKeySequence(tr("F9")));
+ fullScreenAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBFULLSCREEN].KBSettingValue)));
fullScreenAct->setShortcutContext(Qt::ApplicationShortcut);
fullScreenAct->setCheckable(true);
connect(fullScreenAct, SIGNAL(triggered()), this, SLOT(ToggleFullScreen()));
// Create status bar
statusBar()->showMessage(tr("Ready"));
ReadUISettings();
- // Do this in case original size isn't correct (mostly for the first-run
- // case)
+ // Do this in case original size isn't correct (mostly for the first-run case)
ResizeMainWindow();
// Create our test pattern bitmaps
// We set this initially, to make VJ behave somewhat as it would if no
// cart were inserted and the BIOS was set as active...
jaguarCartInserted = true;
- WriteLog("Virtual Jaguar %s (Last full build was on %s %s)\n", VJ_RELEASE_VERSION, __DATE__, __TIME__);
+ WriteLog("Virtual Jaguar %s Rx (Last full build was on %s %s)\n", VJ_RELEASE_VERSION, __DATE__, __TIME__);
WriteLog("VJ: Initializing jaguar subsystem...\n");
JaguarInit();
// memcpy(jagMemSpace + 0xE00000, jaguarBootROM, 0x20000); // Use the stock BIOS
// cart, we expect to run the cart! Maybe have a RemoveCart function that only
// works if the CD unit is active?
setWindowTitle(QString("Virtual Jaguar " VJ_RELEASE_VERSION
- " - Now playing: Jaguar CD"));
+ " Rx - Now playing: Jaguar CD"));
}
WriteLog("GUI: Resetting Jaguar...\n");
if ((!vjs.hardwareTypeAlpine || !vjs.softTypeDebugger) && !loadAndGo && jaguarRunAddress)
{
- QString newTitle = QString("Virtual Jaguar " VJ_RELEASE_VERSION " - Now playing: %1")
+ QString newTitle = QString("Virtual Jaguar " VJ_RELEASE_VERSION " Rx - Now playing: %1")
.arg(filePickWin->GetSelectedPrettyName());
setWindowTitle(newTitle);
}
}
-//
+// Read settings
void MainWin::ReadSettings(void)
{
+ size_t i;
+
QSettings settings("Underground Software", "Virtual Jaguar");
zoomLevel = settings.value("zoom", 2).toInt();
vjs.useOpenGL = settings.value("useOpenGL", true).toBool();
vjs.glFilter = settings.value("glFilterType", 1).toInt();
vjs.renderType = settings.value("renderType", 0).toInt();
- vjs.allowWritesToROM = settings.value("writeROM", false).toBool();
vjs.biosType = settings.value("biosType", BT_M_SERIES).toInt();
vjs.useFastBlitter = settings.value("useFastBlitter", false).toBool();
strcpy(vjs.EEPROMPath, settings.value("EEPROMs", QStandardPaths::writableLocation(QStandardPaths::DataLocation).append("/eeproms/")).toString().toUtf8().data());
strcpy(vjs.ROMPath, settings.value("ROMs", QStandardPaths::writableLocation(QStandardPaths::DataLocation).append("/software/")).toString().toUtf8().data());
- strcpy(vjs.alpineROMPath, settings.value("DefaultROM", "").toString().toUtf8().data());
+
+ // Read settings from the Debugger mode
+ settings.beginGroup("debugger");
strcpy(vjs.debuggerROMPath, settings.value("DefaultROM", "").toString().toUtf8().data());
- strcpy(vjs.absROMPath, settings.value("DefaultABS", "").toString().toUtf8().data());
vjs.nbrdisasmlines = settings.value("NbrDisasmLines", 32).toUInt();
- vjs.refresh = settings.value("refresh", 60).toUInt();
vjs.disasmopcodes = settings.value("DisasmOpcodes", true).toBool();
vjs.displayHWlabels = settings.value("DisplayHWLabels", true).toBool();
vjs.displayFullSourceFilename = settings.value("displayFullSourceFilename", true).toBool();
vjs.nbrmemory1browserwindow = settings.value("NbrMemory1BrowserWindow", MaxMemory1BrowserWindow).toUInt();
+ settings.endGroup();
+
+ // Read settings from the Alpine mode
+ settings.beginGroup("alpine");
+ strcpy(vjs.alpineROMPath, settings.value("DefaultROM", "").toString().toUtf8().data());
+ strcpy(vjs.absROMPath, settings.value("DefaultABS", "").toString().toUtf8().data());
+ vjs.refresh = settings.value("refresh", 60).toUInt();
+ vjs.allowWritesToROM = settings.value("writeROM", false).toBool();
+ settings.endGroup();
+
+ // Read settings from the Keybindings
+ settings.beginGroup("keybindings");
+ for (i = 0; i < KB_END; i++)
+ {
+ strcpy(vjs.KBContent[i].KBSettingValue, settings.value(KeyBindingsTable[i].KBNameSetting, KeyBindingsTable[i].KBDefaultValue).toString().toUtf8().data());
+ }
+ settings.endGroup();
+ // Write important settings to the log file
WriteLog("MainWin: Paths\n");
WriteLog(" EEPROMPath = \"%s\"\n", vjs.EEPROMPath);
WriteLog(" ROMPath = \"%s\"\n", vjs.ROMPath);
size_t i;
QSize size;
+ // Point on the emulator settings
QSettings settings("Underground Software", "Virtual Jaguar");
+ settings.beginGroup("ui");
// Emulator main window UI information
mainWinPosition = settings.value("pos", QPoint(200, 200)).toPoint();
pos = settings.value("cartLoadPos", QPoint(200, 200)).toPoint();
filePickWin->move(pos);
- // Alpine debug UI information
+ // Alpine debug UI information (also needed by the Debugger)
if (vjs.hardwareTypeAlpine || vjs.softTypeDebugger)
{
// CPU registers UI information
mem1BrowseWin[i]->resize(size);
}
}
+
+ settings.endGroup();
}
-
+
// Save the settings
void MainWin::WriteSettings(void)
{
+ size_t i;
+
+ // Point on the emulator settings
QSettings settings("Underground Software", "Virtual Jaguar");
- settings.setValue("pos", pos());
- settings.setValue("size", size());
- settings.setValue("cartLoadPos", filePickWin->pos());
+ //settings.setValue("pos", pos());
+ //settings.setValue("size", size());
+ //settings.setValue("cartLoadPos", filePickWin->pos());
settings.setValue("zoom", zoomLevel);
settings.setValue("showUnknownSoftware", allowUnknownSoftware);
settings.setValue("useOpenGL", vjs.useOpenGL);
settings.setValue("glFilterType", vjs.glFilter);
settings.setValue("renderType", vjs.renderType);
- settings.setValue("writeROM", vjs.allowWritesToROM);
settings.setValue("biosType", vjs.biosType);
settings.setValue("useFastBlitter", vjs.useFastBlitter);
settings.setValue("JagBootROM", vjs.jagBootPath);
settings.setValue("CDBootROM", vjs.CDBootPath);
settings.setValue("EEPROMs", vjs.EEPROMPath);
settings.setValue("ROMs", vjs.ROMPath);
+
+ // Write settings from the Alpine mode
+ settings.beginGroup("alpine");
+ settings.setValue("refresh", vjs.refresh);
settings.setValue("DefaultROM", vjs.alpineROMPath);
settings.setValue("DefaultABS", vjs.absROMPath);
+ settings.setValue("writeROM", vjs.allowWritesToROM);
+ settings.endGroup();
+
+ // Write settings from the Debugger mode
+ settings.beginGroup("debugger");
settings.setValue("DisplayHWLabels", vjs.displayHWlabels);
settings.setValue("NbrDisasmLines", vjs.nbrdisasmlines);
- settings.setValue("refresh", vjs.refresh);
settings.setValue("DisasmOpcodes", vjs.disasmopcodes);
settings.setValue("displayFullSourceFilename", vjs.displayFullSourceFilename);
settings.setValue("NbrMemory1BrowserWindow", (unsigned int)vjs.nbrmemory1browserwindow);
+ settings.setValue("DefaultROM", vjs.debuggerROMPath);
+ settings.endGroup();
+
+ // Write settings from the Keybindings
+ settings.beginGroup("keybindings");
+ for (i = 0; i < KB_END; i++)
+ {
+ settings.setValue(KeyBindingsTable[i].KBNameSetting, vjs.KBContent[i].KBSettingValue);
+ }
+ settings.endGroup();
#if 0
settings.setValue("p1k_up", vjs.p1KeyBindings[BUTTON_U]);
char mem1Name[100];
size_t i;
+ // Point on the emulator settings
QSettings settings("Underground Software", "Virtual Jaguar");
+ settings.beginGroup("ui");
// Emulator UI information
settings.setValue("pos", pos());
settings.setValue("cartLoadPos", filePickWin->pos());
settings.setValue("zoom", zoomLevel);
- // Alpine debug UI information
+ // Alpine debug UI information (also needed by the Debugger)
if (vjs.hardwareTypeAlpine || vjs.softTypeDebugger)
{
settings.setValue("cpuBrowseWinPos", cpuBrowseWin->pos());
settings.setValue(mem1Name, mem1BrowseWin[i]->size());
}
}
+
+ settings.endGroup();
}