GUI: improve channel swapping

This commit is contained in:
tildearrow 2022-05-27 01:04:12 -05:00
parent 1540705b75
commit e8af633f10
3 changed files with 25 additions and 11 deletions

View File

@ -31,11 +31,11 @@ void FurnaceGUI::drawChannels() {
if (!channelsOpen) return; if (!channelsOpen) return;
if (ImGui::Begin("Channels",&channelsOpen,globalWinFlags)) { if (ImGui::Begin("Channels",&channelsOpen,globalWinFlags)) {
if (ImGui::BeginTable("ChannelList",4)) { if (ImGui::BeginTable("ChannelList",4)) {
ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthStretch,0.0); ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed,0.0);
ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthFixed,0.0); ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthFixed,0.0);
ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch,0.0); ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch,0.0);
ImGui::TableSetupColumn("c3",ImGuiTableColumnFlags_WidthFixed,48.0f*dpiScale); ImGui::TableSetupColumn("c3",ImGuiTableColumnFlags_WidthFixed,48.0f*dpiScale);
ImGui::TableNextRow(); ImGui::TableNextRow(ImGuiTableRowFlags_Headers);
ImGui::TableNextColumn(); ImGui::TableNextColumn();
ImGui::Text("System"); ImGui::Text("System");
ImGui::TableNextColumn(); ImGui::TableNextColumn();
@ -50,17 +50,28 @@ void FurnaceGUI::drawChannels() {
ImGui::TableNextColumn(); ImGui::TableNextColumn();
ImGui::Checkbox("##Visible",&e->curSubSong->chanShow[i]); ImGui::Checkbox("##Visible",&e->curSubSong->chanShow[i]);
ImGui::SameLine(); ImGui::SameLine();
ImGui::BeginDisabled(i==0); if (ImGui::Button(ICON_FA_ARROWS)) {
if (ImGui::Button(ICON_FA_CHEVRON_UP)) {
e->swapChannelsP(i,i-1);
} }
ImGui::EndDisabled(); if (ImGui::BeginDragDropSource()) {
ImGui::SameLine(); chanToMove=i;
ImGui::BeginDisabled(i==(e->getTotalChannelCount()-1)); ImGui::SetDragDropPayload("FUR_CHAN",NULL,0,ImGuiCond_Once);
if (ImGui::Button(ICON_FA_CHEVRON_DOWN)) { ImGui::Text("(release to swap channels)");
e->swapChannelsP(i,i+1); ImGui::EndDragDropSource();
} else if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("(drag to swap channels)");
}
if (ImGui::BeginDragDropTarget()) {
const ImGuiPayload* dragItem=ImGui::AcceptDragDropPayload("FUR_CHAN");
if (dragItem!=NULL) {
if (dragItem->IsDataType("FUR_CHAN")) {
if (chanToMove!=i && chanToMove>=0) {
e->swapChannelsP(chanToMove,i);
}
chanToMove=-1;
}
}
ImGui::EndDragDropTarget();
} }
ImGui::EndDisabled();
ImGui::TableNextColumn(); ImGui::TableNextColumn();
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
ImGui::InputTextWithHint("##ChanName",e->getChannelName(i),&e->curSubSong->chanName[i]); ImGui::InputTextWithHint("##ChanName",e->getChannelName(i),&e->curSubSong->chanName[i]);

View File

@ -4305,6 +4305,7 @@ FurnaceGUI::FurnaceGUI():
eventTimeBegin(0), eventTimeBegin(0),
eventTimeEnd(0), eventTimeEnd(0),
eventTimeDelta(0), eventTimeDelta(0),
chanToMove(-1),
transposeAmount(0), transposeAmount(0),
randomizeMin(0), randomizeMin(0),
randomizeMax(255), randomizeMax(255),

View File

@ -1193,6 +1193,8 @@ class FurnaceGUI {
int renderTimeBegin, renderTimeEnd, renderTimeDelta; int renderTimeBegin, renderTimeEnd, renderTimeDelta;
int eventTimeBegin, eventTimeEnd, eventTimeDelta; int eventTimeBegin, eventTimeEnd, eventTimeDelta;
int chanToMove;
ImVec2 patWindowPos, patWindowSize; ImVec2 patWindowPos, patWindowSize;
// pattern view specific // pattern view specific