rndk 0.2.0 → 1.0.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/README.md +13 -4
- data/TODO +21 -1
- data/demos/appointment.rb +279 -299
- data/demos/clock.rb +13 -8
- data/demos/rss-reader.rb +84 -0
- data/examples/01-hello-world.rb +13 -11
- data/examples/02-colors.rb +14 -21
- data/examples/03-markup.rb +7 -7
- data/examples/04-quick-widgets.rb +2 -2
- data/examples/05-position-widget.rb +50 -31
- data/examples/06-callbacks.rb +77 -0
- data/examples/07-traverse.rb +90 -0
- data/examples/10-all-widgets.rb +165 -0
- data/examples/calendar.rb +20 -32
- data/examples/entry.rb +15 -20
- data/examples/label.rb +11 -11
- data/examples/scroll.rb +16 -60
- data/examples/slider.rb +18 -19
- data/examples/viewer.rb +65 -0
- data/lib/rndk.rb +28 -7
- data/lib/rndk/alphalist.rb +309 -313
- data/lib/rndk/button.rb +239 -157
- data/lib/rndk/buttonbox.rb +136 -103
- data/lib/rndk/calendar.rb +246 -203
- data/lib/rndk/core/color.rb +63 -13
- data/lib/rndk/core/display.rb +1 -1
- data/lib/rndk/core/draw.rb +11 -11
- data/lib/rndk/core/markup.rb +21 -21
- data/lib/rndk/core/quick_widgets.rb +75 -96
- data/lib/rndk/core/screen.rb +145 -102
- data/lib/rndk/core/traverse.rb +150 -136
- data/lib/rndk/core/utils.rb +5 -6
- data/lib/rndk/core/widget.rb +207 -191
- data/lib/rndk/core/widget_bind.rb +108 -0
- data/lib/rndk/dialog.rb +88 -56
- data/lib/rndk/entry.rb +79 -64
- data/lib/rndk/fscale.rb +38 -20
- data/lib/rndk/fslider.rb +38 -23
- data/lib/rndk/graph.rb +92 -53
- data/lib/rndk/itemlist.rb +80 -62
- data/lib/rndk/label.rb +111 -77
- data/lib/rndk/radio.rb +138 -128
- data/lib/rndk/scale.rb +123 -122
- data/lib/rndk/scroll.rb +444 -391
- data/lib/rndk/scroller.rb +21 -21
- data/lib/rndk/slider.rb +149 -140
- data/lib/rndk/template.rb +74 -61
- data/lib/rndk/version.rb +1 -1
- data/lib/rndk/viewer.rb +499 -298
- metadata +8 -14
- data/demos/fileview.rb +0 -141
- data/lib/rndk/dscale.rb +0 -13
- data/lib/rndk/fselect.rb +0 -938
- data/lib/rndk/histogram.rb +0 -412
- data/lib/rndk/marquee.rb +0 -244
- data/lib/rndk/matrix.rb +0 -1189
- data/lib/rndk/mentry.rb +0 -619
- data/lib/rndk/menu.rb +0 -478
- data/lib/rndk/selection.rb +0 -630
- data/lib/rndk/swindow.rb +0 -766
- data/lib/rndk/uscale.rb +0 -14
- data/lib/rndk/uslider.rb +0 -14
data/lib/rndk/core/utils.rb
CHANGED
@@ -21,7 +21,7 @@ module RNDK
|
|
21
21
|
end
|
22
22
|
|
23
23
|
# This looks for a subset of a word in the given list
|
24
|
-
def RNDK.
|
24
|
+
def RNDK.search_list(list, list_size, pattern)
|
25
25
|
index = -1
|
26
26
|
|
27
27
|
if pattern.size > 0
|
@@ -92,7 +92,7 @@ module RNDK
|
|
92
92
|
# If the dimension is a negative value, the dimension will be the full
|
93
93
|
# height/width of the parent window - the value of the dimension. Otherwise,
|
94
94
|
# the dimension will be the given value.
|
95
|
-
def RNDK.
|
95
|
+
def RNDK.set_widget_dimension (parent_dim, proposed_dim, adjustment)
|
96
96
|
# If the user passed in FULL, return the parents size
|
97
97
|
if proposed_dim == FULL or proposed_dim == 0
|
98
98
|
parent_dim
|
@@ -119,7 +119,7 @@ module RNDK
|
|
119
119
|
# Reads a file and concatenate it's lines into `array`.
|
120
120
|
#
|
121
121
|
# @note The lines don't end with '\n'.
|
122
|
-
def RNDK.read_file
|
122
|
+
def RNDK.read_file filename
|
123
123
|
begin
|
124
124
|
fd = File.new(filename, "r")
|
125
125
|
rescue
|
@@ -133,10 +133,9 @@ module RNDK
|
|
133
133
|
line
|
134
134
|
end
|
135
135
|
end
|
136
|
-
|
137
|
-
array.concat lines
|
138
136
|
fd.close
|
139
|
-
|
137
|
+
|
138
|
+
lines
|
140
139
|
end
|
141
140
|
|
142
141
|
end
|
data/lib/rndk/core/widget.rb
CHANGED
@@ -1,21 +1,31 @@
|
|
1
1
|
require 'rndk'
|
2
|
+
require 'rndk/core/widget_bind'
|
2
3
|
|
3
4
|
module RNDK
|
4
5
|
|
5
6
|
# Wrapper on common functionality between all RNDK Widgets.
|
6
7
|
#
|
7
8
|
class Widget
|
9
|
+
# Which widget this is.
|
10
|
+
# It's the name of the widget lowercased.
|
11
|
+
# Example: `:label`, `:calendar`, `:alphalist`
|
12
|
+
attr_reader :widget_type
|
13
|
+
|
8
14
|
attr_accessor :screen_index, :screen, :has_focus, :is_visible, :box
|
9
15
|
attr_accessor :ULChar, :URChar, :LLChar, :LRChar, :HZChar, :VTChar, :BXAttr
|
10
16
|
attr_reader :binding_list, :accepts_focus, :exit_type, :border_size
|
11
17
|
|
18
|
+
# All the signals the current widget supports.
|
19
|
+
# Use them on Widget#bind_signal
|
20
|
+
attr_reader :supported_signals
|
21
|
+
|
12
22
|
@@g_paste_buffer = ''
|
13
23
|
|
14
24
|
def initialize
|
15
25
|
@has_focus = true
|
16
26
|
@is_visible = true
|
17
27
|
|
18
|
-
RNDK::
|
28
|
+
RNDK::ALL_WIDGETS << self
|
19
29
|
|
20
30
|
# set default line-drawing characters
|
21
31
|
@ULChar = Ncurses::ACS_ULCORNER
|
@@ -24,7 +34,7 @@ module RNDK
|
|
24
34
|
@LRChar = Ncurses::ACS_LRCORNER
|
25
35
|
@HZChar = Ncurses::ACS_HLINE
|
26
36
|
@VTChar = Ncurses::ACS_VLINE
|
27
|
-
@BXAttr =
|
37
|
+
@BXAttr = RNDK::Color[:normal]
|
28
38
|
|
29
39
|
# set default exit-types
|
30
40
|
@exit_type = :NEVER_ACTIVATED
|
@@ -34,16 +44,49 @@ module RNDK
|
|
34
44
|
|
35
45
|
# Bound functions
|
36
46
|
@binding_list = {}
|
47
|
+
|
48
|
+
# Actions to be executed at certain signals
|
49
|
+
@actions = {}
|
50
|
+
|
51
|
+
@supported_signals = []
|
52
|
+
@supported_signals << :destroy
|
37
53
|
end
|
38
54
|
|
39
|
-
|
40
|
-
|
41
|
-
|
55
|
+
# Makes `block` execute right before processing input
|
56
|
+
# on the Widget.
|
57
|
+
#
|
58
|
+
# `block` is called with the following arguments:
|
59
|
+
#
|
60
|
+
# * The Widget type (`:scroll`, `:calendar`, etc)
|
61
|
+
# * The Widget itself (`self`)
|
62
|
+
# * That `data` you send as an argument to `before_processing`.
|
63
|
+
# * The input character the Widget just received.
|
64
|
+
#
|
65
|
+
# Make good use of them when making your callback.
|
66
|
+
def before_processing(data=nil, &block)
|
67
|
+
@pre_process_data = data
|
68
|
+
@pre_process_func = block
|
42
69
|
end
|
43
70
|
|
44
|
-
|
45
|
-
|
46
|
-
|
71
|
+
# Makes `block` execute right after processing input
|
72
|
+
# on the Widget.
|
73
|
+
#
|
74
|
+
# `block` is called with the following arguments:
|
75
|
+
#
|
76
|
+
# * The Widget type (`:scroll`, `:calendar`, etc)
|
77
|
+
# * The Widget itself (`self`)
|
78
|
+
# * That `data` you send as an argument to `after_processing`.
|
79
|
+
# * The input character the Widget just received.
|
80
|
+
#
|
81
|
+
# Make good use of them when making your callback.
|
82
|
+
def after_processing(data=nil, &block)
|
83
|
+
@post_process_data = data
|
84
|
+
@post_process_func = block
|
85
|
+
end
|
86
|
+
|
87
|
+
def widget_type
|
88
|
+
# no type by default
|
89
|
+
:NULL
|
47
90
|
end
|
48
91
|
|
49
92
|
def Screen_XPOS(n)
|
@@ -64,19 +107,19 @@ module RNDK
|
|
64
107
|
|
65
108
|
# Moves the Widget to the given position.
|
66
109
|
#
|
67
|
-
# * `
|
110
|
+
# * `x` and `y` are the new position of the Widget.
|
68
111
|
#
|
69
|
-
# * `
|
112
|
+
# * `x` may be an integer or one of the pre-defined
|
70
113
|
# values `RNDK::TOP`, `RNDK::BOTTOM`, and `RNDK::CENTER`.
|
71
114
|
#
|
72
|
-
# * `
|
115
|
+
# * `y` may be an integer or one of the pre-defined
|
73
116
|
# values `RNDK::LEFT`, `RNDK::RIGHT`, and `RNDK::CENTER`.
|
74
117
|
#
|
75
|
-
# * `relative` states whether the `
|
118
|
+
# * `relative` states whether the `x`/`y` pair is a
|
76
119
|
# relative move over it's current position or an absolute move
|
77
120
|
# over the Screen's top.
|
78
121
|
#
|
79
|
-
# For example, if `
|
122
|
+
# For example, if `x = 1` and `y = 2` and `relative = true`,
|
80
123
|
# the Widget would move one row down and two columns right.
|
81
124
|
#
|
82
125
|
# If the value of relative was `false` then the widget would move to
|
@@ -88,49 +131,51 @@ module RNDK
|
|
88
131
|
# * `refresh_flag` is a boolean value which states whether the
|
89
132
|
# Widget will get refreshed after the move.
|
90
133
|
#
|
91
|
-
def move(
|
92
|
-
self.move_specific(
|
134
|
+
def move(x, y, relative, refresh_flag)
|
135
|
+
self.move_specific(x, y, relative, refresh_flag, [@win, @shadow_win], [])
|
93
136
|
end
|
94
137
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
xpos = xplace
|
99
|
-
ypos = yplace
|
100
|
-
|
101
|
-
# If this is a relative move, then we will adjust where we want
|
102
|
-
# to move to.
|
103
|
-
if relative
|
104
|
-
xpos = Ncurses.getbegx(@win) + xplace
|
105
|
-
ypos = Ncurses.getbegy(@win) + yplace
|
106
|
-
end
|
107
|
-
|
108
|
-
# Adjust the window if we need to
|
109
|
-
xtmp = [xpos]
|
110
|
-
ytmp = [ypos]
|
111
|
-
RNDK.alignxy(@screen.window, xtmp, ytmp, @box_width, @box_height)
|
112
|
-
xpos = xtmp[0]
|
113
|
-
ypos = ytmp[0]
|
138
|
+
# Set the widget's title.
|
139
|
+
def set_title(title, box_width)
|
140
|
+
return if title.nil?
|
114
141
|
|
115
|
-
|
116
|
-
|
117
|
-
ydiff = current_y - ypos
|
142
|
+
temp = title.split "\n"
|
143
|
+
@title_lines = temp.size
|
118
144
|
|
119
|
-
|
120
|
-
|
121
|
-
|
145
|
+
if box_width >= 0
|
146
|
+
max_width = 0
|
147
|
+
temp.each do |line|
|
148
|
+
len = []
|
149
|
+
align = []
|
150
|
+
holder = RNDK.char2Chtype(line, len, align)
|
151
|
+
max_width = [len[0], max_width].max
|
152
|
+
end
|
153
|
+
box_width = [box_width, max_width + 2 * @border_size].max
|
154
|
+
else
|
155
|
+
box_width = -(box_width - 1)
|
122
156
|
end
|
123
157
|
|
124
|
-
|
125
|
-
|
158
|
+
# For each line in the title convert from string to chtype array
|
159
|
+
title_width = box_width - (2 * @border_size)
|
160
|
+
@title = []
|
161
|
+
@title_pos = []
|
162
|
+
@title_len = []
|
163
|
+
(0...@title_lines).each do |x|
|
164
|
+
len_x = []
|
165
|
+
pos_x = []
|
166
|
+
@title << RNDK.char2Chtype(temp[x], len_x, pos_x)
|
167
|
+
@title_len.concat(len_x)
|
168
|
+
@title_pos << RNDK.justifyString(title_width, len_x[0], pos_x[0])
|
126
169
|
end
|
170
|
+
box_width
|
171
|
+
end
|
127
172
|
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
173
|
+
# Draw the widget's title
|
174
|
+
def draw_title(win)
|
175
|
+
(0...@title_lines).each do |x|
|
176
|
+
Draw.writeChtype(@win, @title_pos[x] + @border_size,
|
177
|
+
x + @border_size, @title[x], RNDK::HORIZONTAL, 0,
|
178
|
+
@title_len[x])
|
134
179
|
end
|
135
180
|
end
|
136
181
|
|
@@ -142,15 +187,18 @@ module RNDK
|
|
142
187
|
# Besides normal keybindings (arrow keys and such), see
|
143
188
|
# Widget#set_exit_type to see how the Widget exits.
|
144
189
|
#
|
145
|
-
def inject
|
190
|
+
def inject input
|
146
191
|
end
|
147
192
|
|
148
|
-
|
193
|
+
# Makes the widget have a border if `box` is true,
|
194
|
+
# otherwise, cancel it.
|
195
|
+
def set_box box
|
149
196
|
@box = box
|
150
197
|
@border_size = if @box then 1 else 0 end
|
151
198
|
end
|
152
199
|
|
153
|
-
|
200
|
+
# Tells if the widget has borders.
|
201
|
+
def get_box
|
154
202
|
return @box
|
155
203
|
end
|
156
204
|
|
@@ -160,10 +208,23 @@ module RNDK
|
|
160
208
|
def unfocus
|
161
209
|
end
|
162
210
|
|
163
|
-
|
211
|
+
# Somehow saves all data within this Widget.
|
212
|
+
#
|
213
|
+
# @note This method isn't called whatsoever!
|
214
|
+
# It only exists at Traverse module.
|
215
|
+
#
|
216
|
+
# TODO Find out how can I insert this on Widgets.
|
217
|
+
def save_data
|
164
218
|
end
|
165
219
|
|
166
|
-
|
220
|
+
|
221
|
+
# Somehow refreshes all data within this Widget.
|
222
|
+
#
|
223
|
+
# @note This method isn't called whatsoever!
|
224
|
+
# It only exists at Traverse module.
|
225
|
+
#
|
226
|
+
# TODO Find out how can I insert this on Widgets.
|
227
|
+
def refresh_data
|
167
228
|
end
|
168
229
|
|
169
230
|
# Destroys all windows inside the Widget and
|
@@ -171,42 +232,44 @@ module RNDK
|
|
171
232
|
def destroy
|
172
233
|
end
|
173
234
|
|
174
|
-
# Set the
|
235
|
+
# Set the widget's upper-left-corner line-drawing character.
|
175
236
|
def setULchar(ch)
|
176
237
|
@ULChar = ch
|
177
238
|
end
|
178
239
|
|
179
|
-
# Set the
|
240
|
+
# Set the widget's upper-right-corner line-drawing character.
|
180
241
|
def setURchar(ch)
|
181
242
|
@URChar = ch
|
182
243
|
end
|
183
244
|
|
184
|
-
# Set the
|
245
|
+
# Set the widget's lower-left-corner line-drawing character.
|
185
246
|
def setLLchar(ch)
|
186
247
|
@LLChar = ch
|
187
248
|
end
|
188
249
|
|
189
|
-
# Set the
|
250
|
+
# Set the widget's upper-right-corner line-drawing character.
|
190
251
|
def setLRchar(ch)
|
191
252
|
@LRChar = ch
|
192
253
|
end
|
193
254
|
|
194
|
-
# Set the
|
255
|
+
# Set the widget's horizontal line-drawing character
|
195
256
|
def setHZchar(ch)
|
196
257
|
@HZChar = ch
|
197
258
|
end
|
198
259
|
|
199
|
-
# Set the
|
260
|
+
# Set the widget's vertical line-drawing character
|
200
261
|
def setVTchar(ch)
|
201
262
|
@VTChar = ch
|
202
263
|
end
|
203
264
|
|
204
|
-
# Set the
|
265
|
+
# Set the widget's box-attributes.
|
205
266
|
def setBXattr(ch)
|
206
267
|
@BXAttr = ch
|
207
268
|
end
|
208
269
|
|
209
270
|
# This sets the background color of the widget.
|
271
|
+
#
|
272
|
+
# FIXME BUG
|
210
273
|
def set_bg_color color
|
211
274
|
return if color.nil? || color == ''
|
212
275
|
|
@@ -224,67 +287,11 @@ module RNDK
|
|
224
287
|
self.SetBackAttrObj(holder[0])
|
225
288
|
end
|
226
289
|
|
227
|
-
# Set the widget's title.
|
228
|
-
def set_title (title, box_width)
|
229
|
-
return if title.nil?
|
230
|
-
|
231
|
-
temp = title.split "\n"
|
232
|
-
@title_lines = temp.size
|
233
|
-
|
234
|
-
if box_width >= 0
|
235
|
-
max_width = 0
|
236
|
-
temp.each do |line|
|
237
|
-
len = []
|
238
|
-
align = []
|
239
|
-
holder = RNDK.char2Chtype(line, len, align)
|
240
|
-
max_width = [len[0], max_width].max
|
241
|
-
end
|
242
|
-
box_width = [box_width, max_width + 2 * @border_size].max
|
243
|
-
else
|
244
|
-
box_width = -(box_width - 1)
|
245
|
-
end
|
246
|
-
|
247
|
-
# For each line in the title convert from string to chtype array
|
248
|
-
title_width = box_width - (2 * @border_size)
|
249
|
-
@title = []
|
250
|
-
@title_pos = []
|
251
|
-
@title_len = []
|
252
|
-
(0...@title_lines).each do |x|
|
253
|
-
len_x = []
|
254
|
-
pos_x = []
|
255
|
-
@title << RNDK.char2Chtype(temp[x], len_x, pos_x)
|
256
|
-
@title_len.concat(len_x)
|
257
|
-
@title_pos << RNDK.justifyString(title_width, len_x[0], pos_x[0])
|
258
|
-
end
|
259
|
-
box_width
|
260
|
-
end
|
261
|
-
|
262
|
-
# Draw the widget's title
|
263
|
-
def drawTitle(win)
|
264
|
-
(0...@title_lines).each do |x|
|
265
|
-
Draw.writeChtype(@win, @title_pos[x] + @border_size,
|
266
|
-
x + @border_size, @title[x], RNDK::HORIZONTAL, 0,
|
267
|
-
@title_len[x])
|
268
|
-
end
|
269
|
-
end
|
270
|
-
|
271
290
|
# Remove storage for the widget's title.
|
272
|
-
def
|
291
|
+
def clean_title
|
273
292
|
@title_lines = ''
|
274
293
|
end
|
275
294
|
|
276
|
-
# Set data for preprocessing
|
277
|
-
def setPreProcess (fn, data)
|
278
|
-
@pre_process_func = fn
|
279
|
-
@pre_process_data = data
|
280
|
-
end
|
281
|
-
|
282
|
-
# Set data for postprocessing
|
283
|
-
def setPostProcess (fn, data)
|
284
|
-
@post_process_func = fn
|
285
|
-
@post_process_data = data
|
286
|
-
end
|
287
|
-
|
288
295
|
# Set the Widget#exit_type based on the input `char`.
|
289
296
|
#
|
290
297
|
# According to default keybindings, if `char` is:
|
@@ -304,14 +311,6 @@ module RNDK
|
|
304
311
|
end
|
305
312
|
end
|
306
313
|
|
307
|
-
def valid_widget?
|
308
|
-
result = false
|
309
|
-
if RNDK::ALL_OBJECTS.include?(self)
|
310
|
-
result = self.validObjType(self.object_type)
|
311
|
-
end
|
312
|
-
result
|
313
|
-
end
|
314
|
-
|
315
314
|
# FIXME TODO What does `function_key` does?
|
316
315
|
def getch(function_key=[])
|
317
316
|
key = self.getc
|
@@ -320,69 +319,6 @@ module RNDK
|
|
320
319
|
key
|
321
320
|
end
|
322
321
|
|
323
|
-
def bindableObject(rndktype)
|
324
|
-
if rndktype != self.object_type
|
325
|
-
return nil
|
326
|
-
elsif [:FSELECT, :alphalist].include?(self.object_type)
|
327
|
-
return @entry_field
|
328
|
-
else
|
329
|
-
return self
|
330
|
-
end
|
331
|
-
end
|
332
|
-
|
333
|
-
def bind(type, key, function, data)
|
334
|
-
obj = self.bindableObject(type)
|
335
|
-
if key.ord < Ncurses::KEY_MAX && !(obj.nil?)
|
336
|
-
if key.ord != 0
|
337
|
-
obj.binding_list[key.ord] = [function, data]
|
338
|
-
end
|
339
|
-
end
|
340
|
-
end
|
341
|
-
|
342
|
-
def unbind(type, key)
|
343
|
-
obj = self.bindableObject(type)
|
344
|
-
unless obj.nil?
|
345
|
-
obj.binding_list.delete(key)
|
346
|
-
end
|
347
|
-
end
|
348
|
-
|
349
|
-
def clean_bindings(type)
|
350
|
-
obj = self.bindableObject(type)
|
351
|
-
if !(obj.nil?) && !(obj.binding_list.nil?)
|
352
|
-
obj.binding_list.clear
|
353
|
-
end
|
354
|
-
end
|
355
|
-
|
356
|
-
# Checks to see if the binding for the key exists:
|
357
|
-
# If it does then it runs the command and returns its value, normally true
|
358
|
-
# If it doesn't it returns a false. This way we can 'overwrite' coded
|
359
|
-
# bindings.
|
360
|
-
def checkBind(type, key)
|
361
|
-
obj = self.bindableObject(type)
|
362
|
-
if !(obj.nil?) && obj.binding_list.include?(key)
|
363
|
-
function = obj.binding_list[key][0]
|
364
|
-
data = obj.binding_list[key][1]
|
365
|
-
|
366
|
-
if function == :getc
|
367
|
-
return data
|
368
|
-
else
|
369
|
-
return function.call(type, obj, data, key)
|
370
|
-
end
|
371
|
-
end
|
372
|
-
return false
|
373
|
-
end
|
374
|
-
|
375
|
-
# Checks to see if the binding for the key exists.
|
376
|
-
def isBind(type, key)
|
377
|
-
result = false
|
378
|
-
obj = self.bindableObject(type)
|
379
|
-
unless obj.nil?
|
380
|
-
result = obj.binding_list.include?(key)
|
381
|
-
end
|
382
|
-
|
383
|
-
return result
|
384
|
-
end
|
385
|
-
|
386
322
|
# Allows the user to move the Widget around
|
387
323
|
# the screen via the cursor/keypad keys.
|
388
324
|
#
|
@@ -424,7 +360,7 @@ module RNDK
|
|
424
360
|
end_y = beg_y + Ncurses.getmaxy(@screen.window)
|
425
361
|
|
426
362
|
loop do
|
427
|
-
key = self.getch
|
363
|
+
key = self.getch
|
428
364
|
|
429
365
|
# Let them move the widget around until they hit return.
|
430
366
|
break if [RNDK::KEY_RETURN, Ncurses::KEY_ENTER].include? key
|
@@ -513,13 +449,93 @@ module RNDK
|
|
513
449
|
end
|
514
450
|
end
|
515
451
|
|
452
|
+
# Tells if a widget is valid.
|
453
|
+
def valid?
|
454
|
+
RNDK::ALL_WIDGETS.include?(self) and self.valid_type?
|
455
|
+
end
|
456
|
+
|
457
|
+
# Tells if current widget's type is the
|
458
|
+
# type of an existing Widget.
|
459
|
+
def valid_type?
|
460
|
+
[:graph,
|
461
|
+
:histogram,
|
462
|
+
:label,
|
463
|
+
:marquee,
|
464
|
+
:viewer,
|
465
|
+
:alphalist,
|
466
|
+
:button,
|
467
|
+
:buttonbox,
|
468
|
+
:calendar,
|
469
|
+
:dialog,
|
470
|
+
:dscale,
|
471
|
+
:entry,
|
472
|
+
:fscale,
|
473
|
+
:fselect,
|
474
|
+
:fslider,
|
475
|
+
:itemlist,
|
476
|
+
:matrix,
|
477
|
+
:mentry,
|
478
|
+
:radio,
|
479
|
+
:scale,
|
480
|
+
:scroll,
|
481
|
+
:selection,
|
482
|
+
:slider,
|
483
|
+
:swindow,
|
484
|
+
:template,
|
485
|
+
:uscale,
|
486
|
+
:uslider].include? @widget_type
|
487
|
+
end
|
488
|
+
|
516
489
|
protected
|
517
490
|
|
491
|
+
# Actually moves the widget.
|
492
|
+
def move_specific(x, y, relative, refresh_flag, windows, subwidgets)
|
493
|
+
current_x = Ncurses.getbegx @win
|
494
|
+
current_y = Ncurses.getbegy @win
|
495
|
+
xpos = x
|
496
|
+
ypos = y
|
497
|
+
|
498
|
+
# If this is a relative move, then we will adjust where we want
|
499
|
+
# to move to.
|
500
|
+
if relative
|
501
|
+
xpos = Ncurses.getbegx(@win) + x
|
502
|
+
ypos = Ncurses.getbegy(@win) + y
|
503
|
+
end
|
504
|
+
|
505
|
+
# Adjust the window if we need to
|
506
|
+
xtmp = [xpos]
|
507
|
+
ytmp = [ypos]
|
508
|
+
RNDK.alignxy(@screen.window, xtmp, ytmp, @box_width, @box_height)
|
509
|
+
xpos = xtmp[0]
|
510
|
+
ypos = ytmp[0]
|
511
|
+
|
512
|
+
# Get the difference
|
513
|
+
xdiff = current_x - xpos
|
514
|
+
ydiff = current_y - ypos
|
515
|
+
|
516
|
+
# Move the window to the new location.
|
517
|
+
windows.each do |window|
|
518
|
+
RNDK.window_move(window, -xdiff, -ydiff)
|
519
|
+
end
|
520
|
+
|
521
|
+
subwidgets.each do |subwidget|
|
522
|
+
subwidget.move(x, y, relative, false)
|
523
|
+
end
|
524
|
+
|
525
|
+
# Touch the windows so they 'move'
|
526
|
+
RNDK.window_refresh @screen.window
|
527
|
+
|
528
|
+
# Redraw the window, if they asked for it
|
529
|
+
if refresh_flag
|
530
|
+
self.draw
|
531
|
+
end
|
532
|
+
end
|
533
|
+
|
518
534
|
# Gets a raw character from internal Ncurses window
|
519
535
|
# and returns the result, capped to sane values.
|
520
536
|
def getc
|
521
|
-
rndktype = self.
|
522
|
-
test = self.
|
537
|
+
rndktype = self.widget_type
|
538
|
+
test = self.bindable_widget rndktype
|
523
539
|
result = Ncurses.wgetch @input_window
|
524
540
|
|
525
541
|
if (result >= 0) and
|