Skip to content

Commit 91d331a

Browse files
authored
Merge pull request #60 from rfschmid/add-home-end-pgup-pgdn-to-channels-nodes
2 parents be92ac5 + 10179c4 commit 91d331a

File tree

1 file changed

+55
-32
lines changed

1 file changed

+55
-32
lines changed

ui/curses_ui.py

+55-32
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,6 @@ def highlight_line(highlight, window, line):
6161

6262
pad.chgat(line, 1, select_len, color | curses.A_REVERSE if highlight else color)
6363

64-
refresh_pad(window)
65-
6664
def add_notification(channel_number):
6765
globals.notifications.add(channel_number)
6866

@@ -197,51 +195,56 @@ def draw_node_list():
197195

198196
refresh_pad(2)
199197

200-
def select_channels(direction):
201-
channel_list_length = len(globals.channel_list)
198+
def select_channel(idx):
202199
old_selected_channel = globals.selected_channel
203-
globals.selected_channel += direction
204-
205-
if globals.selected_channel < 0:
206-
globals.selected_channel = channel_list_length - 1
207-
elif globals.selected_channel >= channel_list_length:
208-
globals.selected_channel = 0
200+
globals.selected_channel = max(0, min(idx, len(globals.channel_list) - 1))
209201
draw_messages_window(True)
210202

211203
# For now just re-draw channel list when clearing notifications, we can probably make this more efficient
212204
if globals.selected_channel in globals.notifications:
213205
remove_notification(globals.selected_channel)
214206
draw_channel_list()
215207
return
216-
217208
highlight_line(False, 0, old_selected_channel)
218209
highlight_line(True, 0, globals.selected_channel)
219-
220210
refresh_pad(0)
221211

222-
def select_messages(direction):
212+
def scroll_channels(direction):
213+
new_selected_channel = globals.selected_channel + direction
214+
215+
if new_selected_channel < 0:
216+
new_selected_channel = len(globals.channel_list) - 1
217+
elif new_selected_channel >= len(globals.channel_list):
218+
new_selected_channel = 0
219+
220+
select_channel(new_selected_channel)
221+
222+
def scroll_messages(direction):
223223
globals.selected_message += direction
224224

225225
msg_line_count = messages_pad.getmaxyx()[0]
226226
globals.selected_message = max(0, min(globals.selected_message, msg_line_count - get_msg_window_lines()))
227227

228228
refresh_pad(1)
229229

230-
def select_nodes(direction):
231-
node_list_length = len(globals.node_list)
230+
def select_node(idx):
232231
old_selected_node = globals.selected_node
233-
globals.selected_node += direction
234-
235-
if globals.selected_node < 0:
236-
globals.selected_node = node_list_length - 1
237-
elif globals.selected_node >= node_list_length:
238-
globals.selected_node = 0
232+
globals.selected_node = max(0, min(idx, len(globals.node_list) - 1))
239233

240234
highlight_line(False, 2, old_selected_node)
241235
highlight_line(True, 2, globals.selected_node)
242-
243236
refresh_pad(2)
244237

238+
def scroll_nodes(direction):
239+
new_selected_node = globals.selected_node + direction
240+
241+
if new_selected_node < 0:
242+
new_selected_node = len(globals.node_list) - 1
243+
elif new_selected_node >= len(globals.node_list):
244+
new_selected_node = 0
245+
246+
select_node(new_selected_node)
247+
245248
def draw_packetlog_win():
246249

247250
columns = [10,10,15,30]
@@ -349,41 +352,57 @@ def main_ui(stdscr):
349352

350353
if char == curses.KEY_UP:
351354
if globals.current_window == 0:
352-
select_channels(-1)
355+
scroll_channels(-1)
353356
elif globals.current_window == 1:
354-
select_messages(-1)
357+
scroll_messages(-1)
355358
elif globals.current_window == 2:
356-
select_nodes(-1)
359+
scroll_nodes(-1)
357360

