Arma Reforger Explorer
1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Toggle main menu visibility
Loading...
Searching...
No Matches
SCR_ListMenuEntryComponent.c
Go to the documentation of this file.
1
/*
2
Base class for list menus, providing unified visuals
3
*/
4
//------------------------------------------------------------------------------------------------
5
class
SCR_ListMenuEntryComponent
:
SCR_ScriptedWidgetComponent
6
{
7
// Text scrolling anims
8
protected
ref array<ref SCR_HorizontalScrollAnimationComponent>
m_aScrollAnimations
= {};
9
10
// Mouse buttons
11
// These arrays need to be filled by child classes with the specific buttons
12
protected
bool
m_bInnerButtonInteraction
;
13
protected
ref array<SCR_ModularButtonComponent>
m_aMouseButtons
= {};
14
15
// Main
16
protected
SCR_ModularButtonComponent
m_MainModularButton
;
17
protected
bool
m_bUnavailable
;
//Entry is unavailable but the widget still needs to be interactable.
18
protected
bool
m_bFocused
;
19
20
// Tooltip
21
protected
SCR_ScriptedWidgetTooltip
m_CurrentTooltip
;
22
23
// Invokers
24
// Called when a mouse interaction button is pressed
25
protected
ref
ScriptInvokerString
m_OnMouseInteractionButtonClicked
;
26
27
protected
ref
ScriptInvokerScriptedWidgetComponent
m_OnFocus
;
28
protected
ref
ScriptInvokerScriptedWidgetComponent
m_OnFocusLost
;
29
protected
ref
ScriptInvokerScriptedWidgetComponent
m_OnMouseEnter
;
30
31
// ---- OVERRIDES ----
32
//------------------------------------------------------------------------------------------------
33
override
void
HandlerAttached
(
Widget
w)
34
{
35
// Setup scroll animations
36
EnableTextAnimations
(
false
);
37
38
// Mouse Buttons
39
foreach
(SCR_ModularButtonComponent button :
m_aMouseButtons
)
40
{
41
button.m_OnMouseEnter.Insert(
OnInnerButtonHover
);
42
button.m_OnMouseLeave.Insert(
OnInnerButtonLeave
);
43
}
44
45
super.HandlerAttached(w);
46
}
47
48
//------------------------------------------------------------------------------------------------
49
override
void
HandlerDeattached
(
Widget
w)
50
{
51
if
(
m_OnFocus
)
52
m_OnFocus
.Clear();
53
54
if
(
m_OnFocusLost
)
55
m_OnFocusLost
.Clear();
56
57
if
(
m_OnMouseEnter
)
58
m_OnMouseEnter
.Clear();
59
60
SCR_ScriptedWidgetTooltip
.
GetOnTooltipShow
().Remove(
OnTooltipShow
);
61
62
super.HandlerDeattached(w);
63
}
64
65
//------------------------------------------------------------------------------------------------
66
override
bool
OnClick
(
Widget
w,
int
x,
int
y,
int
button)
67
{
68
// LMB check
69
if
(button != 0 ||
m_bInnerButtonInteraction
)
70
return
false
;
71
72
return
super.OnClick(w, x, y, button);
73
}
74
75
//------------------------------------------------------------------------------------------------
76
override
bool
OnDoubleClick
(
Widget
w,
int
x,
int
y,
int
button)
77
{
78
// LMB check
79
if
(button != 0 ||
m_bInnerButtonInteraction
)
80
return
false
;
81
82
return
super.OnDoubleClick(w, x, y, button);
83
}
84
85
//------------------------------------------------------------------------------------------------
86
override
bool
OnFocus
(
Widget
w,
int
x,
int
y)
87
{
88
if
(
m_OnFocus
)
89
m_OnFocus
.Invoke(
this
);
90
91
m_bFocused
=
true
;
92
UpdateModularButtons
();
93
94
if
(!
m_aScrollAnimations
.IsEmpty())
95
EnableTextAnimations
(
true
);
96
97
// Tooltips
98
SCR_ScriptedWidgetTooltip
.
GetOnTooltipShow
().Insert(
OnTooltipShow
);
99
100
return
super.OnFocus(w, x, y);
101
}
102
103
//------------------------------------------------------------------------------------------------
104
override
bool
OnFocusLost
(
Widget
w,
int
x,
int
y)
105
{
106
if
(
m_OnFocusLost
)
107
m_OnFocusLost
.Invoke(
this
);
108
109
m_bFocused
=
false
;
110
UpdateModularButtons
();
111
112
// Stop anim
113
EnableTextAnimations
(
false
);
114
115
// Tooltips
116
SCR_ScriptedWidgetTooltip
.
GetOnTooltipShow
().Remove(
OnTooltipShow
);
117
118
return
super.OnFocusLost(w, x, y);
119
}
120
121
//------------------------------------------------------------------------------------------------
122
override
bool
OnMouseEnter
(
Widget
w,
int
x,
int
y)
123
{
124
if
(
m_OnMouseEnter
)
125
m_OnMouseEnter
.Invoke(
this
);
126
127
return
super.OnMouseEnter(w, x, y);
128
}
129
130
// ---- PROTECTED ----
131
//------------------------------------------------------------------------------------------------
132
protected
void
OnTooltipShow
(
SCR_ScriptedWidgetTooltip
tooltip)
133
{
134
m_CurrentTooltip
= tooltip;
135
}
136
137
//------------------------------------------------------------------------------------------------
138
protected
void
OnInnerButtonHover
()
139
{
140
m_bInnerButtonInteraction
=
true
;
141
}
142
143
//------------------------------------------------------------------------------------------------
144
protected
void
OnInnerButtonLeave
()
145
{
146
m_bInnerButtonInteraction
=
false
147
}
148
149
//------------------------------------------------------------------------------------------------
151
protected
void
EnableTextAnimations
(
bool
enable)
152
{
153
foreach
(SCR_HorizontalScrollAnimationComponent anim :
m_aScrollAnimations
)
154
{
155
HandleTextAnimation
(anim, enable);
156
}
157
}
158
159
//------------------------------------------------------------------------------------------------
162
protected
void
HandleTextAnimation
(SCR_HorizontalScrollAnimationComponent anim,
bool
enable)
163
{
164
if
(!anim)
165
return
;
166
167
if
(enable)
168
{
169
if
(!anim.GetContentFitX())
170
{
171
anim.AnimationStart();
172
}
173
else
174
{
175
anim.AnimationStop();
176
anim.ResetPosition();
177
}
178
179
return
;
180
}
181
182
// Disabled
183
anim.AnimationStop();
184
anim.ResetPosition();
185
}
186
187
//------------------------------------------------------------------------------------------------
188
protected
void
UpdateModularButtons
()
189
{
190
// --- Main elements color ---
191
// Toggling the line's main modular button component is used as a quck way to change the line's elements while mantaining it active (they inherit color)
192
if
(!
m_MainModularButton
)
193
m_MainModularButton
= SCR_ModularButtonComponent.FindComponent(
m_wRoot
);
194
if
(!
m_MainModularButton
)
195
return
;
196
197
m_MainModularButton
.SetToggled(
m_bUnavailable
,
false
);
198
199
// Name
200
Color
color =
Color
.FromInt(
UIColors
.NEUTRAL_INFORMATION.PackToInt());
201
if
(
m_bUnavailable
)
202
color =
Color
.FromInt(
UIColors
.IDLE_DISABLED.PackToInt());
203
204
SCR_ButtonEffectColor
nameEffect =
SCR_ButtonEffectColor
.Cast(
m_MainModularButton
.FindEffect(
SCR_ListEntryHelper
.EFFECT_NAME_COLOR));
205
if
(nameEffect)
206
nameEffect.
m_cFocusLost
= color;
207
208
// Elements
209
if
(!
m_bUnavailable
)
210
color =
Color
.FromInt(
UIColors
.NEUTRAL_ACTIVE_STANDBY.PackToInt());
211
212
array<SCR_ButtonEffectBase> effects =
m_MainModularButton
.FindAllEffects(
SCR_ListEntryHelper
.EFFECT_WRAPPER_COLOR);
213
if
(effects.IsEmpty())
214
return
;
215
216
foreach
(SCR_ButtonEffectBase effect : effects)
217
{
218
SCR_ButtonEffectColor
colorEffect =
SCR_ButtonEffectColor
.Cast(effect);
219
if
(colorEffect)
220
colorEffect.
m_cFocusLost
= color;
221
}
222
223
m_MainModularButton
.InvokeAllEnabledEffects(
true
);
224
}
225
226
//------------------------------------------------------------------------------------------------
227
protected
void
OpacityAnimation
(
int
time,
float
opacityEnd)
228
{
229
AnimateWidget
.
Opacity
(
GetRootWidget
(), opacityEnd, time);
230
}
231
232
// ---- PUBLIC ----
233
//------------------------------------------------------------------------------------------------
235
void
AnimateOpacity
(
int
delay,
float
animationTime,
float
opacityEnd,
float
opacityStart = -1)
236
{
237
if
(opacityStart != -1)
238
GetRootWidget
().SetOpacity(opacityStart);
239
240
GetGame
().GetCallqueue().Remove(
OpacityAnimation
);
241
242
// Start animating with a delay to prevent flickering
243
GetGame
().GetCallqueue().CallLater(
OpacityAnimation
, delay,
false
, animationTime, opacityEnd);
244
}
245
246
//------------------------------------------------------------------------------------------------
247
bool
IsInnerButtonInteraction
()
248
{
249
return
m_bInnerButtonInteraction
;
250
}
251
252
//------------------------------------------------------------------------------------------------
253
bool
IsFocused
()
254
{
255
return
m_bFocused
;
256
}
257
258
//------------------------------------------------------------------------------------------------
259
bool
IsAvailable
()
260
{
261
return
!
m_bUnavailable
;
262
}
263
264
//------------------------------------------------------------------------------------------------
265
ScriptInvokerString
GetOnMouseInteractionButtonClicked
()
266
{
267
if
(!
m_OnMouseInteractionButtonClicked
)
268
m_OnMouseInteractionButtonClicked
=
new
ScriptInvokerString
();
269
270
return
m_OnMouseInteractionButtonClicked
;
271
}
272
273
//------------------------------------------------------------------------------------------------
274
ScriptInvokerScriptedWidgetComponent
GetOnFocus
()
275
{
276
if
(!
m_OnFocus
)
277
m_OnFocus
=
new
ScriptInvokerScriptedWidgetComponent
();
278
279
return
m_OnFocus
;
280
}
281
282
//------------------------------------------------------------------------------------------------
283
ScriptInvokerScriptedWidgetComponent
GetOnFocusLost
()
284
{
285
if
(!
m_OnFocusLost
)
286
m_OnFocusLost
=
new
ScriptInvokerScriptedWidgetComponent
();
287
288
return
m_OnFocusLost
;
289
}
290
291
//------------------------------------------------------------------------------------------------
292
ScriptInvokerScriptedWidgetComponent
GetOnMouseEnter
()
293
{
294
if
(!
m_OnMouseEnter
)
295
m_OnMouseEnter
=
new
ScriptInvokerScriptedWidgetComponent
();
296
297
return
m_OnMouseEnter
;
298
}
299
}
GetGame
ArmaReforgerScripted GetGame()
Definition
game.c:1398
ScriptInvokerString
ScriptInvokerBase< ScriptInvokerStringMethod > ScriptInvokerString
Definition
SCR_ScriptInvokerHelper.c:75
ScriptInvokerScriptedWidgetComponent
ScriptInvokerBase< ScriptInvokerScriptedWidgetComponentMethod > ScriptInvokerScriptedWidgetComponent
Definition
SCR_ScriptedWidgetComponent.c:4
AnimateWidget
Definition
AnimateWidget.c:3
AnimateWidget::Opacity
static WidgetAnimationOpacity Opacity(Widget widget, float targetValue, float speed, bool toggleVisibility=false)
Definition
AnimateWidget.c:167
Color
Definition
Color.c:13
SCR_ButtonEffectColor
Effect which colorizes a widget with given name.
Definition
SCR_ButtonEffectColor.c:4
SCR_ButtonEffectColor::m_cFocusLost
ref Color m_cFocusLost
Definition
SCR_ButtonEffectColor.c:35
SCR_ListEntryHelper
Definition
SCR_ListEntryHelper.c:2
SCR_ListMenuEntryComponent
Definition
SCR_ListMenuEntryComponent.c:6
SCR_ListMenuEntryComponent::m_bUnavailable
bool m_bUnavailable
Definition
SCR_ListMenuEntryComponent.c:17
SCR_ListMenuEntryComponent::EnableTextAnimations
void EnableTextAnimations(bool enable)
Apply behavior on all potentially longer entry text.
Definition
SCR_ListMenuEntryComponent.c:151
SCR_ListMenuEntryComponent::OnDoubleClick
override bool OnDoubleClick(Widget w, int x, int y, int button)
Definition
SCR_ListMenuEntryComponent.c:76
SCR_ListMenuEntryComponent::IsAvailable
bool IsAvailable()
Definition
SCR_ListMenuEntryComponent.c:259
SCR_ListMenuEntryComponent::OnInnerButtonLeave
void OnInnerButtonLeave()
Definition
SCR_ListMenuEntryComponent.c:144
SCR_ListMenuEntryComponent::m_CurrentTooltip
SCR_ScriptedWidgetTooltip m_CurrentTooltip
Definition
SCR_ListMenuEntryComponent.c:21
SCR_ListMenuEntryComponent::GetOnFocus
ScriptInvokerScriptedWidgetComponent GetOnFocus()
Definition
SCR_ListMenuEntryComponent.c:274
SCR_ListMenuEntryComponent::OnFocus
override bool OnFocus(Widget w, int x, int y)
Definition
SCR_ListMenuEntryComponent.c:86
SCR_ListMenuEntryComponent::OnClick
override bool OnClick(Widget w, int x, int y, int button)
Definition
SCR_ListMenuEntryComponent.c:66
SCR_ListMenuEntryComponent::IsInnerButtonInteraction
bool IsInnerButtonInteraction()
Definition
SCR_ListMenuEntryComponent.c:247
SCR_ListMenuEntryComponent::IsFocused
bool IsFocused()
Definition
SCR_ListMenuEntryComponent.c:253
SCR_ListMenuEntryComponent::OnInnerButtonHover
void OnInnerButtonHover()
Definition
SCR_ListMenuEntryComponent.c:138
SCR_ListMenuEntryComponent::HandlerDeattached
override void HandlerDeattached(Widget w)
Definition
SCR_ListMenuEntryComponent.c:49
SCR_ListMenuEntryComponent::HandlerAttached
override void HandlerAttached(Widget w)
Definition
SCR_ListMenuEntryComponent.c:33
SCR_ListMenuEntryComponent::m_OnFocus
ref ScriptInvokerScriptedWidgetComponent m_OnFocus
Definition
SCR_ListMenuEntryComponent.c:27
SCR_ListMenuEntryComponent::AnimateOpacity
void AnimateOpacity(int delay, float animationTime, float opacityEnd, float opacityStart=-1)
Animate whole widget opacity.
Definition
SCR_ListMenuEntryComponent.c:235
SCR_ListMenuEntryComponent::OnMouseEnter
override bool OnMouseEnter(Widget w, int x, int y)
Definition
SCR_ListMenuEntryComponent.c:122
SCR_ListMenuEntryComponent::m_OnMouseInteractionButtonClicked
ref ScriptInvokerString m_OnMouseInteractionButtonClicked
Definition
SCR_ListMenuEntryComponent.c:25
SCR_ListMenuEntryComponent::GetOnMouseInteractionButtonClicked
ScriptInvokerString GetOnMouseInteractionButtonClicked()
Definition
SCR_ListMenuEntryComponent.c:265
SCR_ListMenuEntryComponent::HandleTextAnimation
void HandleTextAnimation(SCR_HorizontalScrollAnimationComponent anim, bool enable)
Definition
SCR_ListMenuEntryComponent.c:162
SCR_ListMenuEntryComponent::m_bFocused
bool m_bFocused
Definition
SCR_ListMenuEntryComponent.c:18
SCR_ListMenuEntryComponent::OnTooltipShow
void OnTooltipShow(SCR_ScriptedWidgetTooltip tooltip)
Definition
SCR_ListMenuEntryComponent.c:132
SCR_ListMenuEntryComponent::GetOnFocusLost
ScriptInvokerScriptedWidgetComponent GetOnFocusLost()
Definition
SCR_ListMenuEntryComponent.c:283
SCR_ListMenuEntryComponent::OnFocusLost
override bool OnFocusLost(Widget w, int x, int y)
Definition
SCR_ListMenuEntryComponent.c:104
SCR_ListMenuEntryComponent::m_aScrollAnimations
ref array< ref SCR_HorizontalScrollAnimationComponent > m_aScrollAnimations
Definition
SCR_ListMenuEntryComponent.c:8
SCR_ListMenuEntryComponent::m_OnFocusLost
ref ScriptInvokerScriptedWidgetComponent m_OnFocusLost
Definition
SCR_ListMenuEntryComponent.c:28
SCR_ListMenuEntryComponent::m_OnMouseEnter
ref ScriptInvokerScriptedWidgetComponent m_OnMouseEnter
Definition
SCR_ListMenuEntryComponent.c:29
SCR_ListMenuEntryComponent::m_bInnerButtonInteraction
bool m_bInnerButtonInteraction
Definition
SCR_ListMenuEntryComponent.c:12
SCR_ListMenuEntryComponent::OpacityAnimation
void OpacityAnimation(int time, float opacityEnd)
Definition
SCR_ListMenuEntryComponent.c:227
SCR_ListMenuEntryComponent::m_aMouseButtons
ref array< SCR_ModularButtonComponent > m_aMouseButtons
Definition
SCR_ListMenuEntryComponent.c:13
SCR_ListMenuEntryComponent::UpdateModularButtons
void UpdateModularButtons()
Definition
SCR_ListMenuEntryComponent.c:188
SCR_ListMenuEntryComponent::GetOnMouseEnter
ScriptInvokerScriptedWidgetComponent GetOnMouseEnter()
Definition
SCR_ListMenuEntryComponent.c:292
SCR_ListMenuEntryComponent::m_MainModularButton
SCR_ModularButtonComponent m_MainModularButton
Definition
SCR_ListMenuEntryComponent.c:16
SCR_ScriptedWidgetComponent
Definition
SCR_ScriptedWidgetComponent.c:8
SCR_ScriptedWidgetComponent::m_wRoot
Widget m_wRoot
Definition
SCR_ScriptedWidgetComponent.c:9
SCR_ScriptedWidgetComponent::GetRootWidget
Widget GetRootWidget()
Definition
SCR_ScriptedWidgetComponent.c:51
SCR_ScriptedWidgetTooltip
Definition
SCR_ScriptedWidgetTooltip.c:16
SCR_ScriptedWidgetTooltip::GetOnTooltipShow
static ScriptInvokerTooltip GetOnTooltipShow()
Definition
SCR_ScriptedWidgetTooltip.c:396
UIColors
Definition
Constants.c:17
Widget
Definition
Widget.c:13
scripts
Game
UI
Menu
Common
SCR_ListMenuEntryComponent.c
Generated by
1.17.0