// Copyright Epic Games, Inc. All Rights Reserved. #include "SMassProcessingView.h" #include "MassDebuggerModel.h" #include "SMassProcessingGraphView.h" #include "Widgets/Views/SListView.h" #define LOCTEXT_NAMESPACE "SMassDebugger" //----------------------------------------------------------------------// // SMassProcessingGraphListTableRow //----------------------------------------------------------------------// using FMassDebuggerProcessingGraphPtr = TSharedPtr; class SMassProcessingGraphListTableRow : public STableRow { public: SLATE_BEGIN_ARGS(SMassProcessingGraphListTableRow) { } SLATE_END_ARGS() void Construct(const FArguments& InArgs, const TSharedRef& InOwnerTableView, const FMassDebuggerProcessingGraphPtr InEntryItem) { Item = InEntryItem; STableRow::Construct(STableRow::FArguments(), InOwnerTableView); ChildSlot [ SNew(STextBlock) .Text(FText::FromString(Item->Label)) ]; } FMassDebuggerProcessingGraphPtr Item; }; //----------------------------------------------------------------------// // SMassProcessingView //----------------------------------------------------------------------// SMassProcessingView::~SMassProcessingView() { DebuggerModel->OnRefreshDelegate.Remove(OnRefreshHandle); } void SMassProcessingView::Construct(const FArguments& InArgs, TSharedRef InDebuggerModel) { DebuggerModel = InDebuggerModel; ChildSlot [ SNew(SSplitter) .Orientation(Orient_Horizontal) + SSplitter::Slot() .Value(.3f) .MinSize(250.0f) [ SAssignNew(GraphsListWidget, SListView>) .ListItemsSource(&DebuggerModel->CachedProcessingGraphs) .SelectionMode(ESelectionMode::Single) .OnGenerateRow_Lambda([](TSharedPtr Item, const TSharedPtr& OwnerTable) { return SNew(SMassProcessingGraphListTableRow, OwnerTable.ToSharedRef(), Item); }) .OnSelectionChanged_Lambda([this](TSharedPtr SelectedItem, ESelectInfo::Type SelectInfo) { if (SelectedItem) { SelectedLabel = SelectedItem->Label; } else { SelectedLabel.Empty(); } ProcessingGraphWidget->Display(SelectedItem); }) ] + SSplitter::Slot() .Value(.7f) [ SAssignNew(ProcessingGraphWidget, SMassProcessingGraphView, InDebuggerModel) ] ]; OnRefreshHandle = DebuggerModel->OnRefreshDelegate.AddRaw(this, &SMassProcessingView::OnRefresh); } void SMassProcessingView::OnRefresh() { GraphsListWidget->RequestListRefresh(); if (DebuggerModel.IsValid() && DebuggerModel->CachedProcessingGraphs.Num() > 0) { int SelectedIndex = 0; if (!SelectedLabel.IsEmpty()) { for (int i = 0; i < DebuggerModel->CachedProcessingGraphs.Num(); i++) { if (DebuggerModel->CachedProcessingGraphs[i]->Label == SelectedLabel) { SelectedIndex = i; break; } } } GraphsListWidget->SetSelection(DebuggerModel->CachedProcessingGraphs[SelectedIndex]); } } #undef LOCTEXT_NAMESPACE