GUI: aaaaaaaand here we go

importColors and exportColors now use the same framework as settings
This commit is contained in:
tildearrow 2023-12-23 20:05:07 -05:00
parent ce8eb34fbf
commit e58307684c

View file

@ -3697,236 +3697,325 @@ void FurnaceGUI::drawSettings() {
void FurnaceGUI::readConfig(DivConfig& conf, FurnaceGUISettingGroups groups) {
if (groups&GUI_SETTINGS_GENERAL) {
settings.renderDriver=conf.getString("renderDriver","");
settings.noDMFCompat=conf.getInt("noDMFCompat",0);
settings.dpiScale=conf.getFloat("dpiScale",0.0f);
settings.initialSysName=conf.getString("initialSysName","");
// initial system
String initialSys2=conf.getString("initialSys2","");
bool oldVol=conf.getInt("configVersion",DIV_ENGINE_VERSION)<135;
if (initialSys2.empty()) {
initialSys2=e->decodeSysDesc(conf.getString("initialSys",""));
oldVol=false;
}
settings.initialSys.clear();
settings.initialSys.loadFromBase64(initialSys2.c_str());
if (settings.initialSys.getInt("id0",0)==0) {
settings.initialSys.clear();
settings.initialSys.set("id0",e->systemToFileFur(DIV_SYSTEM_YM2612));
settings.initialSys.set("vol0",1.0f);
settings.initialSys.set("pan0",0.0f);
settings.initialSys.set("fr0",0.0f);
settings.initialSys.set("flags0","");
settings.initialSys.set("id1",e->systemToFileFur(DIV_SYSTEM_SMS));
settings.initialSys.set("vol1",0.5f);
settings.initialSys.set("pan1",0);
settings.initialSys.set("fr1",0);
settings.initialSys.set("flags1","");
} else {
if (oldVol) {
for (int i=0; settings.initialSys.getInt(fmt::sprintf("id%d",i),0); i++) {
float newVol=settings.initialSys.getInt(fmt::sprintf("vol%d",i),64);
float newPan=settings.initialSys.getInt(fmt::sprintf("pan%d",i),0);
newVol/=64.0f;
newPan/=127.0f;
settings.initialSys.set(fmt::sprintf("vol%d",i),newVol);
settings.initialSys.set(fmt::sprintf("pan%d",i),newPan);
}
conf.set("initialSys2",settings.initialSys.toBase64());
conf.set("configVersion",DIV_ENGINE_VERSION);
}
}
settings.noThreadedInput=conf.getInt("noThreadedInput",0);
settings.powerSave=conf.getInt("powerSave",POWER_SAVE_DEFAULT);
settings.eventDelay=conf.getInt("eventDelay",0);
settings.renderBackend=conf.getString("renderBackend",GUI_BACKEND_DEFAULT_NAME);
settings.renderClearPos=conf.getInt("renderClearPos",0);
settings.chanOscThreads=conf.getInt("chanOscThreads",0);
settings.renderPoolThreads=conf.getInt("renderPoolThreads",0);
settings.showPool=conf.getInt("showPool",0);
settings.writeInsNames=conf.getInt("writeInsNames",1);
settings.readInsNames=conf.getInt("readInsNames",1);
settings.defaultAuthorName=conf.getString("defaultAuthorName","");
settings.hiddenSystems=conf.getInt("hiddenSystems",0);
settings.allowEditDocking=conf.getInt("allowEditDocking",1);
settings.sysFileDialog=conf.getInt("sysFileDialog",SYS_FILE_DIALOG_DEFAULT);
settings.displayAllInsTypes=conf.getInt("displayAllInsTypes",0);
settings.displayPartial=conf.getInt("displayPartial",0);
settings.blankIns=conf.getInt("blankIns",0);
settings.saveWindowPos=conf.getInt("saveWindowPos",1);
settings.saveUnusedPatterns=conf.getInt("saveUnusedPatterns",0);
settings.maxRecentFile=conf.getInt("maxRecentFile",10);
settings.persistFadeOut=conf.getInt("persistFadeOut",1);
settings.exportLoops=conf.getInt("exportLoops",0);
settings.exportFadeOut=conf.getDouble("exportFadeOut",0.0);
settings.doubleClickTime=conf.getFloat("doubleClickTime",0.3f);
settings.disableFadeIn=conf.getInt("disableFadeIn",0);
settings.alwaysPlayIntro=conf.getInt("alwaysPlayIntro",0);
settings.iCannotWait=conf.getInt("iCannotWait",0);
settings.compress=conf.getInt("compress",1);
settings.newPatternFormat=conf.getInt("newPatternFormat",1);
settings.newSongBehavior=conf.getInt("newSongBehavior",0);
settings.playOnLoad=conf.getInt("playOnLoad",0);
settings.centerPopup=conf.getInt("centerPopup",1);
}
if (groups&GUI_SETTINGS_AUDIO) {
settings.audioEngine=(conf.getString("audioEngine","SDL")=="SDL")?1:0;
if (conf.getString("audioEngine","SDL")=="JACK") {
settings.audioEngine=DIV_AUDIO_JACK;
} else if (conf.getString("audioEngine","SDL")=="PortAudio") {
settings.audioEngine=DIV_AUDIO_PORTAUDIO;
} else {
settings.audioEngine=DIV_AUDIO_SDL;
}
settings.audioDevice=conf.getString("audioDevice","");
settings.sdlAudioDriver=conf.getString("sdlAudioDriver","");
settings.audioQuality=conf.getInt("audioQuality",0);
settings.audioHiPass=conf.getInt("audioHiPass",1);
settings.audioBufSize=conf.getInt("audioBufSize",1024);
settings.audioRate=conf.getInt("audioRate",44100);
settings.audioChans=conf.getInt("audioChans",2);
settings.lowLatency=conf.getInt("lowLatency",0);
settings.metroVol=conf.getInt("metroVol",100);
settings.sampleVol=conf.getInt("sampleVol",50);
settings.wasapiEx=conf.getInt("wasapiEx",0);
settings.clampSamples=conf.getInt("clampSamples",0);
settings.forceMono=conf.getInt("forceMono",0);
}
if (groups&GUI_SETTINGS_MIDI) {
settings.midiInDevice=conf.getString("midiInDevice","");
settings.midiOutDevice=conf.getString("midiOutDevice","");
settings.midiOutClock=conf.getInt("midiOutClock",0);
settings.midiOutTime=conf.getInt("midiOutTime",0);
settings.midiOutProgramChange=conf.getInt("midiOutProgramChange",0);
settings.midiOutMode=conf.getInt("midiOutMode",1);
settings.midiOutTimeRate=conf.getInt("midiOutTimeRate",0);
}
if (groups&GUI_SETTINGS_KEYBOARD) {
// keybinds
for (int i=0; i<GUI_ACTION_MAX; i++) {
if (guiActions[i].defaultBind==-1) continue; // not a bind
actionKeys[i]=conf.getInt(String("keybind_GUI_ACTION_")+String(guiActions[i].name),guiActions[i].defaultBind);
}
decodeKeyMap(noteKeys,conf.getString("noteKeys",DEFAULT_NOTE_KEYS));
}
if (groups&GUI_SETTINGS_BEHAVIOR) {
settings.soloAction=conf.getInt("soloAction",0);
settings.pullDeleteBehavior=conf.getInt("pullDeleteBehavior",1);
settings.wrapHorizontal=conf.getInt("wrapHorizontal",0);
settings.wrapVertical=conf.getInt("wrapVertical",0);
settings.stepOnDelete=conf.getInt("stepOnDelete",0);
settings.scrollStep=conf.getInt("scrollStep",0);
settings.avoidRaisingPattern=conf.getInt("avoidRaisingPattern",0);
settings.insFocusesPattern=conf.getInt("insFocusesPattern",1);
settings.stepOnInsert=conf.getInt("stepOnInsert",0);
settings.effectCursorDir=conf.getInt("effectCursorDir",1);
settings.cursorPastePos=conf.getInt("cursorPastePos",1);
settings.effectDeletionAltersValue=conf.getInt("effectDeletionAltersValue",1);
settings.pushNibble=conf.getInt("pushNibble",0);
settings.scrollChangesOrder=conf.getInt("scrollChangesOrder",0);
settings.cursorMoveNoScroll=conf.getInt("cursorMoveNoScroll",0);
settings.notePreviewBehavior=conf.getInt("notePreviewBehavior",1);
settings.absorbInsInput=conf.getInt("absorbInsInput",0);
settings.moveWindowTitle=conf.getInt("moveWindowTitle",1);
settings.doubleClickColumn=conf.getInt("doubleClickColumn",1);
settings.dragMovesSelection=conf.getInt("dragMovesSelection",2);
settings.cursorFollowsOrder=conf.getInt("cursorFollowsOrder",1);
settings.insertBehavior=conf.getInt("insertBehavior",1);
settings.pullDeleteRow=conf.getInt("pullDeleteRow",1);
settings.cursorFollowsWheel=conf.getInt("cursorFollowsWheel",0);
settings.removeInsOff=conf.getInt("removeInsOff",0);
settings.removeVolOff=conf.getInt("removeVolOff",0);
settings.insTypeMenu=conf.getInt("insTypeMenu",1);
settings.selectAssetOnLoad=conf.getInt("selectAssetOnLoad",1);
}
if (groups&GUI_SETTINGS_FONT) {
settings.mainFontSize=conf.getInt("mainFontSize",18);
settings.headFontSize=conf.getInt("headFontSize",27);
settings.patFontSize=conf.getInt("patFontSize",18);
settings.iconSize=conf.getInt("iconSize",16);
settings.mainFont=conf.getInt("mainFont",0);
settings.headFont=conf.getInt("headFont",0);
settings.patFont=conf.getInt("patFont",0);
settings.mainFontPath=conf.getString("mainFontPath","");
settings.headFontPath=conf.getString("headFontPath","");
settings.patFontPath=conf.getString("patFontPath","");
settings.loadJapanese=conf.getInt("loadJapanese",0);
settings.loadChinese=conf.getInt("loadChinese",0);
settings.loadChineseTraditional=conf.getInt("loadChineseTraditional",0);
settings.loadKorean=conf.getInt("loadKorean",0);
settings.fontBackend=conf.getInt("fontBackend",FONT_BACKEND_DEFAULT);
settings.fontHinting=conf.getInt("fontHinting",0);
settings.fontBitmap=conf.getInt("fontBitmap",0);
settings.fontAutoHint=conf.getInt("fontAutoHint",1);
settings.fontAntiAlias=conf.getInt("fontAntiAlias",1);
}
if (groups&GUI_SETTINGS_APPEARANCE) {
settings.oscRoundedCorners=conf.getInt("oscRoundedCorners",1);
settings.oscTakesEntireWindow=conf.getInt("oscTakesEntireWindow",0);
settings.oscBorder=conf.getInt("oscBorder",1);
settings.oscEscapesBoundary=conf.getInt("oscEscapesBoundary",0);
settings.oscMono=conf.getInt("oscMono",1);
settings.oscAntiAlias=conf.getInt("oscAntiAlias",1);
settings.channelColors=conf.getInt("channelColors",1);
settings.channelTextColors=conf.getInt("channelTextColors",0);
settings.channelStyle=conf.getInt("channelStyle",1);
settings.channelVolStyle=conf.getInt("channelVolStyle",0);
settings.channelFeedbackStyle=conf.getInt("channelFeedbackStyle",1);
settings.channelFont=conf.getInt("channelFont",1);
settings.channelTextCenter=conf.getInt("channelTextCenter",1);
settings.roundedWindows=conf.getInt("roundedWindows",1);
settings.roundedButtons=conf.getInt("roundedButtons",1);
settings.roundedMenus=conf.getInt("roundedMenus",0);
settings.separateFMColors=conf.getInt("separateFMColors",0);
settings.insEditColorize=conf.getInt("insEditColorize",0);
settings.chipNames=conf.getInt("chipNames",0);
settings.overflowHighlight=conf.getInt("overflowHighlight",0);
settings.partyTime=conf.getInt("partyTime",0);
settings.flatNotes=conf.getInt("flatNotes",0);
settings.germanNotation=conf.getInt("germanNotation",0);
settings.frameBorders=conf.getInt("frameBorders",0);
settings.noteOffLabel=conf.getString("noteOffLabel","OFF");
settings.noteRelLabel=conf.getString("noteRelLabel","===");
settings.macroRelLabel=conf.getString("macroRelLabel","REL");
settings.emptyLabel=conf.getString("emptyLabel","...");
settings.emptyLabel2=conf.getString("emptyLabel2","..");
settings.noteCellSpacing=conf.getInt("noteCellSpacing",0);
settings.insCellSpacing=conf.getInt("insCellSpacing",0);
settings.volCellSpacing=conf.getInt("volCellSpacing",0);
settings.effectCellSpacing=conf.getInt("effectCellSpacing",0);
settings.effectValCellSpacing=conf.getInt("effectValCellSpacing",0);
settings.patRowsBase=conf.getInt("patRowsBase",0);
settings.orderRowsBase=conf.getInt("orderRowsBase",1);
settings.fmNames=conf.getInt("fmNames",0);
settings.statusDisplay=conf.getInt("statusDisplay",0);
settings.viewPrevPattern=conf.getInt("viewPrevPattern",1);
settings.susPosition=conf.getInt("susPosition",0);
settings.titleBarInfo=conf.getInt("titleBarInfo",1);
settings.titleBarSys=conf.getInt("titleBarSys",1);
settings.oplStandardWaveNames=conf.getInt("oplStandardWaveNames",0);
settings.horizontalDataView=conf.getInt("horizontalDataView",0);
settings.noMultiSystem=conf.getInt("noMultiSystem",0);
settings.oldMacroVSlider=conf.getInt("oldMacroVSlider",0);
settings.unsignedDetune=conf.getInt("unsignedDetune",0);
settings.centerPattern=conf.getInt("centerPattern",0);
settings.ordersCursor=conf.getInt("ordersCursor",1);
settings.oneDigitEffects=conf.getInt("oneDigitEffects",0);
settings.orderButtonPos=conf.getInt("orderButtonPos",2);
settings.memUsageUnit=conf.getInt("memUsageUnit",1);
settings.capitalMenuBar=conf.getInt("capitalMenuBar",0);
settings.insIconsStyle=conf.getInt("insIconsStyle",1);
settings.sysSeparators=conf.getInt("sysSeparators",1);
}
if (groups&GUI_SETTINGS_LAYOUTS) {
settings.fmLayout=conf.getInt("fmLayout",4);
settings.sampleLayout=conf.getInt("sampleLayout",0);
settings.waveLayout=conf.getInt("waveLayout",0);
settings.exportOptionsLayout=conf.getInt("exportOptionsLayout",1);
settings.unifiedDataView=conf.getInt("unifiedDataView",0);
settings.macroLayout=conf.getInt("macroLayout",0);
settings.controlLayout=conf.getInt("controlLayout",3);
settings.classicChipOptions=conf.getInt("classicChipOptions",0);
}
if (groups&GUI_SETTINGS_COLOR) {
settings.guiColorsBase=conf.getInt("guiColorsBase",0);
settings.guiColorsShading=conf.getInt("guiColorsShading",0);
settings.basicColors=conf.getInt("basicColors",1);
// colors
for (int i=0; i<GUI_COLOR_MAX; i++) {
uiColors[i]=ImGui::ColorConvertU32ToFloat4(conf.getInt(guiColors[i].name,guiColors[i].defaultColor));
}
}
if (groups&GUI_SETTINGS_EMULATION) {
}
settings.arcadeCore=conf.getInt("arcadeCore",0);
settings.ym2612Core=conf.getInt("ym2612Core",0);
settings.snCore=conf.getInt("snCore",0);
settings.nesCore=conf.getInt("nesCore",0);
settings.fdsCore=conf.getInt("fdsCore",0);
settings.c64Core=conf.getInt("c64Core",0);
settings.pokeyCore=conf.getInt("pokeyCore",1);
settings.opnCore=conf.getInt("opnCore",1);
settings.opl2Core=conf.getInt("opl2Core",0);
settings.opl3Core=conf.getInt("opl3Core",0);
settings.arcadeCoreRender=conf.getInt("arcadeCoreRender",1);
settings.ym2612CoreRender=conf.getInt("ym2612CoreRender",0);
settings.snCoreRender=conf.getInt("snCoreRender",0);
settings.nesCoreRender=conf.getInt("nesCoreRender",0);
settings.fdsCoreRender=conf.getInt("fdsCoreRender",1);
settings.c64CoreRender=conf.getInt("c64CoreRender",1);
settings.pokeyCoreRender=conf.getInt("pokeyCoreRender",1);
settings.opnCoreRender=conf.getInt("opnCoreRender",1);
settings.opl2CoreRender=conf.getInt("opl2CoreRender",0);
settings.opl3CoreRender=conf.getInt("opl3CoreRender",0);
settings.mainFontSize=conf.getInt("mainFontSize",18);
settings.headFontSize=conf.getInt("headFontSize",27);
settings.patFontSize=conf.getInt("patFontSize",18);
settings.iconSize=conf.getInt("iconSize",16);
settings.audioEngine=(conf.getString("audioEngine","SDL")=="SDL")?1:0;
if (conf.getString("audioEngine","SDL")=="JACK") {
settings.audioEngine=DIV_AUDIO_JACK;
} else if (conf.getString("audioEngine","SDL")=="PortAudio") {
settings.audioEngine=DIV_AUDIO_PORTAUDIO;
} else {
settings.audioEngine=DIV_AUDIO_SDL;
settings.pcSpeakerOutMethod=conf.getInt("pcSpeakerOutMethod",0);
settings.yrw801Path=conf.getString("yrw801Path","");
settings.tg100Path=conf.getString("tg100Path","");
settings.mu5Path=conf.getString("mu5Path","");
}
settings.audioDevice=conf.getString("audioDevice","");
settings.audioChans=conf.getInt("audioChans",2);
settings.midiInDevice=conf.getString("midiInDevice","");
settings.midiOutDevice=conf.getString("midiOutDevice","");
settings.renderDriver=conf.getString("renderDriver","");
settings.sdlAudioDriver=conf.getString("sdlAudioDriver","");
settings.audioQuality=conf.getInt("audioQuality",0);
settings.audioHiPass=conf.getInt("audioHiPass",1);
settings.audioBufSize=conf.getInt("audioBufSize",1024);
settings.audioRate=conf.getInt("audioRate",44100);
settings.arcadeCore=conf.getInt("arcadeCore",0);
settings.ym2612Core=conf.getInt("ym2612Core",0);
settings.snCore=conf.getInt("snCore",0);
settings.nesCore=conf.getInt("nesCore",0);
settings.fdsCore=conf.getInt("fdsCore",0);
settings.c64Core=conf.getInt("c64Core",0);
settings.pokeyCore=conf.getInt("pokeyCore",1);
settings.opnCore=conf.getInt("opnCore",1);
settings.opl2Core=conf.getInt("opl2Core",0);
settings.opl3Core=conf.getInt("opl3Core",0);
settings.arcadeCoreRender=conf.getInt("arcadeCoreRender",1);
settings.ym2612CoreRender=conf.getInt("ym2612CoreRender",0);
settings.snCoreRender=conf.getInt("snCoreRender",0);
settings.nesCoreRender=conf.getInt("nesCoreRender",0);
settings.fdsCoreRender=conf.getInt("fdsCoreRender",1);
settings.c64CoreRender=conf.getInt("c64CoreRender",1);
settings.pokeyCoreRender=conf.getInt("pokeyCoreRender",1);
settings.opnCoreRender=conf.getInt("opnCoreRender",1);
settings.opl2CoreRender=conf.getInt("opl2CoreRender",0);
settings.opl3CoreRender=conf.getInt("opl3CoreRender",0);
settings.pcSpeakerOutMethod=conf.getInt("pcSpeakerOutMethod",0);
settings.yrw801Path=conf.getString("yrw801Path","");
settings.tg100Path=conf.getString("tg100Path","");
settings.mu5Path=conf.getString("mu5Path","");
settings.mainFont=conf.getInt("mainFont",0);
settings.headFont=conf.getInt("headFont",0);
settings.patFont=conf.getInt("patFont",0);
settings.mainFontPath=conf.getString("mainFontPath","");
settings.headFontPath=conf.getString("headFontPath","");
settings.patFontPath=conf.getString("patFontPath","");
settings.patRowsBase=conf.getInt("patRowsBase",0);
settings.orderRowsBase=conf.getInt("orderRowsBase",1);
settings.soloAction=conf.getInt("soloAction",0);
settings.pullDeleteBehavior=conf.getInt("pullDeleteBehavior",1);
settings.wrapHorizontal=conf.getInt("wrapHorizontal",0);
settings.wrapVertical=conf.getInt("wrapVertical",0);
settings.fmNames=conf.getInt("fmNames",0);
settings.allowEditDocking=conf.getInt("allowEditDocking",1);
settings.chipNames=conf.getInt("chipNames",0);
settings.overflowHighlight=conf.getInt("overflowHighlight",0);
settings.partyTime=conf.getInt("partyTime",0);
settings.flatNotes=conf.getInt("flatNotes",0);
settings.germanNotation=conf.getInt("germanNotation",0);
settings.stepOnDelete=conf.getInt("stepOnDelete",0);
settings.scrollStep=conf.getInt("scrollStep",0);
settings.sysSeparators=conf.getInt("sysSeparators",1);
settings.forceMono=conf.getInt("forceMono",0);
settings.controlLayout=conf.getInt("controlLayout",3);
settings.statusDisplay=conf.getInt("statusDisplay",0);
settings.dpiScale=conf.getFloat("dpiScale",0.0f);
settings.viewPrevPattern=conf.getInt("viewPrevPattern",1);
settings.guiColorsBase=conf.getInt("guiColorsBase",0);
settings.guiColorsShading=conf.getInt("guiColorsShading",0);
settings.avoidRaisingPattern=conf.getInt("avoidRaisingPattern",0);
settings.insFocusesPattern=conf.getInt("insFocusesPattern",1);
settings.stepOnInsert=conf.getInt("stepOnInsert",0);
settings.unifiedDataView=conf.getInt("unifiedDataView",0);
settings.sysFileDialog=conf.getInt("sysFileDialog",SYS_FILE_DIALOG_DEFAULT);
settings.roundedWindows=conf.getInt("roundedWindows",1);
settings.roundedButtons=conf.getInt("roundedButtons",1);
settings.roundedMenus=conf.getInt("roundedMenus",0);
settings.loadJapanese=conf.getInt("loadJapanese",0);
settings.loadChinese=conf.getInt("loadChinese",0);
settings.loadChineseTraditional=conf.getInt("loadChineseTraditional",0);
settings.loadKorean=conf.getInt("loadKorean",0);
settings.fmLayout=conf.getInt("fmLayout",4);
settings.sampleLayout=conf.getInt("sampleLayout",0);
settings.waveLayout=conf.getInt("waveLayout",0);
settings.susPosition=conf.getInt("susPosition",0);
settings.effectCursorDir=conf.getInt("effectCursorDir",1);
settings.cursorPastePos=conf.getInt("cursorPastePos",1);
settings.titleBarInfo=conf.getInt("titleBarInfo",1);
settings.titleBarSys=conf.getInt("titleBarSys",1);
settings.frameBorders=conf.getInt("frameBorders",0);
settings.effectDeletionAltersValue=conf.getInt("effectDeletionAltersValue",1);
settings.oscRoundedCorners=conf.getInt("oscRoundedCorners",1);
settings.oscTakesEntireWindow=conf.getInt("oscTakesEntireWindow",0);
settings.oscBorder=conf.getInt("oscBorder",1);
settings.oscEscapesBoundary=conf.getInt("oscEscapesBoundary",0);
settings.oscMono=conf.getInt("oscMono",1);
settings.oscAntiAlias=conf.getInt("oscAntiAlias",1);
settings.separateFMColors=conf.getInt("separateFMColors",0);
settings.insEditColorize=conf.getInt("insEditColorize",0);
settings.metroVol=conf.getInt("metroVol",100);
settings.sampleVol=conf.getInt("sampleVol",50);
settings.pushNibble=conf.getInt("pushNibble",0);
settings.scrollChangesOrder=conf.getInt("scrollChangesOrder",0);
settings.oplStandardWaveNames=conf.getInt("oplStandardWaveNames",0);
settings.cursorMoveNoScroll=conf.getInt("cursorMoveNoScroll",0);
settings.lowLatency=conf.getInt("lowLatency",0);
settings.notePreviewBehavior=conf.getInt("notePreviewBehavior",1);
settings.powerSave=conf.getInt("powerSave",POWER_SAVE_DEFAULT);
settings.absorbInsInput=conf.getInt("absorbInsInput",0);
settings.eventDelay=conf.getInt("eventDelay",0);
settings.moveWindowTitle=conf.getInt("moveWindowTitle",1);
settings.hiddenSystems=conf.getInt("hiddenSystems",0);
settings.horizontalDataView=conf.getInt("horizontalDataView",0);
settings.noMultiSystem=conf.getInt("noMultiSystem",0);
settings.oldMacroVSlider=conf.getInt("oldMacroVSlider",0);
settings.displayAllInsTypes=conf.getInt("displayAllInsTypes",0);
settings.displayPartial=conf.getInt("displayPartial",0);
settings.noteCellSpacing=conf.getInt("noteCellSpacing",0);
settings.insCellSpacing=conf.getInt("insCellSpacing",0);
settings.volCellSpacing=conf.getInt("volCellSpacing",0);
settings.effectCellSpacing=conf.getInt("effectCellSpacing",0);
settings.effectValCellSpacing=conf.getInt("effectValCellSpacing",0);
settings.doubleClickColumn=conf.getInt("doubleClickColumn",1);
settings.blankIns=conf.getInt("blankIns",0);
settings.dragMovesSelection=conf.getInt("dragMovesSelection",2);
settings.unsignedDetune=conf.getInt("unsignedDetune",0);
settings.noThreadedInput=conf.getInt("noThreadedInput",0);
settings.saveWindowPos=conf.getInt("saveWindowPos",1);
settings.initialSysName=conf.getString("initialSysName","");
settings.clampSamples=conf.getInt("clampSamples",0);
settings.noteOffLabel=conf.getString("noteOffLabel","OFF");
settings.noteRelLabel=conf.getString("noteRelLabel","===");
settings.macroRelLabel=conf.getString("macroRelLabel","REL");
settings.emptyLabel=conf.getString("emptyLabel","...");
settings.emptyLabel2=conf.getString("emptyLabel2","..");
settings.saveUnusedPatterns=conf.getInt("saveUnusedPatterns",0);
settings.channelColors=conf.getInt("channelColors",1);
settings.channelTextColors=conf.getInt("channelTextColors",0);
settings.channelStyle=conf.getInt("channelStyle",1);
settings.channelVolStyle=conf.getInt("channelVolStyle",0);
settings.channelFeedbackStyle=conf.getInt("channelFeedbackStyle",1);
settings.channelFont=conf.getInt("channelFont",1);
settings.channelTextCenter=conf.getInt("channelTextCenter",1);
settings.maxRecentFile=conf.getInt("maxRecentFile",10);
settings.midiOutClock=conf.getInt("midiOutClock",0);
settings.midiOutTime=conf.getInt("midiOutTime",0);
settings.midiOutProgramChange=conf.getInt("midiOutProgramChange",0);
settings.midiOutMode=conf.getInt("midiOutMode",1);
settings.midiOutTimeRate=conf.getInt("midiOutTimeRate",0);
settings.centerPattern=conf.getInt("centerPattern",0);
settings.ordersCursor=conf.getInt("ordersCursor",1);
settings.persistFadeOut=conf.getInt("persistFadeOut",1);
settings.exportLoops=conf.getInt("exportLoops",0);
settings.exportFadeOut=conf.getDouble("exportFadeOut",0.0);
settings.macroLayout=conf.getInt("macroLayout",0);
settings.doubleClickTime=conf.getFloat("doubleClickTime",0.3f);
settings.oneDigitEffects=conf.getInt("oneDigitEffects",0);
settings.disableFadeIn=conf.getInt("disableFadeIn",0);
settings.alwaysPlayIntro=conf.getInt("alwaysPlayIntro",0);
settings.cursorFollowsOrder=conf.getInt("cursorFollowsOrder",1);
settings.iCannotWait=conf.getInt("iCannotWait",0);
settings.orderButtonPos=conf.getInt("orderButtonPos",2);
settings.compress=conf.getInt("compress",1);
settings.newPatternFormat=conf.getInt("newPatternFormat",1);
settings.renderBackend=conf.getString("renderBackend",GUI_BACKEND_DEFAULT_NAME);
settings.renderClearPos=conf.getInt("renderClearPos",0);
settings.insertBehavior=conf.getInt("insertBehavior",1);
settings.pullDeleteRow=conf.getInt("pullDeleteRow",1);
settings.newSongBehavior=conf.getInt("newSongBehavior",0);
settings.memUsageUnit=conf.getInt("memUsageUnit",1);
settings.cursorFollowsWheel=conf.getInt("cursorFollowsWheel",0);
settings.noDMFCompat=conf.getInt("noDMFCompat",0);
settings.removeInsOff=conf.getInt("removeInsOff",0);
settings.removeVolOff=conf.getInt("removeVolOff",0);
settings.playOnLoad=conf.getInt("playOnLoad",0);
settings.insTypeMenu=conf.getInt("insTypeMenu",1);
settings.capitalMenuBar=conf.getInt("capitalMenuBar",0);
settings.centerPopup=conf.getInt("centerPopup",1);
settings.insIconsStyle=conf.getInt("insIconsStyle",1);
settings.classicChipOptions=conf.getInt("classicChipOptions",0);
settings.exportOptionsLayout=conf.getInt("exportOptionsLayout",1);
settings.wasapiEx=conf.getInt("wasapiEx",0);
settings.chanOscThreads=conf.getInt("chanOscThreads",0);
settings.renderPoolThreads=conf.getInt("renderPoolThreads",0);
settings.showPool=conf.getInt("showPool",0);
settings.writeInsNames=conf.getInt("writeInsNames",1);
settings.readInsNames=conf.getInt("readInsNames",1);
settings.defaultAuthorName=conf.getString("defaultAuthorName","");
settings.fontBackend=conf.getInt("fontBackend",FONT_BACKEND_DEFAULT);
settings.fontHinting=conf.getInt("fontHinting",0);
settings.fontBitmap=conf.getInt("fontBitmap",0);
settings.fontAutoHint=conf.getInt("fontAutoHint",1);
settings.fontAntiAlias=conf.getInt("fontAntiAlias",1);
settings.selectAssetOnLoad=conf.getInt("selectAssetOnLoad",1);
settings.basicColors=conf.getInt("basicColors",1);
clampSetting(settings.mainFontSize,2,96);
clampSetting(settings.headFontSize,2,96);
@ -4096,56 +4185,7 @@ void FurnaceGUI::readConfig(DivConfig& conf, FurnaceGUISettingGroups groups) {
clampSetting(settings.basicColors,0,1);
if (settings.exportLoops<0.0) settings.exportLoops=0.0;
if (settings.exportFadeOut<0.0) settings.exportFadeOut=0.0;
// keybinds
for (int i=0; i<GUI_ACTION_MAX; i++) {
if (guiActions[i].defaultBind==-1) continue; // not a bind
actionKeys[i]=conf.getInt(String("keybind_GUI_ACTION_")+String(guiActions[i].name),guiActions[i].defaultBind);
}
decodeKeyMap(noteKeys,conf.getString("noteKeys",DEFAULT_NOTE_KEYS));
// colors
for (int i=0; i<GUI_COLOR_MAX; i++) {
uiColors[i]=ImGui::ColorConvertU32ToFloat4(conf.getInt(guiColors[i].name,guiColors[i].defaultColor));
}
// initial system
String initialSys2=conf.getString("initialSys2","");
bool oldVol=conf.getInt("configVersion",DIV_ENGINE_VERSION)<135;
if (initialSys2.empty()) {
initialSys2=e->decodeSysDesc(conf.getString("initialSys",""));
oldVol=false;
}
settings.initialSys.clear();
settings.initialSys.loadFromBase64(initialSys2.c_str());
if (settings.initialSys.getInt("id0",0)==0) {
settings.initialSys.clear();
settings.initialSys.set("id0",e->systemToFileFur(DIV_SYSTEM_YM2612));
settings.initialSys.set("vol0",1.0f);
settings.initialSys.set("pan0",0.0f);
settings.initialSys.set("fr0",0.0f);
settings.initialSys.set("flags0","");
settings.initialSys.set("id1",e->systemToFileFur(DIV_SYSTEM_SMS));
settings.initialSys.set("vol1",0.5f);
settings.initialSys.set("pan1",0);
settings.initialSys.set("fr1",0);
settings.initialSys.set("flags1","");
} else {
if (oldVol) {
for (int i=0; settings.initialSys.getInt(fmt::sprintf("id%d",i),0); i++) {
float newVol=settings.initialSys.getInt(fmt::sprintf("vol%d",i),64);
float newPan=settings.initialSys.getInt(fmt::sprintf("pan%d",i),0);
newVol/=64.0f;
newPan/=127.0f;
settings.initialSys.set(fmt::sprintf("vol%d",i),newVol);
settings.initialSys.set(fmt::sprintf("pan%d",i),newPan);
}
conf.set("initialSys2",settings.initialSys.toBase64());
conf.set("configVersion",DIV_ENGINE_VERSION);
}
}
if (settings.exportFadeOut<0.0) settings.exportFadeOut=0.0;
}
void FurnaceGUI::writeConfig(DivConfig& conf, FurnaceGUISettingGroups groups) {
@ -4206,8 +4246,6 @@ void FurnaceGUI::writeConfig(DivConfig& conf, FurnaceGUISettingGroups groups) {
if (groups&GUI_SETTINGS_AUDIO) {
conf.set("audioEngine",String(audioBackends[settings.audioEngine]));
conf.set("audioDevice",settings.audioDevice);
conf.set("midiInDevice",settings.midiInDevice);
conf.set("midiOutDevice",settings.midiOutDevice);
conf.set("sdlAudioDriver",settings.sdlAudioDriver);
conf.set("audioQuality",settings.audioQuality);
conf.set("audioHiPass",settings.audioHiPass);
@ -4228,6 +4266,8 @@ void FurnaceGUI::writeConfig(DivConfig& conf, FurnaceGUISettingGroups groups) {
// MIDI
if (groups&GUI_SETTINGS_MIDI) {
conf.set("midiInDevice",settings.midiInDevice);
conf.set("midiOutDevice",settings.midiOutDevice);
conf.set("midiOutClock",settings.midiOutClock);
conf.set("midiOutTime",settings.midiOutTime);
conf.set("midiOutProgramChange",settings.midiOutProgramChange);
@ -4534,50 +4574,14 @@ void FurnaceGUI::commitSettings() {
}
bool FurnaceGUI::importColors(String path) {
FILE* f=ps_fopen(path.c_str(),"rb");
if (f==NULL) {
DivConfig c;
if (!c.loadFromFile(path.c_str(),false,false)) {
logW("error while opening color file for import: %s",strerror(errno));
return false;
}
resetColors();
char line[4096];
while (!feof(f)) {
String key="";
String value="";
bool keyOrValue=false;
if (fgets(line,4095,f)==NULL) {
break;
}
for (char* i=line; *i; i++) {
if (*i=='\n') continue;
if (keyOrValue) {
value+=*i;
} else {
if (*i=='=') {
keyOrValue=true;
} else {
key+=*i;
}
}
}
if (keyOrValue) {
// unoptimal
const char* cs=key.c_str();
for (int i=0; i<GUI_COLOR_MAX; i++) {
try {
if (strcmp(cs,guiColors[i].name)==0) {
uiColors[i]=ImGui::ColorConvertU32ToFloat4(std::stoi(value));
break;
}
} catch (std::out_of_range& e) {
break;
} catch (std::invalid_argument& e) {
break;
}
}
}
}
fclose(f);
readConfig(c,GUI_SETTINGS_COLOR);
applyUISettings(false);
return true;
}