EVisibility STransformHandle::GetHandleVisibility() const { ETransformMode::Type TransformMode = Designer->GetTransformMode(); // Only show the handles for visible elements in the designer. FWidgetReference SelectedWidget = Designer->GetSelectedWidget(); if ( SelectedWidget.IsValid() ) { if ( !SelectedWidget.GetTemplate()->bHiddenInDesigner ) { switch ( TransformMode ) { case ETransformMode::Layout: { if ( UPanelSlot* TemplateSlot = SelectedWidget.GetTemplate()->Slot ) { if ( CanResize(TemplateSlot, DragDirection) ) { return EVisibility::Visible; } } break; } case ETransformMode::Render: return EVisibility::Visible; } } } return EVisibility::Collapsed; }
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>()); } } }
bool FWidgetBlueprintEditor::CanPasteWidgets() { TSet<FWidgetReference> Widgets = GetSelectedWidgets(); if ( Widgets.Num() == 1 ) { FWidgetReference Target = *Widgets.CreateIterator(); const bool bIsPanel = Cast<UPanelWidget>(Target.GetTemplate()) != nullptr; return bIsPanel; } else if ( Widgets.Num() == 0 ) { if ( GetWidgetBlueprintObj()->WidgetTree->RootWidget == nullptr ) { return true; } } return false; }
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); } } }