rndk 0.1.0 → 0.2.0
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 +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
|
+
|