ui/cocoa/MainWindow.m

changeset 110
c00e968d018b
parent 109
c3dfcb8f0be7
child 112
c3f2f16fa4b8
--- 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;
+}

mercurial