AronaSlate/Source/Arona/UI/Widget/ChannelInterface/SPluginHostChannelInterface.cpp
2024-01-25 11:21:15 +08:00

105 lines
2.6 KiB
C++

// 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<SVerticalBox> InputNodesBox;
TSharedPtr<SVerticalBox> 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<SChannelNode> 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<SChannelNode> 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<SChannelNode> SPluginHostChannelInterface::BuildChannelNode(FChannelNode* ChannelNode, SChannelNode::EChannelNodeType ChannelNodeType, int32 NodeNameIndex)
{
return SNew(SChannelNode, ChannelNode, PluginHost->ChannelInterface, NodeNameIndex)
.ChannelNodeType(ChannelNodeType);
}
END_SLATE_FUNCTION_BUILD_OPTIMIZATION