| 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| 26 * POSSIBILITY OF SUCH DAMAGE. |
26 * POSSIBILITY OF SUCH DAMAGE. |
| 27 */ |
27 */ |
| 28 |
28 |
| 29 #include "container.h" |
29 #include "container.h" |
| |
30 #include "grid.h" |
| 30 |
31 |
| 31 #include "../common/context.h" |
32 #include "../common/context.h" |
| |
33 #include "../common/container.h" |
| 32 |
34 |
| 33 UiContainerPrivate* ui_obj_container(UiObject *obj) { |
35 UiContainerPrivate* ui_obj_container(UiObject *obj) { |
| 34 return (UiContainerPrivate*)obj->container_end; |
36 return (UiContainerPrivate*)obj->container_end; |
| 35 } |
37 } |
| 36 |
38 |
| 37 HWND ui_container_get_parent(UiContainerPrivate *ctn) { |
39 HWND ui_container_get_parent(UiContainerPrivate *ctn) { |
| 38 return ctn->parent ? ctn->parent(ctn) : ctn->hwnd; |
40 return ctn->parent ? ctn->parent(ctn) : ctn->hwnd; |
| 39 } |
41 } |
| 40 |
42 |
| 41 void ui_container_add(UiContainerPrivate *ctn, W32Widget *widget, UiLayout *layout) { |
43 void ui_container_add(UiContainerPrivate *ctn, W32Widget *widget, UiLayout *layout) { |
| 42 ctn->add(ctn, widget, layout); |
44 UiLayout layout2 = *layout; |
| |
45 if (layout2.margin > 0) { |
| |
46 layout2.margin_left = layout2.margin; |
| |
47 layout2.margin_right = layout2.margin; |
| |
48 layout2.margin_top = layout2.margin; |
| |
49 layout2.margin_bottom = layout2.margin; |
| |
50 } |
| |
51 ctn->add(ctn, widget, &layout2); |
| 43 ctn->container.newline = FALSE; |
52 ctn->container.newline = FALSE; |
| 44 } |
53 } |
| 45 |
54 |
| 46 |
55 |
| 47 /* ---------------------------- Box Container ---------------------------- */ |
56 /* ---------------------------- Box Container ---------------------------- */ |
| 65 |
74 |
| 66 UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs *args) { |
75 UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs *args) { |
| 67 return NULL; |
76 return NULL; |
| 68 } |
77 } |
| 69 |
78 |
| 70 UiContainerX* ui_grid_container_create(UiObject *obj, HWND hwnd, short padding_top, short padding_bottom, short padding_left, short padding_right) { |
79 UiContainerX* ui_grid_container_create(UiObject *obj, HWND hwnd, short columnspacing, short rowspacing, GridEdgeInsets padding) { |
| 71 UiGridLayoutContainer *container = cxZalloc(obj->ctx->allocator, sizeof(UiGridLayoutContainer)); |
80 UiGridLayoutContainer *container = cxZalloc(obj->ctx->allocator, sizeof(UiGridLayoutContainer)); |
| 72 container->container.hwnd = hwnd; |
81 container->container.hwnd = hwnd; |
| 73 container->container.add = ui_grid_container_add; |
82 container->container.add = ui_grid_container_add; |
| |
83 container->layout = ui_grid_layout_create(obj->ctx->allocator, hwnd, columnspacing, rowspacing); |
| |
84 container->layout->padding = padding; |
| 74 return (UiContainerX*)container; |
85 return (UiContainerX*)container; |
| 75 } |
86 } |
| 76 |
87 |
| 77 void ui_grid_container_add(UiContainerPrivate *ctn, W32Widget *widget, UiLayout *layout) { |
88 void ui_grid_container_add(UiContainerPrivate *ctn, W32Widget *widget, UiLayout *layout) { |
| 78 // TODO |
89 UiGridLayoutContainer *grid = (UiGridLayoutContainer*)ctn; |
| |
90 if (ctn->container.newline) { |
| |
91 grid->y++; |
| |
92 grid->x = 0; |
| |
93 } |
| |
94 |
| |
95 uic_layout_setup_expand_fill(layout, grid->def_hexpand, grid->def_vexpand, grid->def_hfill, grid->def_vfill); |
| |
96 GridLayoutInfo gridLayout = (GridLayoutInfo) { |
| |
97 .margin = (GridEdgeInsets) { layout->margin_top, layout->margin_bottom, layout->margin_left, layout->margin_right }, |
| |
98 .colspan = layout->colspan, |
| |
99 .rowspan = layout->rowspan, |
| |
100 .hexpand = layout->hexpand, |
| |
101 .vexpand = layout->vexpand, |
| |
102 .hfill = layout->hfill, |
| |
103 .vfill = layout->vfill, |
| |
104 }; |
| |
105 ui_grid_add_widget(grid->layout, grid->x, grid->y, widget, &gridLayout); |
| |
106 |
| |
107 grid->x++; |
| 79 } |
108 } |