GUI: scroll instrument/wave/sample list when
selecting item
This commit is contained in:
parent
2ada4ee393
commit
769a89852f
|
@ -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)) {
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue