Widget Studio
WSButtonBase.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 "Widgets/WSBase.h"
14#include "Blueprint/UserWidget.h"
15#include "WSButtonBase.generated.h"
16
17DECLARE_DELEGATE(FWSButtonLambda);
18DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FWSButtonDelegate, UWidgetStudioButtonBase*, CallingButton);
19DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FWSButtonToggledDelegate, UWidgetStudioButtonBase*, CallingButton, bool, NewCheckedState);
20
25UCLASS()
26class WIDGETSTUDIORUNTIME_API UWidgetStudioButtonBase : public UWidgetStudioBase
27{
28 GENERATED_BODY()
29
30 // Depicts if the button is currently being pressed down.
31 bool bIsPressed = false;
32
33protected:
34 virtual void NativeOnInitialized() override;
35 virtual FReply NativeOnMouseButtonDown(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) override;
36 virtual FReply NativeOnMouseButtonUp(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) override;
37 virtual void NativeOnMouseCaptureLost(const FCaptureLostEvent& CaptureLostEvent) override;
38 virtual void NativeOnMouseLeave(const FPointerEvent& InMouseEvent) override;
39
40 FTimerHandle DoublePressTimer;
41
42 /* States */
43
47 UPROPERTY(EditAnywhere, Category = "Widget Studio|State")
48 bool bIsCheckable = false;
49
54 UPROPERTY(EditAnywhere, Category = "Widget Studio|State", Meta = (EditCondition="bIsCheckable == true"))
55 bool bIsChecked = false;
56
61 UPROPERTY(EditAnywhere, Category = "Widget Studio|State", Meta = (EditCondition="bIsCheckable == true"))
62 bool bIsCheckedStateLocked = false;
63
64public:
65
66 /* Bindings */
67
71 FWSButtonLambda OnPressedLambda;
72
74 UPROPERTY(BlueprintAssignable, Category = "Widget Studio|Event")
75 FWSButtonDelegate OnPressed;
76
78 UPROPERTY(BlueprintAssignable, Category = "Widget Studio|Event")
79 FWSButtonDelegate OnReleased;
80
82 UPROPERTY(BlueprintAssignable, Category = "Widget Studio|Event")
83 FWSButtonDelegate OnDoublePressed;
84
88 UFUNCTION(BlueprintCallable, Category = "Widget Studio|Event|Advanced")
89 void ExecuteOnPressedLambda(UWidgetStudioButtonBase* CallingButton)
90 {
91 OnPressedLambda.ExecuteIfBound();
92 }
93
98 UPROPERTY(BlueprintAssignable, Category = "Widget Studio|Event")
99 FWSButtonToggledDelegate OnToggled;
100
101 UPROPERTY()
102 bool bForceCheckable = false;
103
108 UPROPERTY()
109 bool bIsInteractable = true;
110
111 /* Helpers */
112
118 UFUNCTION(BlueprintPure, Category = "Widget Studio|Helper|State")
119 bool IsCheckable() const;
120
125 UFUNCTION(BlueprintPure, Category = "Widget Studio|Helper|State")
126 bool IsChecked() const;
127
129 UFUNCTION(BlueprintPure, Category = "Widget Studio|Helper|State")
130 bool IsCheckedStateLocked() const;
131
133 UFUNCTION(BlueprintPure, Category = "Widget Studio|Helper|State")
134 bool IsPressed() const;
135
136 /* Modifiers */
137
142 UFUNCTION(BlueprintCallable, Category = "Widget Studio|Modifier|State")
143 virtual void SetCheckable(bool bNewCheckableState);
144
151 UFUNCTION(BlueprintCallable, Category = "Widget Studio|Modifier|State")
152 virtual void SetChecked(bool bNewCheckedState, bool bBroadcast = true);
153
158 UFUNCTION(BlueprintCallable, Category = "Widget Studio|Modifier|State")
159 virtual void SetCheckedLockedState(bool bNewCheckedState);
160};
The base User Widget class for Widget Studio.
Definition: WSBase.h:32
Contain the fundamental logic for a Widget Studio button.
Definition: WSButtonBase.h:27