diff -r 7b627710c155 -r 41286f7f8433 ui/cocoa/MainWindow.m --- a/ui/cocoa/MainWindow.m Sun Sep 07 08:28:30 2025 +0200 +++ b/ui/cocoa/MainWindow.m Sun Sep 07 11:57:01 2025 +0200 @@ -38,7 +38,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 +49,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 +103,6 @@ @end - @implementation MainWindowController - (MainWindowController*)initWithWindow:(UiObject*)obj window:(NSWindow*)window { @@ -273,3 +300,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; +}