ArticyXImporter
ArticyXImporter for Unreal Engine
Loading...
Searching...
No Matches
SArticyIdProperty.h
1//
2// Copyright (c) 2023 articy Software GmbH & Co. KG. All rights reserved.
3//
4
5#pragma once
6
7#include "CoreMinimal.h"
8#include "Widgets/Input/SComboButton.h"
9#include "Widgets/Layout/SBorder.h"
10#include "Slate/AssetPicker/SArticyObjectTileView.h"
11#include "PropertyHandle.h"
12#include "Customizations/ArticyEditorCustomizationManager.h"
13#include "Widgets/Layout/SBox.h"
14#include "Widgets/Input/SButton.h"
15#include "ContentBrowserDelegates.h"
16#include "AssetPicker/SArticyObjectAssetPicker.h"
17
18namespace ArticyRefPropertyConstants
19{
20 const FVector2D ThumbnailSize(64, 64);
21 const FMargin ThumbnailPadding(2, 2);
22}
23
29class SFixedSizeMenuComboButton : public SComboButton
30{
31protected:
32 virtual void Tick(const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime) override;
33};
34
40class ARTICYEDITOR_API SArticyIdProperty : public SCompoundWidget
41{
42public:
43
44 SLATE_BEGIN_ARGS(SArticyIdProperty)
45 : _ArticyIdToDisplay(FArticyId())
46 , _TopLevelClassRestriction(UArticyObject::StaticClass())
47 , _HighExtender(nullptr)
48 , _CopyAction()
49 , _PasteAction()
50 , _bExactClass(false)
51 , _bExactClassEditable(true)
52 , _bIsReadOnly(false)
53 {}
54 SLATE_ATTRIBUTE(FArticyId, ArticyIdToDisplay)
55 SLATE_EVENT(FOnArticyIdChanged, OnArticyIdChanged)
56 SLATE_ATTRIBUTE(UClass*, TopLevelClassRestriction)
57 SLATE_ARGUMENT(TSharedPtr<FExtender>, HighExtender)
58 SLATE_ARGUMENT(FUIAction, CopyAction)
59 SLATE_ARGUMENT(FUIAction, PasteAction)
60 SLATE_ATTRIBUTE(bool, bExactClass)
61 SLATE_ATTRIBUTE(bool, bExactClassEditable)
62 SLATE_ATTRIBUTE(bool, bIsReadOnly)
63 SLATE_END_ARGS()
64
65
70 void Construct(const FArguments& InArgs);
71
79 virtual void Tick(const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime) override;
80
85
86private:
87 TAttribute<FArticyId> ArticyIdToDisplay;
88 FOnArticyIdChanged OnArticyIdChanged;
89 TAttribute<UClass*> TopLevelClassRestriction;
90 TAttribute<bool> bExactClass;
91 TAttribute<bool> bExactClassEditable;
92 TAttribute<bool> bIsReadOnly;
93
94 // the articy object this widget currently represents
95 TWeakObjectPtr<UArticyObject> CachedArticyObject = nullptr;
96 mutable FArticyId CachedArticyId = FArticyId();
97
98 TSharedPtr<SHorizontalBox> ChildBox;
99 TSharedPtr<SArticyObjectTileView> TileView;
100 TSharedPtr<SBox> TileContainer;
101 TSharedPtr<SBorder> ThumbnailBorder;
102 TSharedPtr<FSlateBrush> ImageBrush;
103 TSharedPtr<SWidget> ComboButton;
105 TSharedPtr<SHorizontalBox> CustomizationButtonBox_High;
107 TSharedPtr<SHorizontalBox> CustomizationButtonBox_Low;
108
109private:
115 void Update(const FArticyId& NewId);
116
120 void UpdateWidget();
121
127 void ApplyArticyRefCustomization(const FArticyIdPropertyWidgetCustomizationInfo& Customization);
128
134 void ApplyArticyRefCustomizations(const TArray<FArticyIdPropertyWidgetCustomizationInfo>& Customizations);
135
136private:
142 TSharedRef<SWidget> CreateArticyObjectAssetPicker();
143
149 bool IsClassFilterEditable() const;
150
156 void OnArticyObjectPicked(const FAssetData& ArticyObjectData) const;
157
163 FReply OnArticyButtonClicked() const;
164
172 FReply OnAssetThumbnailDoubleClick(const FGeometry& InMyGeometry, const FPointerEvent& InMouseEvent) const;
173
179 FText OnGetArticyObjectDisplayName() const;
180
186 FArticyId GetCurrentObjectID() const;
187
193 bool CanActivate() const { return !bIsReadOnly.Get(); }
194
198 void OnCopyProperty() const;
199
203 void OnPasteProperty();
204
210 bool CanPasteProperty() const;
211
212private:
213 FUIAction CopyAction;
214 FUIAction PasteAction;
216 TArray<TSharedPtr<IArticyIdPropertyWidgetCustomization>> ActiveCustomizations;
217
218 TSharedPtr<FExtender> CustomizationHighExtender;
220 TArray<TSharedPtr<FExtender>> ArticyIdCustomizationExtenders;
221
222};
Definition SArticyIdProperty.h:41
void CreateInternalWidgets()
Definition SArticyIdProperty.cpp:106
virtual void Tick(const FGeometry &AllottedGeometry, const double InCurrentTime, const float InDeltaTime) override
Definition SArticyIdProperty.cpp:94
void Construct(const FArguments &InArgs)
Definition SArticyIdProperty.cpp:55
Definition SArticyIdProperty.h:30
virtual void Tick(const FGeometry &AllottedGeometry, const double InCurrentTime, const float InDeltaTime) override
Definition SArticyIdProperty.cpp:30
Holds information for customizing an ArticyIdPropertyWidget.
Definition ArticyEditorCustomizationManager.h:20
Definition ArticyBaseTypes.h:18