Files
UnrealEngineUWP/Engine/Plugins/Runtime/StateTree/Source/StateTreeEditorModule/Private/SStateTreeViewRow.h
mikko mononen ef148ecd80 StateTree: StateTree UI spring clean.
- Added icons and icon colors for ST nodes
- Implemented icons for some common ST nodes
- Small update to ST logic icons
- Added icons to the task list in State treeview row, adjusted task list BG color to make icons visible
- Fixed ST editor tabs icons and names (e.g. there were two tabs that had the same label)
- Moved ST node picker to separate class
- Moved category array customization to common helper function
- Added node icons to the ST node picker
- Add node button is not node selector too (simila to Niagara)
- Consolidated the add button style across all lists
- Cleaned up the node customization
  - Moved type selector, debug, and property controls into one menu at right
  - The combined menu can be also summoned using right click
  - Renaming now has to be triggered via the menu
  - Replacing node happens via menu
  - Most of the row was left "clickable" to later use it for selection
  - Improved the visualization and controls for the expression indentation
- Cleaned up state customization
  - Moved parameters to own category (similar to the tree params)
  - Moved event to the enter conditions category
- Cleaned up transition customization
  - Improved the transition display
  - Consolidated add button styles

#jira UE-180608
#rb Juan.Portillo, Mieszko.Zielinski

[CL 33030431 by mikko mononen in ue5-main branch]
2024-04-17 03:01:36 -04:00

131 lines
5.0 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Widgets/Views/STableRow.h"
#include "Widgets/Views/SListView.h"
class STableViewBase;
class UStateTreeState;
enum class EStateTreeTransitionTrigger : uint8;
enum EStateTreeNodeFormatting : uint8;
struct FStateTreeStateLink;
struct FStateTreeEditorNode;
class UStateTreeEditorData;
class SStateTreeView;
class SInlineEditableTextBlock;
class SScrollBox;
class FStateTreeViewModel;
class SStateTreeViewRow : public STableRow<TWeakObjectPtr<UStateTreeState>>
{
public:
SLATE_BEGIN_ARGS(SStateTreeViewRow)
{
}
SLATE_END_ARGS()
void Construct(const FArguments& InArgs, const TSharedRef<STableViewBase>& InOwnerTableView, TWeakObjectPtr<UStateTreeState> InState, const TSharedPtr<SScrollBox>& ViewBox, TSharedPtr<FStateTreeViewModel> InStateTreeViewModel);
void RequestRename() const;
private:
TSharedRef<SHorizontalBox> CreateTasksWidget();
FSlateColor GetTitleColor(const float Alpha = 1.0f, const float Lighten = 0.0f) const;
FSlateColor GetActiveStateColor() const;
FSlateColor GetSubTreeMarkerColor() const;
FText GetStateDesc() const;
FText GetStateIDDesc() const;
EVisibility GetConditionVisibility() const;
EVisibility GetStateBreakpointVisibility() const;
FText GetStateBreakpointTooltipText() const;
const FSlateBrush* GetSelectorIcon() const;
FText GetSelectorTooltip() const;
FText GetStateTypeTooltip() const;
const FStateTreeEditorNode* GetTaskNodeByID(FGuid TaskID) const;
EVisibility GetTaskIconVisibility(FGuid TaskID) const;
const FSlateBrush* GetTaskIcon(FGuid TaskID) const;
FSlateColor GetTaskIconColor(FGuid TaskID) const;
FText GetTaskDesc(FGuid TaskID, EStateTreeNodeFormatting Formatting) const;
EVisibility GetTasksVisibility() const;
EVisibility GetLinkedStateVisibility() const;
FText GetLinkedStateDesc() const;
bool GetStateWarnings(FText* OutText) const;
EVisibility GetWarningsVisibility() const;
FText GetWarningsTooltipText() const;
EVisibility GetCompletedTransitionVisibility() const;
EVisibility GetCompletedTransitionBreakpointVisibility() const;
FText GetCompletedTransitionsDesc() const;
FText GetCompletedTransitionWithBreakpointDesc() const;
const FSlateBrush* GetCompletedTransitionsIcon() const;
EVisibility GetSucceededTransitionVisibility() const;
EVisibility GetSucceededTransitionBreakpointVisibility() const;
FText GetSucceededTransitionDesc() const;
FText GetSucceededTransitionWithBreakpointDesc() const;
const FSlateBrush* GetSucceededTransitionIcon() const;
EVisibility GetFailedTransitionVisibility() const;
EVisibility GetFailedTransitionBreakpointVisibility() const;
FText GetFailedTransitionDesc() const;
FText GetFailedTransitionWithBreakpointDesc() const;
const FSlateBrush* GetFailedTransitionIcon() const;
EVisibility GetConditionalTransitionsVisibility() const;
EVisibility GetConditionalTransitionsBreakpointVisibility() const;
FText GetConditionalTransitionsDesc() const;
FText GetConditionalTransitionsWithBreakpointDesc() const;
enum class ETransitionDescRequirement : uint8
{
Any,
RequiredTrue,
RequiredFalse,
};
/**
* Filtering options used to build the description of the transitions.
* The default setup includes only enabled transition,
* with or without breakpoints and requires exact trigger match (no partial mask)
*/
struct FTransitionDescFilterOptions
{
FTransitionDescFilterOptions() {};
ETransitionDescRequirement Enabled = ETransitionDescRequirement::RequiredTrue;
ETransitionDescRequirement WithBreakpoint = ETransitionDescRequirement::Any;
bool bUseMask = false;
};
static FText GetLinkDescription(const FStateTreeStateLink& Link);
FText GetTransitionsDesc(const UStateTreeState& State, const EStateTreeTransitionTrigger Trigger, const FTransitionDescFilterOptions FilterOptions = {}) const;
const FSlateBrush* GetTransitionsIcon(const UStateTreeState& State, const EStateTreeTransitionTrigger Trigger, const FTransitionDescFilterOptions FilterOptions = {}) const;
EVisibility GetTransitionsVisibility(const UStateTreeState& State, const EStateTreeTransitionTrigger Trigger) const;
EVisibility GetTransitionsBreakpointVisibility(const UStateTreeState& State, const EStateTreeTransitionTrigger Trigger) const;
bool HasParentTransitionForTrigger(const UStateTreeState& State, const EStateTreeTransitionTrigger Trigger) const;
bool IsRootState() const;
bool IsLeafState() const;
bool IsStateSelected() const;
void HandleNodeLabelTextCommitted(const FText& NewLabel, ETextCommit::Type CommitType) const;
FReply HandleDragDetected(const FGeometry&, const FPointerEvent&) const;
TOptional<EItemDropZone> HandleCanAcceptDrop(const FDragDropEvent& DragDropEvent, EItemDropZone DropZone, TWeakObjectPtr<UStateTreeState> TargetState) const;
FReply HandleAcceptDrop(const FDragDropEvent& DragDropEvent, EItemDropZone DropZone, TWeakObjectPtr<UStateTreeState> TargetState) const;
TSharedPtr<FStateTreeViewModel> StateTreeViewModel;
TWeakObjectPtr<UStateTreeState> WeakState;
TWeakObjectPtr<UStateTreeEditorData> WeakEditorData;
TSharedPtr<SInlineEditableTextBlock> NameTextBlock;
};