GUI: find and replace, part 9

This commit is contained in:
tildearrow 2022-06-11 02:14:30 -05:00
parent fa9fb6f8f5
commit 7354b1221c
3 changed files with 549 additions and 475 deletions

View File

@ -4,6 +4,7 @@
#include "misc/cpp/imgui_stdlib.h"
#include "guiConst.h"
#include "intConst.h"
#include "../ta-log.h"
const char* queryModes[GUI_QUERY_MAX]={
"ignore",
@ -140,13 +141,12 @@ void FurnaceGUI::doFind() {
matched=true;
}
if (matched) {
curQueryResults.push_back(FurnaceGUIQueryResult(e->getCurrentSubSong(),i,j,k));
curQueryResults.push_back(FurnaceGUIQueryResult(e->getCurrentSubSong(),i,k,j));
}
}
}
}
printf("%d %d %d %d\n",firstOrder,lastOrder,firstRow,lastRow);
queryViewingResults=true;
}
#define FIRST_VISIBLE(x) (x==GUI_QUERY_MATCH || x==GUI_QUERY_MATCH_NOT || x==GUI_QUERY_RANGE || x==GUI_QUERY_RANGE_NOT)
@ -167,13 +167,85 @@ void FurnaceGUI::drawFindReplace() {
int index=0;
int eraseIndex=-1;
char tempID[1024];
if (ImGui::BeginTabBar("FindOrReplace")) {
if (ImGui::BeginTabItem("Find")) {
if (queryViewingResults) {
if (!curQueryResults.empty()) {
ImVec2 avail=ImGui::GetContentRegionAvail();
avail.y-=ImGui::GetFrameHeightWithSpacing();
if (ImGui::BeginTable("FindResults",4,ImGuiTableFlags_Borders|ImGuiTableFlags_ScrollY,avail)) {
ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed,ImGui::CalcTextSize("order").x);
ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthFixed,ImGui::CalcTextSize("row").x);
ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch);
ImGui::TableSetupColumn("c3",ImGuiTableColumnFlags_WidthFixed);
ImGui::TableSetupScrollFreeze(0,1);
ImGui::TableNextRow(ImGuiTableRowFlags_Headers);
ImGui::TableNextColumn();
ImGui::Text("order");
ImGui::TableNextColumn();
ImGui::Text("row");
ImGui::TableNextColumn();
ImGui::Text("channel");
ImGui::TableNextColumn();
ImGui::Text("go");
int index=0;
for (FurnaceGUIQueryResult& i: curQueryResults) {
ImGui::TableNextRow();
ImGui::TableNextColumn();
if (settings.orderRowsBase==1) {
ImGui::Text("%.2X",i.order);
} else {
ImGui::Text("%d",i.order);
}
ImGui::TableNextColumn();
if (settings.patRowsBase==1) {
ImGui::Text("%.2X",i.y);
} else {
ImGui::Text("%d",i.y);
}
ImGui::TableNextColumn();
ImGui::Text("%d (%s)",i.x+1,e->getChannelName(i.x));
if (ImGui::TableNextColumn()) {
snprintf(tempID,1024,ICON_FA_CHEVRON_RIGHT "##_FR%d",index);
if (ImGui::Selectable(tempID)) {
e->changeSongP(i.subsong);
if (e->isPlaying()) {
followPattern=false;
} else {
e->setOrder(i.order);
}
curOrder=i.order;
cursor.xCoarse=i.x;
cursor.xFine=0;
cursor.y=i.y;
selStart=cursor;
selEnd=cursor;
demandScrollX=true;
updateScroll(cursor.y);
nextWindow=GUI_WINDOW_PATTERN;
}
}
index++;
}
ImGui::EndTable();
}
} else {
ImGui::Text("no matches found!");
}
if (ImGui::Button("Back")) {
queryViewingResults=false;
}
} else {
for (FurnaceGUIFindQuery& i: curQuery) {
ImGui::PushID(index+0x100);
if (ImGui::BeginTable("FindRep",4,ImGuiTableFlags_BordersOuter)) {
ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed);
ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,0.5);
ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch,0.25);
ImGui::TableSetupColumn("c3",ImGuiTableColumnFlags_WidthStretch,0.25);
ImGui::PushID(index);
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::Text("Note");
@ -402,15 +474,11 @@ void FurnaceGUI::drawFindReplace() {
i.effectCount--;
}
}
ImGui::PopID();
ImGui::EndTable();
}
ImGui::PopID();
index++;
}
if (ImGui::Button("Find")) {
}
ImGui::SameLine();
if (eraseIndex>=0) {
curQuery.erase(curQuery.begin()+eraseIndex);
}
@ -487,14 +555,16 @@ void FurnaceGUI::drawFindReplace() {
ImGui::SetTooltip("match effects only if they appear exactly as specified.");
}
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::Checkbox("Backwards",&curQueryBackwards);
ImGui::EndTable();
}
if (ImGui::TreeNode("Replace")) {
if (ImGui::Button("Find")) {
doFind();
}
}
ImGui::EndTabItem();
}
if (ImGui::BeginTabItem("Replace")) {
if (ImGui::BeginTable("QueryReplace",3,ImGuiTableFlags_BordersOuter)) {
ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed);
ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,0.5);
@ -675,7 +745,9 @@ void FurnaceGUI::drawFindReplace() {
if (ImGui::Button("Replace##QueryReplace")) {
// TODO
}
ImGui::TreePop();
ImGui::EndTabItem();
}
ImGui::EndTabBar();
}
}
if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_FIND;

View File

@ -4450,6 +4450,7 @@ FurnaceGUI::FurnaceGUI():
queryReplaceNoteDo(false),
queryReplaceInsDo(false),
queryReplaceVolDo(false),
queryViewingResults(false),
wavePreviewOn(false),
wavePreviewKey((SDL_Scancode)0),
wavePreviewNote(0),

View File

@ -1208,6 +1208,7 @@ class FurnaceGUI {
bool queryReplaceVolDo;
bool queryReplaceEffectDo[8];
bool queryReplaceEffectValDo[8];
bool queryViewingResults;
struct ActiveNote {
int chan;