--- a/ui/cocoa/container.m Wed Oct 15 18:50:52 2025 +0200 +++ b/ui/cocoa/container.m Thu Oct 16 10:48:16 2025 +0200 @@ -29,6 +29,7 @@ #import "Container.h" #import "GridLayout.h" #import "BoxContainer.h" +#import "TabView.h" /* -------------------- public container functions --------------------- */ @@ -36,7 +37,6 @@ BoxContainer *box = [[BoxContainer alloc] init:orientation spacing:args->spacing]; box.translatesAutoresizingMaskIntoConstraints = false; UiContainerX *container = ui_create_container(obj, box); - box.container = container; // add box to the parent UiLayout layout = UI_INIT_LAYOUT(args); @@ -119,6 +119,10 @@ return (__bridge void*)frame; } +UIWIDGET ui_expander_create(UiObject *obj, UiFrameArgs *args) { + return ui_frame_create(obj, args); // TODO +} + UIWIDGET ui_scrolledwindow_create(UiObject *obj, UiFrameArgs *args) { int colspacing = args->spacing; int rowspacing = args->spacing; @@ -139,6 +143,50 @@ return (__bridge void*)scrollview; } +UIWIDGET ui_tabview_create(UiObject *obj, UiTabViewArgs *args) { + NSView<TabView, Container> *tabview; + switch(args->tabview) { + default: tabview = [[UiTopTabView alloc]init:obj args:args]; break; + } + + UiLayout layout = UI_ARGS2LAYOUT(args); + ui_container_add(obj, tabview, &layout); + + UiContainerX *container = ui_create_container(obj, tabview); + uic_object_push_container(obj, container); + + return (__bridge void*)tabview; +} + +void ui_tab_create(UiObject *obj, const char* title) { + UiContainerX *ctn = obj->container_end; + id<TabView> tabview = (__bridge id<TabView>)ctn->container; + NSString *s = title ? [[NSString alloc]initWithUTF8String:title] : @""; + NSView<Container> *sub = [tabview createTab:-1 title:s]; + + UiContainerX *container = ui_create_container(obj, sub); + uic_object_push_container(obj, container); +} + +void ui_tabview_select(UIWIDGET tabview, int tab) { + id<TabView> tabv = (__bridge id<TabView>)tabview; + [tabv selectTab:tab]; +} + +void ui_tabview_remove(UIWIDGET tabview, int tab) { + id<TabView> tabv = (__bridge id<TabView>)tabview; + [tabv removeTab:tab]; +} + +UiObject* ui_tabview_add(UIWIDGET tabview, const char *name, int tab_index) { + id<TabView> tabv = (__bridge id<TabView>)tabview; + NSString *s = name ? [[NSString alloc]initWithUTF8String:name] : @""; + return [tabv addTab:tab_index title:s]; +} + + + + void ui_container_begin_close(UiObject *obj) { UiContainerX *ct = obj->container_end; ct->close = 1;