// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "IDetailCustomization.h" #include "Widgets/Views/SListView.h" class ULiveLinkVirtualSubject; class ILiveLinkClient; class IPropertyHandle; class ITableRow; class STableViewBase; /** * Customizes a ULiveLinkVirtualSubjectDetails */ class FLiveLinkVirtualSubjectDetailCustomization : public IDetailCustomization { public: // Data type of out subject tree UI typedef TSharedPtr FSubjectEntryPtr; static TSharedRef MakeInstance() { return MakeShared(); } // IDetailCustomization interface virtual void CustomizeDetails(class IDetailLayoutBuilder& DetailBuilder) override; // End IDetailCustomization interface private: // Generates a row for a selected subject. TSharedRef OnGenerateWidgetForSelectedSubjectItem(FSubjectEntryPtr InItem, const TSharedRef& OwnerTable); // Creates subject tree entry widget TSharedRef OnGenerateWidgetForSubjectItem(FSubjectEntryPtr InItem, const TSharedRef& OwnerTable); // If Item doesn't exist in Client subject's list, mark it as red FSlateColor HandleSubjectItemColor(FSubjectEntryPtr InItem) const; FText HandleSubjectItemToolTip(FSubjectEntryPtr InItem) const; // Generate the combo box menu to display subjects to pick. TSharedRef OnGetVirtualSubjectsMenu(); // Returns whether an entry is currently selected. bool IsEntrySelected(FSubjectEntryPtr EntryPtr); // Update the list of selected subjects displayed above the subject picker. void UpdateSelectedSubjects(); private: // The tile set being edited TWeakObjectPtr SubjectPtr; ILiveLinkClient* Client; // Cached reference to our details builder so we can force refresh IDetailLayoutBuilder* MyDetailsBuilder; // Cached property pointers TSharedPtr SubjectsPropertyHandle; // Cached data for the subject tree UI TArray SubjectsListItems; TArray SelectedSubjectsListItems; TSharedPtr< SListView< FSubjectEntryPtr > > SelectedSubjectsListView; };