ui/cocoa/Toolbar.m

changeset 113
dde28a806552
parent 110
c00e968d018b
--- a/ui/cocoa/Toolbar.m	Sun Oct 19 21:20:08 2025 +0200
+++ b/ui/cocoa/Toolbar.m	Mon Nov 10 21:52:51 2025 +0100
@@ -45,13 +45,21 @@
 
 @implementation UiToolbar
 
-- (UiToolbar*) initWithObject:(UiObject*)object {
+- (UiToolbar*) initWithWindow:(MainWindow*)window {
     self = [super initWithIdentifier:@"UiToolbar"];
-    _obj = object;
+    _window = window;
+    _obj = window.obj;
     
     allowedItems = [[NSMutableArray alloc]initWithCapacity:16];
     defaultItems = [[NSMutableArray alloc]initWithCapacity:16];
     
+    if(window.sidebar) {
+        [allowedItems addObject:@"sidebar_separator"];
+    }
+    if(window.leftPanel) {
+        [allowedItems addObject:@"splitview_separator"];
+    }
+    
     CxMap *toolbarItems = uic_get_toolbar_items();
     CxMapIterator i = cxMapIteratorKeys(toolbarItems);
     cx_foreach(CxHashKey *, key, i) {
@@ -61,18 +69,59 @@
     [allowedItems addObject: NSToolbarFlexibleSpaceItemIdentifier];
     [allowedItems addObject: NSToolbarSpaceItemIdentifier];
     
-    CxList *tbitems[3];
-    tbitems[0] =  uic_get_toolbar_defaults(UI_TOOLBAR_LEFT);
-    tbitems[1] =  uic_get_toolbar_defaults(UI_TOOLBAR_CENTER);
-    tbitems[2] =  uic_get_toolbar_defaults(UI_TOOLBAR_RIGHT);
-    for(int t=0;t<3;t++) {
-        CxIterator iter = cxListIterator(tbitems[t]);
+    // UI_TOOLBAR_LEFT = 0,
+    // UI_TOOLBAR_CENTER,
+    // UI_TOOLBAR_RIGHT,
+    // UI_TOOLBAR_SIDEBAR_LEFT,
+    // UI_TOOLBAR_SIDEBAR_RIGHT,
+    // UI_TOOLBAR_RIGHTPANEL_LEFT,
+    // UI_TOOLBAR_RIGHTPANEL_CENTER,
+    // UI_TOOLBAR_RIGHTPANEL_RIGHT
+    CxList *tbitems[8];
+    for(int i=0;i<8;i++) {
+        tbitems[i] = uic_get_toolbar_defaults(i);
+    }
+    
+    if(window.sidebar) {
+        CxIterator iter = cxListIterator(tbitems[UI_TOOLBAR_SIDEBAR_LEFT]);
         cx_foreach(char *, name, iter) {
             NSString *s = [[NSString alloc] initWithUTF8String:name];
             [defaultItems addObject:s];
         }
+        
+        CxList *sidebarRight = tbitems[UI_TOOLBAR_SIDEBAR_RIGHT];
+        if(cxListSize(sidebarRight) > 0) {
+            [defaultItems addObject:NSToolbarFlexibleSpaceItemIdentifier];
+            iter = cxListIterator(sidebarRight);
+            cx_foreach(char *, name, iter) {
+                NSString *s = [[NSString alloc] initWithUTF8String:name];
+                [defaultItems addObject:s];
+            }
+        }
+        
+        [defaultItems addObject:@"sidebar_separator"];
     }
     
+    int start_pos = UI_TOOLBAR_LEFT;
+    for(int x=0;x<2;x++) {
+        for(int t=start_pos;t<start_pos+3;t++) {
+            CxIterator iter = cxListIterator(tbitems[t]);
+            cx_foreach(char *, name, iter) {
+                NSString *s = [[NSString alloc] initWithUTF8String:name];
+                [defaultItems addObject:s];
+            }
+            if(t < start_pos+2 && cxListSize(tbitems[t+1]) > 0) {
+                [defaultItems addObject:NSToolbarFlexibleSpaceItemIdentifier];
+            }
+        }
+        
+        if(x == 0 && window.rightPanel) {
+            [defaultItems addObject:@"splitview_separator"];
+        }
+        start_pos = UI_TOOLBAR_RIGHTPANEL_LEFT;
+    }
+    
+    
     [self setDelegate:self];
     [self setAllowsUserCustomization:YES];
     return self;
@@ -94,6 +143,18 @@
     CxMap *items = uic_get_toolbar_items();
     UiToolbarItemI *item = cxMapGet(items, itemIdentifier.UTF8String);
     if(!item) {
+        if([itemIdentifier isEqualToString:@"sidebar_separator"]) {
+            NSTrackingSeparatorToolbarItem *sep = [NSTrackingSeparatorToolbarItem trackingSeparatorToolbarItemWithIdentifier:itemIdentifier
+                                                                                                                   splitView:_window.splitview
+                                                                                                                dividerIndex:0];
+            return sep;
+        } else if([itemIdentifier isEqualToString:@"splitview_separator"]) {
+            int dividerIndex = _window.sidebar != nil ? 1 : 0;
+            NSTrackingSeparatorToolbarItem *sep = [NSTrackingSeparatorToolbarItem trackingSeparatorToolbarItemWithIdentifier:itemIdentifier
+                                                                                                                   splitView:_window.splitview
+                                                                                                                dividerIndex:dividerIndex];
+            return sep;
+        }
         return nil;
     }
     

mercurial