rbcurse 0.1.3 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
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,69 @@
1
+ #$LOAD_PATH << "/Users/rahul/work/projects/rbcurse/"
2
+ require 'rubygems'
3
+ require 'ncurses'
4
+ require 'logger'
5
+ #require 'lib/ver/keyboard'
6
+ require 'rbcurse'
7
+ require 'rbcurse/rtestwidget'
8
+ if $0 == __FILE__
9
+ include RubyCurses
10
+ include RubyCurses::Utils
11
+
12
+ begin
13
+ # Initialize curses
14
+ VER::start_ncurses # this is initializing colors via ColorMap.setup
15
+ $log = Logger.new("view.log")
16
+ $log.level = Logger::DEBUG
17
+
18
+ @window = VER::Window.root_window
19
+
20
+ catch(:close) do
21
+ colors = Ncurses.COLORS
22
+ @form = Form.new @window
23
+ r = 1; c = 30; w = 40
24
+ ht = 10
25
+ # print filler stars
26
+ filler = "*" * (w+2)
27
+ (ht+3).times(){|i| @form.window.printstring(i,c-1, filler, $datacolor) }
28
+
29
+ # strangely, first displays textview, then puts the fillers over it.
30
+ # then after a keypress, again refreshes textview.
31
+
32
+
33
+ @textview = TestWidget.new @form do
34
+ name "myView"
35
+ row r
36
+ col c
37
+ width w
38
+ height ht
39
+ title "README.txt"
40
+ title_attrib 'bold'
41
+ print_footer true
42
+ footer_attrib 'bold'
43
+ end
44
+ content = File.open("../README.txt","r").readlines
45
+ @textview.set_content content #, :WRAP_WORD
46
+
47
+ @help = "q to quit. This is a test of testWidget which uses a pad/buffer."
48
+ RubyCurses::Label.new @form, {'text' => @help, "row" => 21, "col" => 2, "color" => "yellow"}
49
+
50
+ @form.repaint
51
+ @window.wrefresh
52
+ Ncurses::Panel.update_panels
53
+ while((ch = @window.getchar()) != ?q.getbyte(0) )
54
+ str = keycode_tos ch
55
+ @form.handle_key(ch)
56
+ @form.repaint
57
+ @window.wrefresh
58
+ end
59
+ end
60
+ rescue => ex
61
+ ensure
62
+ @window.destroy if !@window.nil?
63
+ VER::stop_ncurses
64
+ p ex if ex
65
+ p(ex.backtrace.join("\n")) if ex
66
+ $log.debug( ex) if ex
67
+ $log.debug(ex.backtrace.join("\n")) if ex
68
+ end
69
+ end
@@ -26,7 +26,8 @@ class TodoList
26
26
  @categories=[]
27
27
  @modules=[]
28
28
  require 'csv'
29
- CSV::Reader.parse(File.open(@file, 'r')) do |row|
29
+ #CSV::Reader.parse(File.open(@file, 'r')) do |row|
30
+ CSV.foreach(@file) do |row| # 1.9 2009-10-05 11:12
30
31
  @data << row
31
32
  $log.debug " #{row.inspect} "
32
33
  @categories << row[0] unless @categories.include? row[0]
@@ -109,7 +110,8 @@ class TodoList
109
110
  =end
110
111
  d = @data
111
112
  require 'csv'
112
- CSV.open('todocsv.csv', 'w') do |writer|
113
+ #CSV.open('todocsv.csv', 'w') do |writer|
114
+ CSV.open("todocsv.csv", "w") do |writer|
113
115
  #writer << [nil, nil]
114
116
  d.each do |row|
115
117
  #parced_cells = CSV.generate_rows(row, row.size, buf)
@@ -500,7 +502,7 @@ class TodoApp
500
502
  @window.wrefresh
501
503
  Ncurses::Panel.update_panels
502
504
  begin
503
- while((ch = @window.getchar()) != ?\C-q )
505
+ while((ch = @window.getchar()) != ?\C-q.getbyte(0) )
504
506
  colcount = tcm.column_count-1
