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
@@ -30,7 +30,7 @@ if $0 == __FILE__
30
30
  $log.debug "START MESSAGE BOX TEST #{ARGV[0]}. choice==#{choice} ---------"
31
31
  # need to pass a form, not window.
32
32
  case choice
33
- when 1:
33
+ when 1
34
34
  @mb = RubyCurses::MessageBox.new do
35
35
  title "Enter your name"
36
36
  message "Enter your name"
@@ -42,7 +42,7 @@ if $0 == __FILE__
42
42
 
43
43
  default_button 0
44
44
  end
45
- when 2:
45
+ when 2
46
46
  @mb = RubyCurses::MessageBox.new do
47
47
  title "Color selector"
48
48
  message "Select a color"
@@ -65,7 +65,7 @@ if $0 == __FILE__
65
65
  button_type :ok_cancel
66
66
  default_value "Rahul"
67
67
  end
68
- when 4:
68
+ when 4
69
69
  @form = RubyCurses::Form.new nil
70
70
  field_list = []
71
71
  titlelabel = RubyCurses::Label.new @form, {'text' => 'User', 'row'=>3, 'col'=>4, 'color'=>'black', 'bgcolor'=>'white', 'mnemonic'=>'U'}
@@ -167,7 +167,7 @@ if $0 == __FILE__
167
167
  button_type :ok
168
168
  default_button 0
169
169
  end
170
- when 5:
170
+ when 5
171
171
  @form = RubyCurses::Form.new nil
172
172
  label = RubyCurses::Label.new @form, {'text' => 'File', 'row'=>3, 'col'=>4, 'color'=>'black', 'bgcolor'=>'white', 'mnemonic'=>'F'}
173
173
  field = RubyCurses::Field.new @form do
@@ -5,7 +5,6 @@ require 'ncurses'
5
5
  require 'logger'
6
6
  require 'rbcurse'
7
7
  require 'rbcurse/rwidget'
8
- #require 'rbcurse/rform'
9
8
  require 'rbcurse/rtextarea'
10
9
  require 'rbcurse/rtextview'
11
10
  require 'rbcurse/rmenu'
@@ -23,6 +22,7 @@ if $0 == __FILE__
23
22
  begin
24
23
  # Initialize curses
25
24
  VER::start_ncurses # this is initializing colors via ColorMap.setup
25
+ #$log = Logger.new("v#{$0}.log")
26
26
  $log = Logger.new("view.log")
27
27
  $log.level = Logger::DEBUG
28
28
 
@@ -33,9 +33,9 @@ if $0 == __FILE__
33
33
 
34
34
  catch(:close) do
35
35
  colors = Ncurses.COLORS
36
- $log.debug "START #{colors} colors ---------"
36
+ $log.debug "START #{colors} colors test2.rb --------- #{@window} "
37
37
  @form = Form.new @window
38
- @form.window.printstring 0, 25, "Demo of Ruby Curses Widgets", $normalcolor, 'reverse'
38
+ @form.window.printstring 0, 30, "Demo of Ruby Curses Widgets - rbcurse", $normalcolor, 'reverse'
39
39
  r = 1; fc = 12;
40
40
  mnemonics = %w[ n l r p]
41
41
  %w[ name line regex password].each_with_index do |w,i|
@@ -66,7 +66,7 @@ if $0 == __FILE__
66
66
  row r
67
67
  col 1
68
68
  width 40
69
- height 10
69
+ height 11
70
70
  # list mylist
71
71
  list_variable $listdata
72
72
  #selection_mode :SINGLE
@@ -79,7 +79,7 @@ if $0 == __FILE__
79
79
  end
80
80
  #listb.insert 55, "hello ruby", "so long python", "farewell java", "RIP .Net"
81
81
  #$listdata.value.insert 55, "hello ruby", "so long python", "farewell java", "RIP .Net"
82
- listb.list_data_model.insert 55, "hello ruby", "so long python", "farewell java", "RIP .Net", "hi lisp", "hi perl6"
82
+ listb.list_data_model.insert 55, "hello ruby", "so long python", "farewell java", "RIP .Net", "hi lisp", "hi clojure"
83
83
  texta = TextArea.new @form do
84
84
  name "mytext"
85
85
  row 1
@@ -108,7 +108,7 @@ if $0 == __FILE__
108
108
  # list mylist
109
109
  list_variable cblist
110
110
  #selection_mode :SINGLE
111
- title "Checklist"
111
+ title "CList"
112
112
  title_attrib 'reverse'
113
113
  cell_renderer RubyCurses::CheckBoxCellRenderer.new nil, {"parent" => self, "display_length"=> @width-2}
