Update to v068r16 release.

byuu says:

Testing this one and all the new features would be appreciated.

New features?

http://img203.imageshack.us/img203/505/bsnes20100907.jpg

[For future reference, the above URL points to a screenshot of bsnes' Qt
GUI running with the following windows (apart from the main window) visible:
 - A new 'state selection' dialog wih buttons labelled 'Slot 1' through
   'Slot 10'.
 - The 'Tools' dialog open to a new 'Effect Toggle' tab, which has
   checkboxes for the various PPU backgrounds and sprites, and SPU
   channels.
 - The 'Configuration Settings' dialog open to the 'Advanced' tab, with
   a "Use Native OS File Dialogs" checkbox.
 - A 'Load Cartridge' dialog, which is the standard Windows file-open
   dialog.
It seems these are the new features referred to. -- Ed]
This commit is contained in:
Tim Allen 2010-09-08 21:00:49 +10:00
parent 05fca49b11
commit 4147dc42d0
22 changed files with 201 additions and 71 deletions

View File

@ -1,6 +1,6 @@
include nall/Makefile
snes := snes
profile := performance
profile := compatibility
ui := qt
# compiler

View File

@ -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();

View File

@ -5,3 +5,4 @@
#include "htmlviewer.cpp"
#include "loader.cpp"
#include "main.cpp"
#include "stateselect.cpp"

View File

@ -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"

View File

@ -6,6 +6,7 @@ public:
function<void (const string&)> onActivate;
function<void (const string&)> onAccept;
void chooseFile();
void chooseFolder();
enum CartridgeMode { LoadDirect, LoadBase, LoadSlot1, LoadSlot2 } cartridgeMode;
void loadCartridge(CartridgeMode, signed = -1);

View File

@ -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)

View File

@ -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();

57
bsnes/qt/base/stateselect.cpp Executable file
View File

@ -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);
}
}

View File

@ -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;

View File

@ -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");

View File

@ -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;

View File

@ -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;

View File

@ -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) {

View File

@ -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();
}

View File

@ -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;

View File

@ -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(""); }

View File

@ -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;

View File

@ -1,5 +1,6 @@
class State {
public:
unsigned active;
bool save(unsigned);
bool load(unsigned);

View File

@ -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("<b>S-PPU (Video)</b>");
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("<b>S-DSP (Audio)</b>");
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()));

View File

@ -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;

View File

@ -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"

View File

@ -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;
}
}