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/slider.rb
CHANGED
@@ -1,12 +1,90 @@
|
|
1
1
|
require 'rndk'
|
2
2
|
|
3
3
|
module RNDK
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
|
5
|
+
# Visual slider box with a label.
|
6
|
+
#
|
7
|
+
# ## Keybindings
|
8
|
+
#
|
9
|
+
# Down Arrow:: Decrements the field by the normal decrement value.
|
10
|
+
# Up Arrow:: Increments the field by the normal increment value.
|
11
|
+
# u:: Increments the field by the normal increment value.
|
12
|
+
# Prev Page:: Decrements the field by the accelerated decrement value.
|
13
|
+
# U:: Decrements the field by the accelerated decrement value.
|
14
|
+
# Ctrl-B:: Decrements the field by the accelerated decrement value.
|
15
|
+
# Next Page:: Increments the field by the accelerated increment value.
|
16
|
+
# D:: Increments the field by the accelerated increment value.
|
17
|
+
# Ctrl-F:: Increments the field by the accelerated increment value.
|
18
|
+
# Home:: Sets the value to the low value.
|
19
|
+
# g:: Sets the value to the low value.
|
20
|
+
# End:: Sets the value to the high value.
|
21
|
+
# G:: Sets the value to the high value.
|
22
|
+
# $:: Sets the value to the high value.
|
23
|
+
# Return:: Exits the widget and returns the current value. This also sets the widget data `exit_type` to `:NORMAL`.
|
24
|
+
# Tab:: Exits the widget and returns the current value. This also sets the widget data `exit_type` to `:NORMAL`.
|
25
|
+
# Escape:: Exits the widget and returns `nil`. Also sets the widget data `exit_type` to `:ESCAPE_HIT`.
|
26
|
+
# Ctrl-L:: Refreshes the screen.
|
27
|
+
#
|
28
|
+
# If the cursor is not pointing to the field's value,
|
29
|
+
# the following key bindings apply.
|
30
|
+
#
|
31
|
+
# You may use the left/right arrows to move the cursor
|
32
|
+
# onto the field's value and modify it by typing characters
|
33
|
+
# to replace the digits and sign.
|
34
|
+
#
|
35
|
+
# Left Arrow:: Decrements the scale by the normal value.
|
36
|
+
# Right Arrow:: Increments the scale by the normal value.
|
37
|
+
# d:: Decrements the scale by the normal value.
|
38
|
+
# D:: Increments the scale by the accelerated value.
|
39
|
+
# -:: Decrements the scale by the normal value.
|
40
|
+
# +:: Increments the scale by the normal value.
|
41
|
+
# 0:: Sets the scale to the low value.
|
42
|
+
#
|
43
|
+
class Slider < Widget
|
44
|
+
|
45
|
+
# Creates a new Slider Widget.
|
46
|
+
#
|
47
|
+
# * `xplace` is the x position - can be an integer or
|
48
|
+
# `RNDK::LEFT`, `RNDK::RIGHT`, `RNDK::CENTER`.
|
49
|
+
# * `yplace` is the y position - can be an integer or
|
50
|
+
# `RNDK::TOP`, `RNDK::BOTTOM`, `RNDK::CENTER`.
|
51
|
+
# * `title` can be more than one line - just split them
|
52
|
+
# with `\n`s.
|
53
|
+
# * `label` is the label of the slider field.
|
54
|
+
# * `filler` is the character to draw the slider bar. You
|
55
|
+
# can combine it with colors too - use the pipe ('|')
|
56
|
+
# operator to combine Ncurses attributes with RNDK Colors.
|
57
|
+
# * `field_width` is the width of the field. It it's 0,
|
58
|
+
# will be created with full width of the screen.
|
59
|
+
# If it's a negative value, will create with full width
|
60
|
+
# minus that value.
|
61
|
+
# * `start` is the initial value of the widget.
|
62
|
+
# * `low`/`high` are the minimum and maximum values of
|
63
|
+
# the slider.
|
64
|
+
# * `inc` is the increment value.
|
65
|
+
# * `fast_inc` is the accelerated increment value.
|
66
|
+
# * `box` if the Widget is drawn with a box outside it.
|
67
|
+
# * `shadow` turns on/off the shadow around the Widget.
|
68
|
+
#
|
69
|
+
def initialize(rndkscreen,
|
70
|
+
xplace,
|
71
|
+
yplace,
|
72
|
+
title,
|
73
|
+
label,
|
74
|
+
filler,
|
75
|
+
field_width,
|
76
|
+
start,
|
77
|
+
low,
|
78
|
+
high,
|
79
|
+
inc,
|
80
|
+
fast_inc,
|
81
|
+
box,
|
82
|
+
shadow)
|
7
83
|
super()
|
8
|
-
|
84
|
+
|
85
|
+
parent_width = Ncurses.getmaxx(rndkscreen.window)
|
9
86
|
parent_height = Ncurses.getmaxy(rndkscreen.window)
|
87
|
+
|
10
88
|
bindings = {
|
11
89
|
'u' => Ncurses::KEY_UP,
|
12
90
|
'U' => Ncurses::KEY_PPAGE,
|
@@ -132,16 +210,20 @@ module RNDK
|
|
132
210
|
|
133
211
|
# Setup the key bindings.
|
134
212
|
bindings.each do |from, to|
|
135
|
-
self.bind(:
|
213
|
+
self.bind(:slider, from, :getc, to)
|
136
214
|
end
|
137
215
|
|
138
|
-
rndkscreen.register(:
|
216
|
+
rndkscreen.register(:slider, self)
|
139
217
|
end
|
140
218
|
|
141
|
-
#
|
142
|
-
|
143
|
-
|
144
|
-
|
219
|
+
# Activates the Widget, letting the user interact with it.
|
220
|
+
#
|
221
|
+
# `actions` is an Array of characters. If it's non-null,
|
222
|
+
# will #inject each char on it into the Widget.
|
223
|
+
#
|
224
|
+
# @return The current value of the slider.
|
225
|
+
def activate(actions=[])
|
226
|
+
self.draw @box
|
145
227
|
|
146
228
|
if actions.nil? || actions.size == 0
|
147
229
|
while true
|
@@ -165,7 +247,7 @@ module RNDK
|
|
165
247
|
|
166
248
|
# Set the exit type and return.
|
167
249
|
self.set_exit_type(0)
|
168
|
-
return
|
250
|
+
return nil
|
169
251
|
end
|
170
252
|
|
171
253
|
# Check if the value lies outside the low/high range. If so, force it in.
|
@@ -260,10 +342,10 @@ module RNDK
|
|
260
342
|
temp[col] = input.chr
|
261
343
|
elsif input == Ncurses::KEY_BACKSPACE
|
262
344
|
# delete the char before the cursor
|
263
|
-
modify = RNDK::
|
345
|
+
modify = RNDK::Slider.removeChar(temp, col - 1)
|
264
346
|
elsif input == Ncurses::KEY_DC
|
265
347
|
# delete the char at the cursor
|
266
|
-
modify = RNDK::
|
348
|
+
modify = RNDK::Slider.removeChar(temp, col)
|
267
349
|
else
|
268
350
|
modify = false
|
269
351
|
end
|
@@ -292,10 +374,10 @@ module RNDK
|
|
292
374
|
end
|
293
375
|
end
|
294
376
|
|
295
|
-
#
|
296
|
-
def inject
|
377
|
+
# @see Widget#inject
|
378
|
+
def inject input
|
297
379
|
pp_return = 1
|
298
|
-
ret =
|
380
|
+
ret = nil
|
299
381
|
complete = false
|
300
382
|
|
301
383
|
# Set the exit type.
|
@@ -307,14 +389,14 @@ module RNDK
|
|
307
389
|
# Check if there is a pre-process function to be called.
|
308
390
|
unless @pre_process_func.nil?
|
309
391
|
# Call the pre-process function.
|
310
|
-
pp_return = @pre_process_func.call(:
|
392
|
+
pp_return = @pre_process_func.call(:slider, self,
|
311
393
|
@pre_process_data, input)
|
312
394
|
end
|
313
395
|
|
314
396
|
# Should we continue?
|
315
397
|
if pp_return != 0
|
316
398
|
# Check for a key binding.
|
317
|
-
if self.checkBind(:
|
399
|
+
if self.checkBind(:slider, input)
|
318
400
|
complete = true
|
319
401
|
else
|
320
402
|
case input
|
@@ -323,13 +405,13 @@ module RNDK
|
|
323
405
|
when Ncurses::KEY_RIGHT
|
324
406
|
self.setEditPosition(@field_edit - 1)
|
325
407
|
when Ncurses::KEY_DOWN
|
326
|
-
@current = RNDK::
|
408
|
+
@current = RNDK::Slider.Decrement(@current, @inc)
|
327
409
|
when Ncurses::KEY_UP
|
328
|
-
@current = RNDK::
|
410
|
+
@current = RNDK::Slider.Increment(@current, @inc)
|
329
411
|
when Ncurses::KEY_PPAGE
|
330
|
-
@current = RNDK::
|
412
|
+
@current = RNDK::Slider.Increment(@current, @fastinc)
|
331
413
|
when Ncurses::KEY_NPAGE
|
332
|
-
@current = RNDK::
|
414
|
+
@current = RNDK::Slider.Decrement(@current, @fastinc)
|
333
415
|
when Ncurses::KEY_HOME
|
334
416
|
@current = @low
|
335
417
|
when Ncurses::KEY_END
|
@@ -374,7 +456,7 @@ module RNDK
|
|
374
456
|
|
375
457
|
# Should we call a post-process?
|
376
458
|
if !complete && !(@post_process_func.nil?)
|
377
|
-
@post_process_func.call(:
|
459
|
+
@post_process_func.call(:slider, self, @post_process_data, input)
|
378
460
|
end
|
379
461
|
end
|
380
462
|
|
@@ -387,26 +469,25 @@ module RNDK
|
|
387
469
|
return ret
|
388
470
|
end
|
389
471
|
|
390
|
-
#
|
472
|
+
# @see Widget#move
|
391
473
|
def move(xplace, yplace, relative, refresh_flag)
|
392
474
|
windows = [@win, @label_win, @field_win, @shadow_win]
|
393
475
|
|
394
476
|
self.move_specific(xplace, yplace, relative, refresh_flag, windows, [])
|
395
477
|
end
|
396
478
|
|
397
|
-
#
|
398
|
-
|
479
|
+
# Draws the Widget on the Screen.
|
480
|
+
#
|
481
|
+
# If `box` is true, it is drawn with a box.
|
482
|
+
def draw box
|
483
|
+
|
399
484
|
# Draw the shadow.
|
400
|
-
unless @shadow_win.nil?
|
401
|
-
Draw.drawShadow(@shadow_win)
|
402
|
-
end
|
485
|
+
Draw.drawShadow(@shadow_win) unless @shadow_win.nil?
|
403
486
|
|
404
487
|
# Box the widget if asked.
|
405
|
-
if box
|
406
|
-
Draw.drawObjBox(@win, self)
|
407
|
-
end
|
488
|
+
Draw.drawObjBox(@win, self) if box
|
408
489
|
|
409
|
-
self.drawTitle
|
490
|
+
self.drawTitle @win
|
410
491
|
|
411
492
|
# Draw the label.
|
412
493
|
unless @label_win.nil?
|
@@ -450,7 +531,7 @@ module RNDK
|
|
450
531
|
Ncurses.wbkgd(@label_win, attrib) unless @label_win.nil?
|
451
532
|
end
|
452
533
|
|
453
|
-
#
|
534
|
+
# @see Widget#destroy
|
454
535
|
def destroy
|
455
536
|
self.cleanTitle
|
456
537
|
@label = []
|
@@ -462,19 +543,19 @@ module RNDK
|
|
462
543
|
RNDK.window_delete(@win)
|
463
544
|
|
464
545
|
# Clean the key bindings.
|
465
|
-
self.clean_bindings(:
|
546
|
+
self.clean_bindings(:slider)
|
466
547
|
|
467
548
|
# Unregister this object.
|
468
|
-
RNDK::Screen.unregister(:
|
549
|
+
RNDK::Screen.unregister(:slider, self)
|
469
550
|
end
|
470
551
|
|
471
|
-
#
|
552
|
+
# @see Widget#erase
|
472
553
|
def erase
|
473
554
|
if self.valid_widget?
|
474
|
-
RNDK.window_erase
|
475
|
-
RNDK.window_erase
|
476
|
-
RNDK.window_erase
|
477
|
-
RNDK.window_erase
|
555
|
+
RNDK.window_erase @label_win
|
556
|
+
RNDK.window_erase @field_win
|
557
|
+
RNDK.window_erase @lwin
|
558
|
+
RNDK.window_erase @shadow_win
|
478
559
|
end
|
479
560
|
end
|
480
561
|
|
@@ -539,7 +620,7 @@ module RNDK
|
|
539
620
|
end
|
540
621
|
|
541
622
|
def object_type
|
542
|
-
:
|
623
|
+
:slider
|
543
624
|
end
|
544
625
|
end
|
545
626
|
end
|
data/lib/rndk/swindow.rb
CHANGED
@@ -2,7 +2,7 @@ require 'rndk'
|
|
2
2
|
|
3
3
|
module RNDK
|
4
4
|
# TODO This Widget's very buggy! Somehow improve it later!
|
5
|
-
class SWINDOW <
|
5
|
+
class SWINDOW < Widget
|
6
6
|
def initialize(rndkscreen, xplace, yplace, height, width, title,
|
7
7
|
save_lines, box, shadow)
|
8
8
|
super()
|
@@ -97,11 +97,11 @@ module RNDK
|
|
97
97
|
|
98
98
|
# Create the key bindings
|
99
99
|
bindings.each do |from, to|
|
100
|
-
self.bind(:
|
100
|
+
self.bind(:swindow, from, :getc, to)
|
101
101
|
end
|
102
102
|
|
103
103
|
# Register this baby.
|
104
|
-
rndkscreen.register(:
|
104
|
+
rndkscreen.register(:swindow, self)
|
105
105
|
end
|
106
106
|
|
107
107
|
# This sets the lines and the box attribute of the scrolling window.
|
@@ -343,14 +343,14 @@ module RNDK
|
|
343
343
|
# Check if there is a pre-process function to be called.
|
344
344
|
unless @pre_process_func.nil?
|
345
345
|
# Call the pre-process function.
|
346
|
-
pp_return = @pre_process_func.call(:
|
346
|
+
pp_return = @pre_process_func.call(:swindow, self,
|
347
347
|
@pre_process_data, input)
|
348
348
|
end
|
349
349
|
|
350
350
|
# Should we continue?
|
351
351
|
if pp_return != 0
|
352
352
|
# Check for a key binding.
|
353
|
-
if self.checkBind(:
|
353
|
+
if self.checkBind(:swindow, input)
|
354
354
|
complete = true
|
355
355
|
else
|
356
356
|
case input
|
@@ -428,7 +428,7 @@ module RNDK
|
|
428
428
|
|
429
429
|
# Should we call a post-process?
|
430
430
|
if !complete && !(@post_process_func.nil?)
|
431
|
-
@post_process_func.call(:
|
431
|
+
@post_process_func.call(:swindow, self, @post_process_data, input)
|
432
432
|
end
|
433
433
|
end
|
434
434
|
|
@@ -522,10 +522,10 @@ module RNDK
|
|
522
522
|
RNDK.window_delete(@win)
|
523
523
|
|
524
524
|
# Clean the key bindings.
|
525
|
-
self.clean_bindings(:
|
525
|
+
self.clean_bindings(:swindow)
|
526
526
|
|
527
527
|
# Unregister this object.
|
528
|
-
RNDK::Screen.unregister(:
|
528
|
+
RNDK::Screen.unregister(:swindow, self)
|
529
529
|
end
|
530
530
|
|
531
531
|
# This function erases the scrolling window widget.
|
@@ -576,7 +576,7 @@ module RNDK
|
|
576
576
|
# scrolling window to a file.
|
577
577
|
def saveInformation
|
578
578
|
# Create the entry field to get the filename.
|
579
|
-
entry = RNDK::
|
579
|
+
entry = RNDK::Entry.new(@screen, RNDK::CENTER, RNDK::CENTER,
|
580
580
|
'<C></B/5>Enter the filename of the save file.',
|
581
581
|
'Filename: ', Ncurses::A_NORMAL, '_'.ord, :MIXED,
|
582
582
|
20, 1, 256, true, false)
|
@@ -760,7 +760,7 @@ module RNDK
|
|
760
760
|
end
|
761
761
|
|
762
762
|
def object_type
|
763
|
-
:
|
763
|
+
:swindow
|
764
764
|
end
|
765
765
|
end
|
766
766
|
end
|
data/lib/rndk/template.rb
CHANGED
data/lib/rndk/uscale.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'rndk/scale'
|
2
2
|
|
3
3
|
module RNDK
|
4
|
-
class USCALE <
|
4
|
+
class USCALE < SCALE
|
5
5
|
# The original UScale handled unsigned values.
|
6
6
|
# Since Ruby's typing is different this is really just SCALE
|
7
7
|
# but is nice it's nice to have this for compatibility/completeness
|
data/lib/rndk/uslider.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'rndk/slider'
|
2
2
|
|
3
3
|
module RNDK
|
4
|
-
class USLIDER <
|
4
|
+
class USLIDER < SLIDER
|
5
5
|
# The original USlider handled unsigned values.
|
6
6
|
# Since Ruby's typing is different this is really just SLIDER
|
7
7
|
# but is nice it's nice to have this for compatibility/completeness
|
data/lib/rndk/version.rb
CHANGED
data/lib/rndk/viewer.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'rndk'
|
2
2
|
|
3
3
|
module RNDK
|
4
|
-
class VIEWER <
|
4
|
+
class VIEWER < Widget
|
5
5
|
DOWN = 0
|
6
6
|
UP = 1
|
7
7
|
|
@@ -520,7 +520,7 @@ module RNDK
|
|
520
520
|
end
|
521
521
|
|
522
522
|
# Pop up the entry field.
|
523
|
-
get_pattern = RNDK::
|
523
|
+
get_pattern = RNDK::Entry.new(screen, RNDK::CENTER, RNDK::CENTER,
|
524
524
|
'', label, Ncurses.COLOR_PAIR(5) | Ncurses::A_BOLD,
|
525
525
|
'.' | Ncurses.COLOR_PAIR(5) | Ncurses::A_BOLD,
|
526
526
|
:MIXED, 10, 0, 256, true, false)
|
@@ -613,7 +613,7 @@ module RNDK
|
|
613
613
|
# This pops a little message up on the screen.
|
614
614
|
def popUpLabel(mesg)
|
615
615
|
# Set up variables.
|
616
|
-
label = RNDK::
|
616
|
+
label = RNDK::Label.new(@screen, RNDK::CENTER, RNDK::CENTER,
|
617
617
|
mesg, mesg.size, true, false)
|
618
618
|
|
619
619
|
# Draw the label and wait.
|
data/rndk.gemspec
CHANGED
@@ -20,7 +20,7 @@ It means that you'll be able to master the dark arts of text-based
|
|
20
20
|
applications, easily creating nice apps for the console.
|
21
21
|
END_OF_DESCRIPTION
|
22
22
|
|
23
|
-
spec.homepage = "
|
23
|
+
spec.homepage = "http://alexdantas.net/projects/rndk"
|
24
24
|
spec.license = "BSD"
|
25
25
|
|
26
26
|
spec.files = `git ls-files`.split($/)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rndk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexandre Dantas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi-ncurses
|
@@ -66,6 +66,7 @@ extensions: []
|
|
66
66
|
extra_rdoc_files: []
|
67
67
|
files:
|
68
68
|
- ".gitignore"
|
69
|
+
- ".yardopts"
|
69
70
|
- COPYING
|
70
71
|
- Gemfile
|
71
72
|
- README.md
|
@@ -80,7 +81,10 @@ files:
|
|
80
81
|
- examples/04-quick-widgets.rb
|
81
82
|
- examples/05-position-widget.rb
|
82
83
|
- examples/calendar.rb
|
84
|
+
- examples/entry.rb
|
85
|
+
- examples/label.rb
|
83
86
|
- examples/scroll.rb
|
87
|
+
- examples/slider.rb
|
84
88
|
- lib/rndk.rb
|
85
89
|
- lib/rndk/alphalist.rb
|
86
90
|
- lib/rndk/button.rb
|
@@ -122,7 +126,7 @@ files:
|
|
122
126
|
- lib/rndk/version.rb
|
123
127
|
- lib/rndk/viewer.rb
|
124
128
|
- rndk.gemspec
|
125
|
-
homepage:
|
129
|
+
homepage: http://alexdantas.net/projects/rndk
|
126
130
|
licenses:
|
127
131
|
- BSD
|
128
132
|
metadata: {}
|