diff --git a/src/gui/channels.cpp b/src/gui/channels.cpp index 65bb1a8f..80cec7a6 100644 --- a/src/gui/channels.cpp +++ b/src/gui/channels.cpp @@ -31,11 +31,11 @@ void FurnaceGUI::drawChannels() { if (!channelsOpen) return; if (ImGui::Begin("Channels",&channelsOpen,globalWinFlags)) { 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("c2",ImGuiTableColumnFlags_WidthStretch,0.0); ImGui::TableSetupColumn("c3",ImGuiTableColumnFlags_WidthFixed,48.0f*dpiScale); - ImGui::TableNextRow(); + ImGui::TableNextRow(ImGuiTableRowFlags_Headers); ImGui::TableNextColumn(); ImGui::Text("System"); ImGui::TableNextColumn(); @@ -50,17 +50,28 @@ void FurnaceGUI::drawChannels() { ImGui::TableNextColumn(); ImGui::Checkbox("##Visible",&e->curSubSong->chanShow[i]); ImGui::SameLine(); - ImGui::BeginDisabled(i==0); - if (ImGui::Button(ICON_FA_CHEVRON_UP)) { - e->swapChannelsP(i,i-1); + if (ImGui::Button(ICON_FA_ARROWS)) { } - ImGui::EndDisabled(); - ImGui::SameLine(); - ImGui::BeginDisabled(i==(e->getTotalChannelCount()-1)); - if (ImGui::Button(ICON_FA_CHEVRON_DOWN)) { - e->swapChannelsP(i,i+1); + if (ImGui::BeginDragDropSource()) { + chanToMove=i; + ImGui::SetDragDropPayload("FUR_CHAN",NULL,0,ImGuiCond_Once); + ImGui::Text("(release to swap channels)"); + 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::SetNextItemWidth(ImGui::GetContentRegionAvail().x); ImGui::InputTextWithHint("##ChanName",e->getChannelName(i),&e->curSubSong->chanName[i]); diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 6790dc10..4c8a81e3 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -4305,6 +4305,7 @@ FurnaceGUI::FurnaceGUI(): eventTimeBegin(0), eventTimeEnd(0), eventTimeDelta(0), + chanToMove(-1), transposeAmount(0), randomizeMin(0), randomizeMax(255), diff --git a/src/gui/gui.h b/src/gui/gui.h index 90b4e283..93f4835f 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1193,6 +1193,8 @@ class FurnaceGUI { int renderTimeBegin, renderTimeEnd, renderTimeDelta; int eventTimeBegin, eventTimeEnd, eventTimeDelta; + int chanToMove; + ImVec2 patWindowPos, patWindowSize; // pattern view specific