Files
UnrealEngine/Engine/Source/Editor/UnrealEd/Public/DragAndDrop/ActorDragDropGraphEdOp.h
2025-05-18 13:04:45 +08:00

112 lines
3.8 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Input/DragAndDrop.h"
#include "Styling/AppStyle.h"
#include "DragAndDrop/ActorDragDropOp.h"
#define LOCTEXT_NAMESPACE "ActorDragDrop"
class FActorDragDropGraphEdOp : public FActorDragDropOp
{
public:
DRAG_DROP_OPERATOR_TYPE(FActorDragDropGraphEdOp, FActorDragDropOp)
enum ToolTipTextType
{
ToolTip_Compatible,
ToolTip_Incompatible,
ToolTip_MultipleSelection_Incompatible,
ToolTip_CompatibleAttach,
ToolTip_IncompatibleGeneric,
ToolTip_CompatibleGeneric,
ToolTip_CompatibleMultipleAttach,
ToolTip_IncompatibleMultipleAttach,
ToolTip_CompatibleDetach,
ToolTip_CompatibleMultipleDetach
};
/** Set the appropriate tool tip when dragging functionality is active*/
void SetToolTip(ToolTipTextType TextType, FText ParamText = FText::GetEmpty())
{
switch( TextType )
{
case ToolTip_Compatible:
{
CurrentHoverText = FText::Format( LOCTEXT("ToolTipCompatible", "'{0}' is compatible to replace object reference"), FText::FromString(Actors[0].Get()->GetActorLabel()) );
CurrentIconBrush = FAppStyle::GetBrush(TEXT("Graph.ConnectorFeedback.OK"));
break;
}
case ToolTip_Incompatible:
{
CurrentHoverText = FText::Format( LOCTEXT("ToolTipIncompatible", "'{0}' is not compatible to replace object reference"), FText::FromString(Actors[0].Get()->GetActorLabel()) );
CurrentIconBrush = FAppStyle::GetBrush(TEXT("Graph.ConnectorFeedback.Error"));
break;
}
case ToolTip_MultipleSelection_Incompatible:
{
CurrentHoverText = LOCTEXT("ToolTipMultipleSelectionIncompatible", "Cannot replace object reference when multiple objects are selected");
CurrentIconBrush = FAppStyle::GetBrush(TEXT("Graph.ConnectorFeedback.Error"));
break;
}
case ToolTip_CompatibleAttach:
{
CurrentHoverText = FText::Format( LOCTEXT("ToolTipCompatibleAttach", "Attach {0} to {1}"), FText::FromString(Actors[0].Get()->GetActorLabel()), ParamText);
CurrentIconBrush = FAppStyle::GetBrush(TEXT("Graph.ConnectorFeedback.OK"));
break;
}
case ToolTip_IncompatibleGeneric:
{
CurrentHoverText = ParamText;
CurrentIconBrush = FAppStyle::GetBrush(TEXT("Graph.ConnectorFeedback.Error"));
break;
}
case ToolTip_CompatibleGeneric:
{
CurrentHoverText = ParamText;
CurrentIconBrush = FAppStyle::GetBrush(TEXT("Graph.ConnectorFeedback.OK"));
break;
}
case ToolTip_CompatibleMultipleAttach:
{
CurrentHoverText = FText::Format( LOCTEXT("ToolTipCompatibleMultipleAttach", "Attach multiple objects to {0}"), ParamText);
CurrentIconBrush = FAppStyle::GetBrush(TEXT("Graph.ConnectorFeedback.OK"));
break;
}
case ToolTip_IncompatibleMultipleAttach:
{
CurrentHoverText = FText::Format( LOCTEXT("ToolTipIncompatibleMultipleAttach", "Cannot attach multiple objects to {0}"), ParamText);
CurrentIconBrush = FAppStyle::GetBrush(TEXT("Graph.ConnectorFeedback.Error"));
break;
}
case ToolTip_CompatibleDetach:
{
CurrentHoverText = FText::Format( LOCTEXT("ToolTipCompatibleDetach", "Detach {0} from {1}"), FText::FromString(Actors[0].Get()->GetActorLabel()), ParamText);
CurrentIconBrush = FAppStyle::GetBrush(TEXT("Graph.ConnectorFeedback.OK"));
break;
}
case ToolTip_CompatibleMultipleDetach:
{
CurrentHoverText = FText::Format( LOCTEXT("ToolTipCompatibleDetachMultiple", "Detach multiple objects from {0}"), ParamText);
CurrentIconBrush = FAppStyle::GetBrush(TEXT("Graph.ConnectorFeedback.OK"));
break;
}
}
}
static TSharedRef<FActorDragDropGraphEdOp> New(const TArray< TWeakObjectPtr<AActor> >& InActors)
{
TSharedRef<FActorDragDropGraphEdOp> Operation = MakeShareable(new FActorDragDropGraphEdOp);
Operation->Init(InActors);
Operation->SetupDefaults();
Operation->Construct();
return Operation;
}
};
#undef LOCTEXT_NAMESPACE