rbcurse-core 0.0.0 → 0.0.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.
@@ -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