// Fill out your copyright notice in the Description page of Project Settings. #include "SPluginHostChannelInterface.h" #include "SChannelNode.h" #include "SlateOptMacros.h" #include "SScrollBox.h" #include "SSpacer.h" #include "STextBlock.h" #include "AudioBuffer/ChannelInterface.h" #include "PluginHost/PluginHost.h" #include "Widgets/SBoxPanel.h" BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION void SPluginHostChannelInterface::Construct(const FArguments& InArgs, FPluginHost* InPluginHost) { PluginHost = InPluginHost; const FChannelInterface* ChannelInterface = PluginHost->ChannelInterface; InPluginHost->UpdateChannelNodeName(); const auto& InputNodes = ChannelInterface->InputChannelNodes; const auto& OutputNodes = ChannelInterface->OutputChannelNodes; TSharedPtr InputNodesBox; TSharedPtr OutputNodesBox; ChildSlot [ SNew(SScrollBox) +SScrollBox::Slot() .AutoSize() [ SNew(STextBlock) .Text(FText::FromString("Input: ")) ] +SScrollBox::Slot() .AutoSize() [ SAssignNew(InputNodesBox, SVerticalBox) ] +SScrollBox::Slot() .AutoSize() [ SNew(SSpacer) .Size(FVector2D(1, 3)) ] +SScrollBox::Slot() .AutoSize() [ SNew(STextBlock) .Text(FText::FromString("Output: ")) ] +SScrollBox::Slot() .AutoSize() [ SAssignNew(OutputNodesBox, SVerticalBox) ] ]; if (InputNodes.Num() > 0) { const TSharedRef DefaultInputNodeWidget = BuildChannelNode(InputNodes[0], SChannelNode::EChannelNodeType::InputNode, 0).ToSharedRef(); DefaultInputNodeWidget->SetEnabled(false); InputNodesBox->AddSlot() [ DefaultInputNodeWidget ]; } for (int32 i = 1; i < InputNodes.Num(); ++i) { InputNodesBox->AddSlot() [ BuildChannelNode(InputNodes[i], SChannelNode::EChannelNodeType::InputNode, i * 2).ToSharedRef() ]; } if (OutputNodes.Num() > 0) { TSharedRef DefaultOutputNodeWidget = BuildChannelNode(OutputNodes[0], SChannelNode::EChannelNodeType::OutputNode, 0).ToSharedRef(); DefaultOutputNodeWidget->SetEnabled(false); OutputNodesBox->AddSlot() [ DefaultOutputNodeWidget ]; } for (int32 i = 1; i < OutputNodes.Num(); ++i) { OutputNodesBox->AddSlot() [ BuildChannelNode(OutputNodes[i], SChannelNode::EChannelNodeType::OutputNode, i * 2).ToSharedRef() ]; } } TSharedPtr SPluginHostChannelInterface::BuildChannelNode(FChannelNode* ChannelNode, SChannelNode::EChannelNodeType ChannelNodeType, int32 NodeNameIndex) { return SNew(SChannelNode, ChannelNode, PluginHost->ChannelInterface, NodeNameIndex) .ChannelNodeType(ChannelNodeType); } END_SLATE_FUNCTION_BUILD_OPTIMIZATION