2022-06-06 10:03:19 +00:00
|
|
|
#include "gui.h"
|
|
|
|
#include "imgui.h"
|
|
|
|
#include "IconsFontAwesome4.h"
|
|
|
|
#include "misc/cpp/imgui_stdlib.h"
|
2022-06-07 23:51:18 +00:00
|
|
|
#include "guiConst.h"
|
2022-06-09 23:52:38 +00:00
|
|
|
#include "intConst.h"
|
2022-06-11 07:14:30 +00:00
|
|
|
#include "../ta-log.h"
|
2022-06-06 10:03:19 +00:00
|
|
|
|
2022-06-07 18:49:12 +00:00
|
|
|
const char* queryModes[GUI_QUERY_MAX]={
|
|
|
|
"ignore",
|
|
|
|
"equals",
|
|
|
|
"not equal",
|
|
|
|
"between",
|
|
|
|
"not between",
|
|
|
|
"any",
|
|
|
|
"none"
|
|
|
|
};
|
|
|
|
|
2022-06-07 23:51:18 +00:00
|
|
|
const char* queryReplaceModes[GUI_QUERY_REPLACE_MAX]={
|
|
|
|
"set",
|
|
|
|
"add",
|
2022-06-09 21:41:54 +00:00
|
|
|
"add (overflow)",
|
2022-06-07 23:51:18 +00:00
|
|
|
"clear"
|
|
|
|
};
|
|
|
|
|
2022-06-10 23:27:47 +00:00
|
|
|
int queryNote(int note, int octave) {
|
|
|
|
if (note==100) {
|
|
|
|
return 128;
|
|
|
|
} else if (note==101) { // note off and envelope release
|
|
|
|
return 129;
|
|
|
|
} else if (note==102) { // envelope release only
|
|
|
|
return 130;
|
|
|
|
} else if (octave==0 && note==0) {
|
|
|
|
return -1;
|
|
|
|
} else if (note==0 && octave!=0) {
|
|
|
|
return -1; // bug note?
|
|
|
|
}
|
|
|
|
int seek=(note+(signed char)octave*12);
|
|
|
|
if (seek<-60 || seek>=120) {
|
|
|
|
return -1; // out of range note
|
|
|
|
}
|
|
|
|
return seek;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool checkCondition(int mode, int arg, int argMax, int val, bool noteMode=false) {
|
|
|
|
switch (mode) {
|
|
|
|
case GUI_QUERY_IGNORE:
|
|
|
|
return true;
|
|
|
|
break;
|
|
|
|
case GUI_QUERY_MATCH:
|
|
|
|
return (val==arg);
|
|
|
|
break;
|
|
|
|
case GUI_QUERY_MATCH_NOT:
|
|
|
|
return (val!=-1 && val!=arg);
|
|
|
|
break;
|
|
|
|
case GUI_QUERY_RANGE:
|
|
|
|
return (val>=arg && val<=argMax);
|
|
|
|
break;
|
|
|
|
case GUI_QUERY_RANGE_NOT:
|
|
|
|
return (val!=-1 && (val<arg || val>argMax) && (!noteMode || val<120));
|
|
|
|
break;
|
|
|
|
case GUI_QUERY_ANY:
|
|
|
|
return (val!=-1);
|
|
|
|
break;
|
|
|
|
case GUI_QUERY_NONE:
|
|
|
|
return (val==-1);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void FurnaceGUI::doFind() {
|
|
|
|
int firstOrder=0;
|
|
|
|
int lastOrder=e->curSubSong->ordersLen-1;
|
|
|
|
|
|
|
|
if (curQueryRangeY==1 || curQueryRangeY==2) {
|
|
|
|
firstOrder=curOrder;
|
|
|
|
lastOrder=curOrder;
|
|
|
|
}
|
|
|
|
|
|
|
|
int firstRow=0;
|
|
|
|
int lastRow=e->curSubSong->patLen-1;
|
|
|
|
|
|
|
|
if (curQueryRangeY==1) {
|
|
|
|
firstRow=selStart.y;
|
|
|
|
lastRow=selEnd.y;
|
|
|
|
}
|
|
|
|
|
|
|
|
int firstChan=0;
|
|
|
|
int lastChan=e->getTotalChannelCount()-1;
|
|
|
|
|
|
|
|
if (curQueryRangeX) {
|
|
|
|
firstChan=curQueryRangeXMin;
|
|
|
|
lastChan=curQueryRangeXMax;
|
|
|
|
}
|
|
|
|
|
|
|
|
curQueryResults.clear();
|
|
|
|
|
|
|
|
for (int i=firstOrder; i<=lastOrder; i++) {
|
|
|
|
for (int j=firstRow; j<=lastRow; j++) {
|
|
|
|
for (int k=firstChan; k<=lastChan; k++) {
|
|
|
|
DivPattern* p=e->curPat[k].getPattern(e->curOrders->ord[k][i],false);
|
|
|
|
bool matched=false;
|
|
|
|
for (FurnaceGUIFindQuery& l: curQuery) {
|
|
|
|
if (matched) break;
|
|
|
|
|
|
|
|
if (!checkCondition(l.noteMode,l.note,l.noteMax,queryNote(p->data[j][0],p->data[j][1]),true)) continue;
|
|
|
|
if (!checkCondition(l.insMode,l.ins,l.insMax,p->data[j][2])) continue;
|
|
|
|
if (!checkCondition(l.volMode,l.vol,l.volMax,p->data[j][3])) continue;
|
|
|
|
|
|
|
|
if (l.effectCount>0) {
|
|
|
|
bool notMatched=false;
|
|
|
|
switch (curQueryEffectPos) {
|
|
|
|
case 0: // no
|
|
|
|
// TODO
|
|
|
|
for (int m=0; m<l.effectCount; m++) {
|
|
|
|
for (int n=0; n<e->curPat[k].effectCols; n++) {
|
|
|
|
if (!checkCondition(l.effectMode[m],l.effect[m],l.effectMax[m],p->data[j][4+m*2])) continue;
|
|
|
|
if (!checkCondition(l.effectValMode[m],l.effectVal[m],l.effectValMax[m],p->data[j][5+m*2])) continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 1: // lax
|
|
|
|
break;
|
|
|
|
case 2: // strict
|
|
|
|
for (int m=0; m<l.effectCount; m++) {
|
|
|
|
if (!checkCondition(l.effectMode[m],l.effect[m],l.effectMax[m],p->data[j][4+m*2])) {
|
|
|
|
notMatched=true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if (!checkCondition(l.effectValMode[m],l.effectVal[m],l.effectValMax[m],p->data[j][5+m*2])) {
|
|
|
|
notMatched=true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if (notMatched) continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
matched=true;
|
|
|
|
}
|
|
|
|
if (matched) {
|
2022-06-11 07:14:30 +00:00
|
|
|
curQueryResults.push_back(FurnaceGUIQueryResult(e->getCurrentSubSong(),i,k,j));
|
2022-06-10 23:27:47 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
queryViewingResults=true;
|
2022-06-10 23:27:47 +00:00
|
|
|
}
|
|
|
|
|
2022-06-07 23:51:18 +00:00
|
|
|
#define FIRST_VISIBLE(x) (x==GUI_QUERY_MATCH || x==GUI_QUERY_MATCH_NOT || x==GUI_QUERY_RANGE || x==GUI_QUERY_RANGE_NOT)
|
|
|
|
#define SECOND_VISIBLE(x) (x==GUI_QUERY_RANGE || x==GUI_QUERY_RANGE_NOT)
|
|
|
|
|
2022-06-06 10:03:19 +00:00
|
|
|
void FurnaceGUI::drawFindReplace() {
|
|
|
|
if (nextWindow==GUI_WINDOW_FIND) {
|
|
|
|
findOpen=true;
|
|
|
|
ImGui::SetNextWindowFocus();
|
|
|
|
nextWindow=GUI_WINDOW_NOTHING;
|
|
|
|
}
|
|
|
|
if (!findOpen) return;
|
|
|
|
ImGui::SetNextWindowSizeConstraints(ImVec2(64.0f*dpiScale,32.0f*dpiScale),ImVec2(scrW*dpiScale,scrH*dpiScale));
|
|
|
|
if (ImGui::Begin("Find/Replace",&findOpen,globalWinFlags)) {
|
2022-06-07 18:49:12 +00:00
|
|
|
if (curQuery.empty()) {
|
|
|
|
curQuery.push_back(FurnaceGUIFindQuery());
|
|
|
|
}
|
2022-06-07 23:51:18 +00:00
|
|
|
int index=0;
|
|
|
|
int eraseIndex=-1;
|
|
|
|
char tempID[1024];
|
2022-06-11 07:14:30 +00:00
|
|
|
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++;
|
2022-06-07 23:51:18 +00:00
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::EndTable();
|
2022-06-07 23:51:18 +00:00
|
|
|
}
|
|
|
|
} else {
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::Text("no matches found!");
|
2022-06-07 23:51:18 +00:00
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
if (ImGui::Button("Back")) {
|
|
|
|
queryViewingResults=false;
|
2022-06-07 23:51:18 +00:00
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
} 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::TableNextRow();
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::Text("Note");
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
|
|
|
ImGui::Combo("##NCondition",&i.noteMode,queryModes,GUI_QUERY_MAX);
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
if (FIRST_VISIBLE(i.noteMode)) {
|
|
|
|
if ((i.noteMode==GUI_QUERY_RANGE || i.noteMode==GUI_QUERY_RANGE_NOT) && i.note>=120) {
|
|
|
|
i.note=0;
|
|
|
|
}
|
|
|
|
if (i.note==130) {
|
|
|
|
snprintf(tempID,1024,"REL");
|
|
|
|
} else if (i.note==129) {
|
|
|
|
snprintf(tempID,1024,"===");
|
|
|
|
} else if (i.note==128) {
|
|
|
|
snprintf(tempID,1024,"OFF");
|
|
|
|
} else if (i.note>=-60 && i.note<120) {
|
|
|
|
snprintf(tempID,1024,"%s",noteNames[i.note+60]);
|
|
|
|
} else {
|
|
|
|
snprintf(tempID,1024,"???");
|
|
|
|
i.note=0;
|
|
|
|
}
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
|
|
|
if (ImGui::BeginCombo("##NN1",tempID)) {
|
|
|
|
for (int j=0; j<180; j++) {
|
|
|
|
snprintf(tempID,1024,"%s",noteNames[j]);
|
|
|
|
if (ImGui::Selectable(tempID,i.note==(j-60))) {
|
|
|
|
i.note=j-60;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (i.noteMode!=GUI_QUERY_RANGE && i.noteMode!=GUI_QUERY_RANGE_NOT) {
|
|
|
|
if (ImGui::Selectable("OFF",i.note==128)) {
|
|
|
|
i.note=128;
|
|
|
|
}
|
|
|
|
if (ImGui::Selectable("===",i.note==129)) {
|
|
|
|
i.note=129;
|
|
|
|
}
|
|
|
|
if (ImGui::Selectable("REL",i.note==130)) {
|
|
|
|
i.note=130;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::EndCombo();
|
|
|
|
}
|
2022-06-07 23:51:18 +00:00
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::TableNextColumn();
|
|
|
|
if (SECOND_VISIBLE(i.noteMode)) {
|
|
|
|
if (i.noteMax<-60 || i.noteMax>=120) {
|
|
|
|
i.noteMax=0;
|
|
|
|
}
|
|
|
|
if (i.noteMax>=-60 && i.noteMax<120) {
|
|
|
|
snprintf(tempID,1024,"%s",noteNames[i.noteMax+60]);
|
|
|
|
} else {
|
|
|
|
snprintf(tempID,1024,"???");
|
|
|
|
}
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
|
|
|
if (ImGui::BeginCombo("##NN2",tempID)) {
|
|
|
|
for (int j=0; j<180; j++) {
|
|
|
|
snprintf(tempID,1024,"%s",noteNames[j]);
|
|
|
|
if (ImGui::Selectable(tempID,i.noteMax==(j-60))) {
|
|
|
|
i.noteMax=j-60;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::EndCombo();
|
|
|
|
}
|
2022-06-07 23:51:18 +00:00
|
|
|
}
|
2022-06-07 18:49:12 +00:00
|
|
|
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::TableNextRow();
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::Text("Ins");
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
|
|
|
ImGui::Combo("##ICondition",&i.insMode,queryModes,GUI_QUERY_MAX);
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
if (FIRST_VISIBLE(i.insMode)) {
|
|
|
|
snprintf(tempID,1024,"%.2X",i.ins);
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
|
|
|
if (ImGui::BeginCombo("II1",tempID)) {
|
|
|
|
for (int j=0; j<256; j++) {
|
|
|
|
snprintf(tempID,1024,"%.2X",j);
|
|
|
|
if (ImGui::Selectable(tempID,i.ins==j)) {
|
|
|
|
i.ins=j;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::EndCombo();
|
|
|
|
}
|
2022-06-07 23:51:18 +00:00
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::TableNextColumn();
|
|
|
|
if (SECOND_VISIBLE(i.insMode)) {
|
|
|
|
snprintf(tempID,1024,"%.2X",i.insMax);
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
|
|
|
if (ImGui::BeginCombo("II2",tempID)) {
|
|
|
|
for (int j=0; j<256; j++) {
|
|
|
|
snprintf(tempID,1024,"%.2X",j);
|
|
|
|
if (ImGui::Selectable(tempID,i.insMax==j)) {
|
|
|
|
i.insMax=j;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::EndCombo();
|
|
|
|
}
|
2022-06-07 23:51:18 +00:00
|
|
|
}
|
2022-06-07 18:49:12 +00:00
|
|
|
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::TableNextRow();
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::Text("Volume");
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
|
|
|
ImGui::Combo("##VCondition",&i.volMode,queryModes,GUI_QUERY_MAX);
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
if (FIRST_VISIBLE(i.volMode)) {
|
|
|
|
snprintf(tempID,1024,"%.2X",i.vol);
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
|
|
|
if (ImGui::BeginCombo("VV1",tempID)) {
|
|
|
|
for (int j=0; j<256; j++) {
|
|
|
|
snprintf(tempID,1024,"%.2X",j);
|
|
|
|
if (ImGui::Selectable(tempID,i.vol==j)) {
|
|
|
|
i.vol=j;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::EndCombo();
|
2022-06-07 23:51:18 +00:00
|
|
|
}
|
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::TableNextColumn();
|
|
|
|
if (SECOND_VISIBLE(i.volMode)) {
|
|
|
|
snprintf(tempID,1024,"%.2X",i.volMax);
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
|
|
|
if (ImGui::BeginCombo("VV2",tempID)) {
|
|
|
|
for (int j=0; j<256; j++) {
|
|
|
|
snprintf(tempID,1024,"%.2X",j);
|
|
|
|
if (ImGui::Selectable(tempID,i.volMax==j)) {
|
|
|
|
i.volMax=j;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::EndCombo();
|
2022-06-07 23:51:18 +00:00
|
|
|
}
|
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
|
|
|
|
for (int j=0; j<i.effectCount; j++) {
|
|
|
|
ImGui::PushID(0x1000+j);
|
|
|
|
ImGui::TableNextRow();
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::Text("Effect");
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
|
|
|
ImGui::Combo("##ECondition",&i.effectMode[j],queryModes,GUI_QUERY_MAX);
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
if (FIRST_VISIBLE(i.effectMode[j])) {
|
|
|
|
snprintf(tempID,1024,"%.2X",i.effect[j]);
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
|
|
|
if (ImGui::BeginCombo("EE1",tempID)) {
|
|
|
|
for (int k=0; k<256; k++) {
|
|
|
|
snprintf(tempID,1024,"%.2X",k);
|
|
|
|
if (ImGui::Selectable(tempID,i.effect[j]==k)) {
|
|
|
|
i.effect[j]=k;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::EndCombo();
|
|
|
|
}
|
2022-06-07 23:51:18 +00:00
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::TableNextColumn();
|
|
|
|
if (SECOND_VISIBLE(i.effectMode[j])) {
|
|
|
|
snprintf(tempID,1024,"%.2X",i.effectMax[j]);
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
|
|
|
if (ImGui::BeginCombo("EE2",tempID)) {
|
|
|
|
for (int k=0; k<256; k++) {
|
|
|
|
snprintf(tempID,1024,"%.2X",k);
|
|
|
|
if (ImGui::Selectable(tempID,i.effectMax[j]==k)) {
|
|
|
|
i.effectMax[j]=k;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::EndCombo();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ImGui::TableNextRow();
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::Text("Value");
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
|
|
|
ImGui::Combo("##EVCondition",&i.effectValMode[j],queryModes,GUI_QUERY_MAX);
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
if (FIRST_VISIBLE(i.effectValMode[j])) {
|
|
|
|
snprintf(tempID,1024,"%.2X",i.effectVal[j]);
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
|
|
|
if (ImGui::BeginCombo("EV1",tempID)) {
|
|
|
|
for (int k=0; k<256; k++) {
|
|
|
|
snprintf(tempID,1024,"%.2X",k);
|
|
|
|
if (ImGui::Selectable(tempID,i.effectVal[j]==k)) {
|
|
|
|
i.effectVal[j]=k;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::EndCombo();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
if (SECOND_VISIBLE(i.effectValMode[j])) {
|
|
|
|
snprintf(tempID,1024,"%.2X",i.effectValMax[j]);
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
|
|
|
if (ImGui::BeginCombo("EV2",tempID)) {
|
|
|
|
for (int k=0; k<256; k++) {
|
|
|
|
snprintf(tempID,1024,"%.2X",k);
|
|
|
|
if (ImGui::Selectable(tempID,i.effectValMax[j]==k)) {
|
|
|
|
i.effectValMax[j]=k;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::EndCombo();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ImGui::PopID();
|
2022-06-07 23:51:18 +00:00
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::TableNextRow();
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
if (ImGui::Button(ICON_FA_MINUS "##DelQuery")) {
|
|
|
|
eraseIndex=index;
|
|
|
|
}
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
if (i.effectCount<8) {
|
|
|
|
if (ImGui::Button("Add effect")) {
|
|
|
|
i.effectCount++;
|
2022-06-07 23:51:18 +00:00
|
|
|
}
|
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::TableNextColumn();
|
|
|
|
if (i.effectCount>0) {
|
|
|
|
if (ImGui::Button("Remove effect")) {
|
|
|
|
i.effectCount--;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::EndTable();
|
2022-06-07 23:51:18 +00:00
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::PopID();
|
|
|
|
index++;
|
2022-06-07 23:51:18 +00:00
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
if (eraseIndex>=0) {
|
|
|
|
curQuery.erase(curQuery.begin()+eraseIndex);
|
2022-06-07 23:51:18 +00:00
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
if (ImGui::Button(ICON_FA_PLUS "##AddQuery")) {
|
|
|
|
curQuery.push_back(FurnaceGUIFindQuery());
|
2022-06-07 23:51:18 +00:00
|
|
|
}
|
|
|
|
|
2022-06-11 07:14:30 +00:00
|
|
|
if (ImGui::BeginTable("QueryLimits",3)) {
|
|
|
|
ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed);
|
|
|
|
ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,0.5f);
|
|
|
|
ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch,0.5f);
|
2022-06-09 23:52:38 +00:00
|
|
|
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::TableNextRow();
|
|
|
|
ImGui::TableNextColumn();
|
2022-06-07 23:51:18 +00:00
|
|
|
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::Text("Search range:");
|
2022-06-07 23:51:18 +00:00
|
|
|
|
2022-06-11 07:14:30 +00:00
|
|
|
if (ImGui::RadioButton("Song",curQueryRangeY==0)) {
|
|
|
|
curQueryRangeY=0;
|
|
|
|
}
|
|
|
|
if (ImGui::RadioButton("Selection",curQueryRangeY==1)) {
|
|
|
|
curQueryRangeY=1;
|
|
|
|
}
|
|
|
|
if (ImGui::RadioButton("Pattern",curQueryRangeY==2)) {
|
|
|
|
curQueryRangeY=2;
|
|
|
|
}
|
2022-06-08 00:48:42 +00:00
|
|
|
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::Checkbox("Confine to channels",&curQueryRangeX);
|
2022-06-08 00:48:42 +00:00
|
|
|
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::BeginDisabled(!curQueryRangeX);
|
|
|
|
snprintf(tempID,1024,"%d: %s",curQueryRangeXMin+1,e->getChannelName(curQueryRangeXMin));
|
|
|
|
if (ImGui::BeginCombo("From",tempID)) {
|
|
|
|
for (int i=0; i<e->getTotalChannelCount(); i++) {
|
|
|
|
snprintf(tempID,1024,"%d: %s",i+1,e->getChannelName(i));
|
|
|
|
if (ImGui::Selectable(tempID,curQueryRangeXMin==i)) {
|
|
|
|
curQueryRangeXMin=i;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::EndCombo();
|
|
|
|
}
|
2022-06-08 00:48:42 +00:00
|
|
|
|
2022-06-11 07:14:30 +00:00
|
|
|
snprintf(tempID,1024,"%d: %s",curQueryRangeXMax+1,e->getChannelName(curQueryRangeXMax));
|
|
|
|
if (ImGui::BeginCombo("To",tempID)) {
|
|
|
|
for (int i=0; i<e->getTotalChannelCount(); i++) {
|
|
|
|
snprintf(tempID,1024,"%d: %s",i+1,e->getChannelName(i));
|
|
|
|
if (ImGui::Selectable(tempID,curQueryRangeXMax==i)) {
|
|
|
|
curQueryRangeXMax=i;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::EndCombo();
|
|
|
|
}
|
|
|
|
ImGui::EndDisabled();
|
2022-06-08 00:48:42 +00:00
|
|
|
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::Text("Match effect position:");
|
2022-06-07 18:49:12 +00:00
|
|
|
|
2022-06-11 07:14:30 +00:00
|
|
|
if (ImGui::RadioButton("No",curQueryEffectPos==0)) {
|
|
|
|
curQueryEffectPos=0;
|
2022-06-09 23:52:38 +00:00
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("match effects regardless of position.");
|
2022-06-09 23:52:38 +00:00
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
if (ImGui::RadioButton("Lax",curQueryEffectPos==1)) {
|
|
|
|
curQueryEffectPos=1;
|
2022-06-09 23:52:38 +00:00
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("match effects only if they appear in-order.");
|
2022-06-09 23:52:38 +00:00
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
if (ImGui::RadioButton("Strict",curQueryEffectPos==2)) {
|
|
|
|
curQueryEffectPos=2;
|
|
|
|
}
|
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("match effects only if they appear exactly as specified.");
|
|
|
|
}
|
|
|
|
|
|
|
|
ImGui::EndTable();
|
2022-06-09 23:52:38 +00:00
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
|
|
|
|
if (ImGui::Button("Find")) {
|
|
|
|
doFind();
|
2022-06-09 23:52:38 +00:00
|
|
|
}
|
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
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);
|
|
|
|
ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch,0.5);
|
|
|
|
|
|
|
|
ImGui::TableNextRow();
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::Checkbox("Note",&queryReplaceNoteDo);
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::BeginDisabled(!queryReplaceNoteDo);
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
|
|
|
ImGui::Combo("##NRMode",&queryReplaceNoteMode,queryReplaceModes,GUI_QUERY_REPLACE_MAX);
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
|
|
|
if (queryReplaceNoteMode==GUI_QUERY_REPLACE_SET) {
|
|
|
|
if (queryReplaceNote==130) {
|
|
|
|
snprintf(tempID,1024,"REL");
|
|
|
|
} else if (queryReplaceNote==129) {
|
|
|
|
snprintf(tempID,1024,"===");
|
|
|
|
} else if (queryReplaceNote==128) {
|
|
|
|
snprintf(tempID,1024,"OFF");
|
|
|
|
} else if (queryReplaceNote>=-60 && queryReplaceNote<120) {
|
|
|
|
snprintf(tempID,1024,"%s",noteNames[queryReplaceNote+60]);
|
|
|
|
} else {
|
|
|
|
snprintf(tempID,1024,"???");
|
|
|
|
queryReplaceNote=0;
|
|
|
|
}
|
|
|
|
if (ImGui::BeginCombo("##NRValueC",tempID)) {
|
|
|
|
for (int j=0; j<180; j++) {
|
|
|
|
snprintf(tempID,1024,"%s",noteNames[j]);
|
|
|
|
if (ImGui::Selectable(tempID,queryReplaceNote==(j-60))) {
|
|
|
|
queryReplaceNote=j-60;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (ImGui::Selectable("OFF",queryReplaceNote==128)) {
|
|
|
|
queryReplaceNote=128;
|
|
|
|
}
|
|
|
|
if (ImGui::Selectable("===",queryReplaceNote==129)) {
|
|
|
|
queryReplaceNote=129;
|
|
|
|
}
|
|
|
|
if (ImGui::Selectable("REL",queryReplaceNote==130)) {
|
|
|
|
queryReplaceNote=130;
|
|
|
|
}
|
|
|
|
ImGui::EndCombo();
|
|
|
|
}
|
|
|
|
} else if (queryReplaceNoteMode==GUI_QUERY_REPLACE_ADD || queryReplaceNoteMode==GUI_QUERY_REPLACE_ADD_OVERFLOW) {
|
|
|
|
if (ImGui::InputInt("##NRValue",&queryReplaceNote,1,12)) {
|
|
|
|
if (queryReplaceNote<-180) queryReplaceNote=-180;
|
|
|
|
if (queryReplaceNote>180) queryReplaceNote=180;
|
|
|
|
}
|
2022-06-09 23:52:38 +00:00
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::EndDisabled();
|
2022-06-08 23:02:04 +00:00
|
|
|
|
2022-06-10 07:17:17 +00:00
|
|
|
ImGui::TableNextRow();
|
|
|
|
ImGui::TableNextColumn();
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::Checkbox("Ins",&queryReplaceInsDo);
|
2022-06-10 07:17:17 +00:00
|
|
|
ImGui::TableNextColumn();
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::BeginDisabled(!queryReplaceInsDo);
|
2022-06-10 07:17:17 +00:00
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::Combo("##IRMode",&queryReplaceInsMode,queryReplaceModes,GUI_QUERY_REPLACE_MAX);
|
2022-06-10 07:17:17 +00:00
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
2022-06-11 07:14:30 +00:00
|
|
|
if (queryReplaceInsMode==GUI_QUERY_REPLACE_SET) {
|
|
|
|
if (ImGui::InputScalar("##IRValueH",ImGuiDataType_S32,&queryReplaceIns,&_ONE,&_SIXTEEN,"%.2X",ImGuiInputTextFlags_CharsHexadecimal)) {
|
|
|
|
if (queryReplaceIns<0) queryReplaceIns=0;
|
|
|
|
if (queryReplaceIns>255) queryReplaceIns=255;
|
2022-06-10 07:17:17 +00:00
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
} else if (queryReplaceInsMode==GUI_QUERY_REPLACE_ADD || queryReplaceInsMode==GUI_QUERY_REPLACE_ADD_OVERFLOW) {
|
|
|
|
if (ImGui::InputInt("##IRValue",&queryReplaceIns,1,12)) {
|
|
|
|
if (queryReplaceIns<-255) queryReplaceIns=-255;
|
|
|
|
if (queryReplaceIns>255) queryReplaceIns=255;
|
2022-06-10 07:17:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::EndDisabled();
|
|
|
|
|
|
|
|
ImGui::TableNextRow();
|
|
|
|
ImGui::TableNextColumn();
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::Checkbox("Volume",&queryReplaceVolDo);
|
2022-06-10 07:17:17 +00:00
|
|
|
ImGui::TableNextColumn();
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::BeginDisabled(!queryReplaceVolDo);
|
2022-06-10 07:17:17 +00:00
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::Combo("##VRMode",&queryReplaceVolMode,queryReplaceModes,GUI_QUERY_REPLACE_MAX);
|
2022-06-10 07:17:17 +00:00
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
2022-06-11 07:14:30 +00:00
|
|
|
if (queryReplaceVolMode==GUI_QUERY_REPLACE_SET) {
|
|
|
|
if (ImGui::InputScalar("##VRValueH",ImGuiDataType_S32,&queryReplaceVol,&_ONE,&_SIXTEEN,"%.2X",ImGuiInputTextFlags_CharsHexadecimal)) {
|
|
|
|
if (queryReplaceVol<0) queryReplaceVol=0;
|
|
|
|
if (queryReplaceVol>255) queryReplaceVol=255;
|
2022-06-10 07:17:17 +00:00
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
} else if (queryReplaceVolMode==GUI_QUERY_REPLACE_ADD || queryReplaceVolMode==GUI_QUERY_REPLACE_ADD_OVERFLOW) {
|
|
|
|
if (ImGui::InputInt("##VRValue",&queryReplaceVol,1,12)) {
|
|
|
|
if (queryReplaceVol<-255) queryReplaceVol=-255;
|
|
|
|
if (queryReplaceVol>255) queryReplaceVol=255;
|
2022-06-10 07:17:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::EndDisabled();
|
|
|
|
|
2022-06-11 07:14:30 +00:00
|
|
|
for (int i=0; i<queryReplaceEffectCount; i++) {
|
|
|
|
ImGui::PushID(0x100+i);
|
|
|
|
ImGui::TableNextRow();
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::Checkbox("Effect",&queryReplaceEffectDo[i]);
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::BeginDisabled(!queryReplaceEffectDo[i]);
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
|
|
|
ImGui::Combo("##ERMode",&queryReplaceEffectMode[i],queryReplaceModes,GUI_QUERY_REPLACE_MAX);
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
|
|
|
if (queryReplaceEffectMode[i]==GUI_QUERY_REPLACE_SET) {
|
|
|
|
if (ImGui::InputScalar("##ERValueH",ImGuiDataType_S32,&queryReplaceEffect[i],&_ONE,&_SIXTEEN,"%.2X",ImGuiInputTextFlags_CharsHexadecimal)) {
|
|
|
|
if (queryReplaceEffect[i]<0) queryReplaceEffect[i]=0;
|
|
|
|
if (queryReplaceEffect[i]>255) queryReplaceEffect[i]=255;
|
|
|
|
}
|
|
|
|
} else if (queryReplaceEffectMode[i]==GUI_QUERY_REPLACE_ADD || queryReplaceEffectMode[i]==GUI_QUERY_REPLACE_ADD_OVERFLOW) {
|
|
|
|
if (ImGui::InputInt("##ERValue",&queryReplaceEffect[i],1,12)) {
|
|
|
|
if (queryReplaceEffect[i]<-255) queryReplaceEffect[i]=-255;
|
|
|
|
if (queryReplaceEffect[i]>255) queryReplaceEffect[i]=255;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::EndDisabled();
|
|
|
|
|
|
|
|
ImGui::TableNextRow();
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::Checkbox("Value",&queryReplaceEffectValDo[i]);
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::BeginDisabled(!queryReplaceEffectValDo[i]);
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
|
|
|
ImGui::Combo("##ERMode",&queryReplaceEffectValMode[i],queryReplaceModes,GUI_QUERY_REPLACE_MAX);
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
|
|
|
if (queryReplaceEffectValMode[i]==GUI_QUERY_REPLACE_SET) {
|
|
|
|
if (ImGui::InputScalar("##ERValueH",ImGuiDataType_S32,&queryReplaceEffectVal[i],&_ONE,&_SIXTEEN,"%.2X",ImGuiInputTextFlags_CharsHexadecimal)) {
|
|
|
|
if (queryReplaceEffectVal[i]<0) queryReplaceEffectVal[i]=0;
|
|
|
|
if (queryReplaceEffectVal[i]>255) queryReplaceEffectVal[i]=255;
|
|
|
|
}
|
|
|
|
} else if (queryReplaceEffectValMode[i]==GUI_QUERY_REPLACE_ADD || queryReplaceEffectValMode[i]==GUI_QUERY_REPLACE_ADD_OVERFLOW) {
|
|
|
|
if (ImGui::InputInt("##ERValue",&queryReplaceEffectVal[i],1,12)) {
|
|
|
|
if (queryReplaceEffectVal[i]<-255) queryReplaceEffectVal[i]=-255;
|
|
|
|
if (queryReplaceEffectVal[i]>255) queryReplaceEffectVal[i]=255;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::EndDisabled();
|
2022-06-10 07:17:17 +00:00
|
|
|
|
2022-06-08 23:02:04 +00:00
|
|
|
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::PopID();
|
2022-06-10 07:17:17 +00:00
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
|
|
|
|
ImGui::TableNextRow();
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
if (queryReplaceEffectCount<8) {
|
|
|
|
if (ImGui::Button("Add effect")) {
|
|
|
|
queryReplaceEffectCount++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
if (queryReplaceEffectCount>0) {
|
|
|
|
if (ImGui::Button("Remove effect")) {
|
|
|
|
queryReplaceEffectCount--;
|
|
|
|
}
|
2022-06-10 07:17:17 +00:00
|
|
|
}
|
2022-06-08 23:02:04 +00:00
|
|
|
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::EndTable();
|
|
|
|
}
|
|
|
|
ImGui::Text("Effect replace mode:");
|
|
|
|
if (ImGui::RadioButton("Clear effects",queryReplaceEffectPos==0)) {
|
|
|
|
queryReplaceEffectPos=0;
|
|
|
|
}
|
|
|
|
if (ImGui::RadioButton("Replace matches only",queryReplaceEffectPos==1)) {
|
|
|
|
queryReplaceEffectPos=1;
|
|
|
|
}
|
|
|
|
if (ImGui::RadioButton("Replace matches, then free spaces",queryReplaceEffectPos==2)) {
|
|
|
|
queryReplaceEffectPos=2;
|
|
|
|
}
|
|
|
|
if (ImGui::RadioButton("Insert in free spaces",queryReplaceEffectPos==3)) {
|
|
|
|
queryReplaceEffectPos=3;
|
|
|
|
}
|
|
|
|
if (ImGui::Button("Replace##QueryReplace")) {
|
|
|
|
// TODO
|
|
|
|
}
|
|
|
|
ImGui::EndTabItem();
|
2022-06-07 23:51:18 +00:00
|
|
|
}
|
2022-06-11 07:14:30 +00:00
|
|
|
ImGui::EndTabBar();
|
2022-06-07 18:49:12 +00:00
|
|
|
}
|
2022-06-06 10:03:19 +00:00
|
|
|
}
|
|
|
|
if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_FIND;
|
|
|
|
ImGui::End();
|
|
|
|
}
|