删除视频
This commit is contained in:
parent
e992cca891
commit
7ca0aaed8d
BIN
Resources/CheckBox.png
Normal file
BIN
Resources/CheckBox.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 163 B |
BIN
Resources/DeleteButton.png
Normal file
BIN
Resources/DeleteButton.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 647 B |
BIN
Resources/Edit.png
Normal file
BIN
Resources/Edit.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 263 B |
BIN
Resources/ImportVideo.png
Normal file
BIN
Resources/ImportVideo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 502 B |
@ -62,6 +62,15 @@ void SEffectCard::Construct(const FArguments& InArgs)
|
||||
SNew(SButton)
|
||||
.HAlign(HAlign_Fill)
|
||||
.VAlign(VAlign_Fill)
|
||||
.OnPressed_Lambda([this]()
|
||||
{
|
||||
FGeometry Geometry;
|
||||
FPointerEvent PointerEvent;
|
||||
|
||||
TSharedPtr<FEffectCardDragDrop> EffectCardDragDrop = MakeShared<FEffectCardDragDrop>();
|
||||
OnDragDetected(Geometry, PointerEvent).BeginDragDrop(EffectCardDragDrop.ToSharedRef());
|
||||
})
|
||||
.ClickMethod(EButtonClickMethod::MouseDown)
|
||||
.OnClicked_Lambda([this]()
|
||||
{
|
||||
if (GroupProperty->bIsDedicated)
|
||||
@ -145,6 +154,11 @@ void SEffectCard::Construct(const FArguments& InArgs)
|
||||
PropertiesInterfaceGUID = CardProperty->Guid;
|
||||
}
|
||||
|
||||
FReply SEffectCard::OnDrop(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent)
|
||||
{
|
||||
return SCompoundWidget::OnDrop(MyGeometry, DragDropEvent);
|
||||
}
|
||||
|
||||
void SEffectCard::ShowClosedButton(bool bShow)
|
||||
{
|
||||
if (bShow)
|
||||
|
@ -37,6 +37,7 @@ public:
|
||||
/** Constructs this widget with InArgs */
|
||||
void Construct(const FArguments& InArgs);
|
||||
|
||||
virtual FReply OnDrop(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent) override;
|
||||
ICutMainWidgetInterface* MainInterface;
|
||||
|
||||
void ShowClosedButton(bool bShow);
|
||||
@ -57,3 +58,5 @@ public:
|
||||
FString CardName;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
@ -39,6 +39,8 @@ BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
||||
|
||||
void SCustomInputPanel::Construct(const FArguments& InArgs)
|
||||
{
|
||||
FTextBlockStyle NormalText = FAppStyle::GetWidgetStyle<FTextBlockStyle>("NormalText");
|
||||
NormalText.SetFontSize(16);
|
||||
ChildSlot
|
||||
[
|
||||
|
||||
@ -65,14 +67,21 @@ void SCustomInputPanel::Construct(const FArguments& InArgs)
|
||||
[
|
||||
SNew(SHorizontalBox)
|
||||
+ SHorizontalBox::Slot()
|
||||
.SizeParam(FAuto())
|
||||
.Padding(16, 11, 0, 0)
|
||||
[
|
||||
SNew(SOverlay)
|
||||
+ SOverlay::Slot()
|
||||
[
|
||||
SNew(SButton)
|
||||
.ButtonStyle(FCoreStyle::Get(), "NoBorder")
|
||||
.OnClicked_Lambda([this]()
|
||||
{
|
||||
Switcher->SetActiveWidgetIndex(0);
|
||||
bIsAssetPanel = false;
|
||||
bIsEditMode = false;
|
||||
EditButton->SetVisibility(bIsAssetPanel ? EVisibility::Visible : EVisibility::Collapsed);
|
||||
|
||||
return FReply::Handled();
|
||||
})
|
||||
]
|
||||
@ -80,18 +89,26 @@ void SCustomInputPanel::Construct(const FArguments& InArgs)
|
||||
[
|
||||
SNew(STextBlock)
|
||||
.Text(FText::FromString(TEXT("效果预设")))
|
||||
.Font(NormalText.Font)
|
||||
.Visibility(EVisibility::HitTestInvisible)
|
||||
]
|
||||
]
|
||||
+ SHorizontalBox::Slot()
|
||||
.SizeParam(FAuto())
|
||||
.Padding(16, 11, 0, 0)
|
||||
[
|
||||
SNew(SOverlay)
|
||||
+ SOverlay::Slot()
|
||||
[
|
||||
SNew(SButton)
|
||||
.ButtonStyle(FCoreStyle::Get(), "NoBorder")
|
||||
.OnClicked_Lambda([this]()
|
||||
{
|
||||
Switcher->SetActiveWidgetIndex(1);
|
||||
bIsAssetPanel = true;
|
||||
bIsEditMode = false;
|
||||
|
||||
EditButton->SetVisibility(bIsAssetPanel ? EVisibility::Visible : EVisibility::Collapsed);
|
||||
return FReply::Handled();
|
||||
})
|
||||
]
|
||||
@ -99,9 +116,51 @@ void SCustomInputPanel::Construct(const FArguments& InArgs)
|
||||
[
|
||||
SNew(STextBlock)
|
||||
.Text(FText::FromString(TEXT("素材库")))
|
||||
.Font(NormalText.Font)
|
||||
.Visibility(EVisibility::HitTestInvisible)
|
||||
]
|
||||
]
|
||||
+ SHorizontalBox::Slot()
|
||||
.Padding(0, 0, 10, 0)
|
||||
.HAlign(HAlign_Right)
|
||||
.VAlign(VAlign_Center)
|
||||
[
|
||||
SNew(SBox)
|
||||
.WidthOverride(20)
|
||||
.HeightOverride(20)
|
||||
[
|
||||
SAssignNew(EditButton, SImage)
|
||||
.Visibility(bIsAssetPanel ? EVisibility::Visible : EVisibility::Collapsed)
|
||||
.Image(FUtils::GetBrushFromImage(FUtils::GetResourcesPath("Edit.png"), {20, 20}))
|
||||
.OnMouseButtonDown_Lambda([this](const FGeometry& Geometry, const FPointerEvent& MouseEvent)
|
||||
{
|
||||
if (bIsEditMode)
|
||||
{
|
||||
bIsEditMode = false;
|
||||
ImportImage->SetImage(FUtils::GetBrushFromImage(FUtils::GetResourcesPath("ImportVideo.png"), {}));
|
||||
ImportText->SetText(FText::FromString(TEXT("导入视频")));
|
||||
for (int32 i = 0; i < ResourceInst.Num(); i++)
|
||||
{
|
||||
ResourceInst[i]->ShowCheckBox(false);
|
||||
}
|
||||
SelectedProperties.Empty();
|
||||
}
|
||||
else
|
||||
{
|
||||
bIsEditMode = true;
|
||||
ImportImage->SetImage(FUtils::GetBrushFromImage(FUtils::GetResourcesPath("DeleteButton.png"), {}));
|
||||
ImportText->SetText(FText::FromString(TEXT("删除预设")));
|
||||
for (int32 i = 0; i < ResourceInst.Num(); i++)
|
||||
{
|
||||
ResourceInst[i]->ShowCheckBox(true);
|
||||
}
|
||||
}
|
||||
|
||||
return FReply::Handled();
|
||||
})
|
||||
]
|
||||
|
||||
]
|
||||
]
|
||||
+ SVerticalBox::Slot()
|
||||
[
|
||||
@ -130,17 +189,46 @@ void SCustomInputPanel::Construct(const FArguments& InArgs)
|
||||
|
||||
]
|
||||
+ SVerticalBox::Slot()
|
||||
.SizeParam(FStretch(0.1))
|
||||
.SizeParam(FAuto())
|
||||
.HAlign(HAlign_Fill)
|
||||
.VAlign(VAlign_Fill)
|
||||
.VAlign(VAlign_Bottom)
|
||||
.Padding(102, 0, 102, 24)
|
||||
[
|
||||
SNew(SVerticalBox)
|
||||
+ SVerticalBox::Slot()
|
||||
SNew(SBox)
|
||||
.WidthOverride(144)
|
||||
.HeightOverride(40)
|
||||
[
|
||||
SNew(SButton)
|
||||
.Text(FText::FromString(TEXT("Open Video")))
|
||||
.ButtonStyle(FCoreStyle::Get(), "NoBorder")
|
||||
.OnClicked_Lambda([this]()
|
||||
{
|
||||
if (bIsEditMode)
|
||||
{
|
||||
for (int32 i = 0; i < SelectedProperties.Num(); i++)
|
||||
{
|
||||
for (int32 j = 0; j < ResourceInst.Num(); j++)
|
||||
{
|
||||
if (ResourceInst[j]->PropertyData.Guid == SelectedProperties[i].Guid)
|
||||
{
|
||||
ResourceInst[j]->ShowCheckBox(false);
|
||||
ResourceInst[j]->SetVisibility(EVisibility::Collapsed);
|
||||
ResourceInst.RemoveAt(j);
|
||||
break;
|
||||
}
|
||||
GridPanel->RemoveSlot(ResourceInst[j].ToSharedRef());
|
||||
}
|
||||
for (int32 j = 0; j < PropertyData.Num(); j++)
|
||||
{
|
||||
if (PropertyData[j].Guid == SelectedProperties[i].Guid)
|
||||
{
|
||||
PropertyData.RemoveAt(j);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return FReply::Handled();
|
||||
}
|
||||
IDesktopPlatform* DesktopPlatformModule = FDesktopPlatformModule::Get();
|
||||
TArray<FString> OpenFileName;
|
||||
DesktopPlatformModule->OpenFileDialog(nullptr, (TEXT("打开文件")), TEXT(""), TEXT(""), TEXT(""), EFileDialogFlags::None, OpenFileName);
|
||||
@ -151,28 +239,89 @@ void SCustomInputPanel::Construct(const FArguments& InArgs)
|
||||
{
|
||||
FTimelinePropertyData Data;
|
||||
FFFMPEGUtils::LoadMedia(OpenFileName[i], &Data);
|
||||
|
||||
TSharedPtr<SCustomInputResource> Resource = SNew(SCustomInputResource)
|
||||
.PropertyData(Data).OnCheckBoxChecked_Lambda([this](FTimelinePropertyData& Data, bool bIsChecked)
|
||||
{
|
||||
if (bIsChecked == true)
|
||||
{
|
||||
SelectedProperties.Add(Data);
|
||||
}
|
||||
else
|
||||
{
|
||||
SelectedProperties.Remove(Data);
|
||||
}
|
||||
|
||||
});
|
||||
GridPanel->AddSlot(GridPanel->GetChildren()->Num() % 2, GridPanel->GetChildren()->Num() / 2)
|
||||
[
|
||||
SNew(SCustomInputResource)
|
||||
.PropertyData(Data)
|
||||
Resource.ToSharedRef()
|
||||
];
|
||||
PropertyData.Add(Data);
|
||||
ResourceInst.Add(Resource.ToSharedRef());
|
||||
if (bIsEditMode)
|
||||
{
|
||||
Resource->ShowCheckBox(true);
|
||||
}
|
||||
return FReply::Handled();
|
||||
}
|
||||
else
|
||||
{
|
||||
FTimelinePropertyData Data;
|
||||
FFFMPEGUtils::LoadMedia(OpenFileName[i], &Data);
|
||||
GEngine->AddOnScreenDebugMessage(-1, 10.f, FColor::Red, FString::Printf(TEXT("GUID %s"), *Data.Guid.ToString()));
|
||||
TSharedPtr<SCustomInputResource> Resource = SNew(SCustomInputResource)
|
||||
.PropertyData(Data).OnCheckBoxChecked_Lambda([this](FTimelinePropertyData& ClickedData, bool bIsChecked)
|
||||
{
|
||||
if (bIsChecked == true)
|
||||
{
|
||||
SelectedProperties.Add(ClickedData);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int32 i = 0; i < SelectedProperties.Num(); i++)
|
||||
{
|
||||
if (SelectedProperties[i].Guid == ClickedData.Guid)
|
||||
{
|
||||
SelectedProperties.RemoveAt(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red, FString::Printf(TEXT("Num %d"), SelectedProperties.Num()));
|
||||
}
|
||||
});
|
||||
GridPanel->AddSlot(GridPanel->GetChildren()->Num() % 2, GridPanel->GetChildren()->Num() / 2)
|
||||
[
|
||||
SNew(SCustomInputResource)
|
||||
.PropertyData(Data)
|
||||
Resource.ToSharedRef()
|
||||
];
|
||||
PropertyData.Add(Data);
|
||||
ResourceInst.Add(Resource.ToSharedRef());
|
||||
if (bIsEditMode)
|
||||
{
|
||||
Resource->ShowCheckBox(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return FReply::Handled();
|
||||
})
|
||||
[
|
||||
SNew(SOverlay)
|
||||
+ SOverlay::Slot()
|
||||
[
|
||||
SAssignNew(ImportImage, SImage)
|
||||
.Image(FUtils::GetBrushFromImage(FUtils::GetResourcesPath("ImportVideo.png"), {}))
|
||||
]
|
||||
+ SOverlay::Slot()
|
||||
.HAlign(HAlign_Center)
|
||||
.VAlign(VAlign_Center)
|
||||
[
|
||||
SAssignNew(ImportText, STextBlock)
|
||||
.Text(FText::FromString(TEXT("导入视频")))
|
||||
.Justification(ETextJustify::Center)
|
||||
]
|
||||
]
|
||||
|
||||
]
|
||||
]
|
||||
]
|
||||
@ -366,5 +515,15 @@ void SCustomInputPanel::ClearPanel()
|
||||
PropertyData.Empty();
|
||||
}
|
||||
|
||||
void SCustomInputPanel::AddPreset(const FString& PresetPath)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void SCustomInputPanel::AddCustomPreset()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
END_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
||||
|
@ -48,7 +48,17 @@ public:
|
||||
|
||||
TSharedPtr<SWidgetSwitcher> Switcher;
|
||||
TArray<FTimelinePropertyData> PropertyData;
|
||||
TArray<TSharedPtr<class SCustomInputResource>> ResourceInst;
|
||||
void SavePanel(const FString& SavePlace);
|
||||
void LoadPanel(const FString& LoadPlace);
|
||||
void ClearPanel();
|
||||
void AddPreset(const FString& PresetPath);
|
||||
void AddCustomPreset();
|
||||
bool bIsAssetPanel = false;
|
||||
bool bIsEditMode = false;
|
||||
|
||||
TSharedPtr<SImage> EditButton;
|
||||
TSharedPtr<SImage> ImportImage;
|
||||
TSharedPtr<STextBlock> ImportText;
|
||||
TArray<FTimelinePropertyData> SelectedProperties;
|
||||
};
|
||||
|
@ -13,13 +13,16 @@ void SCustomInputResource::Construct(const FArguments& InArgs)
|
||||
{
|
||||
PropertyData = InArgs._PropertyData;
|
||||
VideoCapture = InArgs._VideoCapture;
|
||||
OnCheckBoxChecked = InArgs._OnCheckBoxChecked;
|
||||
GEngine->AddOnScreenDebugMessage(-1, 10.f, FColor::Orange, FString::Printf(TEXT("GUID %s"), *PropertyData.Guid.ToString()));
|
||||
ChildSlot
|
||||
[
|
||||
SNew(SBox)
|
||||
.WidthOverride(173.5)
|
||||
.HeightOverride(97.5)
|
||||
.WidthOverride(155)
|
||||
.HeightOverride(76)
|
||||
.Padding(9, 10, -9, 0)
|
||||
[
|
||||
SNew(SOverlay)
|
||||
SAssignNew(ImageOverlay, SOverlay)
|
||||
+ SOverlay::Slot()
|
||||
.HAlign(HAlign_Fill)
|
||||
.VAlign(VAlign_Fill)
|
||||
@ -54,4 +57,47 @@ FReply SCustomInputResource::OnDragDetected(const FGeometry& MyGeometry, const F
|
||||
return FReply::Handled().BeginDragDrop(Operation.ToSharedRef());
|
||||
}
|
||||
|
||||
void SCustomInputResource::ShowCheckBox(bool bShow)
|
||||
{
|
||||
|
||||
if (bShow)
|
||||
{
|
||||
if (Box)
|
||||
return;
|
||||
CheckBox =
|
||||
SNew(SCheckBox)
|
||||
// .BackgroundImage(FUtils::GetBrushFromImage(FUtils::GetResourcesPath("CheckBox.png"), {}))
|
||||
.OnCheckStateChanged_Lambda([this](const ECheckBoxState& State)
|
||||
{
|
||||
if (State == ECheckBoxState::Checked)
|
||||
OnCheckBoxChecked.ExecuteIfBound(PropertyData, true);
|
||||
else
|
||||
OnCheckBoxChecked.ExecuteIfBound(PropertyData, false);
|
||||
|
||||
|
||||
});
|
||||
|
||||
ImageOverlay->AddSlot()
|
||||
.HAlign(HAlign_Right)
|
||||
.VAlign(VAlign_Top)
|
||||
[
|
||||
SAssignNew(Box, SBox)
|
||||
.WidthOverride(20)
|
||||
.HeightOverride(20)
|
||||
[
|
||||
CheckBox.ToSharedRef()
|
||||
]
|
||||
];
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Box)
|
||||
{
|
||||
ImageOverlay->RemoveSlot(Box.ToSharedRef());
|
||||
Box.Reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
END_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
||||
|
@ -9,6 +9,7 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
DECLARE_DELEGATE_TwoParams(FOnCheckBoxChecked, FTimelinePropertyData, bool);
|
||||
class CUT5_API SCustomInputResource : public SCompoundWidget
|
||||
{
|
||||
public:
|
||||
@ -17,6 +18,7 @@ public:
|
||||
}
|
||||
SLATE_ARGUMENT(FTimelinePropertyData, PropertyData)
|
||||
SLATE_ARGUMENT(cv::VideoCapture, VideoCapture)
|
||||
SLATE_EVENT(FOnCheckBoxChecked, OnCheckBoxChecked)
|
||||
SLATE_END_ARGS()
|
||||
|
||||
/** Constructs this widget with InArgs */
|
||||
@ -24,5 +26,11 @@ public:
|
||||
void Construct(const FArguments& InArgs);
|
||||
virtual FReply OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
|
||||
virtual FReply OnDragDetected(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
|
||||
|
||||
void ShowCheckBox(bool bShow);
|
||||
FOnCheckBoxChecked OnCheckBoxChecked;
|
||||
TSharedPtr<SOverlay> ImageOverlay;
|
||||
cv::VideoCapture VideoCapture;
|
||||
TSharedPtr<SWidget> CheckBox;
|
||||
TSharedPtr<SBox> Box;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user