1/*-
2 * SPDX-License-Identifier: CC0-1.0
3 *
4 * Written in 2021 by Alfonso Sabato Siciliano.
5 * To the extent possible under law, the author has dedicated all copyright
6 * and related and neighboring rights to this software to the public domain
7 * worldwide. This software is distributed without any warranty, see:
8 *   <http://creativecommons.org/publicdomain/zero/1.0/>.
9 */
10
11#include <bsddialog.h>
12#include <stdio.h>
13
14int main()
15{
16	int output;
17	unsigned int i, j;
18	struct bsddialog_conf conf;
19	struct bsddialog_menuitem item;
20	struct bsddialog_menuitem sep1[1] = {
21	    { "", true, 0, "Checklist", "(desc)", "" }
22	};
23	struct bsddialog_menuitem check[5] = {
24	    { "+", true,  0, "Name 1", "Desc 1", "Bottom Desc 1" },
25	    { "" , false, 0, "Name 2", "Desc 2", "Bottom Desc 2" },
26	    { "+", true,  0, "Name 3", "Desc 3", "Bottom Desc 3" },
27	    { "" , false, 0, "Name 4", "Desc 4", "Bottom Desc 4" },
28	    { "+", true,  0, "Name 5", "Desc 5", "Bottom Desc 5" }
29	};
30	struct bsddialog_menuitem sep2[2] = {
31	    { "", true, 0, "Radiolist", "(desc)", "" },
32	    { "", true, 0, "Subtitle",  "(desc)", "" }
33	};
34	struct bsddialog_menuitem radio[5] = {
35	    { "",  true,  0, "Name 1", "Desc 1", "Bottom Desc 1" },
36	    { "+", false, 0, "Name 2", "Desc 2", "Bottom Desc 2" },
37	    { "",  false, 0, "Name 3", "Desc 3", "Bottom Desc 3" },
38	    { "+", false, 0, "Name 4", "Desc 4", "Bottom Desc 4" },
39	    { "",  false, 0, "Name 5", "Desc 5", "Bottom Desc 5" }
40	};
41	struct bsddialog_menugroup group[4] = {
42	    { BSDDIALOG_SEPARATOR, 1, sep1,  0 },
43	    { BSDDIALOG_CHECKLIST, 5, check, 0 },
44	    { BSDDIALOG_SEPARATOR, 2, sep2,  0 },
45	    { BSDDIALOG_RADIOLIST, 5, radio, 0 }
46	};
47
48	if (bsddialog_init() == BSDDIALOG_ERROR) {
49		printf("Error: %s\n", bsddialog_geterror());
50		return (1);
51	}
52	bsddialog_initconf(&conf);
53	conf.title = "mixedlist";
54	output = bsddialog_mixedlist(&conf, "Example", 20, 0, 13, 4, group,
55	    NULL, NULL);
56	bsddialog_end();
57	if (output == BSDDIALOG_ERROR) {
58		printf("Error: %s\n", bsddialog_geterror());
59		return (1);
60	}
61
62	printf("Mixedlist:\n");
63	for (i = 0; i < 4; i++) {
64		for (j = 0; j < group[i].nitems; j++) {
65			item = group[i].items[j];
66			if (group[i].type == BSDDIALOG_SEPARATOR)
67				printf("----- %s -----\n", item.name);
68			else if (group[i].type == BSDDIALOG_RADIOLIST)
69				printf(" (%c) %s\n",
70				    item.on ? '*' : ' ', item.name);
71			else /* BSDDIALOG_CHECKLIST */
72				printf(" [%c] %s\n",
73				    item.on ? 'X' : ' ', item.name);
74		}
75	}
76
77	return (0);
78}
79