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.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +13 -4
  3. data/TODO +21 -1
  4. data/demos/appointment.rb +279 -299
  5. data/demos/clock.rb +13 -8
  6. data/demos/rss-reader.rb +84 -0
  7. data/examples/01-hello-world.rb +13 -11
  8. data/examples/02-colors.rb +14 -21
  9. data/examples/03-markup.rb +7 -7
  10. data/examples/04-quick-widgets.rb +2 -2
  11. data/examples/05-position-widget.rb +50 -31
  12. data/examples/06-callbacks.rb +77 -0
  13. data/examples/07-traverse.rb +90 -0
  14. data/examples/10-all-widgets.rb +165 -0
  15. data/examples/calendar.rb +20 -32
  16. data/examples/entry.rb +15 -20
  17. data/examples/label.rb +11 -11
  18. data/examples/scroll.rb +16 -60
  19. data/examples/slider.rb +18 -19
  20. data/examples/viewer.rb +65 -0
  21. data/lib/rndk.rb +28 -7
  22. data/lib/rndk/alphalist.rb +309 -313
  23. data/lib/rndk/button.rb +239 -157
  24. data/lib/rndk/buttonbox.rb +136 -103
  25. data/lib/rndk/calendar.rb +246 -203
  26. data/lib/rndk/core/color.rb +63 -13
  27. data/lib/rndk/core/display.rb +1 -1
  28. data/lib/rndk/core/draw.rb +11 -11
  29. data/lib/rndk/core/markup.rb +21 -21
  30. data/lib/rndk/core/quick_widgets.rb +75 -96
  31. data/lib/rndk/core/screen.rb +145 -102
  32. data/lib/rndk/core/traverse.rb +150 -136
  33. data/lib/rndk/core/utils.rb +5 -6
  34. data/lib/rndk/core/widget.rb +207 -191
  35. data/lib/rndk/core/widget_bind.rb +108 -0
  36. data/lib/rndk/dialog.rb +88 -56
  37. data/lib/rndk/entry.rb +79 -64
  38. data/lib/rndk/fscale.rb +38 -20
  39. data/lib/rndk/fslider.rb +38 -23
  40. data/lib/rndk/graph.rb +92 -53
  41. data/lib/rndk/itemlist.rb +80 -62
  42. data/lib/rndk/label.rb +111 -77
  43. data/lib/rndk/radio.rb +138 -128
  44. data/lib/rndk/scale.rb +123 -122
  45. data/lib/rndk/scroll.rb +444 -391
  46. data/lib/rndk/scroller.rb +21 -21
  47. data/lib/rndk/slider.rb +149 -140
  48. data/lib/rndk/template.rb +74 -61
  49. data/lib/rndk/version.rb +1 -1
  50. data/lib/rndk/viewer.rb +499 -298
  51. metadata +8 -14
  52. data/demos/fileview.rb +0 -141
  53. data/lib/rndk/dscale.rb +0 -13
  54. data/lib/rndk/fselect.rb +0 -938
  55. data/lib/rndk/histogram.rb +0 -412
  56. data/lib/rndk/marquee.rb +0 -244
  57. data/lib/rndk/matrix.rb +0 -1189
  58. data/lib/rndk/mentry.rb +0 -619
  59. data/lib/rndk/menu.rb +0 -478
  60. data/lib/rndk/selection.rb +0 -630
  61. data/lib/rndk/swindow.rb +0 -766
  62. data/lib/rndk/uscale.rb +0 -14
  63. 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
+
@@ -10,26 +10,24 @@ require 'rndk/calendar'
10
10
 
11
11
  begin
12
12
  # Start RNDK and Colors
13
- rndkscreen = RNDK::Screen.new
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(rndkscreen,
20
- RNDK::CENTER, # x
21
- RNDK::CENTER, # y
22
- title,
23
- 0, 0, 0, # current date
24
- RNDK::Color[:red_black] | Ncurses::A_BOLD,
25
- RNDK::Color[:green_black] | Ncurses::A_BOLD,
26
- RNDK::Color[:yellow_black] | Ncurses::A_BOLD,
27
- RNDK::Color[:blue_black] | Ncurses::A_REVERSE,
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.end_rndk
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
- create_calendar_mark = lambda do |object_type, calendar, client_data, key|
45
- calendar.setMarker(calendar.day, calendar.month, calendar.year)
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
- remove_calendar_mark = lambda do |object_type, calendar, client_data, key|
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
- rndkscreen.popup_label mesg
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
- rndkscreen.popup_label mesg
75
+ screen.popup_label mesg
88
76
  end
89
77
 
90
78
  # Finishing up and printing message
91
- RNDK::Screen.end_rndk
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.end_rndk
85
+ RNDK::Screen.finish
98
86
 
99
87
  puts e
100
88
  puts e.inspect
@@ -8,7 +8,7 @@ require 'rndk/entry'
8
8
 
9
9
  begin
10
10
  # Startup RNDK and Colors
11
- rndkscreen = RNDK::Screen.new
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(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
-
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.end_rndk
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
- rndkscreen.refresh
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
- rndkscreen.popup_label mesg
57
+ screen.popup_label mesg
63
58
 
64
59
  # Quitting
65
- RNDK::Screen.end_rndk
60
+ RNDK::Screen.finish
66
61
 
67
62
  # Just in case something bad happens.
68
63
  rescue Exception => e
69
- RNDK::Screen.end_rndk
64
+ RNDK::Screen.finish
70
65
 
71
66
  puts e
72
67
  puts e.inspect
@@ -6,7 +6,7 @@ require 'rndk/label'
6
6
 
7
7
  begin
8
8
  # Starting things up
9
- rndkscreen = RNDK::Screen.new
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(rndkscreen,
21
- RNDK::CENTER,
22
- RNDK::CENTER,
23
- mesg,
24
- true,
25
- true)
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.end_rndk
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
- rndkscreen.refresh
36
+ screen.refresh
37
37
  label.wait(' ')
38
38
 
39
39
  # Clean up
40
- RNDK::Screen.end_rndk
40
+ RNDK::Screen.finish
41
41
 
42
42
  # Just in case something bad happens.
43
43
  rescue Exception => e
44
- RNDK::Screen.end_rndk
44
+ RNDK::Screen.finish
45
45
 
46
46
  puts e
47
47
  puts e.inspect