rndk 0.2.0 → 1.0.0

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