rbcurse-core 0.0.0 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -29,8 +29,9 @@ module RubyCurses
29
29
  bind_key($history_key) { _show_history }
30
30
  # widget should have CHANGED event, or this will either give error, or just not work
31
31
  # else please update history whenever you want a value to be retrieved
32
- bind(:CHANGED) { @history << @text unless @history.include? @text }
32
+ bind(:CHANGED) { @history << @text if @text && (!@history.include? @text) }
33
33
  end
34
+ def history=(x); history(x); end
34
35
 
35
36
  # pass in some configuration for histroy such as row and column to show popup on
36
37
  def history_config config={}
@@ -42,13 +43,29 @@ module RubyCurses
42
43
  private
43
44
  def _show_history
44
45
  return unless @history
46
+ return if @history.empty?
45
47
  list = @history
48
+ @_history_config ||= {}
49
+ #list = ["No history"] if @history.empty?
50
+ raise ArgumentError, "show_history got nil list" unless list
46
51
  # 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
52
+ # col if fine, except for when there's a label.
53
+ c = @_history_config[:col] || @field_col || @col # this is also dependent on window coords, as in a status_window or messagebox
54
+ sz = @history.size
55
+ wrow = 0
56
+ wrow = self.form.window.top if self.form
57
+ crow = wrow + @row
58
+ # if list can be displayed above, then fit it just above
59
+ if crow > sz + 2
60
+ r = crow - sz - 2
61
+ else
62
+ # else fit it in next row
63
+ r = crow + 1
51
64
  end
65
+ #r = @row - 10
66
+ #if @row < 10
67
+ #r = @row + 1
68
+ #end
52
69
  r = @_history_config[:row] || r
53
70
  ret = popuplist(list, :row => r, :col => c, :title => " History ")
54
71
  if ret
@@ -99,10 +99,9 @@ module VER
99
99
  #puts "curses over"
100
100
  ensure
101
101
  return unless error = @last_error
102
- log = Config[:logfile].value
103
-
104
- Kernel.warn "There may have been fatal errors logged to: #{log}."
105
- Kernel.warn "The most recent was:"
102
+ #log = RbConfig[:logfile].value
103
+ #Kernel.warn "There may have been fatal errors logged to: #{log}."
104
+ #Kernel.warn "The most recent was:"
106
105
 
107
106
  $stderr.puts ''
108
107
  $stderr.puts @last_error_message if @last_error_message
@@ -36,7 +36,6 @@ module VER
36
36
  attr_reader :window_type # window or pad to distinguish 2009-11-02 23:11
37
37
  attr_accessor :name # more for debugging log files. 2010-02-02 19:58
38
38
  attr_accessor :modified # has it been modified and may need a refresh
39
- #attr_reader :bottomline # experimental here 2010-11-03 22:19
40
39
 
41
40
  # @param [Array, Hash] window coordinates (ht, w, top, left)
42
41
  # or
@@ -729,51 +728,6 @@ module VER
729
728
  mvwprintw(r, c, "%s", :string, string);
730
729
  wattroff(Ncurses.COLOR_PAIR(color) | att)
731
730
  end
732
- # @deprecated
733
- def print_error_message text=$error_message.get_value
734
- alert text
735
- end
736
- # added by rk 2008-11-29 19:01
737
- # @deprecated. use global method of same name in rdialog
738
- def print_status_message text=$status_message
739
- #VER::print_status_message text
740
- alert text
741
- end
742
- # added by rk 2008-11-29 19:01
743
- # Since these methods write directly to window they are not advised
744
- # since clearing previous message we don't know how much to clear.
745
- # Best to map error_message to a label.
746
- # 2010-09-13 00:22 WE should not use these any longer.
747
- # Application should create a label and map a Variable named
748
- # $errormessage to it. We should only update the Variable
749
- def DEPRECATED_print_error_message text=$error_message.get_value
750
- r = $error_message_row || Ncurses.LINES-1
751
- c = $error_message_col || (Ncurses.COLS-text.length)/2
752
-
753
- $log.debug "got ERROR MESSAGE #{text} row #{r} "
754
- clear_error r, $datacolor
755
- printstring r, c, text, color = $promptcolor
756
- $error_message_clear_pending = true
757
- end
758
- # added by rk 2008-11-29 19:01
759
- # @deprecated. use global method of same name
760
- def DEPRECATED_print_status_message text=$status_message
761
- r = $status_message_row || Ncurses.LINES-1
762
- clear_error r, $datacolor
763
- # print it in centre
764
- printstring r, (Ncurses.COLS-text.length)/2, text, color = $promptcolor
765
- end
766
- # Clear error message printed
767
- # I am not only clearing if something was printed. This is since
768
- # certain small forms like TabbedForm top form throw an error on printstring.
769
- # @deprecated
770
- def clear_error r = $error_message_row, color = $datacolor
771
- return unless $error_message_clear_pending
772
- c = $error_message_col || (Ncurses.COLS-text.length)/2
773
- sz = $error_message_size || Ncurses.COLS
774
- printstring(r, c, "%-*s" % [sz, " "], color)
775
- $error_message_clear_pending = false
776
- end
777
731
  ##
