Live Config
Loading...
Searching...
No Matches
SLiveConfigPropertyRow.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/Views/SListView.h"
8#include "Widgets/Views/STableRow.h"
9#include "PropertyManager/SLiveConfigPropertyManager.h"
10
11typedef SMultiColumnTableRow<TSharedRef<FLiveConfigPropertyTreeNode>> SPropertyRowParent;
12
13class SLiveConfigPropertyRow : public SPropertyRowParent
14{
15public:
17 {
18 static const FName Name;
19 static const FName Description;
20 static const FName Type;
21 static const FName Value;
22 static const FName Tags;
23 static const FName Actions;
24 };
25
27
28 DECLARE_DELEGATE_ThreeParams(FOnPropertyPropertyChanged, TSharedPtr<FLiveConfigPropertyDefinition>, TSharedPtr<FLiveConfigPropertyDefinition>, ELiveConfigPropertyChangeType);
29 DECLARE_DELEGATE_OneParam(FOnDeleteProperty, TSharedPtr<FLiveConfigPropertyDefinition>);
30 DECLARE_DELEGATE_OneParam(FOnAddPropertyAtFolder, FString);
31 DECLARE_DELEGATE_TwoParams(FOnBulkTagFolder, FString, FName);
32 DECLARE_DELEGATE_RetVal_OneParam(bool, FIsNameDuplicate, FName);
33 DECLARE_DELEGATE(FOnRequestRefresh);
34 DECLARE_DELEGATE_OneParam(FOnNavigatePropertyName, TSharedPtr<FLiveConfigPropertyTreeNode>);
35 DECLARE_DELEGATE_OneParam(FOnNavigateValue, TSharedPtr<FLiveConfigPropertyTreeNode>);
36 DECLARE_DELEGATE_OneParam(FOnScrollToProperty, FLiveConfigProperty);
37
38 SLATE_BEGIN_ARGS(SLiveConfigPropertyRow) {}
39 SLATE_EVENT(FOnDeleteProperty, OnDeleteProperty)
40 SLATE_EVENT(FOnAddPropertyAtFolder, OnAddPropertyAtFolder)
41 SLATE_EVENT(FOnBulkTagFolder, OnBulkTagFolder)
42 SLATE_EVENT(FIsNameDuplicate, IsNameDuplicate)
43 SLATE_EVENT(FOnPropertyPropertyChanged, OnChanged)
44 SLATE_EVENT(FOnRequestRefresh, OnRequestRefresh)
45 SLATE_EVENT(FOnNavigatePropertyName, OnNavigateDown)
46 SLATE_EVENT(FOnNavigatePropertyName, OnNavigateUp)
47 SLATE_EVENT(FOnNavigateValue, OnNavigateValue)
48 SLATE_EVENT(FOnScrollToProperty, OnRequestScroll)
49 SLATE_EVENT(FSimpleDelegate, OnAddNewTag)
50 SLATE_EVENT(FSimpleDelegate, OnMouseDown)
51 SLATE_END_ARGS()
52
53 void Construct(const FArguments& InArgs, const TSharedRef<STableViewBase>& InOwnerTable, TSharedPtr<FLiveConfigPropertyTreeNode>
54 InItem, int32 InIndex);
55
56 void RequestValueFocus() { bNeedsValueFocus = true; }
57
58 bool IsReadOnly() const;
59
60 virtual void Tick(const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime) override;
61
62 virtual TSharedRef<SWidget> GenerateWidgetForColumn(const FName& ColumnName) override;
63
64 virtual FReply OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
65
66 static constexpr float RowHeight = 32.0f;
67
68private:
69 TSharedRef<SWidget> GenerateNameColumnWidget();
70 TSharedRef<SWidget> GenerateDescriptionColumnWidget();
71 TSharedRef<SWidget> GenerateTypeColumnWidget();
72 TSharedRef<SWidget> GenerateValueColumnWidget();
73 TSharedRef<SWidget> GenerateTagsColumnWidget();
74 TSharedRef<SWidget> GenerateActionsColumnWidget();
75
76 void GenerateSubPropertiesForStruct(const UScriptStruct* Struct);
77 void DeleteSubProperties();
78
79 void RefreshTags();
80 void OnTagChanged();
81 void OnAddNewTagClicked();
82 FReply OnFindUsages();
83 FReply HandleEditDescription();
84
85 TSharedPtr<FLiveConfigPropertyTreeNode> Item;
86 FOnDeleteProperty OnDeleteProperty;
87 FOnAddPropertyAtFolder OnAddPropertyAtFolder;
88 FOnBulkTagFolder OnBulkTagFolder;
89 FIsNameDuplicate OnIsNameDuplicate;
90 FOnPropertyPropertyChanged OnChanged;
91 FOnRequestRefresh OnRequestRefresh;
92 FOnNavigatePropertyName OnNavigateDown;
93 FOnNavigatePropertyName OnNavigateUp;
94 FOnNavigateValue OnNavigateValue;
95 FOnScrollToProperty OnRequestScroll;
96 TSharedPtr<class SScrollBox> TagScrollBox;
97 TSharedPtr<class SEditableTextBox> NameTextBox;
98 TSharedPtr<class SLiveConfigPropertyValueWidget> ValueWidget;
99 bool bNeedsFocus = false;
100 bool bNeedsValueFocus = false;
101 bool bIsCommitting = false;
102 bool bJustFinishedEnterCommit = false;
103 FSimpleDelegate OnMouseDown;
104 FSimpleDelegate OnAddNewTag;
105};
Definition SLiveConfigPropertyRow.h:14
Definition SLiveConfigPropertyManager.h:18
Definition LiveConfigPropertyName.h:14
Definition SLiveConfigPropertyRow.h:17