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
@@ -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