778
732
  # NOTE : FOR MESSAGEBOXES ONLY !!!!
779
733
  def print_border_mb row, col, height, width, color, attr
@@ -18,14 +18,6 @@ require 'logger'
18
18
  require 'rbcurse'
19
19
  require 'rbcurse/core/util/widgetshortcuts'
20
20
 
21
- require 'rbcurse/core/util/bottomline'
22
- $tt ||= RubyCurses::Bottomline.new
23
- $tt.name = "$tt"
24
- require 'forwardable'
25
- module Kernel
26
- extend Forwardable
27
- def_delegators :$tt, :ask, :say, :agree, :choose, :numbered_menu, :display_text, :display_text_interactive, :display_list, :say_with_pause, :hide_bottomline, :say_with_wait
28
- end
29
21
  include RubyCurses
30
22
  include RubyCurses::Utils
31
23
  include Io
@@ -85,9 +77,6 @@ module RubyCurses
85
77
  # the row on which to prompt user for any inputs
86
78
  #attr_accessor :prompt_row # 2011-10-17 14:06:22
87
79
 
88
- extend Forwardable
89
- def_delegators :$tt, :ask, :say, :agree, :choose, :numbered_menu, :display_text, :display_text_interactive, :display_list
90
-
91
80
  # TODO: i should be able to pass window coords here in config
92
81
  # :title
93
82
  def initialize config={}, &block
@@ -134,7 +123,7 @@ module RubyCurses
134
123
  @window.destroy if !@window.nil?
135
124
  $log.debug " INSIDE CLOSE, #{@stop_ncurses_on_close} "
136
125
  if @stop_ncurses_on_close
137
- $tt.destroy # added on 2011-10-9 since we created a window, but only hid it after use
126
+ $tt.destroy if $tt # added on 2011-10-9 since we created a window, but only hid it after use
138
127
  VER::stop_ncurses
139
128
  $log.debug " CLOSING NCURSES"
140
129
  end
@@ -176,10 +165,10 @@ module RubyCurses
176
165
  begin
177
166
  @form.handle_key ch
178
167
  rescue => err
179
- alert err.to_s
180
168
  $log.debug( "handle_key rescue reached ")
181
169
  $log.debug( err)
182
170
  $log.debug(err.backtrace.join("\n"))
171
+ textdialog [err.to_s, *err.backtrace], :title => "Exception"
183
172
  end
184
173
  #@form.repaint # was this duplicate ?? handle calls repaint not needed
185
174
  @window.wrefresh
@@ -222,17 +211,13 @@ module RubyCurses
222
211
  $status_message.value = text # trying out 2011-10-9
223
212
  #@message.value = text # 2011-10-17 14:07:01
224
213
  end
225
- # @deprecated please use {#status_line} instead of a message label
226
- def message_row row
227
- raise "Please use create_message_label first as message_label is no longer default behaviour" unless @message_label
228
- @message_label.row = row
229
- end
214
+
230
215
  # during a process, when you wish to update status, since ordinarily the thread is busy
231
216
  # and form does not get control back, so the window won't refresh.
232
217
  # This will only update on keystroke since it uses statusline
233
218
  # @deprecated please use {#status_line} instead of a message label
234
219
  def message_immediate text
235
- $log.warn "DEPRECATED, use message(), or say_with_pause, or say"
220
+ $log.warn "DEPRECATED, use message(), or rb_puts or use status_window"
236
221
  $status_message.value = text # trying out 2011-10-9 user needs to use in statusline command
237
222
  # 2011-10-17 knocking off label, should be printed on status_line
238
223
  end
@@ -334,46 +319,49 @@ module RubyCurses
334
319
  # FIXME: why are we using rawmessage and then getchar when ask would suffice
335
320
  def bind_global
336
321
  opts = get_all_commands
337
- cmd = ask("Select a command (TAB for choices) : ", opts)
322
+ cmd = rb_gets("Select a command (<tab> for choices) : ", opts)
338
323
  if cmd.nil? || cmd == ""
339
- say_with_pause "Aborted."
324
+ rb_puts "Aborted."
340
325
  return
