Re-arranged `Window`.rb and added section headers
[nfoiled.git] / lib / nfoiled / window.rb
blobe74debf1f682dfb9a879ea6712e0ab188b39fb04
1 module Nfoiled
2   ##
3   # An `Nfoiled::Window` is a "box" in the terminal to which output can be
4   # printed and from which input can be received. A basic Nfoiled application
5   # will utilize only one of these, a single `Window` covering the entirety
6   # of the `Terminal`'s available area.
7   class Window
8     
9     class <<self
10       # This is simply an accessor for all the windows on the current Terminal.
11       attr_reader :windows
12       def windows; Terminal.current.windows; end
13     end
14     
15     # ==============
16     # = Attributes =
17     # ==============
18     
19     # The Y co-ordinate of the top left corner of this `Window`'s bounding box
20     attr_reader :top
21     # The X co-ordinate of the top left corner of this `Window`'s bounding box
22     attr_reader :left
23     # The height in lines of this `Window`'s bounding box
24     attr_reader :height
25     # The width in columns of this `Window`'s bounding box
26     attr_reader :width
27     
28     # The actual window object as returned by Ncurses
29     attr_reader :wrapee
30     
31     # The `Terminal` that this `Window` pertains to
32     attr_reader :owner
33     
34     # ====================
35     # = Setup / Teardown =
36     # ====================
37     
38     ##
39     # Responsible for creating a new `Window`, this will also take care of
40     # initializing Ncurses if necessary.
41     def initialize opts = Hash.new
42       Nfoiled::initialize
43       
44       @wrapee = ::Ncurses.newwin(
45         opts[:height] ? @height = opts[:height] : ::Ncurses.LINES,
46         opts[:width]  ? @width =  opts[:width]  : ::Ncurses.COLS,
47         opts[:top]    ? @top =    opts[:top]    : 0,
48         opts[:left]   ? @left =   opts[:left]   : 0)
49       
50       (@owner = Terminal.current).windows << self
51     end
52     
53     ##
54     # Destroys the `wrapee` of this `Window`, and removes this `Window`
55     # from its owning `Terminal`'s `#windows`.
56     def destroy!
57       ::Ncurses.delwin(@wrapee)
58       @wrapee = nil
59       @owner.windows.delete self
60     end
61     
62     # ==========
63     # = Output =
64     # ==========
65     
66     ##
67     # Prints a string to the window
68     def print string
69       @wrapee.printw string
70       @wrapee.wnoutrefresh
71     end
72     
73     ##
74     # Prints a string, followed by a newline, to the window
75     def puts string
76       self.print string.to_s + "\n"
77     end
78   end
79 end