105 lines
2.6 KiB
C++
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
|