| 224 int colspan = layout->colspan > 0 ? layout->colspan : 1; |
222 int colspan = layout->colspan > 0 ? layout->colspan : 1; |
| 225 int rowspan = layout->rowspan > 0 ? layout->rowspan : 1; |
223 int rowspan = layout->rowspan > 0 ? layout->rowspan : 1; |
| 226 |
224 |
| 227 gtk_grid_attach(GTK_GRID(ct->widget), widget, grid->x, grid->y, colspan, rowspan); |
225 gtk_grid_attach(GTK_GRID(ct->widget), widget, grid->x, grid->y, colspan, rowspan); |
| 228 grid->x += colspan; |
226 grid->x += colspan; |
| 229 |
|
| 230 grid->container.current = widget; |
|
| 231 } |
227 } |
| 232 #endif |
228 #endif |
| 233 #ifdef UI_GTK2 |
229 #ifdef UI_GTK2 |
| 234 void ui_grid_container_add(UiContainerPrivate *ct, GtkWidget *widget) { |
230 void ui_grid_container_add(UiContainerPrivate *ct, GtkWidget *widget) { |
| 235 UiGridContainer *grid = (UiGridContainer*)ct; |
231 UiGridContainer *grid = (UiGridContainer*)ct; |
| 286 } |
282 } |
| 287 |
283 |
| 288 void ui_frame_container_add(UiContainerPrivate *ct, GtkWidget *widget, UiLayout *layout) { |
284 void ui_frame_container_add(UiContainerPrivate *ct, GtkWidget *widget, UiLayout *layout) { |
| 289 widget = ui_gtk_set_margin(widget, layout->margin, layout->margin_left, layout->margin_right, layout->margin_top, layout->margin_bottom); |
285 widget = ui_gtk_set_margin(widget, layout->margin, layout->margin_left, layout->margin_right, layout->margin_top, layout->margin_bottom); |
| 290 FRAME_SET_CHILD(ct->widget, widget); |
286 FRAME_SET_CHILD(ct->widget, widget); |
| 291 ct->current = widget; |
|
| 292 } |
287 } |
| 293 |
288 |
| 294 UiContainerX* ui_expander_container(UiObject *obj, GtkWidget *expander) { |
289 UiContainerX* ui_expander_container(UiObject *obj, GtkWidget *expander) { |
| 295 UiContainerPrivate *ct = cxCalloc( |
290 UiContainerPrivate *ct = cxCalloc( |
| 296 obj->ctx->allocator, |
291 obj->ctx->allocator, |
| 302 } |
297 } |
| 303 |
298 |
| 304 void ui_expander_container_add(UiContainerPrivate *ct, GtkWidget *widget, UiLayout *layout) { |
299 void ui_expander_container_add(UiContainerPrivate *ct, GtkWidget *widget, UiLayout *layout) { |
| 305 widget = ui_gtk_set_margin(widget, layout->margin, layout->margin_left, layout->margin_right, layout->margin_top, layout->margin_bottom); |
300 widget = ui_gtk_set_margin(widget, layout->margin, layout->margin_left, layout->margin_right, layout->margin_top, layout->margin_bottom); |
| 306 EXPANDER_SET_CHILD(ct->widget, widget); |
301 EXPANDER_SET_CHILD(ct->widget, widget); |
| 307 ct->current = widget; |
|
| 308 } |
302 } |
| 309 |
303 |
| 310 void ui_scrolledwindow_container_add(UiContainerPrivate *ct, GtkWidget *widget, UiLayout *layout) { |
304 void ui_scrolledwindow_container_add(UiContainerPrivate *ct, GtkWidget *widget, UiLayout *layout) { |
| 311 widget = ui_gtk_set_margin(widget, layout->margin, layout->margin_left, layout->margin_right, layout->margin_top, layout->margin_bottom); |
305 widget = ui_gtk_set_margin(widget, layout->margin, layout->margin_left, layout->margin_right, layout->margin_top, layout->margin_bottom); |
| 312 // TODO: check if the widget implements GtkScrollable |
306 // TODO: check if the widget implements GtkScrollable |
| 313 SCROLLEDWINDOW_SET_CHILD(ct->widget, widget); |
307 SCROLLEDWINDOW_SET_CHILD(ct->widget, widget); |
| 314 ct->current = widget; |
|
| 315 } |
308 } |
| 316 |
309 |
| 317 UiContainerX* ui_scrolledwindow_container(UiObject *obj, GtkWidget *scrolledwindow) { |
310 UiContainerX* ui_scrolledwindow_container(UiObject *obj, GtkWidget *scrolledwindow) { |
| 318 UiContainerPrivate *ct = cxCalloc( |
311 UiContainerPrivate *ct = cxCalloc( |
| 319 obj->ctx->allocator, |
312 obj->ctx->allocator, |
| 340 fprintf(stderr, "UI Error: widget is not a tabview"); |
333 fprintf(stderr, "UI Error: widget is not a tabview"); |
| 341 return; |
334 return; |
| 342 } |
335 } |
| 343 widget = ui_gtk_set_margin(widget, layout->margin, layout->margin_left, layout->margin_right, layout->margin_top, layout->margin_bottom); |
336 widget = ui_gtk_set_margin(widget, layout->margin, layout->margin_left, layout->margin_right, layout->margin_top, layout->margin_bottom); |
| 344 data->add_tab(ct->widget, -1, layout->label, widget); |
337 data->add_tab(ct->widget, -1, layout->label, widget); |
| 345 |
|
| 346 ct->current = widget; |
|
| 347 } |
338 } |
| 348 |
339 |
| 349 #ifdef UI_GTK2 |
340 #ifdef UI_GTK2 |
| 350 |
341 |
| 351 static void alignment_child_visibility_changed(GtkWidget *widget, gpointer user_data) { |
342 static void alignment_child_visibility_changed(GtkWidget *widget, gpointer user_data) { |
| 1160 memset(ct, 0, sizeof(UiSplitPane)); |
1151 memset(ct, 0, sizeof(UiSplitPane)); |
| 1161 ct->current_pane = pane; |
1152 ct->current_pane = pane; |
| 1162 ct->orientation = orientation; |
1153 ct->orientation = orientation; |
| 1163 ct->max = max; |
1154 ct->max = max; |
| 1164 ct->initial_position = init; |
1155 ct->initial_position = init; |
| 1165 ct->children = cxArrayListCreateSimple(CX_STORE_POINTERS, 4); |
1156 ct->children = cxArrayListCreate(NULL, CX_STORE_POINTERS, 4); |
| 1166 return ct; |
1157 return ct; |
| 1167 } |
1158 } |
| 1168 |
1159 |
| 1169 UiContainerX* ui_splitpane_container(UiObject *obj, GtkWidget *pane, UiSplitPane *data) { |
1160 UiContainerX* ui_splitpane_container(UiObject *obj, GtkWidget *pane, UiSplitPane *data) { |
| 1170 UiSplitPaneContainer *ct = ui_calloc(obj->ctx, 1, sizeof(UiSplitPaneContainer)); |
1161 UiSplitPaneContainer *ct = ui_calloc(obj->ctx, 1, sizeof(UiSplitPaneContainer)); |
| 1244 } |
1235 } |
| 1245 |
1236 |
| 1246 static void update_itemlist(UiList *list, int c) { |
1237 static void update_itemlist(UiList *list, int c) { |
| 1247 UiGtkItemListContainer *ct = list->obj; |
1238 UiGtkItemListContainer *ct = list->obj; |
| 1248 |
1239 |
| 1249 CxMap *new_items = cxHashMapCreateSimple(CX_STORE_POINTERS); |
1240 CxMap *new_items = cxHashMapCreate(NULL, CX_STORE_POINTERS, 32); |
| 1250 new_items->collection.advanced_destructor = remove_item; |
1241 new_items->collection.advanced_destructor = remove_item; |
| 1251 new_items->collection.destructor_data = ct; |
1242 new_items->collection.destructor_data = ct; |
| 1252 |
1243 |
| 1253 // only create new widgets for new elements, so at first we have |
1244 // only create new widgets for new elements, so at first we have |
| 1254 // to find which elements are new |
1245 // to find which elements are new |
| 1329 container->widget = box; |
1320 container->widget = box; |
| 1330 container->container = (UiContainerPrivate*)ui_box_container(obj, box, args->container); |
1321 container->container = (UiContainerPrivate*)ui_box_container(obj, box, args->container); |
| 1331 container->create_ui = args->create_ui; |
1322 container->create_ui = args->create_ui; |
| 1332 container->userdata = args->userdata; |
1323 container->userdata = args->userdata; |
| 1333 container->subcontainer = args->subcontainer; |
1324 container->subcontainer = args->subcontainer; |
| 1334 container->current_items = cxHashMapCreateSimple(CX_STORE_POINTERS); |
1325 container->current_items = cxHashMapCreate(NULL, CX_STORE_POINTERS, 32); |
| 1335 container->current_items->collection.advanced_destructor = remove_item; |
1326 container->current_items->collection.advanced_destructor = remove_item; |
| 1336 container->current_items->collection.destructor_data = container; |
1327 container->current_items->collection.destructor_data = container; |
| 1337 container->margin = args->sub_margin; |
1328 container->margin = args->sub_margin; |
| 1338 container->spacing = args->sub_spacing; |
1329 container->spacing = args->sub_spacing; |
| 1339 container->columnspacing = args->sub_columnspacing; |
1330 container->columnspacing = args->sub_columnspacing; |