slithernix-cdk 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/COPYING +131 -0
- data/README.md +45 -0
- data/lib/cdk/alphalist.rb +561 -0
- data/lib/cdk/buttonbox.rb +355 -0
- data/lib/cdk/calendar.rb +770 -0
- data/lib/cdk/cdk_objs.rb +463 -0
- data/lib/cdk/dialog.rb +727 -0
- data/lib/cdk/display.rb +63 -0
- data/lib/cdk/draw.rb +233 -0
- data/lib/cdk/dscale.rb +13 -0
- data/lib/cdk/entry.rb +556 -0
- data/lib/cdk/fscale.rb +44 -0
- data/lib/cdk/fselect.rb +940 -0
- data/lib/cdk/fslider.rb +61 -0
- data/lib/cdk/histogram.rb +410 -0
- data/lib/cdk/itemlist.rb +475 -0
- data/lib/cdk/label.rb +207 -0
- data/lib/cdk/marquee.rb +241 -0
- data/lib/cdk/matrix.rb +1176 -0
- data/lib/cdk/mentry.rb +616 -0
- data/lib/cdk/menu.rb +448 -0
- data/lib/cdk/radio.rb +533 -0
- data/lib/cdk/scale.rb +529 -0
- data/lib/cdk/screen.rb +281 -0
- data/lib/cdk/scroll.rb +996 -0
- data/lib/cdk/scroller.rb +183 -0
- data/lib/cdk/selection.rb +619 -0
- data/lib/cdk/slider.rb +542 -0
- data/lib/cdk/swindow.rb +762 -0
- data/lib/cdk/template.rb +562 -0
- data/lib/cdk/traverse.rb +289 -0
- data/lib/cdk/uscale.rb +14 -0
- data/lib/cdk/uslider.rb +14 -0
- data/lib/cdk/viewer.rb +812 -0
- data/lib/cdk.rb +1015 -0
- metadata +149 -0
data/lib/cdk/traverse.rb
ADDED
@@ -0,0 +1,289 @@
|
|
1
|
+
module CDK
|
2
|
+
module Traverse
|
3
|
+
def Traverse.resetCDKScreen(screen)
|
4
|
+
refreshDataCDKScreen(screen)
|
5
|
+
end
|
6
|
+
|
7
|
+
def Traverse.exitOKCDKScreen(screen)
|
8
|
+
screen.exit_status = CDK::SCREEN::EXITOK
|
9
|
+
end
|
10
|
+
|
11
|
+
def Traverse.exitCancelCDKScreen(screen)
|
12
|
+
screen.exit_status = CDK::SCREEN::EXITCANCEL
|
13
|
+
end
|
14
|
+
|
15
|
+
def Traverse.exitOKCDKScreenOf(obj)
|
16
|
+
exitOKCDKScreen(obj.screen)
|
17
|
+
end
|
18
|
+
|
19
|
+
def Traverse.exitCancelCDKScreenOf(obj)
|
20
|
+
exitCancelCDKScreen(obj.screen)
|
21
|
+
end
|
22
|
+
|
23
|
+
def Traverse.resetCDKScreenOf(obj)
|
24
|
+
resetCDKScreen(obj.screen)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Returns the object on which the focus lies.
|
28
|
+
def Traverse.getCDKFocusCurrent(screen)
|
29
|
+
result = nil
|
30
|
+
n = screen.object_focus
|
31
|
+
|
32
|
+
if n >= 0 && n < screen.object_count
|
33
|
+
result = screen.object[n]
|
34
|
+
end
|
35
|
+
|
36
|
+
return result
|
37
|
+
end
|
38
|
+
|
39
|
+
# Set focus to the next object, returning it.
|
40
|
+
def Traverse.setCDKFocusNext(screen)
|
41
|
+
result = nil
|
42
|
+
curobj = nil
|
43
|
+
n = getFocusIndex(screen)
|
44
|
+
first = n
|
45
|
+
|
46
|
+
while true
|
47
|
+
n+= 1
|
48
|
+
if n >= screen.object_count
|
49
|
+
n = 0
|
50
|
+
end
|
51
|
+
curobj = screen.object[n]
|
52
|
+
if !(curobj.nil?) && curobj.accepts_focus
|
53
|
+
result = curobj
|
54
|
+
break
|
55
|
+
else
|
56
|
+
if n == first
|
57
|
+
break
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
setFocusIndex(screen, if !(result.nil?) then n else -1 end)
|
63
|
+
return result
|
64
|
+
end
|
65
|
+
|
66
|
+
# Set focus to the previous object, returning it.
|
67
|
+
def Traverse.setCDKFocusPrevious(screen)
|
68
|
+
result = nil
|
69
|
+
curobj = nil
|
70
|
+
n = getFocusIndex(screen)
|
71
|
+
first = n
|
72
|
+
|
73
|
+
while true
|
74
|
+
n -= 1
|
75
|
+
if n < 0
|
76
|
+
n = screen.object_count - 1
|
77
|
+
end
|
78
|
+
curobj = screen.object[n]
|
79
|
+
if !(curobj.nil?) && curobj.accepts_focus
|
80
|
+
result = curobj
|
81
|
+
break
|
82
|
+
elsif n == first
|
83
|
+
break
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
setFocusIndex(screen, if !(result.nil?) then n else -1 end)
|
88
|
+
return result
|
89
|
+
end
|
90
|
+
|
91
|
+
# Set focus to a specific object, returning it.
|
92
|
+
# If the object cannot be found, return nil.
|
93
|
+
def Traverse.setCDKFocusCurrent(screen, newobj)
|
94
|
+
result = nil
|
95
|
+
curobj = nil
|
96
|
+
n = getFocusIndex(screen)
|
97
|
+
first = n
|
98
|
+
|
99
|
+
while true
|
100
|
+
n += 1
|
101
|
+
if n >= screen.object_count
|
102
|
+
n = 0
|
103
|
+
end
|
104
|
+
|
105
|
+
curobj = screen.object[n]
|
106
|
+
if curobj == newobj
|
107
|
+
result = curobj
|
108
|
+
break
|
109
|
+
elsif n == first
|
110
|
+
break
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
setFocusIndex(screen, if !(result.nil?) then n else -1 end)
|
115
|
+
return result
|
116
|
+
end
|
117
|
+
|
118
|
+
# Set focus to the first object in the screen.
|
119
|
+
def Traverse.setCDKFocusFirst(screen)
|
120
|
+
setFocusIndex(screen, screen.object_count - 1)
|
121
|
+
return switchFocus(setCDKFocusNext(screen), nil)
|
122
|
+
end
|
123
|
+
|
124
|
+
# Set focus to the last object in the screen.
|
125
|
+
def Traverse.setCDKFocusLast(screen)
|
126
|
+
setFocusIndex(screen, 0)
|
127
|
+
return switchFocus(setCDKFocusPrevious(screen), nil)
|
128
|
+
end
|
129
|
+
|
130
|
+
def Traverse.traverseCDKOnce(screen, curobj, key_code,
|
131
|
+
function_key, func_menu_key)
|
132
|
+
case key_code
|
133
|
+
when Curses::KEY_BTAB
|
134
|
+
switchFocus(setCDKFocusPrevious(screen), curobj)
|
135
|
+
when CDK::KEY_TAB
|
136
|
+
switchFocus(setCDKFocusNext(screen), curobj)
|
137
|
+
when CDK.KEY_F(10)
|
138
|
+
# save data and exit
|
139
|
+
exitOKCDKScreen(screen)
|
140
|
+
when CDK.CTRL('X')
|
141
|
+
exitCancelCDKScreen(screen)
|
142
|
+
when CDK.CTRL('R')
|
143
|
+
# reset data to defaults
|
144
|
+
resetCDKScreen(screen)
|
145
|
+
setFocus(curobj)
|
146
|
+
when CDK::REFRESH
|
147
|
+
# redraw screen
|
148
|
+
screen.refresh
|
149
|
+
setFocus(curobj)
|
150
|
+
else
|
151
|
+
# not everyone wants menus, so we make them optional here
|
152
|
+
if !(func_menu_key.nil?) &&
|
153
|
+
(func_menu_key.call(key_code, function_key))
|
154
|
+
# find and enable drop down menu
|
155
|
+
screen.object.each do |object|
|
156
|
+
if !(object.nil?) && object.object_type == :MENU
|
157
|
+
Traverse.handleMenu(screen, object, curobj)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
else
|
161
|
+
curobj.inject(key_code)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
# Traverse the widgets on a screen.
|
167
|
+
def Traverse.traverseCDKScreen(screen)
|
168
|
+
result = 0
|
169
|
+
curobj = setCDKFocusFirst(screen)
|
170
|
+
|
171
|
+
unless curobj.nil?
|
172
|
+
refreshDataCDKScreen(screen)
|
173
|
+
|
174
|
+
screen.exit_status = CDK::SCREEN::NOEXIT
|
175
|
+
|
176
|
+
while !((curobj = getCDKFocusCurrent(screen)).nil?) &&
|
177
|
+
screen.exit_status == CDK::SCREEN::NOEXIT
|
178
|
+
function = []
|
179
|
+
key = curobj.getch(function)
|
180
|
+
|
181
|
+
# TODO look at more direct way to do this
|
182
|
+
check_menu_key = lambda do |key_code, function_key|
|
183
|
+
Traverse.checkMenuKey(key_code, function_key)
|
184
|
+
end
|
185
|
+
|
186
|
+
|
187
|
+
Traverse.traverseCDKOnce(screen, curobj, key,
|
188
|
+
function[0], check_menu_key)
|
189
|
+
end
|
190
|
+
|
191
|
+
if screen.exit_status == CDK::SCREEN::EXITOK
|
192
|
+
saveDataCDKScreen(screen)
|
193
|
+
result = 1
|
194
|
+
end
|
195
|
+
end
|
196
|
+
return result
|
197
|
+
end
|
198
|
+
|
199
|
+
private
|
200
|
+
|
201
|
+
def Traverse.limitFocusIndex(screen, value)
|
202
|
+
if value >= screen.object_count || value < 0
|
203
|
+
0
|
204
|
+
else
|
205
|
+
value
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
def Traverse.getFocusIndex(screen)
|
210
|
+
return limitFocusIndex(screen, screen.object_focus)
|
211
|
+
end
|
212
|
+
|
213
|
+
def Traverse.setFocusIndex(screen, value)
|
214
|
+
screen.object_focus = limitFocusIndex(screen, value)
|
215
|
+
end
|
216
|
+
|
217
|
+
def Traverse.unsetFocus(obj)
|
218
|
+
Curses.curs_set(0)
|
219
|
+
unless obj.nil?
|
220
|
+
obj.has_focus = false
|
221
|
+
obj.unfocus
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
def Traverse.setFocus(obj)
|
226
|
+
unless obj.nil?
|
227
|
+
obj.has_focus = true
|
228
|
+
obj.focus
|
229
|
+
end
|
230
|
+
Curses.curs_set(1)
|
231
|
+
end
|
232
|
+
|
233
|
+
def Traverse.switchFocus(newobj, oldobj)
|
234
|
+
if oldobj != newobj
|
235
|
+
Traverse.unsetFocus(oldobj)
|
236
|
+
Traverse.setFocus(newobj)
|
237
|
+
end
|
238
|
+
return newobj
|
239
|
+
end
|
240
|
+
|
241
|
+
def Traverse.checkMenuKey(key_code, function_key)
|
242
|
+
key_code == CDK::KEY_ESC && !function_key
|
243
|
+
end
|
244
|
+
|
245
|
+
def Traverse.handleMenu(screen, menu, oldobj)
|
246
|
+
done = false
|
247
|
+
|
248
|
+
switchFocus(menu, oldobj)
|
249
|
+
while !done
|
250
|
+
key = menu.getch([])
|
251
|
+
|
252
|
+
case key
|
253
|
+
when CDK::KEY_TAB
|
254
|
+
done = true
|
255
|
+
when CDK::KEY_ESC
|
256
|
+
# cleanup the menu
|
257
|
+
menu.inject(key)
|
258
|
+
done = true
|
259
|
+
else
|
260
|
+
done = (menu.inject(key) >= 0)
|
261
|
+
end
|
262
|
+
end
|
263
|
+
|
264
|
+
if (newobj = Traverse.getCDKFocusCurrent(screen)).nil?
|
265
|
+
newobj = Traverse.setCDKFocusNext(screen)
|
266
|
+
end
|
267
|
+
|
268
|
+
return switchFocus(newobj, menu)
|
269
|
+
end
|
270
|
+
|
271
|
+
# Save data in widgets on a screen
|
272
|
+
def Traverse.saveDataCDKScreen(screen)
|
273
|
+
screen.object.each do |object|
|
274
|
+
unless object.nil?
|
275
|
+
object.saveData
|
276
|
+
end
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
# Refresh data in widgets on a screen
|
281
|
+
def Traverse.refreshDataCDKScreen(screen)
|
282
|
+
screen.object.each do |object|
|
283
|
+
unless object.nil?
|
284
|
+
object.refreshData
|
285
|
+
end
|
286
|
+
end
|
287
|
+
end
|
288
|
+
end
|
289
|
+
end
|
data/lib/cdk/uscale.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative 'scale'
|
2
|
+
|
3
|
+
module CDK
|
4
|
+
class USCALE < CDK::SCALE
|
5
|
+
# The original UScale handled unsigned values.
|
6
|
+
# Since Ruby's typing is different this is really just SCALE
|
7
|
+
# but is nice it's nice to have this for compatibility/completeness
|
8
|
+
# sake.
|
9
|
+
|
10
|
+
def object_type
|
11
|
+
:USCALE
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/cdk/uslider.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative 'slider'
|
2
|
+
|
3
|
+
module CDK
|
4
|
+
class USLIDER < CDK::SLIDER
|
5
|
+
# The original USlider handled unsigned values.
|
6
|
+
# Since Ruby's typing is different this is really just SLIDER
|
7
|
+
# but is nice it's nice to have this for compatibility/completeness
|
8
|
+
# sake.
|
9
|
+
|
10
|
+
def object_type
|
11
|
+
:USLIDER
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|