1 #include "../cache.h" 2 #include "../progress.h" 3 #include "../libslang.h" 4 #include "../ui.h" 5 #include "tui.h" 6 #include "../browser.h" 7 8 static void tui_progress__update(struct ui_progress *p) 9 { 10 int bar, y; 11 /* 12 * FIXME: We should have a per UI backend way of showing progress, 13 * stdio will just show a percentage as NN%, etc. 14 */ 15 if (use_browser <= 0) 16 return; 17 18 if (p->total == 0) 19 return; 20 21 ui__refresh_dimensions(false); 22 pthread_mutex_lock(&ui__lock); 23 y = SLtt_Screen_Rows / 2 - 2; 24 SLsmg_set_color(0); 25 SLsmg_draw_box(y, 0, 3, SLtt_Screen_Cols); 26 SLsmg_gotorc(y++, 1); 27 SLsmg_write_string((char *)p->title); 28 SLsmg_fill_region(y, 1, 1, SLtt_Screen_Cols - 2, ' '); 29 SLsmg_set_color(HE_COLORSET_SELECTED); 30 bar = ((SLtt_Screen_Cols - 2) * p->curr) / p->total; 31 SLsmg_fill_region(y, 1, 1, bar, ' '); 32 SLsmg_refresh(); 33 pthread_mutex_unlock(&ui__lock); 34 } 35 36 static void tui_progress__finish(void) 37 { 38 int y; 39 40 if (use_browser <= 0) 41 return; 42 43 ui__refresh_dimensions(false); 44 pthread_mutex_lock(&ui__lock); 45 y = SLtt_Screen_Rows / 2 - 2; 46 SLsmg_set_color(0); 47 SLsmg_fill_region(y, 0, 3, SLtt_Screen_Cols, ' '); 48 SLsmg_refresh(); 49 pthread_mutex_unlock(&ui__lock); 50 } 51 52 static struct ui_progress_ops tui_progress__ops = 53 { 54 .update = tui_progress__update, 55 .finish = tui_progress__finish, 56 }; 57 58 void tui_progress__init(void) 59 { 60 ui_progress__ops = &tui_progress__ops; 61 } 62