rbcurse 1.5.0 → 1.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. data/Makefile +21 -0
  2. data/Manifest.txt +6 -0
  3. data/README.markdown +6 -4
  4. data/TODO +372 -0
  5. data/TODO2.txt +121 -0
  6. data/VERSION +1 -1
  7. data/examples/README.txt +67 -0
  8. data/examples/abasiclist.rb +33 -0
  9. data/examples/alpmenu.rb +42 -0
  10. data/examples/app.rb +859 -0
  11. data/examples/app.sample +17 -0
  12. data/examples/appdirtree.rb +74 -0
  13. data/examples/appemail.rb +191 -0
  14. data/examples/appemaillb.rb +308 -0
  15. data/examples/appgcompose.rb +315 -0
  16. data/examples/atree.rb +64 -0
  17. data/examples/common/file.rb +40 -0
  18. data/examples/common/rmail.rb +257 -0
  19. data/examples/data.txt +683 -0
  20. data/examples/data/README.markdown +9 -0
  21. data/examples/data/brew.txt +38 -0
  22. data/examples/data/color.2 +37 -0
  23. data/examples/data/gemlist.txt +60 -0
  24. data/examples/data/lotr.txt +12 -0
  25. data/examples/data/ports.txt +136 -0
  26. data/examples/data/tasks.txt +27 -0
  27. data/examples/data/todocsv.csv +28 -0
  28. data/examples/data/unix1.txt +21 -0
  29. data/examples/data/unix2.txt +11 -0
  30. data/examples/dbdemo.rb +495 -0
  31. data/examples/deprecated/appgmail.rb +952 -0
  32. data/examples/deprecated/splitp.rb +56 -0
  33. data/examples/deprecated/testscrolllb.rb +86 -0
  34. data/examples/deprecated/testscrollp.rb +88 -0
  35. data/examples/deprecated/testscrollta.rb +80 -0
  36. data/examples/deprecated/testscrolltable.rb +165 -0
  37. data/examples/deprecated/testsplit.rb +87 -0
  38. data/examples/deprecated/testsplit2.rb +123 -0
  39. data/examples/deprecated/testsplit3.rb +215 -0
  40. data/examples/deprecated/testsplit3_1.rb +244 -0
  41. data/examples/deprecated/testsplit3a.rb +215 -0
  42. data/examples/deprecated/testsplit3b.rb +237 -0
  43. data/examples/deprecated/testsplitta.rb +148 -0
  44. data/examples/deprecated/testsplittv.rb +142 -0
  45. data/examples/deprecated/testsplittvv.rb +144 -0
  46. data/examples/deprecated/testtpane.rb +215 -0
  47. data/examples/deprecated/testtpane2.rb +145 -0
  48. data/examples/deprecated/testtpanetable.rb +203 -0
  49. data/examples/dirtree.rb +88 -0
  50. data/examples/experimental/resultsetdemo.rb +280 -0
  51. data/examples/experimental/testmform.rb +35 -0
  52. data/examples/experimental/testscroller.rb +117 -0
  53. data/examples/experimental/teststackflow.rb +111 -0
  54. data/examples/menu1.rb +112 -0
  55. data/examples/multispl.rb +86 -0
  56. data/examples/newmessagebox.rb +131 -0
  57. data/examples/newtabbedwindow.rb +100 -0
  58. data/examples/newtesttabp.rb +121 -0
  59. data/examples/qdfilechooser.rb +68 -0
  60. data/examples/rfe.rb +1239 -0
  61. data/examples/rfe_renderer.rb +121 -0
  62. data/examples/sqlc.rb +454 -0
  63. data/examples/sqlm.rb +437 -0
  64. data/examples/sqlt.rb +408 -0
  65. data/examples/status.txt +68 -0
  66. data/examples/table1.rb +24 -0
  67. data/examples/term2.rb +84 -0
  68. data/examples/test1.rb +239 -0
  69. data/examples/test2.rb +674 -0
  70. data/examples/testapp.rb +44 -0
  71. data/examples/testapp2.rb +58 -0
  72. data/examples/testchars.rb +137 -0
  73. data/examples/testcombo.rb +91 -0
  74. data/examples/testkeypress.rb +66 -0
  75. data/examples/testlistbox.rb +113 -0
  76. data/examples/testmenu.rb +101 -0
  77. data/examples/testmulticomp.rb +70 -0
  78. data/examples/testmulticontainer.rb +94 -0
  79. data/examples/testmultispl.rb +199 -0
  80. data/examples/testree.rb +106 -0
  81. data/examples/testtable.rb +264 -0
  82. data/examples/testtabp.rb +107 -0
  83. data/examples/testtodo.rb +584 -0
  84. data/examples/testvimsplit.rb +112 -0
  85. data/examples/testwsshortcuts.rb +64 -0
  86. data/examples/testwsshortcuts2.rb +126 -0
  87. data/examples/todo.db +0 -0
  88. data/examples/todo.yml +191 -0
  89. data/examples/viewtodo.rb +574 -0
  90. data/lib/rbcurse/deprecated/README.markdown +12 -0
  91. data/lib/rbcurse/deprecated/rpad.rb +375 -0
  92. data/lib/rbcurse/deprecated/rscrollpane.rb +512 -0
  93. data/lib/rbcurse/deprecated/rsplitpane.rb +894 -0
  94. data/lib/rbcurse/deprecated/rsplitpane2.rb +1009 -0
  95. data/lib/rbcurse/deprecated/rviewport.rb +204 -0
  96. data/lib/rbcurse/deprecated/widgets/mapper.rb +130 -0
  97. data/lib/rbcurse/deprecated/widgets/rmessagebox.rb +348 -0
  98. data/lib/rbcurse/deprecated/widgets/rtabbedpane.rb +1158 -0
  99. data/lib/rbcurse/deprecated/widgets/rtabbedwindow.rb +167 -0
  100. data/lib/rbcurse/deprecated/widgets/scrollable.rb +301 -0
  101. data/lib/rbcurse/deprecated/widgets/stdscrwindow.rb +309 -0
  102. data/lib/ver/keyboard2.rb +170 -0
  103. data/test/test_rbcurse.rb +0 -0
  104. metadata +131 -9
