rbcurse-core 0.0.0

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 (94) hide show
  1. data/README.md +69 -0
  2. data/VERSION +1 -0
  3. data/examples/abasiclist.rb +151 -0
  4. data/examples/alpmenu.rb +46 -0
  5. data/examples/app.sample +17 -0
  6. data/examples/atree.rb +100 -0
  7. data/examples/common/file.rb +45 -0
  8. data/examples/data/README.markdown +9 -0
  9. data/examples/data/brew.txt +38 -0
  10. data/examples/data/color.2 +37 -0
  11. data/examples/data/gemlist.txt +60 -0
  12. data/examples/data/lotr.txt +12 -0
  13. data/examples/data/ports.txt +136 -0
  14. data/examples/data/table.txt +37 -0
  15. data/examples/data/tasks.csv +88 -0
  16. data/examples/data/tasks.txt +27 -0
  17. data/examples/data/todo.txt +10 -0
  18. data/examples/data/todocsv.csv +28 -0
  19. data/examples/data/unix1.txt +21 -0
  20. data/examples/data/unix2.txt +11 -0
  21. data/examples/dbdemo.rb +487 -0
  22. data/examples/dirtree.rb +90 -0
  23. data/examples/newtabbedwindow.rb +100 -0
  24. data/examples/newtesttabp.rb +92 -0
  25. data/examples/tabular.rb +132 -0
  26. data/examples/tasks.rb +167 -0
  27. data/examples/term2.rb +83 -0
  28. data/examples/testkeypress.rb +72 -0
  29. data/examples/testlistbox.rb +158 -0
  30. data/examples/testmessagebox.rb +140 -0
  31. data/examples/testree.rb +106 -0
  32. data/examples/testwsshortcuts.rb +66 -0
  33. data/examples/testwsshortcuts2.rb +127 -0
  34. data/lib/rbcurse.rb +8 -0
  35. data/lib/rbcurse/core/docs/index.txt +73 -0
  36. data/lib/rbcurse/core/include/action.rb +40 -0
  37. data/lib/rbcurse/core/include/appmethods.rb +112 -0
  38. data/lib/rbcurse/core/include/bordertitle.rb +41 -0
  39. data/lib/rbcurse/core/include/chunk.rb +182 -0
  40. data/lib/rbcurse/core/include/io.rb +953 -0
  41. data/lib/rbcurse/core/include/listcellrenderer.rb +140 -0
  42. data/lib/rbcurse/core/include/listeditable.rb +317 -0
  43. data/lib/rbcurse/core/include/listscrollable.rb +590 -0
  44. data/lib/rbcurse/core/include/listselectable.rb +264 -0
  45. data/lib/rbcurse/core/include/multibuffer.rb +83 -0
  46. data/lib/rbcurse/core/include/orderedhash.rb +77 -0
  47. data/lib/rbcurse/core/include/ractionevent.rb +67 -0
  48. data/lib/rbcurse/core/include/rchangeevent.rb +27 -0
  49. data/lib/rbcurse/core/include/rhistory.rb +62 -0
  50. data/lib/rbcurse/core/include/rinputdataevent.rb +47 -0
  51. data/lib/rbcurse/core/include/vieditable.rb +170 -0
  52. data/lib/rbcurse/core/system/colormap.rb +163 -0
  53. data/lib/rbcurse/core/system/keyboard.rb +150 -0
  54. data/lib/rbcurse/core/system/keydefs.rb +30 -0
  55. data/lib/rbcurse/core/system/ncurses.rb +218 -0
  56. data/lib/rbcurse/core/system/panel.rb +162 -0
  57. data/lib/rbcurse/core/system/window.rb +901 -0
  58. data/lib/rbcurse/core/util/ansiparser.rb +117 -0
  59. data/lib/rbcurse/core/util/app.rb +1235 -0
  60. data/lib/rbcurse/core/util/basestack.rb +407 -0
  61. data/lib/rbcurse/core/util/bottomline.rb +1850 -0
  62. data/lib/rbcurse/core/util/colorparser.rb +71 -0
  63. data/lib/rbcurse/core/util/focusmanager.rb +31 -0
  64. data/lib/rbcurse/core/util/padreader.rb +189 -0
  65. data/lib/rbcurse/core/util/rcommandwindow.rb +587 -0
  66. data/lib/rbcurse/core/util/rdialogs.rb +619 -0
  67. data/lib/rbcurse/core/util/viewer.rb +149 -0
  68. data/lib/rbcurse/core/util/widgetshortcuts.rb +505 -0
  69. data/lib/rbcurse/core/widgets/applicationheader.rb +102 -0
  70. data/lib/rbcurse/core/widgets/box.rb +58 -0
  71. data/lib/rbcurse/core/widgets/divider.rb +310 -0
  72. data/lib/rbcurse/core/widgets/keylabelprinter.rb +178 -0
  73. data/lib/rbcurse/core/widgets/rcombo.rb +238 -0
  74. data/lib/rbcurse/core/widgets/rcontainer.rb +415 -0
  75. data/lib/rbcurse/core/widgets/rlink.rb +30 -0
  76. data/lib/rbcurse/core/widgets/rlist.rb +723 -0
  77. data/lib/rbcurse/core/widgets/rmenu.rb +939 -0
  78. data/lib/rbcurse/core/widgets/rmenulink.rb +22 -0
  79. data/lib/rbcurse/core/widgets/rmessagebox.rb +373 -0
  80. data/lib/rbcurse/core/widgets/rprogress.rb +118 -0
  81. data/lib/rbcurse/core/widgets/rtabbedpane.rb +615 -0
  82. data/lib/rbcurse/core/widgets/rtabbedwindow.rb +68 -0
  83. data/lib/rbcurse/core/widgets/rtextarea.rb +920 -0
  84. data/lib/rbcurse/core/widgets/rtextview.rb +780 -0
  85. data/lib/rbcurse/core/widgets/rtree.rb +787 -0
  86. data/lib/rbcurse/core/widgets/rwidget.rb +3040 -0
  87. data/lib/rbcurse/core/widgets/scrollbar.rb +143 -0
  88. data/lib/rbcurse/core/widgets/statusline.rb +94 -0
  89. data/lib/rbcurse/core/widgets/tabular.rb +264 -0
  90. data/lib/rbcurse/core/widgets/tabularwidget.rb +1211 -0
  91. data/lib/rbcurse/core/widgets/textpad.rb +516 -0
  92. data/lib/rbcurse/core/widgets/tree/treecellrenderer.rb +150 -0
  93. data/lib/rbcurse/core/widgets/tree/treemodel.rb +428 -0
  94. metadata +156 -0
