1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #ifndef CONTAINER_H
30 #define CONTAINER_H
31
32 #include "../ui/toolkit.h"
33 #include "../ui/container.h"
34 #include <cx/list.h>
35 #include <string.h>
36
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40
41 #define UI_APPLY_LAYOUT(layout, args) \
42 layout.fill = args.fill; \
43 layout.hexpand = args.hexpand; \
44 layout.vexpand = args.vexpand; \
45 layout.hfill = args.hfill; \
46 layout.vfill = args.vfill; \
47 layout.colspan = args.colspan; \
48 layout.rowspan = args.rowspan
49
50 typedef enum UiBoxOrientation UiBoxOrientation;
51
52 #define ui_reset_layout(layout) memset(&(layout),
0,
sizeof(UiLayout))
53 #define ui_lb2bool(b) ((b) ==
UI_LAYOUT_TRUE ?
TRUE :
FALSE)
54 #define ui_bool2lb(b) ((b) ?
UI_LAYOUT_TRUE :
UI_LAYOUT_FALSE)
55
56 #define ui_obj_container(obj) (UiContainerPrivate*)obj->container_end
57
58 typedef struct UiLayout UiLayout;
59
60 struct UiLayout {
61 UiTri fill;
62 UiBool newline;
63 char *label;
64 UiBool hexpand;
65 UiBool vexpand;
66 UiBool hfill;
67 UiBool vfill;
68 int width;
69 int colspan;
70 int rowspan;
71 };
72
73 enum UiBoxOrientation {
74 UI_BOX_VERTICAL =
0,
75 UI_BOX_HORIZONTAL
76 };
77
78 typedef struct UiContainerPrivate UiContainerPrivate;
79
80
81 struct UiContainerPrivate {
82 UiContainerX container;
83 Widget (*prepare)(UiContainerPrivate*, Arg *,
int*);
84 void (*add)(UiContainerPrivate*, Widget);
85 Widget widget;
86 UiLayout layout;
87 };
88
89 typedef struct UiBoxContainer {
90 UiContainerPrivate container;
91 Dimension n;
92 } UiBoxContainer;
93
94 typedef struct UiGridContainer {
95 UiContainerPrivate container;
96 Dimension x;
97 Dimension y;
98 } UiGridContainer;
99
100 UiContainerX* ui_box_container(UiObject *obj, Widget grid, UiBoxOrientation orientation);
101 Widget ui_vbox_prepare(UiContainerPrivate *ctn, Arg *args,
int *n);
102 Widget ui_hbox_prepare(UiContainerPrivate *ctn, Arg *args,
int *n);
103 void ui_box_container_add(UiContainerPrivate *ctn, Widget widget);
104
105
106 UiContainerX* ui_grid_container(UiObject *obj, Widget grid);
107 Widget ui_grid_container_prepare(UiContainerPrivate *ctn, Arg *args,
int *n);
108 void ui_grid_container_add(UiContainerPrivate *ctn, Widget widget);
109
110 #ifdef __cplusplus
111 }
112 #endif
113
114 #endif
115
116