xref: /freebsd/contrib/bsddialog/examples_library/mixedlist.c (revision bce40c0242b167a541cc051b6b0dbcc5f3d04319)
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 
11*bce40c02SAlfonso S. Siciliano #include <bsddialog.h>
12f499134dSBaptiste Daroussin #include <stdio.h>
13f499134dSBaptiste Daroussin #include <string.h>
14f499134dSBaptiste Daroussin 
15f499134dSBaptiste Daroussin int main()
16f499134dSBaptiste Daroussin {
17263660c0SAlfonso Siciliano 	int output;
18263660c0SAlfonso Siciliano 	unsigned int i, j;
19f499134dSBaptiste Daroussin 	struct bsddialog_conf conf;
20f499134dSBaptiste Daroussin 	struct bsddialog_menuitem item;
21*bce40c02SAlfonso S. Siciliano 	struct bsddialog_menuitem sep1[1] = {
22*bce40c02SAlfonso S. Siciliano 	    { "", true, 0, "Checklist", "(desc)", "" }
23*bce40c02SAlfonso S. Siciliano 	};
24f499134dSBaptiste Daroussin 	struct bsddialog_menuitem check[5] = {
25f499134dSBaptiste Daroussin 	    { "+", true,  0, "Name 1", "Desc 1", "Bottom Desc 1" },
26f499134dSBaptiste Daroussin 	    { "" , false, 0, "Name 2", "Desc 2", "Bottom Desc 2" },
27f499134dSBaptiste Daroussin 	    { "+", true,  0, "Name 3", "Desc 3", "Bottom Desc 3" },
28f499134dSBaptiste Daroussin 	    { "" , false, 0, "Name 4", "Desc 4", "Bottom Desc 4" },
29f499134dSBaptiste Daroussin 	    { "+", true,  0, "Name 5", "Desc 5", "Bottom Desc 5" }
30f499134dSBaptiste Daroussin 	};
31*bce40c02SAlfonso S. Siciliano 	struct bsddialog_menuitem sep2[2] = {
32*bce40c02SAlfonso S. Siciliano 	    { "", true, 0, "Radiolist", "(desc)", "" },
33*bce40c02SAlfonso S. Siciliano 	    { "", true, 0, "Subtitle",  "(desc)", "" }
34f499134dSBaptiste Daroussin 	};
35f499134dSBaptiste Daroussin 	struct bsddialog_menuitem radio[5] = {
36f499134dSBaptiste Daroussin 	    { "",  true,  0, "Name 1", "Desc 1", "Bottom Desc 1" },
37f499134dSBaptiste Daroussin 	    { "+", false, 0, "Name 2", "Desc 2", "Bottom Desc 2" },
38f499134dSBaptiste Daroussin 	    { "",  false, 0, "Name 3", "Desc 3", "Bottom Desc 3" },
39f499134dSBaptiste Daroussin 	    { "+", false, 0, "Name 4", "Desc 4", "Bottom Desc 4" },
40f499134dSBaptiste Daroussin 	    { "",  false, 0, "Name 5", "Desc 5", "Bottom Desc 5" }
41f499134dSBaptiste Daroussin 	};
42*bce40c02SAlfonso S. Siciliano 	struct bsddialog_menugroup group[4] = {
43*bce40c02SAlfonso S. Siciliano 	    { BSDDIALOG_SEPARATOR, 1, sep1  },
44f499134dSBaptiste Daroussin 	    { BSDDIALOG_CHECKLIST, 5, check },
45*bce40c02SAlfonso S. Siciliano 	    { BSDDIALOG_SEPARATOR, 2, sep2  },
46f499134dSBaptiste Daroussin 	    { BSDDIALOG_RADIOLIST, 5, radio }
47f499134dSBaptiste Daroussin 	};
48f499134dSBaptiste Daroussin 
49263660c0SAlfonso Siciliano 	if (bsddialog_init() == BSDDIALOG_ERROR) {
50263660c0SAlfonso Siciliano 		printf("Error: %s\n", bsddialog_geterror());
51263660c0SAlfonso Siciliano 		return (1);
52263660c0SAlfonso Siciliano 	}
53263660c0SAlfonso Siciliano 
54f499134dSBaptiste Daroussin 	bsddialog_initconf(&conf);
55263660c0SAlfonso Siciliano 	conf.title = "mixedlist";
56*bce40c02SAlfonso S. Siciliano 	output = bsddialog_mixedlist(&conf, "Example", 20, 0, 13, 4, group,
57f499134dSBaptiste Daroussin 	    NULL, NULL);
58f499134dSBaptiste Daroussin 
59f499134dSBaptiste Daroussin 	bsddialog_end();
60f499134dSBaptiste Daroussin 
61263660c0SAlfonso Siciliano 	if (output == BSDDIALOG_ERROR) {
62263660c0SAlfonso Siciliano 		printf("Error: %s\n", bsddialog_geterror());
63263660c0SAlfonso Siciliano 		return (1);
64263660c0SAlfonso Siciliano 	}
65263660c0SAlfonso Siciliano 
66263660c0SAlfonso Siciliano 	if (output == BSDDIALOG_CANCEL) {
67263660c0SAlfonso Siciliano 		printf("Cancel\n");
68263660c0SAlfonso Siciliano 		return (0);
69263660c0SAlfonso Siciliano 	}
70263660c0SAlfonso Siciliano 
71f499134dSBaptiste Daroussin 	printf("Mixedlist:\n");
72*bce40c02SAlfonso S. Siciliano 	for (i = 0; i < 4; i++) {
73f499134dSBaptiste Daroussin 		for (j = 0; j < group[i].nitems; j++) {
74f499134dSBaptiste Daroussin 			item = group[i].items[j];
75f499134dSBaptiste Daroussin 			if (group[i].type == BSDDIALOG_SEPARATOR)
76f499134dSBaptiste Daroussin 				printf("----- %s -----\n", item.name);
77f499134dSBaptiste Daroussin 			else if (group[i].type == BSDDIALOG_RADIOLIST)
78263660c0SAlfonso Siciliano 				printf(" (%c) %s\n",
79263660c0SAlfonso Siciliano 				    item.on ? '*' : ' ', item.name);
80263660c0SAlfonso Siciliano 			else /* BSDDIALOG_CHECKLIST */
81263660c0SAlfonso Siciliano 				printf(" [%c] %s\n",
82263660c0SAlfonso Siciliano 				    item.on ? 'X' : ' ', item.name);
83f499134dSBaptiste Daroussin 		}
84f499134dSBaptiste Daroussin 	}
85f499134dSBaptiste Daroussin 
86263660c0SAlfonso Siciliano 	return (output);
87f499134dSBaptiste Daroussin }