114
114
  cell_editing_allowed true
@@ -140,14 +140,14 @@ if $0 == __FILE__
140
140
  col 52
141
141
  width 40
142
142
  height 10
143
- title "README.txt"
143
+ title "README.mark"
144
144
  title_attrib 'bold'
145
145
  print_footer true
146
146
  footer_attrib 'bold'
147
147
  end
148
- content = File.open("../README.txt","r").readlines
148
+ content = File.open("../README.markdown","r").readlines
149
149
  @textview.set_content content #, :WRAP_WORD
150
- @textview.top_row 21
150
+ #@textview.top_row 21
151
151
 
152
152
  # just for demo, lets scroll the text view as we scroll this.
153
153
  listb.bind(:ENTER_ROW, @textview) { |alist, tview| tview.top_row alist.current_index }
@@ -360,13 +360,13 @@ if $0 == __FILE__
360
360
  str << " bugs as they crop up."
361
361
  testa.goto_start
362
362
  #testa.cursor_bol
363
- testa.handle_key ?\C-a # bol
363
+ testa.handle_key ?\C-a # bol XXX should it be getbytes(0) now
364
364
  str.each_char {|c| testa.putch(c)}
365
365
  testa.repaint
366
366
  testa.handle_key KEY_DOWN # down
367
367
  testa.handle_key KEY_DOWN # down
368
368
  testa.handle_key KEY_DOWN # down
369
- testa.handle_key ?\C-a # bol
369
+ testa.handle_key ?\C-a # bol XXX should it be getbytes(0) now
370
370
  #testa.cursor_bol
371
371
  str.each_char {|c| testa.putch(c)}
372
372
  $message.value = "Wrapping textarea"
@@ -376,7 +376,7 @@ if $0 == __FILE__
376
376
  filemenu.add(item = RubyCurses::MenuItem.new("Wrap",'W'))
377
377
  item.command(@form, texta) do |it, form, testa|
378
378
  #testa.goto_start
379
- testa.handle_key ?\C-a # bol
379
+ testa.handle_key ?\C-a # bol XXX should it be getbytes(0) now
380
380
  testa.wrap_para
381
381
  testa.repaint
382
382
  throw(:menubarclose)
