Widget Studio
WSModernSpinBox.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#include "WSModernCard.h"
14#include "Components/HorizontalBox.h"
15#include "Components/Overlay.h"
16#include "Widgets/WSSliderBase.h"
17#include "Widgets/Basic/WSIcon.h"
18#include "Widgets/Basic/WSText.h"
19#include "WSModernSpinBox.generated.h"
20
24UCLASS()
25class WIDGETSTUDIORUNTIME_API UWidgetStudioModernSpinBox : public UWidgetStudioSliderBase
26{
27 GENERATED_BODY()
28
29protected:
30
31 virtual TSharedRef<SWidget> RebuildWidget() override;
32 virtual int32 NativePaint(const FPaintArgs& Args, const FGeometry& AllottedGeometry, const FSlateRect& MyCullingRect, FSlateWindowElementList& OutDrawElements, int32 LayerId, const FWidgetStyle& InWidgetStyle, bool bParentEnabled) const override;
33 virtual FReply NativeOnMouseButtonDown(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) override;
34 virtual FReply NativeOnMouseWheel(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) override;
35 virtual void SynchronizeProperties() override;
36 virtual void InitializeStyling() override;
37 virtual void UpdateStyling() override;
38
39 // Tick is being used instead of timers due to an issue where the slate timing gets halted when
40 // the left mouse button is pressed.
41 // TODO: Find an alternative method that can utilize timers WHEN the left mouse button is being pressed.
42 virtual void NativeTick(const FGeometry& MyGeometry, float InDeltaTime) override;
43
44 UFUNCTION()
45 void OnTextCommitted(const FText& InText, ETextCommit::Type InCommitMethod);
46
51 UFUNCTION()
52 void UpdateValueOnMouseMovement();
53
54 /* Widget Components */
55
56 UPROPERTY(BlueprintReadOnly, Category = "Widgets")
57 USizeBox* SizeBox = nullptr;
58
59 UPROPERTY(BlueprintReadOnly, Category = "Widgets")
60 UOverlay* Overlay = nullptr;
61
62 UPROPERTY(BlueprintReadOnly, Category = "Widgets")
63 UWidgetStudioModernCard* BackgroundIndicator = nullptr;
64
65 UPROPERTY(BlueprintReadOnly, Category = "Widgets")
66 UHorizontalBox* HorizontalBox = nullptr;
67
68 UPROPERTY(BlueprintReadOnly, Category = "Widgets")
69 UWidgetStudioText* LabelItem = nullptr;
70
71 UPROPERTY(BlueprintReadOnly, Category = "Widgets")
72 UOverlay* BackgroundOverlay = nullptr;
73
74 UPROPERTY(BlueprintReadOnly, Category = "Widgets")
75 UWidgetStudioModernCard* Background = nullptr;
76
77 UPROPERTY(BlueprintReadOnly, Category = "Widgets")
78 UWidgetStudioModernCard* BackgroundFill = nullptr;
79
80 UPROPERTY(BlueprintReadOnly, Category = "Widgets")
81 UHorizontalBox* ContentHorizontalBox = nullptr;
82
83 UPROPERTY(BlueprintReadOnly, Category = "Widgets")
84 UWidgetStudioIcon* ArrowLeft = nullptr;
85
86 UPROPERTY(BlueprintReadOnly, Category = "Widgets")
87 UWidgetStudioIcon* ArrowRight = nullptr;
88
89 UPROPERTY(BlueprintReadOnly, Category = "Widgets")
90 UEditableTextBox* ValueInput = nullptr;
91
92
93 /* Internal Properties */
94
96 bool bIsPressed = false;
97 bool bIsLeftArrowPressed = false;
98 bool bIsRightArrowPressed = false;
99
101 float InitialMousePos = 0.f;
102 float LastMousePos = 0.f;
103
104 /* The amount of time the left mouse button has been pressed */
105 float PressTime = 0.f;
106
107
108 /* Properties */
109
111 UPROPERTY(EditAnywhere, Category="Widget Studio")
112 FText Label;
113
118 UPROPERTY(EditAnywhere, Category="Widget Studio|Input")
119 bool bEnableArrowButtons = true;
120
122 UPROPERTY(EditAnywhere, Category="Widget Studio|Input")
123 bool bEnableMouseWheelInput = true;
124
129 UPROPERTY(EditAnywhere, Category="Widget Studio|Input")
130 bool bEnableDragInput = true;
131
133 UPROPERTY(EditAnywhere, Category="Widget Studio|Color")
134 EPalette BackgroundColor = EPalette::PrimaryBackground;
135
137 UPROPERTY(EditAnywhere, Category="Widget Studio|Color")
138 EPalette ContentColor = EPalette::PrimaryContent;
139
141 UPROPERTY(EditAnywhere, Category="Widget Studio|Color")
142 EPalette IndicatorColor = EPalette::PrimaryAccent;
143
144public:
145
146 /* Helpers */
147
149 UFUNCTION(BlueprintPure, Category="Widget Studio|Helper")
150 FText GetLabel() const;
151
153 UFUNCTION(BlueprintPure, Category="Widget Studio|Helper")
154 bool AreArrowButtonsEnabled() const;
155
157 UFUNCTION(BlueprintPure, Category="Widget Studio|Helper")
158 bool IsMouseWheelInputEnabled() const;
159
161 UFUNCTION(BlueprintPure, Category="Widget Studio|Helper")
162 bool IsDragInputEnabled() const;
163
165 UFUNCTION(BlueprintPure, Category="Widget Studio|Helper")
166 EPalette GetBackgroundColor() const;
167
169 UFUNCTION(BlueprintPure, Category="Widget Studio|Helper")
170 EPalette GetContentColor() const;
171
173 UFUNCTION(BlueprintPure, Category="Widget Studio|Helper")
174 EPalette GetIndicatorColor() const;
175
176 /* Modifiers */
177
182 UFUNCTION(BlueprintCallable, Category="Widget Studio|Modifier")
183 void SetLabelText(const FText NewText);
184
189 UFUNCTION(BlueprintCallable, Category="Widget Studio|Modifier")
190 void SetArrowButtonsEnabled(const bool bState);
191
196 UFUNCTION(BlueprintCallable, Category="Widget Studio|Modifier")
197 void SetMouseWheelInputEnabled(const bool bState);
198
203 UFUNCTION(BlueprintCallable, Category="Widget Studio|Modifier")
204 void SetDragInputEnabled(const bool bState);
205
210 UFUNCTION(BlueprintCallable, Category="Widget Studio|Modifier")
211 void SetBackgroundColor(const EPalette NewColor);
212
217 UFUNCTION(BlueprintCallable, Category="Widget Studio|Modifier")
218 void SetContentColor(const EPalette NewColor);
219
224 UFUNCTION(BlueprintCallable, Category="Widget Studio|Modifier")
225 void SetIndicatorColor(const EPalette NewColor);
226
227 /* Overrides */
228 virtual void SetValue(float NewValue, bool bBroadcast = true) override;
229};
A pre-setup widget that works with power of two icons.
Definition: WSIcon.h:53
A rounded card for background usage.
Definition: WSModernCard.h:55
A modernly styled spin box from Widget Studio.
Definition: WSModernSpinBox.h:26
Base class for building sliders.
Definition: WSSliderBase.h:23
A custom text widget setup to work with the Typography Styling.
Definition: WSText.h:92