Class: Zashoku::View
- Inherits:
-
Object
show all
- Includes:
- Observable, Util
- Defined in:
- lib/core/view.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods included from Util
alert, decode_object, encode_object, get_yaml, put_yaml
Constructor Details
#initialize ⇒ View
Returns a new instance of View.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# File 'lib/core/view.rb', line 15
def initialize
@attributes = {}
@children = true
@expanded = -1
@selected = 0
@items_formatted = {}
@old_rows = Term.rows
@view = [0, Term.rows - 3]
refresh
end
|
Instance Attribute Details
#attributes ⇒ Object
Returns the value of attribute attributes.
13
14
15
|
# File 'lib/core/view.rb', line 13
def attributes
@attributes
end
|
Returns the value of attribute format.
13
14
15
|
# File 'lib/core/view.rb', line 13
def format
@format
end
|
Returns the value of attribute items_formatted.
13
14
15
|
# File 'lib/core/view.rb', line 13
def items_formatted
@items_formatted
end
|
Instance Method Details
#adjust_view ⇒ Object
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
|
# File 'lib/core/view.rb', line 166
def adjust_view
buffer = 2
bottom = Term.rows - 3
ov = @view.clone
diff = 0
if @selected < @view[0] + buffer while @selected < @view[0] + buffer
@view[0] -= 1
@view[1] -= 1
end
elsif (@selected > @view[1] - (buffer + 1)) && (@selected < get_len - buffer)
while (@selected > @view[1] - (buffer + 1)) && (@selected < get_len - buffer)
@view[0] += 1
@view[1] += 1
end
end
diff = 0 - @view[0] if @view[0].negative?
diff = bottom - @view[1] if @view[1] < bottom
@view[0] += diff
@view[1] += diff
dirty_all_lines unless ov == @view
end
|
#auto_update(s: :start) ⇒ Object
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
# File 'lib/core/view.rb', line 45
def auto_update(s: :start)
case s
when :start
@update_thread = Thread.new do
loop do
refresh
changed!
sleep 1
end
end
when :stop
@update_thread.exit if @update_thread
end
end
|
#change_screen_size(redraw: true) ⇒ Object
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/core/view.rb', line 60
def change_screen_size(redraw: true)
@items_formatted = {}
refresh_formats
diff = Term.rows - @old_rows
@view[1] += diff
@old_rows = Term.rows
adjust_view
if redraw
dirty_all_lines
draw
end
end
|
#changed! ⇒ Object
39
40
41
42
43
|
# File 'lib/core/view.rb', line 39
def changed!
fix_cursor
changed
notify_observers
end
|
#color(index) ⇒ Object
158
159
160
161
162
163
164
|
# File 'lib/core/view.rb', line 158
def color(index)
if index == @selected
Zashoku.conf.get(%w[color selected])
else
Zashoku.conf.get(%w[color secondary])
end
end
|
#dirty_all_lines ⇒ Object
31
32
33
|
# File 'lib/core/view.rb', line 31
def dirty_all_lines
@dirty_lines = 0.step(get_len).to_a
end
|
#draw ⇒ Object
238
239
240
241
242
243
244
245
246
247
248
249
250
251
|
# File 'lib/core/view.rb', line 238
def draw
line_on = @view[0]
lines_to_draw = @view[1]
print "\e[1;1H#{@cl['m']}#{@title_formatted}\e[K"
while line_on < lines_to_draw
draw_line(line_on) if @dirty_lines.include?(line_on)
line_on += 1
end
@dirty_lines.clear
end
|
#draw_line(line_on) ⇒ Object
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
|
# File 'lib/core/view.rb', line 210
def draw_line(line_on)
in_outer_region = line_on < get_len
rs = resolve_selected(line_on)
line = line_on - @view[0] + 2
lc =
if line_on == @selected
@cl['s']
elsif rs['in_expanded']
@cl['2']
else
@cl['1']
end
lo = "\e[#{line};1H#{lc}"
item =
if rs['in_expanded'] && @children
"#{@items_formatted.values[@expanded][rs['in']]}"
elsif in_outer_region
"#{@items_formatted.keys[rs['out']]}"
else
''
end
print "#{lo}#{item}\e[K" end
|
#expand(i) ⇒ Object
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
# File 'lib/core/view.rb', line 86
def expand(i)
return if i > @items.length
oexpanded = @expanded
if @expanded == i
@selected = @expanded
@expanded = -1
else
@selected = i
@expanded = i
end
arr = [@expanded, oexpanded] - [-1]
@dirty_lines = arr.min.step(@view[1]).to_a
changed!
end
|
#fix_cursor ⇒ Object
147
148
149
150
|
# File 'lib/core/view.rb', line 147
def fix_cursor
@selected = 0 if @selected < 0
@selected = get_len - 1 if @selected >= get_len
end
|
257
|
# File 'lib/core/view.rb', line 257
def get_format; '' end
|
#get_len ⇒ Object
152
153
154
155
156
|
# File 'lib/core/view.rb', line 152
def get_len
len = @items.length
len += @items.values[@expanded].length if @expanded >= 0
len
end
|
#move_cursor(dir) ⇒ Object
137
138
139
140
141
142
143
144
145
|
# File 'lib/core/view.rb', line 137
def move_cursor(dir)
os = @selected
@selected -= 1 if dir == 'up'
@selected += 1 if dir == 'down'
@dirty_lines += [os, @selected]
adjust_view
changed!
end
|
#pause ⇒ Object
37
|
# File 'lib/core/view.rb', line 37
def pause; end
|
#refresh ⇒ Object
76
77
78
79
80
81
82
83
84
|
# File 'lib/core/view.rb', line 76
def refresh
@items = refresh_items
@children = @items.class == Hash
refresh_attributes
refresh_formats
dirty_all_lines
@expanded = -1 if @children && @items.values[@expanded].nil?
changed!
end
|
#refresh_attributes ⇒ Object
253
|
# File 'lib/core/view.rb', line 253
def refresh_attributes; end
|
#refresh_items ⇒ Object
255
|
# File 'lib/core/view.rb', line 255
def refresh_items; [] end
|
#resolve_selected(resolve_me = @selected) ⇒ Object
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
# File 'lib/core/view.rb', line 103
def resolve_selected(resolve_me = @selected)
in_expanded = false
inside = 0
outside = resolve_me
if @expanded > -1
if (resolve_me > @expanded) && (resolve_me <= (@items.values[@expanded].length + @expanded))
outside = @expanded
inside = resolve_me - @expanded - 1
in_expanded = true
elsif resolve_me > @expanded
outside = resolve_me - @items.values[@expanded].length
end
end
{
'out' => outside,
'in' => inside,
'in_expanded' => in_expanded
}
end
|
#selected_group ⇒ Object
124
125
126
|
# File 'lib/core/view.rb', line 124
def selected_group
resolve_selected['out']
end
|
#selected_item ⇒ Object
128
129
130
131
132
133
134
135
|
# File 'lib/core/view.rb', line 128
def selected_item
rs = resolve_selected
if rs['in_expanded']
@items.values[rs["out"]][rs["in"]]
else
@items.keys[rs['out']]
end
end
|
#unpause ⇒ Object
35
|
# File 'lib/core/view.rb', line 35
def unpause; end
|