341
326
  end
342
327
  key = []
343
328
  str = ""
344
- raw_message "Enter one or 2 keys. Finish with ENTER. Enter first key:"
345
- #raw_message "Enter first key:"
346
- ch = @window.getchar()
347
- raw_message_destroy
348
- if [KEY_ENTER, 10, 13, ?\C-g.getbyte(0)].include? ch
349
- say_with_pause "Aborted."
329
+ #raw_message "Enter one or 2 keys. Finish with ENTER. Enter first key:"
330
+ #ch = @window.getchar()
331
+ #raw_message_destroy
332
+ #if [KEY_ENTER, 10, 13, ?\C-g.getbyte(0)].include? ch
333
+ #say_with_pause "Aborted."
334
+ #return
335
+ #end
336
+ # the next is fine but does not allow user to enter a control or alt or function character
337
+ # since it uses Field. It is fine if you want to force alphanum input
338
+ ch = rb_getchar("Enter one or two keys. Finish with <ENTER>. Enter first key:")
339
+ unless ch
340
+ rb_puts "Aborted. <Press a key>"
350
341
  return
351
342
  end
352
343
  key << ch
353
344
  str << keycode_tos(ch)
354
- raw_message "Enter second key or hit return:"
355
- ch = @window.getchar()
356
- raw_message_destroy
357
- if ch == 3 || ch == ?\C-g.getbyte(0)
358
- say_with_pause "Aborted."
345
+ ch = rb_getchar "Got #{str}. Enter second key or hit return:"
346
+ unless ch
347
+ rb_puts "Aborted. <Press a key>"
359
348
  return
360
349
  end
361
- if ch == 10 || ch == KEY_ENTER || ch == 13
350
+ if ch == KEY_ENTER || ch == 13
362
351
  else
363
352
  key << ch
364
353
  str << keycode_tos(ch)
365
354
  end
366
355
  if !key.empty?
367
- say_with_pause "Binding #{cmd} to #{str} "
356
+ rb_puts "Binding #{cmd} to #{str}. "
368
357
  key = key[0] if key.size == 1
369
358
  #@form.bind_key(key, cmd.to_sym) # not finding it, getting called by that comp
370
359
  @form.bind_key(key){ send(cmd.to_sym) }
371
360
  end
372
- #message "Bound #{str} to #{cmd} "
373
- raw_message_destroy
374
361
  end
375
362
  def bind_component
376
- say_with_pause "Todo. <press>"
363
+ #rb_puts "Todo. ", :color_pair => get_color($promptcolor, :red, :black)
364
+ print_error_message "Todo this. "
377
365
  # the idea here is to get the current component
378
366
  # and bind some keys to some methods.
379
367
  # however, how do we divine the methods we can map to
@@ -384,9 +372,10 @@ module RubyCurses
384
372
  f = @form.get_current_field
385
373
  if f.respond_to?('help_text')
386
374
  h = f.help_text
387
- textdialog "#{h}"
375
+ h = "No help text defined for this field.\nTry F1, or press '?' for key-bindings." unless h
376
+ textdialog "#{h}", :title => "Widget Help Text"
388
377
  else
389
- alert "Could not get field #{f} or does not respond to helptext"
378
+ alert "Could not get field #{f} or does not respond to helptext. Try F1 or '?'"
390
379
  end
391
380
  end
392
381
  # prompts user for a command. we need to get this back to the calling app
@@ -395,10 +384,8 @@ module RubyCurses
395
384
  # or lines ??
396
385
  # Also may want command completion, or help so all commands can be displayed
397
386
  def get_command_from_user choices=["quit","help"]
398
- #code, str = rbgetstr(@window, $lastline, 0, "", 80, :default => ":")
399
- #return unless code == 0
400
- @_command_history ||= Array.new
401
- str = ask("Cmd: ", choices) { |q| q.default = @_previous_command; q.history = @_command_history }
387
+ @_command_history ||= Array.new
388
+ str = rb_gets("Cmd: ", choices) { |q| q.default = @_previous_command; q.history = @_command_history }
402
389
  @_command_history << str unless @_command_history.include? str
403
390
  # shell the command
404
391
  if str =~ /^!/
@@ -437,7 +424,7 @@ module RubyCurses
437
424
  ret = false
438
425
  # what is this execute_this: some kind of general routine for all apps ?
439
426
  ret = execute_this(cmd, *cmdline) if respond_to?(:execute_this, true)
440
- say_with_pause("#{self.class} does not respond to #{cmd} ", :color_pair => $promptcolor) unless ret
427
+ rb_puts("#{self.class} does not respond to #{cmd} ", :color_pair => $promptcolor) unless ret
441
428
  # should be able to say in red as error
