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,112 @@
1
+ # This is a new kind of splitpane, inspired by the vim editor.
2
+ # I was deeply frustrated with the Java kind of splitpane,
3
+ # which requires splitpanes within splitpanes to get several split.
4
+ # This is an attempt at getting many splits, keeping them at one level
5
+ # and keeping the interface as simple as possible, with minimal input
6
+ # from user.
7
+ # It usually takes a listbox or textview or textarea.
8
+ # It can also take an array, or string or hash.
9
+ # It supports moving the split, and increasing or decreasing the current box to some extent.
10
+ # Typically if the split is vertical, add stacks the components, one below the other.
11
+ # If horizontal, if will flow the components, to the right of previous. This can be overriden by passing
12
+ # type as :STACK or :FLOW.
13
+ #
14
+ # This does not support changing the orientation at run time, that's nice for demos, but a pain
15
+ # to get right, and results in a lot of extra code, meaning more bugs.
16
+ # TODO: create a class that contains component array and a pointer so it can give next/prev
17
+ # i am tired of maintaining this everywhere.
18
+ require 'rbcurse'
19
+ require 'rbcurse/extras/widgets/rlistbox'
20
+ require 'rbcurse/core/widgets/rtextview'
21
+ require 'rbcurse/extras/widgets/rvimsplit'
22
+
23
+ if $0 == __FILE__
24
+ class Tester
25
+ def initialize
26
+ acolor = $reversecolor
27
+ end
28
+ def run
29
+ @window = VER::Window.root_window
30
+ @form = Form.new @window
31
+
32
+ h = 20; w = 75; t = 3; l = 4
33
+
34
+ vf = :H
35
+ @vim = VimSplit.new @form, {:row => 2, :col => 5, :width => :EXPAND, :height => 25, :orientation => vf, :weight => 0.6}
36
+ lb = Listbox.new nil, :list => ["ruby","perl","lisp","java", "scala"] , :name => "mylist"
37
+ lb1 = Listbox.new nil, :list => ["roger","borg","laver","edberg", "sampras","ashe"] , :name => "mylist1"
38
+
39
+ lb2 = Listbox.new nil, :list => `gem list --local`.split("\n") , :name => "mylist2"
40
+
41
+ alist = %w[ ruby perl python java jruby macruby rubinius rails rack sinatra gawk zsh bash groovy]
42
+ str = "Hello people of this world.\nThis is a textbox.\nUse arrow keys, j/k/h/l/gg/G/C-a/C-e/C-d/C-b\n"
43
+ str << alist.join("\n")
44
+ stfl = vf == :V ? :FLOW : :STACK
45
+ @vim.add lb, :FIRST, :AUTO
46
+ @vim.add lb1, :FIRST, :AUTO #nil #0.7:AUTO
47
+ @vim.add ["mercury","venus","earth","mars","jupiter", "saturn"], :FIRST, :AUTO
48
+ @vim.add alist, :FIRST, 0.4, stfl
49
+ #@vim.add alist, :FIRST, nil, stfl
50
+ @vim.add alist.shuffle, :FIRST, 0.6, stfl
51
+ @vim.add lb2, :SECOND, :AUTO
52
+ @vim.add str, :SECOND, :AUTO
53
+ ok_button = Button.new @form do
54
+ text "+"
55
+ name "+"
56
+ row 27
57
+ col 10
58
+ end
59
+ #ok_button.command { |form| @vim.weight(@vim.weight + 0.1) }
60
+ ok_button.command { @vim.increase_weight }
61
+
62
+
63
+ k_button = Button.new @form do
64
+ text "-"
65
+ name "-"
66
+ row 27
67
+ col 17
68
+ end
69
+ #k_button.command { |form| @vim.weight( @vim.weight - 0.1) }
70
+ k_button.command { |form| @vim.decrease_weight }
71
+
72
+ #
73
+ @help = "F10 to quit. "
74
+ RubyCurses::Label.new @form, {'text' => @help, "row" => 1, "col" => 2, "color" => "yellow"}
75
+ @form.repaint
76
+ @window.wrefresh
77
+ Ncurses::Panel.update_panels
78
+ ctr = 0
79
+ row = 2
80
+ while((ch = @window.getchar()) != Ncurses::KEY_F10 )
81
+ ret = @form.handle_key(ch)
82
+ @window.wrefresh
83
+ #ret = @vim.handle_key ch
84
+ if ret == :UNHANDLED
85
+ str = keycode_tos ch
86
+ $log.debug " UNHANDLED #{str} by Vim #{ret} "
87
+ end
88
+ end
89
+
90
+ @window.destroy
91
+
92
+ end
93
+ end
94
+ include RubyCurses
95
+ include RubyCurses::Utils
96
+ # Initialize curses
97
+ begin
98
+ # XXX update with new color and kb
99
+ VER::start_ncurses # this is initializing colors via ColorMap.setup
100
+ $log = Logger.new("rbc13.log")
101
+ $log.level = Logger::DEBUG
102
+ n = Tester.new
103
+ n.run
104
+ rescue => ex
105
+ ensure
106
+ VER::stop_ncurses
107
+ p ex if ex
108
+ puts(ex.backtrace.join("\n")) if ex
109
+ $log.debug( ex) if ex
110
+ $log.debug(ex.backtrace.join("\n")) if ex
111
+ end
112
+ end
@@ -0,0 +1,64 @@
1
+ # this is a test program, tests out tabbed panes. type F1 to exit
2
+ #
3
+ require 'rbcurse'
4
+ require 'rbcurse/core/util/widgetshortcuts'
5
+
6
+ include RubyCurses
7
+
8
+ class SetupMessagebox
9
+ include RubyCurses::WidgetShortcuts
10
+ def initialize config={}, &block
11
+ @window = VER::Window.root_window
12
+ @form = Form.new @window
13
+ end
14
+ def run
15
+ _create_form
16
+ @form.repaint
17
+ @window.wrefresh
18
+ while ((ch = @window.getchar()) != 999)
19
+ break if ch == ?\C-q.getbyte(0)
20
+ @form.handle_key ch
21
+ @window.wrefresh
22
+ end
23
+ end
24
+ def _create_form
25
+ widget_shortcuts_init
26
+ stack :margin_top => 2, :margin_left => 3, :width => 50 , :color => :cyan, :bgcolor => :black do
27
+ label :text => " Details ", :color => :blue, :attr => :reverse, :width => :expand, :justify => :center
28
+ blank
29
+ field :text => "john", :attr => :reverse, :label => "%15s" % ["Name: "]
30
+ field :label => "%15s" % ["Address: "], :width => 15, :attr => :reverse
31
+ check :text => "Using version control", :value => true, :onvalue => "yes", :offvalue => "no"
32
+ check :text => "Upgraded to Lion", :value => false, :onvalue => "yes", :offvalue => "no"
33
+ blank
34
+ radio :text => "Linux", :value => "LIN", :group => :os
35
+ radio :text => "OSX", :value => "OSX", :group => :os
36
+ radio :text => "Window", :value => "Win", :group => :os
37
+ flow :margin_top => 2, :margin_left => 4, :item_width => 15 do
38
+ button :text => "Ok"
39
+ button :text => "Cancel"
40
+ button :text => "Apply"
41
+ end
42
+ end
43
+ end
44
+
45
+ end
46
+ if $0 == __FILE__
47
+ # Initialize curses
48
+ begin
49
+ # XXX update with new color and kb
50
+ VER::start_ncurses # this is initializing colors via ColorMap.setup
51
+ $log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"rbc13.log")))
52
+ $log.level = Logger::DEBUG
53
+ tp = SetupMessagebox.new()
54
+ buttonindex = tp.run
55
+ $log.debug "XXX: MESSAGEBOX retirned #{buttonindex} "
56
+ rescue => ex
57
+ ensure
58
+ VER::stop_ncurses
59
+ p ex if ex
60
+ p(ex.backtrace.join("\n")) if ex
61
+ $log.debug( ex) if ex
62
+ $log.debug(ex.backtrace.join("\n")) if ex
63
+ end
64
+ end
@@ -0,0 +1,126 @@
1
+ # this is a test program, tests out widget shortcuts. type C-q to exit
2
+ #
3
+ require 'rbcurse'
4
+ require 'rbcurse/core/util/widgetshortcuts'
5
+
6
+ include RubyCurses
7
+ include RubyCurses::Utils
8
+
9
+ class SetupMessagebox
10
+ include RubyCurses::WidgetShortcuts
11
+ def initialize config={}, &block
12
+ @window = VER::Window.root_window
13
+ @form = Form.new @window
14
+ end
15
+ def run
16
+ _create_form
17
+ @form.repaint
18
+ @window.wrefresh
19
+ catch(:close) do
20
+ while ((ch = @window.getchar()) != 999)
21
+ break if ch == ?\C-q.getbyte(0)
22
+ @form.handle_key ch
23
+ @window.wrefresh
24
+ end
25
+ end # catch
26
+ end
27
+ def _create_form
28
+ widget_shortcuts_init
29
+ stack :margin_top => 1, :width => :expand do
30
+ label :text => " Details ", :color => :cyan, :attr => :reverse, :width => :expand, :justify => :center
31
+ flow :margin_top => 1, :margin_left => 4, :item_width => 50 do
32
+ stack :margin_top => 0, :margin_left => 3, :width => 50 , :color => :cyan, :bgcolor => :black do
33
+ box do
34
+ field :text => "steve", :attr => :reverse, :label => "%15s" % ["Name: "]
35
+ field :label => "%15s" % ["Address: "], :width => 15, :attr => :reverse
36
+ blank
37
+ check :text => "Using version control", :value => true, :onvalue => "yes", :offvalue => "no" do |eve|
38
+ unless eve.item.value
39
+ alert "NO VC! We need to talk"
40
+ end
41
+ end
42
+ check :text => "Upgraded to Lion", :value => false, :onvalue => "yes", :offvalue => "no" do |eve|
43
+ unless eve.item.value
44
+ alert "You goin back to Snow Leopard?"
45
+ end
46
+ end
47
+ end # box
48
+ end
49
+ stack :margin_top => 0, :margin_left => 3, :width => 50 , :color => :cyan, :bgcolor => :black do
50
+ box :title => "OS Maintenance", :margin_left => 2 do
51
+ radio :text => "Linux", :value => "LIN", :group => :os
52
+ radio :text => "OSX", :value => "OSX", :group => :os
53
+ radio :text => "Window", :value => "Win", :group => :os
54
+ blank
55
+ flow :item_width => 15 do
56
+ button :text => "Install" do
57
+ # you can avoid this by giving the radio buttons your own Variable (see test2.rb)
58
+ choice = @variables[:os].value
59
+ case choice
60
+ when ""
61
+ alert "Select an OS"
62
+ when "OSX", "LIN"
63
+ alert "Good choice"
64
+ else
65
+ alert "Pfft !"
66
+ end
67
+ end
68
+ button :text => "Uninstall"
69
+ button :text => "Delete"
70
+ end
71
+ end # box
72
+ end
73
+ end # flow
74
+ #button :text => "Execute"
75
+ text = [" #[reverse]Unix Philosophy #[end] ",
76
+ "#[fg=green, underline]Eric Raymond#[end] in his book, #[fg=green, underline]The Art of Unix Programming#[end] summarized the Unix philosophy.",
77
+ " ",
78
+ "Rule of #[fg=yellow]Modularity#[end]: Write simple parts connected by clean interfaces.",
79
+ "Rule of #[fg=blue]Clarity#[end]: #[bold]Clarity#[end] is better than cleverness.",
80
+ "Rule of #[fg=red]Separation#[end]: Separate #[bold]policy#[end] from mechanism; separate interfaces from engines.",
81
+ "Rule of #[fg=green]Simplicity#[end]: Design for #[bold]simplicity;#[end] add complexity only where you must.",
82
+ "Rule of #[fg=magenta]Parsimony#[end]: Write a big program only when it is clear by demonstration that nothing else will do.",
83
+ "Rule of #[fg=cyan]Representation#[end]: Fold knowledge into #[bold]data#[end] so program logic can be stupid and robust"]
84
+ text << "For more check: #[underline]http://en.wikipedia.org/wiki/Unix_philosophy#Eric_Raymond#[end]"
85
+ formatted = []
86
+ #text.each { |line| formatted << @window.convert_to_chunk(line) }
87
+
88
+ #textview :text => formatted
89
+ #textview do |t| t.formatted_text(text, :tmux) end
90
+ t = textview :title => 'tmux format'
91
+ t.formatted_text(text, :tmux)
92
+ t1 = textview :title => 'ansi formatted document'
93
+ text = File.open("data/color.2","r").readlines
94
+ t1.formatted_text(text, :ansi)
95
+
96
+ flow do
97
+ #box do
98
+ button :text => " Ok " do alert "Pressed okay" end
99
+ button :text => "Cancel" do confirm "Do you wish to Quit?" ; throw :close; end
100
+ button :text => "Apply "
101
+ #end
102
+ end
103
+
104
+ end
105
+
106
+ end
107
+ end
108
+ if $0 == __FILE__
109
+ # Initialize curses
110
+ begin
111
+ # XXX update with new color and kb
112
+ VER::start_ncurses # this is initializing colors via ColorMap.setup
113
+ $log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"rbc13.log")))
114
+ $log.level = Logger::DEBUG
115
+ tp = SetupMessagebox.new()
116
+ buttonindex = tp.run
117
+ $log.debug "XXX: MESSAGEBOX retirned #{buttonindex} "
118
+ rescue => ex
119
+ ensure
120
+ VER::stop_ncurses
121
+ p ex if ex
122
+ p(ex.backtrace.join("\n")) if ex
123
+ $log.debug( ex) if ex
124
+ $log.debug(ex.backtrace.join("\n")) if ex
125
+ end
126
+ end
data/examples/todo.db ADDED
Binary file
data/examples/todo.yml ADDED
@@ -0,0 +1,191 @@
1
+ ---
2
+ - - FIXME
3
+ - MSGBOX
4
+ - 5
5
+ - "Confirm dialog: box vertical line overwritten in 2 spots"
6
+ - TODO
7
+ - - FIXME
8
+ - MSGBOX
9
+ - 5
10
+ - "Confirm dialog: use normal key as hotkey also"
11
+ - TODO
12
+ - 2009-01-20 11:44:49.753534 +05:30
13
+ - - FIXME
14
+ - MSGBOX
15
+ - 5
16
+ - "Confirm dialog: arrow keys not navigating anylonger"
17
+ - TODO
18
+ - 2009-01-20 11:45:27.031136 +05:30
19
+ - - FIXME
20
+ - GEN
21
+ - 9
22
+ - Message Box sizing
23
+ - TODO
24
+ - 2009-01-22 20:39:21.220964 +05:30
25
+ - - DONE
26
+ - LIST
27
+ - 5
28
+ - case insensitive char search in list and combo
29
+ - TESTED
30
+ - 2009-02-21 20:43:05.662213 +05:30
31
+ - - DONE
32
+ - LIST
33
+ - 5
34
+ - case insensitive char search in list and combo
35
+ - TESTED
36
+ - 2009-02-21 20:44:29.277384 +05:30
37
+ - - DONE
38
+ - TABLE
39
+ - 5
40
+ - increase the maxlen of this field please. Let us see how it goes.
41
+ - TESTED
42
+ - - DONE
43
+ - TABLE
44
+ - 5
45
+ - Can we disable down arrow in Chkbox in table?
46
+ - TESTED
47
+ - 2009-01-19 00:00:00.242912 +05:30
48
+ - - DONE
49
+ - TABLE
50
+ - 0
51
+ - editing on enter
52
+ - TESTED
53
+ - 2009-01-19 01:37:00.242912 +05:30
54
+ - - DONE
55
+ - TABLE
56
+ - 5
57
+ - cell editors pcol is not being reset each time
58
+ - TESTED
59
+ - 2009-01-19 17:47:00.419937 +05:30
60
+ - - DONE
61
+ - TABLE
62
+ - 5
63
+ - Use TAB for intercell navig. use M-TAB for next f
64
+ - TESTED
65
+ - 2009-01-20 00:38:19.606544 +05:30
66
+ - - DONE
67
+ - TABLE
68
+ - 5
69
+ - Searching
70
+ - TESTED
71
+ - 2009-02-21 20:42:10.140948 +05:30
72
+ - - DONE
73
+ - TABLE
74
+ - 3
75
+ - Columns editable or not
76
+ - TESTED
77
+ - 2009-02-21 20:43:10.386261 +05:30
78
+ - - DONE
79
+ - TABLE
80
+ - 1
81
+ - Any way to start a table with no data and pop late
82
+ - TODO
83
+ - 2009-02-21 20:43:33.172668 +05:30
84
+ - - DONE
85
+ - TABLE
86
+ - 3
87
+ - Columns editable or not
88
+ - TESTED
89
+ - 2009-02-21 20:44:33.451462 +05:30
90
+ - - DONE
91
+ - TABLE
92
+ - 1
93
+ - Any way to start a table with no data and pop late
94
+ - TODO
95
+ - 2009-02-21 20:44:48.137930 +05:30
96
+ - - DONE
97
+ - GEN
98
+ - 5
99
+ - Make widget of Keylabelprinter
100
+ - TESTED
101
+ - 2009-01-20 00:38:43.052790 +05:30
102
+ - - DONE
103
+ - GEN
104
+ - 5
105
+ - "Added Action class shared by Button Menuitem "
106
+ - TESTED
107
+ - 2009-01-22 18:08:28.026892 +05:30
108
+ - - DONE
109
+ - GEN
110
+ - 5
111
+ - "Added PopupMenu 2009-01-22 18:09 "
112
+ - TESTED
113
+ - 2009-01-22 18:09:34.437147 +05:30
114
+ - - TODO
115
+ - LIST
116
+ - 0
117
+ - call on_enter and on_leave of component
118
+ - TOTEST
119
+ - 2009-01-19 15:38:27.091120 +05:30
120
+ - - TODO
121
+ - LIST
122
+ - 5
123
+ - case insensitive char search in list and combo
124
+ - TESTED
125
+ - - TODO
126
+ - TABLE
127
+ - 3
128
+ - Columns editable or not
129
+ - TESTED
130
+ - - TODO
131
+ - TABLE
132
+ - 1
133
+ - Any way to start a table with no data and pop late
134
+ - TODO
135
+ - - TODO
136
+ - TABLE
137
+ - 1
138
+ - table.set_data should check if models already created.
139
+ - TODO
140
+ - - TODO
141
+ - TABLE
142
+ - 5
143
+ - Set column_class in TableColumn, to avoid hassles
144
+ - TODO
145
+ - - TODO
146
+ - TABLE
147
+ - 2
148
+ - Table sorting and filtering is required - using VIEW
149
+ - TODO
150
+ - - TODO
151
+ - TABLE
152
+ - 5
153
+ - Table height and col widths auto sizing or FILLING extra space.
154
+ - TODO
155
+ - - TODO
156
+ - TEXTAREA
157
+ - 9
158
+ - "Textarea: wrap options NONE, COLUMN"
159
+ - TODO
160
+ - 2009-01-20 01:04:15.084400 +05:30
161
+ - - TODO
162
+ - GEN
163
+ - 5
164
+ - Modified should check if value changed, not UP etc
165
+ - TOTEST
166
+ - - TODO
167
+ - GEN
168
+ - 5
169
+ - Give a decent FileChooser and FileSaver
170
+ - TODO
171
+ - - TODO
172
+ - GEN
173
+ - 5
174
+ - Focus Traversable vs focusable
175
+ - TODO
176
+ - - TODO
177
+ - GEN
178
+ - 5
179
+ - "Action class: fire event for listeners"
180
+ - TODO
181
+ - 2009-01-22 20:09:50.624075 +05:30
182
+ - - TODO
183
+ - FIELD
184
+ - 5
185
+ - "Field: OVERWRITE Mode"
186
+ - TODO
187
+ - - TODO
188
+ - FIELD
189
+ - 5
190
+ - "Field: Auto-skip when reaching end of maxlen"
191
+ - TODO