ui/cocoa/Toolbar.m

changeset 113
dde28a806552
parent 110
c00e968d018b
equal deleted inserted replaced
112:c3f2f16fa4b8 113:dde28a806552
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;

mercurial