TSharedRef<SWidget> SVisualLoggerFilters::MakeGraphsFilterMenu() { FMenuBuilder MenuBuilder(true, NULL); MenuBuilder.BeginSection(TEXT("Graphs")); { TSharedRef<SSearchBox> FiltersSearchBox = SNew(SSearchBox) .InitialText(FText::FromString(GraphsFilter)) .HintText(LOCTEXT("GraphsFilterSearchHint", "Quick filter")) .OnTextChanged(this, &SVisualLoggerFilters::OnSearchChanged); MenuBuilder.AddWidget(FiltersSearchBox, LOCTEXT("FiltersSearchMenuWidget", "")); for (auto Iter = GraphFilters.CreateIterator(); Iter; ++Iter) { const FText& LabelText = FText::FromString(Iter->Key.ToString()); MenuBuilder.AddSubMenu( LabelText, FText::Format(LOCTEXT("FilterByTooltipPrefix", "Filter by {0}"), LabelText), FNewMenuDelegate::CreateSP(this, &SVisualLoggerFilters::CreateFiltersMenuCategoryForGraph, Iter->Key), FUIAction( FExecuteAction::CreateSP(this, &SVisualLoggerFilters::GraphFilterCategoryClicked, Iter->Key), FCanExecuteAction(), FIsActionChecked::CreateSP(this, &SVisualLoggerFilters::IsGraphFilterCategoryInUse, Iter->Key), FIsActionButtonVisible::CreateLambda([this, LabelText]()->bool{return GraphSubmenuVisibility(*LabelText.ToString()); }) ), NAME_None, EUserInterfaceActionType::ToggleButton ); } } MenuBuilder.EndSection(); //ContentBrowserFilterBasicAsset FDisplayMetrics DisplayMetrics; FSlateApplication::Get().GetDisplayMetrics(DisplayMetrics); const FVector2D DisplaySize( DisplayMetrics.PrimaryDisplayWorkAreaRect.Right - DisplayMetrics.PrimaryDisplayWorkAreaRect.Left, DisplayMetrics.PrimaryDisplayWorkAreaRect.Bottom - DisplayMetrics.PrimaryDisplayWorkAreaRect.Top); return SNew(SVerticalBox) + SVerticalBox::Slot() .MaxHeight(DisplaySize.Y * 0.5) [ MenuBuilder.MakeWidget() ]; }
TSharedRef<SWidget> SVisualLoggerFilters::MakeGraphsFilterMenu() { FMenuBuilder MenuBuilder(true, NULL); MenuBuilder.BeginSection(TEXT("Graphs")); { TSharedRef<SSearchBox> FiltersSearchBox = SNew(SSearchBox) .InitialText(FText::FromString(GraphsSearchString)) .HintText(LOCTEXT("GraphsFilterSearchHint", "Quick find")) .OnTextChanged(this, &SVisualLoggerFilters::OnSearchChanged); MenuBuilder.AddWidget(FiltersSearchBox, LOCTEXT("FiltersSearchMenuWidget", "")); if (CachedDatasPerGraph.Num() > 0) { for (auto Iter(CachedDatasPerGraph.CreateConstIterator()); Iter; ++Iter) { if (Iter.Value().Num() == 0) { continue; } const FName GraphName = Iter.Key(); bool bHighlightName = false; const TArray<FName> SelectedOwners = FVisualLoggerDatabase::Get().GetSelectedRows(); for (FName CurrentOwner : SelectedOwners) { bHighlightName |= FVisualLoggerGraphsDatabase::Get().ContainsGraphByName(CurrentOwner, GraphName); if (bHighlightName) { break; } } const FText& LabelText = bHighlightName ? FText::FromString(FString::Printf(TEXT("* %s"), *GraphName.ToString())) : FText::FromString(FString::Printf(TEXT(" %s"), *GraphName.ToString())); MenuBuilder.AddSubMenu( LabelText, FText::Format(LOCTEXT("FilterByTooltipPrefix", "Filter by {0}"), LabelText), FNewMenuDelegate::CreateSP(this, &SVisualLoggerFilters::CreateFiltersMenuCategoryForGraph, GraphName), FUIAction( FExecuteAction::CreateSP(this, &SVisualLoggerFilters::GraphFilterCategoryClicked, GraphName), FCanExecuteAction(), FIsActionChecked::CreateSP(this, &SVisualLoggerFilters::IsGraphFilterCategoryInUse, GraphName), FIsActionButtonVisible::CreateLambda([this, GraphName]()->bool{return GraphSubmenuVisibility(GraphName); }) ), NAME_None, EUserInterfaceActionType::ToggleButton ); } } } MenuBuilder.EndSection(); FDisplayMetrics DisplayMetrics; FSlateApplication::Get().GetDisplayMetrics(DisplayMetrics); const FVector2D DisplaySize( DisplayMetrics.PrimaryDisplayWorkAreaRect.Right - DisplayMetrics.PrimaryDisplayWorkAreaRect.Left, DisplayMetrics.PrimaryDisplayWorkAreaRect.Bottom - DisplayMetrics.PrimaryDisplayWorkAreaRect.Top); return SNew(SVerticalBox) + SVerticalBox::Slot() .MaxHeight(DisplaySize.Y * 0.5) [ MenuBuilder.MakeWidget() ]; }