@@ -0,0 +1,140 @@
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
+ if $0 == __FILE__
8
+ include RubyCurses
9
+ include RubyCurses::Utils
10
+
11
+ begin
12
+ # Initialize curses
13
+ VER::start_ncurses # this is initializing colors via ColorMap.setup
14
+ $log = Logger.new("view.log")
15
+ $log.level = Logger::DEBUG
16
+
17
+ @window = VER::Window.root_window
18
+
19
+ catch(:close) do
20
+ colors = Ncurses.COLORS
21
+ @form = Form.new @window
22
+ r = 1; c = 1;
23
+ arr=[]; sarr=[]
24
+
25
+ sarr << "ACS_BBSS"
26
+ arr << ACS_BBSS
27
+ sarr << "ACS_BLOCK"
28
+ arr << ACS_BLOCK
29
+ sarr << "ACS_BOARD"
30
+ arr << ACS_BOARD
31
+ sarr << "ACS_BSBS"
32
+ arr << ACS_BSBS
33
+ sarr << "ACS_BSSB"
34
+ arr << ACS_BSSB
35
+ sarr << "ACS_BSSS"
36
+ arr << ACS_BSSS
37
+ sarr << "ACS_BTEE"
38
+ arr << ACS_BTEE
39
+ sarr << "ACS_BULLET"
40
+ arr << ACS_BULLET
41
+ sarr << "ACS_CKBOARD"
42
+ arr << ACS_CKBOARD
43
+ sarr << "ACS_DARROW"
44
+ arr << ACS_DARROW
45
+ sarr << "ACS_DEGREE"
46
+ arr << ACS_DEGREE
47
+ sarr << "ACS_DIAMOND"
48
+ arr << ACS_DIAMOND
49
+ sarr << "ACS_GEQUAL"
50
+ arr << ACS_GEQUAL
51
+ sarr << "ACS_HLINE"
52
+ arr << ACS_HLINE
53
+ sarr << "ACS_LANTERN"
54
+ arr << ACS_LANTERN
55
+ sarr << "ACS_LARROW"
56
+ arr << ACS_LARROW
57
+ sarr << "ACS_LEQUAL"
58
+ arr << ACS_LEQUAL
59
+ sarr << "ACS_LLCORNER"
60
+ arr << ACS_LLCORNER
61
+ sarr << "ACS_LRCORNER"
62
+ arr << ACS_LRCORNER
63
+ sarr << "ACS_LTEE"
64
+ arr << ACS_LTEE
65
+ sarr << "ACS_NEQUAL"
66
+ arr << ACS_NEQUAL
67
+ sarr << "ACS_PI"
68
+ arr << ACS_PI
69
+ sarr << "ACS_PLMINUS"
70
+ arr << ACS_PLMINUS
71
+ sarr << "ACS_PLUS"
72
+ arr << ACS_PLUS
73
+ sarr << "ACS_RARROW"
74
+ arr << ACS_RARROW
75
+ sarr << "ACS_RTEE"
76
+ arr << ACS_RTEE
77
+ sarr << "ACS_S1"
78
+ arr << ACS_S1
79
+ sarr << "ACS_S3"
80
+ arr << ACS_S3
81
+ sarr << "ACS_S7"
82
+ arr << ACS_S7
83
+ sarr << "ACS_S9"
84
+ arr << ACS_S9
85
+ sarr << "ACS_SBBS"
86
+ arr << ACS_SBBS
87
+ sarr << "ACS_SBSB"
88
+ arr << ACS_SBSB
89
+ sarr << "ACS_SBSS"
90
+ arr << ACS_SBSS
91
+ sarr << "ACS_SSBB"
92
+ arr << ACS_SSBB
93
+ sarr << "ACS_SSBS"
94
+ arr << ACS_SSBS
95
+ sarr << "ACS_SSSB"
96
+ arr << ACS_SSSB
97
+ sarr << "ACS_SSSS"
98
+ arr << ACS_SSSS
99
+ sarr << "ACS_STERLING"
100
+ arr << ACS_STERLING
101
+ sarr << "ACS_TTEE"
102
+ arr << ACS_TTEE
103
+ sarr << "ACS_UARROW"
104
+ arr << ACS_UARROW
105
+ sarr << "ACS_ULCORNER"
106
+ arr << ACS_ULCORNER
107
+ sarr << "ACS_URCORNER"
108
+ arr << ACS_URCORNER
109
+ sarr << "ACS_VLINE"
110
+ arr << ACS_VLINE
111
+
112
+ sarr.each_index { |i|
113
+ @window.mvaddch r,c, arr[i]
114
+ @window.mvprintw r,c+2,"%s", sarr[i]
115
+ r+=1
116
+ if r == 25
117
+ r = 1
118
+ c+=25
119
+ end
120
+ }
121
+
122
+ #@form.repaint
123
+ @window.wrefresh
124
+ Ncurses::Panel.update_panels
125
+ while((ch = @window.getchar()) != ?q.getbyte(0) )
126
+ str = keycode_tos ch
127
+ @form.handle_key(ch)
128
+ @window.wrefresh
129
+ end
130
+ end
131
+ rescue => ex
132
+ ensure
133
+ @window.destroy if !@window.nil?
134
+ VER::stop_ncurses
135
+ p ex if ex
136
+ p(ex.backtrace.join("\n")) if ex
137
+ $log.debug( ex) if ex
138
+ $log.debug(ex.backtrace.join("\n")) if ex
139
+ end
140
+ end
@@ -2,9 +2,9 @@
2
2
  require 'rubygems'
3
3
  require 'ncurses'
4
4
  require 'logger'
5
- #require 'lib/ver/keyboard'
6
5
  require 'rbcurse'
7
6
  require 'rbcurse/rtextarea'
7
+ #require 'rbcurse/oldrtextarea'
8
8
  if $0 == __FILE__
9
9
  include RubyCurses
10
10
  include RubyCurses::Utils
@@ -35,17 +35,22 @@ if $0 == __FILE__
35
35
  auto_scroll true
36
36
  title_attrib (Ncurses::A_REVERSE | Ncurses::A_BOLD)
37
37
  end
38
- @help = "q to quit. Use any key of key combination to see what's caught. Check logger too"
38
+ @help = "q to quit. Use any key of key combination to see what's caught.: #{$0} Check logger too"
39
39
  RubyCurses::Label.new @form, {'text' => @help, "row" => 21, "col" => 2, "color" => "yellow"}
40
40
 
41
41
  @form.repaint
42
42
  @window.wrefresh
43
43
  Ncurses::Panel.update_panels
44
- while((ch = @window.getchar()) != ?q )
44
+ while((ch = @window.getchar()) != ?q.getbyte(0) )
45
45
  str = keycode_tos ch
46
+ $log.debug "#{ch} got (#{str})"
46
47
  texta << "#{ch} got (#{str})"
47
48
  texta.repaint
