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(u64 curr, u64 total, const char *title) 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 (total == 0) 19 return; 20 21 ui__refresh_dimensions(true); 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 *)title); 28 SLsmg_set_color(HE_COLORSET_SELECTED); 29 bar = ((SLtt_Screen_Cols - 2) * curr) / total; 30 SLsmg_fill_region(y, 1, 1, bar, ' '); 31 SLsmg_refresh(); 32 pthread_mutex_unlock(&ui__lock); 33 } 34 35 static struct ui_progress_ops tui_progress__ops = 36 { 37 .update = tui_progress__update, 38 }; 39 40 void tui_progress__init(void) 41 { 42 ui_progress__ops = &tui_progress__ops; 43 } 44