Linux Audio

Check our new training course

Loading...
v3.15
 
 
 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
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 8static 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
36static struct ui_progress_ops tui_progress__ops =
37{
38	.update		= tui_progress__update,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39};
40
41void tui_progress__init(void)
42{
43	ui_progress__ops = &tui_progress__ops;
44}
v4.17
 1// SPDX-License-Identifier: GPL-2.0
 2#include <linux/kernel.h>
 3#include "../cache.h"
 4#include "../progress.h"
 5#include "../libslang.h"
 6#include "../ui.h"
 7#include "tui.h"
 8#include "units.h"
 9#include "../browser.h"
10
11static void __tui_progress__init(struct ui_progress *p)
12{
13	p->next = p->step = p->total / (SLtt_Screen_Cols - 2) ?: 1;
14}
15
16static int get_title(struct ui_progress *p, char *buf, size_t size)
17{
18	char buf_cur[20];
19	char buf_tot[20];
20	int ret;
21
22	ret  = unit_number__scnprintf(buf_cur, sizeof(buf_cur), p->curr);
23	ret += unit_number__scnprintf(buf_tot, sizeof(buf_tot), p->total);
24
25	return ret + scnprintf(buf, size, "%s [%s/%s]",
26			       p->title, buf_cur, buf_tot);
27}
28
29static void tui_progress__update(struct ui_progress *p)
30{
31	char buf[100], *title = (char *) p->title;
32	int bar, y;
33	/*
34	 * FIXME: We should have a per UI backend way of showing progress,
35	 * stdio will just show a percentage as NN%, etc.
36	 */
37	if (use_browser <= 0)
38		return;
39
40	if (p->total == 0)
41		return;
42
43	if (p->size) {
44		get_title(p, buf, sizeof(buf));
45		title = buf;
46	}
47
48	ui__refresh_dimensions(false);
49	pthread_mutex_lock(&ui__lock);
50	y = SLtt_Screen_Rows / 2 - 2;
51	SLsmg_set_color(0);
52	SLsmg_draw_box(y, 0, 3, SLtt_Screen_Cols);
53	SLsmg_gotorc(y++, 1);
54	SLsmg_write_string(title);
55	SLsmg_fill_region(y, 1, 1, SLtt_Screen_Cols - 2, ' ');
56	SLsmg_set_color(HE_COLORSET_SELECTED);
57	bar = ((SLtt_Screen_Cols - 2) * p->curr) / p->total;
58	SLsmg_fill_region(y, 1, 1, bar, ' ');
59	SLsmg_refresh();
60	pthread_mutex_unlock(&ui__lock);
61}
62
63static void tui_progress__finish(void)
64{
65	int y;
66
67	if (use_browser <= 0)
68		return;
69
70	ui__refresh_dimensions(false);
71	pthread_mutex_lock(&ui__lock);
72	y = SLtt_Screen_Rows / 2 - 2;
73	SLsmg_set_color(0);
74	SLsmg_fill_region(y, 0, 3, SLtt_Screen_Cols, ' ');
75	SLsmg_refresh();
76	pthread_mutex_unlock(&ui__lock);
77}
78
79static struct ui_progress_ops tui_progress__ops = {
80	.init   = __tui_progress__init,
81	.update = tui_progress__update,
82	.finish = tui_progress__finish,
83};
84
85void tui_progress__init(void)
86{
87	ui_progress__ops = &tui_progress__ops;
88}