442
429
  end
443
430
  end
@@ -988,7 +975,7 @@ module RubyCurses
988
975
  opts = get_all_commands()
989
976
  @_command_history ||= Array.new
990
977
  # previous command should be in opts, otherwise it is not in this context
991
- cmd = ask("Command: ", opts){ |q| q.default = @_previous_command; q.history = @_command_history }
978
+ cmd = rb_gets("Command: ", opts){ |q| q.default = @_previous_command; q.history = @_command_history }
992
979
  if cmd.nil? || cmd == ""
993
980
  else
994
981
  @_command_history << cmd unless @_command_history.include? cmd
@@ -1000,7 +987,7 @@ module RubyCurses
1000
987
  if rcmd.size == 1
1001
988
  cmd = rcmd.first
1002
989
  elsif !rcmd.empty?
1003
- say_with_pause "Cannot resolve #{cmd}. Matches are: #{rcmd} "
990
+ rb_puts "Cannot resolve #{cmd}. Matches are: #{rcmd} "
1004
991
  end
1005
992
  end
1006
993
  if respond_to?(cmd, true)
@@ -1013,11 +1000,11 @@ module RubyCurses
1013
1000
  if exc
1014
1001
  $log.debug( exc)
1015
1002
  $log.debug(exc.backtrace.join("\n"))
1016
- say_with_pause exc.to_s
1003
+ rb_puts exc.to_s
1017
1004
  end
1018
1005
  end
1019
1006
  else
1020
- say_with_pause("Command [#{cmd}] not supported by #{self.class} ", :color_pair => $promptcolor)
1007
+ rb_puts("Command [#{cmd}] not supported by #{self.class} ", :color_pair => $promptcolor)
1021
1008
  end
1022
1009
  end
1023
1010
  }
@@ -95,7 +95,6 @@ module RubyCurses
95
95
  end
96
96
  #
97
97
  # create a window at bottom and show and hide it.
98
- # Causing a stack overflow since Window creates a bottomline too !
99
98
  #
100
99
  def _create_footer_window h = 1 , w = Ncurses.COLS, t = Ncurses.LINES-1, l = 0
101
100
  ewin = VER::Window.new(h, w , t, l)
@@ -320,7 +319,7 @@ module RubyCurses
320
319
  #
321
320
  # text to be shown if user presses M-h
322
321
  #
323
- attr_accessor :helptext
322
+ attr_accessor :help_text
324
323
  attr_accessor :color_pair
325
324
  attr_accessor :history
326
325
 
@@ -984,7 +983,7 @@ module RubyCurses
984
983
  @key_handler_proc = @question.key_handler_proc
985
984
  @default = @question.default
986
985
  $log.debug "XXX: ASK RBGETS got default: #{@default} "
987
- @helptext = @question.helptext
986
+ @help_text = @question.help_text
988
987
  @answer_type = @question.answer_type
989
988
  if @question.answer_type.is_a? Array
990
989
  @completion_proc = Proc.new{|str| @answer_type.dup.grep Regexp.new("^#{str}") }
@@ -1242,8 +1241,8 @@ module RubyCurses
1242
1241
  str.slice!(curpos) #rescue next
1243
1242
  clear_line len+maxlen+1, @prompt_length
1244
1243
  when ?\M-h.getbyte(0) # HELP KEY
1245
- helptext = @helptext || "No help provided"
1246
- print_help(helptext)
1244
+ help_text = @help_text || "No help provided..."
1245
+ print_help(help_text)
1247
1246
  clear_line len+maxlen+1
1248
1247
  print_str @statement # UGH
1249
1248
  #return 7, nil
@@ -1473,10 +1472,10 @@ module RubyCurses
1473
1472
  print_str("%-*s" % [len," "], :y => from)
1474
1473
  end
1475
1474
 
1476
- def print_help(helptext)
1475
+ def print_help(help_text)
1477
1476
  # best to popup a window and hsow that with ENTER to dispell
1478
- print_str("%-*s" % [helptext.length+2," "])
1479
- print_str("%s" % helptext)
1477
+ print_str("%-*s" % [help_text.length+2," "])
1478
+ print_str("%s" % help_text)
1480
1479
  sleep(5)
1481
1480
  end
1482
1481
  def get_response
@@ -1592,7 +1591,7 @@ module RubyCurses
1592
1591
  w = rc.window
1593
1592
  rc.display_menu list1
1594
1593
  # earlier wmove bombed, now move is (window.rb 121)
