slithernix-cdk 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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