From f1996f51ba1744260bba4d7c3aa5d9a84c97236e Mon Sep 17 00:00:00 2001 From: Louis Burda Date: Thu, 16 Mar 2023 13:32:35 +0100 Subject: Update liblist and add keybind to sort tracks and tags --- src/tui.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'src/tui.c') diff --git a/src/tui.c b/src/tui.c index 343b1f5..0a74238 100644 --- a/src/tui.c +++ b/src/tui.c @@ -1,3 +1,4 @@ +#include #define NCURSES_WIDECHAR 1 #define _GNU_SOURCE @@ -53,6 +54,8 @@ static bool toggle_current_tag(void); static void select_only_current_tag(void); static void seek_next_selected_tag(void); static void delete_current_tag(void); +static bool tag_name_cmp(struct link *l1, struct link *l2); +static void sort_visible_tags(void); static bool tag_pane_input(wint_t c); static void tag_pane_vis(struct pane *pane, int sel); @@ -63,6 +66,8 @@ static bool rename_current_track(void); static bool delete_current_track(void); static void queue_current_track(void); static void unqueue_last_track(void); +static bool track_vis_name_cmp(struct link *l1, struct link *l2); +static void sort_visible_tracks(void); static bool track_pane_input(wint_t c); static void track_pane_vis(struct pane *pane, int sel); @@ -415,6 +420,23 @@ delete_current_tag(void) tag_rm(tag, true); } +bool +tag_name_cmp(struct link *l1, struct link *l2) +{ + struct tag *t1, *t2; + + t1 = LINK_UPCAST(l1, struct tag, link); + t2 = LINK_UPCAST(l2, struct tag, link); + + return strcmp(t1->name, t2->name) <= 0; +} + +void +sort_visible_tags(void) +{ + list_sort(&tags, false, tag_name_cmp); +} + bool tag_pane_input(wint_t c) { @@ -452,6 +474,9 @@ tag_pane_input(wint_t c) case L'D': /* delete tag */ delete_current_tag(); break; + case KEY_CTRL(L's'): + sort_visible_tags(); + break; default: return false; } @@ -621,6 +646,23 @@ unqueue_last_track(void) link_pop(link); } +bool +track_vis_name_cmp(struct link *l1, struct link *l2) +{ + struct track *t1, *t2; + + t1 = tracks_vis_track(l1); + t2 = tracks_vis_track(l2); + + return strcmp(t1->name, t2->name) <= 0; +} + +void +sort_visible_tracks(void) +{ + list_sort(tracks_vis, false, track_vis_name_cmp); +} + bool track_pane_input(wint_t c) { @@ -663,6 +705,9 @@ track_pane_input(wint_t c) case L'D': /* delete track */ delete_current_track(); break; + case KEY_CTRL(L's'): /* sort track in view */ + sort_visible_tracks(); + break; default: return false; } -- cgit v1.2.3-71-gd317