furnace/src/gui/effectList.cpp

95 lines
3.3 KiB
C++
Raw Normal View History

2022-04-19 19:44:05 -04:00
#include "gui.h"
#include "guiConst.h"
#include <imgui.h>
2023-07-29 06:39:28 -04:00
#include "IconsFontAwesome4.h"
2022-04-19 19:44:05 -04:00
void FurnaceGUI::drawEffectList() {
if (nextWindow==GUI_WINDOW_EFFECT_LIST) {
effectListOpen=true;
ImGui::SetNextWindowFocus();
nextWindow=GUI_WINDOW_NOTHING;
}
if (!effectListOpen) return;
ImGui::SetNextWindowSizeConstraints(ImVec2(60.0f*dpiScale,20.0f*dpiScale),ImVec2(canvasW,canvasH));
2024-05-27 18:53:46 -04:00
if (ImGui::Begin("Effect List",&effectListOpen,globalWinFlags,_("Effect List"))) {
2023-07-29 06:39:28 -04:00
float availB=ImGui::GetContentRegionAvail().x-ImGui::GetFrameHeightWithSpacing();
if (availB>0) {
ImGui::PushTextWrapPos(availB);
2024-05-26 20:31:17 -04:00
ImGui::TextWrapped(_("Chip at cursor: %s"),e->getSystemName(e->sysOfChan[cursor.xCoarse]));
2023-07-29 06:39:28 -04:00
ImGui::PopTextWrapPos();
}
2024-05-26 20:31:17 -04:00
effectSearch.Draw(_("Search"));
2024-02-03 14:36:14 -05:00
ImGui::SameLine();
2023-07-29 06:39:28 -04:00
ImGui::Button(ICON_FA_BARS "##SortEffects");
2023-07-29 14:22:05 -04:00
if (ImGui::BeginPopupContextItem("effectSort",ImGuiPopupFlags_MouseButtonLeft)) {
2024-05-26 20:31:17 -04:00
ImGui::Text(_("Effect types to show:"));
2024-02-03 14:14:05 -05:00
for (int i=1; i<10; i++) {
2024-02-03 14:18:46 -05:00
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[i+GUI_COLOR_PATTERN_EFFECT_INVALID]);
2024-05-26 20:31:17 -04:00
ImGui::Checkbox(_(fxColorsNames[i]),&effectsShow[i]);
ImGui::PopStyleColor();
2023-07-26 10:53:39 -04:00
}
2024-05-26 20:31:17 -04:00
if (ImGui::Button(_("All"))) memset(effectsShow,1,sizeof(bool)*10);
2023-07-27 06:44:41 -04:00
ImGui::SameLine();
2024-05-26 20:31:17 -04:00
if (ImGui::Button(_("None"))) memset(effectsShow,0,sizeof(bool)*10);
2023-07-28 10:39:40 -04:00
2023-07-28 10:24:56 -04:00
ImGui::EndPopup();
2023-07-26 10:41:17 -04:00
}
2024-11-28 15:06:20 -05:00
if (ImGui::BeginTable("effectList",2,ImGuiTableFlags_ScrollY)) {
ImGui::TableSetupScrollFreeze(0, 1);
2022-04-19 19:44:05 -04:00
ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed);
ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch);
ImGui::TableNextRow(ImGuiTableRowFlags_Headers);
ImGui::TableNextColumn();
2024-05-26 20:31:17 -04:00
ImGui::Text(_("Name"));
2022-04-19 19:44:05 -04:00
ImGui::TableNextColumn();
2024-05-26 20:31:17 -04:00
ImGui::Text(_("Description"));
2022-04-19 19:44:05 -04:00
const char* prevName=NULL;
for (int i=0; i<256; i++) {
const char* name=e->getEffectDesc(i,cursor.xCoarse);
2023-07-28 10:39:40 -04:00
if (name==prevName) {
continue;
}
prevName=name;
if (fxColors[i]==GUI_COLOR_PATTERN_EFFECT_PANNING) {
DivDispatch* dispatch=e->getDispatch(e->dispatchOfChan[cursor.xCoarse]);
if (dispatch!=NULL) {
int outputs=dispatch->getOutputCount();
if (outputs<2) {
2024-02-03 14:14:05 -05:00
continue;
}
if (outputs<3) {
if (i>=0x88 && i<=0x8f) {
2024-02-03 14:14:05 -05:00
continue;
}
}
}
2023-07-26 10:41:17 -04:00
}
2024-02-03 14:36:14 -05:00
if (name==NULL) continue;
if (effectSearch.PassFilter(name) && effectsShow[fxColors[i]-GUI_COLOR_PATTERN_EFFECT_INVALID]) {
2022-04-19 19:44:05 -04:00
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::PushFont(patFont);
2022-04-30 00:41:14 -04:00
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[fxColors[i]]);
2022-04-19 19:44:05 -04:00
ImGui::Text("%c%c%c%c",name[0],name[1],name[2],name[3]);
ImGui::PopStyleColor();
ImGui::PopFont();
ImGui::TableNextColumn();
if (strlen(name)>6) {
ImGui::TextWrapped("%s",&name[6]);
} else {
2024-05-26 20:31:17 -04:00
ImGui::Text(_("ERROR"));
2022-04-19 19:44:05 -04:00
}
}
}
ImGui::EndTable();
}
}
if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_EFFECT_LIST;
ImGui::End();
2022-05-19 17:35:00 -04:00
}