GUI: more piano/input pad work
This commit is contained in:
parent
68b5522070
commit
f1ca53561f
3
TODO.md
3
TODO.md
|
@ -1,8 +1,5 @@
|
||||||
# to-do for 0.6pre1
|
# to-do for 0.6pre1
|
||||||
|
|
||||||
- piano/input pad
|
|
||||||
- input pad
|
|
||||||
- settings
|
|
||||||
- RF5C68 system
|
- RF5C68 system
|
||||||
- ZX beeper system overlay percussion
|
- ZX beeper system overlay percussion
|
||||||
- ADPCM chips
|
- ADPCM chips
|
||||||
|
|
|
@ -4297,6 +4297,7 @@ FurnaceGUI::FurnaceGUI():
|
||||||
pianoOctavesEdit(2),
|
pianoOctavesEdit(2),
|
||||||
pianoOptions(true),
|
pianoOptions(true),
|
||||||
pianoSharePosition(false),
|
pianoSharePosition(false),
|
||||||
|
pianoOptionsSet(false),
|
||||||
pianoOffset(6),
|
pianoOffset(6),
|
||||||
pianoOffsetEdit(9),
|
pianoOffsetEdit(9),
|
||||||
pianoView(2),
|
pianoView(2),
|
||||||
|
|
|
@ -1223,7 +1223,7 @@ class FurnaceGUI {
|
||||||
|
|
||||||
// piano
|
// piano
|
||||||
int pianoOctaves, pianoOctavesEdit;
|
int pianoOctaves, pianoOctavesEdit;
|
||||||
bool pianoOptions, pianoSharePosition;
|
bool pianoOptions, pianoSharePosition, pianoOptionsSet;
|
||||||
float pianoKeyHit[180];
|
float pianoKeyHit[180];
|
||||||
bool pianoKeyPressed[180];
|
bool pianoKeyPressed[180];
|
||||||
int pianoOffset, pianoOffsetEdit;
|
int pianoOffset, pianoOffsetEdit;
|
||||||
|
|
|
@ -52,22 +52,34 @@ void FurnaceGUI::drawPiano() {
|
||||||
nextWindow=GUI_WINDOW_NOTHING;
|
nextWindow=GUI_WINDOW_NOTHING;
|
||||||
}
|
}
|
||||||
if (!pianoOpen) return;
|
if (!pianoOpen) return;
|
||||||
if (ImGui::Begin("Piano",&pianoOpen,(pianoOptions)?0:ImGuiWindowFlags_NoTitleBar)) {
|
if (ImGui::Begin("Piano",&pianoOpen,((pianoOptions)?0:ImGuiWindowFlags_NoTitleBar)|ImGuiWindowFlags_NoScrollbar|ImGuiWindowFlags_NoScrollWithMouse)) {
|
||||||
bool oldPianoKeyPressed[180];
|
bool oldPianoKeyPressed[180];
|
||||||
memcpy(oldPianoKeyPressed,pianoKeyPressed,180*sizeof(bool));
|
memcpy(oldPianoKeyPressed,pianoKeyPressed,180*sizeof(bool));
|
||||||
memset(pianoKeyPressed,0,180*sizeof(bool));
|
memset(pianoKeyPressed,0,180*sizeof(bool));
|
||||||
if (ImGui::BeginTable("PianoLayout",pianoOptions?2:1,ImGuiTableFlags_BordersInnerV)) {
|
if (ImGui::BeginTable("PianoLayout",(pianoOptions?2:1)+((pianoInputPadMode==1 && cursor.xFine>0)?1:0),ImGuiTableFlags_BordersInnerV)) {
|
||||||
int& off=(e->isPlaying() || pianoSharePosition)?pianoOffset:pianoOffsetEdit;
|
int& off=(e->isPlaying() || pianoSharePosition)?pianoOffset:pianoOffsetEdit;
|
||||||
int& oct=(e->isPlaying() || pianoSharePosition)?pianoOctaves:pianoOctavesEdit;
|
int& oct=(e->isPlaying() || pianoSharePosition)?pianoOctaves:pianoOctavesEdit;
|
||||||
bool view=(pianoView==2)?(!e->isPlaying()):pianoView;
|
bool view=(pianoView==2)?(!e->isPlaying()):pianoView;
|
||||||
if (pianoOptions) {
|
if (pianoOptions) {
|
||||||
ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed);
|
ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed);
|
||||||
}
|
}
|
||||||
ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch);
|
if (pianoInputPadMode==1 && cursor.xFine>0) {
|
||||||
|
ImGui::TableSetupColumn("c0s",ImGuiTableColumnFlags_WidthStretch,2.0f);
|
||||||
|
}
|
||||||
|
ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,1.0f);
|
||||||
|
|
||||||
ImGui::TableNextRow();
|
ImGui::TableNextRow();
|
||||||
if (pianoOptions) {
|
if (pianoOptions) {
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
|
if (pianoOptionsSet) {
|
||||||
|
if (ImGui::Button("OFF##PianoNOff")) {
|
||||||
|
if (edit) noteInput(0,100);
|
||||||
|
}
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::Button("===##PianoNRel")) {
|
||||||
|
if (edit) noteInput(0,101);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
if (ImGui::Button(ICON_FA_ARROW_LEFT "##PianoLeft")) {
|
if (ImGui::Button(ICON_FA_ARROW_LEFT "##PianoLeft")) {
|
||||||
off--;
|
off--;
|
||||||
if (off<0) off=0;
|
if (off<0) off=0;
|
||||||
|
@ -77,6 +89,7 @@ void FurnaceGUI::drawPiano() {
|
||||||
off++;
|
off++;
|
||||||
if ((off+oct)>14) off=15-oct;
|
if ((off+oct)>14) off=15-oct;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::Button(ICON_FA_ELLIPSIS_V "##PianoOptions");
|
ImGui::Button(ICON_FA_ELLIPSIS_V "##PianoOptions");
|
||||||
if (ImGui::BeginPopupContextItem("PianoOptions",ImGuiPopupFlags_MouseButtonLeft)) {
|
if (ImGui::BeginPopupContextItem("PianoOptions",ImGuiPopupFlags_MouseButtonLeft)) {
|
||||||
|
@ -107,6 +120,15 @@ void FurnaceGUI::drawPiano() {
|
||||||
ImGui::EndPopup();
|
ImGui::EndPopup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pianoOptionsSet) {
|
||||||
|
if (ImGui::Button("REL##PianoNMRel")) {
|
||||||
|
if (edit) noteInput(0,102);
|
||||||
|
}
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::Button(ICON_FA_TIMES "##PianoDelP")) {
|
||||||
|
doDelete();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
if (ImGui::Button(ICON_FA_MINUS "##PianoOctaveDown")) {
|
if (ImGui::Button(ICON_FA_MINUS "##PianoOctaveDown")) {
|
||||||
oct--;
|
oct--;
|
||||||
if (oct<1) oct=1;
|
if (oct<1) oct=1;
|
||||||
|
@ -118,8 +140,61 @@ void FurnaceGUI::drawPiano() {
|
||||||
if ((off+oct)>14) off=15-oct;
|
if ((off+oct)>14) off=15-oct;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::Button(ICON_FA_ELLIPSIS_H "##PianoSel")) {
|
||||||
|
pianoOptionsSet=!pianoOptionsSet;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
|
if (pianoInputPadMode==1 && cursor.xFine>0) {
|
||||||
|
ImVec2 buttonSize=ImGui::GetContentRegionAvail();
|
||||||
|
if (ImGui::BeginTable("InputPadP",8,ImGuiTableFlags_SizingFixedSame)) {
|
||||||
|
ImGui::TableNextRow();
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
buttonSize.x/=8.0f;
|
||||||
|
buttonSize.x-=ImGui::GetStyle().CellPadding.x*2.0f;
|
||||||
|
buttonSize.y/=2.0f;
|
||||||
|
buttonSize.y-=ImGui::GetStyle().CellPadding.y*2.0f;
|
||||||
|
|
||||||
|
VALUE_DIGIT(0,"0");
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
VALUE_DIGIT(1,"1");
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
VALUE_DIGIT(2,"2");
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
VALUE_DIGIT(3,"3");
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
VALUE_DIGIT(4,"4");
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
VALUE_DIGIT(5,"5");
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
VALUE_DIGIT(6,"6");
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
VALUE_DIGIT(7,"7");
|
||||||
|
|
||||||
|
ImGui::TableNextRow();
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
VALUE_DIGIT(8,"8");
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
VALUE_DIGIT(9,"9");
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
VALUE_DIGIT(10,"A");
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
VALUE_DIGIT(11,"B");
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
VALUE_DIGIT(12,"C");
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
VALUE_DIGIT(13,"D");
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
VALUE_DIGIT(14,"E");
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
VALUE_DIGIT(15,"F");
|
||||||
|
|
||||||
|
ImGui::EndTable();
|
||||||
|
}
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
}
|
||||||
ImGuiWindow* window=ImGui::GetCurrentWindow();
|
ImGuiWindow* window=ImGui::GetCurrentWindow();
|
||||||
ImVec2 size=ImGui::GetContentRegionAvail();
|
ImVec2 size=ImGui::GetContentRegionAvail();
|
||||||
ImDrawList* dl=ImGui::GetWindowDrawList();
|
ImDrawList* dl=ImGui::GetWindowDrawList();
|
||||||
|
@ -316,12 +391,13 @@ void FurnaceGUI::drawPiano() {
|
||||||
// draw input pad if necessary
|
// draw input pad if necessary
|
||||||
if ((pianoInputPadMode==2 && cursor.xFine>0) || pianoInputPadMode==3) {
|
if ((pianoInputPadMode==2 && cursor.xFine>0) || pianoInputPadMode==3) {
|
||||||
if (ImGui::Begin("Input Pad",NULL,ImGuiWindowFlags_NoTitleBar)) {
|
if (ImGui::Begin("Input Pad",NULL,ImGuiWindowFlags_NoTitleBar)) {
|
||||||
|
ImGui::BeginDisabled(cursor.xFine==0);
|
||||||
if (ImGui::BeginTable("InputPad",3,ImGuiTableFlags_Borders)) {
|
if (ImGui::BeginTable("InputPad",3,ImGuiTableFlags_Borders)) {
|
||||||
ImGui::TableNextRow();
|
ImGui::TableNextRow();
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
ImVec2 buttonSize=ImGui::GetContentRegionAvail();
|
ImVec2 buttonSize=ImGui::GetContentRegionAvail();
|
||||||
buttonSize.y/=6.0f;
|
buttonSize.y/=6.0f;
|
||||||
buttonSize.y-=ImGui::GetStyle().ItemSpacing.y;
|
buttonSize.y-=ImGui::GetStyle().CellPadding.y*2.0f;
|
||||||
|
|
||||||
VALUE_DIGIT(10,"A");
|
VALUE_DIGIT(10,"A");
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
|
@ -359,12 +435,16 @@ void FurnaceGUI::drawPiano() {
|
||||||
VALUE_DIGIT(9,"9");
|
VALUE_DIGIT(9,"9");
|
||||||
ImGui::TableNextRow();
|
ImGui::TableNextRow();
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
|
if (ImGui::Button(ICON_FA_TIMES "##PianoDel",buttonSize)) {
|
||||||
|
doDelete();
|
||||||
|
}
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
VALUE_DIGIT(0,"0");
|
VALUE_DIGIT(0,"0");
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
|
|
||||||
ImGui::EndTable();
|
ImGui::EndTable();
|
||||||
}
|
}
|
||||||
|
ImGui::EndDisabled();
|
||||||
}
|
}
|
||||||
if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_PIANO;
|
if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_PIANO;
|
||||||
ImGui::End();
|
ImGui::End();
|
||||||
|
|
Loading…
Reference in a new issue