Widget Studio
WSSubsystem.h
1/*
2* Copyright (c) 2021 THEIA INTERACTIVE. All rights reserved.
3*
4* Website: https://widgetstudio.design
5* Documentation: https://docs.widgetstudio.design
6* Support: marketplace@theia.io
7* Marketplace FAQ: https://marketplacehelp.epicgames.com
8*/
9
10#pragma once
11
12#include "CoreMinimal.h"
13
14/* used for log category - do not remove */
15#include "WidgetStudioRuntime.h"
16
17#include "Subsystems/EngineSubsystem.h"
18#include "Theme/WSIconSet.h"
19#include "Theme/WSTheme.h"
20#include "Theme/WSTypography.h"
21#include "WSSubsystem.generated.h"
22
23extern int32 DefaultBorderRadius;
24extern float DefaultIdealWidth;
25extern float DefaultIdealHeight;
26
27DECLARE_DYNAMIC_MULTICAST_DELEGATE(FStyleDelegate);
28DECLARE_DYNAMIC_MULTICAST_DELEGATE(FStartInitDelegate);
29DECLARE_DYNAMIC_MULTICAST_DELEGATE(FEndInitDelegate);
30
31//To access: UWidgetStudioSubsystem* WidgetStudio = GEngine->GetEngineSubsystem<UWidgetStudioSubsystem>();
32
36UCLASS(Blueprintable, BlueprintType, Category = "Widget Studio")
37class WIDGETSTUDIORUNTIME_API UWidgetStudioSubsystem final : public UEngineSubsystem
38{
39 GENERATED_BODY()
40
41public:
42 /*
43 * Settings
44 */
45
46 UPROPERTY(EditAnywhere, Category = "Theme", Meta = (HideViewOptions, DisplayThumbnail = "false", ToolTip = "Choose the current Widget Studio theme"))
47 TSoftObjectPtr<UWidgetStudioTheme> Theme;
48
49 UPROPERTY(EditAnywhere, Category = "Typography", Meta = (HideViewOptions, ToolTip = "Choose the font/type look and feel"))
50 TSoftObjectPtr<UWidgetStudioTypography> Typography;
51
52 UPROPERTY(EditAnywhere, Category = "Icon Set", Meta = (HideViewOptions, ToolTip = "Choose the icon style"))
53 TSoftObjectPtr<UWidgetStudioIconSet> IconSet;
54
55 UPROPERTY(EditAnywhere, Category = "Style", Meta = (ToolTip = "The corner roundness found on controls, such as buttons, comboboxs, etc."))
56 int32 BorderRadius = DefaultBorderRadius;
57
58 UPROPERTY(EditAnywhere, Category = "Style", Meta = (ToolTip = "The default x dimension of controls if not overridden via layouts."))
59 float IdealWidth = DefaultIdealWidth;
60
61 UPROPERTY(EditAnywhere, Category = "Style", Meta = (ToolTip = "The default y dimension of controls if not overridden via layouts."))
62 float IdealHeight = DefaultIdealHeight;
63
64 UPROPERTY(BlueprintAssignable, BlueprintReadWrite, BlueprintCallable, Category = "Widget Studio|Events")
65 FStyleDelegate OnStyleChanged;
66
67 UPROPERTY(BlueprintAssignable, BlueprintReadWrite, BlueprintCallable, Category = "Widget Studio|Inititalization")
68 FStartInitDelegate OnPluginStartedInit;
69
70 UPROPERTY(BlueprintAssignable, BlueprintReadWrite, BlueprintCallable, Category = "Widget Studio|Initialization")
71 FEndInitDelegate OnPluginFinishedInit;
72
73 // Begin BP Interface
74
79 UFUNCTION(BlueprintPure, Category = "Widget Studio|Style")
80 UWidgetStudioTheme *GetTheme();
81
86 UFUNCTION(BlueprintPure, Category = "Widget Studio|Style")
87 UWidgetStudioIconSet *GetIconSet();
88
93 UFUNCTION(BlueprintPure, Category = "Widget Studio|Style")
94 UWidgetStudioTypography *GetTypography();
95
100 UFUNCTION(BlueprintPure, Category = "Widget Studio|Style")
101 static int32 GetBorderRadius();
102
107 UFUNCTION(BlueprintPure, Category = "Widget Studio|Style")
108 static FVector2D GetControlDimensions();
109
119 UFUNCTION(BlueprintCallable, Category = "Widget Studio|Style")
120 bool SetTheme(TSoftObjectPtr<UWidgetStudioTheme> InTheme);
121
131 UFUNCTION(BlueprintCallable, Category = "Widget Studio|Style")
132 bool SetIconSet(TSoftObjectPtr<UWidgetStudioIconSet> InIconStyle);
133
143 UFUNCTION(BlueprintCallable, Category = "Widget Studio|Style")
144 bool SetTypography(TSoftObjectPtr<UWidgetStudioTypography> InTypography);
145
152 UFUNCTION(BlueprintCallable, Category = "Widget Studio|Style")
153 bool SetBorderRadius(int32 InRadius);
154
161 UFUNCTION(BlueprintCallable, Category = "Widget Studio|Style")
162 bool SetControlDimensions(FVector2D InDimensions);
163
164 UFUNCTION(BlueprintPure, Category = "Widget Studio|Initialization")
165 bool IsPluginInitialized() const
166 {
167 return bIsPluginInitialized;
168 }
169 //End BP Interface
170
171 // Begin USubsystem
172 virtual void Initialize(FSubsystemCollectionBase &Collection) override;
173 virtual void Deinitialize() override;
174 // End USubsystem
175
180 static UWidgetStudioSubsystem *GetInstance();
181
182private:
183 friend class UWidgetStudioTestClass;
184
190
191 virtual ~UWidgetStudioSubsystem() override;
192
197 void LoadValuesFromIni();
198
203 void SaveValuesToIni() const;
204
210 void HandleAssetRenamed(const FAssetData& AssetData, const FString& NewName);
211
212 void HandleAssetAdded(const FAssetData& AssetData);
213
214 bool bIsPluginInitialized = false;
215 bool bIsDataAssetRenameInProcess = false;
216
217 FString ChangedDataAssetName = TEXT("");
218 FString ChangedDataAssetType = TEXT("");
219
220 static UWidgetStudioSubsystem *Instance;
221};
Data asset that contains the current theme icon set.
Definition: WSIconSet.h:25
A singleton for managing widget styles and managing widget state instantiates when the plugin loads.
Definition: WSSubsystem.h:38
Test class to perform unit tests.
Definition: WSTestClass.h:23
Data asset that contains the current theme color palette.
Definition: WSTheme.h:21
Data asset that contains the current theme font and its styling.
Definition: WSTypography.h:41