mirror of https://github.com/bsnes-emu/bsnes.git
675 lines
27 KiB
C++
675 lines
27 KiB
C++
#include "main.moc"
|
|
MainWindow *mainWindow;
|
|
|
|
MainWindow::MainWindow() {
|
|
setObjectName("main-window");
|
|
setWindowTitle(string() << SNES::Info::Name << " v" << SNES::Info::Version);
|
|
setCloseOnEscape(false);
|
|
setGeometryString(&config().geometry.mainWindow);
|
|
application.windowList.append(this);
|
|
|
|
//menu bar
|
|
#if defined(PLATFORM_OSX)
|
|
menuBar = new QMenuBar(0);
|
|
#else
|
|
menuBar = new QMenuBar;
|
|
#endif
|
|
|
|
system = menuBar->addMenu("&System");
|
|
|
|
system_load = system->addAction("Load &Cartridge ...");
|
|
system_load->setIcon(QIcon(":/16x16/document-open.png"));
|
|
|
|
system_loadSpecial = system->addMenu("Load &Special");
|
|
system_loadSpecial->setIcon(QIcon(":/16x16/document-open.png"));
|
|
|
|
system_loadSpecial_bsxSlotted = system_loadSpecial->addAction("Load BS-X &Slotted Cartridge ...");
|
|
system_loadSpecial_bsxSlotted->setIcon(QIcon(":/16x16/document-open.png"));
|
|
|
|
system_loadSpecial_bsx = system_loadSpecial->addAction("Load &BS-X Cartridge ...");
|
|
system_loadSpecial_bsx->setIcon(QIcon(":/16x16/document-open.png"));
|
|
|
|
system_loadSpecial_sufamiTurbo = system_loadSpecial->addAction("Load Sufami &Turbo Cartridge ...");
|
|
system_loadSpecial_sufamiTurbo->setIcon(QIcon(":/16x16/document-open.png"));
|
|
|
|
system_loadSpecial_superGameBoy = system_loadSpecial->addAction("Load Super &Game Boy Cartridge ...");
|
|
system_loadSpecial_superGameBoy->setIcon(QIcon(":/16x16/document-open.png"));
|
|
|
|
system->addSeparator();
|
|
|
|
system->addAction(system_power = new CheckAction("&Power", 0));
|
|
|
|
system_reset = system->addAction("&Reset");
|
|
system_reset->setIcon(QIcon(":/16x16/view-refresh.png"));
|
|
|
|
system->addSeparator();
|
|
|
|
system_port1 = system->addMenu("Controller Port &1");
|
|
system_port1->setIcon(QIcon(":/16x16/input-gaming.png"));
|
|
system_port1->addAction(system_port1_none = new RadioAction("&None", 0));
|
|
system_port1->addAction(system_port1_gamepad = new RadioAction("&Gamepad", 0));
|
|
system_port1->addAction(system_port1_asciipad = new RadioAction("&asciiPad", 0));
|
|
system_port1->addAction(system_port1_multitap = new RadioAction("&Multitap", 0));
|
|
system_port1->addAction(system_port1_mouse = new RadioAction("&Mouse", 0));
|
|
|
|
system_port2 = system->addMenu("Controller Port &2");
|
|
system_port2->setIcon(QIcon(":/16x16/input-gaming.png"));
|
|
system_port2->addAction(system_port2_none = new RadioAction("&None", 0));
|
|
system_port2->addAction(system_port2_gamepad = new RadioAction("&Gamepad", 0));
|
|
system_port2->addAction(system_port2_asciipad = new RadioAction("&asciiPad", 0));
|
|
system_port2->addAction(system_port2_multitap = new RadioAction("&Multitap", 0));
|
|
system_port2->addAction(system_port2_mouse = new RadioAction("&Mouse", 0));
|
|
system_port2->addAction(system_port2_superscope = new RadioAction("&Super Scope", 0));
|
|
system_port2->addAction(system_port2_justifier = new RadioAction("&Justifier", 0));
|
|
system_port2->addAction(system_port2_justifiers = new RadioAction("Two &Justifiers", 0));
|
|
|
|
#if !defined(PLATFORM_OSX)
|
|
system->addSeparator();
|
|
#endif
|
|
|
|
system_exit = system->addAction("E&xit");
|
|
system_exit->setIcon(QIcon(":/16x16/process-stop.png"));
|
|
system_exit->setMenuRole(QAction::QuitRole);
|
|
|
|
settings = menuBar->addMenu("S&ettings");
|
|
|
|
settings_videoMode = settings->addMenu("Video &Mode");
|
|
settings_videoMode->setIcon(QIcon(":/16x16/video-display.png"));
|
|
|
|
settings_videoMode->addAction(settings_videoMode_1x = new RadioAction("Scale &1x", 0));
|
|
|
|
settings_videoMode->addAction(settings_videoMode_2x = new RadioAction("Scale &2x", 0));
|
|
|
|
settings_videoMode->addAction(settings_videoMode_3x = new RadioAction("Scale &3x", 0));
|
|
|
|
settings_videoMode->addAction(settings_videoMode_4x = new RadioAction("Scale &4x", 0));
|
|
|
|
settings_videoMode->addAction(settings_videoMode_5x = new RadioAction("Scale &5x", 0));
|
|
|
|
settings_videoMode->addAction(settings_videoMode_max_normal = new RadioAction("Scale Max - &Normal", 0));
|
|
|
|
settings_videoMode->addAction(settings_videoMode_max_wide = new RadioAction("Scale Max - &Wide", 0));
|
|
|
|
settings_videoMode->addAction(settings_videoMode_max_wideZoom = new RadioAction("Scale Max - Wide &Zoom", 0));
|
|
|
|
settings_videoMode->addSeparator();
|
|
|
|
settings_videoMode->addAction(settings_videoMode_correctAspectRatio = new CheckAction("Correct &Aspect Ratio", 0));
|
|
|
|
settings_videoMode->addSeparator();
|
|
|
|
settings_videoMode->addAction(settings_videoMode_ntsc = new RadioAction("&NTSC", 0));
|
|
settings_videoMode->addAction(settings_videoMode_pal = new RadioAction("&PAL", 0));
|
|
|
|
if(filter.opened()) {
|
|
settings_videoFilter = settings->addMenu("Video &Filter");
|
|
settings_videoFilter->setIcon(QIcon(":/16x16/image-x-generic.png"));
|
|
|
|
settings_videoFilter_configure = settings_videoFilter->addAction("&Configure Active Filter ...");
|
|
settings_videoFilter_configure->setIcon(QIcon(":/16x16/preferences-desktop.png"));
|
|
settings_videoFilter->addSeparator();
|
|
|
|
settings_videoFilter->addAction(settings_videoFilter_none = new RadioAction("&None", 0));
|
|
settings_videoFilter_list.append(settings_videoFilter_none);
|
|
|
|
lstring filterlist;
|
|
filterlist.split(";", filter.dl_supported());
|
|
for(unsigned i = 0; i < filterlist.size(); i++) {
|
|
RadioAction *action = new RadioAction(filterlist[i], 0);
|
|
settings_videoFilter->addAction(action);
|
|
settings_videoFilter_list.append(action);
|
|
}
|
|
}
|
|
|
|
settings->addAction(settings_smoothVideo = new CheckAction("&Smooth Video Output", 0));
|
|
|
|
settings->addSeparator();
|
|
|
|
settings->addAction(settings_muteAudio = new CheckAction("&Mute Audio Output", 0));
|
|
|
|
settings->addSeparator();
|
|
|
|
settings_emulationSpeed = settings->addMenu("Emulation &Speed");
|
|
settings_emulationSpeed->setIcon(QIcon(":/16x16/appointment-new.png"));
|
|
|
|
settings_emulationSpeed->addAction(settings_emulationSpeed_slowest = new RadioAction("Slowest", 0));
|
|
|
|
settings_emulationSpeed->addAction(settings_emulationSpeed_slow = new RadioAction("Slow", 0));
|
|
|
|
settings_emulationSpeed->addAction(settings_emulationSpeed_normal = new RadioAction("Normal", 0));
|
|
|
|
settings_emulationSpeed->addAction(settings_emulationSpeed_fast = new RadioAction("Fast", 0));
|
|
|
|
settings_emulationSpeed->addAction(settings_emulationSpeed_fastest = new RadioAction("Fastest", 0));
|
|
|
|
settings_emulationSpeed->addSeparator();
|
|
|
|
settings_emulationSpeed->addAction(settings_emulationSpeed_syncVideo = new CheckAction("Sync &Video", 0));
|
|
|
|
settings_emulationSpeed->addAction(settings_emulationSpeed_syncAudio = new CheckAction("Sync &Audio", 0));
|
|
|
|
settings_configuration = settings->addAction("&Configuration ...");
|
|
settings_configuration->setIcon(QIcon(":/16x16/preferences-desktop.png"));
|
|
settings_configuration->setMenuRole(QAction::PreferencesRole);
|
|
|
|
tools = menuBar->addMenu("&Tools");
|
|
|
|
tools_movies = tools->addMenu("&Movies");
|
|
tools_movies->setIcon(QIcon(":/16x16/applications-multimedia.png"));
|
|
|
|
tools_movies_play = tools_movies->addAction("Play Movie ...");
|
|
tools_movies_play->setIcon(QIcon(":/16x16/media-playback-start.png"));
|
|
|
|
tools_movies_stop = tools_movies->addAction("Stop");
|
|
tools_movies_stop->setIcon(QIcon(":/16x16/media-playback-stop.png"));
|
|
|
|
tools_movies_recordFromPowerOn = tools_movies->addAction("Record Movie (and restart system)");
|
|
tools_movies_recordFromPowerOn->setIcon(QIcon(":/16x16/media-record.png"));
|
|
|
|
tools_movies_recordFromHere = tools_movies->addAction("Record Movie (starting from here)");
|
|
tools_movies_recordFromHere->setIcon(QIcon(":/16x16/media-record.png"));
|
|
|
|
tools_captureScreenshot = tools->addAction("&Capture Screenshot");
|
|
tools_captureScreenshot->setIcon(QIcon(":/16x16/image-x-generic.png"));
|
|
|
|
tools->addSeparator();
|
|
|
|
tools_cheatEditor = tools->addAction("Cheat &Editor ...");
|
|
tools_cheatEditor->setIcon(QIcon(":/16x16/accessories-text-editor.png"));
|
|
|
|
tools_cheatFinder = tools->addAction("Cheat &Finder ...");
|
|
tools_cheatFinder->setIcon(QIcon(":/16x16/system-search.png"));
|
|
|
|
tools_stateManager = tools->addAction("&State Manager ...");
|
|
tools_stateManager->setIcon(QIcon(":/16x16/system-file-manager.png"));
|
|
|
|
tools_debugger = tools->addAction("&Debugger ...");
|
|
tools_debugger->setIcon(QIcon(":/16x16/utilities-terminal.png"));
|
|
#if !defined(DEBUGGER)
|
|
tools_debugger->setVisible(false);
|
|
#endif
|
|
|
|
help = menuBar->addMenu("&Help");
|
|
|
|
help_documentation = help->addAction("&Documentation ...");
|
|
help_documentation->setIcon(QIcon(":/16x16/text-x-generic.png"));
|
|
|
|
help_license = help->addAction("&License ...");
|
|
help_license->setIcon(QIcon(":/16x16/text-x-generic.png"));
|
|
|
|
#if !defined(PLATFORM_OSX)
|
|
help->addSeparator();
|
|
#endif
|
|
|
|
help_about = help->addAction("&About ...");
|
|
help_about->setIcon(QIcon(":/16x16/help-browser.png"));
|
|
help_about->setMenuRole(QAction::AboutRole);
|
|
|
|
//canvas
|
|
canvasContainer = new CanvasObject;
|
|
canvasContainer->setAcceptDrops(true); {
|
|
canvasContainer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
|
canvasContainer->setObjectName("backdrop");
|
|
|
|
canvasLayout = new QVBoxLayout; {
|
|
canvasLayout->setMargin(0);
|
|
canvasLayout->setAlignment(Qt::AlignCenter);
|
|
|
|
canvas = new CanvasWidget;
|
|
canvas->setAcceptDrops(true);
|
|
canvas->setFocusPolicy(Qt::StrongFocus);
|
|
canvas->setAttribute(Qt::WA_PaintOnScreen, true); //disable Qt painting on focus / resize
|
|
|
|
QPalette palette;
|
|
palette.setColor(QPalette::Window, QColor(0, 0, 0));
|
|
canvas->setPalette(palette);
|
|
canvas->setAutoFillBackground(true);
|
|
}
|
|
canvasLayout->addWidget(canvas);
|
|
}
|
|
canvasContainer->setLayout(canvasLayout);
|
|
|
|
//status bar
|
|
statusBar = new QStatusBar;
|
|
statusBar->setSizeGripEnabled(false);
|
|
statusBar->showMessage("");
|
|
systemState = new QLabel;
|
|
statusBar->addPermanentWidget(systemState);
|
|
|
|
//layout
|
|
layout = new QVBoxLayout;
|
|
layout->setMargin(0);
|
|
layout->setSpacing(0);
|
|
#if !defined(PLATFORM_OSX)
|
|
layout->addWidget(menuBar);
|
|
#endif
|
|
layout->addWidget(canvasContainer);
|
|
layout->addWidget(statusBar);
|
|
setLayout(layout);
|
|
|
|
//slots
|
|
connect(system_load, SIGNAL(triggered()), this, SLOT(loadCartridge()));
|
|
connect(system_loadSpecial_bsxSlotted, SIGNAL(triggered()), this, SLOT(loadBsxSlottedCartridge()));
|
|
connect(system_loadSpecial_bsx, SIGNAL(triggered()), this, SLOT(loadBsxCartridge()));
|
|
connect(system_loadSpecial_sufamiTurbo, SIGNAL(triggered()), this, SLOT(loadSufamiTurboCartridge()));
|
|
connect(system_loadSpecial_superGameBoy, SIGNAL(triggered()), this, SLOT(loadSuperGameBoyCartridge()));
|
|
connect(system_power, SIGNAL(triggered()), this, SLOT(power()));
|
|
connect(system_reset, SIGNAL(triggered()), this, SLOT(reset()));
|
|
connect(system_port1_none, SIGNAL(triggered()), this, SLOT(setPort1None()));
|
|
connect(system_port1_gamepad, SIGNAL(triggered()), this, SLOT(setPort1Gamepad()));
|
|
connect(system_port1_asciipad, SIGNAL(triggered()), this, SLOT(setPort1Asciipad()));
|
|
connect(system_port1_multitap, SIGNAL(triggered()), this, SLOT(setPort1Multitap()));
|
|
connect(system_port1_mouse, SIGNAL(triggered()), this, SLOT(setPort1Mouse()));
|
|
connect(system_port2_none, SIGNAL(triggered()), this, SLOT(setPort2None()));
|
|
connect(system_port2_gamepad, SIGNAL(triggered()), this, SLOT(setPort2Gamepad()));
|
|
connect(system_port2_asciipad, SIGNAL(triggered()), this, SLOT(setPort2Asciipad()));
|
|
connect(system_port2_multitap, SIGNAL(triggered()), this, SLOT(setPort2Multitap()));
|
|
connect(system_port2_mouse, SIGNAL(triggered()), this, SLOT(setPort2Mouse()));
|
|
connect(system_port2_superscope, SIGNAL(triggered()), this, SLOT(setPort2SuperScope()));
|
|
connect(system_port2_justifier, SIGNAL(triggered()), this, SLOT(setPort2Justifier()));
|
|
connect(system_port2_justifiers, SIGNAL(triggered()), this, SLOT(setPort2Justifiers()));
|
|
connect(system_exit, SIGNAL(triggered()), this, SLOT(quit()));
|
|
connect(settings_videoMode_1x, SIGNAL(triggered()), this, SLOT(setVideoMode1x()));
|
|
connect(settings_videoMode_2x, SIGNAL(triggered()), this, SLOT(setVideoMode2x()));
|
|
connect(settings_videoMode_3x, SIGNAL(triggered()), this, SLOT(setVideoMode3x()));
|
|
connect(settings_videoMode_4x, SIGNAL(triggered()), this, SLOT(setVideoMode4x()));
|
|
connect(settings_videoMode_5x, SIGNAL(triggered()), this, SLOT(setVideoMode5x()));
|
|
connect(settings_videoMode_max_normal, SIGNAL(triggered()), this, SLOT(setVideoModeMaxNormal()));
|
|
connect(settings_videoMode_max_wide, SIGNAL(triggered()), this, SLOT(setVideoModeMaxWide()));
|
|
connect(settings_videoMode_max_wideZoom, SIGNAL(triggered()), this, SLOT(setVideoModeMaxWideZoom()));
|
|
connect(settings_videoMode_correctAspectRatio, SIGNAL(triggered()), this, SLOT(toggleAspectCorrection()));
|
|
connect(settings_videoMode_ntsc, SIGNAL(triggered()), this, SLOT(setVideoNtsc()));
|
|
connect(settings_videoMode_pal, SIGNAL(triggered()), this, SLOT(setVideoPal()));
|
|
if(filter.opened()) {
|
|
connect(settings_videoFilter_configure, SIGNAL(triggered()), this, SLOT(configureFilter()));
|
|
for(unsigned i = 0; i < settings_videoFilter_list.size(); i++) {
|
|
connect(settings_videoFilter_list[i], SIGNAL(triggered()), this, SLOT(setFilter()));
|
|
}
|
|
}
|
|
connect(settings_smoothVideo, SIGNAL(triggered()), this, SLOT(toggleSmoothVideo()));
|
|
connect(settings_muteAudio, SIGNAL(triggered()), this, SLOT(muteAudio()));
|
|
connect(settings_emulationSpeed_slowest, SIGNAL(triggered()), this, SLOT(setSpeedSlowest()));
|
|
connect(settings_emulationSpeed_slow, SIGNAL(triggered()), this, SLOT(setSpeedSlow()));
|
|
connect(settings_emulationSpeed_normal, SIGNAL(triggered()), this, SLOT(setSpeedNormal()));
|
|
connect(settings_emulationSpeed_fast, SIGNAL(triggered()), this, SLOT(setSpeedFast()));
|
|
connect(settings_emulationSpeed_fastest, SIGNAL(triggered()), this, SLOT(setSpeedFastest()));
|
|
connect(settings_emulationSpeed_syncVideo, SIGNAL(triggered()), this, SLOT(syncVideo()));
|
|
connect(settings_emulationSpeed_syncAudio, SIGNAL(triggered()), this, SLOT(syncAudio()));
|
|
connect(settings_configuration, SIGNAL(triggered()), this, SLOT(showConfigWindow()));
|
|
connect(tools_movies_play, SIGNAL(triggered()), this, SLOT(playMovie()));
|
|
connect(tools_movies_stop, SIGNAL(triggered()), this, SLOT(stopMovie()));
|
|
connect(tools_movies_recordFromPowerOn, SIGNAL(triggered()), this, SLOT(recordMovieFromPowerOn()));
|
|
connect(tools_movies_recordFromHere, SIGNAL(triggered()), this, SLOT(recordMovieFromHere()));
|
|
connect(tools_captureScreenshot, SIGNAL(triggered()), this, SLOT(saveScreenshot()));
|
|
connect(tools_cheatEditor, SIGNAL(triggered()), this, SLOT(showCheatEditor()));
|
|
connect(tools_cheatFinder, SIGNAL(triggered()), this, SLOT(showCheatFinder()));
|
|
connect(tools_stateManager, SIGNAL(triggered()), this, SLOT(showStateManager()));
|
|
connect(tools_debugger, SIGNAL(triggered()), this, SLOT(showDebugger()));
|
|
connect(help_documentation, SIGNAL(triggered()), this, SLOT(showDocumentation()));
|
|
connect(help_license, SIGNAL(triggered()), this, SLOT(showLicense()));
|
|
connect(help_about, SIGNAL(triggered()), this, SLOT(showAbout()));
|
|
|
|
syncUi();
|
|
}
|
|
|
|
void MainWindow::syncUi() {
|
|
system_power->setEnabled(SNES::cartridge.loaded());
|
|
system_power->setChecked(application.power == true);
|
|
system_power->setEnabled(SNES::cartridge.loaded());
|
|
system_reset->setEnabled(SNES::cartridge.loaded() && application.power);
|
|
|
|
system_port1_none->setChecked (config().input.port1 == ControllerPort1::None);
|
|
system_port1_gamepad->setChecked (config().input.port1 == ControllerPort1::Gamepad);
|
|
system_port1_asciipad->setChecked (config().input.port1 == ControllerPort1::Asciipad);
|
|
system_port1_multitap->setChecked (config().input.port1 == ControllerPort1::Multitap);
|
|
system_port1_mouse->setChecked (config().input.port1 == ControllerPort1::Mouse);
|
|
|
|
system_port2_none->setChecked (config().input.port2 == ControllerPort2::None);
|
|
system_port2_gamepad->setChecked (config().input.port2 == ControllerPort2::Gamepad);
|
|
system_port2_asciipad->setChecked (config().input.port2 == ControllerPort2::Asciipad);
|
|
system_port2_multitap->setChecked (config().input.port2 == ControllerPort2::Multitap);
|
|
system_port2_mouse->setChecked (config().input.port2 == ControllerPort2::Mouse);
|
|
system_port2_superscope->setChecked(config().input.port2 == ControllerPort2::SuperScope);
|
|
system_port2_justifier->setChecked (config().input.port2 == ControllerPort2::Justifier);
|
|
system_port2_justifiers->setChecked(config().input.port2 == ControllerPort2::Justifiers);
|
|
|
|
settings_videoMode_1x->setChecked (config().video.context->multiplier == 1);
|
|
settings_videoMode_2x->setChecked (config().video.context->multiplier == 2);
|
|
settings_videoMode_3x->setChecked (config().video.context->multiplier == 3);
|
|
settings_videoMode_4x->setChecked (config().video.context->multiplier == 4);
|
|
settings_videoMode_5x->setChecked (config().video.context->multiplier == 5);
|
|
settings_videoMode_max_normal->setChecked(config().video.context->multiplier == 6);
|
|
settings_videoMode_max_wide->setChecked (config().video.context->multiplier == 7);
|
|
settings_videoMode_max_wideZoom->setChecked (config().video.context->multiplier == 8);
|
|
|
|
settings_videoMode_max_normal->setVisible(config().video.isFullscreen == true);
|
|
settings_videoMode_max_wide->setVisible (config().video.isFullscreen == true);
|
|
settings_videoMode_max_wideZoom->setVisible (config().video.isFullscreen == true);
|
|
|
|
settings_videoMode_correctAspectRatio->setChecked(config().video.context->correctAspectRatio);
|
|
settings_videoMode_ntsc->setChecked(config().video.context->region == 0);
|
|
settings_videoMode_pal->setChecked (config().video.context->region == 1);
|
|
|
|
if(filter.opened()) {
|
|
//only enable configuration option if the active filter supports it ...
|
|
settings_videoFilter_configure->setEnabled(filter.settings());
|
|
|
|
for(unsigned i = 0; i < settings_videoFilter_list.size(); i++) {
|
|
settings_videoFilter_list[i]->setChecked(config().video.context->swFilter == i);
|
|
}
|
|
}
|
|
|
|
settings_smoothVideo->setChecked(config().video.context->hwFilter == 1);
|
|
settings_muteAudio->setChecked(config().audio.mute);
|
|
|
|
settings_emulationSpeed_slowest->setChecked(config().system.speed == 0);
|
|
settings_emulationSpeed_slow->setChecked (config().system.speed == 1);
|
|
settings_emulationSpeed_normal->setChecked (config().system.speed == 2);
|
|
settings_emulationSpeed_fast->setChecked (config().system.speed == 3);
|
|
settings_emulationSpeed_fastest->setChecked(config().system.speed == 4);
|
|
|
|
settings_emulationSpeed_syncVideo->setChecked(config().video.synchronize);
|
|
settings_emulationSpeed_syncAudio->setChecked(config().audio.synchronize);
|
|
|
|
//movies contian save states to synchronize playback to recorded input
|
|
tools_movies->setEnabled(SNES::cartridge.loaded() && cartridge.saveStatesSupported());
|
|
if(tools_movies->isEnabled()) {
|
|
tools_movies_play->setEnabled(movie.state == Movie::Inactive);
|
|
tools_movies_stop->setEnabled(movie.state != Movie::Inactive);
|
|
tools_movies_recordFromPowerOn->setEnabled(movie.state == Movie::Inactive);
|
|
tools_movies_recordFromHere->setEnabled(movie.state == Movie::Inactive);
|
|
}
|
|
}
|
|
|
|
bool MainWindow::isActive() {
|
|
return isActiveWindow() && !isMinimized();
|
|
}
|
|
|
|
void MainWindow::loadCartridge() {
|
|
fileBrowser->setWindowTitle("Load Cartridge");
|
|
fileBrowser->loadCartridge(FileBrowser::LoadDirect);
|
|
}
|
|
|
|
void MainWindow::loadBsxSlottedCartridge() {
|
|
loaderWindow->loadBsxSlottedCartridge("", "");
|
|
}
|
|
|
|
void MainWindow::loadBsxCartridge() {
|
|
loaderWindow->loadBsxCartridge(config().path.bsx, "");
|
|
}
|
|
|
|
void MainWindow::loadSufamiTurboCartridge() {
|
|
loaderWindow->loadSufamiTurboCartridge(config().path.st, "", "");
|
|
}
|
|
|
|
void MainWindow::loadSuperGameBoyCartridge() {
|
|
loaderWindow->loadSuperGameBoyCartridge(config().path.sgb, "");
|
|
}
|
|
|
|
void MainWindow::power() {
|
|
system_power->toggleChecked();
|
|
if(system_power->isChecked()) {
|
|
utility.modifySystemState(Utility::PowerOn);
|
|
} else {
|
|
utility.modifySystemState(Utility::PowerOff);
|
|
}
|
|
}
|
|
|
|
void MainWindow::reset() {
|
|
utility.modifySystemState(Utility::Reset);
|
|
}
|
|
|
|
void MainWindow::setPort1None() {
|
|
config().input.port1 = ControllerPort1::None;
|
|
SNES::config.controller_port1 = SNES::Input::Device::None;
|
|
utility.updateControllers();
|
|
}
|
|
|
|
void MainWindow::setPort1Gamepad() {
|
|
config().input.port1 = ControllerPort1::Gamepad;
|
|
SNES::config.controller_port1 = SNES::Input::Device::Joypad;
|
|
utility.updateControllers();
|
|
}
|
|
|
|
void MainWindow::setPort1Asciipad() {
|
|
config().input.port1 = ControllerPort1::Asciipad;
|
|
SNES::config.controller_port1 = SNES::Input::Device::Joypad;
|
|
utility.updateControllers();
|
|
}
|
|
|
|
void MainWindow::setPort1Multitap() {
|
|
config().input.port1 = ControllerPort1::Multitap;
|
|
SNES::config.controller_port1 = SNES::Input::Device::Multitap;
|
|
utility.updateControllers();
|
|
}
|
|
|
|
void MainWindow::setPort1Mouse() {
|
|
config().input.port1 = ControllerPort1::Mouse;
|
|
SNES::config.controller_port1 = SNES::Input::Device::Mouse;
|
|
utility.updateControllers();
|
|
}
|
|
|
|
void MainWindow::setPort2None() {
|
|
config().input.port2 = ControllerPort2::None;
|
|
SNES::config.controller_port2 = SNES::Input::Device::None;
|
|
utility.updateControllers();
|
|
}
|
|
|
|
void MainWindow::setPort2Gamepad() {
|
|
config().input.port2 = ControllerPort2::Gamepad;
|
|
SNES::config.controller_port2 = SNES::Input::Device::Joypad;
|
|
utility.updateControllers();
|
|
}
|
|
|
|
void MainWindow::setPort2Asciipad() {
|
|
config().input.port2 = ControllerPort2::Asciipad;
|
|
SNES::config.controller_port2 = SNES::Input::Device::Joypad;
|
|
utility.updateControllers();
|
|
}
|
|
|
|
void MainWindow::setPort2Multitap() {
|
|
config().input.port2 = ControllerPort2::Multitap;
|
|
SNES::config.controller_port2 = SNES::Input::Device::Multitap;
|
|
utility.updateControllers();
|
|
}
|
|
|
|
void MainWindow::setPort2Mouse() {
|
|
config().input.port2 = ControllerPort2::Mouse;
|
|
SNES::config.controller_port2 = SNES::Input::Device::Mouse;
|
|
utility.updateControllers();
|
|
}
|
|
|
|
void MainWindow::setPort2SuperScope() {
|
|
config().input.port2 = ControllerPort2::SuperScope;
|
|
SNES::config.controller_port2 = SNES::Input::Device::SuperScope;
|
|
utility.updateControllers();
|
|
}
|
|
|
|
void MainWindow::setPort2Justifier() {
|
|
config().input.port2 = ControllerPort2::Justifier;
|
|
SNES::config.controller_port2 = SNES::Input::Device::Justifier;
|
|
utility.updateControllers();
|
|
}
|
|
|
|
void MainWindow::setPort2Justifiers() {
|
|
config().input.port2 = ControllerPort2::Justifiers;
|
|
SNES::config.controller_port2 = SNES::Input::Device::Justifiers;
|
|
utility.updateControllers();
|
|
}
|
|
|
|
void MainWindow::quit() {
|
|
hide();
|
|
application.terminate = true;
|
|
}
|
|
|
|
void MainWindow::setVideoMode1x() { utility.setScale(1); }
|
|
void MainWindow::setVideoMode2x() { utility.setScale(2); }
|
|
void MainWindow::setVideoMode3x() { utility.setScale(3); }
|
|
void MainWindow::setVideoMode4x() { utility.setScale(4); }
|
|
void MainWindow::setVideoMode5x() { utility.setScale(5); }
|
|
void MainWindow::setVideoModeMaxNormal() { utility.setScale(6); }
|
|
void MainWindow::setVideoModeMaxWide() { utility.setScale(7); }
|
|
void MainWindow::setVideoModeMaxWideZoom() { utility.setScale(8); }
|
|
|
|
void MainWindow::toggleAspectCorrection() { utility.toggleAspectCorrection(); }
|
|
|
|
void MainWindow::setVideoNtsc() { utility.setNtscMode(); }
|
|
void MainWindow::setVideoPal() { utility.setPalMode(); }
|
|
|
|
void MainWindow::toggleSmoothVideo() { utility.toggleSmoothVideoOutput(); }
|
|
|
|
void MainWindow::configureFilter() {
|
|
QWidget *widget = filter.settings();
|
|
if(widget) {
|
|
widget->show();
|
|
widget->activateWindow();
|
|
widget->raise();
|
|
}
|
|
}
|
|
|
|
void MainWindow::setFilter() {
|
|
for(unsigned i = 0; i < settings_videoFilter_list.size(); i++) {
|
|
if(sender() == settings_videoFilter_list[i]) {
|
|
config().video.context->swFilter = i;
|
|
utility.updateSoftwareFilter();
|
|
syncUi();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
void MainWindow::muteAudio() {
|
|
settings_muteAudio->toggleChecked();
|
|
config().audio.mute = settings_muteAudio->isChecked();
|
|
}
|
|
|
|
void MainWindow::setSpeedSlowest() { config().system.speed = 0; utility.updateEmulationSpeed(); syncUi(); }
|
|
void MainWindow::setSpeedSlow() { config().system.speed = 1; utility.updateEmulationSpeed(); syncUi(); }
|
|
void MainWindow::setSpeedNormal() { config().system.speed = 2; utility.updateEmulationSpeed(); syncUi(); }
|
|
void MainWindow::setSpeedFast() { config().system.speed = 3; utility.updateEmulationSpeed(); syncUi(); }
|
|
void MainWindow::setSpeedFastest() { config().system.speed = 4; utility.updateEmulationSpeed(); syncUi(); }
|
|
|
|
void MainWindow::syncVideo() { utility.toggleSynchronizeVideo(); }
|
|
void MainWindow::syncAudio() { utility.toggleSynchronizeAudio(); }
|
|
|
|
void MainWindow::showConfigWindow() { settingsWindow->show(); }
|
|
|
|
void MainWindow::playMovie() {
|
|
movie.chooseFile();
|
|
syncUi();
|
|
}
|
|
|
|
void MainWindow::stopMovie() {
|
|
movie.stop();
|
|
syncUi();
|
|
}
|
|
|
|
void MainWindow::recordMovieFromPowerOn() {
|
|
utility.modifySystemState(Utility::PowerCycle);
|
|
movie.record();
|
|
syncUi();
|
|
}
|
|
|
|
void MainWindow::recordMovieFromHere() {
|
|
movie.record();
|
|
syncUi();
|
|
}
|
|
|
|
void MainWindow::saveScreenshot() {
|
|
//tell SNES::Interface to save a screenshot at the next video_refresh() event
|
|
interface.saveScreenshot = true;
|
|
}
|
|
|
|
void MainWindow::showCheatEditor() { toolsWindow->tab->setCurrentIndex(0); toolsWindow->show(); }
|
|
void MainWindow::showCheatFinder() { toolsWindow->tab->setCurrentIndex(1); toolsWindow->show(); }
|
|
void MainWindow::showStateManager() { toolsWindow->tab->setCurrentIndex(2); toolsWindow->show(); }
|
|
|
|
void MainWindow::showDebugger() {
|
|
#if defined(DEBUGGER)
|
|
debugger->show();
|
|
#endif
|
|
}
|
|
|
|
void MainWindow::showDocumentation() {
|
|
QFile file(":/documentation.html");
|
|
if(file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
|
htmlViewerWindow->show("Usage Documentation", file.readAll().constData());
|
|
file.close();
|
|
}
|
|
}
|
|
|
|
void MainWindow::showLicense() {
|
|
QFile file(":/license.html");
|
|
if(file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
|
htmlViewerWindow->show("License Agreement", file.readAll().constData());
|
|
file.close();
|
|
}
|
|
}
|
|
void MainWindow::showAbout() {
|
|
aboutWindow->show();
|
|
}
|
|
|
|
void MainWindow::resizeEvent(QResizeEvent *event) {
|
|
Window::resizeEvent(event);
|
|
QApplication::processEvents();
|
|
}
|
|
|
|
void MainWindow::closeEvent(QCloseEvent *event) {
|
|
Window::closeEvent(event);
|
|
quit();
|
|
}
|
|
|
|
//============
|
|
//CanvasObject
|
|
//============
|
|
|
|
//implement drag-and-drop support:
|
|
//drag cartridge image onto main window canvas area to load
|
|
|
|
void CanvasObject::dragEnterEvent(QDragEnterEvent *event) {
|
|
if(event->mimeData()->hasUrls()) {
|
|
//do not accept multiple files at once
|
|
if(event->mimeData()->urls().count() == 1) event->acceptProposedAction();
|
|
}
|
|
}
|
|
|
|
void CanvasObject::dropEvent(QDropEvent *event) {
|
|
if(event->mimeData()->hasUrls()) {
|
|
QList<QUrl> list = event->mimeData()->urls();
|
|
if(list.count() == 1) cartridge.loadNormal(list.at(0).toLocalFile().toUtf8().constData());
|
|
}
|
|
}
|
|
|
|
//accept all key events for this widget to prevent system chime from playing on OS X
|
|
//key events are actually handled by Input class
|
|
|
|
void CanvasObject::keyPressEvent(QKeyEvent *event) {
|
|
}
|
|
|
|
void CanvasObject::keyReleaseEvent(QKeyEvent *event) {
|
|
}
|
|
|
|
//===========
|
|
//CanvasWidget
|
|
//============
|
|
|
|
//custom video render and mouse capture functionality
|
|
|
|
QPaintEngine* CanvasWidget::paintEngine() const {
|
|
if(SNES::cartridge.loaded()) {
|
|
video.refresh();
|
|
return 0;
|
|
}
|
|
return QWidget::paintEngine();
|
|
}
|
|
|
|
void CanvasWidget::mouseReleaseEvent(QMouseEvent *event) {
|
|
//acquire exclusive mode access to mouse when video output widget is clicked
|
|
//(will only acquire if cart is loaded, and mouse / lightgun is in use.)
|
|
utility.acquireMouse();
|
|
}
|
|
|
|
void CanvasWidget::paintEvent(QPaintEvent *event) {
|
|
event->ignore();
|
|
}
|