@@ -0,0 +1,27 @@
1
+ =begin
2
+ * Name: ChangeEvent
3
+ * Description: Event used to notify interested parties that state of component has changed
4
+ * Author: rkumar (arunachalesha)
5
+
6
+ --------
7
+ * Date: 2010-02-26 11:32
8
+ * License:
9
+ Same as Ruby's License (http://www.ruby-lang.org/LICENSE.txt)
10
+
11
+ =end
12
+
13
+ # Event created when state changed (as in ViewPort)
14
+ module RubyCurses
15
+ class ChangeEvent
16
+ attr_accessor :source
17
+ def initialize source
18
+ @source = source
19
+ end
20
+ def to_s
21
+ inspect
22
+ end
23
+ def inspect
24
+ "ChangeEvent #{@source}"
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,62 @@
1
+ # ----------------------------------------------------------------------------- #
2
+ # File: rhistory.rb
3
+ # Description: a module that pops up history, and then updates selected value
4
+ # This goes with Field.
5
+ # e.g.,
6
+ # field.extend(FieldHistory)
7
+ #
8
+ # The module name History was throwing up errors
9
+ # Author: rkumar http://github.com/rkumar/rbcurse/
10
+ # Date: 2011-11-27 - 18:10
11
+ # License: Same as Ruby's License (http://www.ruby-lang.org/LICENSE.txt)
12
+ # Last update: 2011-11-27 - 20:11
13
+ # ----------------------------------------------------------------------------- #
14
+ #
15
+ # supply history for this object, at least give an empty array
16
+ # widget would typically be Field,
17
+ # otherwise it should implement *text()* for getting and setting value
18
+ # and a *CHANGED* event for when user has modified a value and moved out
19
+ # You can externally set $history_key to any unused key, otherwise it is M-h
20
+ module RubyCurses
21
+ extend self
22
+ module FieldHistory
23
+ # pass the array of history values
24
+ def history arr
25
+ return @history unless arr
26
+ @history = arr
27
+ $history_key ||= ?\M-h
28
+ # ensure that the field is not overriding this in handle_key
29
+ bind_key($history_key) { _show_history }
30
+ # widget should have CHANGED event, or this will either give error, or just not work
31
+ # else please update history whenever you want a value to be retrieved
32
+ bind(:CHANGED) { @history << @text unless @history.include? @text }
33
+ end
34
+
35
+ # pass in some configuration for histroy such as row and column to show popup on
36
+ def history_config config={}
37
+ @_history_config = config
38
+ end
39
+
40
+ # popup the hist
41
+ #
42
+ private
43
+ def _show_history
44
+ return unless @history
45
+ list = @history
46
+ # calculate r and c
47
+ c = @_history_config[:col] || @col # this is also dependent on window coords, as in a status_window or messagebox
48
+ r = @row - 10
49
+ if @row < 10
50
+ r = @row + 1
51
+ end
52
+ r = @_history_config[:row] || r
53
+ ret = popuplist(list, :row => r, :col => c, :title => " History ")
54
+ if ret
55
+ self.text = list[ret]
56
+ self.set_form_col
57
+ end
58
+ @form.repaint if @form
59
+ @window.wrefresh if @window
60
+ end
61
+ end # mod History
62
+ end # mod RubyC
@@ -0,0 +1,47 @@
1
+ =begin
2
+ * Name: InputDataEvent
3
+ * Description: Event created when data modified in Field or TextEdit
4
+ * Author: rkumar (arunachalesha)
5
+
6
+ --------
7
+ * Date: 2008-12-24 17:27
8
+ * License:
9
+ Same as Ruby's License (http://www.ruby-lang.org/LICENSE.txt)
10
+
11
+ NOTE: this is how we used to write code in the Java days. Anyone reading this source,
12
+ this is NOT how to code in rubyland. Please see this link, for how to code such as class:
13
+ http://blog.grayproductions.net/articles/all_about_struct
14
+
15
+ =end
16
+
17
+ # Event created when data modified in Field or TextEdit
18
+ # 2008-12-24 17:54
19
+ module RubyCurses
20
+ class InputDataEvent
21
+ attr_accessor :index0, :index1, :source, :type, :row, :text
22
+ def initialize index0, index1, source, type, row, text
23
+ @index0 = index0
24
+ @index1 = index1
25
+ @source = source
26
+ @type = type
27
+ @row = row
28
+ @text = text
29
+ end
30
+ # until now to_s was returning inspect, but to make it easy for users let us return the value
31
+ # they most expect which is the text that was changed
32
+ def to_s
33
+ inspect
34
+ end
35
+ def inspect
36
+ ## now that textarea.to_s prints content we shouldn pass it here.
37
+ #"#{@type.to_s}, #{@source}, ind0:#{@index0}, ind1:#{@index1}, row:#{@row}, text:#{@text}"
38
+ "#{@type.to_s}, ind0:#{@index0}, ind1:#{@index1}, row:#{@row}, text:#{@text}"
39
+ end
40
+ # this is so that earlier applications were getting source in the block, not an event. they
41
+ # were doing a fld.getvalue, so we must keep those apps running
42
+ # @since 1.2.0 added 2010-09-11 12:25
43
+ def getvalue
44
+ @source.getvalue
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,170 @@
1
+ #**************************************************************
2
+ # Author: rkumar (arunachalesha)
3
+ # Date: 2010-03-11 22:18
4
+ # Provides the caller ability to do some edit operations
5
+ # on list widgets using either keys (vim largely)
6
+ # or a menu. made originally for textview and multitextview
7
+ #
8
+ #**************************************************************
9
+
10
+
11
+ require 'rbcurse/core/include/listeditable'
12
+ module ViEditable
13
+ include ListEditable
14
+
15
+ def vieditable_init
16
+ $log.debug " inside vieditable_init "
17
+ @editable = true
18
+ bind_key( ?C, :edit_line)
19
+ #bind_key( ?o, :insert_line)
20
+ #bind_key( ?O) { insert_line(@current_index-1) }
21
+ bind_key( ?o) { insert_line(@current_index+1) }
22
+ bind_key( ?O) { insert_line(@current_index) }
23
+ bind_key( ?D, :delete_eol)
24
+ bind_key( [?d, ?$], :delete_eol)
25
+ bind_key( [?d, ?d] , :delete_line )
26
+ bind_key( [?d, ?w], :delete_word )
27
+ bind_key( [?d, ?t], :delete_till )
28
+ bind_key( [?d, ?f], :delete_forward )
29
+ bind_key( ?\C-_ ) { @undo_handler.undo if @undo_handler }
30
+ bind_key( ?u ) { @undo_handler.undo if @undo_handler }
31
+ bind_key( ?\C-r ) { @undo_handler.redo if @undo_handler }
32
+ bind_key( ?x, :delete_curr_char )
33
+ bind_key( ?X, :delete_prev_char )
34
+ bind_key( [?y, ?y] , :kill_ring_save )
35
+ bind_key( ?p, :yank ) # paste after this line
36
+ bind_key( ?P ) { yank(@current_index - 1) } # should be before this line
37
+ bind_key(?\w, :forward_word)
38
+ bind_key(?f, :forward_char)
39
+ bind_key(?\M-y, :yank_pop)
40
+ bind_key(?\M-w, :kill_ring_save)
41
+ @_events.push :CHANGE # thru vieditable
42
+
43
+ end
44
+ ##
45
+ # Separate mappings for listboxes.
46
+ # Some methods don;'t make sense for listboxes and are crashing
47
+ # since not present for them. f was being overwritten, too.
48
+ # Sorry for duplication, need to clean this somehow.
49
+ def vieditable_init_listbox
50
+ $log.debug " inside vieditable_init_listbox "
51
+ @editable = true
52
+ bind_key( ?C, :edit_line)
53
+ bind_key( ?o) { insert_line(@current_index+1) }
54
+ bind_key( ?O) { insert_line(@current_index) }
55
+ bind_key( [?d, ?d] , :delete_line )
56
+ bind_key( ?\C-_ ) { @undo_handler.undo if @undo_handler }
57
+ bind_key( ?u ) { @undo_handler.undo if @undo_handler }
58
+ bind_key( ?\C-r ) { @undo_handler.redo if @undo_handler }
59
+ bind_key( [?y, ?y] , :kill_ring_save )
60
+ bind_key( ?p, :yank ) # paste after this line
61
+ #bind_key( ?P ) { yank(@current_index - 1) } # should be before this line
62
+ # seems -1 was pasting 2 lines before
63
+ bind_key( ?P ) { yank(@current_index - 0) } # should be before this line
64
+ bind_key(?\w, :forward_word)
65
+ bind_key(?\M-y, :yank_pop)
66
+ bind_key(?\C-y, :yank)
67
+ bind_key(?\M-w, :kill_ring_save)
68
+ @_events.push :CHANGE # thru vieditable
69
+ #bind_key( ?D, :delete_eol)
70
+ #bind_key( [?d, ?$], :delete_eol)
71
+ #bind_key(?f, :forward_char)
72
+ #bind_key( ?x, :delete_curr_char )
73
+ #bind_key( ?X, :delete_prev_char )
74
+ #bind_key( [?d, ?w], :delete_word )
75
+ #bind_key( [?d, ?t], :delete_till )
76
+ #bind_key( [?d, ?f], :delete_forward )
77
+
78
+ end
79
+
80
+ # currently only adding delete_line and some yank pop functions
81
+ # These will all give wrong results in table due to _header_offset
82
+ def vieditable_init_tabular
83
+ $log.debug " inside vieditable_init tabular"
84
+ @editable = true
85
+ #bind_key( ?C, :edit_line)
86
+ #bind_key( ?o, :insert_line)
87
+ #bind_key( ?O) { insert_line(@current_index-1) }
88
+ #bind_key( ?o) { insert_line(@current_index+1) }
89
+ #bind_key( ?O) { insert_line(@current_index) }
90
+ bind_key( [?d, ?d] , :delete_line )
91
+ #bind_key( ?\C-_ ) { @undo_handler.undo if @undo_handler }
92
+ #bind_key( ?u ) { @undo_handler.undo if @undo_handler }
93
+ #bind_key( ?\C-r ) { @undo_handler.redo if @undo_handler }
94
+ bind_key( [?y, ?y] , :kill_ring_save )
95
+ bind_key( ?p, :yank ) # paste after this line
96
+ bind_key( ?P ) { yank(@current_index - 1) } # should be before this line
97
+ bind_key(?\M-y, :yank_pop)
98
+ bind_key(?\M-w, :kill_ring_save)
99
+ @_events.push :CHANGE # thru vieditable
100
+ end
101
+
102
+ ##
103
+ # edit current or given line
104
+ def edit_line lineno=@current_index
105
+ line = self[lineno]
106
+ prompt = "Edit: "
107
+ maxlen = 80
108
+ config={};
109
+ oldline = line.dup
110
+ config[:default] = line
111
+ ret, str = rbgetstr(@form.window, $error_message_row, $error_message_col, prompt, maxlen, config)
112
+ $log.debug " rbgetstr returned #{ret} , #{str} "
113
+ return if ret != 0
114
+ self[lineno].replace(str)
115
+ fire_handler :CHANGE, InputDataEvent.new(0,oldline.length, self, :DELETE_LINE, lineno, oldline) # 2008-12-24 18:34
116
+ fire_handler :CHANGE, InputDataEvent.new(0,str.length, self, :INSERT_LINE, lineno, str)
117
+ @repaint_required = true
118
+ @widget_scrolled = true
119
+ end
120
+ ##
121
+ # insert a line
122
+ # FIXME needs to fire handler 2010-05-23 11:40
123
+ def insert_line lineno=@current_index
124
+ prompt = "Insert: "
125
+ maxlen = 80
126
+ #config={};
127
+ #config[:default] = line
128
+ #ret, str = rbgetstr(@form.window, $error_message_row, $error_message_col, prompt, maxlen, config)
129
+ ret, str = input_string prompt
130
+ #ret, str = rbgetstr(@form.window, @row+@height-1, @col+1, prompt, maxlen, config)
131
+ $log.debug " rbgetstr returned #{ret} , #{str} "
132
+ return if ret != 0
133
+ @list.insert lineno, str
134
+ ## added handler on 2010-05-23 11:46 - undo works - tested in testlistbox.rb
135
+ fire_handler :CHANGE, InputDataEvent.new(0,str.length, self, :INSERT_LINE, lineno, str)
136
+ @widget_scrolled = true
137
+ @repaint_required = true
138
+ end
139
+ ##
140
+ # common method to edit given string
141
+ # @param [String] string to edit/modify
142
+ # @param [String] prompt to display before string
143
+ # @param [int] max length of input
144
+ # @return [0, -1] return value 0 if okay, -1 if error
145
+ #
146
+ def edit_string string, prompt="Edit: ", maxlen=80
147
+ config={};
148
+ config[:default] = string
149
+ ret, str = rbgetstr(@form.window, $error_message_row, $error_message_col, prompt, maxlen, config)
150
+ #return str if ret == 0
151
+ #return ""
152
+ end
153
+ ##
154
+ # common method to input a blank string
155
+ # @param [String] prompt to display before string
156
+ # @param [int] max length of input
157
+ # @return [0, -1] return value 0 if okay, -1 if error
158
+ def input_string prompt="Insert: ", maxlen=80
159
+ #ret, str = rbgetstr(@form.window, $error_message_row, $error_message_col, prompt, maxlen, config)
160
+ ret, str = rbgetstr(@form.window, $error_message_row, $error_message_col, prompt, maxlen, config)
161
+ #return str if ret == 0
162
+ #return ""
163
+ end
164
+ def edit_chars
165
+
166
+ end
167
+ def edit_word
168
+
169
+ end
170
+ end # module
@@ -0,0 +1,163 @@
1
+ require 'rbcurse/core/system/ncurses'
2
+ module ColorMap
3
+ # 2010-09-20 12:22 changed colors from string to symbol
4
+ ## private
5
+ # returns a color constant for a human color string
6
+ def ColorMap.get_color_const colorstring
7
+ # added check for fixnum if we go beyond these constants 2011-11-28
8
+ # e.g. to use full 256 colors
9
+ return colorstring if colorstring.is_a? Fixnum
10
+ ret = FFI::NCurses.const_get "COLOR_#{colorstring.upcase}"
11
+ #raise "color const nil ColorMap 8 " if !ret
12
+ end
13
+ ## private
14
+ # creates a new color pair, puts in color map and returns color_pair
15
+ # number
16
+ def ColorMap.install_color fgc, bgc
17
+ #$log.debug " install_color found #{fgc} #{@bgc} "
18
+ @color_id += 1
19
+ fg = ColorMap.get_color_const fgc
20
+ bg = ColorMap.get_color_const bgc
21
+ FFI::NCurses.init_pair(@color_id, fg, bg);
22
+ $color_map[[fgc, bgc]] = @color_id
23
+ return @color_id
24
+ end
25
+ #
26
+ # returns the colors that make up the given pair
27
+ # you may want to find what makes up $bottomcolor and set color and bgcolor with it.
28
+ # @param [Fixnum] color_pair
29
+ # @return [Symbol, Symbol] foreground and backgrounf color
30
+ # @example
31
+ # color, bgcolor = get_colors_for_pair $datacolor
32
+ #
33
+ def ColorMap.get_colors_for_pair pair
34
+ $color_map.invert[pair]
35
+ end
36
+ ## public
37
+ # returns a color_pair for a given foreground and background color
38
+ def ColorMap.get_color fgc, bgc=$def_bg_color
39
+ fgc = fgc.to_sym if fgc.is_a? String
40
+ bgc = bgc.to_sym if bgc.is_a? String
41
+ if $color_map.include? [fgc, bgc]
42
+ #$log.debug " get_color found #{fgc} #{@bgc} "
43
+ return $color_map[[fgc, bgc]]
44
+ else
45
+ #$log.debug " get_color NOT found #{fgc} #{@bgc} "
46
+ return ColorMap.install_color fgc, bgc
47
+ end
48
+ end
49
+ def ColorMap.colors
50
+ @@colors
51
+ end
52
+ # returns true if color is a valid one, else false
53
+ # @param [Symbol] color such as :black :cyan :yellow
54
+ # @return [Boolean] true if valid, else false
55
+ def ColorMap.is_color? color
56
+ return true if color.is_a? Fixnum # so we can use 256 colors
57
+ @@colors.include? color.to_sym
58
+ end
59
+
60
+ ## public
61
+ # setup color map at start of application
62
+ def ColorMap.setup
63
+ @color_id = 0
64
+ $color_map = {}
65
+ FFI::NCurses.start_color();
66
+ # Initialize few color pairs
67
+ $def_fg_color = :white # pls set these 2 for your application
68
+ $def_bg_color = :black
69
+ #COLORS = [COLOR_BLACK, COLOR_RED, COLOR_GREEN, COLOR_YELLOW, COLOR_BLUE,
70
+ # COLOR_MAGENTA, COLOR_CYAN, COLOR_WHITE]
71
+ @@colors = [:black, :red, :green, :yellow, :blue, :magenta, :cyan, :white]
72
+
73
+ # make foreground colors
74
+ bg = ColorMap.get_color_const $def_bg_color
75
+ @@colors[0...@@colors.size].each_with_index do |color, i|
76
+ next if color == $def_bg_color # NOTE hope this doesn't do something if you change def_bg
77
+ ColorMap.install_color color, $def_bg_color
78
+ end
79
+ $reversecolor = ColorMap.get_color $def_bg_color, $def_fg_color
80
+ $popupcolor = ColorMap.get_color :cyan, $def_fg_color
81
+
82
+ $errorcolor = ColorMap.get_color :white, :red
83
+ #$promptcolor = $selectedcolor = ColorMap.get_color(:yellow, :red)
84
+ $promptcolor = ColorMap.get_color(:yellow, :red)
85
+ $normalcolor = $datacolor = ColorMap.get_color(:white, :black)
86
+ $bottomcolor = $topcolor = ColorMap.get_color(:white, :blue)
87
+ $selectedcolor = $datacolor # since we now use reverse attr in list
88
+
89
+ $row_selected_attr = Ncurses::A_REVERSE
90
+ $row_focussed_attr = Ncurses::A_BOLD
91
+ $row_attr = Ncurses::A_NORMAL
92
+
93
+ # $log.debug " colormap SETUP: #{$datacolor} #{$reversecolor} "
94
+ end
95
+
96
+ end # modul
97
+ if $0 == __FILE__
98
+ require 'logger'
99
+ require 'ver/window'
100
+ #include Ncurses # FFI 2011-09-8
101
+ include ColorMap
102
+ # Initialize curses
103
+ begin
104
+ $log = Logger.new("rbc13.log")
105
+ VER::start_ncurses
106
+ @window = VER::Window.root_window
107
+ $log.level = Logger::DEBUG
108
+ ColorMap.setup
109
+
110
+ # Create the window to be associated with the form
111
+ # Un post form and free the memory
112
+
113
+ catch(:close) do
114
+ # $log.debug "START ---------"
115
+ # need to pass a form, not window.
116
+ r = 1; c = 2; i=0
117
+ attr = Ncurses::A_NORMAL
118
+ @window.printstring 20, c, "press 0-9 to change BG color, F1/q to quit. r-everse, n-ormal,b-old ", ColorMap.get_color('white')
119
+
120
+
121
+
122
+ while((ch = @window.getchar()) != FFI::NCurses::KEY_F1 )
123
+ next if ch == -1
124
+ break if ch == ?q.getbyte(0)
125
+ case ch
126
+ when ?r.getbyte(0)
127
+ attr |= Ncurses::A_REVERSE
128
+ when ?b.getbyte(0)
129
+ attr |= Ncurses::A_BOLD
130
+ when ?n.getbyte(0)
131
+ attr = Ncurses::A_NORMAL
132
+ when ?u.getbyte(0)
133
+ attr |= Ncurses::A_UNDERLINE
134
+ else
135
+ i = ch.chr.to_i
136
+ i = 1 if i > ColorMap::colors.length-1
137
+ end
138
+ bg = ColorMap::colors[i]
139
+ @@colors = %w[black red green yellow blue magenta cyan white]
140
+ @window.printstring r, c, "%-40s" % "red #{bg} ", ColorMap.get_color('red',bg) , attr
141
+ @window.printstring 2, c, "%-40s" % "blue #{bg} ", ColorMap.get_color('blue',bg) , attr
142
+ @window.printstring 3, c, "%-40s" % "white #{bg} ", ColorMap.get_color('white',bg) , attr
143
+ @window.printstring 4, c, "%-40s" % "green #{bg} ", ColorMap.get_color('green',bg) , attr
144
+ @window.printstring 5, c, "%-40s" % "cyan #{bg} ", ColorMap.get_color('cyan',bg) , attr
145
+ @window.printstring 6, c, "%-40s" % "magenta #{bg} ", ColorMap.get_color('magenta',bg) , attr
146
+ @window.printstring 7, c, "black #{bg} ", ColorMap.get_color('black',bg) , attr
147
+ @window.wrefresh
148
+ end
149
+ # VER::Keyboard.focus = tp
150
+ end
151
+ rescue => ex
152
+ ensure
153
+ # @panel = @window.panel if @window
154
+ # Ncurses::Panel.del_panel(@panel) if !@panel.nil?
155
+ # @window.delwin if !@window.nil?
156
+ @window.destroy unless @window.nil?
157
+ VER::stop_ncurses
158
+ p ex if ex
159
+ p(ex.backtrace.join("\n")) if ex
160
+ # $log.debug( ex) if ex
161
+ # $log.debug(ex.backtrace.join("\n")) if ex
162
+ end
163
+ end