FReply SFlipbookKeyframeWidget::OnDrop(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent) { bool bWasDropHandled = false; UPaperFlipbook* Flipbook = FlipbookBeingEdited.Get(); if ((Flipbook != nullptr) && Flipbook->IsValidKeyFrameIndex(FrameIndex)) { TSharedPtr<FDragDropOperation> Operation = DragDropEvent.GetOperation(); if (!Operation.IsValid()) { } else if (Operation->IsOfType<FAssetDragDropOp>()) { const auto& AssetDragDropOp = StaticCastSharedPtr<FAssetDragDropOp>(Operation); //@TODO: Handle asset inserts // OnAssetsDropped(*AssetDragDropOp); // bWasDropHandled = true; } else if (Operation->IsOfType<FFlipbookKeyFrameDragDropOp>()) { const auto& FrameDragDropOp = StaticCastSharedPtr<FFlipbookKeyFrameDragDropOp>(Operation); FrameDragDropOp->InsertInFlipbook(Flipbook, FrameIndex); bWasDropHandled = true; } } return bWasDropHandled ? FReply::Handled() : FReply::Unhandled(); }
// Can return null const FPaperFlipbookKeyFrame* SFlipbookKeyframeWidget::GetKeyFrameData() const { UPaperFlipbook* Flipbook = FlipbookBeingEdited.Get(); if ((Flipbook != nullptr) && Flipbook->IsValidKeyFrameIndex(FrameIndex)) { return &(Flipbook->GetKeyFrameChecked(FrameIndex)); } return nullptr; }
FOptionalSize SFlipbookKeyframeWidget::GetFrameWidth() const { UPaperFlipbook* Flipbook = FlipbookBeingEdited.Get(); if (Flipbook && Flipbook->IsValidKeyFrameIndex(FrameIndex)) { const FPaperFlipbookKeyFrame& KeyFrame = Flipbook->GetKeyFrameChecked(FrameIndex); return FMath::Max<float>(0, KeyFrame.FrameRun * SlateUnitsPerFrame.Get() - FFlipbookUIConstants::HandleWidth); } else { return 1; } }
FReply SFlipbookKeyframeWidget::OnDragDetected(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) { if (MouseEvent.IsMouseButtonDown(EKeys::LeftMouseButton)) { UPaperFlipbook* Flipbook = FlipbookBeingEdited.Get(); if ((Flipbook != nullptr) && Flipbook->IsValidKeyFrameIndex(FrameIndex)) { TSharedRef<FFlipbookKeyFrameDragDropOp> Operation = FFlipbookKeyFrameDragDropOp::New( GetFrameWidth().Get(), Flipbook, FrameIndex); return FReply::Handled().BeginDragDrop(Operation); } } return FReply::Unhandled(); }
FText SFlipbookKeyframeWidget::GetKeyframeTooltip() const { UPaperFlipbook* Flipbook = FlipbookBeingEdited.Get(); if ((Flipbook != nullptr) && Flipbook->IsValidKeyFrameIndex(FrameIndex)) { const FPaperFlipbookKeyFrame& KeyFrame = Flipbook->GetKeyFrameChecked(FrameIndex); FText SpriteLine = (KeyFrame.Sprite != nullptr) ? FText::FromString(KeyFrame.Sprite->GetName()) : LOCTEXT("NoSprite", "(none)"); return FText::Format(LOCTEXT("KeyFrameTooltip", "Sprite: {0}\nIndex: {1}\nDuration: {2} frame(s)"), SpriteLine, FText::AsNumber(FrameIndex), FText::AsNumber(KeyFrame.FrameRun)); } else { return LOCTEXT("KeyFrameTooltip_Invalid", "Invalid key frame index"); } }