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/histogram.rb
DELETED
@@ -1,412 +0,0 @@
|
|
1
|
-
require 'rndk'
|
2
|
-
|
3
|
-
module RNDK
|
4
|
-
class HISTOGRAM < Widget
|
5
|
-
def initialize(rndkscreen, xplace, yplace, height, width, orient,
|
6
|
-
title, box, shadow)
|
7
|
-
super()
|
8
|
-
parent_width = Ncurses.getmaxx(rndkscreen.window)
|
9
|
-
parent_height = Ncurses.getmaxy(rndkscreen.window)
|
10
|
-
|
11
|
-
self.set_box(box)
|
12
|
-
|
13
|
-
box_height = RNDK.setWidgetDimension(parent_height, height, 2)
|
14
|
-
old_height = box_height
|
15
|
-
|
16
|
-
box_width = RNDK.setWidgetDimension(parent_width, width, 0)
|
17
|
-
old_width = box_width
|
18
|
-
|
19
|
-
box_width = self.set_title(title, -(box_width + 1))
|
20
|
-
|
21
|
-
# Increment the height by number of lines in in the title
|
22
|
-
box_height += @title_lines
|
23
|
-
|
24
|
-
# Make sure we didn't extend beyond the dimensions of the window.
|
25
|
-
box_width = if box_width > parent_width
|
26
|
-
then old_width
|
27
|
-
else box_width
|
28
|
-
end
|
29
|
-
box_height = if box_height > parent_height
|
30
|
-
then old_height
|
31
|
-
else box_height
|
32
|
-
end
|
33
|
-
|
34
|
-
# Rejustify the x and y positions if we need to.
|
35
|
-
xtmp = [xplace]
|
36
|
-
ytmp = [yplace]
|
37
|
-
RNDK.alignxy(rndkscreen.window, xtmp, ytmp, box_width, box_height)
|
38
|
-
xpos = xtmp[0]
|
39
|
-
ypos = ytmp[0]
|
40
|
-
|
41
|
-
# Set up the histogram data
|
42
|
-
@screen = rndkscreen
|
43
|
-
@parent = rndkscreen.window
|
44
|
-
@win = Ncurses.newwin(box_height, box_width, ypos, xpos)
|
45
|
-
@shadow_win = nil
|
46
|
-
@box_width = box_width
|
47
|
-
@box_height = box_height
|
48
|
-
@field_width = box_width - 2 * @border_size
|
49
|
-
@field_height = box_height - @title_lines - 2 * @border_size
|
50
|
-
@orient = orient
|
51
|
-
@shadow = shadow
|
52
|
-
|
53
|
-
# Is the window nil
|
54
|
-
if @win.nil?
|
55
|
-
self.destroy
|
56
|
-
return nil
|
57
|
-
end
|
58
|
-
|
59
|
-
Ncurses.keypad(@win, true)
|
60
|
-
|
61
|
-
# Set up some default values.
|
62
|
-
@filler = '#'.ord | Ncurses::A_REVERSE
|
63
|
-
@stats_attr = Ncurses::A_NORMAL
|
64
|
-
@stats_pos = RNDK::TOP
|
65
|
-
@view_type = :REAL
|
66
|
-
@high = 0
|
67
|
-
@low = 0
|
68
|
-
@value = 0
|
69
|
-
@lowx = 0
|
70
|
-
@lowy = 0
|
71
|
-
@highx = 0
|
72
|
-
@highy = 0
|
73
|
-
@curx = 0
|
74
|
-
@cury = 0
|
75
|
-
@low_string = ''
|
76
|
-
@high_string = ''
|
77
|
-
@cur_string = ''
|
78
|
-
|
79
|
-
# Do we want a shadow?
|
80
|
-
if shadow
|
81
|
-
@shadow_win = Ncurses.newwin(box_height,
|
82
|
-
box_width,
|
83
|
-
ypos + 1,
|
84
|
-
xpos + 1)
|
85
|
-
end
|
86
|
-
|
87
|
-
rndkscreen.register(:HISTOGRAM, self)
|
88
|
-
end
|
89
|
-
|
90
|
-
# This was added for the builder
|
91
|
-
def activate(actions)
|
92
|
-
self.draw(@box)
|
93
|
-
end
|
94
|
-
|
95
|
-
# Set various widget attributes
|
96
|
-
def set(view_type, stats_pos, stats_attr, low, high, value, filler, box)
|
97
|
-
self.setDisplayType(view_type)
|
98
|
-
self.setStatsPos(stats_pos)
|
99
|
-
self.setValue(low, high, value)
|
100
|
-
self.setFillerChar(filler)
|
101
|
-
self.setStatsAttr(stats_attr)
|
102
|
-
self.set_box(box)
|
103
|
-
end
|
104
|
-
|
105
|
-
# Set the values for the widget.
|
106
|
-
def setValue(low, high, value)
|
107
|
-
# We should error check the information we have.
|
108
|
-
@low = if low <= high then low else 0 end
|
109
|
-
@high = if low <= high then high else 0 end
|
110
|
-
@value = if low <= value && value <= high then value else 0 end
|
111
|
-
# Determine the percentage of the given value.
|
112
|
-
@percent = if @high == 0 then 0 else 1.0 * @value / @high end
|
113
|
-
|
114
|
-
# Determine the size of the histogram bar.
|
115
|
-
if @orient == RNDK::VERTICAL
|
116
|
-
@bar_size = @percent * @field_height
|
117
|
-
else
|
118
|
-
@bar_size = @percent * @field_width
|
119
|
-
end
|
120
|
-
|
121
|
-
# We have a number of variables which determine the personality of the
|
122
|
-
# histogram. We have to go through each one methodically, and set them
|
123
|
-
# correctly. This section does this.
|
124
|
-
if @view_type != :NONE
|
125
|
-
if @orient == RNDK::VERTICAL
|
126
|
-
if @stats_pos == RNDK::LEFT || @stats_pos == RNDK::BOTTOM
|
127
|
-
# Set the low label attributes.
|
128
|
-
@low_string = @low.to_s
|
129
|
-
@lowx = 1
|
130
|
-
@lowy = @box_height - @low_string.size - 1
|
131
|
-
|
132
|
-
# Set the high label attributes
|
133
|
-
@high_string = @high.to_s
|
134
|
-
@highx = 1
|
135
|
-
@highy = @title_lines + 1
|
136
|
-
|
137
|
-
string = ''
|
138
|
-
# Set the current value attributes.
|
139
|
-
string = if @view_type == :PERCENT
|
140
|
-
then "%3.1f%%" % [1.0 * @percent * 100]
|
141
|
-
elsif @view_type == :FRACTION
|
142
|
-
string = "%d/%d" % [@value, @high]
|
143
|
-
else string = @value.to_s
|
144
|
-
end
|
145
|
-
@cur_string = string
|
146
|
-
@curx = 1
|
147
|
-
@cury = (@field_height - string.size) / 2 + @title_lines + 1
|
148
|
-
elsif @stats_pos == RNDK::CENTER
|
149
|
-
# Set the lower label attributes
|
150
|
-
@low_string = @low.to_s
|
151
|
-
@lowx = @field_width / 2 + 1
|
152
|
-
@lowy = @box_height - @low_string.size - 1
|
153
|
-
|
154
|
-
# Set the high label attributes
|
155
|
-
@high_string = @high.to_s
|
156
|
-
@highx = @field_width / 2 + 1
|
157
|
-
@highy = @title_lines + 1
|
158
|
-
|
159
|
-
# Set the stats label attributes
|
160
|
-
string = if @view_type == :PERCENT
|
161
|
-
then "%3.2f%%" % [1.0 * @percent * 100]
|
162
|
-
elsif @view_type == :FRACTIOn
|
163
|
-
"%d/%d" % [@value, @high]
|
164
|
-
else @value.to_s
|
165
|
-
end
|
166
|
-
|
167
|
-
@cur_string = string
|
168
|
-
@curx = @field_width / 2 + 1
|
169
|
-
@cury = (@field_height - string.size) / 2 + @title_lines + 1
|
170
|
-
elsif @stats_pos == RNDK::RIGHT || @stats_pos == RNDK::TOP
|
171
|
-
# Set the low label attributes.
|
172
|
-
@low_string = @low.to_s
|
173
|
-
@lowx = @field_width
|
174
|
-
@lowy = @box_height - @low_string.size - 1
|
175
|
-
|
176
|
-
# Set the high label attributes.
|
177
|
-
@high_string = @high.to_s
|
178
|
-
@highx = @field_width
|
179
|
-
@highy = @title_lines + 1
|
180
|
-
|
181
|
-
# Set the stats label attributes.
|
182
|
-
string = if @view_type == :PERCENT
|
183
|
-
then "%3.2f%%" % [1.0 * @percent * 100]
|
184
|
-
elsif @view_type == :FRACTION
|
185
|
-
"%d/%d" % [@value, @high]
|
186
|
-
else @value.to_s
|
187
|
-
end
|
188
|
-
@cur_string = string
|
189
|
-
@curx = @field_width
|
190
|
-
@cury = (@field_height - string.size) / 2 + @title_lines + 1
|
191
|
-
end
|
192
|
-
else
|
193
|
-
# Alignment is HORIZONTAL
|
194
|
-
if @stats_pos == RNDK::TOP || @stats_pos == RNDK::RIGHT
|
195
|
-
# Set the low label attributes.
|
196
|
-
@low_string = @low.to_s
|
197
|
-
@lowx = 1
|
198
|
-
@lowy = @title_lines + 1
|
199
|
-
|
200
|
-
# Set the high label attributes.
|
201
|
-
@high_string = @high.to_s
|
202
|
-
@highx = @box_width - @high_string.size - 1
|
203
|
-
@highy = @title_lines + 1
|
204
|
-
|
205
|
-
# Set the stats label attributes.
|
206
|
-
string = if @view_type == :PERCENT
|
207
|
-
then "%3.1f%%" % [1.0 * @percent * 100]
|
208
|
-
elsif @view_type == :FRACTION
|
209
|
-
"%d/%d" % [@value, @high]
|
210
|
-
else @value.to_s
|
211
|
-
end
|
212
|
-
@cur_string = string
|
213
|
-
@curx = (@field_width - @cur_string.size) / 2 + 1
|
214
|
-
@cury = @title_lines + 1
|
215
|
-
elsif @stats_pos == RNDK::CENTER
|
216
|
-
# Set the low label attributes.
|
217
|
-
@low_string = @low.to_s
|
218
|
-
@lowx = 1
|
219
|
-
@lowy = (@field_height / 2) + @title_lines + 1
|
220
|
-
|
221
|
-
# Set the high label attributes.
|
222
|
-
@high_string = @high.to_s
|
223
|
-
@highx = @box_width - @high_string.size - 1
|
224
|
-
@highy = @field_height / 2 + @title_lines + 1
|
225
|
-
|
226
|
-
# Set the stats label attributes.
|
227
|
-
string = if @view_type == :PERCENT
|
228
|
-
then "%3.1f%%" % [1.0 * @percent * 100]
|
229
|
-
elsif @view_type == :FRACTION
|
230
|
-
"%d/%d" % [@value, @high]
|
231
|
-
else @value.to_s
|
232
|
-
end
|
233
|
-
@cur_string = string
|
234
|
-
@curx = (@field_width - @cur_string.size) / 2 + 1
|
235
|
-
@cury = @field_height / 2 + @title_lines + 1
|
236
|
-
elsif @stats_pos == RNDK::BOTTOM || @stats_pos == RNDK::LEFT
|
237
|
-
# Set the low label attributes.
|
238
|
-
@low_string = @low.to_s
|
239
|
-
@lowx = 1
|
240
|
-
@lowy = @box_height -2 * @border_size
|
241
|
-
|
242
|
-
# Set the high label attributes.
|
243
|
-
@high_string = @high.to_s
|
244
|
-
@highx = @box_width - @high_string.size - 1
|
245
|
-
@highy = @box_height - 2 * @border_size
|
246
|
-
|
247
|
-
# Set the stats label attributes.
|
248
|
-
string = if @view_type == :PERCENT
|
249
|
-
then "%3.1f%%" % [1.0 * @percent * 100]
|
250
|
-
elsif @view_type == :FRACTION
|
251
|
-
"%d/%d" % [@value, @high]
|
252
|
-
else @value.to_s
|
253
|
-
end
|
254
|
-
@cur_string = string
|
255
|
-
@curx = (@field_width - @cur_string.size) / 2 + 1
|
256
|
-
@cury = @box_height - 2 * @border_size
|
257
|
-
end
|
258
|
-
end
|
259
|
-
end
|
260
|
-
end
|
261
|
-
|
262
|
-
def getValue
|
263
|
-
return @value
|
264
|
-
end
|
265
|
-
|
266
|
-
def getLowValue
|
267
|
-
return @low
|
268
|
-
end
|
269
|
-
|
270
|
-
def getHighValue
|
271
|
-
return @high
|
272
|
-
end
|
273
|
-
|
274
|
-
# Set the histogram display type
|
275
|
-
def setDisplayType(view_type)
|
276
|
-
@view_type = view_type
|
277
|
-
end
|
278
|
-
|
279
|
-
def getViewType
|
280
|
-
return @view_type
|
281
|
-
end
|
282
|
-
|
283
|
-
# Set the position of the statistics information.
|
284
|
-
def setStatsPos(stats_pos)
|
285
|
-
@stats_pos = stats_pos
|
286
|
-
end
|
287
|
-
|
288
|
-
def getStatsPos
|
289
|
-
return @stats_pos
|
290
|
-
end
|
291
|
-
|
292
|
-
# Set the attribute of the statistics.
|
293
|
-
def setStatsAttr(stats_attr)
|
294
|
-
@stats_attr = stats_attr
|
295
|
-
end
|
296
|
-
|
297
|
-
def getStatsAttr
|
298
|
-
return @stats_attr
|
299
|
-
end
|
300
|
-
|
301
|
-
# Set the character to use when drawing the widget.
|
302
|
-
def setFillerChar(character)
|
303
|
-
@filler = character
|
304
|
-
end
|
305
|
-
|
306
|
-
def getFillerChar
|
307
|
-
return @filler
|
308
|
-
end
|
309
|
-
|
310
|
-
# Set the background attribute of the widget.
|
311
|
-
def set_bg_attrib(attrib)
|
312
|
-
Ncurses.wbkgd(@win, attrib)
|
313
|
-
end
|
314
|
-
|
315
|
-
# Move the histogram field to the given location.
|
316
|
-
# Inherited
|
317
|
-
# def move(xplace, yplace, relative, refresh_flag)
|
318
|
-
# end
|
319
|
-
|
320
|
-
# Draw the widget.
|
321
|
-
def draw(box)
|
322
|
-
battr = 0
|
323
|
-
bchar = 0
|
324
|
-
fattr = @filler & Ncurses::A_ATTRIBUTES
|
325
|
-
hist_x = @title_lines + 1
|
326
|
-
hist_y = @bar_size
|
327
|
-
|
328
|
-
Ncurses.werase(@win)
|
329
|
-
|
330
|
-
# Box the widget if asked.
|
331
|
-
if box
|
332
|
-
Draw.drawObjBox(@win, self)
|
333
|
-
end
|
334
|
-
|
335
|
-
# Do we have a shadow to draw?
|
336
|
-
if !(@shadow.nil?)
|
337
|
-
Draw.drawShadow(@shadow_win)
|
338
|
-
end
|
339
|
-
|
340
|
-
self.drawTitle(@win)
|
341
|
-
|
342
|
-
# If the user asked for labels, draw them in.
|
343
|
-
if @view_type != :NONE
|
344
|
-
# Draw in the low label.
|
345
|
-
if @low_string.size > 0
|
346
|
-
Draw.writeCharAttrib(@win, @lowx, @lowy, @low_string,
|
347
|
-
@stats_attr, @orient, 0, @low_string.size)
|
348
|
-
end
|
349
|
-
|
350
|
-
# Draw in the current value label.
|
351
|
-
if @cur_string.size > 0
|
352
|
-
Draw.writeCharAttrib(@win, @curx, @cury, @cur_string,
|
353
|
-
@stats_attr, @orient, 0, @cur_string.size)
|
354
|
-
end
|
355
|
-
|
356
|
-
# Draw in the high label.
|
357
|
-
if @high_string.size > 0
|
358
|
-
Draw.writeCharAttrib(@win, @highx, @highy, @high_string,
|
359
|
-
@stats_attr, @orient, 0, @high_string.size)
|
360
|
-
end
|
361
|
-
end
|
362
|
-
|
363
|
-
if @orient == RNDK::VERTICAL
|
364
|
-
hist_x = @box_height - @bar_size - 1
|
365
|
-
hist_y = @field_width
|
366
|
-
end
|
367
|
-
|
368
|
-
# Draw the histogram bar.
|
369
|
-
(hist_x...@box_height - 1).to_a.each do |x|
|
370
|
-
(1..hist_y).each do |y|
|
371
|
-
battr = Ncurses.mvwinch(@win, x, y)
|
372
|
-
|
373
|
-
if battr == ' '.ord
|
374
|
-
Ncurses.mvwaddch(@win, x, y, @filler)
|
375
|
-
else
|
376
|
-
Ncurses.mvwaddch(@win, x, y, battr | fattr)
|
377
|
-
end
|
378
|
-
end
|
379
|
-
end
|
380
|
-
|
381
|
-
# Refresh the window
|
382
|
-
Ncurses.wrefresh @win
|
383
|
-
end
|
384
|
-
|
385
|
-
# Destroy the widget.
|
386
|
-
def destroy
|
387
|
-
self.cleanTitle
|
388
|
-
|
389
|
-
# Clean up the windows.
|
390
|
-
RNDK.window_delete(@shadow_win)
|
391
|
-
RNDK.window_delete(@win)
|
392
|
-
|
393
|
-
# Clean the key bindings.
|
394
|
-
self.clean_bindings(:HISTOGRAM)
|
395
|
-
|
396
|
-
# Unregister this object.
|
397
|
-
RNDK::Screen.unregister(:HISTOGRAM, self)
|
398
|
-
end
|
399
|
-
|
400
|
-
# Erase the widget from the screen.
|
401
|
-
def erase
|
402
|
-
if self.valid_widget?
|
403
|
-
RNDK.window_erase(@win)
|
404
|
-
RNDK.window_erase(@shadow_win)
|
405
|
-
end
|
406
|
-
end
|
407
|
-
|
408
|
-
def object_type
|
409
|
-
:HISTOGRAM
|
410
|
-
end
|
411
|
-
end
|
412
|
-
end
|
data/lib/rndk/marquee.rb
DELETED
@@ -1,244 +0,0 @@
|
|
1
|
-
require 'rndk'
|
2
|
-
|
3
|
-
module RNDK
|
4
|
-
class MARQUEE < Widget
|
5
|
-
def initialize(rndkscreen, xpos, ypos, width, box, shadow)
|
6
|
-
super()
|
7
|
-
|
8
|
-
@screen = rndkscreen
|
9
|
-
@parent = rndkscreen.window
|
10
|
-
@win = Ncurses.newwin(1, 1, ypos, xpos)
|
11
|
-
@active = true
|
12
|
-
@width = width
|
13
|
-
@shadow = shadow
|
14
|
-
|
15
|
-
self.set_box(box)
|
16
|
-
if @win.nil?
|
17
|
-
self.destroy
|
18
|
-
# return (0);
|
19
|
-
end
|
20
|
-
|
21
|
-
rndkscreen.register(:MARQUEE, self)
|
22
|
-
end
|
23
|
-
|
24
|
-
# This activates the widget.
|
25
|
-
def activate(mesg, delay, repeat, box)
|
26
|
-
mesg_length = []
|
27
|
-
start_pos = 0
|
28
|
-
first_char = 0
|
29
|
-
last_char = 1
|
30
|
-
repeat_count = 0
|
31
|
-
view_size = 0
|
32
|
-
message = []
|
33
|
-
first_time = true
|
34
|
-
|
35
|
-
if mesg.nil? or mesg == ''
|
36
|
-
return -1
|
37
|
-
end
|
38
|
-
|
39
|
-
# Keep the box info, setting BorderOf()
|
40
|
-
self.set_box(box)
|
41
|
-
|
42
|
-
padding = if mesg[-1] == ' ' then 0 else 1 end
|
43
|
-
|
44
|
-
# Translate the string to a chtype array
|
45
|
-
message = RNDK.char2Chtype(mesg, mesg_length, [])
|
46
|
-
|
47
|
-
# Draw in the widget.
|
48
|
-
self.draw(@box)
|
49
|
-
view_limit = @width - (2 * @border_size)
|
50
|
-
|
51
|
-
# Start doing the marquee thing...
|
52
|
-
oldcurs = Ncurses.curs_set(0)
|
53
|
-
while @active
|
54
|
-
if first_time
|
55
|
-
first_char = 0
|
56
|
-
last_char = 1
|
57
|
-
view_size = last_char - first_char
|
58
|
-
start_pos = @width - view_size - @border_size
|
59
|
-
|
60
|
-
first_time = false
|
61
|
-
end
|
62
|
-
|
63
|
-
# Draw in the characters.
|
64
|
-
y = first_char
|
65
|
-
(start_pos...(start_pos + view_size)).each do |x|
|
66
|
-
ch = if y < mesg_length[0] then message[y].ord else ' '.ord end
|
67
|
-
Ncurses.mvwaddch(@win, @border_size, x, ch)
|
68
|
-
y += 1
|
69
|
-
end
|
70
|
-
Ncurses.wrefresh @win
|
71
|
-
|
72
|
-
# Set my variables
|
73
|
-
if mesg_length[0] < view_limit
|
74
|
-
if last_char < (mesg_length[0] + padding)
|
75
|
-
last_char += 1
|
76
|
-
view_size += 1
|
77
|
-
start_pos = @width - view_size - @border_size
|
78
|
-
elsif start_pos > @border_size
|
79
|
-
# This means the whole string is visible.
|
80
|
-
start_pos -= 1
|
81
|
-
view_size = mesg_length[0] + padding
|
82
|
-
else
|
83
|
-
# We have to start chopping the view_size
|
84
|
-
start_pos = @border_size
|
85
|
-
first_char += 1
|
86
|
-
view_size -= 1
|
87
|
-
end
|
88
|
-
else
|
89
|
-
if start_pos > @border_size
|
90
|
-
last_char += 1
|
91
|
-
view_size += 1
|
92
|
-
start_pos -= 1
|
93
|
-
elsif last_char < mesg_length[0] + padding
|
94
|
-
first_char += 1
|
95
|
-
last_char += 1
|
96
|
-
start_pos = @border_size
|
97
|
-
view_size = view_limit
|
98
|
-
else
|
99
|
-
start_pos = @border_size
|
100
|
-
first_char += 1
|
101
|
-
view_size -= 1
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
# OK, let's check if we have to start over.
|
106
|
-
if view_size <= 0 && first_char == (mesg_length[0] + padding)
|
107
|
-
# Check if we repeat a specified number or loop indefinitely
|
108
|
-
repeat_count += 1
|
109
|
-
if repeat > 0 && repeat_count >= repeat
|
110
|
-
break
|
111
|
-
end
|
112
|
-
|
113
|
-
# Time to start over.
|
114
|
-
Ncurses.mvwaddch(@win, @border_size, @border_size, ' '.ord)
|
115
|
-
Ncurses.wrefresh @win
|
116
|
-
first_time = true
|
117
|
-
end
|
118
|
-
|
119
|
-
# Now sleep
|
120
|
-
Ncurses.napms(delay * 10)
|
121
|
-
end
|
122
|
-
if oldcurs < 0
|
123
|
-
oldcurs = 1
|
124
|
-
end
|
125
|
-
Ncurses.curs_set(oldcurs)
|
126
|
-
return 0
|
127
|
-
end
|
128
|
-
|
129
|
-
# This de-activates a marquee widget.
|
130
|
-
def deactivate
|
131
|
-
@active = false
|
132
|
-
end
|
133
|
-
|
134
|
-
# This moves the marquee field to the given location.
|
135
|
-
# Inherited
|
136
|
-
# def move(xplace, yplace, relative, refresh_flag)
|
137
|
-
# end
|
138
|
-
|
139
|
-
# This draws the marquee widget on the screen.
|
140
|
-
def draw(box)
|
141
|
-
# Keep the box information.
|
142
|
-
@box = box
|
143
|
-
|
144
|
-
# Do we need to draw a shadow???
|
145
|
-
unless @shadow_win.nil?
|
146
|
-
Draw.drawShadow(@shadow_win)
|
147
|
-
end
|
148
|
-
|
149
|
-
# Box it if needed.
|
150
|
-
if box
|
151
|
-
Draw.drawObjBox(@win, self)
|
152
|
-
end
|
153
|
-
|
154
|
-
# Refresh the window.
|
155
|
-
Ncurses.wrefresh @win
|
156
|
-
end
|
157
|
-
|
158
|
-
# This destroys the widget.
|
159
|
-
def destroy
|
160
|
-
# Clean up the windows.
|
161
|
-
RNDK.window_delete(@shadow_win)
|
162
|
-
RNDK.window_delete(@win)
|
163
|
-
|
164
|
-
# Clean the key bindings.
|
165
|
-
self.clean_bindings(:MARQUEE)
|
166
|
-
|
167
|
-
# Unregister this object.
|
168
|
-
RNDK::Screen.unregister(:MARQUEE, self)
|
169
|
-
end
|
170
|
-
|
171
|
-
# This erases the widget.
|
172
|
-
def erase
|
173
|
-
if self.valid_widget?
|
174
|
-
RNDK.window_erase(@win)
|
175
|
-
RNDK.window_erase(@shadow_win)
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
# This sets the widgets box attribute.
|
180
|
-
def set_box(box)
|
181
|
-
xpos = if @win.nil? then 0 else Ncurses.getbegx(@win) end
|
182
|
-
ypos = if @win.nil? then 0 else Ncurses.getbegy(@win) end
|
183
|
-
|
184
|
-
super
|
185
|
-
|
186
|
-
self.layoutWidget(xpos, ypos)
|
187
|
-
end
|
188
|
-
|
189
|
-
def object_type
|
190
|
-
:MARQUEE
|
191
|
-
end
|
192
|
-
|
193
|
-
def position
|
194
|
-
super(@win)
|
195
|
-
end
|
196
|
-
|
197
|
-
# This sets the background attribute of the widget.
|
198
|
-
def set_bg_attrib(attrib)
|
199
|
-
Ncurses.wbkgd(@win, attrib)
|
200
|
-
end
|
201
|
-
|
202
|
-
def layoutWidget(xpos, ypos)
|
203
|
-
rndkscreen = @screen
|
204
|
-
parent_width = Ncurses.getmaxx(@screen.window)
|
205
|
-
|
206
|
-
RNDK::MARQUEE.discardWin(@win)
|
207
|
-
RNDK::MARQUEE.discardWin(@shadow_win)
|
208
|
-
|
209
|
-
box_width = RNDK.setWidgetDimension(parent_width, @width, 0)
|
210
|
-
box_height = (@border_size * 2) + 1
|
211
|
-
|
212
|
-
# Rejustify the x and y positions if we need to.
|
213
|
-
xtmp = [xpos]
|
214
|
-
ytmp = [ypos]
|
215
|
-
RNDK.alignxy(@screen.window, xtmp, ytmp, box_width, box_height)
|
216
|
-
window = Ncurses.newwin(box_height, box_width, ytmp[0], xtmp[0])
|
217
|
-
|
218
|
-
unless window.nil?
|
219
|
-
@win = window
|
220
|
-
@box_height = box_height
|
221
|
-
@box_width = box_width
|
222
|
-
|
223
|
-
Ncurses.keypad(@win, true)
|
224
|
-
|
225
|
-
# Do we want a shadow?
|
226
|
-
if @shadow
|
227
|
-
@shadow_win = Ncurses.subwin(@screen.window,
|
228
|
-
box_height,
|
229
|
-
box_width,
|
230
|
-
ytmp[0] + 1,
|
231
|
-
xtmp[0] + 1)
|
232
|
-
end
|
233
|
-
end
|
234
|
-
end
|
235
|
-
|
236
|
-
def self.discardWin(winp)
|
237
|
-
unless winp.nil?
|
238
|
-
Ncurses.werase(winp)
|
239
|
-
Ncurses.wrefresh(winp)
|
240
|
-
Ncurses.delwin(winp)
|
241
|
-
end
|
242
|
-
end
|
243
|
-
end
|
244
|
-
end
|