rbcurse 0.1.3 → 1.1.1

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 (74) hide show
  1. data/CHANGELOG +126 -0
  2. data/Manifest.txt +53 -20
  3. data/README.markdown +423 -0
  4. data/Rakefile +3 -1
  5. data/examples/keytest.rb +177 -0
  6. data/examples/mpad2.rb +156 -0
  7. data/examples/newtesttabp.rb +121 -0
  8. data/examples/rfe.rb +48 -10
  9. data/examples/rfe_renderer.rb +4 -4
  10. data/examples/rvimsplit.rb +376 -0
  11. data/examples/sqlc.rb +97 -106
  12. data/examples/sqlm.rb +446 -0
  13. data/examples/test1.rb +4 -4
  14. data/examples/test2.rb +12 -12
  15. data/examples/testchars.rb +140 -0
  16. data/examples/testkeypress.rb +9 -4
  17. data/examples/testmulticomp.rb +72 -0
  18. data/examples/testscroller.rb +136 -0
  19. data/examples/testscrolllb.rb +86 -0
  20. data/examples/testscrollp.rb +87 -0
  21. data/examples/testscrollta.rb +80 -0
  22. data/examples/testscrolltable.rb +166 -0
  23. data/examples/testsplit.rb +87 -0
  24. data/examples/testsplit2.rb +123 -0
  25. data/examples/testsplit3.rb +215 -0
  26. data/examples/testsplit3_1.rb +244 -0
  27. data/examples/testsplit3a.rb +215 -0
  28. data/examples/testsplit3b.rb +237 -0
  29. data/examples/testsplitta.rb +148 -0
  30. data/examples/testsplittv.rb +142 -0
  31. data/examples/testsplittvv.rb +144 -0
  32. data/examples/testtable.rb +1 -1
  33. data/examples/testtabp.rb +3 -2
  34. data/examples/testtestw.rb +69 -0
  35. data/examples/testtodo.rb +5 -3
  36. data/examples/testtpane.rb +203 -0
  37. data/examples/testtpane2.rb +145 -0
  38. data/examples/testtpanetable.rb +199 -0
  39. data/examples/viewtodo.rb +5 -3
  40. data/lib/rbcurse.rb +1 -1
  41. data/lib/rbcurse/celleditor.rb +2 -2
  42. data/lib/rbcurse/colormap.rb +5 -5
  43. data/lib/rbcurse/defaultlistselectionmodel.rb +3 -3
  44. data/lib/rbcurse/io.rb +663 -0
  45. data/lib/rbcurse/listeditable.rb +306 -0
  46. data/lib/rbcurse/listkeys.rb +15 -15
  47. data/lib/rbcurse/listscrollable.rb +168 -27
  48. data/lib/rbcurse/mapper.rb +35 -13
  49. data/lib/rbcurse/rchangeevent.rb +28 -0
  50. data/lib/rbcurse/rform.rb +845 -0
  51. data/lib/rbcurse/rlistbox.rb +144 -34
  52. data/lib/rbcurse/rmessagebox.rb +10 -5
  53. data/lib/rbcurse/rmulticontainer.rb +325 -0
  54. data/lib/rbcurse/rmultitextview.rb +306 -0
  55. data/lib/rbcurse/rscrollform.rb +369 -0
  56. data/lib/rbcurse/rscrollpane.rb +511 -0
  57. data/lib/rbcurse/rsplitpane.rb +820 -0
  58. data/lib/rbcurse/rtabbedpane.rb +737 -109
  59. data/lib/rbcurse/rtabbedwindow.rb +326 -0
  60. data/lib/rbcurse/rtable.rb +220 -64
  61. data/lib/rbcurse/rtextarea.rb +340 -181
  62. data/lib/rbcurse/rtextview.rb +237 -101
  63. data/lib/rbcurse/rviewport.rb +203 -0
  64. data/lib/rbcurse/rwidget.rb +919 -95
  65. data/lib/rbcurse/scrollable.rb +7 -7
  66. data/lib/rbcurse/selectable.rb +4 -4
  67. data/lib/rbcurse/table/tablecellrenderer.rb +3 -0
  68. data/lib/rbcurse/undomanager.rb +181 -0
  69. data/lib/rbcurse/vieditable.rb +100 -0
  70. data/lib/ver/window.rb +471 -21
  71. metadata +66 -22
  72. data/README.txt +0 -312
  73. data/examples/testd.db +0 -0
  74. data/examples/todocsv.csv +0 -28
