GUI: better presets organization

to-do:
- fix system detection
- fix search
This commit is contained in:
tildearrow 2024-03-20 16:43:40 -05:00
parent 02bddfb894
commit db45b0d7d7
4 changed files with 2265 additions and 2155 deletions

View file

@ -2549,7 +2549,7 @@ class FurnaceGUI {
void waveListItem(int index, float* wavePreview, int dir, int asset);
void sampleListItem(int index, int dir, int asset);
void drawSysDefs(std::vector<FurnaceGUISysDef>& category, bool& accepted);
void drawSysDefs(std::vector<FurnaceGUISysDef>& category, bool& accepted, std::vector<int>& sysDefStack);
void toggleMobileUI(bool enable, bool force=false);

View file

@ -22,24 +22,44 @@
#include <fmt/printf.h>
#include <algorithm>
void FurnaceGUI::drawSysDefs(std::vector<FurnaceGUISysDef>& category, bool& accepted) {
String sysDefID;
void FurnaceGUI::drawSysDefs(std::vector<FurnaceGUISysDef>& category, bool& accepted, std::vector<int>& sysDefStack) {
int index=0;
String sysDefIDLeader="##NS";
for (int i: sysDefStack) {
sysDefIDLeader+=fmt::sprintf("/%d",i);
}
for (FurnaceGUISysDef& i: category) {
bool treeNode=false;
bool isHovered=false;
ImGui::TableNextRow();
ImGui::TableNextColumn();
if (!i.subDefs.empty()) {
treeNode=ImGui::TreeNode("##TreeShit");
if (i.orig.empty()) {
sysDefID=fmt::sprintf("%s%s/%dS",i.name,sysDefIDLeader,index);
} else {
sysDefID=fmt::sprintf("%s/%dS",sysDefIDLeader,index);
}
treeNode=ImGui::TreeNode(sysDefID.c_str());
ImGui::SameLine();
}
if (ImGui::Selectable(i.name,false,ImGuiSelectableFlags_DontClosePopups)) {
nextDesc=i.definition;
nextDescName=i.name;
accepted=true;
if (!i.orig.empty()) {
sysDefID=fmt::sprintf("%s%s/%d",i.name,sysDefIDLeader,index);
if (ImGui::Selectable(sysDefID.c_str(),false,ImGuiSelectableFlags_DontClosePopups)) {
nextDesc=i.definition;
nextDescName=i.name;
accepted=true;
}
if (ImGui::IsItemHovered()) isHovered=true;
} else if (i.subDefs.empty()) {
ImGui::TextUnformatted(i.name);
if (ImGui::IsItemHovered()) isHovered=true;
}
if (ImGui::IsItemHovered()) isHovered=true;
if (treeNode) {
drawSysDefs(i.subDefs,accepted);
sysDefStack.push_back(index);
drawSysDefs(i.subDefs,accepted,sysDefStack);
sysDefStack.erase(sysDefStack.end()-1);
ImGui::TreePop();
}
if (isHovered) {
@ -69,11 +89,13 @@ void FurnaceGUI::drawSysDefs(std::vector<FurnaceGUISysDef>& category, bool& acce
ImGui::EndTooltip();
}
}
index++;
}
}
void FurnaceGUI::drawNewSong() {
bool accepted=false;
std::vector<int> sysDefStack;
ImGui::PushFont(bigFont);
ImGui::SetCursorPosX((ImGui::GetContentRegionAvail().x-ImGui::CalcTextSize("Choose a System!").x)*0.5);
@ -155,7 +177,9 @@ void FurnaceGUI::drawNewSong() {
ImGui::TableNextColumn();
if (ImGui::BeginTable("Systems",1,ImGuiTableFlags_BordersInnerV|ImGuiTableFlags_ScrollY)) {
std::vector<FurnaceGUISysDef>& category=(newSongQuery.empty())?(sysCategories[newSongCategory].systems):(newSongSearchResults);
drawSysDefs(category,accepted);
sysDefStack.push_back(newSongQuery.empty()?newSongCategory:-1);
drawSysDefs(category,accepted,sysDefStack);
sysDefStack.erase(sysDefStack.end()-1);
ImGui::EndTable();
}

View file

@ -469,7 +469,10 @@ void FurnaceGUI::drawPattern() {
nextAddScroll=0.0f;
}
ImDrawList* tdl=NULL;
if (ImGui::BeginTable("PatternView",displayChans+2,ImGuiTableFlags_BordersInnerV|ImGuiTableFlags_ScrollX|ImGuiTableFlags_ScrollY|ImGuiTableFlags_NoPadInnerX|ImGuiTableFlags_NoBordersInFrozenArea|((settings.cursorFollowsWheel || wheelCalmDown)?ImGuiTableFlags_NoScrollWithMouse:0))) {
if (chans<1) {
ImGui::Text("there aren't any channels to show.");
} else if (ImGui::BeginTable("PatternView",displayChans+2,ImGuiTableFlags_BordersInnerV|ImGuiTableFlags_ScrollX|ImGuiTableFlags_ScrollY|ImGuiTableFlags_NoPadInnerX|ImGuiTableFlags_NoBordersInFrozenArea|((settings.cursorFollowsWheel || wheelCalmDown)?ImGuiTableFlags_NoScrollWithMouse:0))) {
ImGui::TableSetupColumn("pos",ImGuiTableColumnFlags_WidthFixed);
char chanID[2048];
float lineHeight=(ImGui::GetTextLineHeight()+2*dpiScale);

File diff suppressed because it is too large Load diff