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