chip flags rewrite, part 5 - DO NOT USE
after fixing the GUI the last thing to do is upgrade all the presets to the new format but that will be SO boring
This commit is contained in:
parent
48db9a1d0c
commit
468f434b66
12 changed files with 204 additions and 158 deletions
|
|
@ -3438,7 +3438,7 @@ bool FurnaceGUI::loop() {
|
|||
if (ImGui::BeginMenu("configure chip...")) {
|
||||
for (int i=0; i<e->song.systemLen; i++) {
|
||||
if (ImGui::TreeNode(fmt::sprintf("%d. %s##_SYSP%d",i+1,getSystemName(e->song.system[i]),i).c_str())) {
|
||||
drawSysConf(i,e->song.system[i],e->song.systemFlagsOld[i],true);
|
||||
drawSysConf(i,e->song.system[i],e->song.systemFlags[i],true);
|
||||
ImGui::TreePop();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1211,7 +1211,7 @@ class FurnaceGUI {
|
|||
String macroRelLabel;
|
||||
String emptyLabel;
|
||||
String emptyLabel2;
|
||||
std::vector<int> initialSys;
|
||||
DivConfig initialSys;
|
||||
|
||||
Settings():
|
||||
mainFontSize(18),
|
||||
|
|
@ -1619,7 +1619,7 @@ class FurnaceGUI {
|
|||
void drawAlgorithm(unsigned char alg, FurnaceGUIFMAlgs algType, const ImVec2& size);
|
||||
void drawFMEnv(unsigned char tl, unsigned char ar, unsigned char dr, unsigned char d2r, unsigned char rr, unsigned char sl, unsigned char sus, unsigned char egt, unsigned char algOrGlobalSus, float maxTl, float maxArDr, float maxRr, const ImVec2& size, unsigned short instType);
|
||||
void drawGBEnv(unsigned char vol, unsigned char len, unsigned char sLen, bool dir, const ImVec2& size);
|
||||
void drawSysConf(int chan, DivSystem type, unsigned int& flags, bool modifyOnChange);
|
||||
void drawSysConf(int chan, DivSystem type, DivConfig& flags, bool modifyOnChange);
|
||||
void kvsConfig(DivInstrument* ins);
|
||||
|
||||
// these ones offer ctrl-wheel fine value changes.
|
||||
|
|
|
|||
|
|
@ -1904,7 +1904,7 @@ void FurnaceGUI::drawInsEdit() {
|
|||
if (e->song.system[i]==DIV_SYSTEM_VRC7) {
|
||||
isPresent[3]=true;
|
||||
} else if (e->song.system[i]==DIV_SYSTEM_OPLL || e->song.system[i]==DIV_SYSTEM_OPLL_DRUMS) {
|
||||
isPresent[(e->song.systemFlagsOld[i]>>4)&3]=true;
|
||||
isPresent[(e->song.systemFlags[i].getInt("patchSet",0))&3]=true;
|
||||
}
|
||||
}
|
||||
if (!isPresent[0] && !isPresent[1] && !isPresent[2] && !isPresent[3]) {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
#include "gui.h"
|
||||
#include "misc/cpp/imgui_stdlib.h"
|
||||
#include <fmt/printf.h>
|
||||
#include <algorithm>
|
||||
|
||||
void FurnaceGUI::drawNewSong() {
|
||||
|
|
@ -140,7 +141,16 @@ void FurnaceGUI::drawNewSong() {
|
|||
}
|
||||
|
||||
if (accepted) {
|
||||
e->createNew(nextDesc,nextDescName);
|
||||
// TODO: remove after porting all presets to new format
|
||||
String oldDescFormat;
|
||||
for (const int* i=nextDesc; *i; i+=4) {
|
||||
oldDescFormat+=fmt::sprintf("%d ",e->systemToFileFur((DivSystem)i[0]));
|
||||
oldDescFormat+=fmt::sprintf("%d ",i[1]);
|
||||
oldDescFormat+=fmt::sprintf("%d ",i[2]);
|
||||
oldDescFormat+=fmt::sprintf("%d ",i[3]);
|
||||
}
|
||||
String oldDesc=e->decodeSysDesc(oldDescFormat.c_str());
|
||||
e->createNew(oldDesc.c_str(),nextDescName);
|
||||
undoHist.clear();
|
||||
redoHist.clear();
|
||||
curFileName="";
|
||||
|
|
|
|||
|
|
@ -270,10 +270,10 @@ void FurnaceGUI::drawSettings() {
|
|||
if (ImGui::Button("Current system")) {
|
||||
settings.initialSys.clear();
|
||||
for (int i=0; i<e->song.systemLen; i++) {
|
||||
settings.initialSys.push_back(e->song.system[i]);
|
||||
settings.initialSys.push_back(e->song.systemVol[i]);
|
||||
settings.initialSys.push_back(e->song.systemPan[i]);
|
||||
settings.initialSys.push_back(e->song.systemFlagsOld[i]);
|
||||
settings.initialSys.set(fmt::sprintf("id%d",i),e->getSystemDef(e->song.system[i])->id);
|
||||
settings.initialSys.set(fmt::sprintf("vol%d",i),(int)e->song.systemVol[i]);
|
||||
settings.initialSys.set(fmt::sprintf("pan%d",i),(int)e->song.systemPan[i]);
|
||||
settings.initialSys.set(fmt::sprintf("flags%d",i),e->song.systemFlags[i].toBase64());
|
||||
}
|
||||
settings.initialSysName=e->song.systemName;
|
||||
}
|
||||
|
|
@ -285,19 +285,24 @@ void FurnaceGUI::drawSettings() {
|
|||
for (totalAvailSys=0; availableSystems[totalAvailSys]; totalAvailSys++);
|
||||
if (totalAvailSys>0) {
|
||||
for (int i=0; i<howMany; i++) {
|
||||
/*
|
||||
settings.initialSys.push_back(availableSystems[rand()%totalAvailSys]);
|
||||
settings.initialSys.push_back(64);
|
||||
settings.initialSys.push_back(0);
|
||||
settings.initialSys.push_back(0);
|
||||
*/
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
settings.initialSys.push_back(DIV_SYSTEM_DUMMY);
|
||||
settings.initialSys.push_back(64);
|
||||
settings.initialSys.push_back(0);
|
||||
settings.initialSys.push_back(0);
|
||||
*/
|
||||
}
|
||||
// randomize system name
|
||||
std::vector<String> wordPool[6];
|
||||
/*
|
||||
for (size_t i=0; i<settings.initialSys.size()/4; i++) {
|
||||
int wpPos=0;
|
||||
String sName=e->getSystemName((DivSystem)settings.initialSys[i*4]);
|
||||
|
|
@ -321,18 +326,19 @@ void FurnaceGUI::drawSettings() {
|
|||
settings.initialSysName+=wordPool[i][rand()%wordPool[i].size()];
|
||||
settings.initialSysName+=" ";
|
||||
}
|
||||
*/
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Reset to defaults")) {
|
||||
settings.initialSys.clear();
|
||||
settings.initialSys.push_back(DIV_SYSTEM_YM2612);
|
||||
settings.initialSys.push_back(64);
|
||||
settings.initialSys.push_back(0);
|
||||
settings.initialSys.push_back(0);
|
||||
settings.initialSys.push_back(DIV_SYSTEM_SMS);
|
||||
settings.initialSys.push_back(32);
|
||||
settings.initialSys.push_back(0);
|
||||
settings.initialSys.push_back(0);
|
||||
settings.initialSys.set("id0",e->getSystemDef(DIV_SYSTEM_YM2612)->id);
|
||||
settings.initialSys.set("vol0",64);
|
||||
settings.initialSys.set("pan0",0);
|
||||
settings.initialSys.set("flags0","");
|
||||
settings.initialSys.set("id1",e->getSystemDef(DIV_SYSTEM_SMS)->id);
|
||||
settings.initialSys.set("vol1",64);
|
||||
settings.initialSys.set("pan1",0);
|
||||
settings.initialSys.set("flags1","");
|
||||
settings.initialSysName="Sega Genesis/Mega Drive";
|
||||
}
|
||||
|
||||
|
|
@ -341,18 +347,22 @@ void FurnaceGUI::drawSettings() {
|
|||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
ImGui::InputText("##InitSysName",&settings.initialSysName);
|
||||
|
||||
for (size_t i=0; i<settings.initialSys.size(); i+=4) {
|
||||
bool doRemove=false;
|
||||
bool doInvert=settings.initialSys[i+1]&128;
|
||||
signed char vol=settings.initialSys[i+1]&127;
|
||||
for (size_t i=0; settings.initialSys.getInt(fmt::sprintf("id%d",i),0); i++) {
|
||||
DivSystem sysID=e->systemFromFileFur(settings.initialSys.getInt(fmt::sprintf("id%d",i),0));
|
||||
signed char sysVol=settings.initialSys.getInt(fmt::sprintf("vol%d",i),0);
|
||||
signed char sysPan=settings.initialSys.getInt(fmt::sprintf("pan%d",i),0);
|
||||
|
||||
//bool doRemove=false;
|
||||
bool doInvert=sysVol&128;
|
||||
signed char vol=sysVol&127;
|
||||
ImGui::PushID(i);
|
||||
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::CalcTextSize("Invert").x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x);
|
||||
if (ImGui::BeginCombo("##System",getSystemName((DivSystem)settings.initialSys[i]))) {
|
||||
if (ImGui::BeginCombo("##System",getSystemName(sysID))) {
|
||||
for (int j=0; availableSystems[j]; j++) {
|
||||
if (ImGui::Selectable(getSystemName((DivSystem)availableSystems[j]),settings.initialSys[i]==availableSystems[j])) {
|
||||
settings.initialSys[i]=availableSystems[j];
|
||||
settings.initialSys[i+3]=0;
|
||||
if (ImGui::Selectable(getSystemName((DivSystem)availableSystems[j]),sysID==availableSystems[j])) {
|
||||
sysID=(DivSystem)availableSystems[j];
|
||||
settings.initialSys.set(fmt::sprintf("flags%d",i),"");
|
||||
}
|
||||
}
|
||||
ImGui::EndCombo();
|
||||
|
|
@ -360,39 +370,42 @@ void FurnaceGUI::drawSettings() {
|
|||
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Checkbox("Invert",&doInvert)) {
|
||||
settings.initialSys[i+1]^=128;
|
||||
sysVol^=128;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
ImGui::BeginDisabled(settings.initialSys.size()<=4);
|
||||
//ImGui::BeginDisabled(settings.initialSys.size()<=4);
|
||||
if (ImGui::Button(ICON_FA_MINUS "##InitSysRemove")) {
|
||||
doRemove=true;
|
||||
//doRemove=true;
|
||||
}
|
||||
ImGui::EndDisabled();
|
||||
//ImGui::EndDisabled();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-(50.0f*dpiScale));
|
||||
if (CWSliderScalar("Volume",ImGuiDataType_S8,&vol,&_ZERO,&_ONE_HUNDRED_TWENTY_SEVEN)) {
|
||||
settings.initialSys[i+1]=(settings.initialSys[i+1]&128)|vol;
|
||||
sysVol=(sysVol&128)|vol;
|
||||
} rightClickable
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-(50.0f*dpiScale));
|
||||
CWSliderScalar("Panning",ImGuiDataType_S8,&settings.initialSys[i+2],&_MINUS_ONE_HUNDRED_TWENTY_SEVEN,&_ONE_HUNDRED_TWENTY_SEVEN); rightClickable
|
||||
CWSliderScalar("Panning",ImGuiDataType_S8,&sysPan,&_MINUS_ONE_HUNDRED_TWENTY_SEVEN,&_ONE_HUNDRED_TWENTY_SEVEN); rightClickable
|
||||
|
||||
// oh please MSVC don't cry
|
||||
if (ImGui::TreeNode("Configure")) {
|
||||
drawSysConf(-1,(DivSystem)settings.initialSys[i],(unsigned int&)settings.initialSys[i+3],false);
|
||||
String sysFlagsS=settings.initialSys.getString(fmt::sprintf("flags%d",i),"");
|
||||
DivConfig sysFlags;
|
||||
sysFlags.loadFromBase64(sysFlagsS.c_str());
|
||||
drawSysConf(-1,sysID,sysFlags,false);
|
||||
ImGui::TreePop();
|
||||
}
|
||||
|
||||
ImGui::PopID();
|
||||
if (doRemove && settings.initialSys.size()>=8) {
|
||||
/*if (doRemove && settings.initialSys.size()>=8) {
|
||||
settings.initialSys.erase(settings.initialSys.begin()+i,settings.initialSys.begin()+i+4);
|
||||
i-=4;
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
if (ImGui::Button(ICON_FA_PLUS "##InitSysAdd")) {
|
||||
settings.initialSys.push_back(DIV_SYSTEM_YM2612);
|
||||
/*settings.initialSys.push_back(DIV_SYSTEM_YM2612);
|
||||
settings.initialSys.push_back(64);
|
||||
settings.initialSys.push_back(0);
|
||||
settings.initialSys.push_back(0);
|
||||
settings.initialSys.push_back(0);*/
|
||||
}
|
||||
|
||||
ImGui::Separator();
|
||||
|
|
@ -2440,17 +2453,22 @@ void FurnaceGUI::syncSettings() {
|
|||
clampSetting(settings.midiOutClock,0,1);
|
||||
clampSetting(settings.midiOutMode,0,2);
|
||||
|
||||
settings.initialSys=e->decodeSysDesc(e->getConfString("initialSys",""));
|
||||
if (settings.initialSys.size()<4) {
|
||||
String initialSys2=e->getConfString("initialSys2","");
|
||||
if (initialSys2.empty()) {
|
||||
initialSys2=e->decodeSysDesc(e->getConfString("initialSys",""));
|
||||
}
|
||||
settings.initialSys.clear();
|
||||
settings.initialSys.loadFromBase64(initialSys2.c_str());
|
||||
if (settings.initialSys.getInt("id0",0)==0) {
|
||||
settings.initialSys.clear();
|
||||
settings.initialSys.push_back(DIV_SYSTEM_YM2612);
|
||||
settings.initialSys.push_back(64);
|
||||
settings.initialSys.push_back(0);
|
||||
settings.initialSys.push_back(0);
|
||||
settings.initialSys.push_back(DIV_SYSTEM_SMS);
|
||||
settings.initialSys.push_back(32);
|
||||
settings.initialSys.push_back(0);
|
||||
settings.initialSys.push_back(0);
|
||||
settings.initialSys.set("id0",e->getSystemDef(DIV_SYSTEM_YM2612)->id);
|
||||
settings.initialSys.set("vol0",64);
|
||||
settings.initialSys.set("pan0",0);
|
||||
settings.initialSys.set("flags0","");
|
||||
settings.initialSys.set("id1",e->getSystemDef(DIV_SYSTEM_SMS)->id);
|
||||
settings.initialSys.set("vol1",64);
|
||||
settings.initialSys.set("pan1",0);
|
||||
settings.initialSys.set("flags1","");
|
||||
}
|
||||
|
||||
// keybinds
|
||||
|
|
@ -2564,7 +2582,7 @@ void FurnaceGUI::commitSettings() {
|
|||
e->setConf("eventDelay",settings.eventDelay);
|
||||
e->setConf("moveWindowTitle",settings.moveWindowTitle);
|
||||
e->setConf("hiddenSystems",settings.hiddenSystems);
|
||||
e->setConf("initialSys",e->encodeSysDesc(settings.initialSys));
|
||||
e->setConf("initialSys2",settings.initialSys.toBase64());
|
||||
e->setConf("initialSysName",settings.initialSysName);
|
||||
e->setConf("horizontalDataView",settings.horizontalDataView);
|
||||
e->setConf("noMultiSystem",settings.noMultiSystem);
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
#include "gui.h"
|
||||
|
||||
void FurnaceGUI::drawSysConf(int chan, DivSystem type, unsigned int& flags, bool modifyOnChange) {
|
||||
void FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool modifyOnChange) {
|
||||
ImGui::Text("temporarily unavailable!");
|
||||
return;
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ void FurnaceGUI::drawSysManager() {
|
|||
}
|
||||
ImGui::TableNextColumn();
|
||||
if (ImGui::TreeNode(fmt::sprintf("%d. %s##_SYSM%d",i+1,getSystemName(e->song.system[i]),i).c_str())) {
|
||||
drawSysConf(i,e->song.system[i],e->song.systemFlagsOld[i],true);
|
||||
drawSysConf(i,e->song.system[i],e->song.systemFlags[i],true);
|
||||
ImGui::TreePop();
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue