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.
@@ -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
@@ -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