48
- @form.handle_key(ch)
49
+ # 2010-01-01 16:00 not much point calling handle_key since textarea is not editable
50
+ # and will return unhandled and thus NOT do a repaint. so we have to repaint anyway.
51
+ #ret = @form.handle_key(ch)
52
+ #$log.debug " form handlekey returned: #{ret} "
53
+ @form.repaint
49
54
  @window.wrefresh
50
55
  end
51
56
  end
@@ -0,0 +1,72 @@
1
+ #$LOAD_PATH << "/Users/rahul/work/projects/rbcurse/"
2
+ require 'rubygems'
3
+ require 'ncurses'
4
+ require 'logger'
5
+ require 'rbcurse'
6
+ require 'rbcurse/rmulticontainer'
7
+ require 'rbcurse/rtextarea'
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
+ $log.debug "START #{colors} colors --------- testmulticomp"
23
+ @form = Form.new @window
24
+ @ctr = 1
25
+ r = 1; c = 30;
26
+
27
+ mc = MultiContainer.new @form do
28
+ name "multic"
29
+ row r
30
+ col c
31
+ width 60
32
+ height 15
33
+ title "Multiconty"
34
+ end
35
+ ctr = 1
36
+
37
+ @form.bind_key(?\M-a) do
38
+ $log.debug " Inside M-a MULTI "
39
+ texta = TextArea.new do
40
+ name "mytext#{ctr}"
41
+ title "Enter Something-#{ctr}"
42
+ title_attrib (Ncurses::A_REVERSE | Ncurses::A_BOLD)
43
+ end
44
+ mc.add texta, "Enter Something #{ctr}"
45
+ texta << "Hello World"
46
+ texta << "Hello World"
47
+ ctr += 1
48
+ end
49
+ @help = "F1 to quit. M-a to open new component. M-: for menu #{$0} "
50
+ RubyCurses::Label.new @form, {'text' => @help, "row" => 21, "col" => 2, "color" => "yellow"}
51
+
52
+ @form.repaint
53
+ @window.wrefresh
54
+ Ncurses::Panel.update_panels
55
+ while((ch = @window.getchar()) != KEY_F1 )
56
+ str = keycode_tos ch
57
+ $log.debug "#{ch} got (#{str})"
58
+ @form.handle_key ch
59
+ @form.repaint
60
+ @window.wrefresh
61
+ end
62
+ end
63
+ rescue => ex
64
+ ensure
65
+ @window.destroy if !@window.nil?
66
+ VER::stop_ncurses
67
+ p ex if ex
68
+ p(ex.backtrace.join("\n")) if ex
69
+ $log.debug( ex) if ex
70
+ $log.debug(ex.backtrace.join("\n")) if ex
71
+ end
72
+ end
@@ -0,0 +1,136 @@
1
+ #$LOAD_PATH << "/Users/rahul/work/projects/rbcurse/"
2
+ # this program tests out various widgets.
3
+ require 'rubygems'
4
+ require 'ncurses'
5
+ require 'logger'
6
+ require 'rbcurse'
7
+ require 'rbcurse/rwidget'
8
+ require 'rbcurse/rscrollform'
9
+ #require 'rbcurse/rtextarea'
10
+ #require 'rbcurse/rtextview'
11
+ #require 'rbcurse/rmenu'
12
+ #require 'rbcurse/rcombo'
13
+ #require 'rbcurse/listcellrenderer'
14
+ #require 'rbcurse/checkboxcellrenderer'
15
+ #require 'rbcurse/comboboxcellrenderer'
16
+ #require 'rbcurse/celleditor'
17
+ #require 'qdfilechooser'
18
+ #require 'rbcurse/rlistbox'
19
+ #require 'rbcurse/rmessagebox'
20
+ if $0 == __FILE__
21
+ include RubyCurses
22
+
23
+ begin
24
+ # Initialize curses
25
+ VER::start_ncurses # this is initializing colors via ColorMap.setup
26
+ #$log = Logger.new("v#{$0}.log")
27
+ $log = Logger.new("view.log")
28
+ $log.level = Logger::DEBUG
29
+
30
+ @window = VER::Window.root_window
31
+ # Initialize few color pairs
32
+ # Create the window to be associated with the form
33
+ # Un post form and free the memory
34
+
35
+ catch(:close) do
36
+ colors = Ncurses.COLORS
37
+ $log.debug "START #{colors} colors testscroller.rb --------- #{@window} "
38
+ @form = ScrollForm.new @window
39
+ # pad coordinates - the virtual area larger than screen
40
+ h = 50
41
+ w = 150
42
+ row = 1
43
+ col = 1
44
+ @form.set_pad_dimensions(row, col, h, w)
45
+ # dimensions of screen area onto which pad will paint
46
+ @form.should_print_border(true)
47
+ #@buttonpad = @form.create_pad
48
+
49
+ #@window.print_border_only 0, 0, 20+2, 100+2, $datacolor
50
+ @window.printstring 0, 30, "Demo of ScrollForm ", $normalcolor, 'reverse'
51
+ r = row + 0; fc = 12;
52
+ #mnemonics = %w[ n l r p]
53
+ %w[ name detail descr password street city country zip hobbies homepage facebook twitter buzz gmail ].each_with_index do |w,i|
54
+ field = Field.new @form do
55
+ name w
56
+ row r
57
+ col fc
58
+ display_length 30
59
+ maxlen 30
60
+ #set_buffer "abcd "
61
+ #set_label Label.new @form, {'text' => w, 'color'=>'cyan','mnemonic'=> mnemonics[i]}
62
+ set_label Label.new @form, {'text' => w, 'color'=>'cyan'}
63
+ end
64
+ r += 3
65
+ end
66
+ r = row
67
+ fc = 120
68
+ # XXX while typing in a field, cursor goes off in this case
69
+ %w[ operating_system version application build release shell band instrument guitarist drummer ].each_with_index do |w,i|
70
+ field = Field.new @form do
71
+ name w
72
+ row r
73
+ col fc
74
+ display_length 30
75
+ maxlen 30
76
+ bgcolor 'white'
77
+ color 'black'
78
+ #set_buffer "abcd "
79
+ #set_label Label.new @form, {'text' => w, 'color'=>'cyan','mnemonic'=> mnemonics[i]}
80
+ set_label Label.new @form, {'text' => w, 'color'=>'cyan'}
81
+ end
82
+ field.overwrite_mode = true
83
+ r += 3
84
+ end
85
+
86
+ $message = Variable.new
87
+ $message.value = "Message Comes Here"
88
+ message_label = RubyCurses::Label.new @form, {'text_variable' => $message, "name"=>"message_label","row" => 27, "col" => 1, "display_length" => 60, "height" => 2, 'color' => 'cyan'}
89
+
90
+ # a special case required since another form (combo popup also modifies)
91
+ $message.update_command() { message_label.repaint }
92
+
93
+ #@form.by_name["line"].display_length = 3
94
+ #@form.by_name["line"].maxlen = 3
95
+ #@form.by_name["line"].set_buffer "24"
96
+ @form.by_name["detail"].set_buffer "This form has more components"
97
+ @form.by_name["descr"].set_buffer "Use M-l/h and M-n/p for scrolling"
98
+ #@form.by_name["name"].set_focusable(false)
99
+ #@form.by_name["line"].chars_allowed = /\d/
100
+ ##@form.by_name["regex"].type(:ALPHA)
101
+ #@form.by_name["regex"].valid_regex(/^[A-Z][a-z]*/)
102
+ #@form.by_name["regex"].set_buffer "SYNOP"
103
+ #@form.by_name["regex"].display_length = 10
104
+ #@form.by_name["regex"].maxlen = 20
105
+ ##@form.by_name["regex"].bgcolor 'cyan'
106
+ #@form.by_name["password"].set_buffer ""
107
+ #@form.by_name["password"].show '*'
108
+ #@form.by_name["password"].color 'red'
109
+ ##@form.by_name["password"].bgcolor 'blue'
110
+ #@form.by_name["password"].values(%w[scotty tiger secret pass qwerty])
111
+ #@form.by_name["password"].null_allowed true
112
+
113
+ # a form level event, whenever any widget is focussed
114
+ @form.bind(:ENTER) { |f| f.label && f.label.bgcolor = 'red' if f.respond_to? :label}
115
+ @form.bind(:LEAVE) { |f| f.label && f.label.bgcolor = 'black' if f.respond_to? :label}
116
+
117
+ @form.repaint
118
+ @window.wrefresh
119
+ Ncurses::Panel.update_panels
120
+ while((ch = @window.getchar()) != KEY_F1 )
121
+ @form.handle_key(ch)
122
+ @form.repaint
123
+ @window.wrefresh
124
+ Ncurses::Panel.update_panels
125
+ end
126
+ end
127
+ rescue => ex
128
+ ensure
129
+ @window.destroy if !@window.nil?
130
+ VER::stop_ncurses
131
+ p ex if ex
132
+ p(ex.backtrace.join("\n")) if ex
133
+ $log.debug( ex) if ex
134
+ $log.debug(ex.backtrace.join("\n")) if ex
135
+ end
136
+ end