| 43 |
43 |
| 44 /* --------------------- UiToolbar --------------------- */ |
44 /* --------------------- UiToolbar --------------------- */ |
| 45 |
45 |
| 46 @implementation UiToolbar |
46 @implementation UiToolbar |
| 47 |
47 |
| 48 - (UiToolbar*) initWithObject:(UiObject*)object { |
48 - (UiToolbar*) initWithWindow:(MainWindow*)window { |
| 49 self = [super initWithIdentifier:@"UiToolbar"]; |
49 self = [super initWithIdentifier:@"UiToolbar"]; |
| 50 _obj = object; |
50 _window = window; |
| |
51 _obj = window.obj; |
| 51 |
52 |
| 52 allowedItems = [[NSMutableArray alloc]initWithCapacity:16]; |
53 allowedItems = [[NSMutableArray alloc]initWithCapacity:16]; |
| 53 defaultItems = [[NSMutableArray alloc]initWithCapacity:16]; |
54 defaultItems = [[NSMutableArray alloc]initWithCapacity:16]; |
| |
55 |
| |
56 if(window.sidebar) { |
| |
57 [allowedItems addObject:@"sidebar_separator"]; |
| |
58 } |
| |
59 if(window.leftPanel) { |
| |
60 [allowedItems addObject:@"splitview_separator"]; |
| |
61 } |
| 54 |
62 |
| 55 CxMap *toolbarItems = uic_get_toolbar_items(); |
63 CxMap *toolbarItems = uic_get_toolbar_items(); |
| 56 CxMapIterator i = cxMapIteratorKeys(toolbarItems); |
64 CxMapIterator i = cxMapIteratorKeys(toolbarItems); |
| 57 cx_foreach(CxHashKey *, key, i) { |
65 cx_foreach(CxHashKey *, key, i) { |
| 58 NSString *s = [[NSString alloc]initWithBytes:key->data length:key->len encoding:NSUTF8StringEncoding]; |
66 NSString *s = [[NSString alloc]initWithBytes:key->data length:key->len encoding:NSUTF8StringEncoding]; |
| 59 [allowedItems addObject:s]; |
67 [allowedItems addObject:s]; |
| 60 } |
68 } |
| 61 [allowedItems addObject: NSToolbarFlexibleSpaceItemIdentifier]; |
69 [allowedItems addObject: NSToolbarFlexibleSpaceItemIdentifier]; |
| 62 [allowedItems addObject: NSToolbarSpaceItemIdentifier]; |
70 [allowedItems addObject: NSToolbarSpaceItemIdentifier]; |
| 63 |
71 |
| 64 CxList *tbitems[3]; |
72 // UI_TOOLBAR_LEFT = 0, |
| 65 tbitems[0] = uic_get_toolbar_defaults(UI_TOOLBAR_LEFT); |
73 // UI_TOOLBAR_CENTER, |
| 66 tbitems[1] = uic_get_toolbar_defaults(UI_TOOLBAR_CENTER); |
74 // UI_TOOLBAR_RIGHT, |
| 67 tbitems[2] = uic_get_toolbar_defaults(UI_TOOLBAR_RIGHT); |
75 // UI_TOOLBAR_SIDEBAR_LEFT, |
| 68 for(int t=0;t<3;t++) { |
76 // UI_TOOLBAR_SIDEBAR_RIGHT, |
| 69 CxIterator iter = cxListIterator(tbitems[t]); |
77 // UI_TOOLBAR_RIGHTPANEL_LEFT, |
| |
78 // UI_TOOLBAR_RIGHTPANEL_CENTER, |
| |
79 // UI_TOOLBAR_RIGHTPANEL_RIGHT |
| |
80 CxList *tbitems[8]; |
| |
81 for(int i=0;i<8;i++) { |
| |
82 tbitems[i] = uic_get_toolbar_defaults(i); |
| |
83 } |
| |
84 |
| |
85 if(window.sidebar) { |
| |
86 CxIterator iter = cxListIterator(tbitems[UI_TOOLBAR_SIDEBAR_LEFT]); |
| 70 cx_foreach(char *, name, iter) { |
87 cx_foreach(char *, name, iter) { |
| 71 NSString *s = [[NSString alloc] initWithUTF8String:name]; |
88 NSString *s = [[NSString alloc] initWithUTF8String:name]; |
| 72 [defaultItems addObject:s]; |
89 [defaultItems addObject:s]; |
| 73 } |
90 } |
| 74 } |
91 |
| |
92 CxList *sidebarRight = tbitems[UI_TOOLBAR_SIDEBAR_RIGHT]; |
| |
93 if(cxListSize(sidebarRight) > 0) { |
| |
94 [defaultItems addObject:NSToolbarFlexibleSpaceItemIdentifier]; |
| |
95 iter = cxListIterator(sidebarRight); |
| |
96 cx_foreach(char *, name, iter) { |
| |
97 NSString *s = [[NSString alloc] initWithUTF8String:name]; |
| |
98 [defaultItems addObject:s]; |
| |
99 } |
| |
100 } |
| |
101 |
| |
102 [defaultItems addObject:@"sidebar_separator"]; |
| |
103 } |
| |
104 |
| |
105 int start_pos = UI_TOOLBAR_LEFT; |
| |
106 for(int x=0;x<2;x++) { |
| |
107 for(int t=start_pos;t<start_pos+3;t++) { |
| |
108 CxIterator iter = cxListIterator(tbitems[t]); |
| |
109 cx_foreach(char *, name, iter) { |
| |
110 NSString *s = [[NSString alloc] initWithUTF8String:name]; |
| |
111 [defaultItems addObject:s]; |
| |
112 } |
| |
113 if(t < start_pos+2 && cxListSize(tbitems[t+1]) > 0) { |
| |
114 [defaultItems addObject:NSToolbarFlexibleSpaceItemIdentifier]; |
| |
115 } |
| |
116 } |
| |
117 |
| |
118 if(x == 0 && window.rightPanel) { |
| |
119 [defaultItems addObject:@"splitview_separator"]; |
| |
120 } |
| |
121 start_pos = UI_TOOLBAR_RIGHTPANEL_LEFT; |
| |
122 } |
| |
123 |
| 75 |
124 |
| 76 [self setDelegate:self]; |
125 [self setDelegate:self]; |
| 77 [self setAllowsUserCustomization:YES]; |
126 [self setAllowsUserCustomization:YES]; |
| 78 return self; |
127 return self; |
| 79 } |
128 } |
| 92 itemForItemIdentifier:(NSString *)itemIdentifier |
141 itemForItemIdentifier:(NSString *)itemIdentifier |
| 93 willBeInsertedIntoToolbar:(BOOL)flag { |
142 willBeInsertedIntoToolbar:(BOOL)flag { |
| 94 CxMap *items = uic_get_toolbar_items(); |
143 CxMap *items = uic_get_toolbar_items(); |
| 95 UiToolbarItemI *item = cxMapGet(items, itemIdentifier.UTF8String); |
144 UiToolbarItemI *item = cxMapGet(items, itemIdentifier.UTF8String); |
| 96 if(!item) { |
145 if(!item) { |
| |
146 if([itemIdentifier isEqualToString:@"sidebar_separator"]) { |
| |
147 NSTrackingSeparatorToolbarItem *sep = [NSTrackingSeparatorToolbarItem trackingSeparatorToolbarItemWithIdentifier:itemIdentifier |
| |
148 splitView:_window.splitview |
| |
149 dividerIndex:0]; |
| |
150 return sep; |
| |
151 } else if([itemIdentifier isEqualToString:@"splitview_separator"]) { |
| |
152 int dividerIndex = _window.sidebar != nil ? 1 : 0; |
| |
153 NSTrackingSeparatorToolbarItem *sep = [NSTrackingSeparatorToolbarItem trackingSeparatorToolbarItemWithIdentifier:itemIdentifier |
| |
154 splitView:_window.splitview |
| |
155 dividerIndex:dividerIndex]; |
| |
156 return sep; |
| |
157 } |
| 97 return nil; |
158 return nil; |
| 98 } |
159 } |
| 99 |
160 |
| 100 switch(item->type) { |
161 switch(item->type) { |
| 101 default: return nil; |
162 default: return nil; |