rndk 0.2.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|