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
@@ -0,0 +1,90 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# This example shows both callbacks and traverse.
|
4
|
+
#
|
5
|
+
# We show you two scroll bars, each having related
|
6
|
+
# items.
|
7
|
+
# When you scroll on the first, it shows it's results
|
8
|
+
# on the second one.
|
9
|
+
#
|
10
|
+
require 'rndk/scroll'
|
11
|
+
require 'rndk/label'
|
12
|
+
|
13
|
+
begin
|
14
|
+
screen = RNDK::Screen.new
|
15
|
+
RNDK::Color.init
|
16
|
+
|
17
|
+
# For each item we have a description
|
18
|
+
items = ["First",
|
19
|
+
"Second",
|
20
|
+
"Third"]
|
21
|
+
descriptions = [["Contents", "of", "first", "item"],
|
22
|
+
["here", "we", "have", "the", "second", "one"],
|
23
|
+
["Finally", "the", "third"]]
|
24
|
+
|
25
|
+
# Creating the two scroll bars.
|
26
|
+
# Pay attention to their positioning.
|
27
|
+
scroll_1 = RNDK::Scroll.new(screen, {
|
28
|
+
:x => RNDK::LEFT,
|
29
|
+
:y => RNDK::CENTER,
|
30
|
+
:width => RNDK::Screen.width/2 - 1,
|
31
|
+
:height => 20,
|
32
|
+
:title => "<C>Items", # centered
|
33
|
+
:items => items,
|
34
|
+
:highlight => RNDK::Color[:red],
|
35
|
+
})
|
36
|
+
|
37
|
+
scroll_2 = RNDK::Scroll.new(screen, {
|
38
|
+
:x => RNDK::RIGHT,
|
39
|
+
:y => RNDK::CENTER,
|
40
|
+
:width => RNDK::Screen.width/2 - 1,
|
41
|
+
:height => 20,
|
42
|
+
:title => "<C>Descriptions", # centered
|
43
|
+
:items => descriptions.first,
|
44
|
+
:highlight => RNDK::Color[:cyan]
|
45
|
+
})
|
46
|
+
|
47
|
+
# Here we define what will happen after we scroll the
|
48
|
+
# first list.
|
49
|
+
# `Scroll#after_processing` makes a block of code
|
50
|
+
# execute right after we process the user input.
|
51
|
+
#
|
52
|
+
# On this case, we're showing the description of the
|
53
|
+
# current item.
|
54
|
+
|
55
|
+
scroll_1.bind_signal(:after_scrolling) do |current|
|
56
|
+
|
57
|
+
desc = descriptions[current]
|
58
|
+
scroll_2.set_items(desc, false) # numbering=false
|
59
|
+
screen.refresh
|
60
|
+
end
|
61
|
+
|
62
|
+
# Simple label to tell the user how to quit the example
|
63
|
+
msg = "</77>Press F10 to quit"
|
64
|
+
label = RNDK::Label.new(screen, {
|
65
|
+
:x => RNDK::CENTER,
|
66
|
+
:y => RNDK::TOP,
|
67
|
+
:text => msg
|
68
|
+
})
|
69
|
+
|
70
|
+
# Finally, activating the widgets and setting them
|
71
|
+
# up for traversal.
|
72
|
+
#
|
73
|
+
# By traversal we mean that we'll be able to jump
|
74
|
+
# from one widget to another with TAB and Shitf+TAB
|
75
|
+
#
|
76
|
+
# The default key to exit traversal is F10
|
77
|
+
|
78
|
+
screen.refresh
|
79
|
+
RNDK::Traverse.over screen
|
80
|
+
|
81
|
+
RNDK::Screen.finish
|
82
|
+
|
83
|
+
# Just in case something bad happens.
|
84
|
+
rescue Exception => e
|
85
|
+
RNDK::Screen.finish
|
86
|
+
puts e
|
87
|
+
puts e.inspect
|
88
|
+
puts e.backtrace
|
89
|
+
end
|
90
|
+
|
@@ -0,0 +1,165 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# All the widgets at once!
|
4
|
+
#
|
5
|
+
require 'rndk/calendar'
|
6
|
+
require 'rndk/label'
|
7
|
+
require 'rndk/entry'
|
8
|
+
require 'rndk/dialog'
|
9
|
+
require 'rndk/scale'
|
10
|
+
require 'rndk/graph'
|
11
|
+
require 'rndk/itemlist'
|
12
|
+
require 'rndk/radio'
|
13
|
+
require 'rndk/scroll'
|
14
|
+
require 'rndk/slider'
|
15
|
+
require 'rndk/viewer'
|
16
|
+
require 'rndk/button'
|
17
|
+
require 'rndk/buttonbox'
|
18
|
+
require 'rndk/alphalist'
|
19
|
+
|
20
|
+
begin
|
21
|
+
# All widgets will be attached to this
|
22
|
+
screen = RNDK::Screen.new
|
23
|
+
RNDK::Color.init
|
24
|
+
|
25
|
+
RNDK::Label.new(screen, :text => ["<C></66>Lots of Widgets",
|
26
|
+
"</75>tab: <!75>circle </75>F10: <!75>quit"])
|
27
|
+
|
28
|
+
RNDK::Calendar.new(screen, {
|
29
|
+
:box => true,
|
30
|
+
:y => 4,
|
31
|
+
:title => "</77>calendar"
|
32
|
+
})
|
33
|
+
|
34
|
+
RNDK::Entry.new(screen, {
|
35
|
+
:x => 24,
|
36
|
+
:field_width => -44,
|
37
|
+
:title => "</77>entry",
|
38
|
+
:label => "</75>type me something "
|
39
|
+
})
|
40
|
+
|
41
|
+
RNDK::Scale.new(screen, {
|
42
|
+
:x => 24,
|
43
|
+
:y => 4,
|
44
|
+
:title => "</77>scale",
|
45
|
+
:label => "move me",
|
46
|
+
:field_width => 5
|
47
|
+
})
|
48
|
+
|
49
|
+
d = RNDK::Dialog.new(screen, {
|
50
|
+
:x => 24,
|
51
|
+
:y => 8,
|
52
|
+
:text => "</77>dialog",
|
53
|
+
:highlight => RNDK::Color[:cyan] | RNDK::Color[:reverse],
|
54
|
+
:buttons => ["Press me", "No, press me!"]
|
55
|
+
})
|
56
|
+
|
57
|
+
# A sample on how easy it is to customize stuff
|
58
|
+
d.bind_signal(:before_pressing) do |button|
|
59
|
+
message = ["Will press button no #{button}",
|
60
|
+
"Are you sure?"]
|
61
|
+
buttons = ["Yes", "No"]
|
62
|
+
|
63
|
+
choice = screen.popup_dialog(message, buttons)
|
64
|
+
|
65
|
+
# When we return false, we stop pressing the button.
|
66
|
+
false if choice == 1
|
67
|
+
end
|
68
|
+
|
69
|
+
d.bind_signal(:after_pressing) do |button|
|
70
|
+
screen.popup_label "Pressed button no #{button}"
|
71
|
+
end
|
72
|
+
|
73
|
+
RNDK::Graph.new(screen, {
|
74
|
+
:x => 26,
|
75
|
+
:y => 13,
|
76
|
+
:width => 20,
|
77
|
+
:height => 10
|
78
|
+
}).set_values([1, 2, 3, 4, 5, 2, 10, 7], true)
|
79
|
+
|
80
|
+
|
81
|
+
RNDK::Itemlist.new(screen, {
|
82
|
+
:x => 39,
|
83
|
+
:y => 4,
|
84
|
+
:title => "</77>itemlist",
|
85
|
+
:label => "up, down: ",
|
86
|
+
:items => ["One", "Two", "Three", "Four"]
|
87
|
+
})
|
88
|
+
|
89
|
+
RNDK::Radio.new(screen, {
|
90
|
+
:x => 58,
|
91
|
+
:y => 4,
|
92
|
+
:title => "</77>radio",
|
93
|
+
:width => 20,
|
94
|
+
:height => 8,
|
95
|
+
:items => ["Item1", "Item2", "Item3"]
|
96
|
+
})
|
97
|
+
|
98
|
+
RNDK::Scroll.new(screen, {
|
99
|
+
:x => 58,
|
100
|
+
:y => 12,
|
101
|
+
:title => "</77>scroll",
|
102
|
+
:width => 30,
|
103
|
+
:height => 10,
|
104
|
+
:items => (100..120).to_a
|
105
|
+
})
|
106
|
+
|
107
|
+
RNDK::Slider.new(screen, {
|
108
|
+
:x => 58,
|
109
|
+
:y => 22,
|
110
|
+
:start => 50,
|
111
|
+
:filler => ' '.ord | RNDK::Color[:cyan] | RNDK::Color[:reverse],
|
112
|
+
:title => "</77>slider",
|
113
|
+
:field_width => -58
|
114
|
+
})
|
115
|
+
|
116
|
+
RNDK::Viewer.new(screen, {
|
117
|
+
:x => 0,
|
118
|
+
:y => 16,
|
119
|
+
:title => "</77>viewer",
|
120
|
+
:buttons => ["one", "two", "three"],
|
121
|
+
:width => 24,
|
122
|
+
:height => 15
|
123
|
+
}).set_items(`ls -l`.lines, false)
|
124
|
+
|
125
|
+
RNDK::Button.new(screen, {
|
126
|
+
:x => 50,
|
127
|
+
:y => 8,
|
128
|
+
:label => "</77>button",
|
129
|
+
}).bind_signal(:pressed) { screen.popup_label "Button pressed" }
|
130
|
+
|
131
|
+
RNDK::Alphalist.new(screen, {
|
132
|
+
:x => 58,
|
133
|
+
:y => 26,
|
134
|
+
:width => 40,
|
135
|
+
:height => 10,
|
136
|
+
:title => "</77>Alphalist",
|
137
|
+
:label => "</75>Type first letters here ",
|
138
|
+
:items => ["Here", "we", "have", "lots",
|
139
|
+
"of", "words", "to", "show",
|
140
|
+
"how", "awesome", "this", "is"]
|
141
|
+
})
|
142
|
+
|
143
|
+
RNDK::Buttonbox.new(screen, {
|
144
|
+
:x => 84,
|
145
|
+
:y => 4,
|
146
|
+
:width => 14,
|
147
|
+
:height => 5,
|
148
|
+
:title => "</77>buttonbox",
|
149
|
+
:buttons => ["one", "two", "three", "four"],
|
150
|
+
:button_rows => 2,
|
151
|
+
:button_cols => 2,
|
152
|
+
:highlight => RNDK::Color[:blue] | RNDK::Color[:reverse]
|
153
|
+
})
|
154
|
+
|
155
|
+
screen.refresh
|
156
|
+
RNDK::Traverse.over screen
|
157
|
+
RNDK::Screen.finish
|
158
|
+
|
159
|
+
# Just in case something goes wrong.
|
160
|
+
rescue Exception => e
|
161
|
+
RNDK::Screen.finish
|
162
|
+
puts e
|
163
|
+
puts e.backtrace
|
164
|
+
end
|
165
|
+
|
data/examples/calendar.rb
CHANGED
@@ -10,26 +10,24 @@ require 'rndk/calendar'
|
|
10
10
|
|
11
11
|
begin
|
12
12
|
# Start RNDK and Colors
|
13
|
-
|
13
|
+
screen = RNDK::Screen.new
|
14
14
|
RNDK::Color.init
|
15
15
|
|
16
16
|
title = "<C></U>RNDK Calendar Widget\n<C>Demo"
|
17
17
|
|
18
18
|
# Declare the calendar widget.
|
19
|
-
calendar = RNDK::Calendar.new(
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
true,
|
29
|
-
false)
|
19
|
+
calendar = RNDK::Calendar.new(screen, {
|
20
|
+
:x => RNDK::CENTER,
|
21
|
+
:y => RNDK::CENTER,
|
22
|
+
:title => title,
|
23
|
+
:day_color => RNDK::Color[:red_black] | RNDK::Color[:bold],
|
24
|
+
:month_color => RNDK::Color[:green_black] | RNDK::Color[:bold],
|
25
|
+
:yeah_color => RNDK::Color[:yellow_black] | RNDK::Color[:bold],
|
26
|
+
:highlight => RNDK::Color[:blue_black] | RNDK::Color[:reverse],
|
27
|
+
})
|
30
28
|
|
31
29
|
if calendar.nil?
|
32
|
-
RNDK::Screen.
|
30
|
+
RNDK::Screen.finish
|
33
31
|
|
34
32
|
puts 'Cannot create the calendar. Is the window too small?'
|
35
33
|
exit 1
|
@@ -37,36 +35,26 @@ begin
|
|
37
35
|
|
38
36
|
# Here we define the functions that will be
|
39
37
|
# executed when the user presses a key.
|
40
|
-
#
|
41
|
-
# They must be lambdas.
|
38
|
+
# Also, binding the keys to actions.
|
42
39
|
|
43
40
|
# This adds a marker ot the calendar.
|
44
|
-
|
45
|
-
calendar.
|
41
|
+
calendar.bind_key('m') do |widget_type, calendar, client_data, key|
|
42
|
+
calendar.set_marker(calendar.day, calendar.month, calendar.year)
|
46
43
|
calendar.draw(calendar.box)
|
47
44
|
return false
|
48
45
|
end
|
49
46
|
|
50
47
|
# This removes a marker from the calendar.
|
51
|
-
|
48
|
+
calendar.bind_key('r') do |widget_type, calendar, client_data, key|
|
52
49
|
calendar.removeMarker(calendar.day, calendar.month, calendar.year)
|
53
50
|
calendar.draw(calendar.box)
|
54
51
|
return false
|
55
52
|
end
|
56
53
|
|
57
|
-
# Here we bind the keys to the actions.
|
58
|
-
#
|
59
|
-
# They must be lambdas.
|
60
|
-
|
61
|
-
calendar.bind(:calendar, 'm', create_calendar_mark, calendar)
|
62
|
-
calendar.bind(:calendar, 'M', create_calendar_mark, calendar)
|
63
|
-
calendar.bind(:calendar, 'r', remove_calendar_mark, calendar)
|
64
|
-
calendar.bind(:calendar, 'R', remove_calendar_mark, calendar)
|
65
|
-
|
66
54
|
calendar.week_base = 0
|
67
55
|
|
68
56
|
# Let the user play with the widget.
|
69
|
-
ret_val = calendar.activate
|
57
|
+
ret_val = calendar.activate
|
70
58
|
|
71
59
|
# Check which day they selected.
|
72
60
|
if calendar.exit_type == :ESCAPE_HIT
|
@@ -75,7 +63,7 @@ begin
|
|
75
63
|
'',
|
76
64
|
'<C>Press any key to continue.'
|
77
65
|
]
|
78
|
-
|
66
|
+
screen.popup_label mesg
|
79
67
|
|
80
68
|
elsif calendar.exit_type == :NORMAL
|
81
69
|
mesg = [
|
@@ -84,17 +72,17 @@ begin
|
|
84
72
|
calendar.day, calendar.month, calendar.year],
|
85
73
|
'<C>Press any key to continue.'
|
86
74
|
]
|
87
|
-
|
75
|
+
screen.popup_label mesg
|
88
76
|
end
|
89
77
|
|
90
78
|
# Finishing up and printing message
|
91
|
-
RNDK::Screen.
|
79
|
+
RNDK::Screen.finish
|
92
80
|
|
93
81
|
puts 'Selected Time: %s' % ret_val.ctime unless ret_val.nil?
|
94
82
|
|
95
83
|
# Just in case something bad happens.
|
96
84
|
rescue Exception => e
|
97
|
-
RNDK::Screen.
|
85
|
+
RNDK::Screen.finish
|
98
86
|
|
99
87
|
puts e
|
100
88
|
puts e.inspect
|
data/examples/entry.rb
CHANGED
@@ -8,7 +8,7 @@ require 'rndk/entry'
|
|
8
8
|
|
9
9
|
begin
|
10
10
|
# Startup RNDK and Colors
|
11
|
-
|
11
|
+
screen = RNDK::Screen.new
|
12
12
|
RNDK::Color.init
|
13
13
|
|
14
14
|
# Watch out for that markup
|
@@ -17,30 +17,25 @@ begin
|
|
17
17
|
label = "</U/5>Oh yeah<!U!5>:"
|
18
18
|
|
19
19
|
# Create the entry field widget.
|
20
|
-
entry = RNDK::Entry.new(
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
0,
|
30
|
-
256,
|
31
|
-
true,
|
32
|
-
false)
|
33
|
-
|
20
|
+
entry = RNDK::Entry.new(screen, {
|
21
|
+
:x => RNDK::CENTER,
|
22
|
+
:y => RNDK::CENTER,
|
23
|
+
:title => title,
|
24
|
+
:label => label,
|
25
|
+
:field_width => 40,
|
26
|
+
:min => 0,
|
27
|
+
:max => 256
|
28
|
+
})
|
34
29
|
# Is the widget nil?
|
35
30
|
if entry.nil?
|
36
|
-
RNDK::Screen.
|
31
|
+
RNDK::Screen.finish
|
37
32
|
|
38
33
|
puts "Cannot create the entry box. Is the window too small?"
|
39
34
|
exit 1
|
40
35
|
end
|
41
36
|
|
42
37
|
# Draw the screen.
|
43
|
-
|
38
|
+
screen.refresh
|
44
39
|
|
45
40
|
# Activate the entry field.
|
46
41
|
info = entry.activate
|
@@ -59,14 +54,14 @@ begin
|
|
59
54
|
end
|
60
55
|
|
61
56
|
# Quick widget - see example 'quick-widgets.rb' for details
|
62
|
-
|
57
|
+
screen.popup_label mesg
|
63
58
|
|
64
59
|
# Quitting
|
65
|
-
RNDK::Screen.
|
60
|
+
RNDK::Screen.finish
|
66
61
|
|
67
62
|
# Just in case something bad happens.
|
68
63
|
rescue Exception => e
|
69
|
-
RNDK::Screen.
|
64
|
+
RNDK::Screen.finish
|
70
65
|
|
71
66
|
puts e
|
72
67
|
puts e.inspect
|
data/examples/label.rb
CHANGED
@@ -6,7 +6,7 @@ require 'rndk/label'
|
|
6
6
|
|
7
7
|
begin
|
8
8
|
# Starting things up
|
9
|
-
|
9
|
+
screen = RNDK::Screen.new
|
10
10
|
RNDK::Color.init
|
11
11
|
|
12
12
|
# Set the labels with some nice markup
|
@@ -17,15 +17,15 @@ begin
|
|
17
17
|
"<C>This line should be set to whatever the screen default is."
|
18
18
|
]
|
19
19
|
|
20
|
-
label = RNDK::Label.new(
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
20
|
+
label = RNDK::Label.new(screen, {
|
21
|
+
:x => RNDK::CENTER,
|
22
|
+
:y => RNDK::CENTER,
|
23
|
+
:text => mesg,
|
24
|
+
:shadow => true
|
25
|
+
})
|
26
26
|
|
27
27
|
if label.nil?
|
28
|
-
RNDK::Screen.
|
28
|
+
RNDK::Screen.finish
|
29
29
|
|
30
30
|
puts 'Cannot create the label. Is the window too small?'
|
31
31
|
exit 1
|
@@ -33,15 +33,15 @@ begin
|
|
33
33
|
|
34
34
|
# Draw the RNDK screen and waits for
|
35
35
|
# space to be pressed.
|
36
|
-
|
36
|
+
screen.refresh
|
37
37
|
label.wait(' ')
|
38
38
|
|
39
39
|
# Clean up
|
40
|
-
RNDK::Screen.
|
40
|
+
RNDK::Screen.finish
|
41
41
|
|
42
42
|
# Just in case something bad happens.
|
43
43
|
rescue Exception => e
|
44
|
-
RNDK::Screen.
|
44
|
+
RNDK::Screen.finish
|
45
45
|
|
46
46
|
puts e
|
47
47
|
puts e.inspect
|