rndk 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.yardopts +1 -0
- data/README.md +61 -42
- data/demos/appointment.rb +2 -2
- data/demos/clock.rb +1 -1
- data/demos/fileview.rb +0 -0
- data/examples/01-hello-world.rb +1 -1
- data/examples/02-colors.rb +1 -1
- data/examples/03-markup.rb +6 -4
- data/examples/04-quick-widgets.rb +1 -0
- data/examples/05-position-widget.rb +1 -1
- data/examples/entry.rb +76 -0
- data/examples/label.rb +51 -0
- data/examples/scroll.rb +68 -42
- data/examples/slider.rb +70 -0
- data/lib/rndk/alphalist.rb +224 -116
- data/lib/rndk/button.rb +4 -2
- data/lib/rndk/buttonbox.rb +1 -1
- data/lib/rndk/calendar.rb +18 -23
- data/lib/rndk/core/draw.rb +0 -30
- data/lib/rndk/core/quick_widgets.rb +9 -10
- data/lib/rndk/core/utils.rb +6 -6
- data/lib/rndk/core/widget.rb +9 -1
- data/lib/rndk/dialog.rb +1 -6
- data/lib/rndk/dscale.rb +1 -1
- data/lib/rndk/entry.rb +266 -116
- data/lib/rndk/fscale.rb +1 -1
- data/lib/rndk/fselect.rb +13 -15
- data/lib/rndk/fslider.rb +1 -1
- data/lib/rndk/graph.rb +1 -1
- data/lib/rndk/histogram.rb +1 -1
- data/lib/rndk/itemlist.rb +1 -1
- data/lib/rndk/label.rb +7 -6
- data/lib/rndk/marquee.rb +1 -1
- data/lib/rndk/matrix.rb +1 -1
- data/lib/rndk/mentry.rb +8 -8
- data/lib/rndk/menu.rb +1 -1
- data/lib/rndk/radio.rb +1 -1
- data/lib/rndk/scale.rb +1 -1
- data/lib/rndk/scroll.rb +138 -55
- data/lib/rndk/scroller.rb +9 -1
- data/lib/rndk/selection.rb +1 -1
- data/lib/rndk/slider.rb +123 -42
- data/lib/rndk/swindow.rb +10 -10
- data/lib/rndk/template.rb +1 -1
- data/lib/rndk/uscale.rb +1 -1
- data/lib/rndk/uslider.rb +1 -1
- data/lib/rndk/version.rb +1 -1
- data/lib/rndk/viewer.rb +3 -3
- data/rndk.gemspec +1 -1
- metadata +7 -3
data/lib/rndk/alphalist.rb
CHANGED
@@ -1,28 +1,100 @@
|
|
1
1
|
require 'rndk'
|
2
2
|
|
3
3
|
module RNDK
|
4
|
-
|
4
|
+
|
5
|
+
# Allows user to select from a list of alphabetically sorted words.
|
6
|
+
#
|
7
|
+
# Use the arrow keys to navigate on the list or type in the
|
8
|
+
# beginning of the word and it'll automagically adjust
|
9
|
+
# itself in the correct place.
|
10
|
+
#
|
11
|
+
# ## Keybindings
|
12
|
+
#
|
13
|
+
# Since Alphalist is built from both the Scroll and Entry Widgets,
|
14
|
+
# the key bindings are the same for the respective fields.
|
15
|
+
#
|
16
|
+
# Extra key bindings are listed below:
|
17
|
+
#
|
18
|
+
# Up Arrow:: Scrolls the scrolling list up one line.
|
19
|
+
# Down Arrow:: Scrolls the scrolling list down one line.
|
20
|
+
# Page Up:: Scrolls the scrolling list up one page.
|
21
|
+
# CTRL-B:: Scrolls the scrolling list up one page.
|
22
|
+
# Page Down:: Scrolls the scrolling list down one page.
|
23
|
+
# CTRL-F:: Scrolls the scrolling list down one page.
|
24
|
+
# Tab:: Tries to complete the word in the entry field.
|
25
|
+
# If the word segment is not unique then the widget
|
26
|
+
# will beep and present a list of close matches.
|
27
|
+
# Return:: Returns the word in the entry field.
|
28
|
+
# It also sets the widget data exitType to `:NORMAL`.
|
29
|
+
# Escape:: Exits the widget and returns `nil`.
|
30
|
+
# It also sets the widget data exitType to `:ESCAPE_HIT`.
|
31
|
+
#
|
32
|
+
# ## Developer notes
|
33
|
+
#
|
34
|
+
# This widget, like the file selector widget, is a compound widget
|
35
|
+
# of both the entry field widget and the scrolling list widget - sorted.
|
36
|
+
#
|
37
|
+
class Alphalist < Widget
|
5
38
|
attr_reader :scroll_field, :entry_field, :list
|
6
39
|
|
7
|
-
|
8
|
-
|
40
|
+
# Creates an Alphalist Widget.
|
41
|
+
#
|
42
|
+
# * `xplace` is the x position - can be an integer or `RNDK::LEFT`,
|
43
|
+
# `RNDK::RIGHT`, `RNDK::CENTER`.
|
44
|
+
# * `yplace` is the y position - can be an integer or `RNDK::TOP`,
|
45
|
+
# `RNDK::BOTTOM`, `RNDK::CENTER`.
|
46
|
+
# * `width`/`height` are integers - if either are 0, Widget
|
47
|
+
# will be created with full width/height of the screen.
|
48
|
+
# If it's a negative value, will create with full width/height
|
49
|
+
# minus the value.
|
50
|
+
# * `message` is an Array of Strings with all the lines you'd want
|
51
|
+
# to show. RNDK markup applies (see RNDK#Markup).
|
52
|
+
# * `title` can be more than one line - just split them
|
53
|
+
# with `\n`s.
|
54
|
+
# * `label` is the String that will appear on the label
|
55
|
+
# of the Entry field.
|
56
|
+
# * `list` is an Array of Strings with the content to
|
57
|
+
# display.
|
58
|
+
# * `filler_char` is the character to display on the
|
59
|
+
# empty spaces in the Entry field.
|
60
|
+
# * `highlight` is the attribute/color of the current
|
61
|
+
# item.
|
62
|
+
# * `box` if the Widget is drawn with a box outside it.
|
63
|
+
# * `shadow` turns on/off the shadow around the Widget.
|
64
|
+
#
|
65
|
+
def initialize(rndkscreen,
|
66
|
+
xplace,
|
67
|
+
yplace,
|
68
|
+
width,
|
69
|
+
height,
|
70
|
+
title,
|
71
|
+
label,
|
72
|
+
list,
|
73
|
+
filler_char,
|
74
|
+
highlight,
|
75
|
+
box,
|
76
|
+
shadow)
|
9
77
|
super()
|
10
|
-
|
11
|
-
|
12
|
-
|
78
|
+
|
79
|
+
parent_width = Ncurses.getmaxx rndkscreen.window
|
80
|
+
parent_height = Ncurses.getmaxy rndkscreen.window
|
81
|
+
|
82
|
+
box_width = width
|
13
83
|
box_height = height
|
84
|
+
|
14
85
|
label_len = 0
|
86
|
+
|
15
87
|
bindings = {
|
16
88
|
RNDK::BACKCHAR => Ncurses::KEY_PPAGE,
|
17
89
|
RNDK::FORCHAR => Ncurses::KEY_NPAGE,
|
18
90
|
}
|
19
91
|
|
20
|
-
if
|
92
|
+
if not self.createList list
|
21
93
|
self.destroy
|
22
94
|
return nil
|
23
95
|
end
|
24
96
|
|
25
|
-
self.set_box
|
97
|
+
self.set_box box
|
26
98
|
|
27
99
|
# If the height is a negative value, the height will be ROWS-height,
|
28
100
|
# otherwise the height will be the given height.
|
@@ -55,54 +127,66 @@ module RNDK
|
|
55
127
|
end
|
56
128
|
Ncurses.keypad(@win, true)
|
57
129
|
|
58
|
-
# Set some variables.
|
59
130
|
@screen = rndkscreen
|
60
131
|
@parent = rndkscreen.window
|
61
|
-
@highlight
|
132
|
+
@highlight = highlight
|
62
133
|
@filler_char = filler_char
|
134
|
+
|
135
|
+
@box_width = box_width
|
63
136
|
@box_height = box_height
|
64
|
-
|
137
|
+
|
65
138
|
@shadow = shadow
|
66
139
|
@shadow_win = nil
|
67
140
|
|
68
141
|
# Do we want a shadow?
|
69
142
|
if shadow
|
70
|
-
@shadow_win = Ncurses.newwin(box_height, box_width,
|
71
|
-
ypos + 1, xpos + 1)
|
143
|
+
@shadow_win = Ncurses.newwin(box_height, box_width, ypos+1, xpos+1)
|
72
144
|
end
|
73
145
|
|
74
146
|
# Create the entry field.
|
75
|
-
temp_width = if
|
147
|
+
temp_width = if Alphalist.isFullWidth(width)
|
76
148
|
then RNDK::FULL
|
77
149
|
else box_width - 2 - label_len
|
78
150
|
end
|
79
|
-
|
80
|
-
|
81
|
-
|
151
|
+
|
152
|
+
@entry_field = RNDK::Entry.new(rndkscreen,
|
153
|
+
Ncurses.getbegx(@win),
|
154
|
+
Ncurses.getbegy(@win),
|
155
|
+
title,
|
156
|
+
label,
|
157
|
+
Ncurses::A_NORMAL,
|
158
|
+
filler_char,
|
159
|
+
:MIXED,
|
160
|
+
temp_width,
|
161
|
+
0,
|
162
|
+
512,
|
163
|
+
box,
|
164
|
+
false)
|
82
165
|
if @entry_field.nil?
|
83
166
|
self.destroy
|
84
167
|
return nil
|
85
168
|
end
|
86
|
-
@entry_field.setLLchar
|
87
|
-
@entry_field.setLRchar
|
169
|
+
@entry_field.setLLchar Ncurses::ACS_LTEE
|
170
|
+
@entry_field.setLRchar Ncurses::ACS_RTEE
|
88
171
|
|
89
172
|
# Callback functions
|
90
173
|
adjust_alphalist_cb = lambda do |object_type, object, alphalist, key|
|
91
174
|
scrollp = alphalist.scroll_field
|
92
|
-
entry
|
175
|
+
entry = alphalist.entry_field
|
93
176
|
|
94
177
|
if scrollp.list_size > 0
|
95
178
|
# Adjust the scrolling list.
|
96
179
|
alphalist.injectMyScroller(key)
|
97
180
|
|
98
181
|
# Set the value in the entry field.
|
99
|
-
current = RNDK.chtype2Char
|
100
|
-
entry.setValue
|
101
|
-
entry.draw
|
182
|
+
current = RNDK.chtype2Char scrollp.item[scrollp.current_item]
|
183
|
+
entry.setValue current
|
184
|
+
entry.draw entry.box
|
102
185
|
return true
|
103
186
|
end
|
187
|
+
|
104
188
|
RNDK.beep
|
105
|
-
|
189
|
+
false
|
106
190
|
end
|
107
191
|
|
108
192
|
complete_word_cb = lambda do |object_type, object, alphalist, key|
|
@@ -128,12 +212,11 @@ module RNDK
|
|
128
212
|
|
129
213
|
# Did we find the last word in the list?
|
130
214
|
if index == alphalist.list.size - 1
|
131
|
-
entry.setValue
|
132
|
-
entry.draw
|
215
|
+
entry.setValue alphalist.list[index]
|
216
|
+
entry.draw entry.box
|
133
217
|
return true
|
134
218
|
end
|
135
219
|
|
136
|
-
|
137
220
|
# Ok, we found a match, is the next item similar?
|
138
221
|
len = [entry.info.size, alphalist.list[index + 1].size].min
|
139
222
|
ret = alphalist.list[index + 1][0...len] <=> entry.info
|
@@ -144,8 +227,8 @@ module RNDK
|
|
144
227
|
|
145
228
|
# Start looking for alternate words
|
146
229
|
# FIXME(original): bsearch would be more suitable.
|
147
|
-
while current_index < alphalist.list.size
|
148
|
-
(alphalist.list[current_index][0...len] <=> entry.info) == 0
|
230
|
+
while (current_index < alphalist.list.size) and
|
231
|
+
((alphalist.list[current_index][0...len] <=> entry.info) == 0)
|
149
232
|
alt_words << alphalist.list[current_index]
|
150
233
|
current_index += 1
|
151
234
|
end
|
@@ -154,13 +237,21 @@ module RNDK
|
|
154
237
|
height = if alt_words.size < 8 then alt_words.size + 3 else 11 end
|
155
238
|
|
156
239
|
# Create a scrolling list of close matches.
|
157
|
-
scrollp = RNDK::
|
158
|
-
|
159
|
-
|
160
|
-
|
240
|
+
scrollp = RNDK::Scroll.new(entry.screen,
|
241
|
+
RNDK::CENTER,
|
242
|
+
RNDK::CENTER,
|
243
|
+
RNDK::RIGHT,
|
244
|
+
height,
|
245
|
+
-30,
|
246
|
+
"<C></B/5>Possible Matches.",
|
247
|
+
alt_words,
|
248
|
+
true,
|
249
|
+
Ncurses::A_REVERSE,
|
250
|
+
true,
|
251
|
+
false)
|
161
252
|
|
162
253
|
# Allow them to select a close match.
|
163
|
-
match = scrollp.activate
|
254
|
+
match = scrollp.activate
|
164
255
|
selected = scrollp.current_item
|
165
256
|
|
166
257
|
# Check how they exited the list.
|
@@ -168,7 +259,6 @@ module RNDK
|
|
168
259
|
# Destroy the scrolling list.
|
169
260
|
scrollp.destroy
|
170
261
|
|
171
|
-
# beep at the user.
|
172
262
|
RNDK.beep
|
173
263
|
|
174
264
|
# Redraw the alphalist and return.
|
@@ -188,13 +278,14 @@ module RNDK
|
|
188
278
|
end
|
189
279
|
|
190
280
|
# Redraw the alphalist.
|
191
|
-
alphalist.draw
|
281
|
+
alphalist.draw alphalist.box
|
282
|
+
|
192
283
|
else
|
193
284
|
# Set the entry field with the found item.
|
194
285
|
entry.set(alphalist.list[index], entry.min, entry.max, entry.box)
|
195
|
-
entry.draw
|
286
|
+
entry.draw entry.box
|
196
287
|
end
|
197
|
-
|
288
|
+
true
|
198
289
|
end
|
199
290
|
|
200
291
|
pre_process_entry_field = lambda do |rndktype, object, alphalist, input|
|
@@ -204,34 +295,40 @@ module RNDK
|
|
204
295
|
result = 1
|
205
296
|
empty = false
|
206
297
|
|
207
|
-
if alphalist.isBind(:
|
298
|
+
if alphalist.isBind(:alphalist, input)
|
208
299
|
result = 1 # Don't try to use this key in editing
|
300
|
+
|
209
301
|
elsif (RNDK.is_char?(input) &&
|
210
302
|
input.chr.match(/^[[:alnum:][:punct:]]$/)) ||
|
211
303
|
[Ncurses::KEY_BACKSPACE, Ncurses::KEY_DC].include?(input)
|
304
|
+
|
212
305
|
index = 0
|
213
306
|
curr_pos = entry.screen_col + entry.left_char
|
214
307
|
pattern = entry.info.clone
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
308
|
+
|
309
|
+
if [Ncurses::KEY_BACKSPACE, Ncurses::KEY_DC].include? input
|
310
|
+
|
311
|
+
curr_pos -= 1 if input == Ncurses::KEY_BACKSPACE
|
312
|
+
|
313
|
+
pattern.slice!(curr_pos) if curr_pos >= 0
|
314
|
+
|
222
315
|
else
|
223
|
-
front
|
224
|
-
back
|
316
|
+
front = (pattern[0...curr_pos] or '')
|
317
|
+
back = (pattern[curr_pos..-1] or '')
|
225
318
|
pattern = front + input.chr + back
|
226
319
|
end
|
227
320
|
|
228
321
|
if pattern.size == 0
|
229
322
|
empty = true
|
323
|
+
|
230
324
|
elsif (index = RNDK.searchList(alphalist.list,
|
231
|
-
|
325
|
+
alphalist.list.size,
|
326
|
+
pattern)) >= 0
|
327
|
+
|
232
328
|
# XXX: original uses n scroll downs/ups for <10 positions change
|
233
329
|
scrollp.setPosition(index)
|
234
330
|
alphalist.drawMyScroller
|
331
|
+
|
235
332
|
else
|
236
333
|
RNDK.beep
|
237
334
|
result = 0
|
@@ -243,15 +340,15 @@ module RNDK
|
|
243
340
|
alphalist.drawMyScroller
|
244
341
|
end
|
245
342
|
|
246
|
-
|
343
|
+
result
|
247
344
|
end
|
248
345
|
|
249
346
|
# Set the key bindings for the entry field.
|
250
|
-
@entry_field.bind(:
|
251
|
-
@entry_field.bind(:
|
252
|
-
@entry_field.bind(:
|
253
|
-
@entry_field.bind(:
|
254
|
-
@entry_field.bind(:
|
347
|
+
@entry_field.bind(:entry, Ncurses::KEY_UP, adjust_alphalist_cb, self)
|
348
|
+
@entry_field.bind(:entry, Ncurses::KEY_DOWN, adjust_alphalist_cb, self)
|
349
|
+
@entry_field.bind(:entry, Ncurses::KEY_NPAGE, adjust_alphalist_cb, self)
|
350
|
+
@entry_field.bind(:entry, Ncurses::KEY_PPAGE, adjust_alphalist_cb, self)
|
351
|
+
@entry_field.bind(:entry, RNDK::KEY_TAB, complete_word_cb, self)
|
255
352
|
|
256
353
|
# Set up the post-process function for the entry field.
|
257
354
|
@entry_field.setPreProcess(pre_process_entry_field, self)
|
@@ -259,12 +356,12 @@ module RNDK
|
|
259
356
|
# Create the scrolling list. It overlaps the entry field by one line if
|
260
357
|
# we are using box-borders.
|
261
358
|
temp_height = Ncurses.getmaxy(@entry_field.win) - @border_size
|
262
|
-
temp_width = if
|
359
|
+
temp_width = if Alphalist.isFullWidth(width)
|
263
360
|
then RNDK::FULL
|
264
361
|
else box_width - 1
|
265
362
|
end
|
266
363
|
|
267
|
-
@scroll_field = RNDK::
|
364
|
+
@scroll_field = RNDK::Scroll.new(rndkscreen,
|
268
365
|
Ncurses.getbegx(@win),
|
269
366
|
Ncurses.getbegy(@entry_field.win) + temp_height,
|
270
367
|
RNDK::RIGHT,
|
@@ -272,23 +369,23 @@ module RNDK
|
|
272
369
|
temp_width,
|
273
370
|
'',
|
274
371
|
list,
|
275
|
-
list_size,
|
276
372
|
false,
|
277
|
-
|
373
|
+
Ncurses::A_REVERSE,
|
278
374
|
box,
|
279
375
|
false)
|
280
|
-
|
281
|
-
@scroll_field.
|
376
|
+
|
377
|
+
@scroll_field.setULchar Ncurses::ACS_LTEE
|
378
|
+
@scroll_field.setURchar Ncurses::ACS_RTEE
|
282
379
|
|
283
380
|
# Setup the key bindings.
|
284
381
|
bindings.each do |from, to|
|
285
|
-
self.bind(:
|
382
|
+
self.bind(:alphalist, from, :getc, to)
|
286
383
|
end
|
287
384
|
|
288
|
-
rndkscreen.register(:
|
385
|
+
rndkscreen.register(:alphalist, self)
|
289
386
|
end
|
290
387
|
|
291
|
-
#
|
388
|
+
# @see Widget#erase
|
292
389
|
def erase
|
293
390
|
if self.valid_widget?
|
294
391
|
@scroll_field.erase
|
@@ -299,12 +396,11 @@ module RNDK
|
|
299
396
|
end
|
300
397
|
end
|
301
398
|
|
302
|
-
#
|
399
|
+
# @see Widget#move
|
303
400
|
def move(xplace, yplace, relative, refresh_flag)
|
304
401
|
windows = [@win, @shadow_win]
|
305
402
|
subwidgets = [@entry_field, @scroll_field]
|
306
|
-
self.move_specific(xplace, yplace, relative, refresh_flag,
|
307
|
-
windows, subwidgets)
|
403
|
+
self.move_specific(xplace, yplace, relative, refresh_flag, windows, subwidgets)
|
308
404
|
end
|
309
405
|
|
310
406
|
# The alphalist's focus resides in the entry widget. But the scroll widget
|
@@ -332,29 +428,37 @@ module RNDK
|
|
332
428
|
self.restoreFocus
|
333
429
|
end
|
334
430
|
|
335
|
-
#
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
end
|
431
|
+
# Draws the Widget on the Screen.
|
432
|
+
#
|
433
|
+
# If `box` is true, it is drawn with a box.
|
434
|
+
def draw box
|
435
|
+
Draw.drawShadow @shadow_win unless @shadow_win.nil?
|
341
436
|
|
342
437
|
# Draw in the entry field.
|
343
|
-
@entry_field.draw
|
438
|
+
@entry_field.draw @entry_field.box
|
344
439
|
|
345
440
|
# Draw in the scroll field.
|
346
441
|
self.drawMyScroller
|
347
442
|
end
|
348
443
|
|
349
|
-
#
|
350
|
-
|
444
|
+
# Activates the Alphalist Widget, letting the user interact with it.
|
445
|
+
#
|
446
|
+
# `actions` is an Array of characters. If it's non-null,
|
447
|
+
# will #inject each char on it into the Widget.
|
448
|
+
#
|
449
|
+
# See Alphalist for keybindings.
|
450
|
+
#
|
451
|
+
# @return The text currently inside the entry field (and
|
452
|
+
# `exit_type` will be `:NORMAL`) or `nil` (and
|
453
|
+
# `exit_type` will be `:ESCAPE_HIT`).
|
454
|
+
def activate(actions=[])
|
351
455
|
ret = 0
|
352
456
|
|
353
457
|
# Draw the widget.
|
354
458
|
self.draw(@box)
|
355
459
|
|
356
460
|
# Activate the widget.
|
357
|
-
ret = @entry_field.activate
|
461
|
+
ret = @entry_field.activate actions
|
358
462
|
|
359
463
|
# Copy the exit type from the entry field.
|
360
464
|
@exit_type = @entry_field.exit_type
|
@@ -366,80 +470,84 @@ module RNDK
|
|
366
470
|
return 0
|
367
471
|
end
|
368
472
|
|
369
|
-
#
|
370
|
-
|
473
|
+
# Makes the Alphalist react to `char` just as if the user
|
474
|
+
# had pressed it.
|
475
|
+
#
|
476
|
+
# Nice to simulate batch actions on a Widget.
|
477
|
+
#
|
478
|
+
# Besides normal keybindings (arrow keys and such), see
|
479
|
+
# Widget#set_exit_type to see how the Widget exits.
|
480
|
+
#
|
481
|
+
def inject char
|
371
482
|
ret = -1
|
372
483
|
|
373
|
-
|
374
|
-
self.draw(@box)
|
484
|
+
self.draw @box
|
375
485
|
|
376
486
|
# Inject a character into the widget.
|
377
|
-
ret = @entry_field.inject
|
487
|
+
ret = @entry_field.inject char
|
378
488
|
|
379
489
|
# Copy the eixt type from the entry field.
|
380
490
|
@exit_type = @entry_field.exit_type
|
381
491
|
|
382
492
|
# Determine the exit status.
|
383
|
-
if @exit_type == :EARLY_EXIT
|
384
|
-
ret = -1
|
385
|
-
end
|
493
|
+
ret = -1 if @exit_type == :EARLY_EXIT
|
386
494
|
|
387
495
|
@result_data = ret
|
388
|
-
|
496
|
+
ret
|
389
497
|
end
|
390
498
|
|
391
|
-
#
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
self.
|
396
|
-
self.
|
499
|
+
# Sets multiple attributes of the Widget.
|
500
|
+
#
|
501
|
+
# See Alphalist#initialize.
|
502
|
+
def set(list, filler_char, highlight, box)
|
503
|
+
self.set_contents list
|
504
|
+
self.set_filler_char filler_char
|
505
|
+
self.set_highlight highlight
|
506
|
+
self.set_box box
|
397
507
|
end
|
398
508
|
|
399
509
|
# This function sets the information inside the alphalist.
|
400
|
-
def
|
401
|
-
if
|
402
|
-
return
|
403
|
-
end
|
510
|
+
def set_contents list
|
511
|
+
return if not self.createList list
|
404
512
|
|
405
513
|
# Set the information in the scrolling list.
|
406
514
|
@scroll_field.set(@list, @list_size, false,
|
407
515
|
@scroll_field.highlight, @scroll_field.box)
|
408
516
|
|
409
517
|
# Clean out the entry field.
|
410
|
-
self.
|
518
|
+
self.set_current_item(0)
|
411
519
|
@entry_field.clean
|
412
520
|
|
413
521
|
# Redraw the widget.
|
414
522
|
self.erase
|
415
|
-
self.draw
|
523
|
+
self.draw @box
|
416
524
|
end
|
417
525
|
|
418
526
|
# This returns the contents of the widget.
|
419
|
-
def getContents
|
527
|
+
def getContents size
|
420
528
|
size << @list_size
|
421
529
|
return @list
|
422
530
|
end
|
423
531
|
|
424
532
|
# Get/set the current position in the scroll widget.
|
425
|
-
def
|
426
|
-
return @scroll_field.
|
533
|
+
def get_current_item
|
534
|
+
return @scroll_field.get_current_item
|
427
535
|
end
|
428
536
|
|
429
|
-
def
|
537
|
+
def set_current_item item
|
430
538
|
if @list_size != 0
|
431
|
-
@scroll_field.
|
432
|
-
@entry_field.setValue
|
539
|
+
@scroll_field.set_current_item item
|
540
|
+
@entry_field.setValue @list[@scroll_field.get_current_item]
|
433
541
|
end
|
434
542
|
end
|
435
543
|
|
436
544
|
# This sets the filler character of the entry field of the alphalist.
|
437
|
-
def
|
438
|
-
@filler_char =
|
439
|
-
@entry_field.
|
545
|
+
def set_filler_char char
|
546
|
+
@filler_char = char
|
547
|
+
@entry_field.set_filler_char char
|
440
548
|
end
|
441
549
|
|
442
|
-
def
|
550
|
+
def get_filler_char
|
443
551
|
return @filler_char
|
444
552
|
end
|
445
553
|
|
@@ -500,7 +608,7 @@ module RNDK
|
|
500
608
|
self.destroyInfo
|
501
609
|
|
502
610
|
# Clean the key bindings.
|
503
|
-
self.clean_bindings(:
|
611
|
+
self.clean_bindings(:alphalist)
|
504
612
|
|
505
613
|
@entry_field.destroy
|
506
614
|
@scroll_field.destroy
|
@@ -510,7 +618,7 @@ module RNDK
|
|
510
618
|
RNDK.window_delete(@win)
|
511
619
|
|
512
620
|
# Unregister the object.
|
513
|
-
RNDK::Screen.unregister(:
|
621
|
+
RNDK::Screen.unregister(:alphalist, self)
|
514
622
|
end
|
515
623
|
|
516
624
|
# This function sets the pre-process function.
|
@@ -523,13 +631,13 @@ module RNDK
|
|
523
631
|
@entry_field.setPostProcess(callback, data)
|
524
632
|
end
|
525
633
|
|
526
|
-
def createList
|
527
|
-
if
|
634
|
+
def createList list
|
635
|
+
if list.size >= 0
|
528
636
|
newlist = []
|
529
637
|
|
530
638
|
# Copy in the new information.
|
531
639
|
status = true
|
532
|
-
(0...
|
640
|
+
(0...list.size).each do |x|
|
533
641
|
newlist << list[x]
|
534
642
|
if newlist[x] == 0
|
535
643
|
status = false
|
@@ -538,7 +646,7 @@ module RNDK
|
|
538
646
|
end
|
539
647
|
if status
|
540
648
|
self.destroyInfo
|
541
|
-
@list_size =
|
649
|
+
@list_size = list.size
|
542
650
|
@list = newlist
|
543
651
|
@list.sort!
|
544
652
|
end
|
@@ -546,7 +654,7 @@ module RNDK
|
|
546
654
|
self.destroyInfo
|
547
655
|
status = true
|
548
656
|
end
|
549
|
-
|
657
|
+
status
|
550
658
|
end
|
551
659
|
|
552
660
|
def focus
|
@@ -566,7 +674,7 @@ module RNDK
|
|
566
674
|
end
|
567
675
|
|
568
676
|
def object_type
|
569
|
-
:
|
677
|
+
:alphalist
|
570
678
|
end
|
571
679
|
end
|
572
680
|
end
|
data/lib/rndk/button.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'rndk'
|
2
2
|
|
3
3
|
module RNDK
|
4
|
-
class BUTTON <
|
4
|
+
class BUTTON < Widget
|
5
5
|
def initialize(rndkscreen, xplace, yplace, text, callback, box, shadow)
|
6
6
|
super()
|
7
7
|
parent_width = Ncurses.getmaxx(rndkscreen.window)
|
@@ -177,7 +177,7 @@ module RNDK
|
|
177
177
|
end
|
178
178
|
end
|
179
179
|
|
180
|
-
#
|
180
|
+
# @see Widget#move
|
181
181
|
def move(xplace, yplace, relative, refresh_flag)
|
182
182
|
current_x = Ncurses.getbegx(@win)
|
183
183
|
current_y = Ncurses.getbegy(@win)
|
@@ -366,5 +366,7 @@ module RNDK
|
|
366
366
|
def object_type
|
367
367
|
:BUTTON
|
368
368
|
end
|
369
|
+
|
369
370
|
end
|
370
371
|
end
|
372
|
+
|