Class: Minder::Frame

Inherits:
Object
  • 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

#heightObject

Returns the value of attribute height.



7
8
9
# File 'lib/minder/frame.rb', line 7

def height
  @height
end

#leftObject

Returns the value of attribute left.



7
8
9
# File 'lib/minder/frame.rb', line 7

def left
  @left
end

#linesObject

Returns the value of attribute lines.



7
8
9
# File 'lib/minder/frame.rb', line 7

def lines
  @lines
end

#min_heightObject

Returns the value of attribute min_height.



7
8
9
# File 'lib/minder/frame.rb', line 7

def min_height
  @min_height
end

#pomodoro_runnerObject

Returns the value of attribute pomodoro_runner.



7
8
9
# File 'lib/minder/frame.rb', line 7

def pomodoro_runner
  @pomodoro_runner
end

#task_managerObject

Returns the value of attribute task_manager.



7
8
9
# File 'lib/minder/frame.rb', line 7

def task_manager
  @task_manager
end

#topObject

Returns the value of attribute top.



7
8
9
# File 'lib/minder/frame.rb', line 7

def top
  @top
end

#widthObject

Returns the value of attribute width.



7
8
9
# File 'lib/minder/frame.rb', line 7

def width
  @width
end

#windowObject

Returns the value of attribute window.



7
8
9
# File 'lib/minder/frame.rb', line 7

def window
  @window
end

Instance Method Details

#build_windowObject



41
42
43
# File 'lib/minder/frame.rb', line 41

def build_window
  Curses::Window.new(min_height, width, top, left)
end

#eraseObject



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

#focusObject



45
46
47
48
# File 'lib/minder/frame.rb', line 45

def focus
  @focused = true
  @has_cursor = true
end

#focused?Boolean

Returns:

  • (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 # tab
      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

Returns:

  • (Boolean)


80
81
82
# File 'lib/minder/frame.rb', line 80

def has_cursor?
  @has_cursor
end

#hidden?Boolean

Returns:

  • (Boolean)


59
60
61
# File 'lib/minder/frame.rb', line 59

def hidden?
  @hidden
end

#hideObject



63
64
65
66
# File 'lib/minder/frame.rb', line 63

def hide
  erase
  @hidden = true
end

#listenObject



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_templateObject



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


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

#refreshObject



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

#resizeObject



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_positionObject



141
142
143
# File 'lib/minder/frame.rb', line 141

def set_cursor_position
  window.setpos(1, 0)
end

#set_textObject



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

#templateObject

Raises:

  • (NotImplementedError)


72
73
74
# File 'lib/minder/frame.rb', line 72

def template
  raise NotImplementedError
end

#unfocusObject



50
51
52
53
# File 'lib/minder/frame.rb', line 50

def unfocus
  @focused = false
  @has_cursor = false
end

#unhideObject



68
69
70
# File 'lib/minder/frame.rb', line 68

def unhide
  @hidden = false
end

#window_refreshObject



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

def window_refresh
  window.refresh
end