settings changed detect part 1
This commit is contained in:
parent
79f92fab68
commit
3ad0fe208d
|
@ -5531,12 +5531,14 @@ bool FurnaceGUI::loop() {
|
||||||
ImGui::CloseCurrentPopup();
|
ImGui::CloseCurrentPopup();
|
||||||
settingsOpen=false;
|
settingsOpen=false;
|
||||||
willCommit=true;
|
willCommit=true;
|
||||||
|
settingsChanged=false;
|
||||||
}
|
}
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::Button("No")) {
|
if (ImGui::Button("No")) {
|
||||||
ImGui::CloseCurrentPopup();
|
ImGui::CloseCurrentPopup();
|
||||||
settingsOpen=false;
|
settingsOpen=false;
|
||||||
syncSettings();
|
syncSettings();
|
||||||
|
settingsChanged=false;
|
||||||
}
|
}
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::Button("Cancel") || ImGui::IsKeyPressed(ImGuiKey_Escape)) {
|
if (ImGui::Button("Cancel") || ImGui::IsKeyPressed(ImGuiKey_Escape)) {
|
||||||
|
|
|
@ -1436,6 +1436,7 @@ class FurnaceGUI {
|
||||||
char emptyLabel2[32];
|
char emptyLabel2[32];
|
||||||
|
|
||||||
struct Settings {
|
struct Settings {
|
||||||
|
bool settingsChanged;
|
||||||
int mainFontSize, patFontSize, headFontSize, iconSize;
|
int mainFontSize, patFontSize, headFontSize, iconSize;
|
||||||
int audioEngine;
|
int audioEngine;
|
||||||
int audioQuality;
|
int audioQuality;
|
||||||
|
@ -1618,6 +1619,7 @@ class FurnaceGUI {
|
||||||
DivConfig initialSys;
|
DivConfig initialSys;
|
||||||
|
|
||||||
Settings():
|
Settings():
|
||||||
|
settingsChanged(false),
|
||||||
mainFontSize(18),
|
mainFontSize(18),
|
||||||
patFontSize(18),
|
patFontSize(18),
|
||||||
headFontSize(27),
|
headFontSize(27),
|
||||||
|
|
|
@ -216,21 +216,25 @@ const char* specificControls[18]={
|
||||||
#define SAMPLE_RATE_SELECTABLE(x) \
|
#define SAMPLE_RATE_SELECTABLE(x) \
|
||||||
if (ImGui::Selectable(#x,settings.audioRate==x)) { \
|
if (ImGui::Selectable(#x,settings.audioRate==x)) { \
|
||||||
settings.audioRate=x; \
|
settings.audioRate=x; \
|
||||||
|
settingsChanged=true; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define BUFFER_SIZE_SELECTABLE(x) \
|
#define BUFFER_SIZE_SELECTABLE(x) \
|
||||||
if (ImGui::Selectable(#x,settings.audioBufSize==x)) { \
|
if (ImGui::Selectable(#x,settings.audioBufSize==x)) { \
|
||||||
settings.audioBufSize=x; \
|
settings.audioBufSize=x; \
|
||||||
|
settingsChanged=true; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define CHANS_SELECTABLE(x) \
|
#define CHANS_SELECTABLE(x) \
|
||||||
if (ImGui::Selectable(nonProAudioOuts[x-1],settings.audioChans==x)) { \
|
if (ImGui::Selectable(nonProAudioOuts[x-1],settings.audioChans==x)) { \
|
||||||
settings.audioChans=x; \
|
settings.audioChans=x; \
|
||||||
|
settingsChanged=true; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define UI_COLOR_CONFIG(what,label) \
|
#define UI_COLOR_CONFIG(what,label) \
|
||||||
if (ImGui::ColorEdit4(label "##CC_" #what,(float*)&uiColors[what])) { \
|
if (ImGui::ColorEdit4(label "##CC_" #what,(float*)&uiColors[what])) { \
|
||||||
applyUISettings(false); \
|
applyUISettings(false); \
|
||||||
|
settingsChanged=true; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define KEYBIND_CONFIG_BEGIN(id) \
|
#define KEYBIND_CONFIG_BEGIN(id) \
|
||||||
|
@ -248,6 +252,7 @@ const char* specificControls[18]={
|
||||||
ImGui::TableNextColumn(); \
|
ImGui::TableNextColumn(); \
|
||||||
if (ImGui::Button(fmt::sprintf("%s##KC_" #what,(bindSetPending && bindSetTarget==what)?"Press key...":getKeyName(actionKeys[what])).c_str())) { \
|
if (ImGui::Button(fmt::sprintf("%s##KC_" #what,(bindSetPending && bindSetTarget==what)?"Press key...":getKeyName(actionKeys[what])).c_str())) { \
|
||||||
promptKey(what); \
|
promptKey(what); \
|
||||||
|
settingsChanged=true; \
|
||||||
} \
|
} \
|
||||||
if (ImGui::IsItemClicked(ImGuiMouseButton_Right)) actionKeys[what]=0;
|
if (ImGui::IsItemClicked(ImGuiMouseButton_Right)) actionKeys[what]=0;
|
||||||
|
|
||||||
|
@ -318,8 +323,12 @@ void FurnaceGUI::drawSettings() {
|
||||||
}
|
}
|
||||||
if (ImGui::Begin("Settings",&settingsOpen,ImGuiWindowFlags_NoDocking|globalWinFlags)) {
|
if (ImGui::Begin("Settings",&settingsOpen,ImGuiWindowFlags_NoDocking|globalWinFlags)) {
|
||||||
if (!settingsOpen) {
|
if (!settingsOpen) {
|
||||||
|
if(settingsChanged) {
|
||||||
settingsOpen=true;
|
settingsOpen=true;
|
||||||
showWarning("Do you want to save your settings?",GUI_WARN_CLOSE_SETTINGS);
|
showWarning("Do you want to save your settings?",GUI_WARN_CLOSE_SETTINGS);
|
||||||
|
} else {
|
||||||
|
settingsOpen=false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (ImGui::BeginTabBar("settingsTab")) {
|
if (ImGui::BeginTabBar("settingsTab")) {
|
||||||
// NEW SETTINGS HERE
|
// NEW SETTINGS HERE
|
||||||
|
@ -331,16 +340,19 @@ void FurnaceGUI::drawSettings() {
|
||||||
#ifdef HAVE_RENDER_SDL
|
#ifdef HAVE_RENDER_SDL
|
||||||
if (ImGui::Selectable("SDL Renderer",curRenderBackend=="SDL")) {
|
if (ImGui::Selectable("SDL Renderer",curRenderBackend=="SDL")) {
|
||||||
settings.renderBackend="SDL";
|
settings.renderBackend="SDL";
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_RENDER_DX11
|
#ifdef HAVE_RENDER_DX11
|
||||||
if (ImGui::Selectable("DirectX 11",curRenderBackend=="DirectX 11")) {
|
if (ImGui::Selectable("DirectX 11",curRenderBackend=="DirectX 11")) {
|
||||||
settings.renderBackend="DirectX 11";
|
settings.renderBackend="DirectX 11";
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_RENDER_GL
|
#ifdef HAVE_RENDER_GL
|
||||||
if (ImGui::Selectable("OpenGL",curRenderBackend=="OpenGL")) {
|
if (ImGui::Selectable("OpenGL",curRenderBackend=="OpenGL")) {
|
||||||
settings.renderBackend="OpenGL";
|
settings.renderBackend="OpenGL";
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
ImGui::EndCombo();
|
ImGui::EndCombo();
|
||||||
|
@ -352,10 +364,12 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::BeginCombo("Render driver",settings.renderDriver.empty()?"Automatic":settings.renderDriver.c_str())) {
|
if (ImGui::BeginCombo("Render driver",settings.renderDriver.empty()?"Automatic":settings.renderDriver.c_str())) {
|
||||||
if (ImGui::Selectable("Automatic",settings.renderDriver.empty())) {
|
if (ImGui::Selectable("Automatic",settings.renderDriver.empty())) {
|
||||||
settings.renderDriver="";
|
settings.renderDriver="";
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
for (String& i: availRenderDrivers) {
|
for (String& i: availRenderDrivers) {
|
||||||
if (ImGui::Selectable(i.c_str(),i==settings.renderDriver)) {
|
if (ImGui::Selectable(i.c_str(),i==settings.renderDriver)) {
|
||||||
settings.renderDriver=i;
|
settings.renderDriver=i;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ImGui::EndCombo();
|
ImGui::EndCombo();
|
||||||
|
@ -368,6 +382,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
bool renderClearPosB=settings.renderClearPos;
|
bool renderClearPosB=settings.renderClearPos;
|
||||||
if (ImGui::Checkbox("Late render clear",&renderClearPosB)) {
|
if (ImGui::Checkbox("Late render clear",&renderClearPosB)) {
|
||||||
settings.renderClearPos=renderClearPosB;
|
settings.renderClearPos=renderClearPosB;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
if (ImGui::IsItemHovered()) {
|
if (ImGui::IsItemHovered()) {
|
||||||
ImGui::SetTooltip("calls rend->clear() after rend->present(). might reduce UI latency by one frame in some drivers.");
|
ImGui::SetTooltip("calls rend->clear() after rend->present(). might reduce UI latency by one frame in some drivers.");
|
||||||
|
@ -376,6 +391,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
bool powerSaveB=settings.powerSave;
|
bool powerSaveB=settings.powerSave;
|
||||||
if (ImGui::Checkbox("Power-saving mode",&powerSaveB)) {
|
if (ImGui::Checkbox("Power-saving mode",&powerSaveB)) {
|
||||||
settings.powerSave=powerSaveB;
|
settings.powerSave=powerSaveB;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
if (ImGui::IsItemHovered()) {
|
if (ImGui::IsItemHovered()) {
|
||||||
ImGui::SetTooltip("saves power by lowering the frame rate to 2fps when idle.\nmay cause issues under Mesa drivers!");
|
ImGui::SetTooltip("saves power by lowering the frame rate to 2fps when idle.\nmay cause issues under Mesa drivers!");
|
||||||
|
@ -385,6 +401,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
bool noThreadedInputB=settings.noThreadedInput;
|
bool noThreadedInputB=settings.noThreadedInput;
|
||||||
if (ImGui::Checkbox("Disable threaded input (restart after changing!)",&noThreadedInputB)) {
|
if (ImGui::Checkbox("Disable threaded input (restart after changing!)",&noThreadedInputB)) {
|
||||||
settings.noThreadedInput=noThreadedInputB;
|
settings.noThreadedInput=noThreadedInputB;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
if (ImGui::IsItemHovered()) {
|
if (ImGui::IsItemHovered()) {
|
||||||
ImGui::SetTooltip("threaded input processes key presses for note preview on a separate thread (on supported platforms), which reduces latency.\nhowever, crashes have been reported when threaded input is on. enable this option if that is the case.");
|
ImGui::SetTooltip("threaded input processes key presses for note preview on a separate thread (on supported platforms), which reduces latency.\nhowever, crashes have been reported when threaded input is on. enable this option if that is the case.");
|
||||||
|
@ -394,6 +411,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
bool eventDelayB=settings.eventDelay;
|
bool eventDelayB=settings.eventDelay;
|
||||||
if (ImGui::Checkbox("Enable event delay",&eventDelayB)) {
|
if (ImGui::Checkbox("Enable event delay",&eventDelayB)) {
|
||||||
settings.eventDelay=eventDelayB;
|
settings.eventDelay=eventDelayB;
|
||||||
|
settingsChanged=true;
|
||||||
applyUISettings(false);
|
applyUISettings(false);
|
||||||
}
|
}
|
||||||
if (ImGui::IsItemHovered()) {
|
if (ImGui::IsItemHovered()) {
|
||||||
|
@ -405,6 +423,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (settings.chanOscThreads<0) settings.chanOscThreads=0;
|
if (settings.chanOscThreads<0) settings.chanOscThreads=0;
|
||||||
if (settings.chanOscThreads>(cpuCores*3)) settings.chanOscThreads=cpuCores*3;
|
if (settings.chanOscThreads>(cpuCores*3)) settings.chanOscThreads=cpuCores*3;
|
||||||
if (settings.chanOscThreads>256) settings.chanOscThreads=256;
|
if (settings.chanOscThreads>256) settings.chanOscThreads=256;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
if (settings.chanOscThreads>=(cpuCores*3)) {
|
if (settings.chanOscThreads>=(cpuCores*3)) {
|
||||||
if (ImGui::IsItemHovered()) {
|
if (ImGui::IsItemHovered()) {
|
||||||
|
@ -427,16 +446,19 @@ void FurnaceGUI::drawSettings() {
|
||||||
bool sysFileDialogB=settings.sysFileDialog;
|
bool sysFileDialogB=settings.sysFileDialog;
|
||||||
if (ImGui::Checkbox("Use system file picker",&sysFileDialogB)) {
|
if (ImGui::Checkbox("Use system file picker",&sysFileDialogB)) {
|
||||||
settings.sysFileDialog=sysFileDialogB;
|
settings.sysFileDialog=sysFileDialogB;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ImGui::InputInt("Number of recent files",&settings.maxRecentFile)) {
|
if (ImGui::InputInt("Number of recent files",&settings.maxRecentFile)) {
|
||||||
if (settings.maxRecentFile<0) settings.maxRecentFile=0;
|
if (settings.maxRecentFile<0) settings.maxRecentFile=0;
|
||||||
if (settings.maxRecentFile>30) settings.maxRecentFile=30;
|
if (settings.maxRecentFile>30) settings.maxRecentFile=30;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool compressB=settings.compress;
|
bool compressB=settings.compress;
|
||||||
if (ImGui::Checkbox("Compress when saving",&compressB)) {
|
if (ImGui::Checkbox("Compress when saving",&compressB)) {
|
||||||
settings.compress=compressB;
|
settings.compress=compressB;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
if (ImGui::IsItemHovered()) {
|
if (ImGui::IsItemHovered()) {
|
||||||
ImGui::SetTooltip("use zlib to compress saved songs.");
|
ImGui::SetTooltip("use zlib to compress saved songs.");
|
||||||
|
@ -445,11 +467,13 @@ void FurnaceGUI::drawSettings() {
|
||||||
bool saveUnusedPatternsB=settings.saveUnusedPatterns;
|
bool saveUnusedPatternsB=settings.saveUnusedPatterns;
|
||||||
if (ImGui::Checkbox("Save unused patterns",&saveUnusedPatternsB)) {
|
if (ImGui::Checkbox("Save unused patterns",&saveUnusedPatternsB)) {
|
||||||
settings.saveUnusedPatterns=saveUnusedPatternsB;
|
settings.saveUnusedPatterns=saveUnusedPatternsB;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool newPatternFormatB=settings.newPatternFormat;
|
bool newPatternFormatB=settings.newPatternFormat;
|
||||||
if (ImGui::Checkbox("Use new pattern format when saving",&newPatternFormatB)) {
|
if (ImGui::Checkbox("Use new pattern format when saving",&newPatternFormatB)) {
|
||||||
settings.newPatternFormat=newPatternFormatB;
|
settings.newPatternFormat=newPatternFormatB;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
if (ImGui::IsItemHovered()) {
|
if (ImGui::IsItemHovered()) {
|
||||||
ImGui::SetTooltip("use a packed format which saves space when saving songs.\ndisable if you need compatibility with older Furnace and/or tools\nwhich do not support this format.");
|
ImGui::SetTooltip("use a packed format which saves space when saving songs.\ndisable if you need compatibility with older Furnace and/or tools\nwhich do not support this format.");
|
||||||
|
@ -458,6 +482,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
bool noDMFCompatB=settings.noDMFCompat;
|
bool noDMFCompatB=settings.noDMFCompat;
|
||||||
if (ImGui::Checkbox("Don't apply compatibility flags when loading .dmf",&noDMFCompatB)) {
|
if (ImGui::Checkbox("Don't apply compatibility flags when loading .dmf",&noDMFCompatB)) {
|
||||||
settings.noDMFCompat=noDMFCompatB;
|
settings.noDMFCompat=noDMFCompatB;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
if (ImGui::IsItemHovered()) {
|
if (ImGui::IsItemHovered()) {
|
||||||
ImGui::SetTooltip("do not report any issues arising from the use of this option!");
|
ImGui::SetTooltip("do not report any issues arising from the use of this option!");
|
||||||
|
@ -467,12 +492,15 @@ void FurnaceGUI::drawSettings() {
|
||||||
ImGui::Indent();
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("No##pol0",settings.playOnLoad==0)) {
|
if (ImGui::RadioButton("No##pol0",settings.playOnLoad==0)) {
|
||||||
settings.playOnLoad=0;
|
settings.playOnLoad=0;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
if (ImGui::RadioButton("Only if already playing##pol1",settings.playOnLoad==1)) {
|
if (ImGui::RadioButton("Only if already playing##pol1",settings.playOnLoad==1)) {
|
||||||
settings.playOnLoad=1;
|
settings.playOnLoad=1;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
if (ImGui::RadioButton("Yes##pol0",settings.playOnLoad==2)) {
|
if (ImGui::RadioButton("Yes##pol0",settings.playOnLoad==2)) {
|
||||||
settings.playOnLoad=2;
|
settings.playOnLoad=2;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
ImGui::Unindent();
|
ImGui::Unindent();
|
||||||
|
|
||||||
|
@ -480,27 +508,32 @@ void FurnaceGUI::drawSettings() {
|
||||||
ImGui::Indent();
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Set to these values on start-up:##fot0",settings.persistFadeOut==0)) {
|
if (ImGui::RadioButton("Set to these values on start-up:##fot0",settings.persistFadeOut==0)) {
|
||||||
settings.persistFadeOut=0;
|
settings.persistFadeOut=0;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
ImGui::BeginDisabled(settings.persistFadeOut);
|
ImGui::BeginDisabled(settings.persistFadeOut);
|
||||||
ImGui::Indent();
|
ImGui::Indent();
|
||||||
if (ImGui::InputInt("Loops",&settings.exportLoops,1,2)) {
|
if (ImGui::InputInt("Loops",&settings.exportLoops,1,2)) {
|
||||||
if (exportLoops<0) exportLoops=0;
|
if (exportLoops<0) exportLoops=0;
|
||||||
exportLoops=settings.exportLoops;
|
exportLoops=settings.exportLoops;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
if (ImGui::InputDouble("Fade out (seconds)",&settings.exportFadeOut,1.0,2.0,"%.1f")) {
|
if (ImGui::InputDouble("Fade out (seconds)",&settings.exportFadeOut,1.0,2.0,"%.1f")) {
|
||||||
if (exportFadeOut<0.0) exportFadeOut=0.0;
|
if (exportFadeOut<0.0) exportFadeOut=0.0;
|
||||||
exportFadeOut=settings.exportFadeOut;
|
exportFadeOut=settings.exportFadeOut;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
ImGui::Unindent();
|
ImGui::Unindent();
|
||||||
ImGui::EndDisabled();
|
ImGui::EndDisabled();
|
||||||
if (ImGui::RadioButton("Remember last values##fot1",settings.persistFadeOut==1)) {
|
if (ImGui::RadioButton("Remember last values##fot1",settings.persistFadeOut==1)) {
|
||||||
settings.persistFadeOut=1;
|
settings.persistFadeOut=1;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
ImGui::Unindent();
|
ImGui::Unindent();
|
||||||
|
|
||||||
bool writeInsNamesB=settings.writeInsNames;
|
bool writeInsNamesB=settings.writeInsNames;
|
||||||
if (ImGui::Checkbox("Store instrument name in .fui",&writeInsNamesB)) {
|
if (ImGui::Checkbox("Store instrument name in .fui",&writeInsNamesB)) {
|
||||||
settings.writeInsNames=writeInsNamesB;
|
settings.writeInsNames=writeInsNamesB;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
if (ImGui::IsItemHovered()) {
|
if (ImGui::IsItemHovered()) {
|
||||||
ImGui::SetTooltip("when enabled, saving an instrument will store its name.\nthis may increase file size.");
|
ImGui::SetTooltip("when enabled, saving an instrument will store its name.\nthis may increase file size.");
|
||||||
|
@ -509,6 +542,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
bool readInsNamesB=settings.readInsNames;
|
bool readInsNamesB=settings.readInsNames;
|
||||||
if (ImGui::Checkbox("Load instrument name from .fui",&readInsNamesB)) {
|
if (ImGui::Checkbox("Load instrument name from .fui",&readInsNamesB)) {
|
||||||
settings.readInsNames=readInsNamesB;
|
settings.readInsNames=readInsNamesB;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
if (ImGui::IsItemHovered()) {
|
if (ImGui::IsItemHovered()) {
|
||||||
ImGui::SetTooltip("when enabled, loading an instrument will use the stored name (if present).\notherwise, it will use the file name.");
|
ImGui::SetTooltip("when enabled, loading an instrument will use the stored name (if present).\notherwise, it will use the file name.");
|
||||||
|
@ -529,6 +563,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
settings.initialSys.set(fmt::sprintf("flags%d",i),e->song.systemFlags[i].toBase64());
|
settings.initialSys.set(fmt::sprintf("flags%d",i),e->song.systemFlags[i].toBase64());
|
||||||
}
|
}
|
||||||
settings.initialSysName=e->song.systemName;
|
settings.initialSysName=e->song.systemName;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::Button("Randomize")) {
|
if (ImGui::Button("Randomize")) {
|
||||||
|
@ -578,6 +613,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
settings.initialSysName+=wordPool[i][rand()%wordPool[i].size()];
|
settings.initialSysName+=wordPool[i][rand()%wordPool[i].size()];
|
||||||
settings.initialSysName+=" ";
|
settings.initialSysName+=" ";
|
||||||
}
|
}
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::Button("Reset to defaults")) {
|
if (ImGui::Button("Reset to defaults")) {
|
||||||
|
@ -593,13 +629,16 @@ void FurnaceGUI::drawSettings() {
|
||||||
settings.initialSys.set("fr1",0.0f);
|
settings.initialSys.set("fr1",0.0f);
|
||||||
settings.initialSys.set("flags1","");
|
settings.initialSys.set("flags1","");
|
||||||
settings.initialSysName="Sega Genesis/Mega Drive";
|
settings.initialSysName="Sega Genesis/Mega Drive";
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::AlignTextToFramePadding();
|
ImGui::AlignTextToFramePadding();
|
||||||
ImGui::Text("Name");
|
ImGui::Text("Name");
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||||
ImGui::InputText("##InitSysName",&settings.initialSysName);
|
if (ImGui::InputText("##InitSysName",&settings.initialSysName)) {
|
||||||
|
settingsChanged=true;
|
||||||
|
}
|
||||||
|
|
||||||
int sysCount=0;
|
int sysCount=0;
|
||||||
int doRemove=-1;
|
int doRemove=-1;
|
||||||
|
@ -623,6 +662,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
sysID=(DivSystem)availableSystems[j];
|
sysID=(DivSystem)availableSystems[j];
|
||||||
settings.initialSys.set(fmt::sprintf("id%d",i),(int)e->systemToFileFur(sysID));
|
settings.initialSys.set(fmt::sprintf("id%d",i),(int)e->systemToFileFur(sysID));
|
||||||
settings.initialSys.set(fmt::sprintf("flags%d",i),"");
|
settings.initialSys.set(fmt::sprintf("flags%d",i),"");
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ImGui::EndCombo();
|
ImGui::EndCombo();
|
||||||
|
@ -632,12 +672,14 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::Checkbox("Invert",&doInvert)) {
|
if (ImGui::Checkbox("Invert",&doInvert)) {
|
||||||
sysVol=-sysVol;
|
sysVol=-sysVol;
|
||||||
settings.initialSys.set(fmt::sprintf("vol%d",i),sysVol);
|
settings.initialSys.set(fmt::sprintf("vol%d",i),sysVol);
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
//ImGui::BeginDisabled(settings.initialSys.size()<=4);
|
//ImGui::BeginDisabled(settings.initialSys.size()<=4);
|
||||||
pushDestColor();
|
pushDestColor();
|
||||||
if (ImGui::Button(ICON_FA_MINUS "##InitSysRemove")) {
|
if (ImGui::Button(ICON_FA_MINUS "##InitSysRemove")) {
|
||||||
doRemove=i;
|
doRemove=i;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
popDestColor();
|
popDestColor();
|
||||||
//ImGui::EndDisabled();
|
//ImGui::EndDisabled();
|
||||||
|
@ -650,18 +692,21 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (vol>10) vol=10;
|
if (vol>10) vol=10;
|
||||||
sysVol=doInvert?-vol:vol;
|
sysVol=doInvert?-vol:vol;
|
||||||
settings.initialSys.set(fmt::sprintf("vol%d",i),(float)sysVol);
|
settings.initialSys.set(fmt::sprintf("vol%d",i),(float)sysVol);
|
||||||
|
settingsChanged=true;
|
||||||
} rightClickable
|
} rightClickable
|
||||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x*2.0);
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x*2.0);
|
||||||
if (CWSliderFloat("Panning",&sysPan,-1.0f,1.0f)) {
|
if (CWSliderFloat("Panning",&sysPan,-1.0f,1.0f)) {
|
||||||
if (sysPan<-1.0f) sysPan=-1.0f;
|
if (sysPan<-1.0f) sysPan=-1.0f;
|
||||||
if (sysPan>1.0f) sysPan=1.0f;
|
if (sysPan>1.0f) sysPan=1.0f;
|
||||||
settings.initialSys.set(fmt::sprintf("pan%d",i),(float)sysPan);
|
settings.initialSys.set(fmt::sprintf("pan%d",i),(float)sysPan);
|
||||||
|
settingsChanged=true;
|
||||||
} rightClickable
|
} rightClickable
|
||||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x*2.0);
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x*2.0);
|
||||||
if (CWSliderFloat("Front/Rear",&sysPanFR,-1.0f,1.0f)) {
|
if (CWSliderFloat("Front/Rear",&sysPanFR,-1.0f,1.0f)) {
|
||||||
if (sysPanFR<-1.0f) sysPanFR=-1.0f;
|
if (sysPanFR<-1.0f) sysPanFR=-1.0f;
|
||||||
if (sysPanFR>1.0f) sysPanFR=1.0f;
|
if (sysPanFR>1.0f) sysPanFR=1.0f;
|
||||||
settings.initialSys.set(fmt::sprintf("fr%d",i),(float)sysPanFR);
|
settings.initialSys.set(fmt::sprintf("fr%d",i),(float)sysPanFR);
|
||||||
|
settingsChanged=true;
|
||||||
} rightClickable
|
} rightClickable
|
||||||
|
|
||||||
// oh please MSVC don't cry
|
// oh please MSVC don't cry
|
||||||
|
@ -711,9 +756,11 @@ void FurnaceGUI::drawSettings() {
|
||||||
ImGui::Indent();
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Display system preset selector##NSB0",settings.newSongBehavior==0)) {
|
if (ImGui::RadioButton("Display system preset selector##NSB0",settings.newSongBehavior==0)) {
|
||||||
settings.newSongBehavior=0;
|
settings.newSongBehavior=0;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
if (ImGui::RadioButton("Start with initial system##NSB1",settings.newSongBehavior==1)) {
|
if (ImGui::RadioButton("Start with initial system##NSB1",settings.newSongBehavior==1)) {
|
||||||
settings.newSongBehavior=1;
|
settings.newSongBehavior=1;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
ImGui::Unindent();
|
ImGui::Unindent();
|
||||||
|
|
||||||
|
@ -723,26 +770,32 @@ void FurnaceGUI::drawSettings() {
|
||||||
ImGui::Indent();
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("No##pis0",settings.alwaysPlayIntro==0)) {
|
if (ImGui::RadioButton("No##pis0",settings.alwaysPlayIntro==0)) {
|
||||||
settings.alwaysPlayIntro=0;
|
settings.alwaysPlayIntro=0;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
if (ImGui::RadioButton("Short##pis1",settings.alwaysPlayIntro==1)) {
|
if (ImGui::RadioButton("Short##pis1",settings.alwaysPlayIntro==1)) {
|
||||||
settings.alwaysPlayIntro=1;
|
settings.alwaysPlayIntro=1;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
if (ImGui::RadioButton("Full (short when loading song)##pis2",settings.alwaysPlayIntro==2)) {
|
if (ImGui::RadioButton("Full (short when loading song)##pis2",settings.alwaysPlayIntro==2)) {
|
||||||
settings.alwaysPlayIntro=2;
|
settings.alwaysPlayIntro=2;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
if (ImGui::RadioButton("Full (always)##pis3",settings.alwaysPlayIntro==3)) {
|
if (ImGui::RadioButton("Full (always)##pis3",settings.alwaysPlayIntro==3)) {
|
||||||
settings.alwaysPlayIntro=3;
|
settings.alwaysPlayIntro=3;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
ImGui::Unindent();
|
ImGui::Unindent();
|
||||||
|
|
||||||
bool disableFadeInB=settings.disableFadeIn;
|
bool disableFadeInB=settings.disableFadeIn;
|
||||||
if (ImGui::Checkbox("Disable fade-in during start-up",&disableFadeInB)) {
|
if (ImGui::Checkbox("Disable fade-in during start-up",&disableFadeInB)) {
|
||||||
settings.disableFadeIn=disableFadeInB;
|
settings.disableFadeIn=disableFadeInB;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool partyTimeB=settings.partyTime;
|
bool partyTimeB=settings.partyTime;
|
||||||
if (ImGui::Checkbox("About screen party time",&partyTimeB)) {
|
if (ImGui::Checkbox("About screen party time",&partyTimeB)) {
|
||||||
settings.partyTime=partyTimeB;
|
settings.partyTime=partyTimeB;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
if (ImGui::IsItemHovered()) {
|
if (ImGui::IsItemHovered()) {
|
||||||
ImGui::SetTooltip("Warning: may cause epileptic seizures.");
|
ImGui::SetTooltip("Warning: may cause epileptic seizures.");
|
||||||
|
@ -753,6 +806,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
bool blankInsB=settings.blankIns;
|
bool blankInsB=settings.blankIns;
|
||||||
if (ImGui::Checkbox("New instruments are blank",&blankInsB)) {
|
if (ImGui::Checkbox("New instruments are blank",&blankInsB)) {
|
||||||
settings.blankIns=blankInsB;
|
settings.blankIns=blankInsB;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
END_SECTION;
|
END_SECTION;
|
||||||
|
@ -774,14 +828,17 @@ void FurnaceGUI::drawSettings() {
|
||||||
#ifdef HAVE_JACK
|
#ifdef HAVE_JACK
|
||||||
if (ImGui::Selectable("JACK",settings.audioEngine==DIV_AUDIO_JACK)) {
|
if (ImGui::Selectable("JACK",settings.audioEngine==DIV_AUDIO_JACK)) {
|
||||||
settings.audioEngine=DIV_AUDIO_JACK;
|
settings.audioEngine=DIV_AUDIO_JACK;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (ImGui::Selectable("SDL",settings.audioEngine==DIV_AUDIO_SDL)) {
|
if (ImGui::Selectable("SDL",settings.audioEngine==DIV_AUDIO_SDL)) {
|
||||||
settings.audioEngine=DIV_AUDIO_SDL;
|
settings.audioEngine=DIV_AUDIO_SDL;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
#ifdef HAVE_PA
|
#ifdef HAVE_PA
|
||||||
if (ImGui::Selectable("PortAudio",settings.audioEngine==DIV_AUDIO_PORTAUDIO)) {
|
if (ImGui::Selectable("PortAudio",settings.audioEngine==DIV_AUDIO_PORTAUDIO)) {
|
||||||
settings.audioEngine=DIV_AUDIO_PORTAUDIO;
|
settings.audioEngine=DIV_AUDIO_PORTAUDIO;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (settings.audioEngine!=prevAudioEngine) {
|
if (settings.audioEngine!=prevAudioEngine) {
|
||||||
|
@ -802,10 +859,12 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::BeginCombo("##SDLADriver",settings.sdlAudioDriver.empty()?"Automatic":settings.sdlAudioDriver.c_str())) {
|
if (ImGui::BeginCombo("##SDLADriver",settings.sdlAudioDriver.empty()?"Automatic":settings.sdlAudioDriver.c_str())) {
|
||||||
if (ImGui::Selectable("Automatic",settings.sdlAudioDriver.empty())) {
|
if (ImGui::Selectable("Automatic",settings.sdlAudioDriver.empty())) {
|
||||||
settings.sdlAudioDriver="";
|
settings.sdlAudioDriver="";
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
for (String& i: availAudioDrivers) {
|
for (String& i: availAudioDrivers) {
|
||||||
if (ImGui::Selectable(i.c_str(),i==settings.sdlAudioDriver)) {
|
if (ImGui::Selectable(i.c_str(),i==settings.sdlAudioDriver)) {
|
||||||
settings.sdlAudioDriver=i;
|
settings.sdlAudioDriver=i;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ImGui::EndCombo();
|
ImGui::EndCombo();
|
||||||
|
@ -836,10 +895,12 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::BeginCombo("##AudioDevice",audioDevName.c_str())) {
|
if (ImGui::BeginCombo("##AudioDevice",audioDevName.c_str())) {
|
||||||
if (ImGui::Selectable("<System default>",settings.audioDevice.empty())) {
|
if (ImGui::Selectable("<System default>",settings.audioDevice.empty())) {
|
||||||
settings.audioDevice="";
|
settings.audioDevice="";
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
for (String& i: e->getAudioDevices()) {
|
for (String& i: e->getAudioDevices()) {
|
||||||
if (ImGui::Selectable(i.c_str(),i==settings.audioDevice)) {
|
if (ImGui::Selectable(i.c_str(),i==settings.audioDevice)) {
|
||||||
settings.audioDevice=i;
|
settings.audioDevice=i;
|
||||||
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ImGui::EndCombo();
|
ImGui::EndCombo();
|
||||||
|
@ -3158,18 +3219,27 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::Button("OK##SettingsOK")) {
|
if (ImGui::Button("OK##SettingsOK")) {
|
||||||
settingsOpen=false;
|
settingsOpen=false;
|
||||||
willCommit=true;
|
willCommit=true;
|
||||||
|
settingsChanged=false;
|
||||||
}
|
}
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::Button("Cancel##SettingsCancel")) {
|
if (ImGui::Button("Cancel##SettingsCancel")) {
|
||||||
settingsOpen=false;
|
settingsOpen=false;
|
||||||
audioEngineChanged=false;
|
audioEngineChanged=false;
|
||||||
syncSettings();
|
syncSettings();
|
||||||
|
settingsChanged=false;
|
||||||
}
|
}
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
|
bool applyDisabled=false;
|
||||||
|
if (!settingsChanged) {
|
||||||
|
ImGui::BeginDisabled();
|
||||||
|
applyDisabled=true;
|
||||||
|
}
|
||||||
if (ImGui::Button("Apply##SettingsApply")) {
|
if (ImGui::Button("Apply##SettingsApply")) {
|
||||||
settingsOpen=true;
|
settingsOpen=true;
|
||||||
willCommit=true;
|
willCommit=true;
|
||||||
|
settingsChanged=false;
|
||||||
}
|
}
|
||||||
|
if (!settingsChanged && applyDisabled) ImGui::EndDisabled();
|
||||||
}
|
}
|
||||||
if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_SETTINGS;
|
if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_SETTINGS;
|
||||||
ImGui::End();
|
ImGui::End();
|
||||||
|
|
Loading…
Reference in a new issue