Sat, 26 Jul 2025 20:06:02 +0200
semi functional toolbar (Cocoa)
|
677
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1 | /* |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
3 | * |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
4 | * Copyright 2025 Olaf Wintermann. All rights reserved. |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
5 | * |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
8 | * |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
10 | * notice, this list of conditions and the following disclaimer. |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
11 | * |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
13 | * notice, this list of conditions and the following disclaimer in the |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
14 | * documentation and/or other materials provided with the distribution. |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
15 | * |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
26 | * POSSIBILITY OF SUCH DAMAGE. |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
27 | */ |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
28 | |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
29 | #import "Toolbar.h" |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
30 | |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
31 | #include "../common/toolbar.h" |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
32 | |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
33 | void ui_toolbar_init(void) { |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
34 | |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
35 | } |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
36 | |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
37 | |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
38 | |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
39 | /* --------------------- UiToolbar --------------------- */ |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
40 | |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
41 | @implementation UiToolbar |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
42 | |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
43 | - (UiToolbar*) initWithObject:(UiObject*)object { |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
44 | self = [super initWithIdentifier:@"UiToolbar"]; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
45 | _obj = object; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
46 | |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
47 | allowedItems = [[NSMutableArray alloc]initWithCapacity:16]; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
48 | defaultItems = [[NSMutableArray alloc]initWithCapacity:16]; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
49 | |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
50 | CxMap *toolbarItems = uic_get_toolbar_items(); |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
51 | CxMapIterator i = cxMapIteratorKeys(toolbarItems); |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
52 | cx_foreach(CxHashKey *, key, i) { |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
53 | NSString *s = [[NSString alloc]initWithBytes:key->data length:key->len encoding:NSUTF8StringEncoding]; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
54 | [allowedItems addObject:s]; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
55 | } |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
56 | [allowedItems addObject: NSToolbarFlexibleSpaceItemIdentifier]; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
57 | [allowedItems addObject: NSToolbarSpaceItemIdentifier]; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
58 | |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
59 | CxList *tbitems[3]; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
60 | tbitems[0] = uic_get_toolbar_defaults(UI_TOOLBAR_LEFT); |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
61 | tbitems[1] = uic_get_toolbar_defaults(UI_TOOLBAR_CENTER); |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
62 | tbitems[2] = uic_get_toolbar_defaults(UI_TOOLBAR_RIGHT); |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
63 | for(int t=0;t<3;t++) { |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
64 | CxIterator iter = cxListIterator(tbitems[t]); |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
65 | cx_foreach(char *, name, iter) { |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
66 | NSString *s = [[NSString alloc] initWithUTF8String:name]; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
67 | [defaultItems addObject:s]; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
68 | } |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
69 | } |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
70 | |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
71 | [self setDelegate:self]; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
72 | [self setAllowsUserCustomization:YES]; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
73 | return self; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
74 | } |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
75 | |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
76 | // implementation of NSToolbarDelegate methods |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
77 | |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
78 | - (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar { |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
79 | return allowedItems; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
80 | } |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
81 | |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
82 | - (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar { |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
83 | return defaultItems; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
84 | } |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
85 | |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
86 | - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
87 | itemForItemIdentifier:(NSString *)itemIdentifier |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
88 | willBeInsertedIntoToolbar:(BOOL)flag { |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
89 | CxMap *items = uic_get_toolbar_items(); |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
90 | UiToolbarItemI *item = cxMapGet(items, itemIdentifier.UTF8String); |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
91 | if(!item) { |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
92 | return nil; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
93 | } |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
94 | |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
95 | switch(item->type) { |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
96 | default: return nil; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
97 | case UI_TOOLBAR_ITEM: { |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
98 | NSToolbarItem *tbItem = [[NSToolbarItem alloc] initWithItemIdentifier: itemIdentifier]; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
99 | [tbItem setLabel: @"Test"]; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
100 | return tbItem; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
101 | break; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
102 | } |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
103 | } |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
104 | |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
105 | return nil; |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
106 | } |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
107 | |
|
04bcb1930fbf
semi functional toolbar (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
108 | @end |