// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Widgets/SCompoundWidget.h" #include "MassRequirements.h" #include "MassDebuggerModel.h" #include "Widgets/Views/SListView.h" #include "Widgets/Views/STableRow.h" class SSearchableComboBox; namespace UE::MassDebugger { struct FEditableQuery; struct FFragmentEntry; DECLARE_DELEGATE_OneParam(FRequirementsChanged, TSharedPtr&); class SQueryEditor : public SCompoundWidget { public: SLATE_BEGIN_ARGS(SQueryEditor) : _DebuggerModel() , _InitialRequirements() {} SLATE_ARGUMENT(TSharedPtr, DebuggerModel) SLATE_ARGUMENT(FMassFragmentRequirements, InitialRequirements) SLATE_EVENT(FRequirementsChanged, OnRequirementsChanged) SLATE_END_ARGS() void Construct(const FArguments& InArgs); void SetQuery(TSharedPtr& InQuery); private: void ApplyChanges(); void Load(); void HandleNameTextCommitted(const FText& InText, ETextCommit::Type InCommitType); TSharedRef OnGenerateFragmentRow(TSharedPtr InEntry, const TSharedRef& OwnerTable); TSharedRef OnGenerateTagRow(TSharedPtr InEntry, const TSharedRef& OwnerTable); FReply OnAddFragment(); FReply OnRemoveFragment(TSharedPtr InEntry); FReply OnAddTag(); FReply OnRemoveTag(TSharedPtr InEntry); void NotifyRequirementsChanged(); TWeakPtr DebuggerModel; FRequirementsChanged OnRequirementsChanged; TSharedPtr Query; TArray> FragmentEntries; TArray> TagEntries; TArray> AvailableFragmentNames; TMap> FragmentNamesToTypes; TArray> AvailableTagNames; TMap> TagNamesToTypes; friend class SFragmentSelectorRow; class SFragmentSelectorRow : public STableRow> { public: void Construct(const FArguments& InArgs, const TSharedRef& InOwnerTable, const TSharedPtr& InEntry, TSharedRef InOwnerRequirementsEditor, bool bInShowTags); TSharedPtr FragmentsComboBox; void OnFragmentTypeChanged(TSharedPtr> NewType, ESelectInfo::Type, TSharedPtr Entry); void OnFragmentAccessChanged(EMassFragmentAccess NewAccess, ESelectInfo::Type, TSharedPtr Entry); void OnFragmentPresenceChanged(EMassFragmentPresence NewPresence, ESelectInfo::Type, TSharedPtr Entry); void OnTagTypeChanged(TSharedPtr> NewType, ESelectInfo::Type, TSharedPtr Entry); void OnTagPresenceChanged(EMassFragmentPresence NewPresence, ESelectInfo::Type, TSharedPtr Entry); FText GetFragmentTypeText(TSharedPtr Entry) const; FText GetTagTypeText(TSharedPtr Entry) const; FText GetTagPresenceText(TSharedPtr Entry) const; TWeakPtr OwnerRequirementsEditor; bool bShowTags; }; TArray> FragmentAccessNames; TArray> FragmentPresenceNames; TMap FragmentAccessMap; TMap FragmentPresenceMap; TSharedPtr>> FragmentListView; TSharedPtr>> TagListView; }; } // namespace UE::MassDebugger