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/fselect.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'rndk'
|
2
2
|
|
3
3
|
module RNDK
|
4
|
-
class FSELECT <
|
4
|
+
class FSELECT < Widget
|
5
5
|
attr_reader :scroll_field, :entry_field
|
6
6
|
attr_reader :dir_attribute, :file_attribute, :link_attribute, :highlight
|
7
7
|
attr_reader :sock_attribute, :field_attribute, :filler_character
|
@@ -83,7 +83,7 @@ module RNDK
|
|
83
83
|
then RNDK::FULL
|
84
84
|
else box_width - 2 - label_len
|
85
85
|
end
|
86
|
-
@entry_field = RNDK::
|
86
|
+
@entry_field = RNDK::Entry.new(rndkscreen, Ncurses.getbegx(@win), Ncurses.getbegy(@win),
|
87
87
|
title, label, field_attribute, filler_char, :MIXED, temp_width,
|
88
88
|
0, 512, box, false)
|
89
89
|
|
@@ -148,7 +148,7 @@ module RNDK
|
|
148
148
|
]
|
149
149
|
|
150
150
|
# Create the pop up label.
|
151
|
-
info_label = RNDK::
|
151
|
+
info_label = RNDK::Label.new(entry.screen, RNDK::CENTER, RNDK::CENTER,
|
152
152
|
mesg, 9, true, false)
|
153
153
|
info_label.draw(true)
|
154
154
|
info_label.getch([])
|
@@ -351,12 +351,12 @@ module RNDK
|
|
351
351
|
end
|
352
352
|
|
353
353
|
# Define the callbacks for the entry field.
|
354
|
-
@entry_field.bind(:
|
355
|
-
@entry_field.bind(:
|
356
|
-
@entry_field.bind(:
|
357
|
-
@entry_field.bind(:
|
358
|
-
@entry_field.bind(:
|
359
|
-
@entry_field.bind(:
|
354
|
+
@entry_field.bind(:entry, Ncurses::KEY_UP, adjust_scroll_cb, self)
|
355
|
+
@entry_field.bind(:entry, Ncurses::KEY_PPAGE, adjust_scroll_cb, self)
|
356
|
+
@entry_field.bind(:entry, Ncurses::KEY_DOWN, adjust_scroll_cb, self)
|
357
|
+
@entry_field.bind(:entry, Ncurses::KEY_NPAGE, adjust_scroll_cb, self)
|
358
|
+
@entry_field.bind(:entry, RNDK::KEY_TAB, complete_filename_cb, self)
|
359
|
+
@entry_field.bind(:entry, RNDK.CTRL('^'), display_file_info_cb, self)
|
360
360
|
|
361
361
|
# Put the current working directory in the entry field.
|
362
362
|
@entry_field.setValue(@pwd)
|
@@ -367,7 +367,7 @@ module RNDK
|
|
367
367
|
then RNDK::FULL
|
368
368
|
else box_width - 1
|
369
369
|
end
|
370
|
-
@scroll_field = RNDK::
|
370
|
+
@scroll_field = RNDK::Scroll.new(rndkscreen,
|
371
371
|
Ncurses.getbegx(@win), Ncurses.getbegy(@win) + temp_height, RNDK::RIGHT,
|
372
372
|
box_height - temp_height, temp_width, '', @dir_contents,
|
373
373
|
@file_counter, false, @highlight, box, false)
|
@@ -608,11 +608,9 @@ module RNDK
|
|
608
608
|
dir_list = []
|
609
609
|
|
610
610
|
# Get the directory contents
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
return false
|
615
|
-
end
|
611
|
+
dir_list = RNDK.get_directory_contents @pwd
|
612
|
+
|
613
|
+
return false if dir_list.size <= 0
|
616
614
|
|
617
615
|
@dir_contents = dir_list
|
618
616
|
@file_counter = file_count
|
data/lib/rndk/fslider.rb
CHANGED
data/lib/rndk/graph.rb
CHANGED
data/lib/rndk/histogram.rb
CHANGED
data/lib/rndk/itemlist.rb
CHANGED
data/lib/rndk/label.rb
CHANGED
@@ -2,9 +2,9 @@ require 'rndk'
|
|
2
2
|
|
3
3
|
module RNDK
|
4
4
|
|
5
|
-
#
|
5
|
+
# Customizable text on the screen.
|
6
6
|
#
|
7
|
-
class
|
7
|
+
class Label < Widget
|
8
8
|
|
9
9
|
# Raw Ncurses window.
|
10
10
|
attr_accessor :win
|
@@ -105,7 +105,7 @@ module RNDK
|
|
105
105
|
end
|
106
106
|
|
107
107
|
# Register this
|
108
|
-
rndkscreen.register(:
|
108
|
+
rndkscreen.register(:label, self)
|
109
109
|
end
|
110
110
|
|
111
111
|
# Obsolete entrypoint which calls Label#draw.
|
@@ -162,7 +162,7 @@ module RNDK
|
|
162
162
|
end
|
163
163
|
|
164
164
|
def object_type
|
165
|
-
:
|
165
|
+
:label
|
166
166
|
end
|
167
167
|
|
168
168
|
def position
|
@@ -211,9 +211,9 @@ module RNDK
|
|
211
211
|
RNDK.window_delete @shadow_win
|
212
212
|
RNDK.window_delete @win
|
213
213
|
|
214
|
-
self.clean_bindings :
|
214
|
+
self.clean_bindings :label
|
215
215
|
|
216
|
-
RNDK::Screen.unregister(:
|
216
|
+
RNDK::Screen.unregister(:label, self)
|
217
217
|
end
|
218
218
|
|
219
219
|
# Waits for the user to press a key.
|
@@ -237,3 +237,4 @@ module RNDK
|
|
237
237
|
|
238
238
|
end
|
239
239
|
end
|
240
|
+
|
data/lib/rndk/marquee.rb
CHANGED
data/lib/rndk/matrix.rb
CHANGED
data/lib/rndk/mentry.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'rndk'
|
2
2
|
|
3
3
|
module RNDK
|
4
|
-
class
|
4
|
+
class MEntry < Widget
|
5
5
|
attr_accessor :info, :current_col, :current_row, :top_row
|
6
6
|
attr_reader :disp_type, :field_width, :rows, :field_win
|
7
7
|
|
@@ -158,7 +158,7 @@ module RNDK
|
|
158
158
|
end
|
159
159
|
|
160
160
|
# Register
|
161
|
-
rndkscreen.register(:
|
161
|
+
rndkscreen.register(:MEntry, self)
|
162
162
|
end
|
163
163
|
|
164
164
|
# This actually activates the mentry widget...
|
@@ -249,14 +249,14 @@ module RNDK
|
|
249
249
|
# Check if there is a pre-process function to be called.
|
250
250
|
unless @pre_process_func.nil?
|
251
251
|
# Call the pre-process function
|
252
|
-
pp_return = @pre_process_func.call(:
|
252
|
+
pp_return = @pre_process_func.call(:MEntry, self,
|
253
253
|
@pre_process_data, input)
|
254
254
|
end
|
255
255
|
|
256
256
|
# Should we continue?
|
257
257
|
if pp_return != 0
|
258
258
|
# Check for a key binding...
|
259
|
-
if self.checkBind(:
|
259
|
+
if self.checkBind(:MEntry, input)
|
260
260
|
complete = true
|
261
261
|
else
|
262
262
|
moved = false
|
@@ -419,7 +419,7 @@ module RNDK
|
|
419
419
|
|
420
420
|
# Should we do a post-process?
|
421
421
|
if !complete && !(@post_process_func.nil?)
|
422
|
-
@post_process_func.call(:
|
422
|
+
@post_process_func.call(:MEntry, self, @post_process_data, input)
|
423
423
|
end
|
424
424
|
end
|
425
425
|
|
@@ -519,10 +519,10 @@ module RNDK
|
|
519
519
|
RNDK.window_delete(@win)
|
520
520
|
|
521
521
|
# Clean the key bindings.
|
522
|
-
self.clean_bindings(:
|
522
|
+
self.clean_bindings(:MEntry)
|
523
523
|
|
524
524
|
# Unregister this object.
|
525
|
-
RNDK::Screen.unregister(:
|
525
|
+
RNDK::Screen.unregister(:MEntry, self)
|
526
526
|
end
|
527
527
|
|
528
528
|
# This sets multiple attributes of the widget.
|
@@ -613,7 +613,7 @@ module RNDK
|
|
613
613
|
end
|
614
614
|
|
615
615
|
def object_type
|
616
|
-
:
|
616
|
+
:MEntry
|
617
617
|
end
|
618
618
|
end
|
619
619
|
end
|
data/lib/rndk/menu.rb
CHANGED
data/lib/rndk/radio.rb
CHANGED
data/lib/rndk/scale.rb
CHANGED
data/lib/rndk/scroll.rb
CHANGED
@@ -1,30 +1,100 @@
|
|
1
1
|
require 'rndk/scroller'
|
2
2
|
|
3
3
|
module RNDK
|
4
|
-
|
4
|
+
|
5
|
+
# A scrolling list of text.
|
6
|
+
#
|
7
|
+
# ## Keybindings
|
8
|
+
#
|
9
|
+
# Left Arrow:: Shift the list left one column.
|
10
|
+
# Right Arrow:: Shift the list right one column.
|
11
|
+
# Up Arrow:: Select the previous item in the list.
|
12
|
+
# Down Arrow:: Select the next item in the list.
|
13
|
+
# Prev Page:: Scroll one page backward.
|
14
|
+
# Ctrl-B:: Scroll one page backward.
|
15
|
+
# Next Page:: Scroll one page forward.
|
16
|
+
# Ctrl-F:: Scroll one page forward.
|
17
|
+
# 1:: Move to the first element in the list.
|
18
|
+
# <:: Move to the first element in the list.
|
19
|
+
# g:: Move to the first element in the list.
|
20
|
+
# Home:: Move to the first element in the list.
|
21
|
+
# >:: Move to the last element in the list.
|
22
|
+
# G:: Move to the last element in the list.
|
23
|
+
# End:: Move to the last element in the list.
|
24
|
+
# $:: Shift the list to the far right.
|
25
|
+
# |:: Shift the list to the far left.
|
26
|
+
# Return:: Exit the widget and return the index
|
27
|
+
# of the selected item. Also set the
|
28
|
+
# widget `exit_type` to `:NORMAL`.
|
29
|
+
# Tab:: Exit the widget and return the index
|
30
|
+
# of the selected item. Also set the
|
31
|
+
# widget `exit_type` to `:NORMAL`.
|
32
|
+
# Escape:: Exit the widget and return -1. Also
|
33
|
+
# set the widget `exit_type` `:ESCAPE_HIT`.
|
34
|
+
# Ctrl-L:: Refreshes the screen.
|
35
|
+
#
|
36
|
+
class Scroll < SCROLLER
|
5
37
|
attr_reader :item, :list_size, :current_item, :highlight
|
6
38
|
|
7
|
-
|
8
|
-
|
39
|
+
# Creates a Scroll Widget.
|
40
|
+
#
|
41
|
+
# * `xplace` is the x position - can be an integer or
|
42
|
+
# `RNDK::LEFT`, `RNDK::RIGHT`, `RNDK::CENTER`.
|
43
|
+
# * `yplace` is the y position - can be an integer or
|
44
|
+
# `RNDK::TOP`, `RNDK::BOTTOM`, `RNDK::CENTER`.
|
45
|
+
# * `splace` is where the scrollbar will be placed.
|
46
|
+
# It can be only `RNDK::LEFT`, `RNDK::RIGHT` or
|
47
|
+
# `RNDK::NONE`, for no scrollbar.
|
48
|
+
# * `width`/`height` are integers - if either are 0, Widget
|
49
|
+
# will be created with full width/height of the screen.
|
50
|
+
# If it's a negative value, will create with full width/height
|
51
|
+
# minus the value.
|
52
|
+
# * `title` can be more than one line - just split them
|
53
|
+
# with `\n`s.
|
54
|
+
# * `list` is an Array of Strings to be shown on the Widget.
|
55
|
+
# * `numbers` is a flag to turn on/off line numbering at
|
56
|
+
# the front of the list items.
|
57
|
+
# * `highlight` is the attribute/color of the currently selected
|
58
|
+
# item at the list.
|
59
|
+
# * `box` if the Widget is drawn with a box outside it.
|
60
|
+
# * `shadow` turns on/off the shadow around the Widget.
|
61
|
+
#
|
62
|
+
def initialize (rndkscreen,
|
63
|
+
xplace,
|
64
|
+
yplace,
|
65
|
+
splace,
|
66
|
+
width,
|
67
|
+
height,
|
68
|
+
title,
|
69
|
+
list,
|
70
|
+
numbers,
|
71
|
+
highlight,
|
72
|
+
box,
|
73
|
+
shadow)
|
9
74
|
super()
|
10
|
-
|
11
|
-
|
12
|
-
|
75
|
+
|
76
|
+
parent_width = Ncurses.getmaxx rndkscreen.window
|
77
|
+
parent_height = Ncurses.getmaxy rndkscreen.window
|
78
|
+
|
79
|
+
box_width = width
|
13
80
|
box_height = height
|
81
|
+
|
14
82
|
xpos = xplace
|
15
83
|
ypos = yplace
|
84
|
+
|
16
85
|
scroll_adjust = 0
|
86
|
+
|
17
87
|
bindings = {
|
18
88
|
RNDK::BACKCHAR => Ncurses::KEY_PPAGE,
|
19
89
|
RNDK::FORCHAR => Ncurses::KEY_NPAGE,
|
20
|
-
'g'
|
21
|
-
'1'
|
22
|
-
'G'
|
23
|
-
'<'
|
24
|
-
'>'
|
90
|
+
'g' => Ncurses::KEY_HOME,
|
91
|
+
'1' => Ncurses::KEY_HOME,
|
92
|
+
'G' => Ncurses::KEY_END,
|
93
|
+
'<' => Ncurses::KEY_HOME,
|
94
|
+
'>' => Ncurses::KEY_END
|
25
95
|
}
|
26
96
|
|
27
|
-
self.set_box
|
97
|
+
self.set_box box
|
28
98
|
|
29
99
|
# If the height is a negative value, the height will be ROWS-height,
|
30
100
|
# otherwise the height will be the given height
|
@@ -38,7 +108,7 @@ module RNDK
|
|
38
108
|
|
39
109
|
# Set the box height.
|
40
110
|
if @title_lines > box_height
|
41
|
-
box_height = @title_lines + [
|
111
|
+
box_height = @title_lines + [list.size, 8].min + 2 * @border_size
|
42
112
|
end
|
43
113
|
|
44
114
|
# Adjust the box width if there is a scroll bar
|
@@ -59,7 +129,7 @@ module RNDK
|
|
59
129
|
else box_height
|
60
130
|
end
|
61
131
|
|
62
|
-
self.setViewSize(
|
132
|
+
self.setViewSize(list.size)
|
63
133
|
|
64
134
|
# Rejustify the x and y positions if we need to.
|
65
135
|
xtmp = [xpos]
|
@@ -81,20 +151,27 @@ module RNDK
|
|
81
151
|
|
82
152
|
# Create the scrollbar window.
|
83
153
|
if splace == RNDK::RIGHT
|
84
|
-
@scrollbar_win = Ncurses.subwin(@win,
|
85
|
-
|
154
|
+
@scrollbar_win = Ncurses.subwin(@win,
|
155
|
+
self.maxViewSize,
|
156
|
+
1,
|
157
|
+
self.Screen_YPOS(ypos),
|
158
|
+
xpos + box_width - @border_size - 1)
|
86
159
|
elsif splace == RNDK::LEFT
|
87
|
-
@scrollbar_win = Ncurses.subwin(@win,
|
88
|
-
|
160
|
+
@scrollbar_win = Ncurses.subwin(@win,
|
161
|
+
self.maxViewSize,
|
162
|
+
1,
|
163
|
+
self.Screen_YPOS(ypos),
|
164
|
+
self.Screen_XPOS(xpos))
|
89
165
|
else
|
90
166
|
@scrollbar_win = nil
|
91
167
|
end
|
92
168
|
|
93
169
|
# create the list window
|
94
|
-
@list_win = Ncurses.subwin(@win,
|
95
|
-
|
96
|
-
|
97
|
-
|
170
|
+
@list_win = Ncurses.subwin(@win,
|
171
|
+
self.maxViewSize,
|
172
|
+
box_width - (2 * @border_size) - scroll_adjust,
|
173
|
+
self.Screen_YPOS(ypos),
|
174
|
+
self.Screen_XPOS(xpos) + (if splace == RNDK::LEFT then 1 else 0 end))
|
98
175
|
|
99
176
|
# Set the rest of the variables
|
100
177
|
@screen = rndkscreen
|
@@ -112,33 +189,36 @@ module RNDK
|
|
112
189
|
self.setPosition(0);
|
113
190
|
|
114
191
|
# Create the scrolling list item list and needed variables.
|
115
|
-
if self.createItemList(numbers, list,
|
192
|
+
if self.createItemList(numbers, list, list.size) <= 0
|
116
193
|
return nil
|
117
194
|
end
|
118
195
|
|
119
196
|
# Do we need to create a shadow?
|
120
197
|
if shadow
|
121
|
-
@shadow_win = Ncurses.newwin(@box_height,
|
122
|
-
|
198
|
+
@shadow_win = Ncurses.newwin(@box_height,
|
199
|
+
box_width,
|
200
|
+
ypos + 1,
|
201
|
+
xpos + 1)
|
123
202
|
end
|
124
203
|
|
125
204
|
# Set up the key bindings.
|
126
205
|
bindings.each do |from, to|
|
127
|
-
#self.bind(:
|
128
|
-
self.bind(:
|
206
|
+
#self.bind(:scroll, from, getc_lambda, to)
|
207
|
+
self.bind(:scroll, from, :getc, to)
|
129
208
|
end
|
130
209
|
|
131
|
-
rndkscreen.register(:
|
210
|
+
rndkscreen.register(:scroll, self);
|
132
211
|
|
133
212
|
return self
|
134
213
|
end
|
135
214
|
|
136
215
|
def object_type
|
137
|
-
:
|
216
|
+
:scroll
|
138
217
|
end
|
139
218
|
|
219
|
+
# @see Widget#position
|
140
220
|
def position
|
141
|
-
super
|
221
|
+
super @win
|
142
222
|
end
|
143
223
|
|
144
224
|
# Put the cursor on the currently-selected item's row.
|
@@ -151,29 +231,31 @@ module RNDK
|
|
151
231
|
Ncurses.wrefresh(@input_window)
|
152
232
|
end
|
153
233
|
|
154
|
-
#
|
155
|
-
|
234
|
+
# Activates the Widget, letting the user interact with it.
|
235
|
+
#
|
236
|
+
# `actions` is an Array of characters. If it's non-null,
|
237
|
+
# will #inject each char on it into the Widget.
|
238
|
+
#
|
239
|
+
def activate(actions=[])
|
156
240
|
# Draw the scrolling list
|
157
241
|
self.draw(@box)
|
158
242
|
|
159
243
|
if actions.nil? || actions.size == 0
|
160
|
-
|
244
|
+
loop do
|
161
245
|
self.fixCursorPosition
|
162
246
|
input = self.getch([])
|
163
247
|
|
164
248
|
# Inject the character into the widget.
|
165
|
-
ret = self.inject
|
166
|
-
|
167
|
-
|
168
|
-
end
|
249
|
+
ret = self.inject input
|
250
|
+
|
251
|
+
return ret if @exit_type != :EARLY_EXIT
|
169
252
|
end
|
170
253
|
else
|
171
254
|
# Inject each character one at a time.
|
172
255
|
actions.each do |action|
|
173
|
-
ret = self.inject
|
174
|
-
|
175
|
-
|
176
|
-
end
|
256
|
+
ret = self.inject action
|
257
|
+
|
258
|
+
return ret if @exit_type != :EARLY_EXIT
|
177
259
|
end
|
178
260
|
end
|
179
261
|
|
@@ -182,8 +264,8 @@ module RNDK
|
|
182
264
|
return -1
|
183
265
|
end
|
184
266
|
|
185
|
-
#
|
186
|
-
def inject
|
267
|
+
# @see Widget#inject
|
268
|
+
def inject input
|
187
269
|
pp_return = 1
|
188
270
|
ret = -1
|
189
271
|
complete = false
|
@@ -196,14 +278,14 @@ module RNDK
|
|
196
278
|
|
197
279
|
#Check if there is a pre-process function to be called.
|
198
280
|
unless @pre_process_func.nil?
|
199
|
-
pp_return = @pre_process_func.call(:
|
281
|
+
pp_return = @pre_process_func.call(:scroll, self,
|
200
282
|
@pre_process_data, input)
|
201
283
|
end
|
202
284
|
|
203
285
|
# Should we continue?
|
204
286
|
if pp_return != 0
|
205
287
|
# Check for a predefined key binding.
|
206
|
-
if self.checkBind(:
|
288
|
+
if self.checkBind(:scroll, input) != false
|
207
289
|
#self.checkEarlyExit
|
208
290
|
complete = true
|
209
291
|
else
|
@@ -245,7 +327,7 @@ module RNDK
|
|
245
327
|
end
|
246
328
|
|
247
329
|
if !complete && !(@post_process_func.nil?)
|
248
|
-
@post_process_func.call(:
|
330
|
+
@post_process_func.call(:scroll, self, @post_process_data, input)
|
249
331
|
end
|
250
332
|
end
|
251
333
|
|
@@ -279,8 +361,8 @@ module RNDK
|
|
279
361
|
# This moves the scroll field to the given location.
|
280
362
|
def move(xplace, yplace, relative, refresh_flag)
|
281
363
|
windows = [@win, @list_win, @shadow_win, @scrollbar_win]
|
282
|
-
|
283
|
-
|
364
|
+
|
365
|
+
self.move_specific(xplace, yplace, relative, refresh_flag, windows, [])
|
284
366
|
end
|
285
367
|
|
286
368
|
# This function draws the scrolling list widget.
|
@@ -311,7 +393,7 @@ module RNDK
|
|
311
393
|
@item_len[@current_item])
|
312
394
|
end
|
313
395
|
|
314
|
-
def drawList
|
396
|
+
def drawList box
|
315
397
|
# If the list is empty, don't draw anything.
|
316
398
|
if @list_size > 0
|
317
399
|
# Redraw the list
|
@@ -390,10 +472,10 @@ module RNDK
|
|
390
472
|
RNDK.window_delete(@win)
|
391
473
|
|
392
474
|
# Clean the key bindings.
|
393
|
-
self.clean_bindings(:
|
475
|
+
self.clean_bindings(:scroll)
|
394
476
|
|
395
477
|
# Unregister this object
|
396
|
-
RNDK::Screen.unregister(:
|
478
|
+
RNDK::Screen.unregister(:scroll, self)
|
397
479
|
end
|
398
480
|
|
399
481
|
# This function erases the scrolling list from the screen.
|
@@ -592,12 +674,10 @@ module RNDK
|
|
592
674
|
|
593
675
|
self.setViewSize(@list_size - 1)
|
594
676
|
|
595
|
-
if @list_size > 0
|
596
|
-
self.resequence
|
597
|
-
end
|
677
|
+
self.resequence if @list_size > 0
|
598
678
|
|
599
679
|
if @list_size < self.maxViewSize
|
600
|
-
@win
|
680
|
+
Ncurses.werase @win # force the next redraw to be complete
|
601
681
|
end
|
602
682
|
|
603
683
|
# do this to update the view size, etc
|
@@ -629,5 +709,8 @@ module RNDK
|
|
629
709
|
def WidestItem
|
630
710
|
@max_left_char + self.AvailableWidth
|
631
711
|
end
|
712
|
+
|
713
|
+
private
|
714
|
+
|
632
715
|
end
|
633
716
|
end
|
data/lib/rndk/scroller.rb
CHANGED
@@ -2,7 +2,13 @@ require 'rndk'
|
|
2
2
|
|
3
3
|
module RNDK
|
4
4
|
|
5
|
-
|
5
|
+
# Common actions and functionality between
|
6
|
+
# scrolling Widgets.
|
7
|
+
#
|
8
|
+
# @note Do **not** instantiate this class!
|
9
|
+
# Use it's subclasses.
|
10
|
+
class SCROLLER < Widget
|
11
|
+
|
6
12
|
def initialize
|
7
13
|
super()
|
8
14
|
end
|
@@ -181,5 +187,7 @@ module RNDK
|
|
181
187
|
def setCurrentItem(item)
|
182
188
|
self.setPosition(item);
|
183
189
|
end
|
190
|
+
|
184
191
|
end
|
185
192
|
end
|
193
|
+
|
data/lib/rndk/selection.rb
CHANGED