Class: Minder::MessageFrame
- Inherits:
-
Frame
- Object
- Frame
- Minder::MessageFrame
show all
- Defined in:
- lib/minder/cli/message_frame.rb
Instance Attribute Summary collapse
Attributes inherited from Frame
#height, #left, #lines, #min_height, #pomodoro_runner, #task_manager, #top, #width, #window
Instance Method Summary
collapse
Methods inherited from Frame
#build_window, #erase, #focus, #focused?, #handle_non_char_keypress, #has_cursor?, #hidden?, #hide, #listen, #move, #parse_template, #print_line, #refresh, #resize, #set_text, #unfocus, #unhide, #window_refresh
Constructor Details
Returns a new instance of MessageFrame.
9
10
11
12
13
14
|
# File 'lib/minder/cli/message_frame.rb', line 9
def initialize(*)
super
self.height = desired_height
@minimized = false
@editing = false
end
|
Instance Attribute Details
#current_line ⇒ Object
Returns the value of attribute current_line.
6
7
8
|
# File 'lib/minder/cli/message_frame.rb', line 6
def current_line
@current_line
end
|
#task_editor ⇒ Object
Returns the value of attribute task_editor.
6
7
8
|
# File 'lib/minder/cli/message_frame.rb', line 6
def task_editor
@task_editor
end
|
Instance Method Details
#allocated_tasks_height ⇒ Object
91
92
93
|
# File 'lib/minder/cli/message_frame.rb', line 91
def allocated_tasks_height
height - .length - 3
end
|
#desired_height ⇒ Object
84
85
86
87
88
89
|
# File 'lib/minder/cli/message_frame.rb', line 84
def desired_height
return 3 if minimized?
.length + tasks_text_lines.length + 3
end
|
#doing_message ⇒ Object
103
104
105
106
|
# File 'lib/minder/cli/message_frame.rb', line 103
def doing_message
+
offset_tasks_text
end
|
#editing? ⇒ Boolean
29
30
31
|
# File 'lib/minder/cli/message_frame.rb', line 29
def editing?
@editing
end
|
#handle_char_keypress(key) ⇒ Object
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
|
# File 'lib/minder/cli/message_frame.rb', line 154
def handle_char_keypress(key)
event =
case key
when 'j' then :select_next_task
when 'k' then :select_previous_task
when 'd' then :complete_task
when 'x' then :delete_task
when 's' then :start_task
when 'u' then :unstart_task
when 'G' then :select_last_task
when 'e'
@editing = true
@task_editor = TaskEditor.new(task_manager.selected_task, self)
@task_editor.add_observer(self, :handle_task_editor_event)
:edit_task
when '?' then :help
when '/' then :search
when 'm'
minimize
:redraw
when 'n' then :next_search
when 'N' then :previous_search
when 'f' then :open_filter
when 'g'
@keypress_memory ||= []
@keypress_memory << 'g'
if @keypress_memory == ['g', 'g']
@keypress_memory = []
:select_first_task
end
when ' '
if minimized?
unminimize
:redraw
end
end
changed
notify_observers(event)
end
|
#handle_keypress(key) ⇒ Object
132
133
134
135
136
137
138
|
# File 'lib/minder/cli/message_frame.rb', line 132
def handle_keypress(key)
if editing?
task_editor.handle_keypress(key)
else
super
end
end
|
#handle_task_editor_event(event, data = {}) ⇒ Object
140
141
142
143
144
145
146
147
148
149
150
151
152
|
# File 'lib/minder/cli/message_frame.rb', line 140
def handle_task_editor_event(event, data = {})
if event == :stop_editing
@editing = false
@task_editor = nil
elsif event == :update_task
task_manager.update_task(task_manager.selected_task, data)
@editing = false
@task_editor = nil
end
changed
notify_observers(event)
end
|
57
58
59
60
61
62
|
# File 'lib/minder/cli/message_frame.rb', line 57
def
<<-TEXT
Tasks ? to see commands
TEXT
end
|
80
81
82
|
# File 'lib/minder/cli/message_frame.rb', line 80
def
.split("\n")
end
|
#minimize ⇒ Object
16
17
18
|
# File 'lib/minder/cli/message_frame.rb', line 16
def minimize
@minimized = true
end
|
#minimized? ⇒ Boolean
25
26
27
|
# File 'lib/minder/cli/message_frame.rb', line 25
def minimized?
@minimized
end
|
#minimized_message ⇒ Object
43
44
45
46
47
|
# File 'lib/minder/cli/message_frame.rb', line 43
def minimized_message
<<-TEXT
Space to see tasks
TEXT
end
|
#offset_tasks_text ⇒ Object
95
96
97
|
# File 'lib/minder/cli/message_frame.rb', line 95
def offset_tasks_text
tasks_text_lines[visible_tasks_range].join("\n")
end
|
#prompt_message ⇒ Object
49
50
51
52
53
54
55
|
# File 'lib/minder/cli/message_frame.rb', line 49
def prompt_message
<<-TEXT
What are you working on?
Press (e) to open editor.
TEXT
end
|
123
124
125
126
127
128
129
130
|
# File 'lib/minder/cli/message_frame.rb', line 123
def scroll_offset
position = task_manager.selected_task_index + 1
if position > allocated_tasks_height
position - allocated_tasks_height
else
0
end
end
|
#set_cursor_position ⇒ Object
108
109
110
111
112
113
114
115
116
117
|
# File 'lib/minder/cli/message_frame.rb', line 108
def set_cursor_position
if minimized?
window.setpos(1, 20)
elsif editing?
window.setpos(3 + task_manager.selected_task_index - scroll_offset,
task_editor.cursor_position + 6)
else
window.setpos(3 + task_manager.selected_task_index - scroll_offset, 3)
end
end
|
#tasks_text ⇒ Object
64
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/minder/cli/message_frame.rb', line 64
def tasks_text
text = ''
task_manager.tasks.each do |task|
if task.started?
text += "-[*] #{task}\n"
else
text += "-[ ] #{task}\n"
end
end
text
end
|
#tasks_text_lines ⇒ Object
76
77
78
|
# File 'lib/minder/cli/message_frame.rb', line 76
def tasks_text_lines
tasks_text.split("\n")
end
|
#template ⇒ Object
33
34
35
36
37
38
39
40
41
|
# File 'lib/minder/cli/message_frame.rb', line 33
def template
if minimized?
minimized_message
elsif task_manager.tasks?
doing_message
else
prompt_message
end
end
|
#total_tasks_height ⇒ Object
119
120
121
|
# File 'lib/minder/cli/message_frame.rb', line 119
def total_tasks_height
task_manager.tasks.length
end
|
#unminimize ⇒ Object
20
21
22
23
|
# File 'lib/minder/cli/message_frame.rb', line 20
def unminimize
@minimized = false
self.height = desired_height
end
|
#visible_tasks_range ⇒ Object
99
100
101
|
# File 'lib/minder/cli/message_frame.rb', line 99
def visible_tasks_range
(scroll_offset..(allocated_tasks_height + scroll_offset - 1))
end
|