This repository was archived by the owner on Jul 9, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCFControlsUtils.bas
More file actions
322 lines (226 loc) · 9.06 KB
/
CFControlsUtils.bas
File metadata and controls
322 lines (226 loc) · 9.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
B4J=true
Group=Cuppy Framework\Cuppy\Utilities
ModulesStructureVersion=1
Type=StaticCode
Version=5.51
@EndOfDesignText@
'This file contains function that are useful for controls and views
Private Sub Process_Globals
Private fx As JFX
Type TextMetric(Width As Double, Height As Double)
End Sub
'Set the Rotation a Control
Public Sub SetRotation(controlObj As Node, Angle As Float)
CSSUtils.SetStyleProperty(controlObj, "-fx-rotate", Angle)
End Sub
'Get the Rotation a Control
Public Sub GetRotation(controlObj As Node) As Float
Return CSSUtils.GetStyleProperty(controlObj, "-fx-rotate")
End Sub
'Sets a Control Background color
Public Sub SetBackgroundColor(controlObj As Node, color As String)
CSSUtils.SetStyleProperty( controlObj, "-fx-background-color", color)
End Sub
'Get a Control Background color
Public Sub GetBackgroundColor(controlObj As Node) As String
Return CSSUtils.GetStyleProperty(controlObj, "-fx-background-color")
End Sub
'Set a Control Border color
Public Sub SetBorderColor(controlObj As Node, color As String)
CSSUtils.SetStyleProperty( controlObj, "-fx-border-color", color)
End Sub
'Get a Control Border color
Public Sub GetBorderColor(controlObj As Node) As String
Return CSSUtils.GetStyleProperty( controlObj, "-fx-border-color")
End Sub
'Set a Control Border width
Public Sub SetBorderWidth(controlObj As Node, width As Int)
CSSUtils.SetStyleProperty (controlObj, "-fx-border-width", width)
End Sub
'Get a Control Border width
Public Sub GetBorderWidth(controlObj As Node) As Int
Return CSSUtils.GetStyleProperty (controlObj, "-fx-border-width")
End Sub
'Set a Control Border color and width
Public Sub SetBorder(controlObj As Node, color As String , width As Int)
SetBorderColor( controlObj, color)
SetBorderWidth(controlObj, width)
End Sub
'Set a Control Border radius
Public Sub SetBorderRadius(controlObj As Node, radius As Int)
CSSUtils.SetStyleProperty(controlObj, "-fx-border-radius", radius)
End Sub
'Get a Control Border radius
Public Sub GetBorderRadius(controlObj As Node) As Int
Return CSSUtils.GetStyleProperty(controlObj, "-fx-border-radius")
End Sub
'Set additional effects applied to the Control
Public Sub SetEffect(controlObj As Node, effect As String)
CSSUtils.SetStyleProperty(controlObj, "-fx-effect" , effect)
End Sub
'Get the additional effects applied to the Control
Public Sub GetEffect(controlObj As Node) As String
Return CSSUtils.GetStyleProperty(controlObj, "-fx-effect")
End Sub
'Removes additional effects applied to the Control
Public Sub RemoveEffect(controlObj As Node)
CSSUtils.SetStyleProperty(controlObj, "-fx-effect" , "none")
End Sub
'Sets a Control text color if supported like a label
Public Sub SetTextColor(controlObj As Node, color As String)
CSSUtils.SetStyleProperty(controlObj, "-fx-text-fill", color)
End Sub
'Gets a Control text color if supported like a label
Public Sub GetTextColor(controlObj As Node) As String
Return CSSUtils.GetStyleProperty(controlObj, "-fx-text-fill")
End Sub
'Makes a Form fullscreen.
Public Sub FullScreenForm(Frm As Form)
Dim joForm As JavaObject = Frm
Dim joStage As JavaObject = joForm.GetField("stage")
joStage.RunMethod("setMaximized", Array(True))
End Sub
#Region Add/remove Tooltip
'Add tooltip to an Image View
'JavaFX API Reference: http://download.java.net/jdk8/jfxdocs/javafx/scene/control/Tooltip.html
'FROM: https://www.b4x.com/android/forum/threads/add-a-tooltip-to-an-imageview.65439/
Public Sub AddImageViewToolTip(ControlObj As ImageView, msg As String)
Dim joToolTip As JavaObject
Dim joToolTip2 As JavaObject = joToolTip.InitializeNewInstance("javafx.scene.control.Tooltip", Array(msg))
joToolTip.RunMethod("install", Array(ControlObj, joToolTip2))
End Sub
'Remove tooltip from an Image View
'JavaFX API Reference: http://download.java.net/jdk8/jfxdocs/javafx/scene/control/Tooltip.html
'FROM: https://www.b4x.com/android/forum/threads/add-a-tooltip-to-an-imageview.65439/
Public Sub RemoveImageViewToolTip(ControlObj As ImageView)
Dim joToolTip As JavaObject
Dim joToolTip2 As JavaObject = joToolTip.InitializeNewInstance("javafx.scene.control.Tooltip", Array(""))
joToolTip.RunMethod("uninstall", Array(ControlObj, joToolTip2))
End Sub
'Add tooltip to a Control
'JavaFX API Reference: http://download.java.net/jdk8/jfxdocs/javafx/scene/control/Tooltip.html
'FROM: https://www.b4x.com/android/forum/threads/add-a-tooltip-to-an-imageview.65439/
Public Sub AddControlToolTip(ControlObj As Node, msg As String)
Dim joToolTip As JavaObject
Dim joToolTip2 As JavaObject = joToolTip.InitializeNewInstance("javafx.scene.control.Tooltip", Array(msg))
joToolTip.RunMethod("install", Array(ControlObj, joToolTip2))
End Sub
'Remove tooltip from a Control
'JavaFX API Reference: http://download.java.net/jdk8/jfxdocs/javafx/scene/control/Tooltip.html
'FROM: https://www.b4x.com/android/forum/threads/add-a-tooltip-to-an-imageview.65439/
Public Sub RemoveControlToolTip(ControlObj As Node)
Dim joToolTip As JavaObject
Dim joToolTip2 As JavaObject = joToolTip.InitializeNewInstance("javafx.scene.control.Tooltip", Array(""))
joToolTip.RunMethod("uninstall", Array(ControlObj, joToolTip2))
End Sub
'Add tooltip to a Pane
'JavaFX API Reference: http://download.java.net/jdk8/jfxdocs/javafx/scene/control/Tooltip.html
'FROM: https://www.b4x.com/android/forum/threads/add-a-tooltip-to-an-imageview.65439/
Public Sub AddPaneToolTip(PanelObj As Pane, msg As String)
Dim joToolTip As JavaObject
Dim joToolTip2 As JavaObject = joToolTip.InitializeNewInstance("javafx.scene.control.Tooltip", Array(msg))
joToolTip.RunMethod("install", Array(PanelObj, joToolTip2))
End Sub
'Remove tooltip from a Pane
'JavaFX API Reference: http://download.java.net/jdk8/jfxdocs/javafx/scene/control/Tooltip.html
'FROM: https://www.b4x.com/android/forum/threads/add-a-tooltip-to-an-imageview.65439/
Public Sub RemovePaneToolTip(PanelObj As Pane)
Dim joToolTip As JavaObject
Dim joToolTip2 As JavaObject = joToolTip.InitializeNewInstance("javafx.scene.control.Tooltip", Array(""))
joToolTip.RunMethod("uninstall", Array(PanelObj, joToolTip2))
End Sub
'Configure tooltip behaviour
'Call it before showing the MainForm in your Main module,
'it will apply to all tooltips in the application.
'
'Code:
'<code>
'Sub AppStart (Form1 As Form, Args() As String)
'
' 'Call it before Showing the Main form
' CFControlsUtils.ConfigureTooltip(200,5000,500)
'
' MainForm = Form1
' MainForm.RootPane.LoadLayout("1") 'Load the layout file.
' MainForm.Show
'
'End Sub
'</code>
'
'FROM: https://www.b4x.com/android/forum/threads/configure-tooltip-timings.76298/
Public Sub ConfigureTooltip(OpenDelay As Long,VisibleDuration As Long,CloseDelay As Long)
Dim MEJO As JavaObject = Me
Dim ClassShortName As String = MEJO.RunMethod("toString",Null)
ClassShortName = ClassShortName.SubString(ClassShortName.LastIndexOf("."))
Dim ModJO As JavaObject
ModJO.InitializeStatic(CFAppUtility.GetPackageName(Me) & ClassShortName)
If ModJO.RunMethod("setTooltipTimers",Array(OpenDelay, VisibleDuration, CloseDelay)) = False Then
Log($"*******${CRLF}Tooltip Configuration failed${CRLF}*******"$)
End If
End Sub
'Measure the required Height and Width a text needs to display well
Public Sub MeasureText(Text As String,TFont As Font) As TextMetric
Dim TM As TextMetric
TM.Initialize
Dim T As JavaObject
T.InitializeNewInstance("javafx.scene.text.Text",Array(Text))
T.RunMethod("setFont",Array(TFont))
TM.Width = T.RunMethod("prefWidth",Array(-1.0))
TM.Height = T.RunMethod("prefHeight",Array(TM.Width))
Return TM
End Sub
#if java
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import javafx.scene.control.Tooltip;
import javafx.util.Duration;
/**
* Returns true if successful.
* Current defaults are 1000, 5000, 200;
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public static boolean setTooltipTimers(long openDelay, long visibleDuration, long closeDelay)
{
try
{
Field f = Tooltip.class.getDeclaredField("BEHAVIOR");
f.setAccessible(true);
Class[] classes = Tooltip.class.getDeclaredClasses();
for (Class clazz : classes)
{
if (clazz.getName().equals("javafx.scene.control.Tooltip$TooltipBehavior"))
{
Constructor ctor = clazz.getDeclaredConstructor(Duration.class, Duration.class, Duration.class, boolean.class);
ctor.setAccessible(true);
Object tooltipBehavior = ctor.newInstance(new Duration(openDelay), new Duration(visibleDuration), new Duration(closeDelay), false);
f.set(null, tooltipBehavior);
break;
}
}
}
catch (Exception e)
{
return false;
}
return true;
}
#end if
#End Region
'
'.tooltip {
' -fx-background-radius: 2 2 2 2;
' -fx-background-color: linear-gradient(#FFFF99, #FFFF99);
' -fx-text-fill: black;
' -fx-font-size: 12px;
'}
'
'
' -fx-rotate: 3;
' -fx-translate-y: -2;
' -fx-background-insets: 20 10 15 80;
' -fx-background-color: -fx-app-background;
'
'
'
' -fx-effect: dropshadow(three-pass-box, grey, 10, 0, 0, 15);
'