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))) {
|
if (ImGui::Selectable(name.c_str(),(i==-1)?(curIns<0 || curIns>=e->song.insLen):(curIns==i))) {
|
||||||
curIns=i;
|
curIns=i;
|
||||||
}
|
}
|
||||||
|
if (wantScrollList && curIns==i) ImGui::SetScrollHereY();
|
||||||
if (settings.insFocusesPattern && patternOpen && ImGui::IsItemActivated()) {
|
if (settings.insFocusesPattern && patternOpen && ImGui::IsItemActivated()) {
|
||||||
nextWindow=GUI_WINDOW_PATTERN;
|
nextWindow=GUI_WINDOW_PATTERN;
|
||||||
curIns=i;
|
curIns=i;
|
||||||
|
@ -399,6 +400,7 @@ void FurnaceGUI::actualWaveList() {
|
||||||
if (ImGui::Selectable(fmt::sprintf("%d##_WAVE%d\n",i,i).c_str(),curWave==i)) {
|
if (ImGui::Selectable(fmt::sprintf("%d##_WAVE%d\n",i,i).c_str(),curWave==i)) {
|
||||||
curWave=i;
|
curWave=i;
|
||||||
}
|
}
|
||||||
|
if (wantScrollList && curWave==i) ImGui::SetScrollHereY();
|
||||||
if (ImGui::IsItemHovered()) {
|
if (ImGui::IsItemHovered()) {
|
||||||
if (ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) {
|
if (ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) {
|
||||||
waveEditOpen=true;
|
waveEditOpen=true;
|
||||||
|
@ -419,6 +421,7 @@ void FurnaceGUI::actualSampleList() {
|
||||||
samplePos=0;
|
samplePos=0;
|
||||||
updateSampleTex=true;
|
updateSampleTex=true;
|
||||||
}
|
}
|
||||||
|
if (wantScrollList && curSample==i) ImGui::SetScrollHereY();
|
||||||
if (ImGui::IsItemHovered()) {
|
if (ImGui::IsItemHovered()) {
|
||||||
ImGui::SetTooltip("Bank %d: %s",i/12,sampleNote[i%12]);
|
ImGui::SetTooltip("Bank %d: %s",i/12,sampleNote[i%12]);
|
||||||
if (ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) {
|
if (ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) {
|
||||||
|
|
|
@ -116,10 +116,16 @@ void FurnaceGUI::doAction(int what) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_INS_UP:
|
case GUI_ACTION_INS_UP:
|
||||||
if (--curIns<-1) curIns=-1;
|
if (--curIns<-1) {
|
||||||
|
curIns=-1;
|
||||||
|
}
|
||||||
|
wantScrollList=true;
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_INS_DOWN:
|
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;
|
break;
|
||||||
case GUI_ACTION_STEP_UP:
|
case GUI_ACTION_STEP_UP:
|
||||||
if (++editStep>64) editStep=64;
|
if (++editStep>64) editStep=64;
|
||||||
|
@ -528,6 +534,7 @@ void FurnaceGUI::doAction(int what) {
|
||||||
if (curIns==-1) {
|
if (curIns==-1) {
|
||||||
showError("too many instruments!");
|
showError("too many instruments!");
|
||||||
} else {
|
} else {
|
||||||
|
wantScrollList=true;
|
||||||
MARK_MODIFIED;
|
MARK_MODIFIED;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -539,6 +546,7 @@ void FurnaceGUI::doAction(int what) {
|
||||||
showError("too many instruments!");
|
showError("too many instruments!");
|
||||||
} else {
|
} else {
|
||||||
(*e->song.ins[curIns])=(*e->song.ins[prevIns]);
|
(*e->song.ins[curIns])=(*e->song.ins[prevIns]);
|
||||||
|
wantScrollList=true;
|
||||||
MARK_MODIFIED;
|
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);
|
if (curIns>=0 && curIns<(int)e->song.ins.size()) openFileDialog(GUI_FILE_INS_SAVE);
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_INS_LIST_MOVE_UP:
|
case GUI_ACTION_INS_LIST_MOVE_UP:
|
||||||
if (e->moveInsUp(curIns)) curIns--;
|
if (e->moveInsUp(curIns)) {
|
||||||
|
curIns--;
|
||||||
|
wantScrollList=true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_INS_LIST_MOVE_DOWN:
|
case GUI_ACTION_INS_LIST_MOVE_DOWN:
|
||||||
if (e->moveInsDown(curIns)) curIns++;
|
if (e->moveInsDown(curIns)) {
|
||||||
|
curIns++;
|
||||||
|
wantScrollList=true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_INS_LIST_DELETE:
|
case GUI_ACTION_INS_LIST_DELETE:
|
||||||
if (curIns>=0 && curIns<(int)e->song.ins.size()) {
|
if (curIns>=0 && curIns<(int)e->song.ins.size()) {
|
||||||
e->delInstrument(curIns);
|
e->delInstrument(curIns);
|
||||||
|
wantScrollList=true;
|
||||||
MARK_MODIFIED;
|
MARK_MODIFIED;
|
||||||
if (curIns>=(int)e->song.ins.size()) {
|
if (curIns>=(int)e->song.ins.size()) {
|
||||||
curIns--;
|
curIns--;
|
||||||
|
@ -572,9 +587,11 @@ void FurnaceGUI::doAction(int what) {
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_INS_LIST_UP:
|
case GUI_ACTION_INS_LIST_UP:
|
||||||
if (--curIns<0) curIns=0;
|
if (--curIns<0) curIns=0;
|
||||||
|
wantScrollList=true;
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_INS_LIST_DOWN:
|
case GUI_ACTION_INS_LIST_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;
|
break;
|
||||||
|
|
||||||
case GUI_ACTION_WAVE_LIST_ADD:
|
case GUI_ACTION_WAVE_LIST_ADD:
|
||||||
|
@ -582,6 +599,7 @@ void FurnaceGUI::doAction(int what) {
|
||||||
if (curWave==-1) {
|
if (curWave==-1) {
|
||||||
showError("too many wavetables!");
|
showError("too many wavetables!");
|
||||||
} else {
|
} else {
|
||||||
|
wantScrollList=true;
|
||||||
MARK_MODIFIED;
|
MARK_MODIFIED;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -593,6 +611,7 @@ void FurnaceGUI::doAction(int what) {
|
||||||
showError("too many wavetables!");
|
showError("too many wavetables!");
|
||||||
} else {
|
} else {
|
||||||
(*e->song.wave[curWave])=(*e->song.wave[prevWave]);
|
(*e->song.wave[curWave])=(*e->song.wave[prevWave]);
|
||||||
|
wantScrollList=true;
|
||||||
MARK_MODIFIED;
|
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);
|
if (curWave>=0 && curWave<(int)e->song.wave.size()) openFileDialog(GUI_FILE_WAVE_SAVE);
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_WAVE_LIST_MOVE_UP:
|
case GUI_ACTION_WAVE_LIST_MOVE_UP:
|
||||||
if (e->moveWaveUp(curWave)) curWave--;
|
if (e->moveWaveUp(curWave)) {
|
||||||
|
curWave--;
|
||||||
|
wantScrollList=true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_WAVE_LIST_MOVE_DOWN:
|
case GUI_ACTION_WAVE_LIST_MOVE_DOWN:
|
||||||
if (e->moveWaveDown(curWave)) curWave++;
|
if (e->moveWaveDown(curWave)) {
|
||||||
|
curWave++;
|
||||||
|
wantScrollList=true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_WAVE_LIST_DELETE:
|
case GUI_ACTION_WAVE_LIST_DELETE:
|
||||||
if (curWave>=0 && curWave<(int)e->song.wave.size()) {
|
if (curWave>=0 && curWave<(int)e->song.wave.size()) {
|
||||||
e->delWave(curWave);
|
e->delWave(curWave);
|
||||||
MARK_MODIFIED;
|
MARK_MODIFIED;
|
||||||
|
wantScrollList=true;
|
||||||
if (curWave>=(int)e->song.wave.size()) {
|
if (curWave>=(int)e->song.wave.size()) {
|
||||||
curWave--;
|
curWave--;
|
||||||
}
|
}
|
||||||
|
@ -623,9 +649,11 @@ void FurnaceGUI::doAction(int what) {
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_WAVE_LIST_UP:
|
case GUI_ACTION_WAVE_LIST_UP:
|
||||||
if (--curWave<0) curWave=0;
|
if (--curWave<0) curWave=0;
|
||||||
|
wantScrollList=true;
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_WAVE_LIST_DOWN:
|
case GUI_ACTION_WAVE_LIST_DOWN:
|
||||||
if (++curWave>=(int)e->song.wave.size()) curWave=((int)e->song.wave.size())-1;
|
if (++curWave>=(int)e->song.wave.size()) curWave=((int)e->song.wave.size())-1;
|
||||||
|
wantScrollList=true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GUI_ACTION_SAMPLE_LIST_ADD:
|
case GUI_ACTION_SAMPLE_LIST_ADD:
|
||||||
|
@ -633,6 +661,7 @@ void FurnaceGUI::doAction(int what) {
|
||||||
if (curSample==-1) {
|
if (curSample==-1) {
|
||||||
showError("too many samples!");
|
showError("too many samples!");
|
||||||
} else {
|
} else {
|
||||||
|
wantScrollList=true;
|
||||||
MARK_MODIFIED;
|
MARK_MODIFIED;
|
||||||
}
|
}
|
||||||
updateSampleTex=true;
|
updateSampleTex=true;
|
||||||
|
@ -660,6 +689,7 @@ void FurnaceGUI::doAction(int what) {
|
||||||
}
|
}
|
||||||
e->renderSamples();
|
e->renderSamples();
|
||||||
});
|
});
|
||||||
|
wantScrollList=true;
|
||||||
MARK_MODIFIED;
|
MARK_MODIFIED;
|
||||||
}
|
}
|
||||||
updateSampleTex=true;
|
updateSampleTex=true;
|
||||||
|
@ -674,17 +704,20 @@ void FurnaceGUI::doAction(int what) {
|
||||||
case GUI_ACTION_SAMPLE_LIST_MOVE_UP:
|
case GUI_ACTION_SAMPLE_LIST_MOVE_UP:
|
||||||
if (e->moveSampleUp(curSample)) {
|
if (e->moveSampleUp(curSample)) {
|
||||||
curSample--;
|
curSample--;
|
||||||
|
wantScrollList=true;
|
||||||
updateSampleTex=true;
|
updateSampleTex=true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_SAMPLE_LIST_MOVE_DOWN:
|
case GUI_ACTION_SAMPLE_LIST_MOVE_DOWN:
|
||||||
if (e->moveSampleDown(curSample)) {
|
if (e->moveSampleDown(curSample)) {
|
||||||
curSample++;
|
curSample++;
|
||||||
|
wantScrollList=true;
|
||||||
updateSampleTex=true;
|
updateSampleTex=true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_SAMPLE_LIST_DELETE:
|
case GUI_ACTION_SAMPLE_LIST_DELETE:
|
||||||
e->delSample(curSample);
|
e->delSample(curSample);
|
||||||
|
wantScrollList=true;
|
||||||
MARK_MODIFIED;
|
MARK_MODIFIED;
|
||||||
if (curSample>=(int)e->song.sample.size()) {
|
if (curSample>=(int)e->song.sample.size()) {
|
||||||
curSample--;
|
curSample--;
|
||||||
|
@ -696,10 +729,12 @@ void FurnaceGUI::doAction(int what) {
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_SAMPLE_LIST_UP:
|
case GUI_ACTION_SAMPLE_LIST_UP:
|
||||||
if (--curSample<0) curSample=0;
|
if (--curSample<0) curSample=0;
|
||||||
|
wantScrollList=true;
|
||||||
updateSampleTex=true;
|
updateSampleTex=true;
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_SAMPLE_LIST_DOWN:
|
case GUI_ACTION_SAMPLE_LIST_DOWN:
|
||||||
if (++curSample>=(int)e->song.sample.size()) curSample=((int)e->song.sample.size())-1;
|
if (++curSample>=(int)e->song.sample.size()) curSample=((int)e->song.sample.size())-1;
|
||||||
|
wantScrollList=true;
|
||||||
updateSampleTex=true;
|
updateSampleTex=true;
|
||||||
break;
|
break;
|
||||||
case GUI_ACTION_SAMPLE_LIST_PREVIEW:
|
case GUI_ACTION_SAMPLE_LIST_PREVIEW:
|
||||||
|
|
|
@ -3807,6 +3807,7 @@ bool FurnaceGUI::loop() {
|
||||||
|
|
||||||
wheelX=0;
|
wheelX=0;
|
||||||
wheelY=0;
|
wheelY=0;
|
||||||
|
wantScrollList=false;
|
||||||
|
|
||||||
pressedPoints.clear();
|
pressedPoints.clear();
|
||||||
releasedPoints.clear();
|
releasedPoints.clear();
|
||||||
|
@ -4117,6 +4118,7 @@ FurnaceGUI::FurnaceGUI():
|
||||||
displayNew(false),
|
displayNew(false),
|
||||||
fullScreen(false),
|
fullScreen(false),
|
||||||
preserveChanPos(false),
|
preserveChanPos(false),
|
||||||
|
wantScrollList(false),
|
||||||
vgmExportVersion(0x171),
|
vgmExportVersion(0x171),
|
||||||
drawHalt(10),
|
drawHalt(10),
|
||||||
macroPointSize(16),
|
macroPointSize(16),
|
||||||
|
|
|
@ -810,7 +810,7 @@ class FurnaceGUI {
|
||||||
String mmlStringW;
|
String mmlStringW;
|
||||||
|
|
||||||
bool quit, warnQuit, willCommit, edit, modified, displayError, displayExporting, vgmExportLoop, wantCaptureKeyboard, oldWantCaptureKeyboard, displayMacroMenu;
|
bool quit, warnQuit, willCommit, edit, modified, displayError, displayExporting, vgmExportLoop, wantCaptureKeyboard, oldWantCaptureKeyboard, displayMacroMenu;
|
||||||
bool displayNew, fullScreen, preserveChanPos;
|
bool displayNew, fullScreen, preserveChanPos, wantScrollList;
|
||||||
bool willExport[32];
|
bool willExport[32];
|
||||||
int vgmExportVersion;
|
int vgmExportVersion;
|
||||||
int drawHalt;
|
int drawHalt;
|
||||||
|
|
Loading…
Reference in a new issue