Merge pull request #1422 from Eknous-P/guimprove

Numerous GUI improvements
This commit is contained in:
tildearrow 2023-08-28 03:02:50 -05:00 committed by GitHub
commit 7ea7f72b45
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 189 additions and 138 deletions

View File

@ -282,10 +282,12 @@ void FurnaceGUI::drawChanOsc() {
updateChanOscGradTex=true;
}
pushDestColor();
if (ImGui::Button("Remove")) {
removePoint=index;
ImGui::CloseCurrentPopup();
}
popDestColor();
ImGui::EndPopup();
}

View File

@ -172,10 +172,12 @@ void FurnaceGUI::waveListItem(int i, float* wavePreview, int dir, int asset) {
wavePreview[i]=wave->data[i];
}
if (wave->len>0) wavePreview[wave->len]=wave->data[wave->len-1];
if (ImGui::Selectable(fmt::sprintf("%d##_WAVE%d\n",i,i).c_str(),curWave==i)) {
ImGui::PushStyleVar(ImGuiStyleVar_SelectableTextAlign, ImVec2(0,0.5f));
if (ImGui::Selectable(fmt::sprintf(" %d##_WAVE%d\n",i,i).c_str(),curWave==i,0,ImVec2(0,23*dpiScale))) { // i didnt think that the 0 would work, but it does
curWave=i;
lastAssetType=1;
}
ImGui::PopStyleVar();
if (wantScrollList && curWave==i) ImGui::SetScrollHereY();
if (ImGui::IsItemHovered()) {
if (ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) {

View File

@ -811,9 +811,14 @@ void FurnaceGUI::drawFindReplace() {
}
ImGui::TableNextRow();
ImGui::TableNextColumn();
pushDestColor();
if (ImGui::Button(ICON_FA_MINUS "##DelQuery")) {
eraseIndex=index;
}
popDestColor();
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Delete query");
}
ImGui::TableNextColumn();
if (i.effectCount<8) {
if (ImGui::Button("Add effect")) {
@ -822,9 +827,11 @@ void FurnaceGUI::drawFindReplace() {
}
ImGui::TableNextColumn();
if (i.effectCount>0) {
pushDestColor();
if (ImGui::Button("Remove effect")) {
i.effectCount--;
}
popDestColor();
}
ImGui::EndTable();
}
@ -1103,9 +1110,11 @@ void FurnaceGUI::drawFindReplace() {
}
ImGui::TableNextColumn();
if (queryReplaceEffectCount>0) {
pushDestColor();
if (ImGui::Button("Remove effect")) {
queryReplaceEffectCount--;
}
popDestColor();
}
ImGui::EndTable();

View File

@ -47,13 +47,14 @@ void FurnaceGUI::drawGrooves() {
ImGui::TableNextColumn();
ImGui::Text("pattern");
ImGui::TableNextColumn();
ImGui::Text("remove");
// ImGui::Text("remove"); removed because the text clips from the fixed width
int index=0;
for (DivGroovePattern& i: e->song.grooves) {
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::PushFont(patFont);
ImGui::AlignTextToFramePadding();
ImGui::Text("%.2X",index);
ImGui::PopFont();
@ -79,6 +80,7 @@ void FurnaceGUI::drawGrooves() {
ImGui::SetKeyboardFocusHere();
}
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
ImGui::AlignTextToFramePadding();
if (ImGui::InputText(grooveStr.c_str(),&grooveListString)) {
decodeMMLStr(grooveListString,intVersion,intVersionLen,ignoredLoop,1,255,ignoredRel);
if (intVersionLen<1) {
@ -120,10 +122,15 @@ void FurnaceGUI::drawGrooves() {
}
ImGui::TableNextColumn();
pushDestColor();
String grooveID=fmt::sprintf(ICON_FA_TIMES "##GRR%d",index);
if (ImGui::Button(grooveID.c_str())) {
delGroove=index;
}
popDestColor();
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("remove");
}
index++;
}

View File

@ -4333,6 +4333,7 @@ void FurnaceGUI::drawInsEdit() {
MARK_MODIFIED;
}
ImGui::SameLine();
pushDestColor();
if (ImGui::Button(ICON_FA_TIMES "##HWCmdDel")) {
for (int j=i; j<ins->gb.hwSeqLen-1; j++) {
ins->gb.hwSeq[j].cmd=ins->gb.hwSeq[j+1].cmd;
@ -4340,6 +4341,7 @@ void FurnaceGUI::drawInsEdit() {
}
ins->gb.hwSeqLen--;
}
popDestColor();
ImGui::PopID();
}
ImGui::EndTable();

View File

@ -115,10 +115,12 @@ void FurnaceGUI::drawOrderButtons() {
}
NEXT_BUTTON;
pushDestColor();
if (ImGui::Button(ICON_FA_MINUS)) { handleUnimportant
// remove this order row
doAction(GUI_ACTION_ORDERS_REMOVE);
}
popDestColor();
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Remove order");
}

View File

@ -577,7 +577,7 @@ void FurnaceGUI::drawSettings() {
float vol=fabs(sysVol);
ImGui::PushID(i);
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::CalcTextSize("Invert").x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x);
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::CalcTextSize("Invert").x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x*2.0);
if (ImGui::BeginCombo("##System",getSystemName(sysID))) {
for (int j=0; availableSystems[j]; j++) {
if (ImGui::Selectable(getSystemName((DivSystem)availableSystems[j]),sysID==availableSystems[j])) {
@ -596,11 +596,13 @@ void FurnaceGUI::drawSettings() {
}
ImGui::SameLine();
//ImGui::BeginDisabled(settings.initialSys.size()<=4);
pushDestColor();
if (ImGui::Button(ICON_FA_MINUS "##InitSysRemove")) {
doRemove=i;
}
popDestColor();
//ImGui::EndDisabled();
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x*2.0);
if (CWSliderFloat("Volume",&vol,0.0f,3.0f)) {
if (doInvert) {
if (vol<0.0001) vol=0.0001;
@ -610,13 +612,13 @@ void FurnaceGUI::drawSettings() {
sysVol=doInvert?-vol:vol;
settings.initialSys.set(fmt::sprintf("vol%d",i),(float)sysVol);
} rightClickable
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x*2.0);
if (CWSliderFloat("Panning",&sysPan,-1.0f,1.0f)) {
if (sysPan<-1.0f) sysPan=-1.0f;
if (sysPan>1.0f) sysPan=1.0f;
settings.initialSys.set(fmt::sprintf("pan%d",i),(float)sysPan);
} rightClickable
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x*2.0);
if (CWSliderFloat("Front/Rear",&sysPanFR,-1.0f,1.0f)) {
if (sysPanFR<-1.0f) sysPanFR=-1.0f;
if (sysPanFR>1.0f) sysPanFR=1.0f;
@ -719,105 +721,123 @@ void FurnaceGUI::drawSettings() {
CONFIG_SECTION("Audio") {
// SUBSECTION OUTPUT
CONFIG_SUBSECTION("Output");
if (ImGui::BeginTable("##Output",2)) {
ImGui::TableSetupColumn("##Label",ImGuiTableColumnFlags_WidthFixed);
ImGui::TableSetupColumn("##Combo",ImGuiTableColumnFlags_WidthStretch);
#ifdef HAVE_JACK
ImGui::AlignTextToFramePadding();
ImGui::Text("Backend");
ImGui::SameLine();
int prevAudioEngine=settings.audioEngine;
if (ImGui::Combo("##Backend",&settings.audioEngine,audioBackends,2)) {
if (settings.audioEngine!=prevAudioEngine) {
if (!isProAudio[settings.audioEngine]) settings.audioChans=2;
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::AlignTextToFramePadding();
ImGui::Text("Backend");
ImGui::TableNextColumn();
int prevAudioEngine=settings.audioEngine;
if (ImGui::Combo("##Backend",&settings.audioEngine,audioBackends,2)) {
if (settings.audioEngine!=prevAudioEngine) {
if (!isProAudio[settings.audioEngine]) settings.audioChans=2;
}
}
}
#endif
if (settings.audioEngine==DIV_AUDIO_SDL) {
ImGui::AlignTextToFramePadding();
ImGui::Text("Driver");
ImGui::SameLine();
if (ImGui::BeginCombo("##SDLADriver",settings.sdlAudioDriver.empty()?"Automatic":settings.sdlAudioDriver.c_str())) {
if (ImGui::Selectable("Automatic",settings.sdlAudioDriver.empty())) {
settings.sdlAudioDriver="";
if (settings.audioEngine==DIV_AUDIO_SDL) {
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::AlignTextToFramePadding();
ImGui::Text("Driver");
ImGui::TableNextColumn();
if (ImGui::BeginCombo("##SDLADriver",settings.sdlAudioDriver.empty()?"Automatic":settings.sdlAudioDriver.c_str())) {
if (ImGui::Selectable("Automatic",settings.sdlAudioDriver.empty())) {
settings.sdlAudioDriver="";
}
for (String& i: availAudioDrivers) {
if (ImGui::Selectable(i.c_str(),i==settings.sdlAudioDriver)) {
settings.sdlAudioDriver=i;
}
}
ImGui::EndCombo();
}
for (String& i: availAudioDrivers) {
if (ImGui::Selectable(i.c_str(),i==settings.sdlAudioDriver)) {
settings.sdlAudioDriver=i;
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("you may need to restart Furnace for this setting to take effect.");
}
}
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::AlignTextToFramePadding();
ImGui::Text("Device");
ImGui::TableNextColumn();
String audioDevName=settings.audioDevice.empty()?"<System default>":settings.audioDevice;
if (ImGui::BeginCombo("##AudioDevice",audioDevName.c_str())) {
if (ImGui::Selectable("<System default>",settings.audioDevice.empty())) {
settings.audioDevice="";
}
for (String& i: e->getAudioDevices()) {
if (ImGui::Selectable(i.c_str(),i==settings.audioDevice)) {
settings.audioDevice=i;
}
}
ImGui::EndCombo();
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("you may need to restart Furnace for this setting to take effect.");
}
}
ImGui::AlignTextToFramePadding();
ImGui::Text("Device");
ImGui::SameLine();
String audioDevName=settings.audioDevice.empty()?"<System default>":settings.audioDevice;
if (ImGui::BeginCombo("##AudioDevice",audioDevName.c_str())) {
if (ImGui::Selectable("<System default>",settings.audioDevice.empty())) {
settings.audioDevice="";
}
for (String& i: e->getAudioDevices()) {
if (ImGui::Selectable(i.c_str(),i==settings.audioDevice)) {
settings.audioDevice=i;
}
}
ImGui::EndCombo();
}
ImGui::AlignTextToFramePadding();
ImGui::Text("Sample rate");
ImGui::SameLine();
String sr=fmt::sprintf("%d",settings.audioRate);
if (ImGui::BeginCombo("##SampleRate",sr.c_str())) {
SAMPLE_RATE_SELECTABLE(8000);
SAMPLE_RATE_SELECTABLE(16000);
SAMPLE_RATE_SELECTABLE(22050);
SAMPLE_RATE_SELECTABLE(32000);
SAMPLE_RATE_SELECTABLE(44100);
SAMPLE_RATE_SELECTABLE(48000);
SAMPLE_RATE_SELECTABLE(88200);
SAMPLE_RATE_SELECTABLE(96000);
SAMPLE_RATE_SELECTABLE(192000);
ImGui::EndCombo();
}
if (isProAudio[settings.audioEngine]) {
ImGui::Text("Outputs");
ImGui::SameLine();
if (ImGui::InputInt("##AudioChansI",&settings.audioChans,1,1)) {
if (settings.audioChans<1) settings.audioChans=1;
if (settings.audioChans>16) settings.audioChans=16;
}
} else {
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::AlignTextToFramePadding();
ImGui::Text("Channels");
ImGui::SameLine();
String chStr=(settings.audioChans<1 || settings.audioChans>8)?"What?":nonProAudioOuts[settings.audioChans-1];
if (ImGui::BeginCombo("##AudioChans",chStr.c_str())) {
CHANS_SELECTABLE(1);
CHANS_SELECTABLE(2);
CHANS_SELECTABLE(4);
CHANS_SELECTABLE(6);
CHANS_SELECTABLE(8);
ImGui::Text("Sample rate");
ImGui::TableNextColumn();
String sr=fmt::sprintf("%d",settings.audioRate);
if (ImGui::BeginCombo("##SampleRate",sr.c_str())) {
SAMPLE_RATE_SELECTABLE(8000);
SAMPLE_RATE_SELECTABLE(16000);
SAMPLE_RATE_SELECTABLE(22050);
SAMPLE_RATE_SELECTABLE(32000);
SAMPLE_RATE_SELECTABLE(44100);
SAMPLE_RATE_SELECTABLE(48000);
SAMPLE_RATE_SELECTABLE(88200);
SAMPLE_RATE_SELECTABLE(96000);
SAMPLE_RATE_SELECTABLE(192000);
ImGui::EndCombo();
}
}
ImGui::AlignTextToFramePadding();
ImGui::Text("Buffer size");
ImGui::SameLine();
String bs=fmt::sprintf("%d (latency: ~%.1fms)",settings.audioBufSize,2000.0*(double)settings.audioBufSize/(double)MAX(1,settings.audioRate));
if (ImGui::BeginCombo("##BufferSize",bs.c_str())) {
BUFFER_SIZE_SELECTABLE(64);
BUFFER_SIZE_SELECTABLE(128);
BUFFER_SIZE_SELECTABLE(256);
BUFFER_SIZE_SELECTABLE(512);
BUFFER_SIZE_SELECTABLE(1024);
BUFFER_SIZE_SELECTABLE(2048);
ImGui::EndCombo();
ImGui::TableNextRow();
ImGui::TableNextColumn();
if (isProAudio[settings.audioEngine]) {
ImGui::AlignTextToFramePadding();
ImGui::Text("Outputs");
ImGui::TableNextColumn();
if (ImGui::InputInt("##AudioChansI",&settings.audioChans,1,1)) {
if (settings.audioChans<1) settings.audioChans=1;
if (settings.audioChans>16) settings.audioChans=16;
}
} else {
ImGui::AlignTextToFramePadding();
ImGui::Text("Channels");
ImGui::TableNextColumn();
String chStr=(settings.audioChans<1 || settings.audioChans>8)?"What?":nonProAudioOuts[settings.audioChans-1];
if (ImGui::BeginCombo("##AudioChans",chStr.c_str())) {
CHANS_SELECTABLE(1);
CHANS_SELECTABLE(2);
CHANS_SELECTABLE(4);
CHANS_SELECTABLE(6);
CHANS_SELECTABLE(8);
ImGui::EndCombo();
}
}
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::AlignTextToFramePadding();
ImGui::Text("Buffer size");
ImGui::TableNextColumn();
String bs=fmt::sprintf("%d (latency: ~%.1fms)",settings.audioBufSize,2000.0*(double)settings.audioBufSize/(double)MAX(1,settings.audioRate));
if (ImGui::BeginCombo("##BufferSize",bs.c_str())) {
BUFFER_SIZE_SELECTABLE(64);
BUFFER_SIZE_SELECTABLE(128);
BUFFER_SIZE_SELECTABLE(256);
BUFFER_SIZE_SELECTABLE(512);
BUFFER_SIZE_SELECTABLE(1024);
BUFFER_SIZE_SELECTABLE(2048);
ImGui::EndCombo();
}
ImGui::EndTable();
}
bool lowLatencyB=settings.lowLatency;
@ -2015,57 +2035,62 @@ void FurnaceGUI::drawSettings() {
// SUBSECTION TEXT
CONFIG_SUBSECTION("Text");
ImGui::AlignTextToFramePadding();
ImGui::Text("Main font");
ImGui::SameLine();
ImGui::Combo("##MainFont",&settings.mainFont,mainFonts,7);
ImGui::Indent();
if (settings.mainFont==6) {
ImGui::InputText("##MainFontPath",&settings.mainFontPath);
ImGui::SameLine();
if (ImGui::Button(ICON_FA_FOLDER "##MainFontLoad")) {
openFileDialog(GUI_FILE_LOAD_MAIN_FONT);
if (ImGui::BeginTable("##Text",2)) {
ImGui::TableSetupColumn("##Label",ImGuiTableColumnFlags_WidthFixed);
ImGui::TableSetupColumn("##Combos",ImGuiTableColumnFlags_WidthStretch);
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::AlignTextToFramePadding();
ImGui::Text("Main font");
ImGui::TableNextColumn();
ImGui::Combo("##MainFont",&settings.mainFont,mainFonts,7);
if (settings.mainFont==6) {
ImGui::InputText("##MainFontPath",&settings.mainFontPath);
ImGui::SameLine();
if (ImGui::Button(ICON_FA_FOLDER "##MainFontLoad")) {
openFileDialog(GUI_FILE_LOAD_MAIN_FONT);
}
}
}
if (ImGui::InputInt("Size##MainFontSize",&settings.mainFontSize)) {
if (settings.mainFontSize<3) settings.mainFontSize=3;
if (settings.mainFontSize>96) settings.mainFontSize=96;
}
ImGui::Unindent();
ImGui::AlignTextToFramePadding();
ImGui::Text("Header font");
ImGui::SameLine();
ImGui::Combo("##HeadFont",&settings.headFont,headFonts,7);
ImGui::Indent();
if (settings.headFont==6) {
ImGui::InputText("##HeadFontPath",&settings.headFontPath);
ImGui::SameLine();
if (ImGui::Button(ICON_FA_FOLDER "##HeadFontLoad")) {
openFileDialog(GUI_FILE_LOAD_HEAD_FONT);
if (ImGui::InputInt("Size##MainFontSize",&settings.mainFontSize)) {
if (settings.mainFontSize<3) settings.mainFontSize=3;
if (settings.mainFontSize>96) settings.mainFontSize=96;
}
}
if (ImGui::InputInt("Size##HeadFontSize",&settings.headFontSize)) {
if (settings.headFontSize<3) settings.headFontSize=3;
if (settings.headFontSize>96) settings.headFontSize=96;
}
ImGui::Unindent();
ImGui::AlignTextToFramePadding();
ImGui::Text("Pattern font");
ImGui::SameLine();
ImGui::Combo("##PatFont",&settings.patFont,patFonts,7);
ImGui::Indent();
if (settings.patFont==6) {
ImGui::InputText("##PatFontPath",&settings.patFontPath);
ImGui::SameLine();
if (ImGui::Button(ICON_FA_FOLDER "##PatFontLoad")) {
openFileDialog(GUI_FILE_LOAD_PAT_FONT);
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::AlignTextToFramePadding();
ImGui::Text("Header font");
ImGui::TableNextColumn();
ImGui::Combo("##HeadFont",&settings.headFont,headFonts,7);
if (settings.headFont==6) {
ImGui::InputText("##HeadFontPath",&settings.headFontPath);
ImGui::SameLine();
if (ImGui::Button(ICON_FA_FOLDER "##HeadFontLoad")) {
openFileDialog(GUI_FILE_LOAD_HEAD_FONT);
}
}
if (ImGui::InputInt("Size##HeadFontSize",&settings.headFontSize)) {
if (settings.headFontSize<3) settings.headFontSize=3;
if (settings.headFontSize>96) settings.headFontSize=96;
}
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::AlignTextToFramePadding();
ImGui::Text("Pattern font");
ImGui::TableNextColumn();
ImGui::Combo("##PatFont",&settings.patFont,patFonts,7);
if (settings.patFont==6) {
ImGui::InputText("##PatFontPath",&settings.patFontPath);
ImGui::SameLine();
if (ImGui::Button(ICON_FA_FOLDER "##PatFontLoad")) {
openFileDialog(GUI_FILE_LOAD_PAT_FONT);
}
}
if (ImGui::InputInt("Size##PatFontSize",&settings.patFontSize)) {
if (settings.patFontSize<3) settings.patFontSize=3;
if (settings.patFontSize>96) settings.patFontSize=96;
}
ImGui::EndTable();
}
if (ImGui::InputInt("Size##PatFontSize",&settings.patFontSize)) {
if (settings.patFontSize<3) settings.patFontSize=3;
if (settings.patFontSize>96) settings.patFontSize=96;
}
ImGui::Unindent();
bool loadJapaneseB=settings.loadJapanese;
if (ImGui::Checkbox("Display Japanese characters",&loadJapaneseB)) {

View File

@ -102,10 +102,12 @@ void FurnaceGUI::drawSysManager() {
}
ImGui::SameLine();
ImGui::BeginDisabled(e->song.systemLen<=1);
pushDestColor();
if (ImGui::Button(ICON_FA_TIMES "##SysRemove")) {
sysToDelete=i;
showWarning("Are you sure you want to remove this chip?",GUI_WARN_SYSTEM_DEL);
}
popDestColor();
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Remove");
}