Sun, 26 Oct 2025 13:10:46 +0100
implement all toolbar item positions (Cocoa)
--- a/make/xcode/toolkit/toolkit/main.m Sun Oct 26 10:30:02 2025 +0100 +++ b/make/xcode/toolkit/toolkit/main.m Sun Oct 26 13:10:46 2025 +0100 @@ -250,6 +250,8 @@ } } + ui_toolbar_item("itemz", .label = "Test Z", .icon = "NSImageNameActionTemplate"); + ui_toolbar_item("item0", .label = "Test 0", .icon = "NSImageNameActionTemplate"); ui_toolbar_item("item1", .label = "Test 1", .icon = "NSImageNameGoBackTemplate", .onclick = toolbar_action); ui_toolbar_item("item2", .label = "Test 2", .icon = "NSImageNameGoForwardTemplate", .onclick = toolbar_action); ui_toolbar_toggleitem("item3", .label = "Toggle", .icon = "NSImageNameActionTemplate", .varname = "tbtoggle", .onchange = toolbar_toggle); @@ -258,12 +260,16 @@ ui_menu_toggleitem(.label = "Check"); } ui_toolbar_item("item5", .label = "Dialog Window", .icon = "NSImageNameAddTemplate", .onclick = toolbar_action2); + ui_toolbar_item("item6", .label = "Test", .icon = "NSImageNameGoBackTemplate"); - ui_toolbar_add_default("item4", UI_TOOLBAR_LEFT); - ui_toolbar_add_default("item3", UI_TOOLBAR_LEFT); + ui_toolbar_add_default("itemz", UI_TOOLBAR_SIDEBAR_LEFT); + ui_toolbar_add_default("item0", UI_TOOLBAR_SIDEBAR_RIGHT); ui_toolbar_add_default("item1", UI_TOOLBAR_LEFT); - ui_toolbar_add_default("item2", UI_TOOLBAR_RIGHT); - ui_toolbar_add_default("item5", UI_TOOLBAR_RIGHT); + ui_toolbar_add_default("item2", UI_TOOLBAR_LEFT); + ui_toolbar_add_default("item3", UI_TOOLBAR_CENTER); + ui_toolbar_add_default("item4", UI_TOOLBAR_RIGHT); + ui_toolbar_add_default("item5", UI_TOOLBAR_RIGHTPANEL_LEFT); + ui_toolbar_add_default("item6", UI_TOOLBAR_RIGHTPANEL_RIGHT); ui_main();
--- a/ui/cocoa/MainWindow.h Sun Oct 26 10:30:02 2025 +0100 +++ b/ui/cocoa/MainWindow.h Sun Oct 26 13:10:46 2025 +0100 @@ -31,6 +31,8 @@ @interface MainWindow : NSWindow<UiToplevelObject> +@property UiObject *obj; +@property (strong) NSSplitView *splitview; @property (strong) NSView *sidebar; @property (strong) NSView *leftPanel; @property (strong) NSView *rightPanel;
--- a/ui/cocoa/MainWindow.m Sun Oct 26 10:30:02 2025 +0100 +++ b/ui/cocoa/MainWindow.m Sun Oct 26 13:10:46 2025 +0100 @@ -50,12 +50,8 @@ NSWindowStyleMaskMiniaturizable backing:NSBackingStoreBuffered defer:false]; - + _obj = obj; - if(uic_toolbar_isenabled()) { - UiToolbar *toolbar = [[UiToolbar alloc]initWithObject:obj]; - [self setToolbar:toolbar]; - } int top = 4; NSView *content = self.contentView; @@ -72,6 +68,7 @@ splitview.dividerStyle = NSSplitViewDividerStyleThin; splitview.translatesAutoresizingMaskIntoConstraints = false; [self.contentView addSubview:splitview]; + _splitview = splitview; [NSLayoutConstraint activateConstraints:@[ [splitview.topAnchor constraintEqualToAnchor:self.contentView.topAnchor constant:0], @@ -135,6 +132,12 @@ } _topOffset = top; + if(uic_toolbar_isenabled()) { + UiToolbar *toolbar = [[UiToolbar alloc]initWithWindow:self]; + [self setToolbar:toolbar]; + } + + return self; }
--- a/ui/cocoa/Toolbar.h Sun Oct 26 10:30:02 2025 +0100 +++ b/ui/cocoa/Toolbar.h Sun Oct 26 13:10:46 2025 +0100 @@ -28,6 +28,7 @@ #import "toolkit.h" #import "../common/toolbar.h" +#import "MainWindow.h" /* * UiToolbarDelegate @@ -49,9 +50,10 @@ NSMutableArray<NSString*> *defaultItems; } +@property MainWindow *window; @property UiObject *obj; -- (UiToolbar*) initWithObject:(UiObject*)object; +- (UiToolbar*) initWithWindow:(MainWindow*)window; @end
--- a/ui/cocoa/Toolbar.m Sun Oct 26 10:30:02 2025 +0100 +++ b/ui/cocoa/Toolbar.m Sun Oct 26 13:10:46 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; }