GUI: scroll instrument/wave/sample list when

selecting item
This commit is contained in:
tildearrow 2022-05-19 13:06:26 -05:00
parent 2ada4ee393
commit 769a89852f
4 changed files with 47 additions and 7 deletions

View File

@ -245,6 +245,7 @@ void FurnaceGUI::drawInsList() {
if (ImGui::Selectable(name.c_str(),(i==-1)?(curIns<0 || curIns>=e->song.insLen):(curIns==i))) {
curIns=i;
}
if (wantScrollList && curIns==i) ImGui::SetScrollHereY();
if (settings.insFocusesPattern && patternOpen && ImGui::IsItemActivated()) {
nextWindow=GUI_WINDOW_PATTERN;
curIns=i;
@ -399,6 +400,7 @@ void FurnaceGUI::actualWaveList() {
if (ImGui::Selectable(fmt::sprintf("%d##_WAVE%d\n",i,i).c_str(),curWave==i)) {
curWave=i;
}
if (wantScrollList && curWave==i) ImGui::SetScrollHereY();
if (ImGui::IsItemHovered()) {
if (ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) {
waveEditOpen=true;
@ -419,6 +421,7 @@ void FurnaceGUI::actualSampleList() {
samplePos=0;
updateSampleTex=true;
}
if (wantScrollList && curSample==i) ImGui::SetScrollHereY();
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Bank %d: %s",i/12,sampleNote[i%12]);
if (ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) {

View File

@ -116,10 +116,16 @@ void FurnaceGUI::doAction(int what) {
}
break;
case GUI_ACTION_INS_UP:
if (--curIns<-1) curIns=-1;
if (--curIns<-1) {
curIns=-1;
}
wantScrollList=true;
break;
case GUI_ACTION_INS_DOWN:
if (++curIns>=(int)e->song.ins.size()) curIns=((int)e->song.ins.size())-1;
if (++curIns>=(int)e->song.ins.size()) {
curIns=((int)e->song.ins.size())-1;
}
wantScrollList=true;
break;
case GUI_ACTION_STEP_UP:
if (++editStep>64) editStep=64;
@ -528,6 +534,7 @@ void FurnaceGUI::doAction(int what) {
if (curIns==-1) {
showError("too many instruments!");
} else {
wantScrollList=true;
MARK_MODIFIED;
}
break;
@ -539,6 +546,7 @@ void FurnaceGUI::doAction(int what) {
showError("too many instruments!");
} else {
(*e->song.ins[curIns])=(*e->song.ins[prevIns]);
wantScrollList=true;
MARK_MODIFIED;
}
}
@ -553,14 +561,21 @@ void FurnaceGUI::doAction(int what) {
if (curIns>=0 && curIns<(int)e->song.ins.size()) openFileDialog(GUI_FILE_INS_SAVE);
break;
case GUI_ACTION_INS_LIST_MOVE_UP:
if (e->moveInsUp(curIns)) curIns--;
if (e->moveInsUp(curIns)) {
curIns--;
wantScrollList=true;
}
break;
case GUI_ACTION_INS_LIST_MOVE_DOWN:
if (e->moveInsDown(curIns)) curIns++;
if (e->moveInsDown(curIns)) {
curIns++;
wantScrollList=true;
}
break;
case GUI_ACTION_INS_LIST_DELETE:
if (curIns>=0 && curIns<(int)e->song.ins.size()) {
e->delInstrument(curIns);
wantScrollList=true;
MARK_MODIFIED;
if (curIns>=(int)e->song.ins.size()) {
curIns--;
@ -572,9 +587,11 @@ void FurnaceGUI::doAction(int what) {
break;
case GUI_ACTION_INS_LIST_UP:
if (--curIns<0) curIns=0;
wantScrollList=true;
break;
case GUI_ACTION_INS_LIST_DOWN:
if (++curIns>=(int)e->song.ins.size()) curIns=((int)e->song.ins.size())-1;
wantScrollList=true;
break;
case GUI_ACTION_WAVE_LIST_ADD:
@ -582,6 +599,7 @@ void FurnaceGUI::doAction(int what) {
if (curWave==-1) {
showError("too many wavetables!");
} else {
wantScrollList=true;
MARK_MODIFIED;
}
break;
@ -593,6 +611,7 @@ void FurnaceGUI::doAction(int what) {
showError("too many wavetables!");
} else {
(*e->song.wave[curWave])=(*e->song.wave[prevWave]);
wantScrollList=true;
MARK_MODIFIED;
}
}
@ -604,15 +623,22 @@ void FurnaceGUI::doAction(int what) {
if (curWave>=0 && curWave<(int)e->song.wave.size()) openFileDialog(GUI_FILE_WAVE_SAVE);
break;
case GUI_ACTION_WAVE_LIST_MOVE_UP:
if (e->moveWaveUp(curWave)) curWave--;
if (e->moveWaveUp(curWave)) {
curWave--;
wantScrollList=true;
}
break;
case GUI_ACTION_WAVE_LIST_MOVE_DOWN:
if (e->moveWaveDown(curWave)) curWave++;
if (e->moveWaveDown(curWave)) {
curWave++;
wantScrollList=true;
}
break;
case GUI_ACTION_WAVE_LIST_DELETE:
if (curWave>=0 && curWave<(int)e->song.wave.size()) {
e->delWave(curWave);
MARK_MODIFIED;
wantScrollList=true;
if (curWave>=(int)e->song.wave.size()) {
curWave--;
}
@ -623,9 +649,11 @@ void FurnaceGUI::doAction(int what) {
break;
case GUI_ACTION_WAVE_LIST_UP:
if (--curWave<0) curWave=0;
wantScrollList=true;
break;
case GUI_ACTION_WAVE_LIST_DOWN:
if (++curWave>=(int)e->song.wave.size()) curWave=((int)e->song.wave.size())-1;
wantScrollList=true;
break;
case GUI_ACTION_SAMPLE_LIST_ADD:
@ -633,6 +661,7 @@ void FurnaceGUI::doAction(int what) {
if (curSample==-1) {
showError("too many samples!");
} else {
wantScrollList=true;
MARK_MODIFIED;
}
updateSampleTex=true;
@ -660,6 +689,7 @@ void FurnaceGUI::doAction(int what) {
}
e->renderSamples();
});
wantScrollList=true;
MARK_MODIFIED;
}
updateSampleTex=true;
@ -674,17 +704,20 @@ void FurnaceGUI::doAction(int what) {
case GUI_ACTION_SAMPLE_LIST_MOVE_UP:
if (e->moveSampleUp(curSample)) {
curSample--;
wantScrollList=true;
updateSampleTex=true;
}
break;
case GUI_ACTION_SAMPLE_LIST_MOVE_DOWN:
if (e->moveSampleDown(curSample)) {
curSample++;
wantScrollList=true;
updateSampleTex=true;
}
break;
case GUI_ACTION_SAMPLE_LIST_DELETE:
e->delSample(curSample);
wantScrollList=true;
MARK_MODIFIED;
if (curSample>=(int)e->song.sample.size()) {
curSample--;
@ -696,10 +729,12 @@ void FurnaceGUI::doAction(int what) {
break;
case GUI_ACTION_SAMPLE_LIST_UP:
if (--curSample<0) curSample=0;
wantScrollList=true;
updateSampleTex=true;
break;
case GUI_ACTION_SAMPLE_LIST_DOWN:
if (++curSample>=(int)e->song.sample.size()) curSample=((int)e->song.sample.size())-1;
wantScrollList=true;
updateSampleTex=true;
break;
case GUI_ACTION_SAMPLE_LIST_PREVIEW:

View File

@ -3807,6 +3807,7 @@ bool FurnaceGUI::loop() {
wheelX=0;
wheelY=0;
wantScrollList=false;
pressedPoints.clear();
releasedPoints.clear();
@ -4117,6 +4118,7 @@ FurnaceGUI::FurnaceGUI():
displayNew(false),
fullScreen(false),
preserveChanPos(false),
wantScrollList(false),
vgmExportVersion(0x171),
drawHalt(10),
macroPointSize(16),

View File

@ -810,7 +810,7 @@ class FurnaceGUI {
String mmlStringW;
bool quit, warnQuit, willCommit, edit, modified, displayError, displayExporting, vgmExportLoop, wantCaptureKeyboard, oldWantCaptureKeyboard, displayMacroMenu;
bool displayNew, fullScreen, preserveChanPos;
bool displayNew, fullScreen, preserveChanPos, wantScrollList;
bool willExport[32];
int vgmExportVersion;
int drawHalt;