1595
- str = ask(prompt) { |q| q.change_proc = Proc.new { |str| w.wmove(1,1) ; w.wclrtobot;
1594
+ str = ask(prompt) { |q| q.help_text = config[:help_text] ; q.change_proc = Proc.new { |str| w.wmove(1,1) ; w.wclrtobot;
1596
1595
 
1597
1596
  l = list1.select{|e| e.index(str)==0} ; # select those starting with str
1598
1597
 
@@ -1776,6 +1775,14 @@ module RubyCurses
1776
1775
  end
1777
1776
  end # module
1778
1777
  end # module
1778
+ #require 'rbcurse/core/util/bottomline'
1779
+ $tt ||= RubyCurses::Bottomline.new
1780
+ $tt.name = "$tt"
1781
+ require 'forwardable'
1782
+ module Kernel
1783
+ extend Forwardable
1784
+ def_delegators :$tt, :ask, :say, :agree, :choose, :numbered_menu, :display_text, :display_text_interactive, :display_list, :say_with_pause, :hide_bottomline, :say_with_wait
1785
+ end
1779
1786
  if __FILE__ == $PROGRAM_NAME
1780
1787
 
1781
1788
  #tabc = Proc.new {|str| Dir.glob(str +"*") }
@@ -1808,7 +1815,7 @@ if __FILE__ == $PROGRAM_NAME
1808
1815
  entry = {}
1809
1816
  entry[:file] = ask("File? ", Pathname) do |q|
1810
1817
  q.completion_proc = Proc.new {|str| Dir.glob(str +"*") }
1811
- q.helptext = "Enter start of filename and tab to get completion"
1818
+ q.help_text = "Enter start of filename and tab to get completion"
1812
1819
  end
1813
1820
  alert "file: #{entry[:file]} "
1814
1821
  $log.debug "FILE: #{entry[:file]} "
@@ -1824,7 +1831,7 @@ if __FILE__ == $PROGRAM_NAME
1824
1831
  entry[:state] = ask("State? ") do |q|
1825
1832
  q._case = :up
1826
1833
  q.validate = /\A[A-Z]{2}\Z/
1827
- q.helptext = "Enter 2 characters for your state"
1834
+ q.help_text = "Enter 2 characters for your state"
1828
1835
  end
1829
1836
  entry[:zip] = ask("Zip? ") do |q|
1830
1837
  q.validate = /\A\d{5}(?:-?\d{4})?\Z/
@@ -163,7 +163,8 @@ class PadReader
163
163
  rescue => err
164
164
  $log.debug( err) if err
165
165
  $log.debug(err.backtrace.join("\n")) if err
166
- alert "Got an exception in PadReader: #{err}. Check log"
166
+
167
+ textdialog ["Error in padreader: #{err} ", *err.backtrace], :title => "Exception"
167
168
  $error_message.value = ""
168
169
  ensure
169
170
  end
@@ -295,6 +295,7 @@ module RubyCurses
295
295
  @to
296
296
  end
297
297
  # displays a list
298
+ # Why did we create another list ? 2011-12-5
298
299
  class ListObject
299
300
  attr_reader :cw
300
301
  attr_reader :list
@@ -22,15 +22,6 @@ require 'rbcurse/core/widgets/rwidget'
22
22
  #require 'rbcurse/deprecated/widgets/rmessagebox'
23
23
  require 'rbcurse/core/widgets/rmessagebox'
24
24
 
25
- # trying out 2011-12-4 so non-apps can get it.
26
- require 'rbcurse/core/util/bottomline'
27
- $tt ||= RubyCurses::Bottomline.new
28
- $tt.name = "$tt"
29
- require 'forwardable'
30
- module Kernel
31
- extend Forwardable
32
- def_delegators :$tt, :ask, :say, :agree, :choose, :numbered_menu, :display_text, :display_text_interactive, :display_list, :say_with_pause, :hide_bottomline, :say_with_wait
33
- end
34
25
  # -- moving to the new Messagebox 2011-11-19 v 1.5.0
35
26
  # Alert user with a one line message
36
27
  #
@@ -66,7 +57,8 @@ end
66
57
  # Are we doing anyhting to let caller know, cancel was pressed. FIXME
67
58
  # @param [String] a label such as "Enter name:"
68
59
  # @return [String] value entered by user
69
- def get_string label, config={}
60
+ # @yield [Field] field created by messagebox
61
+ def get_string label, config={} # yield Field
70
62
  config[:title] ||= "Entry"
71
63
  label_config = config[:label_config] || {}
72
64
  label_config[:row] ||= 2
@@ -97,6 +89,8 @@ def get_string label, config={}
97
89
  item Label.new nil, label_config
98
90
  item Field.new nil, field_config
99
91
  end
92
+ # added yield to override settings
93
+ yield tp.form.by_name[:name] if block_given?
100
94
  index = tp.run
101
95
  if index == 0 # OK
102
96
  return tp.form.by_name[:name].text
@@ -109,14 +103,15 @@ end
109
103
  # new version using new messagebox
110
104
  # @param [String] question
111
105
  # @return [Boolean] true or false
112
- # FIXME focus hould fall on default button so ENTER does not fire first one.
106
+ # @yield [Label]
107
+ #
113
108
  def confirm text, config={}, &block
114
109
  title = config['title'] || "Confirm"
115
110
  config[:default_button] ||= 0
116
- #instance_eval &block if block_given?
111
+
117
112
  mb = RubyCurses::MessageBox.new config do
118
113
  title title
119
- message text
114
+ message text, &block
120
115
  button_type :yes_no
121
116
  end
122
117
  index = mb.run
@@ -131,140 +126,6 @@ end
131
126
  # alert("You did not enter anything!", {"title"=>"Wake Up", "bgcolor"=>"blue", "color"=>"white"})
132
127
  # block currently ignored. don't know what to do, can't pass it to MB since alread sending in a block
133
128
  #
134
- def DEPalert text, config={}, &block
135
- title = config['title'] || "Alert"
136
- #instance_eval &block if block_given?
137
- if text.is_a? RubyCurses::Variable # added 2011-09-20 incase variable passed
138
- text = text.get_value
139
- end
140
- mb = RubyCurses::MessageBox.new nil, config do
141
- title title
142
- message text
143
- button_type :ok
144
- end
145
- end
146
- # confirms from user returning :YES or :NO
147
- # Darn, should have returned boolean, now have to live with it.
148
- def OLDconfirm text, config={}, &block
149
- title = config['title'] || "Confirm"
150
- #instance_eval &block if block_given?
151
- mb = RubyCurses::MessageBox.new nil, config do
152
- title title
153
- message text
154
- button_type :yes_no
155
- end
156
- return mb.selected_index == 0 ? :YES : :NO
157
- end
158
-
159
- ##
160
- # allows user entry of a string.
161
- # In config you may pass Field related properties such as chars_allowed, valid_regex, values, etc.
162
- def DEPget_string(message, len=50, default="", config={})
163
-
164
- config["input_config"] = {}
165
- config["input_config"]["maxlen"] = len
166
- config["maxlen"]=len
167
- title = config["title"] || "Input required"
168
- mb = RubyCurses::MessageBox.new nil, config do
169
- title title
170
- message message
171
- type :input
172
- button_type :ok
173
- default_value default
174
- end
175
- return mb.input_value
176
- end
177
-
178
- ##
179
- # Added 2009-02-05 13:16
180
- # get a string from user with some additional checkboxes and optionally supply default values
181
- # Usage:
182
- #sel, inp, hash = get_string_with_options("Enter a filter pattern", 20, "*", {"checkboxes" => ["case sensitive","reverse"], "checkbox_defaults"=>[true, false]})
183
- # sel, inp, hash = get_string_with_options("Enter a filter pattern", 20, "*", {"checkboxes" => ["case sensitive","reverse"]})
184
- # $log.debug " POPUP: #{sel}: #{inp}, #{hash['case sensitive']}, #{hash['reverse']}"
185
- #
186
- # @param: message to print,
187
- # @param: length of entry field
188
- # @param: default value of field
189
- # @param: configuration of box or field
190
- # checkboxes: array of strings to use as checkboxes
191
- # checkbox_defaults : array of true/false default values for each cb
192
- # @return: int 0 OK, 1 cancel pressed
193
- # @return: string value entered
194
- # @return: hash of strings and booleans for checkboxes and values
195
- #
196
- # @deprecated - user should be able to do this quite easily now.
197
- def TODOget_string_with_options(message, len=20, default="", config={})
198
- title = config["title"] || "Input required"
199
- input_config = config["input_config"] || {}
200
- checks = config["checkboxes"]
201
- checkbox_defaults = config["checkbox_defaults"] || []
202
-
203
- height = config["height"] || 1
204
- display_length = config["display_length"] || 30
205
-
206
- r = 3
207
- c = 4
208
- mform = RubyCurses::Form.new nil
209
- message_label = RubyCurses::Label.new mform, {'text' => message, "name"=>"message_label","row" => r, "col" => c, "display_length" => display_length, "height" => height, "attr"=>"reverse"}
210
-
211
- r += 1
212
- input = RubyCurses::Field.new mform, input_config do
213
- name "input"
214
- row r
215
- col c
216
- display_length display_length
217
- maxlen len
218
- set_buffer default
219
- end
220
- if !checks.nil?
221
- r += 2
222
- checks.each_with_index do |cbtext,ix|
223
- field = RubyCurses::CheckBox.new mform do
224
- text cbtext
225
- name cbtext
226
- value checkbox_defaults[ix]||false
227
- color 'black'
228
- bgcolor 'white'
229
- row r
230
- col c
231
- end
232
- r += 1
233
- end
234
- end
235
- radios = config["radiobuttons"]
236
- if !radios.nil?
237
- radio_default = config["radio_default"] || radios[0]
238
- radio = RubyCurses::Variable.new radio_default
239
- r += 2
240
- radios.each_with_index do |cbtext,ix|
241
- field = RubyCurses::RadioButton.new mform do
242
- variable radio
243
- text cbtext
244
- value cbtext
245
- color 'black'
246
- bgcolor 'white'
247
- row r
248
- col c
249
- end
250
- r += 1
251
- end
252
- end
253
- mb = RubyCurses::MessageBox.new mform do
254
- title title
255
- button_type :ok_cancel
256
- default_button 0
257
- end
258
- hash = {}
259
- if !checks.nil?
260
- checks.each do |c|
261
- hash[c] = mform.by_name[c].getvalue
262
- end
263
- end
264
- hash["radio"] = radio.get_value unless radio.nil?
265
- # returns button index (0 = OK), value of field, hash containing values of checkboxes
266
- return mb.selected_index, mform.by_name['input'].getvalue, hash
267
- end
268
129
 
269
130
  # ------------------------ We've Moved here from window class ---------------- #
270
131
  # #
@@ -277,22 +138,33 @@ end
277
138
  # new version with a window created on 2011-10-1 12:37 AM
278
139
  # Now can be separate from window class, needing nothing, just a util class
279
140
  # prints a status message and pauses for a char
141
+ # @param [String] text to print
142
+ # @param [Hash] config: :color :bgcolor :color_pair
143
+ # :wait (numbr of seconds to wait for a key press and then close) if not givn
144
+ # will keep waiting for keypress (the default)
280
145
  def print_status_message text, aconfig={}, &block
281
146
  _print_message :status, text, aconfig, &block
282
147
  end
148
+ alias :rb_puts print_status_message
149
+
283
150
  # new version with a window created on 2011-10-1 12:30 AM
284
151
  # Now can be separate from window class, needing nothing, just a util class
285
152
  # Why are we dealing with $error_message, that was due to old idea which failed
286
153
  # scrap it and send the message.
154
+ # @param [String] text to print
155
+ # @param [Hash] config: :color :bgcolor :color_pair
156
+ # :wait (numbr of seconds to wait for a key press and then close) if not givn
157
+ # will keep waiting for keypress (the default)
287
158
  def print_error_message text, aconfig={}, &block
288
159
  _print_message :error, text, aconfig, &block
289
160
  end
290
- def _create_footer_window h = 2 , w = Ncurses.COLS, t = Ncurses.LINES-2, l = 0
161
+ private
162
+ def _create_footer_window h = 2 , w = Ncurses.COLS, t = Ncurses.LINES-2, l = 0 #:nodoc:
291
163
  ewin = VER::Window.new(h, w , t, l)
292
164
  end
293
165
  # @param [:symbol] :error or :status kind of message
294
- # @private
295
- def _print_message type, text, aconfig={}, &block
166
+ #private
167
+ def _print_message type, text, aconfig={}, &block #:nodoc:
296
168
  case text
297
169
  when RubyCurses::Variable # added 2011-09-20 incase variable passed
298
170
  text = text.get_value
@@ -300,30 +172,55 @@ def _print_message type, text, aconfig={}, &block
300
172
  text = text.to_s
301
173
  end
302
174
  # NOTE we are polluting global namespace
303
- aconfig.each_pair { |k,v| instance_variable_set("@#{k}",v) }
175
+ # fixed on 2011-12-6 . to test
176
+ #aconfig.each_pair { |k,v| instance_variable_set("@#{k}",v) }
177
+ color = aconfig[:color]
178
+ bgcolor = aconfig[:bgcolor]
304
179
  ewin = _create_footer_window #*@layout
305
180
  r = 0; c = 1;
306
181
  case type
307
182
  when :error
308
- @color ||= 'red'
309
- @bgcolor ||= 'black'
183
+ color ||= 'red'
184
+ bgcolor ||= 'black'
310
185
  else
311
- @color ||= :white
312
- @bgcolor ||= :black
186
+ color ||= :white
187
+ bgcolor ||= :black
313
188
  end
314
- color_pair = get_color($promptcolor, @color, @bgcolor)
189
+ color_pair = get_color($promptcolor, color, bgcolor)
190
+ color_pair = aconfig[:color_pair] || color_pair
315
191
  ewin.bkgd(Ncurses.COLOR_PAIR(color_pair));
316
192
  ewin.printstring r, c, text, color_pair
317
- ewin.printstring r+1, c, "Press a key", color_pair
193
+ ewin.printstring(r+1, c, "Press a key ", color_pair) unless aconfig[:wait]
318
194
  ewin.wrefresh
319
- ewin.getchar
195
+ if aconfig[:wait]
196
+ #try this out, if user wants a wait, then it will wait for 5 seconds, or if a key is pressed sooner
197
+ value = aconfig[:wait]
198
+ if value.is_a? Fixnum
199
+ value = value * 10
200
+ else
201
+ value = 50
202
+ end
203
+ Ncurses::halfdelay(tenths = value)
204
+ ewin.getch
205
+ Ncurses::halfdelay(tenths = 10)
206
+ else
207
+ ewin.getchar
208
+ end
320
209
  ewin.destroy
321
210
  end
322
211
  #
323
212
  # Alternative to confirm dialog, if you want this look and feel, at last 2 lines of screen
324
213
  # @param [String] text to prompt
325
214
  # @return [true, false] 'y' is true, all else if false
326
- def confirm_window text, aconfig={}, &block
215
+ public
216
+ def rb_confirm text, aconfig={}, &block
217
+ # backward compatibility with agree()
218
+ if aconfig == true || aconfig == false
219
+ default = aconfig
220
+ aconfig = {}
221
+ else
222
+ default = aconfig[:default]
223
+ end
327
224
  case text
328
225
  when RubyCurses::Variable # added 2011-09-20 incase variable passed
329
226
  text = text.get_value
@@ -332,10 +229,13 @@ def confirm_window text, aconfig={}, &block
332
229
  end
333
230
  ewin = _create_footer_window
334
231
  r = 0; c = 1;
335
- aconfig.each_pair { |k,v| instance_variable_set("@#{k}",v) }
336
- @color ||= :white
337
- @bgcolor ||= :black
338
- color_pair = get_color($promptcolor, @color, @bgcolor)
232
+ #aconfig.each_pair { |k,v| instance_variable_set("@#{k}",v) }
233
+ # changed on 2011-12-6
234
+ color = aconfig[:color]
235
+ bgcolor = aconfig[:bgcolor]
236
+ color ||= :white
237
+ bgcolor ||= :black
238
+ color_pair = get_color($promptcolor, color, bgcolor)
339
239
  ewin.bkgd(Ncurses.COLOR_PAIR(color_pair));
340
240
  ewin.printstring r, c, text, color_pair
341
241
  ewin.printstring r+1, c, "[y/n]", color_pair
@@ -344,13 +244,21 @@ def confirm_window text, aconfig={}, &block
344
244
  retval = false
345
245
  begin
346
246
  ch = ewin.getchar
247
+ retval = (ch == 'y'.ord || ch == 'Y'.ord )
248
+ # if caller passed a default value and user pressed ENTER return that
249
+ # can be true or false so don't change this to "if default". 2011-12-8
250
+ if !default.nil?
251
+ if ch == 13 || ch == KEY_ENTER
252
+ retval = default
253
+ end
254
+ end
347
255
  #retval = :YES if ch.chr == 'y'
348
- retval = (ch.chr == 'y' )
349
256
  ensure
350
257
  ewin.destroy
351
258
  end
352
259
  retval
353
260
  end
261
+ alias :confirm_window :rb_confirm
354
262
  # class created to display multiple messages without asking for user to hit a key
355
263
  # returns a window to which one can keep calling printstring with 0 or 1 as row.
356
264
  # destroy when finished.
@@ -451,6 +359,7 @@ end
451
359
  # You may also pass bgcolor and color
452
360
  # @since 1.4.1 2011-11-1
453
361
  def popuplist list, config={}, &block
362
+ raise ArgumentError, "Nil list received by popuplist" unless list
454
363
  require 'rbcurse/core/widgets/rlist'
455
364
 
456
365
  max_visible_items = config[:max_visible_items]
@@ -522,6 +431,7 @@ def popuplist list, config={}, &block
522
431
  end
523
432
  # returns length of longest
524
433
  def longest_in_list list #:nodoc:
434
+ raise ArgumentError, "rdialog.rb: longest_in_list recvd nil list" unless list
525
435
  longest = list.inject(0) do |memo,word|
526
436
  memo >= word.length ? memo : word.length
527
437
  end