Class: Minder::MessageFrame

Inherits:
Frame
  • Object
show all
Defined in:
lib/minder/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_keypress, #handle_non_char_keypress, #has_cursor?, #hidden?, #hide, #listen, #move, #parse_template, #print_line, #refresh, #resize, #set_text, #unfocus, #unhide, #window_refresh

Constructor Details

#initializeMessageFrame

Returns a new instance of MessageFrame.



7
8
9
10
11
# File 'lib/minder/message_frame.rb', line 7

def initialize(*)
  super
  self.height = desired_height
  @minimized = false
end

Instance Attribute Details

#current_lineObject (readonly)

Returns the value of attribute current_line.



5
6
7
# File 'lib/minder/message_frame.rb', line 5

def current_line
  @current_line
end

Instance Method Details

#allocated_tasks_heightObject



84
85
86
# File 'lib/minder/message_frame.rb', line 84

def allocated_tasks_height
  height - header_text_lines.length - 3
end

#desired_heightObject



77
78
79
80
81
82
# File 'lib/minder/message_frame.rb', line 77

def desired_height
  return 3 if minimized?

  # TODO: figure out what this magic 3 number is
  header_text_lines.length + tasks_text_lines.length + 3
end

#doing_messageObject



96
97
98
99
# File 'lib/minder/message_frame.rb', line 96

def doing_message
  header_text +
    offset_tasks_text
end

#handle_char_keypress(key) ⇒ Object



122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# File 'lib/minder/message_frame.rb', line 122

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' then :editor
  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

#header_textObject



50
51
52
53
54
55
# File 'lib/minder/message_frame.rb', line 50

def header_text
"Tasks         ? to see commands\n\n"
end

#header_text_linesObject



73
74
75
# File 'lib/minder/message_frame.rb', line 73

def header_text_lines
  header_text.split("\n")
end

#minimizeObject



13
14
15
# File 'lib/minder/message_frame.rb', line 13

def minimize
  @minimized = true
end

#minimized?Boolean

Returns:

  • (Boolean)


22
23
24
# File 'lib/minder/message_frame.rb', line 22

def minimized?
  @minimized
end

#minimized_messageObject



36
37
38
39
40
# File 'lib/minder/message_frame.rb', line 36

def minimized_message
"Space to see tasks\n"
end

#offset_tasks_textObject



88
89
90
# File 'lib/minder/message_frame.rb', line 88

def offset_tasks_text
  tasks_text_lines[visible_tasks_range].join("\n")
end

#prompt_messageObject



42
43
44
45
46
47
48
# File 'lib/minder/message_frame.rb', line 42

def prompt_message
  "What are you working on?\n\nPress (e) to open editor.\n"
end

#scroll_offsetObject



113
114
115
116
117
118
119
120
# File 'lib/minder/message_frame.rb', line 113

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_positionObject



101
102
103
104
105
106
107
# File 'lib/minder/message_frame.rb', line 101

def set_cursor_position
  if minimized?
    window.setpos(1, 20)
  else
    window.setpos(3 + task_manager.selected_task_index - scroll_offset, 3)
  end
end

#tasks_textObject



57
58
59
60
61
62
63
64
65
66
67
# File 'lib/minder/message_frame.rb', line 57

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_linesObject



69
70
71
# File 'lib/minder/message_frame.rb', line 69

def tasks_text_lines
  tasks_text.split("\n")
end

#templateObject



26
27
28
29
30
31
32
33
34
# File 'lib/minder/message_frame.rb', line 26

def template
  if minimized?
    minimized_message
  elsif task_manager.tasks?
    doing_message
  else
    prompt_message
  end
end

#total_tasks_heightObject



109
110
111
# File 'lib/minder/message_frame.rb', line 109

def total_tasks_height
  task_manager.tasks.length
end

#unminimizeObject



17
18
19
20
# File 'lib/minder/message_frame.rb', line 17

def unminimize
  @minimized = false
  self.height = desired_height
end

#visible_tasks_rangeObject



92
93
94
# File 'lib/minder/message_frame.rb', line 92

def visible_tasks_range
  (scroll_offset..(allocated_tasks_height + scroll_offset - 1))
end