o cleanup
This commit is contained in:
35
tools/bsnes/ui_qt/base/about.cpp
Executable file
35
tools/bsnes/ui_qt/base/about.cpp
Executable file
@@ -0,0 +1,35 @@
|
||||
void AboutWindow::setup() {
|
||||
window = new QWidget;
|
||||
window->setObjectName("about-window");
|
||||
window->setWindowTitle("About bsnes ...");
|
||||
|
||||
layout = new QVBoxLayout;
|
||||
layout->setMargin(Style::WindowMargin);
|
||||
layout->setSpacing(0); {
|
||||
logo = new Logo;
|
||||
logo->setFixedSize(600, 106);
|
||||
layout->addWidget(logo);
|
||||
layout->addSpacing(Style::WidgetSpacing);
|
||||
|
||||
info = new QLabel(
|
||||
"<table>"
|
||||
"<tr><td align='right'><b>Version: </b></td><td>" BSNES_VERSION "</td></tr>"
|
||||
"<tr><td align='right'><b>Author: </b></td><td>byuu</td></tr>"
|
||||
"<tr><td align='right'><b>Homepage: </b></td><td>http://byuu.org/</td></tr>"
|
||||
"</table>"
|
||||
);
|
||||
layout->addWidget(info);
|
||||
|
||||
spacer = new QWidget;
|
||||
spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||
layout->addWidget(spacer);
|
||||
}
|
||||
|
||||
window->setLayout(layout);
|
||||
}
|
||||
|
||||
void AboutWindow::Logo::paintEvent(QPaintEvent*) {
|
||||
QPainter painter(this);
|
||||
QPixmap pixmap(":/logo.png");
|
||||
painter.drawPixmap(0, 0, pixmap);
|
||||
}
|
||||
16
tools/bsnes/ui_qt/base/about.hpp
Executable file
16
tools/bsnes/ui_qt/base/about.hpp
Executable file
@@ -0,0 +1,16 @@
|
||||
class AboutWindow : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QWidget *window;
|
||||
QVBoxLayout *layout;
|
||||
struct Logo : public QWidget {
|
||||
void paintEvent(QPaintEvent*);
|
||||
} *logo;
|
||||
QLabel *info;
|
||||
QWidget *spacer;
|
||||
|
||||
void setup();
|
||||
|
||||
public slots:
|
||||
} *winAbout;
|
||||
20
tools/bsnes/ui_qt/base/htmlviewer.cpp
Executable file
20
tools/bsnes/ui_qt/base/htmlviewer.cpp
Executable file
@@ -0,0 +1,20 @@
|
||||
void HtmlViewerWindow::setup() {
|
||||
window = new QWidget;
|
||||
window->setObjectName("html-window");
|
||||
|
||||
layout = new QVBoxLayout;
|
||||
layout->setMargin(Style::WindowMargin);
|
||||
layout->setSpacing(0); {
|
||||
document = new QTextBrowser;
|
||||
layout->addWidget(document);
|
||||
}
|
||||
|
||||
window->setLayout(layout);
|
||||
window->setMinimumSize(560, 480);
|
||||
}
|
||||
|
||||
void HtmlViewerWindow::show(const char *title, const char *htmlData) {
|
||||
document->setHtml(utf8() << htmlData);
|
||||
window->setWindowTitle(title);
|
||||
utility.showCentered(window);
|
||||
}
|
||||
13
tools/bsnes/ui_qt/base/htmlviewer.hpp
Executable file
13
tools/bsnes/ui_qt/base/htmlviewer.hpp
Executable file
@@ -0,0 +1,13 @@
|
||||
class HtmlViewerWindow : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QWidget *window;
|
||||
QVBoxLayout *layout;
|
||||
QTextBrowser *document;
|
||||
|
||||
void setup();
|
||||
void show(const char *title, const char *htmlData);
|
||||
|
||||
public slots:
|
||||
} *winHtmlViewer;
|
||||
198
tools/bsnes/ui_qt/base/loader.cpp
Executable file
198
tools/bsnes/ui_qt/base/loader.cpp
Executable file
@@ -0,0 +1,198 @@
|
||||
void LoaderWindow::setup() {
|
||||
window = new QWidget;
|
||||
window->setObjectName("loader-window");
|
||||
window->setMinimumWidth(520);
|
||||
|
||||
layout = new QVBoxLayout;
|
||||
layout->setMargin(Style::WindowMargin);
|
||||
layout->setSpacing(0);
|
||||
|
||||
grid = new QGridLayout; {
|
||||
baseLabel = new QLabel("Base cartridge:");
|
||||
grid->addWidget(baseLabel, 0, 0);
|
||||
|
||||
baseFile = new QLineEdit;
|
||||
baseFile->setReadOnly(true);
|
||||
grid->addWidget(baseFile, 0, 1);
|
||||
|
||||
baseBrowse = new QPushButton("Browse ...");
|
||||
grid->addWidget(baseBrowse, 0, 2);
|
||||
|
||||
baseClear = new QPushButton("Clear");
|
||||
grid->addWidget(baseClear, 0, 3);
|
||||
|
||||
slot1Label = new QLabel("Slot A cartridge:");
|
||||
grid->addWidget(slot1Label, 1, 0);
|
||||
|
||||
slot1File = new QLineEdit;
|
||||
slot1File->setReadOnly(true);
|
||||
grid->addWidget(slot1File, 1, 1);
|
||||
|
||||
slot1Browse = new QPushButton("Browse ...");
|
||||
grid->addWidget(slot1Browse, 1, 2);
|
||||
|
||||
slot1Clear = new QPushButton("Clear");
|
||||
grid->addWidget(slot1Clear, 1, 3);
|
||||
|
||||
slot2Label = new QLabel("Slot B cartridge:");
|
||||
grid->addWidget(slot2Label, 2, 0);
|
||||
|
||||
slot2File = new QLineEdit;
|
||||
slot2File->setReadOnly(true);
|
||||
grid->addWidget(slot2File, 2, 1);
|
||||
|
||||
slot2Browse = new QPushButton("Browse ...");
|
||||
grid->addWidget(slot2Browse, 2, 2);
|
||||
|
||||
slot2Clear = new QPushButton("Clear");
|
||||
grid->addWidget(slot2Clear, 2, 3);
|
||||
}
|
||||
grid->setSpacing(Style::WidgetSpacing);
|
||||
layout->addLayout(grid);
|
||||
layout->addSpacing(Style::WidgetSpacing);
|
||||
|
||||
controls = new QHBoxLayout; {
|
||||
load = new QPushButton("Load");
|
||||
controls->addWidget(load);
|
||||
|
||||
cancel = new QPushButton("Cancel");
|
||||
controls->addWidget(cancel);
|
||||
}
|
||||
controls->setSpacing(Style::WidgetSpacing);
|
||||
layout->addLayout(controls);
|
||||
|
||||
spacer = new QWidget;
|
||||
spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||
layout->addWidget(spacer);
|
||||
|
||||
window->setLayout(layout);
|
||||
connect(baseBrowse, SIGNAL(released()), this, SLOT(selectBaseCartridge()));
|
||||
connect(baseClear, SIGNAL(released()), this, SLOT(clearBaseCartridge()));
|
||||
connect(slot1Browse, SIGNAL(released()), this, SLOT(selectSlot1Cartridge()));
|
||||
connect(slot1Clear, SIGNAL(released()), this, SLOT(clearSlot1Cartridge()));
|
||||
connect(slot2Browse, SIGNAL(released()), this, SLOT(selectSlot2Cartridge()));
|
||||
connect(slot2Clear, SIGNAL(released()), this, SLOT(clearSlot2Cartridge()));
|
||||
connect(load, SIGNAL(released()), this, SLOT(onLoad()));
|
||||
connect(cancel, SIGNAL(released()), this, SLOT(onCancel()));
|
||||
}
|
||||
|
||||
void LoaderWindow::syncUi() {
|
||||
//only allow load when a base file is specified ...
|
||||
load->setEnabled(baseFile->text().length() > 0);
|
||||
}
|
||||
|
||||
void LoaderWindow::loadBsxSlottedCartridge(const char *filebase, const char *fileSlot1) {
|
||||
window->hide();
|
||||
baseLabel->show(), baseFile->show(), baseBrowse->show(), baseClear->show();
|
||||
slot1Label->show(), slot1File->show(), slot1Browse->show(), slot1Clear->show();
|
||||
slot2Label->hide(), slot2File->hide(), slot2Browse->hide(), slot2Clear->hide();
|
||||
|
||||
slot1Label->setText("Slot cartridge:");
|
||||
|
||||
baseFile->setText(filebase);
|
||||
slot1File->setText(fileSlot1);
|
||||
|
||||
syncUi();
|
||||
mode = ModeBsxSlotted;
|
||||
showWindow("Load BS-X Slotted Cartridge");
|
||||
}
|
||||
|
||||
void LoaderWindow::loadBsxCartridge(const char *fileBase, const char *fileSlot1) {
|
||||
window->hide();
|
||||
baseLabel->show(), baseFile->show(), baseBrowse->show(), baseClear->show();
|
||||
slot1Label->show(), slot1File->show(), slot1Browse->show(), slot1Clear->show();
|
||||
slot2Label->hide(), slot2File->hide(), slot2Browse->hide(), slot2Clear->hide();
|
||||
|
||||
slot1Label->setText("Slot cartridge:");
|
||||
|
||||
baseFile->setText(fileBase);
|
||||
slot1File->setText(fileSlot1);
|
||||
|
||||
syncUi();
|
||||
mode = ModeBsx;
|
||||
showWindow("Load BS-X Cartridge");
|
||||
}
|
||||
|
||||
void LoaderWindow::loadSufamiTurboCartridge(const char *fileBase, const char *fileSlot1, const char *fileSlot2) {
|
||||
window->hide();
|
||||
baseLabel->show(), baseFile->show(), baseBrowse->show(), baseClear->show();
|
||||
slot1Label->show(), slot1File->show(), slot1Browse->show(), slot1Clear->show();
|
||||
slot2Label->show(), slot2File->show(), slot2Browse->show(), slot2Clear->show();
|
||||
|
||||
slot1Label->setText("Slot A cartridge:");
|
||||
slot2Label->setText("Slot B cartridge:");
|
||||
|
||||
baseFile->setText(fileBase);
|
||||
slot1File->setText(fileSlot1);
|
||||
slot2File->setText(fileSlot2);
|
||||
|
||||
syncUi();
|
||||
mode = ModeSufamiTurbo;
|
||||
showWindow("Load Sufami Turbo Cartridge");
|
||||
}
|
||||
|
||||
void LoaderWindow::showWindow(const char *title) {
|
||||
window->setWindowTitle(title);
|
||||
utility.showCentered(window);
|
||||
load->setFocus();
|
||||
}
|
||||
|
||||
void LoaderWindow::selectBaseCartridge() {
|
||||
string filename = utility.selectCartridge();
|
||||
if(filename.length() > 0) baseFile->setText(utf8() << filename);
|
||||
syncUi();
|
||||
}
|
||||
|
||||
void LoaderWindow::clearBaseCartridge() {
|
||||
baseFile->setText("");
|
||||
syncUi();
|
||||
}
|
||||
|
||||
void LoaderWindow::selectSlot1Cartridge() {
|
||||
string filename = utility.selectCartridge();
|
||||
if(filename.length() > 0) slot1File->setText(utf8() << filename);
|
||||
syncUi();
|
||||
}
|
||||
|
||||
void LoaderWindow::clearSlot1Cartridge() {
|
||||
slot1File->setText("");
|
||||
syncUi();
|
||||
}
|
||||
|
||||
void LoaderWindow::selectSlot2Cartridge() {
|
||||
string filename = utility.selectCartridge();
|
||||
if(filename.length() > 0) slot2File->setText(utf8() << filename);
|
||||
syncUi();
|
||||
}
|
||||
|
||||
void LoaderWindow::clearSlot2Cartridge() {
|
||||
slot2File->setText("");
|
||||
syncUi();
|
||||
}
|
||||
|
||||
void LoaderWindow::onLoad() {
|
||||
window->hide();
|
||||
string base = baseFile->text().toUtf8().data();
|
||||
string slot1 = slot1File->text().toUtf8().data();
|
||||
string slot2 = slot2File->text().toUtf8().data();
|
||||
|
||||
switch(mode) {
|
||||
case ModeBsxSlotted: {
|
||||
utility.loadCartridgeBsxSlotted(base, slot1);
|
||||
} break;
|
||||
|
||||
case ModeBsx: {
|
||||
snes.config.path.bsx = base;
|
||||
utility.loadCartridgeBsx(base, slot1);
|
||||
} break;
|
||||
|
||||
case ModeSufamiTurbo: {
|
||||
snes.config.path.st = base;
|
||||
utility.loadCartridgeSufamiTurbo(base, slot1, slot2);
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
||||
void LoaderWindow::onCancel() {
|
||||
window->hide();
|
||||
}
|
||||
45
tools/bsnes/ui_qt/base/loader.hpp
Executable file
45
tools/bsnes/ui_qt/base/loader.hpp
Executable file
@@ -0,0 +1,45 @@
|
||||
class LoaderWindow : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QWidget *window;
|
||||
QVBoxLayout *layout;
|
||||
QGridLayout *grid;
|
||||
QLabel *baseLabel;
|
||||
QLineEdit *baseFile;
|
||||
QPushButton *baseBrowse;
|
||||
QPushButton *baseClear;
|
||||
QLabel *slot1Label;
|
||||
QLineEdit *slot1File;
|
||||
QPushButton *slot1Browse;
|
||||
QPushButton *slot1Clear;
|
||||
QLabel *slot2Label;
|
||||
QLineEdit *slot2File;
|
||||
QPushButton *slot2Browse;
|
||||
QPushButton *slot2Clear;
|
||||
QHBoxLayout *controls;
|
||||
QPushButton *load;
|
||||
QPushButton *cancel;
|
||||
QWidget *spacer;
|
||||
|
||||
void setup();
|
||||
void syncUi();
|
||||
void loadBsxSlottedCartridge(const char*, const char*);
|
||||
void loadBsxCartridge(const char*, const char*);
|
||||
void loadSufamiTurboCartridge(const char*, const char*, const char*);
|
||||
|
||||
public slots:
|
||||
void selectBaseCartridge();
|
||||
void clearBaseCartridge();
|
||||
void selectSlot1Cartridge();
|
||||
void clearSlot1Cartridge();
|
||||
void selectSlot2Cartridge();
|
||||
void clearSlot2Cartridge();
|
||||
|
||||
void onLoad();
|
||||
void onCancel();
|
||||
|
||||
private:
|
||||
enum mode_t { ModeBsxSlotted, ModeBsx, ModeSufamiTurbo } mode;
|
||||
void showWindow(const char *title);
|
||||
} *winLoader;
|
||||
371
tools/bsnes/ui_qt/base/main.cpp
Executable file
371
tools/bsnes/ui_qt/base/main.cpp
Executable file
@@ -0,0 +1,371 @@
|
||||
void MainWindow::setup() {
|
||||
window = new Window;
|
||||
window->setObjectName("main-window");
|
||||
window->setWindowTitle(BSNES_TITLE);
|
||||
|
||||
system = window->menuBar()->addMenu("&System");
|
||||
system_load = system->addAction("&Load Cartridge ...");
|
||||
system->addSeparator();
|
||||
system_power = system->addMenu("&Power");
|
||||
system_power_on = system_power->addAction("On");
|
||||
system_power_on->setCheckable(true);
|
||||
system_power_off = system_power->addAction("Off");
|
||||
system_power_off->setCheckable(true);
|
||||
system_reset = system->addAction("&Reset");
|
||||
system->addSeparator();
|
||||
system_port1 = system->addMenu("Controller Port 1");
|
||||
system_port1_none = system_port1->addAction("&None");
|
||||
system_port1_none->setCheckable(true);
|
||||
system_port1_joypad = system_port1->addAction("&Joypad");
|
||||
system_port1_joypad->setCheckable(true);
|
||||
system_port1_multitap = system_port1->addAction("&Multitap");
|
||||
system_port1_multitap->setCheckable(true);
|
||||
system_port1_mouse = system_port1->addAction("M&ouse");
|
||||
system_port1_mouse->setCheckable(true);
|
||||
system_port2 = system->addMenu("Controller Port 2");
|
||||
system_port2_none = system_port2->addAction("&None");
|
||||
system_port2_none->setCheckable(true);
|
||||
system_port2_joypad = system_port2->addAction("&Joypad");
|
||||
system_port2_joypad->setCheckable(true);
|
||||
system_port2_multitap = system_port2->addAction("&Multitap");
|
||||
system_port2_multitap->setCheckable(true);
|
||||
system_port2_mouse = system_port2->addAction("M&ouse");
|
||||
system_port2_mouse->setCheckable(true);
|
||||
system_port2_superscope = system_port2->addAction("&Super Scope");
|
||||
system_port2_superscope->setCheckable(true);
|
||||
system_port2_justifier = system_port2->addAction("&Justifier");
|
||||
system_port2_justifier->setCheckable(true);
|
||||
system_port2_justifiers = system_port2->addAction("&Two Justifiers");
|
||||
system_port2_justifiers->setCheckable(true);
|
||||
system->addSeparator();
|
||||
system_exit = system->addAction("E&xit");
|
||||
system_exit->setMenuRole(QAction::QuitRole);
|
||||
|
||||
settings = window->menuBar()->addMenu("S&ettings");
|
||||
settings_videoMode = settings->addMenu("&Video Mode");
|
||||
settings_videoMode_1x = settings_videoMode->addAction("Scale &1x");
|
||||
settings_videoMode_1x->setCheckable(true);
|
||||
settings_videoMode_2x = settings_videoMode->addAction("Scale &2x");
|
||||
settings_videoMode_2x->setCheckable(true);
|
||||
settings_videoMode_3x = settings_videoMode->addAction("Scale &3x");
|
||||
settings_videoMode_3x->setCheckable(true);
|
||||
settings_videoMode_4x = settings_videoMode->addAction("Scale &4x");
|
||||
settings_videoMode_4x->setCheckable(true);
|
||||
settings_videoMode_max = settings_videoMode->addAction("Scale &Max");
|
||||
settings_videoMode_max->setCheckable(true);
|
||||
settings_videoMode_max->setStatusTip("Scale video output to fill as much of the screen as possible");
|
||||
settings_videoMode->addSeparator();
|
||||
settings_videoMode_correctAspectRatio = settings_videoMode->addAction("&Correct Aspect Ratio");
|
||||
settings_videoMode_correctAspectRatio->setStatusTip("Match pixel width-to-height ratio of TV");
|
||||
settings_videoMode_correctAspectRatio->setCheckable(true);
|
||||
settings_videoMode_fullscreen = settings_videoMode->addAction("&Fullscreen");
|
||||
settings_videoMode_fullscreen->setCheckable(true);
|
||||
settings_videoMode->addSeparator();
|
||||
settings_videoMode_ntsc = settings_videoMode->addAction("&NTSC");
|
||||
settings_videoMode_ntsc->setCheckable(true);
|
||||
settings_videoMode_ntsc->setStatusTip("Size video output window to match NTSC TV spec");
|
||||
settings_videoMode_pal = settings_videoMode->addAction("&PAL");
|
||||
settings_videoMode_pal->setCheckable(true);
|
||||
settings_videoMode_pal->setStatusTip("Size video output window to match PAL TV spec");
|
||||
settings_videoFilter = settings->addMenu("Video &Filter");
|
||||
settings_videoFilter_point = settings_videoFilter->addAction("&Point");
|
||||
settings_videoFilter_point->setCheckable(true);
|
||||
settings_videoFilter_point->setStatusTip("Use pixellated hardware video scaling");
|
||||
settings_videoFilter_linear = settings_videoFilter->addAction("&Linear");
|
||||
settings_videoFilter_linear->setCheckable(true);
|
||||
settings_videoFilter_linear->setStatusTip("Use smoothed hardware video scaling");
|
||||
settings_videoFilter->addSeparator();
|
||||
settings_videoFilter_none = settings_videoFilter->addAction("&None");
|
||||
settings_videoFilter_none->setCheckable(true);
|
||||
settings_videoFilter_scanline = settings_videoFilter->addAction("&Scanline");
|
||||
settings_videoFilter_scanline->setCheckable(true);
|
||||
settings_videoFilter_scale2x = settings_videoFilter->addAction("S&cale2x");
|
||||
settings_videoFilter_scale2x->setCheckable(true);
|
||||
settings_videoFilter_hq2x = settings_videoFilter->addAction("&HQ2x");
|
||||
settings_videoFilter_hq2x->setCheckable(true);
|
||||
settings_videoFilter_ntsc = settings_videoFilter->addAction("N&TSC");
|
||||
settings_videoFilter_ntsc->setCheckable(true);
|
||||
settings->addSeparator();
|
||||
settings_muteAudio = settings->addAction("&Mute Audio Output");
|
||||
settings_muteAudio->setCheckable(true);
|
||||
settings->addSeparator();
|
||||
settings_emulationSpeed = settings->addMenu("&Emulation Speed");
|
||||
settings_emulationSpeed_slowest = settings_emulationSpeed->addAction("50%");
|
||||
settings_emulationSpeed_slowest->setCheckable(true);
|
||||
settings_emulationSpeed_slow = settings_emulationSpeed->addAction("75%");
|
||||
settings_emulationSpeed_slow->setCheckable(true);
|
||||
settings_emulationSpeed_normal = settings_emulationSpeed->addAction("100%");
|
||||
settings_emulationSpeed_normal->setCheckable(true);
|
||||
settings_emulationSpeed_fast = settings_emulationSpeed->addAction("150%");
|
||||
settings_emulationSpeed_fast->setCheckable(true);
|
||||
settings_emulationSpeed_fastest = settings_emulationSpeed->addAction("200%");
|
||||
settings_emulationSpeed_fastest->setCheckable(true);
|
||||
settings_emulationSpeed->addSeparator();
|
||||
settings_emulationSpeed_syncVideo = settings_emulationSpeed->addAction("Sync &Video");
|
||||
settings_emulationSpeed_syncVideo->setCheckable(true);
|
||||
settings_emulationSpeed_syncVideo->setStatusTip("Sync video output to vertical refresh rate");
|
||||
settings_emulationSpeed_syncAudio = settings_emulationSpeed->addAction("Sync &Audio");
|
||||
settings_emulationSpeed_syncAudio->setCheckable(true);
|
||||
settings_emulationSpeed_syncAudio->setStatusTip("Sync audio output to sound card output rate");
|
||||
settings_configuration = settings->addAction("&Configuration ...");
|
||||
settings_configuration->setMenuRole(QAction::PreferencesRole);
|
||||
|
||||
help = window->menuBar()->addMenu("&Help");
|
||||
help_documentation = help->addAction("Documentation ...");
|
||||
help_license = help->addAction("License ...");
|
||||
help->addSeparator();
|
||||
help_about = help->addAction("&About ...");
|
||||
help_about->setMenuRole(QAction::AboutRole);
|
||||
|
||||
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->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);
|
||||
|
||||
window->statusBar()->showMessage("");
|
||||
systemState = new QLabel;
|
||||
window->statusBar()->addPermanentWidget(systemState);
|
||||
|
||||
window->setCentralWidget(canvasContainer);
|
||||
|
||||
//slots
|
||||
connect(system_load, SIGNAL(triggered()), this, SLOT(loadCartridge()));
|
||||
connect(system_power_on, SIGNAL(triggered()), this, SLOT(powerOn()));
|
||||
connect(system_power_off, SIGNAL(triggered()), this, SLOT(powerOff()));
|
||||
connect(system_reset, SIGNAL(triggered()), this, SLOT(reset()));
|
||||
connect(system_port1_none, SIGNAL(triggered()), this, SLOT(setPort1None()));
|
||||
connect(system_port1_joypad, SIGNAL(triggered()), this, SLOT(setPort1Joypad()));
|
||||
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_joypad, SIGNAL(triggered()), this, SLOT(setPort2Joypad()));
|
||||
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_max, SIGNAL(triggered()), this, SLOT(setVideoModeMax()));
|
||||
connect(settings_videoMode_correctAspectRatio, SIGNAL(triggered()), this, SLOT(toggleAspectCorrection()));
|
||||
connect(settings_videoMode_fullscreen, SIGNAL(triggered()), this, SLOT(toggleFullscreen()));
|
||||
connect(settings_videoMode_ntsc, SIGNAL(triggered()), this, SLOT(setVideoNtsc()));
|
||||
connect(settings_videoMode_pal, SIGNAL(triggered()), this, SLOT(setVideoPal()));
|
||||
connect(settings_videoFilter_point, SIGNAL(triggered()), this, SLOT(setPointFilter()));
|
||||
connect(settings_videoFilter_linear, SIGNAL(triggered()), this, SLOT(setLinearFilter()));
|
||||
connect(settings_videoFilter_none, SIGNAL(triggered()), this, SLOT(setNoFilter()));
|
||||
connect(settings_videoFilter_scanline, SIGNAL(triggered()), this, SLOT(setScanlineFilter()));
|
||||
connect(settings_videoFilter_scale2x, SIGNAL(triggered()), this, SLOT(setScale2xFilter()));
|
||||
connect(settings_videoFilter_hq2x, SIGNAL(triggered()), this, SLOT(setHq2xFilter()));
|
||||
connect(settings_videoFilter_ntsc, SIGNAL(triggered()), this, SLOT(setNtscFilter()));
|
||||
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(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(cartridge.loaded());
|
||||
system_power_on->setChecked (application.power == true);
|
||||
system_power_off->setChecked(application.power == false);
|
||||
system_reset->setEnabled(cartridge.loaded() && application.power);
|
||||
|
||||
system_port1_none->setChecked (snes.config.controller_port1 == SNES::Input::DeviceNone);
|
||||
system_port1_joypad->setChecked (snes.config.controller_port1 == SNES::Input::DeviceJoypad);
|
||||
system_port1_multitap->setChecked (snes.config.controller_port1 == SNES::Input::DeviceMultitap);
|
||||
system_port1_mouse->setChecked (snes.config.controller_port1 == SNES::Input::DeviceMouse);
|
||||
system_port2_none->setChecked (snes.config.controller_port2 == SNES::Input::DeviceNone);
|
||||
system_port2_joypad->setChecked (snes.config.controller_port2 == SNES::Input::DeviceJoypad);
|
||||
system_port2_multitap->setChecked (snes.config.controller_port2 == SNES::Input::DeviceMultitap);
|
||||
system_port2_mouse->setChecked (snes.config.controller_port2 == SNES::Input::DeviceMouse);
|
||||
system_port2_superscope->setChecked(snes.config.controller_port2 == SNES::Input::DeviceSuperScope);
|
||||
system_port2_justifier->setChecked (snes.config.controller_port2 == SNES::Input::DeviceJustifier);
|
||||
system_port2_justifiers->setChecked(snes.config.controller_port2 == SNES::Input::DeviceJustifiers);
|
||||
|
||||
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_max->setChecked(config.video.context->multiplier >= 5);
|
||||
|
||||
settings_videoMode_correctAspectRatio->setChecked(config.video.context->correctAspectRatio);
|
||||
settings_videoMode_fullscreen->setChecked(config.video.isFullscreen);
|
||||
settings_videoMode_ntsc->setChecked(config.video.context->region == 0);
|
||||
settings_videoMode_pal->setChecked (config.video.context->region == 1);
|
||||
|
||||
settings_videoFilter_point->setChecked (config.video.context->hwFilter == 0);
|
||||
settings_videoFilter_linear->setChecked (config.video.context->hwFilter == 1);
|
||||
settings_videoFilter_none->setChecked (config.video.context->swFilter == 0);
|
||||
settings_videoFilter_scanline->setChecked(config.video.context->swFilter == 1);
|
||||
settings_videoFilter_scale2x->setChecked (config.video.context->swFilter == 2);
|
||||
settings_videoFilter_hq2x->setChecked (config.video.context->swFilter == 3);
|
||||
settings_videoFilter_ntsc->setChecked (config.video.context->swFilter == 4);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
void MainWindow::loadCartridge() {
|
||||
string filename = utility.selectCartridge();
|
||||
if(filename.length() > 0) utility.loadCartridge(filename);
|
||||
}
|
||||
|
||||
void MainWindow::powerOn() { utility.modifySystemState(Utility::PowerOn); }
|
||||
void MainWindow::powerOff() { utility.modifySystemState(Utility::PowerOff); }
|
||||
void MainWindow::reset() { utility.modifySystemState(Utility::Reset); }
|
||||
|
||||
void MainWindow::setPort1None() { snes.config.controller_port1 = SNES::Input::DeviceNone; utility.updateControllers(); syncUi(); }
|
||||
void MainWindow::setPort1Joypad() { snes.config.controller_port1 = SNES::Input::DeviceJoypad; utility.updateControllers(); syncUi(); }
|
||||
void MainWindow::setPort1Multitap() { snes.config.controller_port1 = SNES::Input::DeviceMultitap; utility.updateControllers(); syncUi(); }
|
||||
void MainWindow::setPort1Mouse() { snes.config.controller_port1 = SNES::Input::DeviceMouse; utility.updateControllers(); syncUi(); }
|
||||
void MainWindow::setPort2None() { snes.config.controller_port2 = SNES::Input::DeviceNone; utility.updateControllers(); syncUi(); }
|
||||
void MainWindow::setPort2Joypad() { snes.config.controller_port2 = SNES::Input::DeviceJoypad; utility.updateControllers(); syncUi(); }
|
||||
void MainWindow::setPort2Multitap() { snes.config.controller_port2 = SNES::Input::DeviceMultitap; utility.updateControllers(); syncUi(); }
|
||||
void MainWindow::setPort2Mouse() { snes.config.controller_port2 = SNES::Input::DeviceMouse; utility.updateControllers(); syncUi(); }
|
||||
void MainWindow::setPort2SuperScope() { snes.config.controller_port2 = SNES::Input::DeviceSuperScope; utility.updateControllers(); syncUi(); }
|
||||
void MainWindow::setPort2Justifier() { snes.config.controller_port2 = SNES::Input::DeviceJustifier; utility.updateControllers(); syncUi(); }
|
||||
void MainWindow::setPort2Justifiers() { snes.config.controller_port2 = SNES::Input::DeviceJustifiers; utility.updateControllers(); syncUi(); }
|
||||
|
||||
void MainWindow::quit() {
|
||||
application.terminate = true;
|
||||
}
|
||||
|
||||
void MainWindow::setVideoMode1x() { config.video.context->multiplier = 1; utility.resizeMainWindow(); syncUi(); }
|
||||
void MainWindow::setVideoMode2x() { config.video.context->multiplier = 2; utility.resizeMainWindow(); syncUi(); }
|
||||
void MainWindow::setVideoMode3x() { config.video.context->multiplier = 3; utility.resizeMainWindow(); syncUi(); }
|
||||
void MainWindow::setVideoMode4x() { config.video.context->multiplier = 4; utility.resizeMainWindow(); syncUi(); }
|
||||
void MainWindow::setVideoModeMax() { config.video.context->multiplier = 9; utility.resizeMainWindow(); syncUi(); }
|
||||
|
||||
void MainWindow::toggleAspectCorrection() {
|
||||
config.video.context->correctAspectRatio = settings_videoMode_correctAspectRatio->isChecked();
|
||||
utility.resizeMainWindow();
|
||||
}
|
||||
|
||||
void MainWindow::toggleFullscreen() { config.video.isFullscreen = settings_videoMode_fullscreen->isChecked(); utility.updateFullscreenState(); syncUi(); }
|
||||
|
||||
void MainWindow::setVideoNtsc() { config.video.context->region = 0; utility.updateVideoMode(); utility.resizeMainWindow(); syncUi(); }
|
||||
void MainWindow::setVideoPal() { config.video.context->region = 1; utility.updateVideoMode(); utility.resizeMainWindow(); syncUi(); }
|
||||
|
||||
void MainWindow::setPointFilter() { config.video.context->hwFilter = 0; utility.updateHardwareFilter(); syncUi(); }
|
||||
void MainWindow::setLinearFilter() { config.video.context->hwFilter = 1; utility.updateHardwareFilter(); syncUi(); }
|
||||
void MainWindow::setNoFilter() { config.video.context->swFilter = 0; utility.updateSoftwareFilter(); syncUi(); }
|
||||
void MainWindow::setScanlineFilter() { config.video.context->swFilter = 1; utility.updateSoftwareFilter(); syncUi(); }
|
||||
void MainWindow::setScale2xFilter() { config.video.context->swFilter = 2; utility.updateSoftwareFilter(); syncUi(); }
|
||||
void MainWindow::setHq2xFilter() { config.video.context->swFilter = 3; utility.updateSoftwareFilter(); syncUi(); }
|
||||
void MainWindow::setNtscFilter() { config.video.context->swFilter = 4; utility.updateSoftwareFilter(); syncUi(); }
|
||||
|
||||
void MainWindow::muteAudio() { 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() { config.video.synchronize = settings_emulationSpeed_syncVideo->isChecked(); utility.updateAvSync(); }
|
||||
void MainWindow::syncAudio() { config.audio.synchronize = settings_emulationSpeed_syncAudio->isChecked(); utility.updateAvSync(); }
|
||||
|
||||
void MainWindow::showConfigWindow() {
|
||||
utility.showCentered(winSettings->window);
|
||||
}
|
||||
|
||||
void MainWindow::showDocumentation() {
|
||||
QFile file(":/documentation.html");
|
||||
if(file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||
winHtmlViewer->show("Usage Documentation", file.readAll().constData());
|
||||
file.close();
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::showLicense() {
|
||||
QFile file(":/license.html");
|
||||
if(file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||
winHtmlViewer->show("License Agreement", file.readAll().constData());
|
||||
file.close();
|
||||
}
|
||||
}
|
||||
void MainWindow::showAbout() {
|
||||
utility.showCentered(winAbout->window);
|
||||
}
|
||||
|
||||
void MainWindow::Window::closeEvent(QCloseEvent*) {
|
||||
winMain->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) utility.loadCartridge(list.at(0).toLocalFile().toUtf8().constData());
|
||||
}
|
||||
}
|
||||
|
||||
//===========
|
||||
//CanvasWidget
|
||||
//============
|
||||
//custom video render and mouse capture functionality
|
||||
|
||||
QPaintEngine* CanvasWidget::paintEngine() const {
|
||||
if(cartridge.loaded()) 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();
|
||||
}
|
||||
129
tools/bsnes/ui_qt/base/main.hpp
Executable file
129
tools/bsnes/ui_qt/base/main.hpp
Executable file
@@ -0,0 +1,129 @@
|
||||
class CanvasObject : public QWidget {
|
||||
public:
|
||||
void dragEnterEvent(QDragEnterEvent*);
|
||||
void dropEvent(QDropEvent*);
|
||||
};
|
||||
|
||||
class CanvasWidget : public CanvasObject {
|
||||
public:
|
||||
QPaintEngine* paintEngine() const;
|
||||
void mouseReleaseEvent(QMouseEvent*);
|
||||
void paintEvent(QPaintEvent*);
|
||||
};
|
||||
|
||||
class MainWindow : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
struct Window : public QMainWindow {
|
||||
void closeEvent(QCloseEvent*);
|
||||
} *window;
|
||||
QVBoxLayout *layout;
|
||||
QMenu *system;
|
||||
QAction *system_load;
|
||||
QMenu *system_power;
|
||||
QAction *system_power_on;
|
||||
QAction *system_power_off;
|
||||
QAction *system_reset;
|
||||
QMenu *system_port1;
|
||||
QAction *system_port1_none;
|
||||
QAction *system_port1_joypad;
|
||||
QAction *system_port1_multitap;
|
||||
QAction *system_port1_mouse;
|
||||
QMenu *system_port2;
|
||||
QAction *system_port2_none;
|
||||
QAction *system_port2_joypad;
|
||||
QAction *system_port2_multitap;
|
||||
QAction *system_port2_mouse;
|
||||
QAction *system_port2_superscope;
|
||||
QAction *system_port2_justifier;
|
||||
QAction *system_port2_justifiers;
|
||||
QAction *system_exit;
|
||||
QMenu *settings;
|
||||
QMenu *settings_videoMode;
|
||||
QAction *settings_videoMode_1x;
|
||||
QAction *settings_videoMode_2x;
|
||||
QAction *settings_videoMode_3x;
|
||||
QAction *settings_videoMode_4x;
|
||||
QAction *settings_videoMode_max;
|
||||
QAction *settings_videoMode_correctAspectRatio;
|
||||
QAction *settings_videoMode_fullscreen;
|
||||
QAction *settings_videoMode_ntsc;
|
||||
QAction *settings_videoMode_pal;
|
||||
QMenu *settings_videoFilter;
|
||||
QAction *settings_videoFilter_point;
|
||||
QAction *settings_videoFilter_linear;
|
||||
QAction *settings_videoFilter_none;
|
||||
QAction *settings_videoFilter_scanline;
|
||||
QAction *settings_videoFilter_scale2x;
|
||||
QAction *settings_videoFilter_hq2x;
|
||||
QAction *settings_videoFilter_ntsc;
|
||||
QAction *settings_muteAudio;
|
||||
QMenu *settings_emulationSpeed;
|
||||
QAction *settings_emulationSpeed_slowest;
|
||||
QAction *settings_emulationSpeed_slow;
|
||||
QAction *settings_emulationSpeed_normal;
|
||||
QAction *settings_emulationSpeed_fast;
|
||||
QAction *settings_emulationSpeed_fastest;
|
||||
QAction *settings_emulationSpeed_syncVideo;
|
||||
QAction *settings_emulationSpeed_syncAudio;
|
||||
QAction *settings_configuration;
|
||||
QMenu *help;
|
||||
QAction *help_documentation;
|
||||
QAction *help_license;
|
||||
QAction *help_about;
|
||||
//
|
||||
CanvasObject *canvasContainer;
|
||||
QVBoxLayout *canvasLayout;
|
||||
CanvasWidget *canvas;
|
||||
QLabel *systemState;
|
||||
|
||||
void setup();
|
||||
void syncUi();
|
||||
|
||||
public slots:
|
||||
void loadCartridge();
|
||||
void powerOn();
|
||||
void powerOff();
|
||||
void reset();
|
||||
void setPort1None();
|
||||
void setPort1Joypad();
|
||||
void setPort1Multitap();
|
||||
void setPort1Mouse();
|
||||
void setPort2None();
|
||||
void setPort2Joypad();
|
||||
void setPort2Multitap();
|
||||
void setPort2Mouse();
|
||||
void setPort2SuperScope();
|
||||
void setPort2Justifier();
|
||||
void setPort2Justifiers();
|
||||
void quit();
|
||||
void setVideoMode1x();
|
||||
void setVideoMode2x();
|
||||
void setVideoMode3x();
|
||||
void setVideoMode4x();
|
||||
void setVideoModeMax();
|
||||
void toggleAspectCorrection();
|
||||
void toggleFullscreen();
|
||||
void setVideoNtsc();
|
||||
void setVideoPal();
|
||||
void setPointFilter();
|
||||
void setLinearFilter();
|
||||
void setNoFilter();
|
||||
void setScanlineFilter();
|
||||
void setScale2xFilter();
|
||||
void setHq2xFilter();
|
||||
void setNtscFilter();
|
||||
void muteAudio();
|
||||
void setSpeedSlowest();
|
||||
void setSpeedSlow();
|
||||
void setSpeedNormal();
|
||||
void setSpeedFast();
|
||||
void setSpeedFastest();
|
||||
void syncVideo();
|
||||
void syncAudio();
|
||||
void showConfigWindow();
|
||||
void showDocumentation();
|
||||
void showLicense();
|
||||
void showAbout();
|
||||
} *winMain;
|
||||
Reference in New Issue
Block a user