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,106 @@
1
+ require 'rbcurse'
2
+ require 'rbcurse/core/widgets/rtree'
3
+
4
+ if $0 == __FILE__
5
+ $choice = ARGV[0].to_i || 1
6
+ class Tester
7
+ def initialize
8
+ acolor = $reversecolor
9
+ end
10
+ def run
11
+ @window = VER::Window.root_window
12
+ @form = Form.new @window
13
+
14
+ h = 20; w = 75; t = 3; l = 4
15
+ #$choice = 1
16
+ case $choice
17
+ when 1
18
+ root = TreeNode.new "ROOT"
19
+ subroot = TreeNode.new "subroot"
20
+ leaf1 = TreeNode.new "leaf 1"
21
+ leaf2 = TreeNode.new "leaf 2"
22
+
23
+ model = DefaultTreeModel.new root
24
+ #model.insert_node_into(subroot, root, 0)
25
+ #model.insert_node_into(leaf1, subroot, 0)
26
+ #model.insert_node_into(leaf2, subroot, 1)
27
+ root << subroot
28
+ subroot << leaf1 << leaf2
29
+ leaf1 << "leaf11"
30
+ leaf1 << "leaf12"
31
+
32
+ root.add "blocky", true do
33
+ add "block2"
34
+ add "block3" do
35
+ add "block31"
36
+ end
37
+ end
38
+ Tree.new @form, :data => model, :row =>2, :col=>2, :height => 20, :width => 30
39
+
40
+ when 2
41
+
42
+ # use an array to populate
43
+ # we need to do root_visible = false so you get just a list
44
+ model = %W[ ruby cobol jruby smalltalk fortran piethon purrl lithp ]
45
+ Tree.new @form, :data => model, :row =>2, :col=>2, :height => 20, :width => 30
46
+
47
+ when 3
48
+
49
+ # use an Has to populate
50
+ #model = { :ruby => %W[ "jruby", "mri", "yarv", "rubinius", "macruby" ], :python => %W[ cpython jython laden-swallow ] }
51
+ model = { :ruby => [ "jruby", {:mri => %W[ 1.8.6 1.8.7]}, {:yarv => %W[1.9.1 1.9.2]}, "rubinius", "macruby" ], :python => %W[ cpython jython laden-swallow ] }
52
+
53
+ Tree.new @form, :data => model, :row =>2, :col=>2, :height => 20, :width => 30
54
+ #when 4
55
+ else
56
+ Tree.new @form, :row =>2, :col=>2, :height => 20, :width => 30 do
57
+ root "root" do
58
+ branch "hello" do
59
+ leaf "world"
60
+ end
61
+ branch "goodbyee" do
62
+ leaf "java"
63
+ end
64
+ end
65
+ end
66
+
67
+ end
68
+
69
+ #
70
+ @help = "F1 to quit. Pass command-line argument 1,2,3,4 #{$0} "
71
+ RubyCurses::Label.new @form, {'text' => @help, "row" => 1, "col" => 2, "color" => "yellow"}
72
+ @form.repaint
73
+ @window.wrefresh
74
+ Ncurses::Panel.update_panels
75
+ while((ch = @window.getchar()) != KEY_F1 )
76
+ ret = @form.handle_key(ch)
77
+ @window.wrefresh
78
+ if ret == :UNHANDLED
79
+ str = keycode_tos ch
80
+ $log.debug " UNHANDLED #{str} by Vim #{ret} "
81
+ end
82
+ end
83
+
84
+ @window.destroy
85
+
86
+ end
87
+ end
88
+ include RubyCurses
89
+ include RubyCurses::Utils
90
+ # Initialize curses
91
+ begin
92
+ # XXX update with new color and kb
93
+ VER::start_ncurses # this is initializing colors via ColorMap.setup
94
+ $log = Logger.new("rbc13.log")
95
+ $log.level = Logger::DEBUG
96
+ n = Tester.new
97
+ n.run
98
+ rescue => ex
99
+ ensure
100
+ VER::stop_ncurses
101
+ p ex if ex
102
+ puts(ex.backtrace.join("\n")) if ex
103
+ $log.debug( ex) if ex
104
+ $log.debug(ex.backtrace.join("\n")) if ex
105
+ end
106
+ end
@@ -0,0 +1,264 @@
1
+ require 'rbcurse'
2
+ require 'rbcurse/core/widgets/rcombo'
3
+ require 'rbcurse/extras/widgets/rtable'
4
+ require 'rbcurse/extras/include/celleditor'
5
+ #require 'rbcurse/table/tablecellrenderer'
6
+ require 'rbcurse/extras/include/comboboxcellrenderer'
7
+ require 'rbcurse/core/include/action'
8
+
9
+ ##
10
+ # a renderer which paints alternate lines with
11
+ # another color, for people with poor taste.
12
+ class MyRenderer < TableCellRenderer
13
+ def initialize text="", config={}, &block
14
+ super
15
+ @orig_bgcolor = @bgcolor
16
+ @orig_color = @color
17
+ end
18
+ def repaint graphic, r=@row,c=@col, value=@text, focussed=false, selected=false
19
+ @bgcolor = @orig_bgcolor
20
+ @color = @orig_color
21
+ if !focussed and !selected
22
+ @bgcolor = r % 2 == 0 ? "green" : @orig_bgcolor
23
+ @color = r % 2 == 0 ? "black" : @orig_color
24
+ end
25
+ super
26
+ end
27
+ end
28
+ if $0 == __FILE__
29
+ include RubyCurses
30
+ include RubyCurses::Utils
31
+
32
+ begin
33
+ # Initialize curses
34
+ VER::start_ncurses # this is initializing colors via ColorMap.setup
35
+ $log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"rbc13.log")))
36
+ $log.level = Logger::DEBUG
37
+
38
+ @window = VER::Window.root_window
39
+
40
+ catch(:close) do
41
+ colors = Ncurses.COLORS
42
+ $log.debug "START #{colors} colors ---------"
43
+ @form = Form.new @window
44
+ @window.printstring 0,30,"Demo of Ruby Curses Table: Edit, Resize, Insert, Move, Delete Row/Col", $datacolor
45
+ r = 1; c = 30;
46
+ data = [["You're beautiful",3,"James Blunt",3.21, true, "WIP"],
47
+ ["Where are you",3,"London Beat",3.47, true, "WIP"],
48
+ ["I'll always love my mama",92,"Intruders",412, true, "Fin"],
49
+ ["I believe in love",4,"Paula Cole",110.0, false, "Cancel"],
50
+ ["Red Sky at night",4,"Dave Gilmour",102.72, false, "Postp"],
51
+ ["Midnight and you",8,"Barry White",12.72, false, "Todo"],
52
+ ["Let the music play",9,"Barry White",12.2, false, "WIP"],
53
+ ["I swear",nil,"Boyz II Men",112.7, true, "Cancel"],
54
+ ["Believe",9,"Elton John",12.2, false, "Todo"],
55
+ ["Private Dancer",9,"Tina Turner",12.2, false, "Todo"],
56
+ ["Liberian Girl",9,"Michael Jackson",12.2, false, "Todo"],
57
+ ["Like a prayer",163,"Charlotte Perrelli",5.4, false, "WIP"]]
58
+
59
+ colnames = %w[ Song Cat Artist Ratio Flag Status]
60
+ statuses = ["Todo", "WIP", "Fin", "Cancel", "Postp"]
61
+
62
+ texta = Table.new @form do
63
+ name "mytext"
64
+ row r
65
+ col c
66
+ width 78
67
+ height 15
68
+ #title "A Table"
69
+ #title_attrib (Ncurses::A_REVERSE | Ncurses::A_BOLD)
70
+ cell_editing_allowed true
71
+ editing_policy :EDITING_AUTO
72
+ set_data data, colnames
73
+ end
74
+ sel_col = Variable.new 0
75
+ sel_col.value = 0
76
+ tcm = texta.get_table_column_model
77
+ selcolname = texta.get_column_name sel_col.value
78
+ #
79
+ ## key bindings fo texta
80
+ # column widths
81
+ tcm.column(0).width 24
82
+ tcm.column(1).width 5
83
+ tcm.column(2).width 18
84
+ #tcm.column(2).editable false
85
+ tcm.column(3).width 7
86
+ tcm.column(4).width 5
87
+ tcm.column(5).width 8
88
+ texta.configure() do
89
+ bind_key(330) { texta.remove_column(tcm.column(texta.focussed_col)) rescue "" }
90
+ bind_key(?+) {
91
+ acolumn = texta.get_column selcolname
92
+ w = acolumn.width + 1
93
+ acolumn.width w
94
+ #texta.table_structure_changed
95
+ }
96
+ bind_key(?-) {
97
+ acolumn = texta.get_column selcolname
98
+ w = acolumn.width - 1
99
+ if w > 3
100
+ acolumn.width w
101
+ #texta.table_structure_changed
102
+ end
103
+ }
104
+ bind_key(?>) {
105
+ colcount = tcm.column_count-1
106
+ #texta.move_column sel_col.value, sel_col.value+1 unless sel_col.value == colcount
107
+ col = texta.focussed_col
108
+ texta.move_column col, col+1 unless col == colcount
109
+ }
110
+ bind_key(?<) {
111
+ col = texta.focussed_col
112
+ texta.move_column col, col-1 unless col == 0
113
+ #texta.move_column sel_col.value, sel_col.value-1 unless sel_col.value == 0
114
+ }
115
+ #bind_key(KEY_RIGHT) { sel_col.value = sel_col.value+1; current_column sel_col.value}
116
+ #bind_key(KEY_LEFT) { sel_col.value = sel_col.value-1;current_column sel_col.value}
117
+ end
118
+ keylabel = RubyCurses::Label.new @form, {'text' => "", "row" => r+16, "col" => c, "color" => "yellow", "bgcolor"=>"blue", "display_length"=>60, "height"=>2}
119
+ eventlabel = RubyCurses::Label.new @form, {'text' => "Events:", "row" => r+19, "col" => c, "color" => "white", "bgcolor"=>"blue", "display_length"=>60, "height"=>2}
120
+
121
+ # report some events
122
+ texta.table_model.bind(:TABLE_MODEL_EVENT){|e| eventlabel.text = "Event: #{e}"}
123
+ texta.get_table_column_model.bind(:TABLE_COLUMN_MODEL_EVENT){|e| eventlabel.text = "Event: #{e}"}
124
+ texta.bind(:TABLE_TRAVERSAL_EVENT){|e| eventlabel.text = "Event: #{e}"}
125
+
126
+ @help = "C-q to quit. M-Tab (next col) C-n (Pg Dn), C-p (Pg Up), M-0 Top, M-9 End, C-x (select). Columns:- Narrow, + expand, > < switch"
127
+ RubyCurses::Label.new @form, {'text' => @help, "row" => Ncurses.LINES-3, "col" => 2, "color" => "yellow", "height"=>2}
128
+
129
+ str_renderer = TableCellRenderer.new ""
130
+ num_renderer = TableCellRenderer.new "", { "justify" => :right }
131
+ bool_renderer = CheckBoxCellRenderer.new "", {"parent" => texta, "display_length"=>5}
132
+ combo_renderer = RubyCurses::ComboBoxCellRenderer.new nil, {"parent" => texta, "display_length"=> 8}
133
+ combo_editor = RubyCurses::CellEditor.new(RubyCurses::ComboBox.new nil, {"focusable"=>false, "visible"=>false, "list"=>statuses, "display_length"=>8})
134
+ texta.set_default_cell_renderer_for_class "String", str_renderer
135
+ texta.set_default_cell_renderer_for_class "Fixnum", num_renderer
136
+ texta.set_default_cell_renderer_for_class "Float", num_renderer
137
+ texta.set_default_cell_renderer_for_class "TrueClass", bool_renderer
138
+ texta.set_default_cell_renderer_for_class "FalseClass", bool_renderer
139
+ texta.get_table_column_model.column(5).cell_editor = combo_editor
140
+ =begin
141
+ field = Field.new @form do
142
+ name "value"
143
+ row r+18
144
+ col c
145
+ display_length 30
146
+ bgcolor "cyan"
147
+ set_label Label.new @form, {'text' => "Value", 'mnemonic'=> 'V'}
148
+ # bind :ENTER do $editing = true end
149
+ # bind :LEAVE do $editing = false end
150
+ end
151
+ =end
152
+ buttrow = r+21 #Ncurses.LINES-4
153
+ b_newrow = Button.new @form do
154
+ text "&New"
155
+ row buttrow
156
+ col c
157
+ bind(:ENTER) { eventlabel.text "New button adds a new row at the bottom " }
158
+ end
159
+ tm = texta.table_model
160
+ b_newrow.command {
161
+ cc = texta.get_table_column_model.column_count
162
+ # need to get datatypes etc, this is just a junk test
163
+ tmp=[]
164
+ #0.upto(cc-1) { tmp << "" }
165
+ 0.upto(cc-1) { tmp << nil }
166
+ tm << tmp
167
+ #texta.table_data_changed
168
+ keylabel.text = "Added a row"
169
+ alert("Added a row at bottom of table")
170
+
171
+ }
172
+
173
+ # using ampersand to set mnemonic
174
+ b_delrow = Button.new @form do
175
+ text "&Delete"
176
+ row buttrow
177
+ col c+10
178
+ bind(:ENTER) { eventlabel.text "Deletes focussed row" }
179
+ end
180
+ b_delrow.command { |form|
181
+ row = texta.focussed_row
182
+ if confirm("Do your really want to delete row #{row}?")== :YES
183
+ tm.delete_at row
184
+ #texta.table_data_changed
185
+ else
186
+ #$message.value = "Quit aborted"
187
+ end
188
+ }
189
+ b_change = Button.new @form do
190
+ text "&Lock"
191
+ row buttrow
192
+ col c+20
193
+ command {
194
+ r = texta.focussed_row
195
+ c = sel_col.value
196
+ #$log.debug " Update gets #{field.getvalue.class}"
197
+ #texta.set_value_at(r, c, field.getvalue)
198
+ toggle = texta.column(texta.focussed_col()).editable
199
+ if toggle.nil? or toggle==true
200
+ toggle = false
201
+ text "Un&lock"
202
+ else
203
+ toggle = true
204
+ text "&Lock "
205
+ end
206
+ eventlabel.text "Set column #{texta.focussed_col()} editable to #{toggle}"
207
+ texta.column(texta.focussed_col()).editable toggle
208
+ alert("Set column #{texta.focussed_col()} editable to #{toggle}")
209
+ }
210
+ bind(:ENTER) { eventlabel.text "Toggles editable state of current column " }
211
+ end
212
+ b_insert = Button.new @form do
213
+ text "&Insert"
214
+ row buttrow
215
+ col c+32
216
+ command {
217
+ # this does not trigger a data change since we are not updating model. so update
218
+ # on pressing up or down
219
+ #0.upto(100) { |i| data << ["test", rand(100), "abc:#{i}", rand(100)/2.0]}
220
+ #texta.table_data_changed
221
+ }
222
+ bind(:ENTER) { eventlabel.text "Does nothing " }
223
+ end
224
+
225
+
226
+ @form.repaint
227
+ @window.wrefresh
228
+ Ncurses::Panel.update_panels
229
+ while((ch = @window.getchar()) != ?\C-q.getbyte(0) )
230
+ begin
231
+ colcount = tcm.column_count-1
232
+ s = keycode_tos ch
233
+ keylabel.text = "Pressed #{ch} , #{s}"
234
+ @form.handle_key(ch)
235
+
236
+ sel_col.value = tcm.column_count-1 if sel_col.value > tcm.column_count-1
237
+ sel_col.value = 0 if sel_col.value < 0
238
+ selcolname = texta.get_column_name sel_col.value
239
+ keylabel.text = "Pressed #{ch} , #{s}. Column selected #{texta.focussed_col}: Width:#{tcm.column(sel_col.value).width} #{selcolname}. Focussed Row: #{texta.focussed_row}, Rows: #{texta.table_model.row_count}, Cols: #{colcount}"
240
+ s = texta.get_value_at(texta.focussed_row, texta.focussed_col)
241
+ #s = s.to_s
242
+ ## $log.debug " updating Field #{s}, #{s.class}"
243
+ ## field.set_buffer s unless field.state == :HIGHLIGHTED # $editing
244
+
245
+ @form.repaint
246
+ @window.wrefresh
247
+ rescue => ex
248
+ $log.debug( ex) if ex
249
+ $log.debug(ex.backtrace.join("\n")) if ex
250
+ #alert ex.to_s
251
+ textdialog ex
252
+ end
253
+ end
254
+ end
255
+ rescue => ex
256
+ ensure
257
+ @window.destroy if !@window.nil?
258
+ VER::stop_ncurses
259
+ p ex if ex
260
+ p(ex.backtrace.join("\n")) if ex
261
+ $log.debug( ex) if ex
262
+ $log.debug(ex.backtrace.join("\n")) if ex
263
+ end
264
+ end
@@ -0,0 +1,107 @@
1
+ require 'logger'
2
+ require 'rbcurse'
3
+ #require 'rbcurse/rtabbedpane'
4
+ require 'rbcurse/rtabbedwindow'
5
+
6
+ class TestTabbedPane
7
+ def initialize
8
+ acolor = $reversecolor
9
+ #$config_hash ||= {}
10
+ end
11
+ def run
12
+ $config_hash ||= Variable.new Hash.new
13
+ #configvar.update_command(){ |v| $config_hash[v.source()] = v.value }
14
+ @tw = RubyCurses::TabbedWindow.new nil do
15
+ height 18
16
+ width 60
17
+ row 5
18
+ col 20
19
+ button_type :ok
20
+ end
21
+ @tp = @tw.tabbed_pane
22
+ @tab1 = @tw.add_tab "&Language"
23
+ f1 = @tp.form @tab1
24
+ #$radio = Variable.new
25
+ radio1 = RadioButton.new f1 do
26
+ #variable $radio
27
+ variable $config_hash
28
+ name "radio1"
29
+ text "ruby"
30
+ value "ruby"
31
+ color "red"
32
+ row 4
33
+ col 2
34
+ end
35
+ radio2 = RadioButton.new f1 do
36
+ #variable $radio
37
+ variable $config_hash
38
+ name "radio1"
39
+ text "jruby"
40
+ value "jruby"
41
+ color "green"
42
+ row 5
43
+ col 2
44
+ end
45
+ radio3 = RadioButton.new f1 do
46
+ #variable $radio
47
+ variable $config_hash
48
+ name "radio1"
49
+ text "macruby"
50
+ value "macruby"
51
+ color "cyan"
52
+ row 6
53
+ col 2
54
+ end
55
+ @tab2 = @tw.add_tab "&Settings"
56
+ #f2 = @tab2.form
57
+ f2 = @tp.form @tab2
58
+ r = 2
59
+ butts = [ "Use &HTTP/1.0", "Use &frames", "&Use SSL" ]
60
+ bcodes = %w[ HTTP, FRAMES, SSL ]
61
+ butts.each_with_index do |t, i|
62
+ RubyCurses::CheckBox.new f2 do
63
+ text butts[i]
64
+ variable $config_hash
65
+ name bcodes[i]
66
+ row r+i
67
+ col 4
68
+ end
69
+ end
70
+ @tab3 = @tw.add_tab "&Editors"
71
+ #f3 = @tab3.form
72
+ f3 = @tp.form @tab3
73
+ butts = %w[ &Vim E&macs &Jed &Other ]
74
+ bcodes = %w[ VIM EMACS JED OTHER]
75
+ row = 3
76
+ butts.each_with_index do |name, i|
77
+ RubyCurses::CheckBox.new f3 do
78
+ text name
79
+ variable $config_hash
80
+ name bcodes[i]
81
+ row row
82
+ col 4
83
+ end
84
+ row +=1
85
+ end
86
+ @tw.show
87
+ @tw.handle_keys
88
+ end
89
+ end
90
+ if $0 == __FILE__
91
+ # Initialize curses
92
+ begin
93
+ # XXX update with new color and kb
94
+ VER::start_ncurses # this is initializing colors via ColorMap.setup
95
+ $log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"rbc13.log")))
96
+ $log.level = Logger::DEBUG
97
+ n = TestTabbedPane.new
98
+ n.run
99
+ rescue => ex
100
+ ensure
101
+ VER::stop_ncurses
102
+ p ex if ex
103
+ p(ex.backtrace.join("\n")) if ex
104
+ $log.debug( ex) if ex
105
+ $log.debug(ex.backtrace.join("\n")) if ex
106
+ end
107
+ end