Class: PPCurses::Form

Inherits:
View show all
Defined in:
lib/ppcurses/form/form.rb

Instance Attribute Summary collapse

Attributes inherited from View

#frame

Attributes inherited from ResponderManager

#first_responder

Attributes inherited from Responder

#next_responder

Instance Method Summary collapse

Methods inherited from View

#setFrameOrigin, #setFrameSize

Methods inherited from ResponderManager

#accepts_first_responder, #make_first_responder

Methods inherited from Responder

#accepts_first_responder, #become_first_responder, isa, #resign_first_responder

Constructor Details

#initializeForm

Screen should be of type Curses::Window



10
11
12
13
14
15
# File 'lib/ppcurses/form/form.rb', line 10

def initialize
  super
  origin = Point.new( 1, 1 )
  setFrameOrigin(origin)
  @elements = []
end

Instance Attribute Details

#selected_elementObject

Returns the value of attribute selected_element.



5
6
7
# File 'lib/ppcurses/form/form.rb', line 5

def selected_element
  @selected_element
end

Instance Method Details

#add(element) ⇒ Object

Formal protocol required Adds an element to the form. Elements are rendered in the order they are added.

An element must implement the following protocol:

  • def show(screen)

  • def height

  • def set_curs_pos(screen)

  • def key_down(key)

  • def selected=



28
29
30
31
32
33
34
35
36
37
38
# File 'lib/ppcurses/form/form.rb', line 28

def add (element)
  PPCurses.implements_protocol( element, %w(show height set_curs_pos key_down selected= clear))
  @elements.push(element)

  if  @selected_element.nil?
    set_selected_element(@elements[0])
  end
  
  @frame.size.height += element.height
  
end

#clearObject

clears or resets all values of elements in the form



84
85
86
87
88
# File 'lib/ppcurses/form/form.rb', line 84

def clear
  for i in 0..@elements.length - 1
    @elements[i].clear
  end
end

#display(screen) ⇒ Object

TODO – call display of subview???



68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/ppcurses/form/form.rb', line 68

def display(screen)
   y = @frame.origin.y
   x = @frame.origin.x

  for i in 0..@elements.length - 1
    element = @elements[i]
    screen.setpos(y, x)
    element.show(screen)
    y += element.height
  end


  @selected_element.set_curs_pos(screen) unless @selected_element.nil?
end

#key_down(key) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/ppcurses/form/form.rb', line 46

def key_down( key )

  if key == KEY_UP or key == KEY_DOWN or key == TAB
    selected_index = @elements.index(@selected_element)
    n_choices = @elements.length

    if key == KEY_DOWN or key == TAB
      (selected_index == n_choices-1) ? next_selection = 0 : next_selection = selected_index + 1
    else
      (selected_index == 0) ? next_selection = n_choices - 1 : next_selection =  selected_index - 1
    end

    set_selected_element(@elements[next_selection])
    return
  end

  @selected_element.key_down(key)

end

#submitted?Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/ppcurses/form/form.rb', line 41

def 
  @button_pair.button1.pushed
end