--- a/ui/cocoa/MainWindow.m Sun Aug 24 15:24:16 2025 +0200 +++ b/ui/cocoa/MainWindow.m Sat Oct 04 14:52:59 2025 +0200 @@ -29,6 +29,7 @@ #import "MainWindow.h" #import "Container.h" #import "GridLayout.h" +#import "BoxContainer.h" #import "../common/object.h" #import <objc/runtime.h> @@ -38,7 +39,7 @@ @implementation MainWindow -- (MainWindow*)init:(UiObject*)obj { +- (MainWindow*)init:(UiObject*)obj withSidebar:(BOOL)sidebar { NSRect frame = NSMakeRect(300, 200, 600, 500); self = [self initWithContentRect:frame @@ -49,24 +50,52 @@ backing:NSBackingStoreBuffered defer:false]; + if(uic_toolbar_isenabled()) { UiToolbar *toolbar = [[UiToolbar alloc]initWithObject:obj]; [self setToolbar:toolbar]; } + int top = 4; + NSView *content = self.contentView; + if(sidebar) { + self.styleMask |= NSWindowStyleMaskFullSizeContentView; + self.titleVisibility = NSWindowTitleHidden; + self.titlebarAppearsTransparent = YES; + + NSSplitView *splitview = [[NSSplitView alloc]init]; + splitview.vertical = YES; + splitview.dividerStyle = NSSplitViewDividerStyleThin; + splitview.translatesAutoresizingMaskIntoConstraints = false; + [self.contentView addSubview:splitview]; + + [NSLayoutConstraint activateConstraints:@[ + [splitview.topAnchor constraintEqualToAnchor:self.contentView.topAnchor constant:0], + [splitview.leadingAnchor constraintEqualToAnchor:self.contentView.leadingAnchor], + [splitview.trailingAnchor constraintEqualToAnchor:self.contentView.trailingAnchor], + [splitview.bottomAnchor constraintEqualToAnchor:self.contentView.bottomAnchor] + ]]; + + _sidebar = [[NSView alloc]initWithFrame:NSMakeRect(0,0,100,100)]; + [splitview addArrangedSubview:_sidebar]; + + content = [[NSView alloc]initWithFrame:NSMakeRect(0,0,100,100)]; + [splitview addArrangedSubview:content]; + + top = 34; + } // create a vertical stackview as default container BoxContainer *vbox = [[BoxContainer alloc] init:NSUserInterfaceLayoutOrientationVertical spacing:0]; //GridLayout *vbox = [[GridLayout alloc] init]; vbox.translatesAutoresizingMaskIntoConstraints = false; - [self.contentView addSubview:vbox]; + [content addSubview:vbox]; [NSLayoutConstraint activateConstraints:@[ - [vbox.topAnchor constraintEqualToAnchor:self.contentView.topAnchor constant:4], - [vbox.leadingAnchor constraintEqualToAnchor:self.contentView.leadingAnchor], - [vbox.trailingAnchor constraintEqualToAnchor:self.contentView.trailingAnchor], - [vbox.bottomAnchor constraintEqualToAnchor:self.contentView.bottomAnchor] + [vbox.topAnchor constraintEqualToAnchor:content.topAnchor constant:top], + [vbox.leadingAnchor constraintEqualToAnchor:content.leadingAnchor], + [vbox.trailingAnchor constraintEqualToAnchor:content.trailingAnchor], + [vbox.bottomAnchor constraintEqualToAnchor:content.bottomAnchor], ]]; - uic_object_push_container(obj, ui_create_container(obj, vbox)); return self; @@ -75,7 +104,6 @@ @end - @implementation MainWindowController - (MainWindowController*)initWithWindow:(UiObject*)obj window:(NSWindow*)window { @@ -273,3 +301,27 @@ index++; } } + + +UIWIDGET ui_sidebar_create(UiObject *obj, UiSidebarArgs *args) { + MainWindow *window = (__bridge MainWindow*)obj->wobj; + if(window.sidebar == nil) { + return NULL; + } + NSView *sidebar = window.sidebar; + + // create a vertical stackview as default container + BoxContainer *vbox = [[BoxContainer alloc] init:NSUserInterfaceLayoutOrientationVertical spacing:args->spacing]; + //GridLayout *vbox = [[GridLayout alloc] init]; + vbox.translatesAutoresizingMaskIntoConstraints = false; + [sidebar addSubview:vbox]; + [NSLayoutConstraint activateConstraints:@[ + [vbox.topAnchor constraintEqualToAnchor:sidebar.topAnchor constant:34], + [vbox.leadingAnchor constraintEqualToAnchor:sidebar.leadingAnchor], + [vbox.trailingAnchor constraintEqualToAnchor:sidebar.trailingAnchor], + [vbox.bottomAnchor constraintEqualToAnchor:sidebar.bottomAnchor] + ]]; + uic_object_push_container(obj, ui_create_container(obj, vbox)); + + return NULL; +}