2022-03-21 17:34:43 -05:00
/**
* Furnace Tracker - multi - system chiptune tracker
2025-01-28 18:49:19 -05:00
* Copyright ( C ) 2021 - 2025 tildearrow and contributors
2022-03-21 17:34:43 -05:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License along
* with this program ; if not , write to the Free Software Foundation , Inc . ,
* 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA .
*/
# include "gui.h"
# include "misc/cpp/imgui_stdlib.h"
2022-04-28 03:36:15 -05:00
# include "IconsFontAwesome4.h"
# include <imgui.h>
2022-03-21 17:34:43 -05:00
void FurnaceGUI : : drawChannels ( ) {
if ( nextWindow = = GUI_WINDOW_CHANNELS ) {
channelsOpen = true ;
ImGui : : SetNextWindowFocus ( ) ;
nextWindow = GUI_WINDOW_NOTHING ;
}
if ( ! channelsOpen ) return ;
2022-12-01 18:41:04 -05:00
if ( mobileUI ) {
patWindowPos = ( portrait ? ImVec2 ( 0.0f , ( mobileMenuPos * - 0.65 * canvasH ) ) : ImVec2 ( ( 0.16 * canvasH ) + 0.5 * canvasW * mobileMenuPos , 0.0f ) ) ;
patWindowSize = ( portrait ? ImVec2 ( canvasW , canvasH - ( 0.16 * canvasW ) ) : ImVec2 ( canvasW - ( 0.16 * canvasH ) , canvasH ) ) ;
ImGui : : SetNextWindowPos ( patWindowPos ) ;
ImGui : : SetNextWindowSize ( patWindowSize ) ;
} else {
//ImGui::SetNextWindowSizeConstraints(ImVec2(440.0f*dpiScale,400.0f*dpiScale),ImVec2(canvasW,canvasH));
}
2024-05-27 17:53:46 -05:00
if ( ImGui : : Begin ( " Channels " , & channelsOpen , globalWinFlags , _ ( " Channels " ) ) ) {
2023-12-06 12:21:24 -05:00
if ( ImGui : : BeginTable ( " ChannelList " , 5 ) ) {
ImGui : : TableSetupColumn ( " c0 " , ImGuiTableColumnFlags_WidthFixed , 0.0 ) ;
2022-05-27 13:38:45 +09:00
ImGui : : TableSetupColumn ( " c1 " , ImGuiTableColumnFlags_WidthFixed , 0.0 ) ;
2023-12-06 12:21:24 -05:00
ImGui : : TableSetupColumn ( " c2 " , ImGuiTableColumnFlags_WidthFixed , 0.0 ) ;
ImGui : : TableSetupColumn ( " c3 " , ImGuiTableColumnFlags_WidthStretch , 0.0 ) ;
ImGui : : TableSetupColumn ( " c4 " , ImGuiTableColumnFlags_WidthFixed , 48.0f * dpiScale ) ;
2022-05-27 01:04:12 -05:00
ImGui : : TableNextRow ( ImGuiTableRowFlags_Headers ) ;
2022-05-27 13:38:45 +09:00
ImGui : : TableNextColumn ( ) ;
2024-05-26 19:31:17 -05:00
ImGui : : Text ( _ ( " Pat " ) ) ;
2023-12-06 12:21:24 -05:00
ImGui : : TableNextColumn ( ) ;
2024-05-26 19:31:17 -05:00
ImGui : : Text ( _ ( " Osc " ) ) ;
2023-12-06 12:21:24 -05:00
ImGui : : TableNextColumn ( ) ;
2022-05-27 13:38:45 +09:00
ImGui : : TableNextColumn ( ) ;
2024-05-26 19:31:17 -05:00
ImGui : : Text ( _ ( " Name " ) ) ;
2022-03-21 17:34:43 -05:00
for ( int i = 0 ; i < e - > getTotalChannelCount ( ) ; i + + ) {
ImGui : : PushID ( i ) ;
ImGui : : TableNextRow ( ) ;
ImGui : : TableNextColumn ( ) ;
2023-11-15 18:21:01 +04:00
if ( ImGui : : Checkbox ( " ##VisiblePat " , & e - > curSubSong - > chanShow [ i ] ) ) {
2023-08-19 15:54:49 -05:00
MARK_MODIFIED ;
}
2023-11-15 18:21:01 +04:00
if ( ImGui : : IsItemHovered ( ) ) {
2024-05-26 19:31:17 -05:00
ImGui : : SetTooltip ( _ ( " Show in pattern " ) ) ;
2023-11-15 18:21:01 +04:00
}
2023-12-06 12:21:24 -05:00
ImGui : : TableNextColumn ( ) ;
2023-11-15 18:21:01 +04:00
if ( ImGui : : Checkbox ( " ##VisibleChanOsc " , & e - > curSubSong - > chanShowChanOsc [ i ] ) ) {
2023-08-19 15:54:49 -05:00
MARK_MODIFIED ;
}
2023-11-15 18:21:01 +04:00
if ( ImGui : : IsItemHovered ( ) ) {
2024-05-26 19:31:17 -05:00
ImGui : : SetTooltip ( _ ( " Show in per-channel oscilloscope " ) ) ;
2023-11-15 18:21:01 +04:00
}
2023-12-06 12:21:24 -05:00
ImGui : : TableNextColumn ( ) ;
2022-05-27 01:04:12 -05:00
if ( ImGui : : Button ( ICON_FA_ARROWS ) ) {
2022-04-28 03:36:15 -05:00
}
2022-05-27 01:04:12 -05:00
if ( ImGui : : BeginDragDropSource ( ) ) {
chanToMove = i ;
ImGui : : SetDragDropPayload ( " FUR_CHAN " , NULL , 0 , ImGuiCond_Once ) ;
2022-05-27 01:08:11 -05:00
ImGui : : Button ( ICON_FA_ARROWS " ##ChanDrag " ) ;
2022-05-27 01:04:12 -05:00
ImGui : : EndDragDropSource ( ) ;
} else if ( ImGui : : IsItemHovered ( ) ) {
2025-10-04 04:06:28 -05:00
ImGui : : SetTooltip ( _ ( " %s #%d \n (drag to swap channels) \n (Shift-drag to copy channel contents) " ) , e - > getSystemName ( e - > sysOfChan [ i ] ) , e - > dispatchChanOfChan [ i ] ) ;
2022-05-27 01:04:12 -05:00
}
if ( ImGui : : BeginDragDropTarget ( ) ) {
const ImGuiPayload * dragItem = ImGui : : AcceptDragDropPayload ( " FUR_CHAN " ) ;
if ( dragItem ! = NULL ) {
if ( dragItem - > IsDataType ( " FUR_CHAN " ) ) {
if ( chanToMove ! = i & & chanToMove > = 0 ) {
2025-10-04 04:06:28 -05:00
if ( ImGui : : IsKeyDown ( ImGuiKey_LeftShift ) | | ImGui : : IsKeyDown ( ImGuiKey_RightShift ) )
2025-09-28 12:43:47 -03:00
e - > copyChannelP ( chanToMove , i ) ;
else
e - > swapChannelsP ( chanToMove , i ) ;
2023-07-30 14:43:25 -05:00
MARK_MODIFIED ;
2022-05-27 01:04:12 -05:00
}
chanToMove = - 1 ;
}
}
ImGui : : EndDragDropTarget ( ) ;
2022-04-28 03:36:15 -05:00
}
2022-03-21 17:34:43 -05:00
ImGui : : TableNextColumn ( ) ;
ImGui : : SetNextItemWidth ( ImGui : : GetContentRegionAvail ( ) . x ) ;
2023-08-19 15:54:49 -05:00
if ( ImGui : : InputTextWithHint ( " ##ChanName " , e - > getChannelName ( i ) , & e - > curSubSong - > chanName [ i ] ) ) {
MARK_MODIFIED ;
}
2022-03-21 17:34:43 -05:00
ImGui : : TableNextColumn ( ) ;
ImGui : : SetNextItemWidth ( ImGui : : GetContentRegionAvail ( ) . x ) ;
2023-08-19 15:54:49 -05:00
if ( ImGui : : InputTextWithHint ( " ##ChanShortName " , e - > getChannelShortName ( i ) , & e - > curSubSong - > chanShortName [ i ] ) ) {
MARK_MODIFIED ;
}
2022-03-21 17:34:43 -05:00
ImGui : : PopID ( ) ;
}
ImGui : : EndTable ( ) ;
}
}
if ( ImGui : : IsWindowFocused ( ImGuiFocusedFlags_ChildWindows ) ) curWindow = GUI_WINDOW_CHANNELS ;
ImGui : : End ( ) ;
2022-05-19 16:35:00 -05:00
}