@@ -0,0 +1,86 @@
1
+ #$LOAD_PATH << "/Users/rahul/work/projects/rbcurse/"
2
+ # Creates a scrollpane with a Testwidget (which is a modified TextView class)
3
+ require 'rubygems'
4
+ require 'ncurses'
5
+ require 'logger'
6
+ require 'rbcurse'
7
+ require 'rbcurse/rlistbox'
8
+ require 'rbcurse/rscrollpane'
9
+ if $0 == __FILE__
10
+ include RubyCurses
11
+ include RubyCurses::Utils
12
+
13
+ begin
14
+ # Initialize curses
15
+ VER::start_ncurses # this is initializing colors via ColorMap.setup
16
+ $log = Logger.new("v#{$0}.log")
17
+ $log.level = Logger::DEBUG
18
+
19
+ @window = VER::Window.root_window
20
+
21
+ catch(:close) do
22
+ colors = Ncurses.COLORS
23
+ @form = Form.new @window
24
+ r = 1; c = 10; w = 40
25
+ ht = 10
26
+ # print filler stars
27
+ filler = "*" * (w+2)
28
+ #(ht+3).times(){|i| @form.window.printstring(i,c-1, filler, $datacolor) }
29
+
30
+
31
+ @scroll = ScrollPane.new @form do
32
+ name "myScroller"
33
+ row r+ht+1
34
+ col c
35
+ width w
36
+ height ht
37
+ end
38
+ mylist = []
39
+ 0.upto(100) { |v| mylist << "#{v} scrollable data" }
40
+ $listdata = Variable.new mylist
41
+ # NOTE that embedded object is not passed form, since it doesn't update form
42
+ listb = Listbox.new nil do
43
+ name "mylist"
44
+ row 0
45
+ col 0
46
+ width w+10
47
+ height ht+10
48
+ list_variable $listdata
49
+ #selection_mode :SINGLE
50
+ show_selector true
51
+ row_selected_symbol "[X] "
52
+ row_unselected_symbol "[ ] "
53
+ title "A long list"
54
+ title_attrib 'reverse'
55
+ cell_editing_allowed true
56
+ end
57
+ ## The next 2 are not advised since they don't trigger events
58
+ #listb.insert 55, "hello ruby", "so long python", "farewell java", "RIP .Net"
59
+ #$listdata.value.insert 55, "hello ruby", "so long python", "farewell java", "RIP .Net"
60
+ listb.list_data_model.insert 55, "hello ruby", "so long python", "farewell java", "RIP .Net", "hi lisp", "hi clojure", "hiya erlang"
61
+ @scroll.child(listb)
62
+
63
+
64
+ @help = "q to quit. This is a test of Listbox which uses a pad/buffer.: #{$0}"
65
+ #RubyCurses::Label.new @form, {'text' => @help, "row" => 21, "col" => 2, "color" => "yellow"}
66
+
67
+ @form.repaint
68
+ @window.wrefresh
69
+ Ncurses::Panel.update_panels
70
+ while((ch = @window.getchar()) != ?q.getbyte(0) )
71
+ str = keycode_tos ch
72
+ @form.handle_key(ch)
73
+ @form.repaint
74
+ @window.wrefresh
75
+ end
76
+ end
77
+ rescue => ex
78
+ ensure
79
+ @window.destroy if !@window.nil?
80
+ VER::stop_ncurses
81
+ p ex if ex
82
+ p(ex.backtrace.join("\n")) if ex
83
+ $log.debug( ex) if ex
84
+ $log.debug(ex.backtrace.join("\n")) if ex
85
+ end
86
+ end
@@ -0,0 +1,87 @@
1
+ #$LOAD_PATH << "/Users/rahul/work/projects/rbcurse/"
2
+ # Creates a scrollpane with a TextView (which is a modified TextView class)
3
+ require 'rubygems'
4
+ require 'ncurses'
5
+ require 'logger'
6
+ require 'rbcurse'
7
+ #require 'rbcurse/rtextview'
8
+ require 'rbcurse/rmultitextview'
9
+ require 'rbcurse/rscrollpane'
10
+ require 'rbcurse/undomanager'
11
+ if $0 == __FILE__
12
+ include RubyCurses
13
+ include RubyCurses::Utils
14
+
15
+ begin
16
+ # Initialize curses
17
+ VER::start_ncurses # this is initializing colors via ColorMap.setup
18
+ $log = Logger.new("v#{$0}.log")
19
+ $log.level = Logger::DEBUG
20
+
21
+ @window = VER::Window.root_window
22
+
23
+ catch(:close) do
24
+ colors = Ncurses.COLORS
25
+ @form = Form.new @window
26
+ @form.name = "Form::MAINFORM"
27
+ r = 3; c = 5; w = 80
28
+ ht = 20
29
+ # print filler stars
30
+ #filler = "*" * (w+2)
31
+ #(ht+3).times(){|i| @form.window.printstring(i,c-1, filler, $datacolor) }
32
+
33
+
34
+ @scroll = ScrollPane.new @form do
35
+ name "myScroller"
36
+ row r
37
+ col c
38
+ width w
39
+ height ht
40
+ end
41
+ @textview = MultiTextView.new do
42
+ #@textview = TextView.new do
43
+ name "myView"
44
+ row 0
45
+ col 0
46
+ width w
47
+ height ht +20
48
+ title "README.txt"
49
+ title_attrib 'bold'
50
+ print_footer true
51
+ footer_attrib 'bold'
52
+ #suppress_borders true
53
+ end
54
+ #@textview.should_create_buffer true # can be moved to scrollpane
55
+ #@textview.set_buffering(:target_window => @form.window, :bottom => @scroll.height-1, :right => @scroll.width-1 )
56
+ #content = File.open("../README.markdown","r").readlines
57
+ #@textview.set_content content #, :WRAP_WORD
58
+ @textview.add "../README.markdown", "Readme"
59
+
60
+ @textview.load_module "vieditable", "ViEditable"
61
+ @scroll.child(@textview)
62
+ undom = SimpleUndo.new @textview
63
+ #@textview.show_caret=true
64
+
65
+ @help = "F1 to quit. #{$0} TextView inside scrollpane. M-n M-p M-h M-l M-< M->, e to open file, : for menu""
66
+ RubyCurses::Label.new @form, {'text' => @help, "row" => ht+r+1, "col" => 2, "color" => "yellow"}
67
+
68
+ @form.repaint
69
+ @window.wrefresh
70
+ Ncurses::Panel.update_panels
71
+ while((ch = @window.getchar()) != KEY_F1 ) # ?q.getbyte(0) )
72
+ str = keycode_tos ch
73
+ @form.handle_key(ch)
74
+ @form.repaint
75
+ @window.wrefresh
76
+ end
77
+ end
78
+ rescue => ex
79
+ ensure
80
+ @window.destroy if !@window.nil?
81
+ VER::stop_ncurses
82
+ p ex if ex
83
+ p(ex.backtrace.join("\n")) if ex
84
+ $log.debug( ex) if ex
85
+ $log.debug(ex.backtrace.join("\n")) if ex
86
+ end
87
+ end
@@ -0,0 +1,80 @@
1
+ #$LOAD_PATH << "/Users/rahul/work/projects/rbcurse/"
2
+ # Creates a scrollpane with a Testwidget (which is a modified TextView class)
3
+ require 'rubygems'
4
+ require 'ncurses'
5
+ require 'logger'
6
+ require 'rbcurse'
7
+ require 'rbcurse/rtextarea'
8
+ require 'rbcurse/rscrollpane'
9
+ if $0 == __FILE__
10
+ include RubyCurses
11
+ include RubyCurses::Utils
12
+
13
+ begin
14
+ # Initialize curses
15
+ VER::start_ncurses # this is initializing colors via ColorMap.setup
16
+ $log = Logger.new("v#{$0}.log")
17
+ $log.level = Logger::DEBUG
18
+
19
+ @window = VER::Window.root_window
20
+
21
+ catch(:close) do
22
+ colors = Ncurses.COLORS
23
+ @form = Form.new @window
24
+ @form.name = "Form::MAINFORM"
25
+ $log.debug " MAIN FORM #{@form} w #{@window} "
26
+ r = 3; c = 10; w = 40
27
+ ht = 10
28
+
29
+
30
+ @scroll = ScrollPane.new @form do
31
+ name "myScroller"
32
+ row r+1
33
+ col c
34
+ width w
35
+ height ht
36
+ end
37
+ # XXX we are passing nil as form, so its bound to bomb FIXME TODO
38
+ @textview = TextArea.new @nil do
39
+ name "myText"
40
+ row 0
41
+ col 0
42
+ width w+10
43
+ height ht+10
44
+ title "EditMe.txt"
45
+ title_attrib 'bold'
46
+ print_footer true
47
+ footer_attrib 'bold'
48
+ end
49
+ @scroll.child(@textview)
50
+ @textview << "I expect to pass through this world but once." << "Any good therefore that I can do, or any kindness or abilities that I can show to any fellow creature, let me do it now."
51
+ @textview << "Let me not defer it or neglect it, for I shall not pass this way again."
52
+ @textview << " "
53
+ @textview << "F1 to exit. M-n, M-p, M-h, M-l for scrolling."
54
+ @textview << "Some more text going below scrollpane.. "
55
+ @textview << "Try C-[ C-] for going to start and end "
56
+
57
+
58
+ @help = "F1 to quit. #{$0}. This is a test of TextArea inside a Scrollpane (it uses a pad/buffer)."
59
+ RubyCurses::Label.new @form, {'text' => @help, "row" => 23, "col" => 2, "color" => "yellow"}
60
+
61
+ @form.repaint
62
+ @window.wrefresh
63
+ Ncurses::Panel.update_panels
64
+ while((ch = @window.getchar()) != KEY_F1)
65
+ str = keycode_tos ch
66
+ @form.handle_key(ch)
67
+ @form.repaint
68
+ @window.wrefresh
69
+ end
70
+ end
71
+ rescue => ex
72
+ ensure
73
+ @window.destroy if !@window.nil?
74
+ VER::stop_ncurses
75
+ p ex if ex
76
+ p(ex.backtrace.join("\n")) if ex
77
+ $log.debug( ex) if ex
78
+ $log.debug(ex.backtrace.join("\n")) if ex
79
+ end
80
+ end
@@ -0,0 +1,166 @@
1
+ #$LOAD_PATH << "/Users/rahul/work/projects/rbcurse/"
2
+ #*******************************************************#
3
+ # testsrolltable.rb #
4
+ # written by Rahul Kumar #
5
+ # January 18, 2010 #
6
+ # #
7
+ # Test table inside a scrollpane. #
8
+ # The table here has minimal functionality. Pls refer #
9
+ # testtable.rb for more complete functionality. #
10
+ #
11
+ # /----+----+----+-----\
12
+ # |____|____|____|_____|
13
+ # | | | | V|
14
+ # | | | | V|
15
+ # + | | | V|
16
+ # | | | | V|
17
+ # | | | | V|
18
+ # |>>>>>>>>>>> | |
19
+ # \----+----+----+-----/
20
+ # http://totalrecall.files.wordpress.com/2010/01/rbcurse-tablescrollpane.png
21
+ #
22
+ #
23
+ # Released under ruby license. See #
24
+ # http://www.ruby-lang.org/en/LICENSE.txt #
25
+ # Copyright 2010, Rahul Kumar #
26
+ #*******************************************************#
27
+ # Creates a scrollpane with a Table
28
+ require 'rubygems'
29
+ require 'ncurses'
30
+ require 'logger'
31
+ require 'rbcurse'
32
+ require 'rbcurse/rtable'
33
+ require 'rbcurse/rscrollpane'
34
+ if $0 == __FILE__
35
+ include RubyCurses
36
+ include RubyCurses::Utils
37
+
38
+ begin
39
+ # Initialize curses
40
+ VER::start_ncurses # this is initializing colors via ColorMap.setup
41
+ # file = File.open("v#{$0}.log", File::WRONLY | File::APPEND | File::CREAT)
42
+ $log = Logger.new("v#{$0}.log")
43
+ $log.level = Logger::DEBUG
44
+
45
+ @window = VER::Window.root_window
46
+
47
+ catch(:close) do
48
+ colors = Ncurses.COLORS
49
+ @form = Form.new @window
50
+ r = 3; c = 7; w = 80
51
+ ht = 20
52
+
53
+ scroll = ScrollPane.new @form do
54
+ name "myScroller"
55
+ row r
56
+ col c
57
+ width w
58
+ height ht
59
+ end
60
+ data = [["Pathetique",3,"Tchaikovsky",3.21, true, "WIP"],
61
+ ["Ali Maula Ali Maula",3,"NFAK",3.47, true, "WIP"],
62
+ ["Tera Hijr Mera Nasib",92,"Razia Sultan",412, true, "Fin"],
63
+ ["Piano Concerto 4&5",4,"Beethoven",110.0, false, "Cancel"],
64
+ ["Toccata and Fugue",4,"J S Bach",102.72, false, "Postp"],
65
+ ["Symphony No. 3",4,"Henryk Gorecki",102.72, true, "Postp"],
66
+ ["The Great Gig in the Sky",8,"Pink Floyd",12.72, false, "Todo"],
67
+ ["Steppes of Central Asia",9,"Borodin",12.2, false, "WIP"],
68
+ ["Wish You Were Here",8,"Pink Floyd",2.7, false, "Todo"],
69
+ ["Habanera",nil,"Maria Callas",112.7, true, "Cancel"],
70
+ ["Mack the Knife",9,"Loius Armstrong",12.2, false, "Todo"],
71
+ ["Prince Igor",9,"Borodin",16.3, false, "WIP"],
72
+ ["Shahbaaz Qalandar",9,"Nusrat Fateh Ali Khan",12.2, false, "Todo"],
73
+ ["Raag Darbari",9,"Ustad Fateh Ali Khan",12.2, false, "Todo"],
74
+ ["Yaad-e-Mustafa Aisi",9,"Santoo Khan",12.2, true, "Todo"],
75
+ ["Chaconne",4,"Johann S Bach",12.42, true, "Postp"],
76
+ ["Raag Jaunpuri",9,"Ustad Fateh Ali Khan",12.2, false, "Todo"],
77
+ ["Dalaleragita",9,"Vaishnava",12.2, false, "Todo"],
78
+ ["Prasada sevaya",9,"Vaishnava",12.2, false, "Todo"],
79
+ ["Sri Rupamanjiri",9,"Vaishnava",12.2, false, "Todo"],
80
+ ["M Vlast ",9,"Smetana",12.2, false, "Todo"],
81
+ ["Jai Radha Madhava",163,"Jagjit Singh",5.4, false, "WIP"]]
82
+
83
+ colnames = %w[ Song Cat Artist Ratio Flag Status]
84
+ statuses = ["Todo", "WIP", "Fin", "Cancel", "Postp"]
85
+
86
+ atable = Table.new nil do
87
+ name "mytext"
88
+ row 0
89
+ col 0
90
+ width 78
91
+ height 15
92
+ #title "A Table"
93
+ #title_attrib (Ncurses::A_REVERSE | Ncurses::A_BOLD)
94
+ cell_editing_allowed true
95
+ editing_policy :EDITING_AUTO
96
+ set_data data, colnames
97
+ end
98
+ sel_col = Variable.new 0
99
+ sel_col.value = 0
100
+ tcm = atable.get_table_column_model
101
+ selcolname = atable.get_column_name sel_col.value
102
+ #
103
+ ## key bindings fo atable
104
+ # column widths
105
+ tcm.column(0).width 24
106
+ tcm.column(1).width 5
107
+ tcm.column(2).width 18
108
+ #tcm.column(2).editable false
109
+ tcm.column(3).width 7
110
+ tcm.column(4).width 5
111
+ tcm.column(5).width 8
112
+ atable.configure() do
113
+ bind_key(330) { atable.remove_column(tcm.column(atable.focussed_col)) rescue "" }
114
+ bind_key(?+) {
115
+ acolumn = atable.get_column selcolname
116
+ w = acolumn.width + 1
117
+ acolumn.width w
118
+ #atable.table_structure_changed
119
+ }
120
+ bind_key(?-) {
121
+ acolumn = atable.get_column selcolname
122
+ w = acolumn.width - 1
123
+ if w > 3
124
+ acolumn.width w
125
+ #atable.table_structure_changed
126
+ end
127
+ }
128
+ bind_key(?>) {
129
+ colcount = tcm.column_count-1
130
+ #atable.move_column sel_col.value, sel_col.value+1 unless sel_col.value == colcount
131
+ col = atable.focussed_col
132
+ atable.move_column col, col+1 unless col == colcount
133
+ }
134
+ bind_key(?<) {
135
+ col = atable.focussed_col
136
+ atable.move_column col, col-1 unless col == 0
137
+ #atable.move_column sel_col.value, sel_col.value-1 unless sel_col.value == 0
138
+ }
139
+ #bind_key(KEY_RIGHT) { sel_col.value = sel_col.value+1; current_column sel_col.value}
140
+ #bind_key(KEY_LEFT) { sel_col.value = sel_col.value-1;current_column sel_col.value}
141
+ end
142
+ scroll.child(atable)
143
+
144
+ @help = "F1 to quit. This is a test of Table inside a scrollpane. #{$0} M-n M-p M-< M-> M-h M-l"
145
+ RubyCurses::Label.new @form, {'text' => @help, "row" => ht+r+1, "col" => 2, "color" => "yellow"}
146
+
147
+ @form.repaint
148
+ @window.wrefresh
149
+ Ncurses::Panel.update_panels
150
+ while((ch = @window.getchar()) != KEY_F1 ) # ?q.getbyte(0) )
151
+ str = keycode_tos ch
152
+ @form.handle_key(ch)
153
+ @form.repaint
154
+ @window.wrefresh
155
+ end
156
+ end
157
+ rescue => ex
158
+ ensure
159
+ @window.destroy if !@window.nil?
160
+ VER::stop_ncurses
161
+ p ex if ex
162
+ p(ex.backtrace.join("\n")) if ex
163
+ $log.debug( ex) if ex
164
+ $log.debug(ex.backtrace.join("\n")) if ex
165
+ end
166
+ end
@@ -0,0 +1,87 @@
1
+ #$LOAD_PATH << "/Users/rahul/work/projects/rbcurse/"
2
+ require 'rubygems'
3
+ require 'ncurses'
4
+ require 'logger'
5
+ require 'rbcurse'
6
+ require 'rbcurse/rsplitpane'
7
+ #require 'rbcurse/rtestwidget'
8
+ #
9
+ ## this sample creates a single scrollpane, and allows you to change orientation
10
+ ##+ and move divider around using - + and =.
11
+ #
12
+ if $0 == __FILE__
13
+ include RubyCurses
14
+ include RubyCurses::Utils
15
+
16
+ begin
17
+ # Initialize curses
18
+ VER::start_ncurses # this is initializing colors via ColorMap.setup
19
+ $log = Logger.new("v#{$0}.log")
20
+ $log.level = Logger::DEBUG
21
+
22
+ @window = VER::Window.root_window
23
+
24
+ catch(:close) do
25
+ colors = Ncurses.COLORS
26
+ @form = Form.new @window
27
+ r = 3; c = 7; ht = 18
28
+ # filler just to see that we are covering correct space and not wasting lines or cols
29
+ filler = "*" * 88
30
+ (ht+2).times(){|i| @form.window.printstring(i,r, filler, $datacolor) }
31
+
32
+
33
+ @help = "q to quit. v h - + = : #{$0} . Check logger too"
34
+ RubyCurses::Label.new @form, {'text' => @help, "row" => ht+r, "col" => 2, "color" => "yellow"}
35
+
36
+ $message = Variable.new
37
+ $message.value = "Message Comes Here"
38
+ message_label = RubyCurses::Label.new @form, {'text_variable' => $message, "name"=>"message_label","row" => ht+r+2, "col" => 1, "display_length" => 60, "height" => 2, 'color' => 'cyan'}
39
+ $message.update_command() { message_label.repaint } # why ?
40
+
41
+ splitp = SplitPane.new @form do
42
+ name "mypane"
43
+ row r
44
+ col c
45
+ width 70
46
+ height ht
47
+ # focusable false
48
+ #orientation :VERTICAL_SPLIT
49
+ end
50
+ splitp.bind(:PROPERTY_CHANGE){|e| $message.value = e.to_s }
51
+
52
+ @form.repaint
53
+ @window.wrefresh
54
+ Ncurses::Panel.update_panels
55
+ while((ch = @window.getchar()) != ?q.getbyte(0) )
56
+ str = keycode_tos ch
57
+ case ch
58
+ when ?v.getbyte(0)
59
+ splitp.orientation(:VERTICAL_SPLIT)
60
+ splitp.reset_to_preferred_sizes
61
+ when ?h.getbyte(0)
62
+ splitp.orientation(:HORIZONTAL_SPLIT)
63
+ splitp.reset_to_preferred_sizes
64
+ when ?-.getbyte(0)
65
+ splitp.set_divider_location(splitp.divider_location-1)
66
+ when ?+.getbyte(0)
67
+ splitp.set_divider_location(splitp.divider_location+1)
68
+ when ?=.getbyte(0)
69
+ splitp.set_resize_weight(0.50)
70
+ end
71
+ #splitp.get_buffer().wclear
72
+ #splitp << "#{ch} got (#{str})"
73
+ splitp.repaint # since the above keys are not being handled inside
74
+ @form.handle_key(ch)
75
+ @window.wrefresh
76
+ end
77
+ end
78
+ rescue => ex
79
+ ensure
80
+ @window.destroy if !@window.nil?
81
+ VER::stop_ncurses
82
+ p ex if ex
83
+ p(ex.backtrace.join("\n")) if ex
84
+ $log.debug( ex) if ex
85
+ $log.debug(ex.backtrace.join("\n")) if ex
86
+ end
87
+ end