Class: Minder::Frame
- Inherits:
-
Object
show all
- Includes:
- Observable
- Defined in:
- lib/minder/frame.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(**options) ⇒ Frame
Returns a new instance of Frame.
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# File 'lib/minder/frame.rb', line 17
def initialize(**options)
height = options.fetch(:height, 3)
width = options.fetch(:width, 40)
top = options.fetch(:top, 0)
left = options.fetch(:left, 0)
task_manager = options.fetch(:task_manager)
pomodoro_runner = options.fetch(:pomodoro_runner)
@focused = false
@hidden = false
@has_cursor = false
self.pomodoro_runner = pomodoro_runner
self.task_manager = task_manager
self.min_height = height
self.height = height
self.width = width
self.top = top
self.left = left
self.window = build_window
self.lines = []
end
|
Instance Attribute Details
#height ⇒ Object
Returns the value of attribute height.
7
8
9
|
# File 'lib/minder/frame.rb', line 7
def height
@height
end
|
#left ⇒ Object
Returns the value of attribute left.
7
8
9
|
# File 'lib/minder/frame.rb', line 7
def left
@left
end
|
#lines ⇒ Object
Returns the value of attribute lines.
7
8
9
|
# File 'lib/minder/frame.rb', line 7
def lines
@lines
end
|
#min_height ⇒ Object
Returns the value of attribute min_height.
7
8
9
|
# File 'lib/minder/frame.rb', line 7
def min_height
@min_height
end
|
#pomodoro_runner ⇒ Object
Returns the value of attribute pomodoro_runner.
7
8
9
|
# File 'lib/minder/frame.rb', line 7
def pomodoro_runner
@pomodoro_runner
end
|
#task_manager ⇒ Object
Returns the value of attribute task_manager.
7
8
9
|
# File 'lib/minder/frame.rb', line 7
def task_manager
@task_manager
end
|
#top ⇒ Object
Returns the value of attribute top.
7
8
9
|
# File 'lib/minder/frame.rb', line 7
def top
@top
end
|
#width ⇒ Object
Returns the value of attribute width.
7
8
9
|
# File 'lib/minder/frame.rb', line 7
def width
@width
end
|
#window ⇒ Object
Returns the value of attribute window.
7
8
9
|
# File 'lib/minder/frame.rb', line 7
def window
@window
end
|
Instance Method Details
#build_window ⇒ Object
41
42
43
|
# File 'lib/minder/frame.rb', line 41
def build_window
Curses::Window.new(min_height, width, top, left)
end
|
#erase ⇒ Object
133
134
135
136
137
138
139
|
# File 'lib/minder/frame.rb', line 133
def erase
height.times do |index|
window.setpos(index, 0)
window.addstr(' ' * width )
end
window_refresh
end
|
#focus ⇒ Object
45
46
47
48
|
# File 'lib/minder/frame.rb', line 45
def focus
@focused = true
@has_cursor = true
end
|
#focused? ⇒ Boolean
55
56
57
|
# File 'lib/minder/frame.rb', line 55
def focused?
@focused
end
|
#handle_char_keypress(key) ⇒ Object
169
170
|
# File 'lib/minder/frame.rb', line 169
def handle_char_keypress(key)
end
|
#handle_keypress(key) ⇒ Object
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
# File 'lib/minder/frame.rb', line 151
def handle_keypress(key)
return unless key
if key.is_a?(Fixnum)
if key == 9 changed
notify_observers(:switch_focus)
else
handle_non_char_keypress(key)
end
else
handle_char_keypress(key)
end
end
|
#handle_non_char_keypress(key) ⇒ Object
166
167
|
# File 'lib/minder/frame.rb', line 166
def handle_non_char_keypress(key)
end
|
#has_cursor? ⇒ Boolean
80
81
82
|
# File 'lib/minder/frame.rb', line 80
def has_cursor?
@has_cursor
end
|
#hidden? ⇒ Boolean
59
60
61
|
# File 'lib/minder/frame.rb', line 59
def hidden?
@hidden
end
|
#hide ⇒ Object
63
64
65
66
|
# File 'lib/minder/frame.rb', line 63
def hide
erase
@hidden = true
end
|
#listen ⇒ Object
84
85
86
87
|
# File 'lib/minder/frame.rb', line 84
def listen
window.timeout = 0
handle_keypress(window.getch)
end
|
#move(top, left) ⇒ Object
76
77
78
|
# File 'lib/minder/frame.rb', line 76
def move(top, left)
window.move(top, left)
end
|
#parse_template ⇒ Object
100
101
102
103
|
# File 'lib/minder/frame.rb', line 100
def parse_template
b = binding
self.lines = ERB.new(template).result(b).split("\n")
end
|
#print_line(text) ⇒ Object
145
146
147
148
149
|
# File 'lib/minder/frame.rb', line 145
def print_line(text)
text = text[0,width - 2]
remainder = width - 2 - text.length
window.addstr(text + ' ' * remainder)
end
|
#refresh ⇒ Object
89
90
91
92
93
94
|
# File 'lib/minder/frame.rb', line 89
def refresh
return if @hidden
parse_template
set_text
window_refresh
end
|
#resize ⇒ Object
105
106
107
108
109
110
111
112
113
114
115
116
117
|
# File 'lib/minder/frame.rb', line 105
def resize
erase
self.width = Curses.cols
if lines.length >= min_height - 2
self.height = lines.length + 2
else
self.height = min_height
end
window.resize(height, width)
window_refresh
end
|
#set_cursor_position ⇒ Object
141
142
143
|
# File 'lib/minder/frame.rb', line 141
def set_cursor_position
window.setpos(1, 0)
end
|
#set_text ⇒ Object
119
120
121
122
123
124
125
126
127
128
129
130
131
|
# File 'lib/minder/frame.rb', line 119
def set_text
window.box(?|, ?-)
height.times do |index|
next if index >= height - 2
window.setpos(index + 1, 1)
line = lines[index]
if line
print_line(line)
else
print_line('')
end
end
end
|
#template ⇒ Object
72
73
74
|
# File 'lib/minder/frame.rb', line 72
def template
raise NotImplementedError
end
|
#unfocus ⇒ Object
50
51
52
53
|
# File 'lib/minder/frame.rb', line 50
def unfocus
@focused = false
@has_cursor = false
end
|
#unhide ⇒ Object
68
69
70
|
# File 'lib/minder/frame.rb', line 68
def unhide
@hidden = false
end
|
#window_refresh ⇒ Object
96
97
98
|
# File 'lib/minder/frame.rb', line 96
def window_refresh
window.refresh
end
|