Live Config
Loading...
Searching...
No Matches
SLiveConfigPropertyManager.h
1// Copyright (c) 2026 Nicholas Arthur
2// Licensed under the MIT License
3
4#pragma once
5
6#include "CoreMinimal.h"
7#include "Widgets/SCompoundWidget.h"
8#include "Widgets/Views/STreeView.h"
9#include "LiveConfigSystem.h"
10
12
17struct FLiveConfigPropertyTreeNode : public TSharedFromThis<FLiveConfigPropertyTreeNode>
18{
19 FString DisplayName;
20 FString FullPath;
21 TSharedPtr<FLiveConfigPropertyDefinition> PropertyDefinition;
22 TArray<TSharedRef<FLiveConfigPropertyTreeNode>> Children;
23 TWeakPtr<FLiveConfigPropertyTreeNode> Parent;
24 bool bIsExpanded = true;
25 bool bNeedsFocus = false;
26
27 bool IsProperty() const { return PropertyDefinition.IsValid() && PropertyDefinition->PropertyType != ELiveConfigPropertyType::Struct; }
28 bool IsStruct() const { return PropertyDefinition.IsValid() && PropertyDefinition->PropertyType == ELiveConfigPropertyType::Struct; }
29};
30
31class SLiveConfigPropertyManager : public SCompoundWidget
32{
33 SLATE_DECLARE_WIDGET(SLiveConfigPropertyManager, SCompoundWidget);
34public:
35 SLATE_BEGIN_ARGS(SLiveConfigPropertyManager)
36 {}
37 SLATE_END_ARGS();
38
40
41 void Construct(const FArguments& InArgs);
42 virtual bool SupportsKeyboardFocus() const override { return true; }
43 virtual FReply OnKeyDown(const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent) override;
44 virtual void Tick(const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime) override;
45 void RemoveProperty(TSharedPtr<FLiveConfigPropertyDefinition> InItem);
46 void RemoveTag(FName TagName);
47 void ScrollToProperty(FLiveConfigProperty Property);
48 bool IsNameDuplicate(FName Name) const;
49
50 static void GetMissingTags(TArray<FName>& OutMissingTags);
51
52private:
53 static const TArray<TSharedPtr<FLiveConfigPropertyDefinition>>& GetPropertyDefinitions();
54
55 TSharedRef<ITableRow> OnGenerateRow(TSharedRef<FLiveConfigPropertyTreeNode> InItem, const TSharedRef<STableViewBase>& OwnerTable);
56 void OnGetChildren(TSharedRef<FLiveConfigPropertyTreeNode> InItem, TArray<TSharedRef<FLiveConfigPropertyTreeNode>>& OutChildren);
57 void RefreshList();
58 void OnAddNewProperty();
59 void OnAddPropertyAtFolder(FString FolderPath);
60 void OnPropertyRowMouseDown(TSharedRef<FLiveConfigPropertyTreeNode> SelectedItem);
61 void OnAddNewTag(FName NewTag);
62 void OnFilterTextChanged(const FText& InFilterText);
63 void RefreshSearchFilter();
64 void RefreshTags();
65 void OnTagFilterSelected(FName InTag);
66 int32 GetTagCount(FName InTag) const;
67 void OnPropertyRowChanged(TSharedPtr<FLiveConfigPropertyDefinition> OldDef, TSharedPtr<FLiveConfigPropertyDefinition> NewDef, ELiveConfigPropertyChangeType ChangeType);
68 void GetFlatVisibleProperties(TArray<TSharedRef<FLiveConfigPropertyTreeNode>>& OutFlatList) const;
69 void NavigateToProperty(TSharedPtr<FLiveConfigPropertyTreeNode> CurrentItem, int32 Direction);
70 void SetAllNodesExpanded(bool bExpanded);
71 void SetNodesExpandedRecursive(const TArray<TSharedRef<FLiveConfigPropertyTreeNode>>& Nodes, bool bExpanded);
72 void BulkAddTag(TArray<TSharedRef<FLiveConfigPropertyTreeNode>> Nodes, FName TagName);
73 void BulkRemoveTag(TArray<TSharedRef<FLiveConfigPropertyTreeNode>> Nodes, FName TagName);
74 void BulkDeleteProperties(TArray<TSharedRef<FLiveConfigPropertyTreeNode>> Nodes);
75 TSharedPtr<SWidget> OnGetContextMenuContent();
76 void OnTreeDoubleClick(TSharedRef<FLiveConfigPropertyTreeNode> LiveConfigPropertyTreeNode);
77 void OnSelectionChanged(TSharedPtr<FLiveConfigPropertyTreeNode> SelectedItem, ESelectInfo::Type SelectInfo);
78 void OnManageRedirects();
79 void OnCleanupUnusedProperties();
80
81 TArray<TSharedRef<FLiveConfigPropertyTreeNode>> RootNodes;
82 FName SelectedTag;
83 TSharedPtr<STreeView<TSharedRef<FLiveConfigPropertyTreeNode>>> PropertyTreeView;
84 TSharedPtr<SSearchBox> SearchBox;
85 TSharedPtr<class SVerticalBox> TagFilterBox;
86 TSharedPtr<SWindow> NewTagWindow;
87 bool bNeedsInitialRefresh = true;
88 FLiveConfigProperty PendingScrollProperty;
89};
Definition SLiveConfigPropertyManager.h:32
Definition LiveConfigPropertyTreeSubsystem.h:29
Definition SLiveConfigPropertyManager.h:18
Definition LiveConfigPropertyName.h:14