diff options
| author | Louis Burda <quent.burda@gmail.com> | 2023-02-04 16:06:53 +0100 |
|---|---|---|
| committer | Louis Burda <quent.burda@gmail.com> | 2023-02-04 16:06:53 +0100 |
| commit | 4043e0c796f3be54414ef903caaa95f6f08aa8e0 (patch) | |
| tree | 6f9ad372c0653f31b47771e44c35f921dcd08aaf /src | |
| parent | 3c6cb23a13a590c0a68b521ddb6ccde9a55287fc (diff) | |
| download | tmus-4043e0c796f3be54414ef903caaa95f6f08aa8e0.tar.gz tmus-4043e0c796f3be54414ef903caaa95f6f08aa8e0.zip | |
Add popup for deletion of tags
Diffstat (limited to 'src')
| -rw-r--r-- | src/tui.c | 55 |
1 files changed, 44 insertions, 11 deletions
@@ -1,4 +1,3 @@ -#include <stdbool.h> #define NCURSES_WIDECHAR 1 #define _GNU_SOURCE @@ -41,6 +40,7 @@ enum { typedef char *(*completion_gen)(const char *text, int fwd, int state); static void pane_title(struct pane *pane, bool highlight, const char *fmtstr, ...); +static bool confirm_popup(const char *prompt); static char *command_name_gen(const char *text, int fwd, int state); static char *track_vis_name_gen(const char *text, int fwd, int state); @@ -51,7 +51,7 @@ static bool rename_current_tag(void); static bool toggle_current_tag(void); static void select_only_current_tag(void); static void seek_next_selected_tag(void); -static void delete_selected_tag(void); +static void delete_current_tag(void); static bool tag_pane_input(wint_t c); static void tag_pane_vis(struct pane *pane, int sel); @@ -60,7 +60,7 @@ static bool play_selected_track(void); static bool seek_track_tag(struct track *target); static bool seek_track(struct track *target); static bool rename_current_track(void); -static bool delete_selected_track(void); +static bool delete_current_track(void); static bool track_pane_input(wint_t c); static void track_pane_vis(struct pane *pane, int sel); @@ -150,6 +150,36 @@ pane_title(struct pane *pane, bool highlight, const char *fmtstr, ...) style_off(pane->win, STYLE_TITLE); } +bool +confirm_popup(const char *prompt) +{ + WINDOW *win; + int maxx, maxy; + int sx, sy, w, h; + int tx, ty; + unsigned int c; + + getmaxyx(stdscr, maxy, maxx); + + w = 30; + h = 5; + sx = (maxx - w) / 2; + sy = (maxy - h) / 2; + win = newwin(h, w, sy, sx); + + tx = (w - strlen(prompt)) / 2; + ty = h / 2; + wborder(win, 0, 0, 0, 0, 0, 0, 0, 0); + mvwprintw(win, ty, tx, "%s", prompt); + wrefresh(win); + + while ((c = wgetch(win)) && c >= 128); + + delwin(win); + + return c == 'y'; +} + char * command_name_gen(const char *text, int fwd, int reset) { @@ -325,6 +355,8 @@ toggle_current_tag(void) list_push_back(&tags_sel, &tag->link_sel); } + playlist_outdated = true; + return true; } @@ -332,7 +364,6 @@ void select_only_current_tag(void) { list_clear(&tags_sel); - toggle_current_tag(); } @@ -368,14 +399,19 @@ seek_next_selected_tag(void) } void -delete_selected_tag(void) +delete_current_tag(void) { struct link *link; struct tag *tag; + if (!confirm_popup("Delete tag?")) + return; + link = list_at(&tags, tag_nav.sel); if (!link) return; tag = UPCAST(link, struct tag, link); + if (link_inuse(&tag->link_sel)) + playlist_outdated = true; tag_rm(tag, true); } @@ -391,11 +427,9 @@ tag_pane_input(wint_t c) break; case KEY_SPACE: /* toggle tag */ toggle_current_tag(); - playlist_outdated = true; break; case KEY_ENTER: /* select only current tag */ select_only_current_tag(); - playlist_outdated = true; break; case KEY_PPAGE: /* seek half a page up */ listnav_update_sel(&tag_nav, tag_nav.sel - tag_nav.wlen / 2); @@ -416,8 +450,7 @@ tag_pane_input(wint_t c) seek_next_selected_tag(); break; case L'D': /* delete tag */ - delete_selected_tag(); - playlist_outdated = true; + delete_current_tag(); break; default: return false; @@ -542,7 +575,7 @@ rename_current_track(void) } bool -delete_selected_track(void) +delete_current_track(void) { struct link *link; struct track *track; @@ -597,7 +630,7 @@ track_pane_input(wint_t c) seek_track(player.track); break; case L'D': /* delete track */ - delete_selected_track(); + delete_current_track(); break; default: return false; |
