SHierarchyView::~SHierarchyView() { UWidgetBlueprint* Blueprint = GetBlueprint(); if ( Blueprint ) { Blueprint->OnChanged().RemoveAll(this); Blueprint->OnCompiled().RemoveAll(this); } if ( BlueprintEditor.IsValid() ) { BlueprintEditor.Pin()->OnSelectedWidgetsChanged.RemoveAll(this); } GEditor->OnObjectsReplaced().RemoveAll(this); }
FWidgetBlueprintEditor::~FWidgetBlueprintEditor() { UWidgetBlueprint* Blueprint = GetWidgetBlueprintObj(); if ( Blueprint ) { Blueprint->OnChanged().RemoveAll(this); Blueprint->OnCompiled().RemoveAll(this); } GEditor->OnObjectsReplaced().RemoveAll(this); Sequencer.Reset(); SequencerObjectBindingManager.Reset(); // Un-Register sequencer menu extenders. ISequencerModule& SequencerModule = FModuleManager::Get().LoadModuleChecked<ISequencerModule>("Sequencer"); SequencerModule.GetMenuExtensibilityManager()->GetExtenderDelegates().RemoveAll([this]( const FAssetEditorExtender& Extender ) { return SequencerExtenderHandle == Extender.GetHandle(); }); }
void SHierarchyView::Construct(const FArguments& InArgs, TSharedPtr<FWidgetBlueprintEditor> InBlueprintEditor, USimpleConstructionScript* InSCS) { BlueprintEditor = InBlueprintEditor; bRebuildTreeRequested = false; bIsUpdatingSelection = false; // register for any objects replaced GEditor->OnObjectsReplaced().AddRaw(this, &SHierarchyView::OnObjectsReplaced); // Create the filter for searching in the tree SearchBoxWidgetFilter = MakeShareable(new WidgetTextFilter(WidgetTextFilter::FItemToStringArray::CreateSP(this, &SHierarchyView::TransformWidgetToString))); UWidgetBlueprint* Blueprint = GetBlueprint(); Blueprint->OnChanged().AddRaw(this, &SHierarchyView::OnBlueprintChanged); Blueprint->OnCompiled().AddRaw(this, &SHierarchyView::OnBlueprintChanged); FilterHandler = MakeShareable(new TreeFilterHandler< TSharedPtr<FHierarchyModel> >()); FilterHandler->SetFilter(SearchBoxWidgetFilter.Get()); FilterHandler->SetRootItems(&RootWidgets, &TreeRootWidgets); FilterHandler->SetGetChildrenDelegate(TreeFilterHandler< TSharedPtr<FHierarchyModel> >::FOnGetChildren::CreateRaw(this, &SHierarchyView::WidgetHierarchy_OnGetChildren)); CommandList = MakeShareable(new FUICommandList); CommandList->MapAction( FGenericCommands::Get().Rename, FExecuteAction::CreateSP(this, &SHierarchyView::BeginRename), FCanExecuteAction::CreateSP(this, &SHierarchyView::CanRename) ); ChildSlot [ SNew(SBorder) .BorderImage(FEditorStyle::GetBrush("ToolPanel.GroupBorder")) [ SNew(SVerticalBox) + SVerticalBox::Slot() .Padding(4) .AutoHeight() [ SNew(SSearchBox) .HintText(LOCTEXT("SearchWidgets", "Search Widgets")) .OnTextChanged(this, &SHierarchyView::OnSearchChanged) ] + SVerticalBox::Slot() .FillHeight(1.0f) [ SAssignNew(TreeViewArea, SBorder) .Padding(0) .BorderImage( FEditorStyle::GetBrush( "NoBrush" ) ) ] ] ]; RebuildTreeView(); BlueprintEditor.Pin()->OnSelectedWidgetsChanged.AddRaw(this, &SHierarchyView::OnEditorSelectionChanged); bRefreshRequested = true; }