1 /*	Public domain	*/
2 /*
3  * Test the various bindings provided by the AG_Scrollbar(3) widget using
4  * arbitrary values and ranges.
5  */
6 
7 #include "agartest.h"
8 
9 int vInt = 500;
10 unsigned vUint = 0;
11 Sint8 v8 = 50;
12 Uint32 v32 = 32;
13 #ifdef AG_HAVE_64BIT
14 Uint64 v64 = 64;
15 #endif
16 float vFlt = 1.0;
17 double vDbl = 0.0;
18 #ifdef AG_HAVE_LONG_DOUBLE
19 long double vLDbl = 1.0;
20 #endif
21 
22 static int
TestGUI(void * obj,AG_Window * win)23 TestGUI(void *obj, AG_Window *win)
24 {
25 	AG_Scrollbar *sb;
26 	AG_Label *lbl;
27 	Uint flags = AG_SCROLLBAR_HFILL|AG_SCROLLBAR_NOAUTOHIDE;
28 
29 	lbl = AG_LabelNewPolled(win, AG_LABEL_HFILL, "Int binding: %d", &vInt);
30 	AG_LabelSizeHint(lbl, 0, "XXXXXXXXXXXXXXXXXXXX");
31 	sb = AG_ScrollbarNew(win, AG_SCROLLBAR_HORIZ, flags);
32 	AG_BindInt(sb, "value", &vInt);
33 	AG_SetInt(sb, "min", -10000);
34 	AG_SetInt(sb, "max", 10000);
35 	AG_SetInt(sb, "inc", 1000);
36 
37 	AG_LabelNewPolled(win, AG_LABEL_HFILL, "Uint binding: %d (vis=1000)", &vUint);
38 	sb = AG_ScrollbarNew(win, AG_SCROLLBAR_HORIZ, flags);
39 	AG_BindUint(sb, "value", &vUint);
40 	AG_SetUint(sb, "min", 0);
41 	AG_SetUint(sb, "max", 10000);
42 	AG_SetUint(sb, "inc", 1000);
43 	AG_SetUint(sb, "visible", 1000);
44 
45 	AG_LabelNewPolled(win, AG_LABEL_HFILL, "8-bit binding: %[s8] (vis=50)", &v8);
46 	sb = AG_ScrollbarNew(win, AG_SCROLLBAR_HORIZ, flags);
47 	AG_BindSint8(sb, "value", &v8);
48 	AG_SetSint8(sb, "visible", 50);
49 
50 	AG_LabelNewPolled(win, AG_LABEL_HFILL, "32-bit binding: %[u32] (vis=10)", &v32);
51 	sb = AG_ScrollbarNew(win, AG_SCROLLBAR_HORIZ, flags);
52 	AG_BindUint32(sb, "value", &v32);
53 	AG_SetUint32(sb, "min", 0);
54 	AG_SetUint32(sb, "max", 100);
55 	AG_SetUint32(sb, "visible", 10);
56 
57 #ifdef AG_HAVE_64BIT
58 	AG_LabelNewPolled(win, AG_LABEL_HFILL, "64-bit binding: %[u64] (vis=10)", &v64);
59 	sb = AG_ScrollbarNew(win, AG_SCROLLBAR_HORIZ, flags);
60 	AG_BindUint64(sb, "value", &v64);
61 	AG_SetUint64(sb, "min", 0ULL);
62 	AG_SetUint64(sb, "max", 100ULL);
63 	AG_SetUint64(sb, "visible", 10ULL);
64 #endif
65 	AG_LabelNewPolled(win, AG_LABEL_HFILL, "Float binding: %f", &vFlt);
66 	sb = AG_ScrollbarNew(win, AG_SCROLLBAR_HORIZ, flags);
67 	AG_BindFloat(sb, "value", &vFlt);
68 	AG_SetFloat(sb, "min", 0.0f);
69 	AG_SetFloat(sb, "max", 1.0f);
70 	AG_SetFloat(sb, "inc", 0.01f);
71 
72 	AG_LabelNewPolled(win, AG_LABEL_HFILL, "Double binding: %lf", &vDbl);
73 	sb = AG_ScrollbarNew(win, AG_SCROLLBAR_HORIZ, flags);
74 	AG_BindDouble(sb, "value", &vDbl);
75 	AG_SetDouble(sb, "min", -100.0);
76 	AG_SetDouble(sb, "max", +100.0);
77 	AG_SetDouble(sb, "inc", 1.0);
78 
79 #ifdef AG_HAVE_LONG_DOUBLE
80 	AG_LabelNewPolled(win, AG_LABEL_HFILL, "Long Double binding: %llf", &vLDbl);
81 	sb = AG_ScrollbarNew(win, AG_SCROLLBAR_HORIZ, flags);
82 	AG_BindLongDouble(sb, "value", &vLDbl);
83 #endif
84 	return (0);
85 }
86 
87 const AG_TestCase scrollbarTest = {
88 	"scrollbar",
89 	N_("Test the AG_Scrollbar(3) widget"),
90 	"1.5.0",
91 	0,
92 	sizeof(AG_TestInstance),
93 	NULL,		/* init */
94 	NULL,		/* destroy */
95 	NULL,		/* test */
96 	TestGUI,
97 	NULL		/* bench */
98 };
99