358361
elif char == curses.KEY_DOWN:
359362
if globals.current_window == 0:
360-
select_channels(1)
363+
scroll_channels(1)
361364
elif globals.current_window == 1:
362-
select_messages(1)
365+
scroll_messages(1)
363366
elif globals.current_window == 2:
364-
select_nodes(1)
367+
scroll_nodes(1)
365368

366369
elif char == curses.KEY_HOME:
367-
if globals.current_window == 1:
370+
if globals.current_window == 0:
371+
select_channel(0)
372+
elif globals.current_window == 1:
368373
globals.selected_message = 0
369374
refresh_pad(1)
375+
elif globals.current_window == 2:
376+
select_node(0)
370377

371378
elif char == curses.KEY_END:
372-
if globals.current_window == 1:
379+
if globals.current_window == 0:
380+
select_channel(len(globals.channel_list) - 1)
381+
elif globals.current_window == 1:
373382
msg_line_count = messages_pad.getmaxyx()[0]
374383
globals.selected_message = max(msg_line_count - get_msg_window_lines(), 0)
375384
refresh_pad(1)
385+
elif globals.current_window == 2:
386+
select_node(len(globals.node_list) - 1)
376387

377388
elif char == curses.KEY_PPAGE:
378-
if globals.current_window == 1:
389+
if globals.current_window == 0:
390+
select_channel(globals.selected_channel - (channel_box.getmaxyx()[0] - 2)) # select_channel will bounds check for us
391+
elif globals.current_window == 1:
379392
globals.selected_message = max(globals.selected_message - get_msg_window_lines(), 0)
380393
refresh_pad(1)
394+
elif globals.current_window == 2:
395+
select_node(globals.selected_node - (nodes_box.getmaxyx()[0] - 2)) # select_node will bounds check for us
381396

382397
elif char == curses.KEY_NPAGE:
383-
if globals.current_window == 1:
398+
if globals.current_window == 0:
399+
select_channel(globals.selected_channel + (channel_box.getmaxyx()[0] - 2)) # select_channel will bounds check for us
400+
elif globals.current_window == 1:
384401
msg_line_count = messages_pad.getmaxyx()[0]
385402
globals.selected_message = min(globals.selected_message + get_msg_window_lines(), msg_line_count - get_msg_window_lines())
386403
refresh_pad(1)
404+
elif globals.current_window == 2:
405+
select_node(globals.selected_node + (nodes_box.getmaxyx()[0] - 2)) # select_node will bounds check for us
387406

388407
elif char == curses.KEY_LEFT or char == curses.KEY_RIGHT:
389408
delta = -1 if char == curses.KEY_LEFT else 1
@@ -396,6 +415,7 @@ def main_ui(stdscr):
396415
channel_box.box()
397416
channel_box.refresh()
398417
highlight_line(False, 0, globals.selected_channel)
418+
refresh_pad(0)
399419
if old_window == 1:
400420
messages_box.attrset(curses.color_pair(0))
401421
messages_box.box()
@@ -406,13 +426,15 @@ def main_ui(stdscr):
406426
nodes_box.box()
407427
nodes_box.refresh()
408428
highlight_line(False, 2, globals.selected_node)
429+
refresh_pad(2)
409430

410431
if globals.current_window == 0:
411432
channel_box.attrset(curses.color_pair(2))
412433
channel_box.box()
413434
channel_box.attrset(curses.color_pair(0))
414435
channel_box.refresh()
415436
highlight_line(True, 0, globals.selected_channel)
437+
refresh_pad(0)
416438
elif globals.current_window == 1:
417439
messages_box.attrset(curses.color_pair(2))
418440
messages_box.box()
@@ -425,6 +447,7 @@ def main_ui(stdscr):
425447
nodes_box.attrset(curses.color_pair(0))
426448
nodes_box.refresh()
427449
highlight_line(True, 2, globals.selected_node)
450+
refresh_pad(2)
428451

429452
# Check for Esc
430453
elif char == chr(27):

0 commit comments

Comments
 (0)