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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 658d93a038f41e69767bd1f8a24f0ed69ab21d61
|
4
|
+
data.tar.gz: 085b8d4cf88241e7ed481736a8356be356341628
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f632241c52b6accf9e017d3e2d8e26e7836d46fcbcbfcd14a3dfa8b092da98fd69500be4921a8744f87d8ecaef19bb1aacfb6cfd0e599deb227b1612242e35e1
|
7
|
+
data.tar.gz: 4b18178e17b1ab81820caaf5a79fc0ab0bf66f31dfb2bf92f47c1b517fe2ced0a8c594dfb50573a391117b2b0197ace571d152257bdd05a0024c0e1710cb88c7
|
data/.gitignore
CHANGED
data/.yardopts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
-m markdown
|
data/README.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# Ruby Ncurses Development Kit (RNDK)
|
2
|
+
[](http://badge.fury.io/rb/rndk)
|
2
3
|
|
3
4
|
`rndk` aims to be a powerful, well-documented and easy-to-use
|
4
5
|
Ncurses Development Kit in Ruby. Besides abstracting away Ncurses'
|
@@ -10,51 +11,50 @@ applications, easily creating nice apps for the console.
|
|
10
11
|
`RNDK` is a fork from `tawny-cdk`, a [Chris Sauro Ruby port][tawny]
|
11
12
|
of [Thomas Dickey's Curses Development Kit][cdk] (in C).
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
14
|
+
Here's the list of currently implemented widgets:
|
15
|
+
|
16
|
+
| Widget | Description | Has examples? |
|
17
|
+
| --------------------- | ----------------------------------------------- | ------------- |
|
18
|
+
| Alphalist | Scrolling list of alphabetically sorted words | not yet |
|
19
|
+
| Button | Message attached to a callback | not yet |
|
20
|
+
| Buttonbox | Labeled set of buttons | not yet |
|
21
|
+
| Calendar | Pop-up traversable calendar | yes! |
|
22
|
+
| Dialog | Dialog box with a message and some buttons | not yet |
|
23
|
+
| Entry | Text-entry box with a label | yes! |
|
24
|
+
| File Selector | Interact graphically with the file system | not yet |
|
25
|
+
| Graph | Plots a graph with x/y coordinates | not yet |
|
26
|
+
| Histogram | Vertical/horizontal histogram | not yet |
|
27
|
+
| Item List | Select from a preset item list | not yet |
|
28
|
+
| Label | Pop-up label window | yes! |
|
29
|
+
| Matrix | Matrix widget | not yet |
|
30
|
+
| Marquee | Movable text | not yet |
|
31
|
+
| Menu | Pull-down menu list | not yet |
|
32
|
+
| Multiple Line Entry | Multiple-line entry box with a label | not yet |
|
33
|
+
| Radio List | Radio item list | not yet |
|
34
|
+
| Scale | Draggable scale box with a label | not yet |
|
35
|
+
| Scrolling List | Scrolling item list | yes! |
|
36
|
+
| Scrolling Window | Display scrollable long messages | not yet |
|
37
|
+
| Selection List | Selection list widget | not yet |
|
38
|
+
| Slider | Visual slider box | yes! |
|
39
|
+
| Template | Insert info on a field with a pre-set format | not yet |
|
40
|
+
| Viewer | View contents of a file on a scrollable box | not yet |
|
41
|
+
|
42
|
+
The ones with examples (on the root `examples` directory) are ready to use.
|
43
|
+
The others are kinda unstable, since the API is being completely rewritten.
|
44
|
+
Also, [click here for screenshots][widgets]!
|
38
45
|
|
39
46
|
## WARNING
|
40
47
|
|
41
|
-
This is a very unstable Work-in-Progress library.
|
48
|
+
This is a very unstable Work-in-Progress library. I'm currently reviewing
|
49
|
+
`tawny-cdk`'s API, so a lot of things are changing real fast.
|
42
50
|
|
43
|
-
|
44
|
-
|
51
|
+
Be sure to know that whenever I remove this notice, things will be nicer. For
|
52
|
+
now, I recommend you to **not** use `rndk` for production programs!
|
45
53
|
|
46
|
-
|
47
|
-
nicer.
|
48
|
-
|
49
|
-
For now, I recommend you to **not** use `rndk` for production
|
50
|
-
programs!
|
51
|
-
|
52
|
-
## Requirements
|
54
|
+
## Installation
|
53
55
|
|
54
56
|
`rndk` requires the gem `ffi-ncurses`.
|
55
57
|
|
56
|
-
## Installation
|
57
|
-
|
58
58
|
Add this line to your application's Gemfile:
|
59
59
|
|
60
60
|
gem 'rndk'
|
@@ -69,26 +69,34 @@ Or install it yourself as:
|
|
69
69
|
|
70
70
|
## Usage
|
71
71
|
|
72
|
+
[Take a look at the Wiki][wiki]! There's some tutorials and
|
73
|
+
resources there.
|
74
|
+
|
72
75
|
The `examples` directory contains lots of sample usages for every
|
73
76
|
widget available. To execute them, go to the `rndk` root folder
|
74
77
|
and run:
|
75
78
|
|
76
79
|
ruby -Ilib examples/YOUR_EXAMPLE_HERE
|
77
80
|
|
78
|
-
There's also some more
|
81
|
+
There's also some more complex demo applications under the `demos`
|
79
82
|
directory. Do the same:
|
80
83
|
|
81
84
|
ruby -Ilib demos/YOUR_DEMO_HERE
|
82
85
|
|
83
86
|
## Contributing
|
84
87
|
|
88
|
+
Any help would be largely appreciated! For a list of things
|
89
|
+
to do, see the `TODO` file.
|
90
|
+
|
85
91
|
Currently `rndk` has a C-like API, since it was directly taken
|
86
|
-
from `cdk`. The top priority is to make it more rubyish
|
87
|
-
|
92
|
+
from `cdk`. The top priority is to make it more rubyish.
|
93
|
+
|
94
|
+
I'm getting inspiration from [rbcurse] and some non-ruby Widget
|
95
|
+
sets.
|
88
96
|
|
89
|
-
|
97
|
+
Step-by-step guide to contribute:
|
90
98
|
|
91
|
-
1. Fork
|
99
|
+
1. Fork this repository
|
92
100
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
93
101
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
94
102
|
4. Push to the branch (`git push origin my-new-feature`)
|
@@ -97,4 +105,15 @@ Also, see the `TODO` file.
|
|
97
105
|
[tawny]:https://github.com/masterzora/tawny-cdk
|
98
106
|
[cdk]:http://invisible-island.net/cdk/
|
99
107
|
[rbcurse]:https://github.com/rkumar/rbcurse
|
108
|
+
[wiki]:https://github.com/alexdantas/rndk/wiki
|
109
|
+
[widgets]:https://github.com/alexdantas/rndk/wiki/widgets
|
110
|
+
|
111
|
+
## Contact
|
112
|
+
|
113
|
+
Hi, I'm Alexandre Dantas! Thanks for having interest in this project. Please
|
114
|
+
take the time to visit any of the links below.
|
115
|
+
|
116
|
+
* `rndk` homepage: http://www.alexdantas.net/projects/rndk
|
117
|
+
* Contact: `eu @ alexdantas.net`
|
118
|
+
* My homepage: http://www.alexdantas.net
|
100
119
|
|
data/demos/appointment.rb
CHANGED
@@ -175,7 +175,7 @@ class Appointment
|
|
175
175
|
marker = Appointment::GPAppointmentAttributes[selection]
|
176
176
|
|
177
177
|
# Create the entry field for the description.
|
178
|
-
entry = RNDK::
|
178
|
+
entry = RNDK::Entry.new(calendar.screen,
|
179
179
|
RNDK::CENTER,
|
180
180
|
RNDK::CENTER,
|
181
181
|
'<C>Enter a description of the appointment.',
|
@@ -292,7 +292,7 @@ class Appointment
|
|
292
292
|
end
|
293
293
|
|
294
294
|
# Create the label widget
|
295
|
-
label = RNDK::
|
295
|
+
label = RNDK::Label.new(calendar.screen, RNDK::CENTER, RNDK::CENTER, mesg, true, false)
|
296
296
|
label.draw(label.box)
|
297
297
|
label.wait(' ')
|
298
298
|
label.destroy
|
data/demos/clock.rb
CHANGED
@@ -18,7 +18,7 @@ begin
|
|
18
18
|
mesg = ['</1/B>HH:MM:SS']
|
19
19
|
|
20
20
|
# Declare the labels.
|
21
|
-
label = RNDK::
|
21
|
+
label = RNDK::Label.new(rndkscreen, RNDK::CENTER, RNDK::CENTER, mesg, true, true)
|
22
22
|
|
23
23
|
# Woops, something bad happened
|
24
24
|
if label.nil?
|
data/demos/fileview.rb
CHANGED
File without changes
|
data/examples/01-hello-world.rb
CHANGED
data/examples/02-colors.rb
CHANGED
data/examples/03-markup.rb
CHANGED
@@ -4,9 +4,10 @@
|
|
4
4
|
# Also, how to use RNDK's color markup on strings.
|
5
5
|
#
|
6
6
|
# Colors on text are achieved by foreground/background
|
7
|
-
# color pairs.
|
7
|
+
# color pairs.
|
8
|
+
# Stop reading, run the example now.
|
8
9
|
#
|
9
|
-
# As you just
|
10
|
+
# As you just saw, they go from 1 to 80, going on the
|
10
11
|
# following order in sets of 8 and from background to
|
11
12
|
# foreground:
|
12
13
|
#
|
@@ -39,6 +40,7 @@ begin
|
|
39
40
|
# * To start a color, do `</XX>`, where XX is a color pair
|
40
41
|
# from 1 to 80.
|
41
42
|
# * To stop it, do `<!XX>`, where XX is the same as above.
|
43
|
+
# * To center the text, do `<C>`.
|
42
44
|
|
43
45
|
msg = []
|
44
46
|
msg << "</1>Pair01<!1> </2>Pair02<!2> </3>Pair03<!3> </4>Pair04<!4> </5>Pair05<!5> </6>Pair06<!6> </7>Pair07<!7> </8>Pair08<!8>"
|
@@ -55,10 +57,10 @@ begin
|
|
55
57
|
msg << "<C>All RNDK color pairs (press 'q' to quit)"
|
56
58
|
|
57
59
|
# Show label with that huge message.
|
58
|
-
label = RNDK::
|
60
|
+
label = RNDK::Label.new(screen,
|
59
61
|
RNDK::CENTER, # x
|
60
62
|
1, # y
|
61
|
-
msg,
|
63
|
+
msg, # message
|
62
64
|
true, # has box?
|
63
65
|
true) # has shadow?
|
64
66
|
|
data/examples/entry.rb
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Shows off the Entry widget by asking you to
|
4
|
+
# type anything.
|
5
|
+
# Then it tells you what you sent to it.
|
6
|
+
#
|
7
|
+
require 'rndk/entry'
|
8
|
+
|
9
|
+
begin
|
10
|
+
# Startup RNDK and Colors
|
11
|
+
rndkscreen = RNDK::Screen.new
|
12
|
+
RNDK::Color.init
|
13
|
+
|
14
|
+
# Watch out for that markup
|
15
|
+
# See example 'markup.rb' for details
|
16
|
+
title = "<C></77>Tell me something"
|
17
|
+
label = "</U/5>Oh yeah<!U!5>:"
|
18
|
+
|
19
|
+
# Create the entry field widget.
|
20
|
+
entry = RNDK::Entry.new(rndkscreen,
|
21
|
+
RNDK::CENTER,
|
22
|
+
RNDK::CENTER,
|
23
|
+
title,
|
24
|
+
label,
|
25
|
+
Ncurses::A_NORMAL,
|
26
|
+
'.',
|
27
|
+
:MIXED, # behavior
|
28
|
+
40,
|
29
|
+
0,
|
30
|
+
256,
|
31
|
+
true,
|
32
|
+
false)
|
33
|
+
|
34
|
+
# Is the widget nil?
|
35
|
+
if entry.nil?
|
36
|
+
RNDK::Screen.end_rndk
|
37
|
+
|
38
|
+
puts "Cannot create the entry box. Is the window too small?"
|
39
|
+
exit 1
|
40
|
+
end
|
41
|
+
|
42
|
+
# Draw the screen.
|
43
|
+
rndkscreen.refresh
|
44
|
+
|
45
|
+
# Activate the entry field.
|
46
|
+
info = entry.activate
|
47
|
+
|
48
|
+
mesg = []
|
49
|
+
# Tell them what they typed.
|
50
|
+
if entry.exit_type == :ESCAPE_HIT
|
51
|
+
mesg = ["<C>You hit escape. No information passed back.",
|
52
|
+
"<C>Press any key to continue."]
|
53
|
+
|
54
|
+
elsif entry.exit_type == :NORMAL
|
55
|
+
mesg = ["<C>You typed in the following",
|
56
|
+
"<C>(#{info})",
|
57
|
+
"",
|
58
|
+
"<C>Press any key to continue."]
|
59
|
+
end
|
60
|
+
|
61
|
+
# Quick widget - see example 'quick-widgets.rb' for details
|
62
|
+
rndkscreen.popup_label mesg
|
63
|
+
|
64
|
+
# Quitting
|
65
|
+
RNDK::Screen.end_rndk
|
66
|
+
|
67
|
+
# Just in case something bad happens.
|
68
|
+
rescue Exception => e
|
69
|
+
RNDK::Screen.end_rndk
|
70
|
+
|
71
|
+
puts e
|
72
|
+
puts e.inspect
|
73
|
+
puts e.backtrace
|
74
|
+
exit 1
|
75
|
+
end
|
76
|
+
|
data/examples/label.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Shows some colored lines within
|
4
|
+
# a Label widget.
|
5
|
+
require 'rndk/label'
|
6
|
+
|
7
|
+
begin
|
8
|
+
# Starting things up
|
9
|
+
rndkscreen = RNDK::Screen.new
|
10
|
+
RNDK::Color.init
|
11
|
+
|
12
|
+
# Set the labels with some nice markup
|
13
|
+
mesg = [
|
14
|
+
"</29/B>This line should have a yellow foreground and a blue background.",
|
15
|
+
"</5/B>This line should have a white foreground and a blue background.",
|
16
|
+
"</26/B>This line should have a yellow foreground and a red background.",
|
17
|
+
"<C>This line should be set to whatever the screen default is."
|
18
|
+
]
|
19
|
+
|
20
|
+
label = RNDK::Label.new(rndkscreen,
|
21
|
+
RNDK::CENTER,
|
22
|
+
RNDK::CENTER,
|
23
|
+
mesg,
|
24
|
+
true,
|
25
|
+
true)
|
26
|
+
|
27
|
+
if label.nil?
|
28
|
+
RNDK::Screen.end_rndk
|
29
|
+
|
30
|
+
puts 'Cannot create the label. Is the window too small?'
|
31
|
+
exit 1
|
32
|
+
end
|
33
|
+
|
34
|
+
# Draw the RNDK screen and waits for
|
35
|
+
# space to be pressed.
|
36
|
+
rndkscreen.refresh
|
37
|
+
label.wait(' ')
|
38
|
+
|
39
|
+
# Clean up
|
40
|
+
RNDK::Screen.end_rndk
|
41
|
+
|
42
|
+
# Just in case something bad happens.
|
43
|
+
rescue Exception => e
|
44
|
+
RNDK::Screen.end_rndk
|
45
|
+
|
46
|
+
puts e
|
47
|
+
puts e.inspect
|
48
|
+
puts e.backtrace
|
49
|
+
exit 1
|
50
|
+
end
|
51
|
+
|
data/examples/scroll.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
#
|
3
|
-
# Displays a Scroll list with the current
|
4
|
-
# directory's files.
|
3
|
+
# Displays a Scroll list with the current directory's files.
|
5
4
|
#
|
6
5
|
# You can also modify it at runtime with the keys:
|
7
6
|
#
|
@@ -9,41 +8,48 @@
|
|
9
8
|
# * 'i' inserts item
|
10
9
|
# * 'd' deletes item
|
11
10
|
#
|
12
|
-
|
13
|
-
|
14
|
-
# It creates new labels to add to the Scroll List.
|
11
|
+
# After selecting an item, we pop-up the user with it's name.
|
15
12
|
#
|
16
|
-
|
17
|
-
$count = 0
|
18
|
-
def new_label(prefix)
|
19
|
-
result = "%s%d" % [prefix, $count]
|
20
|
-
$count += 1
|
21
|
-
return result
|
22
|
-
end
|
13
|
+
require 'rndk/scroll'
|
23
14
|
|
24
15
|
begin
|
25
16
|
# Set up RNDK and colors
|
26
17
|
rndkscreen = RNDK::Screen.new
|
27
|
-
RNDK::
|
18
|
+
RNDK::Color.init
|
19
|
+
|
20
|
+
# Turning off the blinking cursor
|
21
|
+
Ncurses.curs_set 0
|
28
22
|
|
29
23
|
# Use the current directory list to fill the radio list
|
30
|
-
item
|
31
|
-
|
24
|
+
item = RNDK.get_directory_contents '.'
|
25
|
+
|
26
|
+
# Pay attention to the markup:
|
27
|
+
# * <C> centers the text,
|
28
|
+
# * </XX> is a color pair
|
29
|
+
# See example 'markup.rb' for more details.
|
30
|
+
title = <<END
|
31
|
+
<C></77>Pick a file
|
32
|
+
</77>Press 'a' to append an item
|
33
|
+
</77>Press 'i' to insert an item
|
34
|
+
</77>Press 'd' to delete current item
|
35
|
+
</77>(don't worry, won't delete your files)
|
36
|
+
</77>Press 'enter' or 'tab' to select item
|
37
|
+
------------------------------------------------
|
38
|
+
END
|
32
39
|
|
33
40
|
# Create the scrolling list.
|
34
|
-
scroll_list = RNDK::
|
35
|
-
RNDK::CENTER,
|
36
|
-
RNDK::CENTER,
|
37
|
-
RNDK::RIGHT,
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
item,
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
false) # shadow
|
41
|
+
scroll_list = RNDK::Scroll.new(rndkscreen,
|
42
|
+
RNDK::CENTER, # x
|
43
|
+
RNDK::CENTER, # y
|
44
|
+
RNDK::RIGHT, # scrollbar position
|
45
|
+
50, # width
|
46
|
+
24, # height
|
47
|
+
title, # title
|
48
|
+
item, # items on the list
|
49
|
+
true, # show numbers
|
50
|
+
RNDK::Color[:red], # highlight color
|
51
|
+
true, # box
|
52
|
+
false) # shadow
|
47
53
|
|
48
54
|
if scroll_list.nil?
|
49
55
|
RNDK::Screen.end_rndk
|
@@ -54,21 +60,30 @@ begin
|
|
54
60
|
|
55
61
|
# These are the functions that will modify the
|
56
62
|
# Scroll List at runtime.
|
63
|
+
#
|
64
|
+
# The arguments to the block are provided by
|
65
|
+
# default, you can ignore them right now.
|
66
|
+
#
|
67
|
+
# The only thing you need to know is that `widget` is
|
68
|
+
# the scroll - widget that we attach the callback to.
|
69
|
+
$counter = 0
|
57
70
|
|
58
|
-
|
59
|
-
widget.addItem
|
71
|
+
add_item_callback = lambda do |type, widget, client_data, input|
|
72
|
+
widget.addItem "add_#{$counter}"
|
73
|
+
$counter += 1
|
60
74
|
widget.screen.refresh
|
61
75
|
return true
|
62
76
|
end
|
63
77
|
|
64
|
-
|
65
|
-
widget.insertItem
|
78
|
+
insert_item_callback = lambda do |type, widget, client_data, input|
|
79
|
+
widget.insertItem "insert_#{$counter}"
|
80
|
+
$counter += 1
|
66
81
|
widget.screen.refresh
|
67
82
|
return true
|
68
83
|
end
|
69
84
|
|
70
|
-
|
71
|
-
widget.deleteItem
|
85
|
+
delete_item_callback = lambda do |type, widget, client_data, input|
|
86
|
+
widget.deleteItem widget.getCurrentItem
|
72
87
|
widget.screen.refresh
|
73
88
|
return true
|
74
89
|
end
|
@@ -77,30 +92,41 @@ begin
|
|
77
92
|
#
|
78
93
|
# It only accepts lambdas.
|
79
94
|
|
80
|
-
scroll_list.bind(:
|
81
|
-
scroll_list.bind(:
|
82
|
-
scroll_list.bind(:
|
95
|
+
scroll_list.bind(:scroll, 'a', add_item_callback, nil)
|
96
|
+
scroll_list.bind(:scroll, 'i', insert_item_callback, nil)
|
97
|
+
scroll_list.bind(:scroll, 'd', delete_item_callback, nil)
|
83
98
|
|
84
99
|
# Activate the scrolling list.
|
85
|
-
selection = scroll_list.activate
|
100
|
+
selection = scroll_list.activate
|
101
|
+
|
102
|
+
# Now, we'll determine how the widget was exited
|
103
|
+
# and pop-up the user with it's choice
|
86
104
|
|
87
|
-
# Determine how the widget was exited
|
88
105
|
msg = []
|
89
106
|
if scroll_list.exit_type == :ESCAPE_HIT
|
90
107
|
msg = ['<C>You hit escape. No file selected',
|
91
|
-
'',
|
92
108
|
'<C>Press any key to continue.']
|
93
109
|
|
94
110
|
elsif scroll_list.exit_type == :NORMAL
|
95
111
|
the_item = RNDK.chtype2Char scroll_list.item[selection]
|
96
112
|
|
97
113
|
msg = ['<C>You selected the following file',
|
98
|
-
"<C
|
114
|
+
"<C></77>#{the_item}",
|
99
115
|
"<C>Press any key to continue."]
|
100
116
|
end
|
117
|
+
|
118
|
+
# A quick widget - see example 'quick-widgets.rb'
|
101
119
|
rndkscreen.popup_label msg
|
102
120
|
|
103
|
-
# Exit
|
104
121
|
RNDK::Screen.end_rndk
|
122
|
+
|
123
|
+
# Just in case something bad happens.
|
124
|
+
rescue Exception => e
|
125
|
+
RNDK::Screen.end_rndk
|
126
|
+
|
127
|
+
puts e
|
128
|
+
puts e.inspect
|
129
|
+
puts e.backtrace
|
130
|
+
exit 1
|
105
131
|
end
|
106
132
|
|
data/examples/slider.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Shows a slider bar that goes from 1 to 100.
|
4
|
+
|
5
|
+
require 'rndk/slider'
|
6
|
+
|
7
|
+
begin
|
8
|
+
# Markup-happy labels
|
9
|
+
title = '<C></U>Enter a value'
|
10
|
+
label = '</B>Current Value:'
|
11
|
+
|
12
|
+
# Set up RNDK
|
13
|
+
rndkscreen = RNDK::Screen.new
|
14
|
+
RNDK::Color.init
|
15
|
+
|
16
|
+
# Create the widget
|
17
|
+
widget = RNDK::Slider.new(rndkscreen,
|
18
|
+
RNDK::CENTER,
|
19
|
+
RNDK::CENTER,
|
20
|
+
title,
|
21
|
+
label,
|
22
|
+
Ncurses::A_REVERSE | RNDK::Color[:white_blue] | ' '.ord,
|
23
|
+
50,
|
24
|
+
1,
|
25
|
+
1,
|
26
|
+
100,
|
27
|
+
1,
|
28
|
+
2,
|
29
|
+
true,
|
30
|
+
false)
|
31
|
+
|
32
|
+
if widget.nil?
|
33
|
+
RNDK::Screen.end_rndk
|
34
|
+
|
35
|
+
puts "Cannot make the widget. Is the window too small?"
|
36
|
+
exit 1
|
37
|
+
end
|
38
|
+
|
39
|
+
# Activate the widget.
|
40
|
+
selection = widget.activate
|
41
|
+
|
42
|
+
# Check the exit value of the widget.
|
43
|
+
mesg = []
|
44
|
+
|
45
|
+
if widget.exit_type == :ESCAPE_HIT
|
46
|
+
mesg = ["<C>You hit escape. No value selected.",
|
47
|
+
"<C>Press any key to continue."]
|
48
|
+
|
49
|
+
elsif widget.exit_type == :NORMAL
|
50
|
+
mesg = ["<C>You selected #{selection}",
|
51
|
+
"<C>Press any key to continue."]
|
52
|
+
end
|
53
|
+
|
54
|
+
# A quick popup widget! Check out the
|
55
|
+
# example file 'quick-widgets.rb'
|
56
|
+
rndkscreen.popup_label mesg
|
57
|
+
|
58
|
+
# Clean up
|
59
|
+
RNDK::Screen.end_rndk
|
60
|
+
|
61
|
+
# Just in case something bad happens.
|
62
|
+
rescue Exception => e
|
63
|
+
RNDK::Screen.end_rndk
|
64
|
+
|
65
|
+
puts e
|
66
|
+
puts e.inspect
|
67
|
+
puts e.backtrace
|
68
|
+
exit 1
|
69
|
+
end
|
70
|
+
|