-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPulseBarClass.clw
More file actions
154 lines (134 loc) · 5.39 KB
/
PulseBarClass.clw
File metadata and controls
154 lines (134 loc) · 5.39 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
member()
include( 'PulseBarClass.inc' ),once
map
end
!==================================================================================================
PulseBarClass.Init procedure(*WINDOW pWin, long pBaseX, long pBaseY)
!==================================================================================================
code
self.Win &= pWin
self.BaseX = pBaseX
self.BaseY = pBaseY
self.SetDefaults()
self.Step = 1
!==================================================================================================
PulseBarClass.SetDefaults procedure()
! Asigna layout y colores por defecto
!==================================================================================================
code
self.BoxW = 16
self.BoxH = 6
self.Spacing = 16
self.BoxCount = MAX_BOXES
self.TimerInterval = 120
! "MAX_BOXES" tonos de verde
self.BoxColor[1] = 000A1F0AH
self.BoxColor[2] = 000F3310H
self.BoxColor[3] = 00144716H
self.BoxColor[4] = 001A5C1CH
self.BoxColor[5] = 00207222H
self.BoxColor[6] = 00278A29H
self.BoxColor[7] = 002EA330H
self.BoxColor[8] = 0035BB37H
self.BoxColor[9] = 003CD33EH
self.BoxColor[10] = 004AE759H
self.BoxColor[11] = 0071F07FH
self.BoxColor[12] = 00A8F5B7H
!==================================================================================================
PulseBarClass.SetColors procedure( *long[] pArray, long pCount)
! Permite asignar una paleta externa
!==================================================================================================
i long
code
if pCount <= 0 OR pCount > MAX_BOXES
return
end
self.BoxCount = pCount
loop i = 1 TO pCount
self.BoxColor[i] = pArray[i]
end
!==================================================================================================
PulseBarClass.Start procedure(long pTimerInterval)
! Activa el TIMER y dibuja todo
!==================================================================================================
code
if pTimerInterval > 0
self.TimerInterval = pTimerInterval
end
if not self.Win &= NULL
self.Win{PROP:TIMER} = self.TimerInterval
end
self.Step = 1
self.RedrawAll()
self.HighlightStep(self.Step)
!==================================================================================================
PulseBarClass.Stop procedure()
!==================================================================================================
code
if not self.Win &= NULL
self.Win{PROP:TIMER} = 0
end
!==================================================================================================
PulseBarClass.RedrawAll procedure()
! Dibuja todos los cuadros con sus colores
!==================================================================================================
i long
code
loop i = 1 to self.BoxCount
SetPenColor( Color:Black )
Box( self.GetBoxX(i), self.BaseY, self.BoxW, self.BoxH, self.BoxColor[i] )
end
!==================================================================================================
PulseBarClass.NextStep procedure()
! Avanza el pulso al siguiente cuadro
!==================================================================================================
code
if self.BoxCount <= 0
return
end
self.Step = (self.Step % self.BoxCount) + 1
self.HighlightStep(self.Step)
!==================================================================================================
PulseBarClass.HighlightStep procedure( long pIndex )
! Resalta el cuadro actual y "apaga" el anterior
!==================================================================================================
prevIndex long
code
if pIndex < 1 or pIndex > self.BoxCount
return
end
! Calcula el índice anterior (con wrap-around)
if pIndex = 1
prevIndex = self.BoxCount
else
prevIndex = pIndex - 1
end
! Cuadro actual: borde blanco
SetPenColor(Color:White)
Box(self.GetBoxX(pIndex), self.BaseY, self.BoxW, self.BoxH)
! Cuadro anterior: borde negro
SetPenColor(Color:Black)
Box(self.GetBoxX(prevIndex), self.BaseY, self.BoxW, self.BoxH)
!==================================================================================================
PulseBarClass.GetBoxX procedure(long pIndex)!,long
!==================================================================================================
code
return self.BaseX + (pIndex * self.Spacing)
!==================================================================================================
PulseBarClass.TakeEvent procedure()!,byte
! Llamar desde el ACCEPT cuando recibas EVENT:Timer.
! Devuelve 1 si procesó el evento, 0 si no.
!==================================================================================================
code
if EVENT() = EVENT:Timer
self.NextStep()
return true
END
return 0
!==================================================================================================
PulseBarClass.Construct procedure()
code
!==================================================================================================
PulseBarClass.Destruct procedure()
code
!==================================================================================================