X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fgui%2Fmainwin.cpp;h=60e7fbda2f303502ea7141d2ff08d780b333caf1;hb=f548beede257a2252a2639e3fe03c7cda99433ed;hp=30c3b2a37c1a18b44ad7604eebfdf2576999b48e;hpb=f0e50fb1d23805881b72d51ea603be78b645ec97;p=virtualjaguar diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index 30c3b2a..60e7fbd 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -26,15 +26,13 @@ #include "mainwin.h" #include "SDL.h" -//#include -//#include #include "glwidget.h" #include "about.h" #include "settings.h" #include "filepicker.h" +#include "configdialog.h" #include "jaguar.h" -#include "video.h" #include "tom.h" #include "log.h" #include "file.h" @@ -146,6 +144,10 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit filePickAct->setStatusTip(tr("Insert a cartridge into Virtual Jaguar")); connect(filePickAct, SIGNAL(triggered()), this, SLOT(InsertCart())); + configAct = new QAction(QIcon(":/res/generic.png"), tr("&Configure"), this); + configAct->setStatusTip(tr("Configure options for Virtual Jaguar")); + connect(configAct, SIGNAL(triggered()), this, SLOT(Configure())); + // Misc. connections... connect(filePickWin, SIGNAL(RequestLoad(QString)), this, SLOT(LoadSoftware(QString))); @@ -155,6 +157,7 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit fileMenu->addAction(filePickAct); fileMenu->addAction(powerAct); fileMenu->addAction(pauseAct); + fileMenu->addAction(configAct); fileMenu->addAction(quitAppAct); helpMenu = menuBar()->addMenu(tr("&Help")); @@ -251,68 +254,60 @@ void MainWin::closeEvent(QCloseEvent * event) void MainWin::keyPressEvent(QKeyEvent * e) { - // NOTE: Keys are hardwired... -/* - vjs.p1KeyBindings[0] = settings.value("p1k_up", SDLK_UP).toInt(); - vjs.p1KeyBindings[1] = settings.value("p1k_down", SDLK_DOWN).toInt(); - vjs.p1KeyBindings[2] = settings.value("p1k_left", SDLK_LEFT).toInt(); - vjs.p1KeyBindings[3] = settings.value("p1k_right", SDLK_RIGHT).toInt(); - vjs.p1KeyBindings[4] = settings.value("p1k_c", SDLK_z).toInt(); - vjs.p1KeyBindings[5] = settings.value("p1k_b", SDLK_x).toInt(); - vjs.p1KeyBindings[6] = settings.value("p1k_a", SDLK_c).toInt(); - vjs.p1KeyBindings[7] = settings.value("p1k_option", SDLK_QUOTE).toInt(); - vjs.p1KeyBindings[8] = settings.value("p1k_pause", SDLK_RETURN).toInt(); - vjs.p1KeyBindings[9] = settings.value("p1k_0", SDLK_KP0).toInt(); - vjs.p1KeyBindings[10] = settings.value("p1k_1", SDLK_KP1).toInt(); - vjs.p1KeyBindings[11] = settings.value("p1k_2", SDLK_KP2).toInt(); - vjs.p1KeyBindings[12] = settings.value("p1k_3", SDLK_KP3).toInt(); - vjs.p1KeyBindings[13] = settings.value("p1k_4", SDLK_KP4).toInt(); - vjs.p1KeyBindings[14] = settings.value("p1k_5", SDLK_KP5).toInt(); - vjs.p1KeyBindings[15] = settings.value("p1k_6", SDLK_KP6).toInt(); - vjs.p1KeyBindings[16] = settings.value("p1k_7", SDLK_KP7).toInt(); - vjs.p1KeyBindings[17] = settings.value("p1k_8", SDLK_KP8).toInt(); - vjs.p1KeyBindings[18] = settings.value("p1k_9", SDLK_KP9).toInt(); - vjs.p1KeyBindings[19] = settings.value("p1k_pound", SDLK_KP_DIVIDE).toInt(); - vjs.p1KeyBindings[20] = settings.value("p1k_star", SDLK_KP_MULTIPLY).toInt(); -*/ - if (e->key() == Qt::Key_Up) - keyBuffer[0] = true; - else if (e->key() == Qt::Key_Down) - keyBuffer[1] = true; - else if (e->key() == Qt::Key_Left) - keyBuffer[2] = true; - else if (e->key() == Qt::Key_Right) - keyBuffer[3] = true; - else if (e->key() == Qt::Key_Z) - keyBuffer[4] = true; - else if (e->key() == Qt::Key_X) - keyBuffer[5] = true; - else if (e->key() == Qt::Key_C) - keyBuffer[6] = true; + HandleKeys(e, true); } void MainWin::keyReleaseEvent(QKeyEvent * e) { - if (e->key() == Qt::Key_Up) - keyBuffer[0] = false; - else if (e->key() == Qt::Key_Down) - keyBuffer[1] = false; - else if (e->key() == Qt::Key_Left) - keyBuffer[2] = false; - else if (e->key() == Qt::Key_Right) - keyBuffer[3] = false; - else if (e->key() == Qt::Key_Z) - keyBuffer[4] = false; - else if (e->key() == Qt::Key_X) - keyBuffer[5] = false; - else if (e->key() == Qt::Key_C) - keyBuffer[6] = false; + HandleKeys(e, false); +} + +void MainWin::HandleKeys(QKeyEvent * e, bool state) +{ + // We kill bad key combos here, before they can get to the emulator... + // This also kills the illegal instruction problem that cropped up in Rayman! + // May want to do this by killing the old one instead of ignoring the new one... + // Seems to work better that way... +#if 0 + if ((e->key() == vjs.p1KeyBindings[BUTTON_L] && joypad_0_buttons[BUTTON_R]) + || (e->key() == vjs.p1KeyBindings[BUTTON_R] && joypad_0_buttons[BUTTON_L]) + || (e->key() == vjs.p1KeyBindings[BUTTON_U] && joypad_0_buttons[BUTTON_D]) + || (e->key() == vjs.p1KeyBindings[BUTTON_D] && joypad_0_buttons[BUTTON_U])) + return; +#else + if (e->key() == vjs.p1KeyBindings[BUTTON_L] && joypad_0_buttons[BUTTON_R]) + joypad_0_buttons[BUTTON_R] = 0; + if (e->key() == vjs.p1KeyBindings[BUTTON_R] && joypad_0_buttons[BUTTON_L]) + joypad_0_buttons[BUTTON_L] = 0; + if (e->key() == vjs.p1KeyBindings[BUTTON_U] && joypad_0_buttons[BUTTON_D]) + joypad_0_buttons[BUTTON_D] = 0; + if (e->key() == vjs.p1KeyBindings[BUTTON_D] && joypad_0_buttons[BUTTON_U]) + joypad_0_buttons[BUTTON_U] = 0; +#endif + + // No bad combos exist, let's stuff the emulator key buffers...! + for(int i=BUTTON_FIRST; i<=BUTTON_LAST; i++) + { + if (e->key() == vjs.p1KeyBindings[i]) + joypad_0_buttons[i] = (uint8)state; + } } void MainWin::Open(void) { } +void MainWin::Configure(void) +{ + // Call the configuration dialog and update settings + ConfigDialog dlg(this); + + if (dlg.exec() == false) + return; + + dlg.UpdateVJSettings(); +} + // // Here's the main emulator loop // @@ -625,49 +620,49 @@ WriteLog(" EEPROMPath = \"%s\"\n", vjs.EEPROMPath); WriteLog(" ROMPath = \"%s\"\n", vjs.ROMPath); // Keybindings in order of U, D, L, R, C, B, A, Op, Pa, 0-9, #, * - vjs.p1KeyBindings[0] = settings.value("p1k_up", SDLK_UP).toInt(); - vjs.p1KeyBindings[1] = settings.value("p1k_down", SDLK_DOWN).toInt(); - vjs.p1KeyBindings[2] = settings.value("p1k_left", SDLK_LEFT).toInt(); - vjs.p1KeyBindings[3] = settings.value("p1k_right", SDLK_RIGHT).toInt(); - vjs.p1KeyBindings[4] = settings.value("p1k_c", SDLK_z).toInt(); - vjs.p1KeyBindings[5] = settings.value("p1k_b", SDLK_x).toInt(); - vjs.p1KeyBindings[6] = settings.value("p1k_a", SDLK_c).toInt(); - vjs.p1KeyBindings[7] = settings.value("p1k_option", SDLK_QUOTE).toInt(); - vjs.p1KeyBindings[8] = settings.value("p1k_pause", SDLK_RETURN).toInt(); - vjs.p1KeyBindings[9] = settings.value("p1k_0", SDLK_KP0).toInt(); - vjs.p1KeyBindings[10] = settings.value("p1k_1", SDLK_KP1).toInt(); - vjs.p1KeyBindings[11] = settings.value("p1k_2", SDLK_KP2).toInt(); - vjs.p1KeyBindings[12] = settings.value("p1k_3", SDLK_KP3).toInt(); - vjs.p1KeyBindings[13] = settings.value("p1k_4", SDLK_KP4).toInt(); - vjs.p1KeyBindings[14] = settings.value("p1k_5", SDLK_KP5).toInt(); - vjs.p1KeyBindings[15] = settings.value("p1k_6", SDLK_KP6).toInt(); - vjs.p1KeyBindings[16] = settings.value("p1k_7", SDLK_KP7).toInt(); - vjs.p1KeyBindings[17] = settings.value("p1k_8", SDLK_KP8).toInt(); - vjs.p1KeyBindings[18] = settings.value("p1k_9", SDLK_KP9).toInt(); - vjs.p1KeyBindings[19] = settings.value("p1k_pound", SDLK_KP_DIVIDE).toInt(); - vjs.p1KeyBindings[20] = settings.value("p1k_star", SDLK_KP_MULTIPLY).toInt(); - - vjs.p2KeyBindings[0] = settings.value("p2k_up", SDLK_UP).toInt(); - vjs.p2KeyBindings[1] = settings.value("p2k_down", SDLK_DOWN).toInt(); - vjs.p2KeyBindings[2] = settings.value("p2k_left", SDLK_LEFT).toInt(); - vjs.p2KeyBindings[3] = settings.value("p2k_right", SDLK_RIGHT).toInt(); - vjs.p2KeyBindings[4] = settings.value("p2k_c", SDLK_z).toInt(); - vjs.p2KeyBindings[5] = settings.value("p2k_b", SDLK_x).toInt(); - vjs.p2KeyBindings[6] = settings.value("p2k_a", SDLK_c).toInt(); - vjs.p2KeyBindings[7] = settings.value("p2k_option", SDLK_QUOTE).toInt(); - vjs.p2KeyBindings[8] = settings.value("p2k_pause", SDLK_RETURN).toInt(); - vjs.p2KeyBindings[9] = settings.value("p2k_0", SDLK_KP0).toInt(); - vjs.p2KeyBindings[10] = settings.value("p2k_1", SDLK_KP1).toInt(); - vjs.p2KeyBindings[11] = settings.value("p2k_2", SDLK_KP2).toInt(); - vjs.p2KeyBindings[12] = settings.value("p2k_3", SDLK_KP3).toInt(); - vjs.p2KeyBindings[13] = settings.value("p2k_4", SDLK_KP4).toInt(); - vjs.p2KeyBindings[14] = settings.value("p2k_5", SDLK_KP5).toInt(); - vjs.p2KeyBindings[15] = settings.value("p2k_6", SDLK_KP6).toInt(); - vjs.p2KeyBindings[16] = settings.value("p2k_7", SDLK_KP7).toInt(); - vjs.p2KeyBindings[17] = settings.value("p2k_8", SDLK_KP8).toInt(); - vjs.p2KeyBindings[18] = settings.value("p2k_9", SDLK_KP9).toInt(); - vjs.p2KeyBindings[19] = settings.value("p2k_pound", SDLK_KP_DIVIDE).toInt(); - vjs.p2KeyBindings[20] = settings.value("p2k_star", SDLK_KP_MULTIPLY).toInt(); + vjs.p1KeyBindings[BUTTON_U] = settings.value("p1k_up", Qt::Key_Up).toInt(); + vjs.p1KeyBindings[BUTTON_D] = settings.value("p1k_down", Qt::Key_Down).toInt(); + vjs.p1KeyBindings[BUTTON_L] = settings.value("p1k_left", Qt::Key_Left).toInt(); + vjs.p1KeyBindings[BUTTON_R] = settings.value("p1k_right", Qt::Key_Right).toInt(); + vjs.p1KeyBindings[BUTTON_C] = settings.value("p1k_c", Qt::Key_Z).toInt(); + vjs.p1KeyBindings[BUTTON_B] = settings.value("p1k_b", Qt::Key_X).toInt(); + vjs.p1KeyBindings[BUTTON_A] = settings.value("p1k_a", Qt::Key_C).toInt(); + vjs.p1KeyBindings[BUTTON_OPTION] = settings.value("p1k_option", Qt::Key_Apostrophe).toInt(); + vjs.p1KeyBindings[BUTTON_PAUSE] = settings.value("p1k_pause", Qt::Key_Return).toInt(); + vjs.p1KeyBindings[BUTTON_0] = settings.value("p1k_0", Qt::Key_0).toInt(); + vjs.p1KeyBindings[BUTTON_1] = settings.value("p1k_1", Qt::Key_1).toInt(); + vjs.p1KeyBindings[BUTTON_2] = settings.value("p1k_2", Qt::Key_2).toInt(); + vjs.p1KeyBindings[BUTTON_3] = settings.value("p1k_3", Qt::Key_3).toInt(); + vjs.p1KeyBindings[BUTTON_4] = settings.value("p1k_4", Qt::Key_4).toInt(); + vjs.p1KeyBindings[BUTTON_5] = settings.value("p1k_5", Qt::Key_5).toInt(); + vjs.p1KeyBindings[BUTTON_6] = settings.value("p1k_6", Qt::Key_6).toInt(); + vjs.p1KeyBindings[BUTTON_7] = settings.value("p1k_7", Qt::Key_7).toInt(); + vjs.p1KeyBindings[BUTTON_8] = settings.value("p1k_8", Qt::Key_8).toInt(); + vjs.p1KeyBindings[BUTTON_9] = settings.value("p1k_9", Qt::Key_9).toInt(); + vjs.p1KeyBindings[BUTTON_d] = settings.value("p1k_pound", Qt::Key_Slash).toInt(); + vjs.p1KeyBindings[BUTTON_s] = settings.value("p1k_star", Qt::Key_Asterisk).toInt(); + + vjs.p2KeyBindings[BUTTON_U] = settings.value("p2k_up", Qt::Key_Up).toInt(); + vjs.p2KeyBindings[BUTTON_D] = settings.value("p2k_down", Qt::Key_Down).toInt(); + vjs.p2KeyBindings[BUTTON_L] = settings.value("p2k_left", Qt::Key_Left).toInt(); + vjs.p2KeyBindings[BUTTON_R] = settings.value("p2k_right", Qt::Key_Right).toInt(); + vjs.p2KeyBindings[BUTTON_C] = settings.value("p2k_c", Qt::Key_Z).toInt(); + vjs.p2KeyBindings[BUTTON_B] = settings.value("p2k_b", Qt::Key_X).toInt(); + vjs.p2KeyBindings[BUTTON_A] = settings.value("p2k_a", Qt::Key_C).toInt(); + vjs.p2KeyBindings[BUTTON_OPTION] = settings.value("p2k_option", Qt::Key_Apostrophe).toInt(); + vjs.p2KeyBindings[BUTTON_PAUSE] = settings.value("p2k_pause", Qt::Key_Return).toInt(); + vjs.p2KeyBindings[BUTTON_0] = settings.value("p2k_0", Qt::Key_0).toInt(); + vjs.p2KeyBindings[BUTTON_1] = settings.value("p2k_1", Qt::Key_1).toInt(); + vjs.p2KeyBindings[BUTTON_2] = settings.value("p2k_2", Qt::Key_2).toInt(); + vjs.p2KeyBindings[BUTTON_3] = settings.value("p2k_3", Qt::Key_3).toInt(); + vjs.p2KeyBindings[BUTTON_4] = settings.value("p2k_4", Qt::Key_4).toInt(); + vjs.p2KeyBindings[BUTTON_5] = settings.value("p2k_5", Qt::Key_5).toInt(); + vjs.p2KeyBindings[BUTTON_6] = settings.value("p2k_6", Qt::Key_6).toInt(); + vjs.p2KeyBindings[BUTTON_7] = settings.value("p2k_7", Qt::Key_7).toInt(); + vjs.p2KeyBindings[BUTTON_8] = settings.value("p2k_8", Qt::Key_8).toInt(); + vjs.p2KeyBindings[BUTTON_9] = settings.value("p2k_9", Qt::Key_9).toInt(); + vjs.p2KeyBindings[BUTTON_d] = settings.value("p2k_pound", Qt::Key_Slash).toInt(); + vjs.p2KeyBindings[BUTTON_s] = settings.value("p2k_star", Qt::Key_Asterisk).toInt(); } void MainWin::WriteSettings(void) @@ -694,49 +689,49 @@ void MainWin::WriteSettings(void) settings.setValue("EEPROMs", vjs.EEPROMPath); settings.setValue("ROMs", vjs.ROMPath); - settings.setValue("p1k_up", vjs.p1KeyBindings[0]); - settings.setValue("p1k_down", vjs.p1KeyBindings[1]); - settings.setValue("p1k_left", vjs.p1KeyBindings[2]); - settings.setValue("p1k_right", vjs.p1KeyBindings[3]); - settings.setValue("p1k_c", vjs.p1KeyBindings[4]); - settings.setValue("p1k_b", vjs.p1KeyBindings[5]); - settings.setValue("p1k_a", vjs.p1KeyBindings[6]); - settings.setValue("p1k_option", vjs.p1KeyBindings[7]); - settings.setValue("p1k_pause", vjs.p1KeyBindings[8]); - settings.setValue("p1k_0", vjs.p1KeyBindings[9]); - settings.setValue("p1k_1", vjs.p1KeyBindings[10]); - settings.setValue("p1k_2", vjs.p1KeyBindings[11]); - settings.setValue("p1k_3", vjs.p1KeyBindings[12]); - settings.setValue("p1k_4", vjs.p1KeyBindings[13]); - settings.setValue("p1k_5", vjs.p1KeyBindings[14]); - settings.setValue("p1k_6", vjs.p1KeyBindings[15]); - settings.setValue("p1k_7", vjs.p1KeyBindings[16]); - settings.setValue("p1k_8", vjs.p1KeyBindings[17]); - settings.setValue("p1k_9", vjs.p1KeyBindings[18]); - settings.setValue("p1k_pound", vjs.p1KeyBindings[19]); - settings.setValue("p1k_star", vjs.p1KeyBindings[20]); - - settings.setValue("p2k_up", vjs.p2KeyBindings[0]); - settings.setValue("p2k_down", vjs.p2KeyBindings[1]); - settings.setValue("p2k_left", vjs.p2KeyBindings[2]); - settings.setValue("p2k_right", vjs.p2KeyBindings[3]); - settings.setValue("p2k_c", vjs.p2KeyBindings[4]); - settings.setValue("p2k_b", vjs.p2KeyBindings[5]); - settings.setValue("p2k_a", vjs.p2KeyBindings[6]); - settings.setValue("p2k_option", vjs.p2KeyBindings[7]); - settings.setValue("p2k_pause", vjs.p2KeyBindings[8]); - settings.setValue("p2k_0", vjs.p2KeyBindings[9]); - settings.setValue("p2k_1", vjs.p2KeyBindings[10]); - settings.setValue("p2k_2", vjs.p2KeyBindings[11]); - settings.setValue("p2k_3", vjs.p2KeyBindings[12]); - settings.setValue("p2k_4", vjs.p2KeyBindings[13]); - settings.setValue("p2k_5", vjs.p2KeyBindings[14]); - settings.setValue("p2k_6", vjs.p2KeyBindings[15]); - settings.setValue("p2k_7", vjs.p2KeyBindings[16]); - settings.setValue("p2k_8", vjs.p2KeyBindings[17]); - settings.setValue("p2k_9", vjs.p2KeyBindings[18]); - settings.setValue("p2k_pound", vjs.p2KeyBindings[19]); - settings.setValue("p2k_star", vjs.p2KeyBindings[20]); + settings.setValue("p1k_up", vjs.p1KeyBindings[BUTTON_U]); + settings.setValue("p1k_down", vjs.p1KeyBindings[BUTTON_D]); + settings.setValue("p1k_left", vjs.p1KeyBindings[BUTTON_L]); + settings.setValue("p1k_right", vjs.p1KeyBindings[BUTTON_R]); + settings.setValue("p1k_c", vjs.p1KeyBindings[BUTTON_C]); + settings.setValue("p1k_b", vjs.p1KeyBindings[BUTTON_B]); + settings.setValue("p1k_a", vjs.p1KeyBindings[BUTTON_A]); + settings.setValue("p1k_option", vjs.p1KeyBindings[BUTTON_OPTION]); + settings.setValue("p1k_pause", vjs.p1KeyBindings[BUTTON_PAUSE]); + settings.setValue("p1k_0", vjs.p1KeyBindings[BUTTON_0]); + settings.setValue("p1k_1", vjs.p1KeyBindings[BUTTON_1]); + settings.setValue("p1k_2", vjs.p1KeyBindings[BUTTON_2]); + settings.setValue("p1k_3", vjs.p1KeyBindings[BUTTON_3]); + settings.setValue("p1k_4", vjs.p1KeyBindings[BUTTON_4]); + settings.setValue("p1k_5", vjs.p1KeyBindings[BUTTON_5]); + settings.setValue("p1k_6", vjs.p1KeyBindings[BUTTON_6]); + settings.setValue("p1k_7", vjs.p1KeyBindings[BUTTON_7]); + settings.setValue("p1k_8", vjs.p1KeyBindings[BUTTON_8]); + settings.setValue("p1k_9", vjs.p1KeyBindings[BUTTON_9]); + settings.setValue("p1k_pound", vjs.p1KeyBindings[BUTTON_d]); + settings.setValue("p1k_star", vjs.p1KeyBindings[BUTTON_s]); + + settings.setValue("p2k_up", vjs.p2KeyBindings[BUTTON_U]); + settings.setValue("p2k_down", vjs.p2KeyBindings[BUTTON_D]); + settings.setValue("p2k_left", vjs.p2KeyBindings[BUTTON_L]); + settings.setValue("p2k_right", vjs.p2KeyBindings[BUTTON_R]); + settings.setValue("p2k_c", vjs.p2KeyBindings[BUTTON_C]); + settings.setValue("p2k_b", vjs.p2KeyBindings[BUTTON_B]); + settings.setValue("p2k_a", vjs.p2KeyBindings[BUTTON_A]); + settings.setValue("p2k_option", vjs.p2KeyBindings[BUTTON_OPTION]); + settings.setValue("p2k_pause", vjs.p2KeyBindings[BUTTON_PAUSE]); + settings.setValue("p2k_0", vjs.p2KeyBindings[BUTTON_0]); + settings.setValue("p2k_1", vjs.p2KeyBindings[BUTTON_1]); + settings.setValue("p2k_2", vjs.p2KeyBindings[BUTTON_2]); + settings.setValue("p2k_3", vjs.p2KeyBindings[BUTTON_3]); + settings.setValue("p2k_4", vjs.p2KeyBindings[BUTTON_4]); + settings.setValue("p2k_5", vjs.p2KeyBindings[BUTTON_5]); + settings.setValue("p2k_6", vjs.p2KeyBindings[BUTTON_6]); + settings.setValue("p2k_7", vjs.p2KeyBindings[BUTTON_7]); + settings.setValue("p2k_8", vjs.p2KeyBindings[BUTTON_8]); + settings.setValue("p2k_9", vjs.p2KeyBindings[BUTTON_9]); + settings.setValue("p2k_pound", vjs.p2KeyBindings[BUTTON_d]); + settings.setValue("p2k_star", vjs.p2KeyBindings[BUTTON_s]); } // Here's how Byuu does it...