]> git.cworth.org Git - sup/blob - lib/sup/textfield.rb
moved evertying to devel
[sup] / lib / sup / textfield.rb
1 require 'curses'
2
3 module Redwood
4
5 class TextField
6   attr_reader :value
7
8   def initialize window, y, x, width
9     @w, @x, @y = window, x, y
10     @width = width
11     @i = nil
12     @history = []
13   end
14
15   def activate question, default=nil
16     @question = question
17     @value = nil
18     @field = Ncurses::Form.new_field 1, @width - question.length,
19                                      @y, @x + question.length, 0, 0
20     @form = Ncurses::Form.new_form [@field]
21
22     @history[@i = @history.size] = default || ""
23     Ncurses::Form.post_form @form
24     @field.set_field_buffer 0, @history[@i]
25   end
26
27   def position_cursor
28     @w.attrset Colormap.color_for(:none)
29     @w.mvaddstr @y, 0, @question
30     Ncurses.curs_set 1
31     Ncurses::Form.form_driver @form, Ncurses::Form::REQ_END_FIELD
32   end
33
34   def deactivate
35     @form.unpost_form
36     @form.free_form
37     @field.free_field
38     Ncurses.curs_set 0
39   end
40
41   def handle_input c
42     if c == 10 # Ncurses::KEY_ENTER
43       Ncurses::Form.form_driver @form, Ncurses::Form::REQ_VALIDATION
44       @value = @history[@i] = @field.field_buffer(0).gsub(/^\s+|\s+$/, "").gsub(/\s+/, " ")
45       return false
46     elsif c == Ncurses::KEY_CANCEL
47       @history.delete_at @i
48       @i = @history.empty? ? nil : (@i - 1) % @history.size 
49       @value = nil
50       return false
51     end
52
53     d =
54       case c
55       when Ncurses::KEY_LEFT
56         Ncurses::Form::REQ_PREV_CHAR
57       when Ncurses::KEY_RIGHT
58         Ncurses::Form::REQ_NEXT_CHAR
59       when Ncurses::KEY_BACKSPACE
60         Ncurses::Form::REQ_DEL_PREV
61       when ?\001
62         Ncurses::Form::REQ_BEG_FIELD
63       when ?\005
64         Ncurses::Form::REQ_END_FIELD
65       when Ncurses::KEY_UP
66         @history[@i] = @field.field_buffer(0)
67         @i = (@i - 1) % @history.size
68         @field.set_field_buffer 0, @history[@i]
69       when Ncurses::KEY_DOWN
70         @history[@i] = @field.field_buffer(0)
71         @i = (@i + 1) % @history.size
72         @field.set_field_buffer 0, @history[@i]
73       else
74         c
75       end
76
77     Ncurses::Form.form_driver @form, d
78     Ncurses.refresh
79
80     true
81   end
82 end
83 end