@@ -0,0 +1,215 @@
1
+ #$LOAD_PATH << "/Users/rahul/work/projects/rbcurse/"
2
+ #*******************************************************#
3
+ # testsplit3a.rb #
4
+ # written by Rahul Kumar #
5
+ # January 16, 2010 #
6
+ # #
7
+ # Test textview, split and textarea inside splitpane #
8
+ # This wraps a textview inside a scrollpane, and #
9
+ # puts the SCRP inside a SPLP #
10
+ #
11
+ # /----+---------------\
12
+ # | V| V|
13
+ # | 1 V| V|
14
+ # | >>V| V|
15
+ # +----+ 3 V|
16
+ # | V| V|
17
+ # | 2 V| V|
18
+ # |>>>V|>>>>>> |
19
+ # \----+---------------/
20
+ #
21
+ #
22
+ #
23
+ # Released under ruby license. See #
24
+ # http://www.ruby-lang.org/en/LICENSE.txt #
25
+ # Copyright 2010, Rahul Kumar #
26
+ #*******************************************************#
27
+ require 'rubygems'
28
+ #require 'ncurses' # FFI
29
+ require 'logger'
30
+ require 'rbcurse'
31
+ require 'rbcurse/rsplitpane'
32
+ require 'rbcurse/rscrollpane'
33
+ require 'rbcurse/core/widgets/rtextarea'
34
+ require 'rbcurse/core/widgets/rtextview'
35
+ require 'rbcurse/extras/widgets/rlistbox'
36
+ if $0 == __FILE__
37
+ include RubyCurses
38
+ include RubyCurses::Utils
39
+
40
+ begin
41
+ # Initialize curses
42
+ VER::start_ncurses # this is initializing colors via ColorMap.setup
43
+ $log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"rbc13.log")))
44
+ $log.level = Logger::DEBUG
45
+
46
+ @window = VER::Window.root_window
47
+
48
+ catch(:close) do
49
+ colors = Ncurses.COLORS
50
+ @form = Form.new @window
51
+ $log.debug " MAIN FORM #{@form} "
52
+ r = 1; c = 3; ht = 18; w = 70
53
+ r = 3; c = 7; ht = 24; w = 100
54
+
55
+
56
+ @help = "F1 to quit. To resize split: M-, M+, M=. TAB, M-w, M-n, M-p, M-l, M-h, C-n/p : #{$0}"
57
+ RubyCurses::Label.new @form, {'text' => @help, "row" => ht+r, "col" => 2, "color" => "yellow"}
58
+
59
+ outer = SplitPane.new @form do
60
+ name "mainpane"
61
+ row r
62
+ col c
63
+ width w
64
+ height ht
65
+ orientation :VERTICAL_SPLIT
66
+ end
67
+ # note that splitleft has no form. so focus has to be managed XXX
68
+ splitleft = SplitPane.new nil do
69
+ name "splitleft-outer"
70
+
71
+ #width w/3 # 30
72
+ #height ht-0 #/2-1
73
+
74
+ orientation :HORIZONTAL_SPLIT
75
+ border_color $promptcolor
76
+ border_attrib Ncurses::A_NORMAL
77
+ end
78
+ taoutrt = TextArea.new nil do
79
+ name "myTextArea-outrt"
80
+ #row 0
81
+ #col 0
82
+ width w # this is ofcourse large, full width
83
+ #height (ht/2)-1
84
+ height ht
85
+ title "README.md"
86
+ title_attrib 'bold'
87
+ print_footer true
88
+ footer_attrib 'bold'
89
+ end
90
+ # taoutrt.show_caret=true
91
+
92
+ tvleft1 = TextView.new nil do
93
+ name "myviewleft1"
94
+ #row 0
95
+ #col 0
96
+ #width w-2
97
+ height ht
98
+ #height (ht/2)-1
99
+ width w/2-1
100
+ title "README.md"
101
+ title_attrib 'bold'
102
+ print_footer true
103
+ footer_attrib 'bold'
104
+ end
105
+ tvleft1.show_caret=true
106
+ content = File.open("../README.markdown","r").readlines
107
+ tvleft1.set_content content #, :WRAP_WORD
108
+
109
+ # to see lower border i need to set height to ht/2 -2 in both cases, but that
110
+ # crashes ruby when i reduce height by 1.
111
+ tvleft2 = TextView.new nil do
112
+ name "myviewleft2"
113
+ #row 0
114
+ #col 0
115
+ width w/2-1
116
+ #height ht
117
+ height (ht/2)-1
118
+ title "NOTES"
119
+ title_attrib 'bold'
120
+ print_footer true
121
+ footer_attrib 'bold'
122
+ end
123
+ tvleft2.show_caret=true
124
+ content = File.open("../NOTES","r").readlines
125
+ tvleft2.set_content content #, :WRAP_WORD
126
+
127
+ leftscroll1 = ScrollPane.new nil do
128
+ name "myScrollLeftTop"
129
+ end
130
+ leftscroll2 = ScrollPane.new nil do
131
+ name "myScrollLeftBot"
132
+ end
133
+ scroutrt = ScrollPane.new nil do
134
+ name "myScroll3-outer-right"
135
+ #width 46
136
+ end
137
+ leftscroll1.cascade_changes = true
138
+ leftscroll2.cascade_changes = true
139
+ #leftscroll1.preferred_width w/2 #/2 ## should pertain more to horizontal orientation
140
+ leftscroll1.preferred_height((ht/2)-4) ## this messes things up when we change orientation
141
+ # the outer compo needs child set first else cursor does not reach up from
142
+ # lower levels. Is the connection broken ?
143
+ outer.first_component(splitleft)
144
+ outer.second_component(scroutrt)
145
+ #leftscroll2.preferred_height ht/2-2
146
+ scroutrt.child(taoutrt)
147
+ splitleft.first_component(leftscroll1)
148
+ leftscroll1.child(tvleft1)
149
+ splitleft.second_component(leftscroll2)
150
+ leftscroll2.child(tvleft2)
151
+ #tvleft1.preferred_width w/2 #/2 ## should pertain more to horizontal orientation
152
+ #tvleft1.preferred_height (ht/2)-1 ## this messes things up when we change orientation
153
+ #tvleft1.set_resize_weight 0.50
154
+ ret = splitleft.reset_to_preferred_sizes
155
+ splitleft.set_resize_weight(0.50) if ret == :ERROR
156
+
157
+ splitleft.preferred_width w/2 #w/3
158
+ splitleft.preferred_height ht/2-2
159
+ #splitleft.set_resize_weight 0.50
160
+ #taoutrt.min_width 10
161
+ #taoutrt.min_height 5
162
+ #splitleft.min_width 12
163
+ #splitleft.min_height 6
164
+ ret = outer.reset_to_preferred_sizes
165
+ outer.set_resize_weight(0.50) if ret == :ERROR
166
+
167
+ File.open("../README.markdown","r") do |file|
168
+ while (line = file.gets)
169
+ taoutrt << line.chomp
170
+ end
171
+ end
172
+
173
+ @form.repaint
174
+ @window.wrefresh
175
+ Ncurses::Panel.update_panels
176
+ while((ch = @window.getchar()) != KEY_F1 )
177
+ str = keycode_tos ch
178
+ case ch
179
+ #when ?v.getbyte(0)
180
+ #$log.debug " ORIENTATION VERTICAL"
181
+ #outer.orientation(:VERTICAL_SPLIT)
182
+ #outer.reset_to_preferred_sizes
183
+ #when ?h.getbyte(0)
184
+ #$log.debug " ORIENTATION HORIZ"
185
+ #outer.orientation(:HORIZONTAL_SPLIT)
186
+ #outer.reset_to_preferred_sizes
187
+ when ?-.getbyte(0)
188
+ $log.debug " KEY PRESS -"
189
+ outer.set_divider_location(outer.divider_location-1)
190
+ when ?+.getbyte(0)
191
+ $log.debug " KEY PRESS +"
192
+ outer.set_divider_location(outer.divider_location+1)
193
+ when ?=.getbyte(0)
194
+ $log.debug " KEY PRESS ="
195
+ outer.set_resize_weight(0.50)
196
+ end
197
+ #outer.get_buffer().wclear
198
+ #outer << "#{ch} got (#{str})"
199
+ # outer.repaint
200
+ # outer.buffer_to_screen
201
+ @form.repaint
202
+ @form.handle_key(ch)
203
+ @window.wrefresh
204
+ end
205
+ end
206
+ rescue => ex
207
+ ensure
208
+ @window.destroy if !@window.nil?
209
+ VER::stop_ncurses
210
+ p ex if ex
211
+ p(ex.backtrace.join("\n")) if ex
212
+ $log.debug( ex) if ex
213
+ $log.debug(ex.backtrace.join("\n")) if ex
214
+ end
215
+ end
@@ -0,0 +1,237 @@
1
+ #$LOAD_PATH << "/Users/rahul/work/projects/rbcurse/"
2
+ #*******************************************************#
3
+ # testsplit3b.rb #
4
+ # written by Rahul Kumar #
5
+ # January 17, 2010 #
6
+ # #
7
+ # Test textview, split and textarea inside splitpane #
8
+ # This wraps a textview inside a scrollpane, and #
9
+ # puts the SCRP inside a SPLP #
10
+ # Adds a listbox to the menagerie of objects. #
11
+ #
12
+ # /----+---------------\
13
+ # | V| V|
14
+ # | 1 V| V|
15
+ # | >>V| V|
16
+ # +----+ 3 V|
17
+ # | V| V|
18
+ # | 2 V| V|
19
+ # |>>>V|>>>>>> |
20
+ # \----+---------------/
21
+ #
22
+ #
23
+ #
24
+ # Released under ruby license. See #
25
+ # http://www.ruby-lang.org/en/LICENSE.txt #
26
+ # Copyright 2010, Rahul Kumar #
27
+ #*******************************************************#
28
+ require 'rubygems'
29
+ #require 'ncurses' # FFI
30
+ require 'logger'
31
+ require 'rbcurse'
32
+ require 'rbcurse/rsplitpane'
33
+ require 'rbcurse/rscrollpane'
34
+ require 'rbcurse/core/widgets/rtextarea'
35
+ require 'rbcurse/core/widgets/rtextview'
36
+ require 'rbcurse/extras/widgets/rlistbox'
37
+ if $0 == __FILE__
38
+ include RubyCurses
39
+ include RubyCurses::Utils
40
+
41
+ begin
42
+ # Initialize curses
43
+ VER::start_ncurses # this is initializing colors via ColorMap.setup
44
+ $log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"rbc13.log")))
45
+ $log.level = Logger::DEBUG
46
+ show_caret_flag = false #true
47
+
48
+ @window = VER::Window.root_window
49
+
50
+ catch(:close) do
51
+ colors = Ncurses.COLORS
52
+ @form = Form.new @window
53
+ $log.debug " MAIN FORM #{@form} "
54
+ r = 1; c = 3; ht = 18; w = 70
55
+ r = 3; c = 7; ht = 24; w = 100
56
+
57
+
58
+ @help = "F1 to quit. To resize split: M-, M+, M=. TAB, M-w, M-n, M-p, M-l, M-h, C-n/p : #{$0}"
59
+ RubyCurses::Label.new @form, {'text' => @help, "row" => ht+r, "col" => 2, "color" => "yellow"}
60
+
61
+ outer = SplitPane.new @form do
62
+ name "mainpane"
63
+ row r
64
+ col c
65
+ width w
66
+ height ht
67
+ orientation :VERTICAL_SPLIT
68
+ end
69
+ # note that splitleft has no form. so focus has to be managed XXX
70
+ splitleft = SplitPane.new nil do
71
+ name "splitleft"
72
+
73
+ #width w/3 # 30
74
+ #height ht-0 #/2-1
75
+
76
+ orientation :HORIZONTAL_SPLIT
77
+ border_color $promptcolor
78
+ border_attrib Ncurses::A_NORMAL
79
+ end
80
+ ta1 = TextArea.new nil do
81
+ name "myTextArea"
82
+ #row 0
83
+ #col 0
84
+ width w # this is ofcourse large, full width
85
+ #height (ht/2)-1
86
+ height ht
87
+ title "README.md"
88
+ title_attrib 'bold'
89
+ print_footer true
90
+ footer_attrib 'bold'
91
+ end
92
+ ta1.show_caret = show_caret_flag
93
+
94
+ t1 = TextView.new nil do
95
+ name "myView"
96
+ #row 0
97
+ #col 0
98
+ #width w-2
99
+ height ht
100
+ #height (ht/2)-1
101
+ width w/2-1
102
+ title "README.md"
103
+ title_attrib 'bold'
104
+ print_footer true
105
+ footer_attrib 'bold'
106
+ end
107
+ t1.show_caret = show_caret_flag
108
+ content = File.open("../README.markdown","r").readlines
109
+ t1.set_content content #, :WRAP_WORD
110
+
111
+ mylist = []
112
+ 0.upto(50) { |v| mylist << "#{v} scrollable data" }
113
+ $listdata = Variable.new mylist
114
+ listb = Listbox.new nil do
115
+ name "mylist"
116
+ row 0
117
+ col 0
118
+ width w/2
119
+ height ht/2+5
120
+ list_variable $listdata
121
+ #selection_mode :SINGLE
122
+ show_selector true
123
+ row_selected_symbol "[X] "
124
+ row_unselected_symbol "[ ] "
125
+ title "A long list"
126
+ title_attrib 'reverse'
127
+ cell_editing_allowed true
128
+ end
129
+ ## The next 2 are not advised since they don't trigger events
130
+ #listb.insert 55, "hello ruby", "so long python", "farewell java", "RIP .Net"
131
+ #$listdata.value.insert 55, "hello ruby", "so long python", "farewell java", "RIP .Net"
132
+ listb.list_data_model.insert 25, "hello ruby", "so long python", "farewell java", "RIP .Net", "hi lisp", "hi cloJure", "git Go"
133
+ # to see lower border i need to set height to ht/2 -2 in both cases, but that
134
+ # crashes ruby when i reduce height by 1.
135
+ #t2 = TextView.new nil do
136
+ #name "myView2"
137
+ ##row 0
138
+ ##col 0
139
+ #width w/2-1
140
+ ##height ht
141
+ #height (ht/2)-1
142
+ #title "NOTES"
143
+ #title_attrib 'bold'
144
+ #print_footer true
145
+ #footer_attrib 'bold'
146
+ #end
147
+ #content = File.open("../NOTES","r").readlines
148
+ #t2.set_content content #, :WRAP_WORD
149
+
150
+ scroll1 = ScrollPane.new nil do
151
+ name "myScroll1"
152
+ end
153
+ scroll2 = ScrollPane.new nil do
154
+ name "myScroll2"
155
+ end
156
+ scroll3 = ScrollPane.new nil do
157
+ name "myScroll3"
158
+ #width 46
159
+ end
160
+ #scroll1.preferred_width w/2 #/2 ## should pertain more to horizontal orientation
161
+ scroll1.preferred_height ht/2-4 ## this messes things up when we change orientation
162
+ # the outer compo needs child set first else cursor does not reach up from
163
+ # lower levels. Is the connection broken ?
164
+ outer.first_component(splitleft)
165
+ outer.second_component(scroll3)
166
+ #scroll2.preferred_height ht/2-2
167
+ scroll3.child(ta1)
168
+ splitleft.first_component(scroll1)
169
+ scroll1.child(t1)
170
+ splitleft.second_component(scroll2)
171
+ scroll2.child(listb)
172
+ #scroll2.cascade_changes = true
173
+ #t1.preferred_width w/2 #/2 ## should pertain more to horizontal orientation
174
+ #t1.preferred_height (ht/2)-1 ## this messes things up when we change orientation
175
+ #t1.set_resize_weight 0.50
176
+ ret = splitleft.reset_to_preferred_sizes
177
+ splitleft.set_resize_weight(0.50) if ret == :ERROR
178
+
179
+ splitleft.preferred_width w/2 #w/3
180
+ splitleft.preferred_height ht/2-2
181
+ #splitleft.set_resize_weight 0.50
182
+ #ta1.min_width 10
183
+ #ta1.min_height 5
184
+ #splitleft.min_width 12
185
+ #splitleft.min_height 6
186
+ ret = outer.reset_to_preferred_sizes
187
+ outer.set_resize_weight(0.50) if ret == :ERROR
188
+
189
+ File.open("../README.markdown","r") do |file|
190
+ while (line = file.gets)
191
+ ta1 << line.chomp
192
+ end
193
+ end
194
+
195
+ @form.repaint
196
+ @window.wrefresh
197
+ Ncurses::Panel.update_panels
198
+ while((ch = @window.getchar()) != KEY_F1 )
199
+ str = keycode_tos ch
200
+ case ch
201
+ #when ?v.getbyte(0)
202
+ #$log.debug " ORIENTATION VERTICAL"
203
+ #outer.orientation(:VERTICAL_SPLIT)
204
+ #outer.reset_to_preferred_sizes
205
+ #when ?h.getbyte(0)
206
+ #$log.debug " ORIENTATION HORIZ"
207
+ #outer.orientation(:HORIZONTAL_SPLIT)
208
+ #outer.reset_to_preferred_sizes
209
+ when ?-.getbyte(0)
210
+ $log.debug " KEY PRESS -"
211
+ outer.set_divider_location(outer.divider_location-1)
212
+ when ?+.getbyte(0)
213
+ $log.debug " KEY PRESS +"
214
+ outer.set_divider_location(outer.divider_location+1)
215
+ when ?=.getbyte(0)
216
+ $log.debug " KEY PRESS ="
217
+ outer.set_resize_weight(0.50)
218
+ end
219
+ #outer.get_buffer().wclear
220
+ #outer << "#{ch} got (#{str})"
221
+ # outer.repaint
222
+ # outer.buffer_to_screen
223
+ @form.repaint
224
+ @form.handle_key(ch)
225
+ @window.wrefresh
226
+ end
227
+ end
228
+ rescue => ex
229
+ ensure
230
+ @window.destroy if !@window.nil?
231
+ VER::stop_ncurses
232
+ p ex if ex
233
+ p(ex.backtrace.join("\n")) if ex
234
+ $log.debug( ex) if ex
235
+ $log.debug(ex.backtrace.join("\n")) if ex
236
+ end
237
+ end