bsnes/higan/target-ethos/settings/settings.cpp

79 lines
2.0 KiB
C++
Executable File

#include "../ethos.hpp"
#include "video.cpp"
#include "audio.cpp"
#include "input.cpp"
#include "hotkey.cpp"
#include "timing.cpp"
#include "server.cpp"
#include "driver.cpp"
Settings *settings = nullptr;
void SettingsLayout::append(Sizable &sizable, const Size &size, unsigned spacing) {
layout.append(sizable, size, spacing);
}
SettingsLayout::SettingsLayout() {
setMargin(5);
HorizontalLayout::append(spacer, {120, ~0}, 5);
HorizontalLayout::append(layout, { ~0, ~0});
}
Settings::Settings() {
setGeometry({128, 128, 640, 360});
windowManager->append(this, "Settings");
setTitle("Configuration Settings");
setStatusVisible();
layout.setMargin(5);
panelList.setFont(application->boldFont);
panelList.append("Video");
panelList.append("Audio");
panelList.append("Input");
panelList.append("Hotkeys");
panelList.append("Timing");
panelList.append("Server");
panelList.append("Driver");
append(layout);
layout.append(panelList, {120, ~0}, 5);
append(*videoSettings);
append(*audioSettings);
append(*inputSettings);
append(*hotkeySettings);
append(*timingSettings);
append(*serverSettings);
append(*driverSettings);
onClose = [&] {
timingSettings->analysis.stop = true;
};
panelList.onChange = {&Settings::panelChanged, this};
panelList.setSelection(2);
panelChanged();
}
void Settings::panelChanged() {
setStatusText("");
videoSettings->setVisible(false);
audioSettings->setVisible(false);
inputSettings->setVisible(false);
hotkeySettings->setVisible(false);
timingSettings->setVisible(false);
serverSettings->setVisible(false);
driverSettings->setVisible(false);
if(panelList.selected() == false) return;
switch(panelList.selection()) {
case 0: return videoSettings->setVisible();
case 1: return audioSettings->setVisible();
case 2: return inputSettings->setVisible();
case 3: return hotkeySettings->setVisible();
case 4: return timingSettings->setVisible();
case 5: return serverSettings->setVisible();
case 6: return driverSettings->setVisible();
}
}