| 418 ret = a; |
418 ret = a; |
| 419 #endif |
419 #endif |
| 420 return ret; |
420 return ret; |
| 421 } |
421 } |
| 422 |
422 |
| 423 UIWIDGET ui_box_create(UiObject *obj, UiContainerArgs args, UiSubContainerType type) { |
423 UIWIDGET ui_box_create(UiObject *obj, UiContainerArgs *args, UiSubContainerType type) { |
| 424 UiObject *current = uic_current_obj(obj); |
424 UiObject *current = uic_current_obj(obj); |
| 425 UiContainer *ct = current->container; |
425 UiContainer *ct = current->container; |
| 426 UI_APPLY_LAYOUT1(current, args); |
426 UI_APPLY_LAYOUT2(current, args); |
| 427 |
427 |
| 428 GtkWidget *box = type == UI_CONTAINER_VBOX ? ui_gtk_vbox_new(args.spacing) : ui_gtk_hbox_new(args.spacing); |
428 GtkWidget *box = type == UI_CONTAINER_VBOX ? ui_gtk_vbox_new(args->spacing) : ui_gtk_hbox_new(args->spacing); |
| 429 ui_set_name_and_style(box, args.name, args.style_class); |
429 ui_set_name_and_style(box, args->name, args->style_class); |
| 430 GtkWidget *widget = args.margin > 0 ? ui_box_set_margin(box, args.margin) : box; |
430 GtkWidget *widget = args->margin > 0 ? ui_box_set_margin(box, args->margin) : box; |
| 431 ct->add(ct, widget, TRUE); |
431 ct->add(ct, widget, TRUE); |
| 432 |
432 |
| 433 UiObject *newobj = uic_object_new(obj, box); |
433 UiObject *newobj = uic_object_new(obj, box); |
| 434 newobj->container = ui_box_container(obj, box, type); |
434 newobj->container = ui_box_container(obj, box, type); |
| 435 uic_obj_add(obj, newobj); |
435 uic_obj_add(obj, newobj); |
| 436 |
436 |
| 437 return widget; |
437 return widget; |
| 438 } |
438 } |
| 439 |
439 |
| 440 UIEXPORT UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs args) { |
440 UIEXPORT UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs *args) { |
| 441 return ui_box_create(obj, args, UI_CONTAINER_VBOX); |
441 return ui_box_create(obj, args, UI_CONTAINER_VBOX); |
| 442 } |
442 } |
| 443 |
443 |
| 444 UIEXPORT UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs args) { |
444 UIEXPORT UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs *args) { |
| 445 return ui_box_create(obj, args, UI_CONTAINER_HBOX); |
445 return ui_box_create(obj, args, UI_CONTAINER_HBOX); |
| 446 } |
446 } |
| 447 |
447 |
| 448 GtkWidget* ui_create_grid_widget(int colspacing, int rowspacing) { |
448 GtkWidget* ui_create_grid_widget(int colspacing, int rowspacing) { |
| 449 #if GTK_MAJOR_VERSION >= 3 |
449 #if GTK_MAJOR_VERSION >= 3 |
| 456 gtk_table_set_row_spacings(GTK_TABLE(grid), rowspacing); |
456 gtk_table_set_row_spacings(GTK_TABLE(grid), rowspacing); |
| 457 #endif |
457 #endif |
| 458 return grid; |
458 return grid; |
| 459 } |
459 } |
| 460 |
460 |
| 461 UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs args) { |
461 UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs *args) { |
| 462 UiObject* current = uic_current_obj(obj); |
462 UiObject* current = uic_current_obj(obj); |
| 463 UI_APPLY_LAYOUT1(current, args); |
463 UI_APPLY_LAYOUT2(current, args); |
| 464 GtkWidget *widget; |
464 GtkWidget *widget; |
| 465 |
465 |
| 466 GtkWidget *grid = ui_create_grid_widget(args.columnspacing, args.rowspacing); |
466 GtkWidget *grid = ui_create_grid_widget(args->columnspacing, args->rowspacing); |
| 467 ui_set_name_and_style(grid, args.name, args.style_class); |
467 ui_set_name_and_style(grid, args->name, args->style_class); |
| 468 widget = ui_box_set_margin(grid, args.margin); |
468 widget = ui_box_set_margin(grid, args->margin); |
| 469 current->container->add(current->container, widget, TRUE); |
469 current->container->add(current->container, widget, TRUE); |
| 470 |
470 |
| 471 UiObject *newobj = uic_object_new(obj, grid); |
471 UiObject *newobj = uic_object_new(obj, grid); |
| 472 newobj->container = ui_grid_container(obj, grid, args.def_hexpand, args.def_vexpand, args.def_hfill, args.def_vfill); |
472 newobj->container = ui_grid_container(obj, grid, args->def_hexpand, args->def_vexpand, args->def_hfill, args->def_vfill); |
| 473 uic_obj_add(obj, newobj); |
473 uic_obj_add(obj, newobj); |
| 474 |
474 |
| 475 return widget; |
475 return widget; |
| 476 } |
476 } |
| 477 |
477 |
| 478 UIWIDGET ui_frame_create(UiObject *obj, UiFrameArgs args) { |
478 UIWIDGET ui_frame_create(UiObject *obj, UiFrameArgs *args) { |
| 479 UiObject* current = uic_current_obj(obj); |
479 UiObject* current = uic_current_obj(obj); |
| 480 UI_APPLY_LAYOUT1(current, args); |
480 UI_APPLY_LAYOUT2(current, args); |
| 481 |
481 |
| 482 GtkWidget *frame = gtk_frame_new(args.label); |
482 GtkWidget *frame = gtk_frame_new(args->label); |
| 483 UiObject *newobj = uic_object_new(obj, frame); |
483 UiObject *newobj = uic_object_new(obj, frame); |
| 484 GtkWidget *sub = ui_subcontainer_create(args.subcontainer, newobj, args.spacing, args.columnspacing, args.rowspacing, args.margin); |
484 GtkWidget *sub = ui_subcontainer_create(args->subcontainer, newobj, args->spacing, args->columnspacing, args->rowspacing, args->margin); |
| 485 if(sub) { |
485 if(sub) { |
| 486 FRAME_SET_CHILD(frame, sub); |
486 FRAME_SET_CHILD(frame, sub); |
| 487 } else { |
487 } else { |
| 488 newobj->widget = frame; |
488 newobj->widget = frame; |
| 489 newobj->container = ui_frame_container(obj, frame); |
489 newobj->container = ui_frame_container(obj, frame); |
| 492 uic_obj_add(obj, newobj); |
492 uic_obj_add(obj, newobj); |
| 493 |
493 |
| 494 return frame; |
494 return frame; |
| 495 } |
495 } |
| 496 |
496 |
| 497 UIEXPORT UIWIDGET ui_expander_create(UiObject *obj, UiFrameArgs args) { |
497 UIEXPORT UIWIDGET ui_expander_create(UiObject *obj, UiFrameArgs *args) { |
| 498 UiObject* current = uic_current_obj(obj); |
498 UiObject* current = uic_current_obj(obj); |
| 499 UI_APPLY_LAYOUT1(current, args); |
499 UI_APPLY_LAYOUT2(current, args); |
| 500 |
500 |
| 501 GtkWidget *expander = gtk_expander_new(args.label); |
501 GtkWidget *expander = gtk_expander_new(args->label); |
| 502 gtk_expander_set_expanded(GTK_EXPANDER(expander), args.isexpanded); |
502 gtk_expander_set_expanded(GTK_EXPANDER(expander), args->isexpanded); |
| 503 UiObject *newobj = uic_object_new(obj, expander); |
503 UiObject *newobj = uic_object_new(obj, expander); |
| 504 GtkWidget *sub = ui_subcontainer_create(args.subcontainer, newobj, args.spacing, args.columnspacing, args.rowspacing, args.margin); |
504 GtkWidget *sub = ui_subcontainer_create(args->subcontainer, newobj, args->spacing, args->columnspacing, args->rowspacing, args->margin); |
| 505 if(sub) { |
505 if(sub) { |
| 506 EXPANDER_SET_CHILD(expander, sub); |
506 EXPANDER_SET_CHILD(expander, sub); |
| 507 } else { |
507 } else { |
| 508 newobj->widget = expander; |
508 newobj->widget = expander; |
| 509 newobj->container = ui_expander_container(obj, expander); |
509 newobj->container = ui_expander_container(obj, expander); |
| 513 |
513 |
| 514 return expander; |
514 return expander; |
| 515 } |
515 } |
| 516 |
516 |
| 517 |
517 |
| 518 UIWIDGET ui_scrolledwindow_create(UiObject* obj, UiFrameArgs args) { |
518 UIWIDGET ui_scrolledwindow_create(UiObject* obj, UiFrameArgs *args) { |
| 519 UiObject* current = uic_current_obj(obj); |
519 UiObject* current = uic_current_obj(obj); |
| 520 UI_APPLY_LAYOUT1(current, args); |
520 UI_APPLY_LAYOUT2(current, args); |
| 521 |
521 |
| 522 GtkWidget *sw = SCROLLEDWINDOW_NEW(); |
522 GtkWidget *sw = SCROLLEDWINDOW_NEW(); |
| 523 ui_set_name_and_style(sw, args.name, args.style_class); |
523 ui_set_name_and_style(sw, args->name, args->style_class); |
| 524 GtkWidget *widget = ui_box_set_margin(sw, args.margin); |
524 GtkWidget *widget = ui_box_set_margin(sw, args->margin); |
| 525 current->container->add(current->container, widget, TRUE); |
525 current->container->add(current->container, widget, TRUE); |
| 526 |
526 |
| 527 UiObject *newobj = uic_object_new(obj, sw); |
527 UiObject *newobj = uic_object_new(obj, sw); |
| 528 GtkWidget *sub = ui_subcontainer_create(args.subcontainer, newobj, args.spacing, args.columnspacing, args.rowspacing, args.margin); |
528 GtkWidget *sub = ui_subcontainer_create(args->subcontainer, newobj, args->spacing, args->columnspacing, args->rowspacing, args->margin); |
| 529 if(sub) { |
529 if(sub) { |
| 530 SCROLLEDWINDOW_SET_CHILD(sw, sub); |
530 SCROLLEDWINDOW_SET_CHILD(sw, sub); |
| 531 } else { |
531 } else { |
| 532 newobj->widget = sw; |
532 newobj->widget = sw; |
| 533 newobj->container = ui_scrolledwindow_container(obj, sw); |
533 newobj->container = ui_scrolledwindow_container(obj, sw); |
| 690 } |
690 } |
| 691 |
691 |
| 692 typedef int64_t(*ui_tabview_get_func)(UiInteger*); |
692 typedef int64_t(*ui_tabview_get_func)(UiInteger*); |
| 693 typedef void (*ui_tabview_set_func)(UiInteger*, int64_t); |
693 typedef void (*ui_tabview_set_func)(UiInteger*, int64_t); |
| 694 |
694 |
| 695 UIWIDGET ui_tabview_create(UiObject* obj, UiTabViewArgs args) { |
695 UIWIDGET ui_tabview_create(UiObject* obj, UiTabViewArgs *args) { |
| 696 UiGtkTabView *data = malloc(sizeof(UiGtkTabView)); |
696 UiGtkTabView *data = malloc(sizeof(UiGtkTabView)); |
| 697 data->margin = args.margin; |
697 data->margin = args->margin; |
| 698 data->spacing = args.spacing; |
698 data->spacing = args->spacing; |
| 699 data->columnspacing = args.columnspacing; |
699 data->columnspacing = args->columnspacing; |
| 700 data->rowspacing = args.rowspacing; |
700 data->rowspacing = args->rowspacing; |
| 701 |
701 |
| 702 ui_tabview_get_func getfunc = NULL; |
702 ui_tabview_get_func getfunc = NULL; |
| 703 ui_tabview_set_func setfunc = NULL; |
703 ui_tabview_set_func setfunc = NULL; |
| 704 |
704 |
| 705 GtkWidget *widget = NULL; |
705 GtkWidget *widget = NULL; |
| 706 GtkWidget *data_widget = NULL; |
706 GtkWidget *data_widget = NULL; |
| 707 switch(args.tabview) { |
707 switch(args->tabview) { |
| 708 case UI_TABVIEW_DOC: { |
708 case UI_TABVIEW_DOC: { |
| 709 // TODO |
709 // TODO |
| 710 break; |
710 break; |
| 711 } |
711 } |
| 712 case UI_TABVIEW_NAVIGATION_SIDE: { |
712 case UI_TABVIEW_NAVIGATION_SIDE: { |
| 738 data->select_tab = ui_notebook_tab_select; |
738 data->select_tab = ui_notebook_tab_select; |
| 739 data->remove_tab = ui_notebook_tab_remove; |
739 data->remove_tab = ui_notebook_tab_remove; |
| 740 data->add_tab = ui_notebook_tab_add; |
740 data->add_tab = ui_notebook_tab_add; |
| 741 getfunc = ui_notebook_get; |
741 getfunc = ui_notebook_get; |
| 742 setfunc = ui_notebook_set; |
742 setfunc = ui_notebook_set; |
| 743 if(args.tabview == UI_TABVIEW_INVISIBLE) { |
743 if(args->tabview == UI_TABVIEW_INVISIBLE) { |
| 744 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(widget), FALSE); |
744 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(widget), FALSE); |
| 745 gtk_notebook_set_show_border(GTK_NOTEBOOK(widget), FALSE); |
745 gtk_notebook_set_show_border(GTK_NOTEBOOK(widget), FALSE); |
| 746 } |
746 } |
| 747 break; |
747 break; |
| 748 } |
748 } |
| 749 } |
749 } |
| 750 |
750 |
| 751 UiObject* current = uic_current_obj(obj); |
751 UiObject* current = uic_current_obj(obj); |
| 752 if(args.value || args.varname) { |
752 if(args->value || args->varname) { |
| 753 UiVar *var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_INTEGER); |
753 UiVar *var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_INTEGER); |
| 754 UiInteger *i = var->value; |
754 UiInteger *i = var->value; |
| 755 i->get = getfunc; |
755 i->get = getfunc; |
| 756 i->set = setfunc; |
756 i->set = setfunc; |
| 757 i->obj = data_widget; |
757 i->obj = data_widget; |
| 758 } |
758 } |
| 759 |
759 |
| 760 g_object_set_data(G_OBJECT(widget), "ui_tabview", data); |
760 g_object_set_data(G_OBJECT(widget), "ui_tabview", data); |
| 761 data->widget = data_widget; |
761 data->widget = data_widget; |
| 762 data->subcontainer = args.subcontainer; |
762 data->subcontainer = args->subcontainer; |
| 763 |
763 |
| 764 UI_APPLY_LAYOUT1(current, args); |
764 UI_APPLY_LAYOUT2(current, args); |
| 765 current->container->add(current->container, widget, TRUE); |
765 current->container->add(current->container, widget, TRUE); |
| 766 |
766 |
| 767 UiObject *newobj = uic_object_new(obj, widget); |
767 UiObject *newobj = uic_object_new(obj, widget); |
| 768 newobj->container = ui_tabview_container(obj, widget); |
768 newobj->container = ui_tabview_container(obj, widget); |
| 769 uic_obj_add(obj, newobj); |
769 uic_obj_add(obj, newobj); |
| 870 |
870 |
| 871 void ui_headerbar_end_create(UiObject *obj) { |
871 void ui_headerbar_end_create(UiObject *obj) { |
| 872 hb_set_part(obj, 1); |
872 hb_set_part(obj, 1); |
| 873 } |
873 } |
| 874 |
874 |
| 875 UIWIDGET ui_headerbar_fallback_create(UiObject *obj, UiHeaderbarArgs args) { |
875 UIWIDGET ui_headerbar_fallback_create(UiObject *obj, UiHeaderbarArgs *args) { |
| 876 UiObject *current = uic_current_obj(obj); |
876 UiObject *current = uic_current_obj(obj); |
| 877 UiContainer *ct = current->container; |
877 UiContainer *ct = current->container; |
| 878 UI_APPLY_LAYOUT1(current, args); |
878 UI_APPLY_LAYOUT2(current, args); |
| 879 |
879 |
| 880 GtkWidget *box = ui_gtk_hbox_new(args.alt_spacing); |
880 GtkWidget *box = ui_gtk_hbox_new(args->alt_spacing); |
| 881 ui_set_name_and_style(box, args.name, args.style_class); |
881 ui_set_name_and_style(box, args->name, args->style_class); |
| 882 ct->add(ct, box, FALSE); |
882 ct->add(ct, box, FALSE); |
| 883 |
883 |
| 884 UiObject *newobj = uic_object_new(obj, box); |
884 UiObject *newobj = uic_object_new(obj, box); |
| 885 newobj->container = ui_headerbar_fallback_container(obj, box); |
885 newobj->container = ui_headerbar_fallback_container(obj, box); |
| 886 uic_obj_add(obj, newobj); |
886 uic_obj_add(obj, newobj); |
| 915 BOX_ADD(ct->widget, widget); |
915 BOX_ADD(ct->widget, widget); |
| 916 } |
916 } |
| 917 |
917 |
| 918 #if GTK_CHECK_VERSION(3, 10, 0) |
918 #if GTK_CHECK_VERSION(3, 10, 0) |
| 919 |
919 |
| 920 UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs args) { |
920 UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs *args) { |
| 921 GtkWidget *headerbar = g_object_get_data(G_OBJECT(obj->widget), "ui_headerbar"); |
921 GtkWidget *headerbar = g_object_get_data(G_OBJECT(obj->widget), "ui_headerbar"); |
| 922 if(!headerbar) { |
922 if(!headerbar) { |
| 923 return ui_headerbar_fallback_create(obj, args); |
923 return ui_headerbar_fallback_create(obj, args); |
| 924 } |
924 } |
| 925 |
925 |
| 956 } |
956 } |
| 957 } |
957 } |
| 958 |
958 |
| 959 #else |
959 #else |
| 960 |
960 |
| 961 UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs args) { |
961 UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs *args) { |
| 962 return ui_headerbar_fallback_create(obj, args); |
962 return ui_headerbar_fallback_create(obj, args); |
| 963 } |
963 } |
| 964 |
964 |
| 965 #endif |
965 #endif |
| 966 |
966 |
| 967 /* -------------------- Sidebar -------------------- */ |
967 /* -------------------- Sidebar -------------------- */ |
| 968 |
968 |
| 969 #ifdef UI_LIBADWAITA |
969 #ifdef UI_LIBADWAITA |
| 970 UIWIDGET ui_sidebar_create(UiObject *obj, UiSidebarArgs args) { |
970 UIWIDGET ui_sidebar_create(UiObject *obj, UiSidebarArgs *args) { |
| 971 GtkWidget *sidebar_toolbar_view = g_object_get_data(G_OBJECT(obj->widget), "ui_sidebar"); |
971 GtkWidget *sidebar_toolbar_view = g_object_get_data(G_OBJECT(obj->widget), "ui_sidebar"); |
| 972 if(!sidebar_toolbar_view) { |
972 if(!sidebar_toolbar_view) { |
| 973 fprintf(stderr, "Error: window is not configured for sidebar\n"); |
973 fprintf(stderr, "Error: window is not configured for sidebar\n"); |
| 974 return NULL; |
974 return NULL; |
| 975 } |
975 } |
| 976 |
976 |
| 977 GtkWidget *box = ui_gtk_vbox_new(args.spacing); |
977 GtkWidget *box = ui_gtk_vbox_new(args->spacing); |
| 978 ui_box_set_margin(box, args.margin); |
978 ui_box_set_margin(box, args->margin); |
| 979 adw_toolbar_view_set_content(ADW_TOOLBAR_VIEW(sidebar_toolbar_view), box); |
979 adw_toolbar_view_set_content(ADW_TOOLBAR_VIEW(sidebar_toolbar_view), box); |
| 980 |
980 |
| 981 UiObject *newobj = uic_object_new(obj, box); |
981 UiObject *newobj = uic_object_new(obj, box); |
| 982 newobj->container = ui_box_container(obj, box, UI_CONTAINER_VBOX); |
982 newobj->container = ui_box_container(obj, box, UI_CONTAINER_VBOX); |
| 983 uic_obj_add(obj, newobj); |
983 uic_obj_add(obj, newobj); |
| 984 |
984 |
| 985 return box; |
985 return box; |
| 986 } |
986 } |
| 987 #else |
987 #else |
| 988 UIWIDGET ui_sidebar_create(UiObject *obj, UiSidebarArgs args) { |
988 UIWIDGET ui_sidebar_create(UiObject *obj, UiSidebarArgs *args) { |
| 989 GtkWidget *sidebar_vbox = g_object_get_data(G_OBJECT(obj->widget), "ui_sidebar"); |
989 GtkWidget *sidebar_vbox = g_object_get_data(G_OBJECT(obj->widget), "ui_sidebar"); |
| 990 |
990 |
| 991 GtkWidget *box = ui_gtk_vbox_new(args.spacing); |
991 GtkWidget *box = ui_gtk_vbox_new(args->spacing); |
| 992 ui_box_set_margin(box, args.margin); |
992 ui_box_set_margin(box, args->margin); |
| 993 BOX_ADD_EXPAND(sidebar_vbox, box); |
993 BOX_ADD_EXPAND(sidebar_vbox, box); |
| 994 |
994 |
| 995 UiObject *newobj = uic_object_new(obj, box); |
995 UiObject *newobj = uic_object_new(obj, box); |
| 996 newobj->container = ui_box_container(obj, box, UI_CONTAINER_VBOX); |
996 newobj->container = ui_box_container(obj, box, UI_CONTAINER_VBOX); |
| 997 uic_obj_add(obj, newobj); |
997 uic_obj_add(obj, newobj); |
| 1017 return NULL; |
1017 return NULL; |
| 1018 } |
1018 } |
| 1019 |
1019 |
| 1020 |
1020 |
| 1021 |
1021 |
| 1022 static UIWIDGET splitpane_create(UiObject *obj, UiOrientation orientation, UiSplitPaneArgs args) { |
1022 static UIWIDGET splitpane_create(UiObject *obj, UiOrientation orientation, UiSplitPaneArgs *args) { |
| 1023 UiObject* current = uic_current_obj(obj); |
1023 UiObject* current = uic_current_obj(obj); |
| 1024 |
1024 |
| 1025 GtkWidget *pane0 = create_paned(orientation); |
1025 GtkWidget *pane0 = create_paned(orientation); |
| 1026 |
1026 |
| 1027 UI_APPLY_LAYOUT1(current, args); |
1027 UI_APPLY_LAYOUT2(current, args); |
| 1028 current->container->add(current->container, pane0, TRUE); |
1028 current->container->add(current->container, pane0, TRUE); |
| 1029 |
1029 |
| 1030 int max = args.max_panes == 0 ? 2 : args.max_panes; |
1030 int max = args->max_panes == 0 ? 2 : args->max_panes; |
| 1031 |
1031 |
| 1032 UiObject *newobj = uic_object_new(obj, pane0); |
1032 UiObject *newobj = uic_object_new(obj, pane0); |
| 1033 newobj->container = ui_splitpane_container(obj, pane0, orientation, max, args.initial_position); |
1033 newobj->container = ui_splitpane_container(obj, pane0, orientation, max, args->initial_position); |
| 1034 uic_obj_add(obj, newobj); |
1034 uic_obj_add(obj, newobj); |
| 1035 |
1035 |
| 1036 g_object_set_data(G_OBJECT(pane0), "ui_splitpane", newobj->container); |
1036 g_object_set_data(G_OBJECT(pane0), "ui_splitpane", newobj->container); |
| 1037 |
1037 |
| 1038 return pane0; |
1038 return pane0; |
| 1039 } |
1039 } |
| 1040 |
1040 |
| 1041 UIWIDGET ui_hsplitpane_create(UiObject *obj, UiSplitPaneArgs args) { |
1041 UIWIDGET ui_hsplitpane_create(UiObject *obj, UiSplitPaneArgs *args) { |
| 1042 return splitpane_create(obj, UI_HORIZONTAL, args); |
1042 return splitpane_create(obj, UI_HORIZONTAL, args); |
| 1043 } |
1043 } |
| 1044 |
1044 |
| 1045 UIWIDGET ui_vsplitpane_create(UiObject *obj, UiSplitPaneArgs args) { |
1045 UIWIDGET ui_vsplitpane_create(UiObject *obj, UiSplitPaneArgs *args) { |
| 1046 return splitpane_create(obj, UI_VERTICAL, args); |
1046 return splitpane_create(obj, UI_VERTICAL, args); |
| 1047 } |
1047 } |
| 1048 |
1048 |
| 1049 UiContainer* ui_splitpane_container(UiObject *obj, GtkWidget *pane, UiOrientation orientation, int max, int init) { |
1049 UiContainer* ui_splitpane_container(UiObject *obj, GtkWidget *pane, UiOrientation orientation, int max, int init) { |
| 1050 UiSplitPaneContainer *ct = ui_calloc(obj->ctx, 1, sizeof(UiSplitPaneContainer)); |
1050 UiSplitPaneContainer *ct = ui_calloc(obj->ctx, 1, sizeof(UiSplitPaneContainer)); |
| 1185 container->remove_items = FALSE; |
1185 container->remove_items = FALSE; |
| 1186 cxMapFree(container->current_items); |
1186 cxMapFree(container->current_items); |
| 1187 free(container); |
1187 free(container); |
| 1188 } |
1188 } |
| 1189 |
1189 |
| 1190 UIWIDGET ui_itemlist_create(UiObject *obj, UiItemListContainerArgs args) { |
1190 UIWIDGET ui_itemlist_create(UiObject *obj, UiItemListContainerArgs *args) { |
| 1191 UiObject *current = uic_current_obj(obj); |
1191 UiObject *current = uic_current_obj(obj); |
| 1192 UiContainer *ct = current->container; |
1192 UiContainer *ct = current->container; |
| 1193 UI_APPLY_LAYOUT1(current, args); |
1193 UI_APPLY_LAYOUT2(current, args); |
| 1194 |
1194 |
| 1195 GtkWidget *box = args.container == UI_CONTAINER_VBOX ? ui_gtk_vbox_new(args.spacing) : ui_gtk_hbox_new(args.spacing); |
1195 GtkWidget *box = args->container == UI_CONTAINER_VBOX ? ui_gtk_vbox_new(args->spacing) : ui_gtk_hbox_new(args->spacing); |
| 1196 ui_set_name_and_style(box, args.name, args.style_class); |
1196 ui_set_name_and_style(box, args->name, args->style_class); |
| 1197 GtkWidget *widget = args.margin > 0 ? ui_box_set_margin(box, args.margin) : box; |
1197 GtkWidget *widget = args->margin > 0 ? ui_box_set_margin(box, args->margin) : box; |
| 1198 ct->add(ct, widget, TRUE); |
1198 ct->add(ct, widget, TRUE); |
| 1199 |
1199 |
| 1200 UiGtkItemListContainer *container = malloc(sizeof(UiGtkItemListContainer)); |
1200 UiGtkItemListContainer *container = malloc(sizeof(UiGtkItemListContainer)); |
| 1201 container->parent = obj; |
1201 container->parent = obj; |
| 1202 container->widget = box; |
1202 container->widget = box; |
| 1203 container->container = ui_box_container(current, box, args.container); |
1203 container->container = ui_box_container(current, box, args->container); |
| 1204 container->create_ui = args.create_ui; |
1204 container->create_ui = args->create_ui; |
| 1205 container->userdata = args.userdata; |
1205 container->userdata = args->userdata; |
| 1206 container->subcontainer = args.subcontainer; |
1206 container->subcontainer = args->subcontainer; |
| 1207 container->current_items = cxHashMapCreateSimple(CX_STORE_POINTERS); |
1207 container->current_items = cxHashMapCreateSimple(CX_STORE_POINTERS); |
| 1208 container->current_items->collection.advanced_destructor = remove_item; |
1208 container->current_items->collection.advanced_destructor = remove_item; |
| 1209 container->current_items->collection.destructor_data = container; |
1209 container->current_items->collection.destructor_data = container; |
| 1210 container->margin = args.sub_margin; |
1210 container->margin = args->sub_margin; |
| 1211 container->spacing = args.sub_spacing; |
1211 container->spacing = args->sub_spacing; |
| 1212 container->columnspacing = args.sub_columnspacing; |
1212 container->columnspacing = args->sub_columnspacing; |
| 1213 container->rowspacing = args.sub_rowspacing; |
1213 container->rowspacing = args->sub_rowspacing; |
| 1214 container->remove_items = TRUE; |
1214 container->remove_items = TRUE; |
| 1215 |
1215 |
| 1216 UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_LIST); |
1216 UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_LIST); |
| 1217 if(var) { |
1217 if(var) { |
| 1218 UiList *list = var->value; |
1218 UiList *list = var->value; |
| 1219 list->obj = container; |
1219 list->obj = container; |
| 1220 list->update = update_itemlist; |
1220 list->update = update_itemlist; |
| 1221 update_itemlist(list, 0); |
1221 update_itemlist(list, 0); |