GUI: prepare to add a "basic mode"

This commit is contained in:
tildearrow 2023-02-06 18:52:51 -05:00
parent 79ede020cf
commit ea0d7cd420
6 changed files with 411 additions and 355 deletions

View file

@ -161,3 +161,7 @@ void DivEngine::setConf(String key, const char* value) {
void DivEngine::setConf(String key, String value) { void DivEngine::setConf(String key, String value) {
conf.set(key,value); conf.set(key,value);
} }
bool DivEngine::hasConf(String key) {
return conf.has(key);
}

View file

@ -581,6 +581,9 @@ class DivEngine {
void setConf(String key, const char* value); void setConf(String key, const char* value);
void setConf(String key, String value); void setConf(String key, String value);
// get whether config value exists
bool hasConf(String key);
// calculate base frequency/period // calculate base frequency/period
double calcBaseFreq(double clock, double divider, int note, bool period); double calcBaseFreq(double clock, double divider, int note, bool period);

View file

@ -2310,7 +2310,7 @@ void FurnaceGUI::editOptions(bool topMenu) {
if (ImGui::MenuItem("cut",BIND_FOR(GUI_ACTION_PAT_CUT))) doCopy(true,true,selStart,selEnd); if (ImGui::MenuItem("cut",BIND_FOR(GUI_ACTION_PAT_CUT))) doCopy(true,true,selStart,selEnd);
if (ImGui::MenuItem("copy",BIND_FOR(GUI_ACTION_PAT_COPY))) doCopy(false,true,selStart,selEnd); if (ImGui::MenuItem("copy",BIND_FOR(GUI_ACTION_PAT_COPY))) doCopy(false,true,selStart,selEnd);
if (ImGui::MenuItem("paste",BIND_FOR(GUI_ACTION_PAT_PASTE))) doPaste(); if (ImGui::MenuItem("paste",BIND_FOR(GUI_ACTION_PAT_PASTE))) doPaste();
if (ImGui::BeginMenu("paste special...")) { if (!basicMode) if (ImGui::BeginMenu("paste special...")) {
if (ImGui::MenuItem("paste mix",BIND_FOR(GUI_ACTION_PAT_PASTE_MIX))) doPaste(GUI_PASTE_MODE_MIX_FG); if (ImGui::MenuItem("paste mix",BIND_FOR(GUI_ACTION_PAT_PASTE_MIX))) doPaste(GUI_PASTE_MODE_MIX_FG);
if (ImGui::MenuItem("paste mix (background)",BIND_FOR(GUI_ACTION_PAT_PASTE_MIX_BG))) doPaste(GUI_PASTE_MODE_MIX_BG); if (ImGui::MenuItem("paste mix (background)",BIND_FOR(GUI_ACTION_PAT_PASTE_MIX_BG))) doPaste(GUI_PASTE_MODE_MIX_BG);
if (ImGui::BeginMenu("paste with ins (foreground)")) { if (ImGui::BeginMenu("paste with ins (foreground)")) {
@ -2347,6 +2347,7 @@ void FurnaceGUI::editOptions(bool topMenu) {
} }
ImGui::Separator(); ImGui::Separator();
if (!basicMode) {
if (ImGui::BeginMenu("operation mask...")) { if (ImGui::BeginMenu("operation mask...")) {
drawOpMask(opMaskDelete); drawOpMask(opMaskDelete);
ImGui::SameLine(); ImGui::SameLine();
@ -2503,6 +2504,7 @@ void FurnaceGUI::editOptions(bool topMenu) {
latchNibble=false; latchNibble=false;
} }
ImGui::Separator(); ImGui::Separator();
}
if (ImGui::MenuItem("note up",BIND_FOR(GUI_ACTION_PAT_NOTE_UP))) doTranspose(1,opMaskTransposeNote); if (ImGui::MenuItem("note up",BIND_FOR(GUI_ACTION_PAT_NOTE_UP))) doTranspose(1,opMaskTransposeNote);
if (ImGui::MenuItem("note down",BIND_FOR(GUI_ACTION_PAT_NOTE_DOWN))) doTranspose(-1,opMaskTransposeNote); if (ImGui::MenuItem("note down",BIND_FOR(GUI_ACTION_PAT_NOTE_DOWN))) doTranspose(-1,opMaskTransposeNote);
@ -2546,6 +2548,8 @@ void FurnaceGUI::editOptions(bool topMenu) {
} }
ImGui::EndMenu(); ImGui::EndMenu();
} }
if (!basicMode) {
if (ImGui::BeginMenu("gradient/fade...")) { if (ImGui::BeginMenu("gradient/fade...")) {
if (ImGui::InputInt("Start",&fadeMin,1,1)) { if (ImGui::InputInt("Start",&fadeMin,1,1)) {
if (fadeMin<0) fadeMin=0; if (fadeMin<0) fadeMin=0;
@ -2642,6 +2646,7 @@ void FurnaceGUI::editOptions(bool topMenu) {
} }
} }
} }
}
/*if (topMenu) { /*if (topMenu) {
ImGui::Separator(); ImGui::Separator();
@ -3612,6 +3617,7 @@ bool FurnaceGUI::loop() {
} }
ImGui::EndMenu(); ImGui::EndMenu();
} }
if (!basicMode) {
ImGui::Separator(); ImGui::Separator();
if (ImGui::BeginMenu("add chip...")) { if (ImGui::BeginMenu("add chip...")) {
DivSystem picked=systemPicker(); DivSystem picked=systemPicker();
@ -3674,6 +3680,7 @@ bool FurnaceGUI::loop() {
} }
ImGui::EndMenu(); ImGui::EndMenu();
} }
}
ImGui::Separator(); ImGui::Separator();
if (ImGui::MenuItem("restore backup",BIND_FOR(GUI_ACTION_OPEN_BACKUP))) { if (ImGui::MenuItem("restore backup",BIND_FOR(GUI_ACTION_OPEN_BACKUP))) {
doAction(GUI_ACTION_OPEN_BACKUP); doAction(GUI_ACTION_OPEN_BACKUP);
@ -3710,6 +3717,13 @@ bool FurnaceGUI::loop() {
if (ImGui::MenuItem("lock layout",NULL,lockLayout)) { if (ImGui::MenuItem("lock layout",NULL,lockLayout)) {
lockLayout=!lockLayout; lockLayout=!lockLayout;
} }
if (ImGui::MenuItem("basic mode",NULL,basicMode)) {
if (basicMode) {
showWarning("prepare to unlock the full power of Furnace!",GUI_WARN_BASIC_MODE);
} else {
showWarning("are you sure? this will disable several things.",GUI_WARN_BASIC_MODE);
}
}
if (ImGui::MenuItem("visualizer",NULL,fancyPattern)) { if (ImGui::MenuItem("visualizer",NULL,fancyPattern)) {
fancyPattern=!fancyPattern; fancyPattern=!fancyPattern;
e->enableCommandStream(fancyPattern); e->enableCommandStream(fancyPattern);
@ -3743,12 +3757,14 @@ bool FurnaceGUI::loop() {
} }
if (ImGui::MenuItem("orders",BIND_FOR(GUI_ACTION_WINDOW_ORDERS),ordersOpen)) ordersOpen=!ordersOpen; if (ImGui::MenuItem("orders",BIND_FOR(GUI_ACTION_WINDOW_ORDERS),ordersOpen)) ordersOpen=!ordersOpen;
if (ImGui::MenuItem("pattern",BIND_FOR(GUI_ACTION_WINDOW_PATTERN),patternOpen)) patternOpen=!patternOpen; if (ImGui::MenuItem("pattern",BIND_FOR(GUI_ACTION_WINDOW_PATTERN),patternOpen)) patternOpen=!patternOpen;
if (!basicMode) {
if (ImGui::MenuItem("mixer",BIND_FOR(GUI_ACTION_WINDOW_MIXER),mixerOpen)) mixerOpen=!mixerOpen; if (ImGui::MenuItem("mixer",BIND_FOR(GUI_ACTION_WINDOW_MIXER),mixerOpen)) mixerOpen=!mixerOpen;
if (ImGui::MenuItem("grooves",BIND_FOR(GUI_ACTION_WINDOW_GROOVES),groovesOpen)) groovesOpen=!groovesOpen; if (ImGui::MenuItem("grooves",BIND_FOR(GUI_ACTION_WINDOW_GROOVES),groovesOpen)) groovesOpen=!groovesOpen;
if (ImGui::MenuItem("channels",BIND_FOR(GUI_ACTION_WINDOW_CHANNELS),channelsOpen)) channelsOpen=!channelsOpen; if (ImGui::MenuItem("channels",BIND_FOR(GUI_ACTION_WINDOW_CHANNELS),channelsOpen)) channelsOpen=!channelsOpen;
if (ImGui::MenuItem("pattern manager",BIND_FOR(GUI_ACTION_WINDOW_PAT_MANAGER),patManagerOpen)) patManagerOpen=!patManagerOpen; if (ImGui::MenuItem("pattern manager",BIND_FOR(GUI_ACTION_WINDOW_PAT_MANAGER),patManagerOpen)) patManagerOpen=!patManagerOpen;
if (ImGui::MenuItem("chip manager",BIND_FOR(GUI_ACTION_WINDOW_SYS_MANAGER),sysManagerOpen)) sysManagerOpen=!sysManagerOpen; if (ImGui::MenuItem("chip manager",BIND_FOR(GUI_ACTION_WINDOW_SYS_MANAGER),sysManagerOpen)) sysManagerOpen=!sysManagerOpen;
if (ImGui::MenuItem("compatibility flags",BIND_FOR(GUI_ACTION_WINDOW_COMPAT_FLAGS),compatFlagsOpen)) compatFlagsOpen=!compatFlagsOpen; if (ImGui::MenuItem("compatibility flags",BIND_FOR(GUI_ACTION_WINDOW_COMPAT_FLAGS),compatFlagsOpen)) compatFlagsOpen=!compatFlagsOpen;
}
if (ImGui::MenuItem("song comments",BIND_FOR(GUI_ACTION_WINDOW_NOTES),notesOpen)) notesOpen=!notesOpen; if (ImGui::MenuItem("song comments",BIND_FOR(GUI_ACTION_WINDOW_NOTES),notesOpen)) notesOpen=!notesOpen;
ImGui::Separator(); ImGui::Separator();
if (ImGui::MenuItem("instrument editor",BIND_FOR(GUI_ACTION_WINDOW_INS_EDIT),insEditOpen)) insEditOpen=!insEditOpen; if (ImGui::MenuItem("instrument editor",BIND_FOR(GUI_ACTION_WINDOW_INS_EDIT),insEditOpen)) insEditOpen=!insEditOpen;
@ -3936,7 +3952,7 @@ bool FurnaceGUI::loop() {
drawPattern(); drawPattern();
drawEditControls(); drawEditControls();
drawSpeed(); drawSpeed();
drawGrooves(); if (!basicMode) drawGrooves();
drawSongInfo(); drawSongInfo();
drawOrders(); drawOrders();
drawSampleList(); drawSampleList();
@ -3945,7 +3961,7 @@ bool FurnaceGUI::loop() {
drawWaveEdit(); drawWaveEdit();
drawInsList(); drawInsList();
drawInsEdit(); drawInsEdit();
drawMixer(); if (!basicMode) drawMixer();
readOsc(); readOsc();
@ -3955,12 +3971,14 @@ bool FurnaceGUI::loop() {
drawSettings(); drawSettings();
drawDebug(); drawDebug();
drawStats(); drawStats();
drawCompatFlags(); if (!basicMode) drawCompatFlags();
drawPiano(); drawPiano();
drawNotes(); drawNotes();
if (!basicMode) {
drawChannels(); drawChannels();
drawPatManager(); drawPatManager();
drawSysManager(); drawSysManager();
}
drawClock(); drawClock();
drawRegView(); drawRegView();
drawLog(); drawLog();
@ -4971,6 +4989,16 @@ bool FurnaceGUI::loop() {
ImGui::CloseCurrentPopup(); ImGui::CloseCurrentPopup();
} }
break; break;
case GUI_WARN_BASIC_MODE:
if (ImGui::Button("Yes")) {
basicMode=!basicMode;
ImGui::CloseCurrentPopup();
}
ImGui::SameLine();
if (ImGui::Button("No")) {
ImGui::CloseCurrentPopup();
}
break;
case GUI_WARN_GENERIC: case GUI_WARN_GENERIC:
if (ImGui::Button("OK")) { if (ImGui::Button("OK")) {
ImGui::CloseCurrentPopup(); ImGui::CloseCurrentPopup();
@ -5276,6 +5304,12 @@ bool FurnaceGUI::init() {
findOpen=e->getConfBool("findOpen",false); findOpen=e->getConfBool("findOpen",false);
spoilerOpen=e->getConfBool("spoilerOpen",false); spoilerOpen=e->getConfBool("spoilerOpen",false);
if (e->hasConf("lastDir")) {
basicMode=e->getConfBool("basicMode",false);
} else {
basicMode=true;
}
tempoView=e->getConfBool("tempoView",true); tempoView=e->getConfBool("tempoView",true);
waveHex=e->getConfBool("waveHex",false); waveHex=e->getConfBool("waveHex",false);
waveSigned=e->getConfBool("waveSigned",false); waveSigned=e->getConfBool("waveSigned",false);
@ -5673,6 +5707,7 @@ void FurnaceGUI::commitState() {
e->setConf("subSongsOpen",subSongsOpen); e->setConf("subSongsOpen",subSongsOpen);
e->setConf("findOpen",findOpen); e->setConf("findOpen",findOpen);
e->setConf("spoilerOpen",spoilerOpen); e->setConf("spoilerOpen",spoilerOpen);
e->setConf("basicMode",basicMode);
// commit last window size // commit last window size
e->setConf("lastWindowWidth",scrConfW); e->setConf("lastWindowWidth",scrConfW);
@ -5916,6 +5951,7 @@ FurnaceGUI::FurnaceGUI():
clockOpen(false), clockOpen(false),
speedOpen(true), speedOpen(true),
groovesOpen(false), groovesOpen(false),
basicMode(true),
clockShowReal(true), clockShowReal(true),
clockShowRow(true), clockShowRow(true),
clockShowBeat(true), clockShowBeat(true),

View file

@ -397,6 +397,7 @@ enum FurnaceGUIWarnings {
GUI_WARN_SUBSONG_DEL, GUI_WARN_SUBSONG_DEL,
GUI_WARN_SYSTEM_DEL, GUI_WARN_SYSTEM_DEL,
GUI_WARN_CLEAR_HISTORY, GUI_WARN_CLEAR_HISTORY,
GUI_WARN_BASIC_MODE,
GUI_WARN_GENERIC GUI_WARN_GENERIC
}; };
@ -1473,6 +1474,8 @@ class FurnaceGUI {
bool subSongsOpen, findOpen, spoilerOpen, patManagerOpen, sysManagerOpen, clockOpen, speedOpen; bool subSongsOpen, findOpen, spoilerOpen, patManagerOpen, sysManagerOpen, clockOpen, speedOpen;
bool groovesOpen; bool groovesOpen;
bool basicMode;
bool clockShowReal, clockShowRow, clockShowBeat, clockShowMetro, clockShowTime; bool clockShowReal, clockShowRow, clockShowBeat, clockShowMetro, clockShowTime;
float clockMetroTick[16]; float clockMetroTick[16];

View file

@ -74,6 +74,7 @@ void FurnaceGUI::drawSongInfo(bool asChild) {
if (ImGui::InputText("##Category",&e->song.category,ImGuiInputTextFlags_UndoRedo)) { if (ImGui::InputText("##Category",&e->song.category,ImGuiInputTextFlags_UndoRedo)) {
MARK_MODIFIED; MARK_MODIFIED;
} }
if (!basicMode) {
ImGui::TableNextRow(); ImGui::TableNextRow();
ImGui::TableNextColumn(); ImGui::TableNextColumn();
ImGui::Text("System"); ImGui::Text("System");
@ -96,11 +97,16 @@ void FurnaceGUI::drawSongInfo(bool asChild) {
} }
popToggleColors(); popToggleColors();
autoButtonSize=ImGui::GetItemRectSize().x; autoButtonSize=ImGui::GetItemRectSize().x;
}
ImGui::EndTable(); ImGui::EndTable();
} }
if (ImGui::BeginTable("OtherProps",2,ImGuiTableFlags_SizingStretchProp)) { if (basicMode) {
if (e->song.tuning<435.8 || e->song.tuning>444) {
ImGui::TextWrapped("Tuning changed - disable Basic Mode to edit.");
}
} else if (ImGui::BeginTable("OtherProps",2,ImGuiTableFlags_SizingStretchProp)) {
ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed,0.0); ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed,0.0);
ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,0.0); ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,0.0);

View file

@ -160,6 +160,7 @@ void FurnaceGUI::drawSpeed(bool asChild) {
} }
} }
if (!basicMode) {
ImGui::TableNextRow(); ImGui::TableNextRow();
ImGui::TableNextColumn(); ImGui::TableNextColumn();
ImGui::Text("Virtual Tempo"); ImGui::Text("Virtual Tempo");
@ -195,6 +196,7 @@ void FurnaceGUI::drawSpeed(bool asChild) {
} }
ImGui::SameLine(); ImGui::SameLine();
ImGui::Text("%.2f BPM",calcBPM(e->curSubSong->speeds,e->curSubSong->hz,e->curSubSong->virtualTempoN,e->curSubSong->virtualTempoD)); ImGui::Text("%.2f BPM",calcBPM(e->curSubSong->speeds,e->curSubSong->hz,e->curSubSong->virtualTempoN,e->curSubSong->virtualTempoD));
}
ImGui::TableNextRow(); ImGui::TableNextRow();
ImGui::TableNextColumn(); ImGui::TableNextColumn();
@ -231,6 +233,7 @@ void FurnaceGUI::drawSpeed(bool asChild) {
e->curSubSong->patLen=patLen; e->curSubSong->patLen=patLen;
} }
if (!basicMode) {
ImGui::TableNextRow(); ImGui::TableNextRow();
ImGui::TableNextColumn(); ImGui::TableNextColumn();
ImGui::Text("Song Length"); ImGui::Text("Song Length");
@ -245,6 +248,7 @@ void FurnaceGUI::drawSpeed(bool asChild) {
setOrder(ordLen-1); setOrder(ordLen-1);
} }
} }
}
ImGui::EndTable(); ImGui::EndTable();
} }