505
507
  s = keycode_tos ch
506
508
  #status_row.text = "Pressed #{ch} , #{s}"
@@ -0,0 +1,203 @@
1
+ #*******************************************************#
2
+ # testtpane.rb #
3
+ # written by Rahul Kumar #
4
+ # January 20, 2010 #
5
+ # #
6
+ # testing tabbedpane with textarea, view, listbox #
7
+ # #
8
+ # Released under ruby license. See #
9
+ # http://www.ruby-lang.org/en/LICENSE.txt #
10
+ # Copyright 2010, Rahul Kumar #
11
+ #*******************************************************#
12
+
13
+ # this is a test program, tests out tabbed panes. type F1 to exit
14
+ # position cursor in button form and press M-x to add a few tabs
15
+ # M-l in button form will scroll. M-h to scroll left.
16
+ # dd to kill a tab, u to undo kill, or p/P to paste deleted tab
17
+ #
18
+ #$LOAD_PATH << "/Users/rahul/work/projects/rbcurse/"
19
+ require 'rubygems'
20
+ require 'ncurses'
21
+ require 'logger'
22
+ require 'rbcurse'
23
+ require 'rbcurse/rtabbedpane'
24
+ require 'rbcurse/rtextview'
25
+ require 'rbcurse/rtextarea'
26
+ require 'rbcurse/rtable'
27
+
28
+ class TestTabbedPane
29
+ def initialize
30
+ acolor = $reversecolor
31
+ @tctr = 0
32
+ end
33
+ def run
34
+ $config_hash ||= Variable.new Hash.new
35
+ @window = VER::Window.root_window
36
+ @form = Form.new @window
37
+ @form.name = "MainForm"
38
+ r = 4; c = 7;
39
+ h = 20; w = 70
40
+ @tp = RubyCurses::TabbedPane.new @form do
41
+ name "MainPane"
42
+ height h
43
+ width w
44
+ row 2
45
+ col 8
46
+ #button_type :ok
47
+ end
48
+
49
+ textview = TextView.new do
50
+ name "myView"
51
+ row 4
52
+ col 0
53
+ #width w-0
54
+ #height h-4
55
+ title "README.mrku"
56
+ title_attrib 'bold'
57
+ print_footer true
58
+ footer_attrib 'bold'
59
+ end
60
+ content = File.open("../README.markdown","r").readlines
61
+ textview.set_content content #, :WRAP_WORD
62
+ #textview.show_caret = true
63
+
64
+ @tab1 = @tp.add_tab "&TextView", textview
65
+ #@tabl.add_component textview
66
+ #f1 = @tab1.form
67
+
68
+
69
+
70
+ #f2 = @tab2.form
71
+ r = 4
72
+ texta = TextArea.new do
73
+ name "myText"
74
+ #row r
75
+ #col 2
76
+ #width w-5
77
+ #height h-5
78
+ title "EditMe.txt"
79
+ title_attrib 'bold'
80
+ print_footer true
81
+ footer_attrib 'bold'
82
+ end
83
+ @tab2 = @tp.add_tab "&Settings", texta
84
+
85
+ texta << "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."
86
+ texta << "Let me not defer it or neglect it, for I shall not pass this way again."
87
+ texta << " "
88
+ texta << "q to exit."
89
+ texta << "Some more text going below scrollpane.. "
90
+ texta << "Love all creatures for they are none but yourself."
91
+ #texta.show_caret = true # since the cursor is not showing correctly, show internal one.
92
+
93
+ @tab3 = @tp.add_tab "&Editors"
94
+ #f3 = @tab3.form
95
+ f3 = @tp.form @tab3
96
+ butts = %w[ &Vim E&macs &Jed E&lvis ]
97
+ bcodes = %w[ VIM EMACS JED ELVIS]
98
+ row = 2
99
+ butts.each_with_index do |name, i|
100
+ RubyCurses::CheckBox.new f3 do
101
+ text name
102
+ variable $config_hash
103
+ name bcodes[i]
104
+ row row+i
105
+ col 5
106
+ end
107
+ end
108
+ tab3 = @tp.add_tab "S&ongs"
109
+ #f3 = tab3.form
110
+ #f3 = @tp.form tab3
111
+ data = [["Pathetique",3,"Tchaikovsky",3.21, true, "WIP"],
112
+ ["Ali Maula Ali Maula",3,"NFAK",3.47, true, "WIP"],
113
+ ["Tera Hijr Mera Nasib",92,"Razia Sultan",412, true, "Fin"],
114
+ ["Piano Concerto 4&5",4,"Beethoven",110.0, false, "Cancel"],
115
+ ["Toccata and Fugue",4,"J S Bach",102.72, false, "Postp"],
116
+ ["Symphony No. 3",4,"Henryk Gorecki",102.72, true, "Postp"],
117
+ ["The Great Gig in the Sky",8,"Pink Floyd",12.72, false, "Todo"],
118
+ ["Steppes of Central Asia",9,"Borodin",12.2, false, "WIP"],
119
+ ["Wish You Were Here",8,"Pink Floyd",2.7, false, "Todo"],
120
+ ["Habanera",nil,"Maria Callas",112.7, true, "Cancel"],
121
+ ["Mack the Knife",9,"Loius Armstrong",12.2, false, "Todo"],
122
+ ["Prince Igor",9,"Borodin",16.3, false, "WIP"],
123
+ ["Shahbaaz Qalandar",9,"Nusrat Fateh Ali Khan",12.2, false, "Todo"],
124
+ ["Raag Darbari",9,"Ustad Fateh Ali Khan",12.2, false, "Todo"],
125
+ ["Yaad-e-Mustafa Aisi",9,"Santoo Khan",12.2, true, "Todo"],
126
+ ["Chaconne",4,"Johann S Bach",12.42, true, "Postp"],
127
+ ["Raag Jaunpuri",9,"Ustad Fateh Ali Khan",12.2, false, "Todo"],
128
+ ["Dalaleragita",9,"Vaishnava",12.2, false, "Todo"],
129
+ ["Prasada sevaya",9,"Vaishnava",12.2, false, "Todo"],
130
+ ["Sri Rupamanjiri",9,"Vaishnava",12.2, false, "Todo"],
131
+ ["M Vlast ",9,"Smetana",12.2, false, "Todo"],
132
+ ["Jai Radha Madhava",163,"Jagjit Singh",5.4, false, "WIP"]]
133
+ colnames = %w[ Song Cat Artist Ratio Flag Status]
134
+ statuses = ["Todo", "WIP", "Fin", "Cancel", "Postp"]
135
+
136
+ row = 1
137
+ # when adding as a component it is best not to specify row and col
138
+ # We can skip sizing too for large components, so comp will fill the TP.
139
+ atable = Table.new do
140
+ name "mytable"
141
+ #row row
142
+ #col 0
143
+ #width 76
144
+ #height h - 4
145
+ #title "A Table"
146
+ #title_attrib (Ncurses::A_REVERSE | Ncurses::A_BOLD)
147
+ cell_editing_allowed true
148
+ editing_policy :EDITING_AUTO
149
+ set_data data, colnames
150
+ end
151
+ tab3.component = atable
152
+ sel_col = Variable.new 0
153
+ sel_col.value = 0
154
+ tcm = atable.get_table_column_model
155
+ selcolname = atable.get_column_name sel_col.value
156
+ tcm.column(0).width 24
157
+ tcm.column(1).width 3
158
+ tcm.column(2).width 18
159
+ #tcm.column(2).editable false
160
+ tcm.column(3).width 7
161
+ tcm.column(4).width 5
162
+ tcm.column(5).width 6
163
+ @help = "F1 to quit. M-s M-t M-e M-o, TAB, M-x to add tab #{$0} Check logger too"
164
+ RubyCurses::Label.new @form, {'text' => @help, "row" => r+h+2, "col" => 2, "color" => "yellow"}
165
+
166
+ # M-x when inside the buttons form will create a new tab
167
+ @form.bind_key(?\M-x) {
168
+ textv = TextView.new
169
+ t = @tp.add_tab "Text#{@tctr}", textv
170
+ textv.set_content content
171
+ @tctr += 1
172
+ }
173
+ @form.repaint
174
+ $catch_alt_digits = false # we want to use Alt-1, 2 for tabs.
175
+ @window.wrefresh
176
+ Ncurses::Panel.update_panels
177
+ while((ch = @window.getchar()) != KEY_F1 )
178
+ # @tp.repaint
179
+ @form.handle_key(ch)
180
+ @window.wrefresh
181
+ end
182
+ #@tp.show
183
+ #@tp.handle_keys
184
+ end
185
+ end
186
+ if $0 == __FILE__
187
+ # Initialize curses
188
+ begin
189
+ # XXX update with new color and kb
190
+ VER::start_ncurses # this is initializing colors via ColorMap.setup
191
+ $log = Logger.new("view.log")
192
+ $log.level = Logger::DEBUG
193
+ n = TestTabbedPane.new
194
+ n.run
195
+ rescue => ex
196
+ ensure
197
+ VER::stop_ncurses
198
+ p ex if ex
199
+ p(ex.backtrace.join("\n")) if ex
200
+ $log.debug( ex) if ex
201
+ $log.debug(ex.backtrace.join("\n")) if ex
202
+ end
203
+ end
@@ -0,0 +1,145 @@
1
+ #*******************************************************#
2
+ # testtpane2.rb #
3
+ # written by Rahul Kumar #
4
+ # February 1, 2010 #
5
+ # #
6
+ # testing tabbedpane with textarea, view, listbox #
7
+ # Differs from testtpane added scrollpanes outside view #
8
+ # #
9
+ # Released under ruby license. See #
10
+ # http://www.ruby-lang.org/en/LICENSE.txt #
11
+ # Copyright 2010, Rahul Kumar #
12
+ #*******************************************************#
13
+
14
+ # this is a test program, tests out tabbed panes. type F1 to exit
15
+ #
16
+ #$LOAD_PATH << "/Users/rahul/work/projects/rbcurse/"
17
+ require 'rubygems'
18
+ require 'ncurses'
19
+ require 'logger'
20
+ require 'rbcurse'
21
+ require 'rbcurse/rtabbedpane'
22
+ require 'rbcurse/rtextview'
23
+ require 'rbcurse/rtextarea'
24
+ require 'rbcurse/rscrollpane'
25
+
26
+ class TestTabbedPane
27
+ def initialize
28
+ acolor = $reversecolor
29
+ end
30
+ def run
31
+ $config_hash ||= Variable.new Hash.new
32
+ @window = VER::Window.root_window
33
+ @form = Form.new @window
34
+ @form.name = "MAINFORM"
35
+ $log.debug " MAIN FORM #{@form} , #{@window} "
36
+ r = 3; c = 5;
37
+ h = 20; w = 70
38
+ @tp = RubyCurses::TabbedPane.new @form do
39
+ height h
40
+ width w
41
+ row r #5
42
+ col c #8
43
+ #button_type :ok
44
+ end
45
+ sr = 4
46
+ sc = 2
47
+ @scroll = ScrollPane.new nil do
48
+ name "myScroller"
49
+ # row 4 #+ht+1
50
+ # col 0
51
+ # width w-1
52
+ # height h-4
53
+ end
54
+ textview = TextView.new do
55
+ name "myView"
56
+ row 0 #sr+1 # 4
57
+ col 0 #sc+1 # 2
58
+ width w-0
59
+ # height h+10
60
+ title "README.mrku"
61
+ title_attrib 'bold'
62
+ print_footer true
63
+ footer_attrib 'bold'
64
+ end
65
+ content = File.open("../README.markdown","r").readlines
66
+ textview.set_content content #, :WRAP_WORD
67
+ #textview.show_caret = true
68
+ $log.debug " before adding tab to TP "
69
+ @tab1 = @tp.add_tab "&TextView", @scroll
70
+ @scroll.child(textview)
71
+
72
+
73
+ @tab2 = @tp.add_tab "&Settings"
74
+
75
+ #f2 = @tab2.form
76
+ #$log.debug " textarea tp form #{f2} "
77
+ r = 4
78
+ texta = TextArea.new do
79
+ name "myText"
80
+ #row r
81
+ #col 1
82
+ #width w-5
83
+ #height h-5
84
+ title "EditMe.txt"
85
+ title_attrib 'bold'
86
+ print_footer true
87
+ footer_attrib 'bold'
88
+ end
89
+ @tab2.component = texta
90
+ texta << "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."
91
+ texta << "Let me not defer it or neglect it, for I shall not pass this way again."
92
+ texta << " "
93
+ texta << "q to exit."
94
+ texta << "Some more text going below scrollpane.. "
95
+ texta << "Love all creatures for they are none but yourself."
96
+ #texta.show_caret = true # since the cursor is not showing correctly, show internal one.
97
+
98
+ # This uses the old style, we get a padded form and then add objects to it.
99
+ @tab3 = @tp.add_tab "&Editors"
100
+ #f3 = @tab3.form
101
+ f3 = @tp.form @tab3 # this replaces previous line, since we don't create form by default
102
+ butts = %w[ &Vim E&macs &Jed E&lvis ]
103
+ bcodes = %w[ VIM EMACS JED ELVIS]
104
+ row = 4
105
+ butts.each_with_index do |name, i|
106
+ RubyCurses::CheckBox.new f3 do
107
+ text name
108
+ variable $config_hash
109
+ name bcodes[i]
110
+ row row+i
111
+ col 5
112
+ end
113
+ end
114
+ @help = "F1 to quit. M- T/S/E for tabs. M-n p h l scrollpane #{$0} Check logger too"
115
+ RubyCurses::Label.new @form, {'text' => @help, "row" => r+h+2, "col" => 2, "color" => "yellow"}
116
+ @form.repaint
117
+ @window.wrefresh
118
+ Ncurses::Panel.update_panels
119
+ while((ch = @window.getchar()) != KEY_F1 )
120
+ # @tp.repaint
121
+ @form.handle_key(ch)
122
+ @window.wrefresh
123
+ end
124
+ #@tp.show
125
+ #@tp.handle_keys
126
+ end
127
+ end
128
+ if $0 == __FILE__
129
+ # Initialize curses
130
+ begin
131
+ # XXX update with new color and kb
132
+ VER::start_ncurses # this is initializing colors via ColorMap.setup
133
+ $log = Logger.new("view.log")
134
+ $log.level = Logger::DEBUG
135
+ n = TestTabbedPane.new
136
+ n.run
137
+ rescue => ex
138
+ ensure
139
+ VER::stop_ncurses
140
+ p ex if ex
141
+ p(ex.backtrace.join("\n")) if ex
142
+ $log.debug( ex) if ex
143
+ $log.debug(ex.backtrace.join("\n")) if ex
144
+ end
145
+ end
@@ -0,0 +1,199 @@
1
+ #*******************************************************#
2
+ # testtpanetable.rb #
3
+ # written by Rahul Kumar #
4
+ # January 29, 2010 #
5
+ # #
6
+ # testing tabbedpane with table #
7
+ # #
8
+ # Released under ruby license. See #
9
+ # http://www.ruby-lang.org/en/LICENSE.txt #
10
+ # Copyright 2010, Rahul Kumar #
11
+ #*******************************************************#
12
+
13
+ # this is a test program, tests out tabbed panes. type F1 to exit
14
+ #
15
+ #$LOAD_PATH << "/Users/rahul/work/projects/rbcurse/"
16
+ require 'rubygems'
17
+ require 'ncurses'
18
+ require 'logger'
19
+ require 'rbcurse'
20
+ require 'rbcurse/rtabbedpane'
21
+ require 'rbcurse/rtable'
22
+ require 'rbcurse/rscrollpane'
23
+
24
+ class TestTabbedPane
25
+ def initialize
26
+ acolor = $reversecolor
27
+ end
28
+ def run
29
+ $config_hash ||= Variable.new Hash.new
30
+ @window = VER::Window.root_window
31
+ @form = Form.new @window
32
+ $log.debug " MAIN FORM #{@form} "
33
+ r = 1; c = 1;
34
+ h = 20; w = 70
35
+ @tp = RubyCurses::TabbedPane.new @form do
36
+ height h
37
+ width w
38
+ row 2
39
+ col 8
40
+ #button_type :ok
41
+ end
42
+ @tab1 = @tp.add_tab "&Table"
43
+ f1 = @tab1.form
44
+ $log.debug " TABLE FORM #{f1} "
45
+
46
+ data = [["Pathetique",3,"Tchaikovsky",3.21, true, "WIP"],
47
+ ["Ali Maula Ali Maula",3,"NFAK",3.47, true, "WIP"],
48
+ ["Tera Hijr Mera Nasib",92,"Razia Sultan",412, true, "Fin"],
49
+ ["Piano Concerto 4&5",4,"Beethoven",110.0, false, "Cancel"],
50
+ ["Toccata and Fugue",4,"J S Bach",102.72, false, "Postp"],
51
+ ["Symphony No. 3",4,"Henryk Gorecki",102.72, true, "Postp"],
52
+ ["The Great Gig in the Sky",8,"Pink Floyd",12.72, false, "Todo"],
53
+ ["Steppes of Central Asia",9,"Borodin",12.2, false, "WIP"],
54
+ ["Wish You Were Here",8,"Pink Floyd",2.7, false, "Todo"],
55
+ ["Habanera",nil,"Maria Callas",112.7, true, "Cancel"],
56
+ ["Mack the Knife",9,"Loius Armstrong",12.2, false, "Todo"],
57
+ ["Prince Igor",9,"Borodin",16.3, false, "WIP"],
58
+ ["Shahbaaz Qalandar",9,"Nusrat Fateh Ali Khan",12.2, false, "Todo"],
59
+ ["Raag Darbari",9,"Ustad Fateh Ali Khan",12.2, false, "Todo"],
60
+ ["Yaad-e-Mustafa Aisi",9,"Santoo Khan",12.2, true, "Todo"],
61
+ ["Chaconne",4,"Johann S Bach",12.42, true, "Postp"],
62
+ ["Raag Jaunpuri",9,"Ustad Fateh Ali Khan",12.2, false, "Todo"],
63
+ ["Dalaleragita",9,"Vaishnava",12.2, false, "Todo"],
64
+ ["Prasada sevaya",9,"Vaishnava",12.2, false, "Todo"],
65
+ ["Sri Rupamanjiri",9,"Vaishnava",12.2, false, "Todo"],
66
+ ["M Vlast ",9,"Smetana",12.2, false, "Todo"],
67
+ ["Jai Radha Madhava",163,"Jagjit Singh",5.4, false, "WIP"]]
68
+
69
+ colnames = %w[ Song Cat Artist Ratio Flag Status]
70
+ statuses = ["Todo", "WIP", "Fin", "Cancel", "Postp"]
71
+
72
+ atable = Table.new f1 do
73
+ name "mytable"
74
+ row 4
75
+ col 0
76
+ width 78
77
+ height 15
78
+ #title "A Table"
79
+ #title_attrib (Ncurses::A_REVERSE | Ncurses::A_BOLD)
80
+ cell_editing_allowed true
81
+ editing_policy :EDITING_AUTO
82
+ set_data data, colnames
83
+ end
84
+ sel_col = Variable.new 0
85
+ sel_col.value = 0
86
+ tcm = atable.get_table_column_model
87
+ selcolname = atable.get_column_name sel_col.value
88
+ #
89
+ ## key bindings fo atable
90
+ # column widths
91
+ tcm.column(0).width 24
92
+ tcm.column(1).width 5
93
+ tcm.column(2).width 18
94
+ #tcm.column(2).editable false
95
+ tcm.column(3).width 7
96
+ tcm.column(4).width 5
97
+ tcm.column(5).width 8
98
+ atable.configure() do
99
+ bind_key(330) { atable.remove_column(tcm.column(atable.focussed_col)) rescue "" }
100
+ bind_key(?+) {
101
+ acolumn = atable.get_column selcolname
102
+ w = acolumn.width + 1
103
+ acolumn.width w
104
+ #atable.table_structure_changed
105
+ }
106
+ bind_key(?-) {
107
+ acolumn = atable.get_column selcolname
108
+ w = acolumn.width - 1
109
+ if w > 3
110
+ acolumn.width w
111
+ #atable.table_structure_changed
112
+ end
113
+ }
114
+ bind_key(?>) {
115
+ colcount = tcm.column_count-1
116
+ #atable.move_column sel_col.value, sel_col.value+1 unless sel_col.value == colcount
117
+ col = atable.focussed_col
118
+ atable.move_column col, col+1 unless col == colcount
119
+ }
120
+ bind_key(?<) {
121
+ col = atable.focussed_col
122
+ atable.move_column col, col-1 unless col == 0
123
+ #atable.move_column sel_col.value, sel_col.value-1 unless sel_col.value == 0
124
+ }
125
+ #bind_key(KEY_RIGHT) { sel_col.value = sel_col.value+1; current_column sel_col.value}
126
+ #bind_key(KEY_LEFT) { sel_col.value = sel_col.value-1;current_column sel_col.value}
127
+ end
128
+
129
+ @tab2 = @tp.add_tab "&ScrollTable"
130
+ f2 = @tab2.form
131
+ scroll = ScrollPane.new f2 do
132
+ name "myScroller"
133
+ row 4
134
+ col 0
135
+ width w-2
136
+ height h-2
137
+ end
138
+
139
+ $log.debug " TABLE FORM 2 #{f2} "
140
+ btable = Table.new nil do
141
+ name "mytab2"
142
+ row 0
143
+ col 0
144
+ width 78
145
+ height 15
146
+ #title "A Table"
147
+ #title_attrib (Ncurses::A_REVERSE | Ncurses::A_BOLD)
148
+ cell_editing_allowed true
149
+ editing_policy :EDITING_AUTO
150
+ set_data data, colnames
151
+ end
152
+ sel_col = Variable.new 0
153
+ sel_col.value = 0
154
+ tcm = btable.get_table_column_model
155
+ selcolname = btable.get_column_name sel_col.value
156
+ #
157
+ ## key bindings fo atable
158
+ # column widths
159
+ tcm.column(0).width 24
160
+ tcm.column(1).width 5
161
+ tcm.column(2).width 18
162
+ #tcm.column(2).editable false
163
+ tcm.column(3).width 7
164
+ tcm.column(4).width 5
165
+ tcm.column(5).width 8
166
+ scroll.child(btable)
167
+
168
+ @help = "F1 to quit. Use any key of key combination to see what's caught. #{$0} Check logger too"
169
+ RubyCurses::Label.new @form, {'text' => @help, "row" => r+h+2, "col" => 2, "color" => "yellow"}
170
+ @form.repaint
171
+ @window.wrefresh
172
+ Ncurses::Panel.update_panels
173
+ while((ch = @window.getchar()) != KEY_F1 )
174
+ # @tp.repaint
175
+ @form.handle_key(ch)
176
+ @window.wrefresh
177
+ end
178
+ #@tp.show
179
+ #@tp.handle_keys
180
+ end
181
+ end
182
+ if $0 == __FILE__
183
+ # Initialize curses
184
+ begin
185
+ # XXX update with new color and kb
186
+ VER::start_ncurses # this is initializing colors via ColorMap.setup
187
+ $log = Logger.new("view.log")
188
+ $log.level = Logger::DEBUG
189
+ n = TestTabbedPane.new
190
+ n.run
191
+ rescue => ex
192
+ ensure
193
+ VER::stop_ncurses
194
+ p ex if ex
195
+ p(ex.backtrace.join("\n")) if ex
196
+ $log.debug( ex) if ex
197
+ $log.debug(ex.backtrace.join("\n")) if ex
198
+ end
199
+ end