FReply STransformHandle::OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) { if ( MouseEvent.GetEffectingButton() == EKeys::LeftMouseButton ) { Action = ComputeActionAtLocation(MyGeometry, MouseEvent); FWidgetReference SelectedWidget = Designer->GetSelectedWidget(); UWidget* Preview = SelectedWidget.GetPreview(); UWidget* Template = SelectedWidget.GetTemplate(); if ( UCanvasPanelSlot* Slot = Cast<UCanvasPanelSlot>(Preview->Slot) ) { StartingOffsets = Slot->GetOffsets(); } MouseDownPosition = MouseEvent.GetScreenSpacePosition(); ScopedTransaction = new FScopedTransaction(LOCTEXT("ResizeWidget", "Resize Widget")); Template->Modify(); return FReply::Handled().CaptureMouse(SharedThis(this)); } return FReply::Unhandled(); }
FReply STransformHandle::OnMouseMove(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) { if ( Action != ETransformAction::None ) { FWidgetReference SelectedWidget = Designer->GetSelectedWidget(); UWidget* Template = SelectedWidget.GetTemplate(); UWidget* Preview = SelectedWidget.GetPreview(); { FVector2D Delta = MouseEvent.GetScreenSpacePosition() - MouseDownPosition; FVector2D TranslateAmount = Delta * ( 1.0f / Designer->GetPreviewScale() ); Resize(Cast<UCanvasPanelSlot>(Preview->Slot), DragDirection, TranslateAmount); Resize(Cast<UCanvasPanelSlot>(Template->Slot), DragDirection, TranslateAmount); } ETransformMode::Type TransformMode = Designer->GetTransformMode(); if ( TransformMode == ETransformMode::Render ) { FWidgetTransform PreviewRenderTransform = Preview->RenderTransform; static const FName RenderTransformName(TEXT("RenderTransform")); FObjectEditorUtils::SetPropertyValue<UWidget, FWidgetTransform>(Preview, RenderTransformName, PreviewRenderTransform); FObjectEditorUtils::SetPropertyValue<UWidget, FWidgetTransform>(Template, RenderTransformName, PreviewRenderTransform); } } return FReply::Unhandled(); }
// Callback for clicking a menu entry for a navigations rule. void FWidgetNavigationCustomization::HandleNavMenuEntryClicked(TWeakPtr<IPropertyHandle> PropertyHandle, EUINavigation Nav, EUINavigationRule Rule) { TArray<UObject*> OuterObjects; TSharedPtr<IPropertyHandle> PropertyHandlePtr = PropertyHandle.Pin(); PropertyHandlePtr->GetOuterObjects(OuterObjects); const FScopedTransaction Transaction(LOCTEXT("InitializeNavigation", "Edit Widget Navigation")); for (UObject* OuterObject : OuterObjects) { if (UWidget* Widget = Cast<UWidget>(OuterObject)) { FWidgetReference WidgetReference = Editor.Pin()->GetReferenceFromPreview(Widget); SetNav(WidgetReference.GetPreview(), Nav, Rule, TOptional<FName>()); SetNav(WidgetReference.GetTemplate(), Nav, Rule, TOptional<FName>()); } } }
void FWidgetNavigationCustomization::OnCommitExplictWidgetText(const FText& ItemFText, ETextCommit::Type CommitInfo, TWeakPtr<IPropertyHandle> PropertyHandle, EUINavigation Nav) { TArray<UObject*> OuterObjects; TSharedPtr<IPropertyHandle> PropertyHandlePtr = PropertyHandle.Pin(); PropertyHandlePtr->GetOuterObjects(OuterObjects); const FScopedTransaction Transaction(LOCTEXT("InitializeNavigation", "Edit Widget Navigation")); FName GotoWidgetName = FName(*ItemFText.ToString()); for ( UObject* OuterObject : OuterObjects ) { if ( UWidget* Widget = Cast<UWidget>(OuterObject) ) { FWidgetReference WidgetReference = Editor.Pin()->GetReferenceFromPreview(Widget); SetNav(WidgetReference.GetPreview(), Nav, TOptional<EUINavigationRule>(), GotoWidgetName); SetNav(WidgetReference.GetTemplate(), Nav, TOptional<EUINavigationRule>(), GotoWidgetName); } } }