diff --git a/bsnes/Makefile b/bsnes/Makefile index b82a6065..9051d500 100755 --- a/bsnes/Makefile +++ b/bsnes/Makefile @@ -1,6 +1,6 @@ include nall/Makefile snes := snes -profile := performance +profile := compatibility ui := qt # compiler diff --git a/bsnes/qt/application/init.cpp b/bsnes/qt/application/init.cpp index e5fed0e8..db2d041d 100755 --- a/bsnes/qt/application/init.cpp +++ b/bsnes/qt/application/init.cpp @@ -28,6 +28,7 @@ void Application::init() { htmlViewerWindow = new HtmlViewerWindow; aboutWindow = new AboutWindow; fileBrowser = new FileBrowser; + stateSelectWindow = new StateSelectWindow; //window must be onscreen and visible before initializing video interface utility.updateSystemState(); diff --git a/bsnes/qt/base/base.cpp b/bsnes/qt/base/base.cpp index 8f1ad52f..69e9152c 100755 --- a/bsnes/qt/base/base.cpp +++ b/bsnes/qt/base/base.cpp @@ -5,3 +5,4 @@ #include "htmlviewer.cpp" #include "loader.cpp" #include "main.cpp" +#include "stateselect.cpp" diff --git a/bsnes/qt/base/filebrowser.cpp b/bsnes/qt/base/filebrowser.cpp index 0d427004..3c999087 100755 --- a/bsnes/qt/base/filebrowser.cpp +++ b/bsnes/qt/base/filebrowser.cpp @@ -1,7 +1,32 @@ #include "filebrowser.moc" FileBrowser *fileBrowser; +void FileBrowser::chooseFile() { + if(config().diskBrowser.useCommonDialogs == true) { + audio.clear(); + QString qfilename = QFileDialog::getOpenFileName(0, + windowTitle(), fileSystemModel->rootPath(), "All Files (*)" + ); + string filename = qfilename.toUtf8().constData(); + if(filename != "") onAccept(filename); + return; + } + + showLoad(); +} + void FileBrowser::chooseFolder() { + if(config().diskBrowser.useCommonDialogs == true) { + audio.clear(); + QString qfilename = QFileDialog::getExistingDirectory(0, + windowTitle(), config().path.current.folder, + QFileDialog::ShowDirsOnly + ); + string filename = qfilename.toUtf8().constData(); + if(filename != "") onAccept(filename); + return; + } + previewFrame->hide(); showFolder(); } @@ -12,7 +37,23 @@ void FileBrowser::loadCartridge(CartridgeMode mode, signed filterIndex) { onActivate = { &FileBrowser::onAcceptCartridge, this }; onAccept = { &FileBrowser::onAcceptCartridge, this }; - setPath(config().path.rom == "" ? config().path.current.cartridge : config().path.rom); + string defaultPath = config().path.rom == "" ? config().path.current.cartridge : config().path.rom; + + if(config().diskBrowser.useCommonDialogs == true) { + audio.clear(); + QString qfilename = QFileDialog::getOpenFileName(0, + windowTitle(), defaultPath, string( + "SNES cartridges (*.sfc *.bs *.st *.gb *.sgb *.gbc", reader.extensionList, reader.compressionList, ");;", + "All files (*)" + ) + ); + string filename = qfilename.toUtf8().constData(); + if(filename != "") onAccept(filename); + config().path.current.cartridge = nall::dir(filename); + return; + } + + setPath(defaultPath); setNameFilters(string() << "SNES cartridges (*.sfc" << reader.extensionList << reader.compressionList << ")\n" << "BS-X cartridges (*.bs" << reader.compressionList << ")\n" diff --git a/bsnes/qt/base/filebrowser.moc.hpp b/bsnes/qt/base/filebrowser.moc.hpp index f3051698..1bec80c2 100755 --- a/bsnes/qt/base/filebrowser.moc.hpp +++ b/bsnes/qt/base/filebrowser.moc.hpp @@ -6,6 +6,7 @@ public: function onActivate; function onAccept; + void chooseFile(); void chooseFolder(); enum CartridgeMode { LoadDirect, LoadBase, LoadSlot1, LoadSlot2 } cartridgeMode; void loadCartridge(CartridgeMode, signed = -1); diff --git a/bsnes/qt/base/main.cpp b/bsnes/qt/base/main.cpp index 8fdf33e8..02125f4b 100755 --- a/bsnes/qt/base/main.cpp +++ b/bsnes/qt/base/main.cpp @@ -153,7 +153,7 @@ MainWindow::MainWindow() { tools->addSeparator(); - tools_loadState = tools->addMenu("Load Quick State"); + tools_loadState = tools->addMenu("&Load Quick State"); for(unsigned i = 0; i < 10; i++) { QAction *loadAction = new QAction(string("Slot ", i + 1), 0); loadAction->setData(i); @@ -161,7 +161,7 @@ MainWindow::MainWindow() { tools_loadState->addAction(loadAction); } - tools_saveState = tools->addMenu("Save Quick State"); + tools_saveState = tools->addMenu("&Save Quick State"); for(unsigned i = 0; i < 10; i++) { QAction *saveAction = new QAction(string("Slot ", i + 1), 0); saveAction->setData(i); @@ -177,6 +177,8 @@ MainWindow::MainWindow() { tools_stateManager = tools->addAction("&State Manager ..."); + tools_effectToggle = tools->addAction("Effect &Toggle ..."); + tools_debugger = tools->addAction("&Debugger ..."); #if !defined(DEBUGGER) tools_debugger->setVisible(false); @@ -295,6 +297,7 @@ MainWindow::MainWindow() { 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_effectToggle, SIGNAL(triggered()), this, SLOT(showEffectToggle())); connect(tools_debugger, SIGNAL(triggered()), this, SLOT(showDebugger())); connect(help_documentation, SIGNAL(triggered()), this, SLOT(showDocumentation())); connect(help_license, SIGNAL(triggered()), this, SLOT(showLicense())); @@ -588,6 +591,7 @@ void MainWindow::saveState() { 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::showEffectToggle() { toolsWindow->tab->setCurrentIndex(3); toolsWindow->show(); } void MainWindow::showDebugger() { #if defined(DEBUGGER) diff --git a/bsnes/qt/base/main.moc.hpp b/bsnes/qt/base/main.moc.hpp index fee112c3..e7560fd5 100755 --- a/bsnes/qt/base/main.moc.hpp +++ b/bsnes/qt/base/main.moc.hpp @@ -85,6 +85,7 @@ public: QAction *tools_cheatEditor; QAction *tools_cheatFinder; QAction *tools_stateManager; + QAction *tools_effectToggle; QAction *tools_debugger; QMenu *help; QAction *help_documentation; @@ -157,6 +158,7 @@ public slots: void showCheatEditor(); void showCheatFinder(); void showStateManager(); + void showEffectToggle(); void showDebugger(); void showDocumentation(); void showLicense(); diff --git a/bsnes/qt/base/stateselect.cpp b/bsnes/qt/base/stateselect.cpp new file mode 100755 index 00000000..550ed5f3 --- /dev/null +++ b/bsnes/qt/base/stateselect.cpp @@ -0,0 +1,57 @@ +#include "stateselect.moc" +StateSelectWindow *stateSelectWindow; + +void StateSelectWindow::setSlot(unsigned slot) { + state.active = slot; + hide(); + utility.showMessage(string("Quick state ", slot + 1, " selected.")); +} + +void StateSelectWindow::keyReleaseEvent(QKeyEvent *event) { + switch(event->key()) { + case Qt::Key_1: return setSlot(0); + case Qt::Key_2: return setSlot(1); + case Qt::Key_3: return setSlot(2); + case Qt::Key_4: return setSlot(3); + case Qt::Key_5: return setSlot(4); + case Qt::Key_6: return setSlot(5); + case Qt::Key_7: return setSlot(6); + case Qt::Key_8: return setSlot(7); + case Qt::Key_9: return setSlot(8); + case Qt::Key_0: return setSlot(9); + } + return Window::keyReleaseEvent(event); +} + +StateSelectWindow::StateSelectWindow() { + setObjectName("state-select-window"); + setWindowTitle("State Selection"); + setGeometryString(&config().geometry.stateSelectWindow); + + layout = new QGridLayout; + layout->setMargin(Style::WindowMargin); + layout->setSpacing(Style::WidgetSpacing); + setLayout(layout); + + slot[0] = new QPushButton("Slot &1"); + slot[1] = new QPushButton("Slot &2"); + slot[2] = new QPushButton("Slot &3"); + slot[3] = new QPushButton("Slot &4"); + slot[4] = new QPushButton("Slot &5"); + slot[5] = new QPushButton("Slot &6"); + slot[6] = new QPushButton("Slot &7"); + slot[7] = new QPushButton("Slot &8"); + slot[8] = new QPushButton("Slot &9"); + slot[9] = new QPushButton("Slot 1&0"); + for(unsigned i = 0; i < 10; i++) { + layout->addWidget(slot[i], i / 5, i % 5); + connect(slot[i], SIGNAL(released()), this, SLOT(slotClicked())); + } +} + +void StateSelectWindow::slotClicked() { + QPushButton *s = (QPushButton*)sender(); + for(unsigned i = 0; i < 10; i++) { + if(slot[i] == s) return setSlot(i); + } +} diff --git a/bsnes/qt/base/stateselect.moc.hpp b/bsnes/qt/base/stateselect.moc.hpp new file mode 100755 index 00000000..12c6e0bd --- /dev/null +++ b/bsnes/qt/base/stateselect.moc.hpp @@ -0,0 +1,16 @@ +class StateSelectWindow : public Window { + Q_OBJECT + +public: + QGridLayout *layout; + QPushButton *slot[10]; + + void setSlot(unsigned slot); + void keyReleaseEvent(QKeyEvent*); + StateSelectWindow(); + +public slots: + void slotClicked(); +}; + +extern StateSelectWindow *stateSelectWindow; diff --git a/bsnes/qt/config.cpp b/bsnes/qt/config.cpp index cb5425cd..2b62f405 100755 --- a/bsnes/qt/config.cpp +++ b/bsnes/qt/config.cpp @@ -11,10 +11,7 @@ bool Configuration::load(const char *filename) { } Configuration::Configuration() { - //======== //external - //======== - attach((unsigned&)(SNES::config.controller_port1 = SNES::Input::Device::Joypad), "snes.controllerPort1"); attach((unsigned&)(SNES::config.controller_port2 = SNES::Input::Device::Joypad), "snes.controllerPort2"); attach((unsigned&)(SNES::config.expansion_port = SNES::System::ExpansionPortDevice::BSX), "snes.expansionPort"); @@ -33,10 +30,7 @@ Configuration::Configuration() { attach(SNES::config.superfx.speed = 0, "superfx.speed", "0 = Auto-select, 1 = Force 10.74MHz, 2 = Force 21.48MHz"); - //======== //internal - //======== - attach(system.profile = "", "system.profile"); attach(system.video = "", "system.video"); attach(system.audio = "", "system.audio"); @@ -51,6 +45,7 @@ Configuration::Configuration() { attach(system.autoSaveMemory = false, "system.autoSaveMemory", "Automatically save cartridge back-up RAM once every minute"); attach(system.rewindEnabled = false, "system.rewindEnabled", "Automatically save states periodically to allow auto-rewind support"); + attach(diskBrowser.useCommonDialogs = false, "diskBrowser.useCommonDialogs"); attach(diskBrowser.showPanel = true, "diskBrowser.showPanel"); attach(file.applyPatches = true, "file.applyPatches"); @@ -126,6 +121,7 @@ Configuration::Configuration() { attach(geometry.mainWindow = "", "geometry.mainWindow"); attach(geometry.loaderWindow = "", "geometry.loaderWindow"); + attach(geometry.stateSelectWindow = "", "geometry.stateSelectWindow"); attach(geometry.htmlViewerWindow = "", "geometry.htmlViewerWindow"); attach(geometry.aboutWindow = "", "geometry.aboutWindow"); attach(geometry.fileBrowser = "", "geometry.fileBrowser"); diff --git a/bsnes/qt/config.hpp b/bsnes/qt/config.hpp index 07116f9d..67b5c2e6 100755 --- a/bsnes/qt/config.hpp +++ b/bsnes/qt/config.hpp @@ -20,6 +20,7 @@ public: } file; struct DiskBrowser { + bool useCommonDialogs; bool showPanel; } diskBrowser; @@ -81,6 +82,7 @@ public: struct Geometry { string mainWindow; string loaderWindow; + string stateSelectWindow; string htmlViewerWindow; string aboutWindow; string fileBrowser; diff --git a/bsnes/qt/input/userinterface-states.cpp b/bsnes/qt/input/userinterface-states.cpp index 32bf1993..809c928c 100755 --- a/bsnes/qt/input/userinterface-states.cpp +++ b/bsnes/qt/input/userinterface-states.cpp @@ -2,10 +2,6 @@ InputGroup userInterfaceStates(InputCategory::UserInterface, "States"); namespace UserInterfaceStates { -//note: interally, there are ten quick save slots: 0-9 -//for the sake of users, this is displayed as 1-10 in the GUI -unsigned activeState = 0; - struct Rewind : HotkeyInput { void pressed() { ::state.rewind(); @@ -19,30 +15,41 @@ struct Rewind : HotkeyInput { struct LoadActiveState : HotkeyInput { void pressed() { - ::state.load(activeState); + ::state.load(::state.active); } LoadActiveState() : HotkeyInput("Load Active Quick State", "input.userInterface.states.loadActiveQuickState") { - name = "KB0::F2"; + name = "KB0::F4"; userInterfaceStates.attach(this); } } loadActiveState; struct SaveActiveState : HotkeyInput { void pressed() { - ::state.save(activeState); + ::state.save(::state.active); } SaveActiveState() : HotkeyInput("Save Active Quick State", "input.userInterface.states.saveActiveQuickState") { - name = "Shift+KB0::F2"; + name = "KB0::F2"; userInterfaceStates.attach(this); } } saveActiveState; +struct SelectActiveState : HotkeyInput { + void pressed() { + stateSelectWindow->show(); + } + + SelectActiveState() : HotkeyInput("Select Active Quick State", "input.userInterface.states.selectActiveQuicKState") { + name = "KB0::F3"; + userInterfaceStates.attach(this); + } +} selectActiveState; + struct DecrementAndLoadState : HotkeyInput { void pressed() { - activeState = (activeState + 10 - 1) % 10; - ::state.load(activeState); + ::state.active = (::state.active + 10 - 1) % 10; + ::state.load(::state.active); } DecrementAndLoadState() : HotkeyInput("Decrement and Load State", "input.userInterface.states.decrementAndLoadState") { @@ -52,8 +59,8 @@ struct DecrementAndLoadState : HotkeyInput { struct SaveAndIncrementState : HotkeyInput { void pressed() { - ::state.save(activeState); - activeState = (activeState + 10 + 1) % 10; + ::state.save(::state.active); + ::state.active = (::state.active + 10 + 1) % 10; } SaveAndIncrementState() : HotkeyInput("Save and Increment State", "input.userInterface.states.saveAndIncrementState") { @@ -63,24 +70,22 @@ struct SaveAndIncrementState : HotkeyInput { struct DecrementActiveState : HotkeyInput { void pressed() { - activeState = (activeState + 10 - 1) % 10; - utility.showMessage(string() << "Quick state " << (activeState + 1) << " selected."); + ::state.active = (::state.active + 10 - 1) % 10; + utility.showMessage(string() << "Quick state " << (::state.active + 1) << " selected."); } DecrementActiveState() : HotkeyInput("Decrement Active Quick State Slot", "input.userInterface.states.decrementActiveQuickState") { - name = "KB0::F3"; userInterfaceStates.attach(this); } } decrementActiveState; struct IncrementActiveState : HotkeyInput { void pressed() { - activeState = (activeState + 10 + 1) % 10; - utility.showMessage(string() << "Quick state " << (activeState + 1) << " selected."); + ::state.active = (::state.active + 10 + 1) % 10; + utility.showMessage(string() << "Quick state " << (::state.active + 1) << " selected."); } IncrementActiveState() : HotkeyInput("Increment Active Quick State Slot", "input.userInterface.states.incrementActiveQuickState") { - name = "KB0::F4"; userInterfaceStates.attach(this); } } incrementActiveState; diff --git a/bsnes/qt/movie/movie.cpp b/bsnes/qt/movie/movie.cpp index 446fcc10..8411c203 100755 --- a/bsnes/qt/movie/movie.cpp +++ b/bsnes/qt/movie/movie.cpp @@ -9,7 +9,7 @@ void Movie::chooseFile() { fileBrowser->setWindowTitle("Select Movie"); fileBrowser->setPath(config().path.current.movie); fileBrowser->setNameFilters("bsnes Movies (*.bsv)"); - fileBrowser->showLoad(); + fileBrowser->chooseFile(); } void Movie::play(const string &filename) { diff --git a/bsnes/qt/settings/advanced.cpp b/bsnes/qt/settings/advanced.cpp index f25bd1e8..acf0c8aa 100755 --- a/bsnes/qt/settings/advanced.cpp +++ b/bsnes/qt/settings/advanced.cpp @@ -106,12 +106,15 @@ AdvancedSettingsWindow::AdvancedSettingsWindow() { focusButtonGroup->addButton(focusAllow); focusLayout->addWidget(focusAllow); - rewindTitle = new QLabel("Rewind support:"); - layout->addWidget(rewindTitle); + miscTitle = new QLabel("Miscellaneous:"); + layout->addWidget(miscTitle); - rewindEnable = new QCheckBox("Enable"); + rewindEnable = new QCheckBox("Enable Rewind Support"); layout->addWidget(rewindEnable); + useCommonDialogs = new QCheckBox("Use Native OS File Dialogs"); + layout->addWidget(useCommonDialogs); + initializeUi(); connect(videoDriver, SIGNAL(currentIndexChanged(int)), this, SLOT(videoDriverChange(int))); @@ -126,6 +129,7 @@ AdvancedSettingsWindow::AdvancedSettingsWindow() { connect(focusIgnore, SIGNAL(pressed()), this, SLOT(ignoreInputWithoutFocus())); connect(focusAllow, SIGNAL(pressed()), this, SLOT(allowInputWithoutFocus())); connect(rewindEnable, SIGNAL(stateChanged(int)), this, SLOT(toggleRewindEnable())); + connect(useCommonDialogs, SIGNAL(stateChanged(int)), this, SLOT(toggleUseCommonDialogs())); } void AdvancedSettingsWindow::initializeUi() { @@ -161,6 +165,7 @@ void AdvancedSettingsWindow::initializeUi() { focusAllow->setChecked (config().input.focusPolicy == Configuration::Input::FocusPolicyAllowInput); rewindEnable->setChecked(config().system.rewindEnabled); + useCommonDialogs->setChecked(config().diskBrowser.useCommonDialogs); } void AdvancedSettingsWindow::videoDriverChange(int index) { @@ -190,3 +195,7 @@ void AdvancedSettingsWindow::toggleRewindEnable() { config().system.rewindEnabled = rewindEnable->isChecked(); state.resetHistory(); } + +void AdvancedSettingsWindow::toggleUseCommonDialogs() { + config().diskBrowser.useCommonDialogs = useCommonDialogs->isChecked(); +} diff --git a/bsnes/qt/settings/advanced.moc.hpp b/bsnes/qt/settings/advanced.moc.hpp index 42fd41a7..4fdb12ca 100755 --- a/bsnes/qt/settings/advanced.moc.hpp +++ b/bsnes/qt/settings/advanced.moc.hpp @@ -34,8 +34,9 @@ public: QRadioButton *focusIgnore; QRadioButton *focusAllow; - QLabel *rewindTitle; + QLabel *miscTitle; QCheckBox *rewindEnable; + QCheckBox *useCommonDialogs; void initializeUi(); AdvancedSettingsWindow(); @@ -53,6 +54,7 @@ public slots: void ignoreInputWithoutFocus(); void allowInputWithoutFocus(); void toggleRewindEnable(); + void toggleUseCommonDialogs(); }; extern AdvancedSettingsWindow *advancedSettingsWindow; diff --git a/bsnes/qt/settings/video.cpp b/bsnes/qt/settings/video.cpp index aa661cb9..e0bb0932 100755 --- a/bsnes/qt/settings/video.cpp +++ b/bsnes/qt/settings/video.cpp @@ -308,7 +308,7 @@ void VideoSettingsWindow::selectFragmentShader() { fileBrowser->setWindowTitle("Select Fragment Shader"); fileBrowser->setPath(config().path.current.shader); fileBrowser->setNameFilters("All files (*)"); - fileBrowser->showLoad(); + fileBrowser->chooseFile(); } void VideoSettingsWindow::selectVertexShader() { @@ -318,7 +318,7 @@ void VideoSettingsWindow::selectVertexShader() { fileBrowser->setWindowTitle("Select Vertex Shader"); fileBrowser->setPath(config().path.current.shader); fileBrowser->setNameFilters("All files (*)"); - fileBrowser->showLoad(); + fileBrowser->chooseFile(); } void VideoSettingsWindow::defaultFragmentShader() { assignFragmentShader(""); } diff --git a/bsnes/qt/state/state.cpp b/bsnes/qt/state/state.cpp index 5773f201..b35a9929 100755 --- a/bsnes/qt/state/state.cpp +++ b/bsnes/qt/state/state.cpp @@ -86,6 +86,7 @@ bool State::rewind() { } State::State() { + active = 0; historySize = 120; history = new serializer[historySize]; for(unsigned i = 0; i < historySize; i++) history[i] = 0; diff --git a/bsnes/qt/state/state.hpp b/bsnes/qt/state/state.hpp index a91513b4..5bc4d980 100755 --- a/bsnes/qt/state/state.hpp +++ b/bsnes/qt/state/state.hpp @@ -1,5 +1,6 @@ class State { public: + unsigned active; bool save(unsigned); bool load(unsigned); diff --git a/bsnes/qt/tools/effecttoggle.cpp b/bsnes/qt/tools/effecttoggle.cpp index cec7ee60..a2a6f062 100755 --- a/bsnes/qt/tools/effecttoggle.cpp +++ b/bsnes/qt/tools/effecttoggle.cpp @@ -2,105 +2,97 @@ EffectToggleWindow *effectToggleWindow; EffectToggleWindow::EffectToggleWindow() { - layout = new QVBoxLayout; - layout->setAlignment(Qt::AlignTop); + layout = new QGridLayout; + layout->setAlignment(Qt::AlignTop | Qt::AlignLeft); layout->setMargin(Style::WindowMargin); layout->setSpacing(Style::WidgetSpacing); setLayout(layout); ppuLabel = new QLabel("S-PPU (Video)"); - layout->addWidget(ppuLabel); - - ppuLayout = new QGridLayout; - ppuLayout->setAlignment(Qt::AlignLeft); - layout->addLayout(ppuLayout); + layout->addWidget(ppuLabel, 0, 0); bg1pri0 = new QCheckBox("BG1 Priority 0"); bg1pri0->setChecked(true); - ppuLayout->addWidget(bg1pri0, 0, 0); + layout->addWidget(bg1pri0, 1, 0, 1, 4); bg1pri1 = new QCheckBox("BG1 Priority 1"); bg1pri1->setChecked(true); - ppuLayout->addWidget(bg1pri1, 0, 1); + layout->addWidget(bg1pri1, 1, 1); bg2pri0 = new QCheckBox("BG2 Priority 0"); bg2pri0->setChecked(true); - ppuLayout->addWidget(bg2pri0, 1, 0); + layout->addWidget(bg2pri0, 2, 0); bg2pri1 = new QCheckBox("BG2 Priority 1"); bg2pri1->setChecked(true); - ppuLayout->addWidget(bg2pri1, 1, 1); + layout->addWidget(bg2pri1, 2, 1); bg3pri0 = new QCheckBox("BG3 Priority 0"); bg3pri0->setChecked(true); - ppuLayout->addWidget(bg3pri0, 2, 0); + layout->addWidget(bg3pri0, 3, 0); bg3pri1 = new QCheckBox("BG3 Priority 1"); bg3pri1->setChecked(true); - ppuLayout->addWidget(bg3pri1, 2, 1); + layout->addWidget(bg3pri1, 3, 1); bg4pri0 = new QCheckBox("BG4 Priority 0"); bg4pri0->setChecked(true); - ppuLayout->addWidget(bg4pri0, 3, 0); + layout->addWidget(bg4pri0, 4, 0); bg4pri1 = new QCheckBox("BG4 Priority 1"); bg4pri1->setChecked(true); - ppuLayout->addWidget(bg4pri1, 3, 1); + layout->addWidget(bg4pri1, 4, 1); oampri0 = new QCheckBox("OAM Priority 0"); oampri0->setChecked(true); - ppuLayout->addWidget(oampri0, 4, 0); + layout->addWidget(oampri0, 5, 0); oampri1 = new QCheckBox("OAM Priority 1"); oampri1->setChecked(true); - ppuLayout->addWidget(oampri1, 4, 1); + layout->addWidget(oampri1, 5, 1); oampri2 = new QCheckBox("OAM Priority 2"); oampri2->setChecked(true); - ppuLayout->addWidget(oampri2, 4, 2); + layout->addWidget(oampri2, 5, 2); oampri3 = new QCheckBox("OAM Priority 3"); oampri3->setChecked(true); - ppuLayout->addWidget(oampri3, 4, 3); + layout->addWidget(oampri3, 5, 3); dspLabel = new QLabel("S-DSP (Audio)"); - layout->addWidget(dspLabel); - - dspLayout = new QGridLayout; - dspLayout->setAlignment(Qt::AlignLeft); - layout->addLayout(dspLayout); + layout->addWidget(dspLabel, 6, 0, 1, 4); channel0 = new QCheckBox("Channel 0"); channel0->setChecked(true); - dspLayout->addWidget(channel0, 0, 0); + layout->addWidget(channel0, 7, 0); channel1 = new QCheckBox("Channel 1"); channel1->setChecked(true); - dspLayout->addWidget(channel1, 0, 1); + layout->addWidget(channel1, 7, 1); channel2 = new QCheckBox("Channel 2"); channel2->setChecked(true); - dspLayout->addWidget(channel2, 0, 2); + layout->addWidget(channel2, 7, 2); channel3 = new QCheckBox("Channel 3"); channel3->setChecked(true); - dspLayout->addWidget(channel3, 0, 3); + layout->addWidget(channel3, 7, 3); channel4 = new QCheckBox("Channel 4"); channel4->setChecked(true); - dspLayout->addWidget(channel4, 1, 0); + layout->addWidget(channel4, 8, 0); channel5 = new QCheckBox("Channel 5"); channel5->setChecked(true); - dspLayout->addWidget(channel5, 1, 1); + layout->addWidget(channel5, 8, 1); channel6 = new QCheckBox("Channel 6"); channel6->setChecked(true); - dspLayout->addWidget(channel6, 1, 2); + layout->addWidget(channel6, 8, 2); channel7 = new QCheckBox("Channel 7"); channel7->setChecked(true); - dspLayout->addWidget(channel7, 1, 3); + layout->addWidget(channel7, 8, 3); connect(bg1pri0, SIGNAL(stateChanged(int)), this, SLOT(synchronize())); connect(bg1pri1, SIGNAL(stateChanged(int)), this, SLOT(synchronize())); diff --git a/bsnes/qt/tools/effecttoggle.moc.hpp b/bsnes/qt/tools/effecttoggle.moc.hpp index cd27ff10..5cb8317a 100755 --- a/bsnes/qt/tools/effecttoggle.moc.hpp +++ b/bsnes/qt/tools/effecttoggle.moc.hpp @@ -2,9 +2,8 @@ class EffectToggleWindow : public QWidget { Q_OBJECT public: - QVBoxLayout *layout; + QGridLayout *layout; QLabel *ppuLabel; - QGridLayout *ppuLayout; QCheckBox *bg1pri0; QCheckBox *bg1pri1; QCheckBox *bg2pri0; @@ -18,7 +17,6 @@ public: QCheckBox *oampri2; QCheckBox *oampri3; QLabel *dspLabel; - QGridLayout *dspLayout; QCheckBox *channel0; QCheckBox *channel1; QCheckBox *channel2; diff --git a/bsnes/qt/ui-base.hpp b/bsnes/qt/ui-base.hpp index ba91c1e3..544d3230 100755 --- a/bsnes/qt/ui-base.hpp +++ b/bsnes/qt/ui-base.hpp @@ -35,6 +35,7 @@ using namespace ruby; #include "base/htmlviewer.moc.hpp" #include "base/loader.moc.hpp" #include "base/main.moc.hpp" +#include "base/stateselect.moc.hpp" #include "cartridge/cartridge.hpp" diff --git a/bsnes/snes/snes.hpp b/bsnes/snes/snes.hpp index 2baa94c2..ffbf7579 100755 --- a/bsnes/snes/snes.hpp +++ b/bsnes/snes/snes.hpp @@ -1,7 +1,7 @@ namespace SNES { namespace Info { static const char Name[] = "bsnes"; - static const char Version[] = "068.15"; + static const char Version[] = "068.16"; static const unsigned SerializerVersion = 13; } }