commit 1c7633a9f26f8dffb3af4e87559023c772d9018a
parent 43d1062cc6c524fe6886dd4f26fc68b5ae393f89
Author: Paco Esteban <paco@e1e0.net>
Date: Sat, 26 Jun 2021 17:57:32 +0200
basic up/down navigation in curses
Diffstat:
1 file changed, 44 insertions(+), 6 deletions(-)
diff --git a/subclient/subclient.py b/subclient/subclient.py
@@ -24,15 +24,51 @@ class SubClient:
self.config = configparser.ConfigParser()
self.config.read(get_config_file())
self.subsonic = subsonic.Subsonic(self.config['subclient'])
- self.artists = self.subsonic.get_artists()
+ self.nav_list = self.subsonic.get_artists()
+ self.nav_y = 0
+ self.nav_selected = 0
+ self.nav_list_selected = 0
def load_artists(self):
- for i, artist in enumerate(self.artists):
- self.nav_win.addstr(i, 0, artist.name)
+ for i, artist in enumerate(self.nav_list):
+ if i == self.nav_list_selected:
+ self.nav_win.addstr(i, 0, artist.name, curses.A_REVERSE)
+ else:
+ self.nav_win.addstr(i, 0, artist.name)
+
+ def nav_down(self):
+ self.nav_selected += 1
+ self.nav_list_selected += 1
+ if self.nav_list_selected > len(self.nav_list):
+ self.nav_list_selected = len(self.nav_list)
+ if self.nav_selected >= (curses.LINES - 3):
+ self.nav_y += 1
+ self.nav_selected = curses.LINES - 3
+ self.nav_win.clear()
+ self.load_artists()
+ self.nav_win.refresh(self.nav_y, 0, 0, 0,
+ curses.LINES - 1, curses.COLS - 1)
+
+ def nav_up(self):
+ self.nav_selected -= 1
+ self.nav_list_selected -= 1
+ if self.nav_list_selected < 0:
+ self.nav_list_selected = 0
+ if self.nav_selected <= 3:
+ self.nav_y -= 1
+ if self.nav_selected < 0:
+ self.nav_selected = 0
+ if self.nav_y < 0:
+ self.nav_y = 0
+ self.nav_win.clear()
+ self.load_artists()
+ self.nav_win.refresh(self.nav_y, 0, 0, 0,
+ curses.LINES - 1, curses.COLS - 1)
def refresh(self):
self.stdscr.noutrefresh()
- self.nav_win.noutrefresh(0, 0, 0, 0, curses.LINES - 1, curses.COLS - 1)
+ self.nav_win.noutrefresh(self.nav_y, 0, 0, 0,
+ curses.LINES - 1, curses.COLS - 1)
curses.doupdate()
def main_loop(self):
@@ -41,11 +77,13 @@ class SubClient:
if c == 'q': # quit
break
elif c == 'j':
- self.stdscr.clear()
+ self.nav_down()
+ elif c == 'k':
+ self.nav_up()
def start(self, stdscr):
self.stdscr = stdscr
- self.nav_win = curses.newpad(len(self.artists) + 1, curses.COLS - 1)
+ self.nav_win = curses.newpad(len(self.nav_list) + 1, curses.COLS - 1)
self.stdscr.clear()
curses.curs_set(0) # disable cursor
self.load_artists()