ui/win32/container.c

changeset 841
651cf2c59dd9
parent 818
8185cd761897
child 844
3106d9ca2f9c
equal deleted inserted replaced
840:f74250eda598 841:651cf2c59dd9
29 #include "container.h" 29 #include "container.h"
30 #include "grid.h" 30 #include "grid.h"
31 31
32 #include "../common/context.h" 32 #include "../common/context.h"
33 #include "../common/container.h" 33 #include "../common/container.h"
34 #include "../motif/container.h"
35
36
37 static W32WidgetClass grid_layout_widget_class = {
38 .eventproc = NULL,
39 .enable = NULL,
40 .show = w32_widget_default_show,
41 .get_preferred_size = ui_grid_layout_get_preferred_size,
42 .destroy = w32_widget_default_destroy
43 };
34 44
35 UiContainerPrivate* ui_obj_container(UiObject *obj) { 45 UiContainerPrivate* ui_obj_container(UiObject *obj) {
36 return (UiContainerPrivate*)obj->container_end; 46 return (UiContainerPrivate*)obj->container_end;
37 } 47 }
38 48
48 layout2.margin_top = layout2.margin; 58 layout2.margin_top = layout2.margin;
49 layout2.margin_bottom = layout2.margin; 59 layout2.margin_bottom = layout2.margin;
50 } 60 }
51 ctn->add(ctn, widget, &layout2); 61 ctn->add(ctn, widget, &layout2);
52 ctn->container.newline = FALSE; 62 ctn->container.newline = FALSE;
63 }
64
65 W32Size ui_grid_layout_get_preferred_size(W32Widget *widget) {
66 UiGridLayout *grid = widget->layoutmanager;
67 W32Size size;
68 size.width = grid->preferred_width;
69 size.height = grid->preferred_height;
70 return size;
53 } 71 }
54 72
55 73
56 /* ---------------------------- Box Container ---------------------------- */ 74 /* ---------------------------- Box Container ---------------------------- */
57 75
104 } 122 }
105 123
106 /* ---------------------------- Grid Container ---------------------------- */ 124 /* ---------------------------- Grid Container ---------------------------- */
107 125
108 UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs *args) { 126 UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs *args) {
109 return NULL; 127 HINSTANCE hInstance = GetModuleHandle(NULL);
128 UiContainerPrivate *container = ui_obj_container(obj);
129 HWND parent = ui_container_get_parent(container);
130 UiLayout layout = UI_ARGS2LAYOUT(args);
131
132 HWND hwnd = CreateWindowEx(
133 0,
134 TEXT("STATIC"),
135 NULL,
136 WS_CHILD | WS_VISIBLE | WS_BORDER,
137 0, 0, 100, 100,
138 parent,
139 NULL,
140 hInstance,
141 NULL);
142
143 W32Widget *widget = w32_widget_new(&grid_layout_widget_class, hwnd);
144 ui_container_add(container, widget, &layout);
145
146 UiContainerX *gridContainer = ui_grid_container_create(obj, hwnd, args->columnspacing, args->rowspacing, INSETS_ZERO);
147 uic_object_push_container(obj, gridContainer);
148
149 UiGridLayoutContainer *grid = (UiGridLayoutContainer*)gridContainer;
150 widget->layout = (W32LayoutFunc)ui_grid_layout;
151 widget->layoutmanager = grid->layout;
152 grid->layout->preferred_width = 200;
153 grid->layout->preferred_height = 200;
154
155 return widget;
110 } 156 }
111 157
112 UiContainerX* ui_grid_container_create(UiObject *obj, HWND hwnd, short columnspacing, short rowspacing, GridEdgeInsets padding) { 158 UiContainerX* ui_grid_container_create(UiObject *obj, HWND hwnd, short columnspacing, short rowspacing, GridEdgeInsets padding) {
113 UiGridLayoutContainer *container = cxZalloc(obj->ctx->allocator, sizeof(UiGridLayoutContainer)); 159 UiGridLayoutContainer *container = cxZalloc(obj->ctx->allocator, sizeof(UiGridLayoutContainer));
114 container->container.hwnd = hwnd; 160 container->container.hwnd = hwnd;
137 }; 183 };
138 ui_grid_add_widget(grid->layout, grid->x, grid->y, widget, &gridLayout); 184 ui_grid_add_widget(grid->layout, grid->x, grid->y, widget, &gridLayout);
139 185
140 grid->x++; 186 grid->x++;
141 } 187 }
188
189
190 /* ---------------------------- Container Helper ---------------------------- */
191
192 void ui_container_begin_close(UiObject *obj) {
193 UiContainerX *ct = obj->container_end;
194 ct->close = 1;
195 }
196
197 int ui_container_finish(UiObject *obj) {
198 UiContainerX *ct = obj->container_end;
199 if(ct->close) {
200 ui_end_new(obj);
201 return 0;
202 }
203 return 1;
204 }

mercurial