ui/cocoa/Toolbar.m

changeset 707
e9f63774b0e0
parent 687
d43b4fcd3d8c
child 708
0598e70c6489
equal deleted inserted replaced
706:2bdf00814cb8 707:e9f63774b0e0
109 return nil; 109 return nil;
110 } 110 }
111 111
112 @end 112 @end
113 113
114 @implementation UiToolbarToggleEventHandler
115
116 - (UiToolbarToggleEventHandler*)init {
117 return self;
118 }
119
120 - (void)handleEvent:(id)sender {
121 if(_callback == nil) {
122 return;
123 }
124
125 UiEvent event;
126 event.obj = _obj;
127 event.window = event.obj->window;
128 event.document = event.obj->ctx->document;
129 event.eventdata = NULL;
130 event.eventdatatype = 0;
131 event.intval = 0;
132 event.set = ui_get_setop();
133
134 if([sender isKindOfClass:[NSSegmentedControl class]]) {
135 NSSegmentedControl *seg = (NSSegmentedControl*)sender;
136 event.intval = [seg isSelectedForSegment:0];
137 }
138
139 _callback(&event, _userdata);
140 }
141
142 @end
143
114 NSToolbarItem* ui_nstoolbaritem_create_item(UiObject *obj, UiToolbarItem *item, NSString *identifier) { 144 NSToolbarItem* ui_nstoolbaritem_create_item(UiObject *obj, UiToolbarItem *item, NSString *identifier) {
115 NSToolbarItem *button = [[NSToolbarItem alloc] initWithItemIdentifier: identifier]; 145 NSToolbarItem *button = [[NSToolbarItem alloc] initWithItemIdentifier: identifier];
116 button.bordered = YES; 146 button.bordered = YES;
117 147
118 if(item->args.label) { 148 if(item->args.label) {
134 } 164 }
135 return button; 165 return button;
136 } 166 }
137 167
138 NSToolbarItem* ui_nstoolbaritem_create_toggle(UiObject *obj, UiToolbarToggleItem *item, NSString *identifier) { 168 NSToolbarItem* ui_nstoolbaritem_create_toggle(UiObject *obj, UiToolbarToggleItem *item, NSString *identifier) {
139 NSToolbarItem *tbItem = [[NSToolbarItem alloc] initWithItemIdentifier: identifier]; 169 UiToolbarToggleEventHandler *event = [[UiToolbarToggleEventHandler alloc]init];
170 event.obj = obj;
171 event.callback = item->args.onchange;
172 event.userdata = item->args.onchangedata;
173
174 NSToolbarItem *button = [[NSToolbarItem alloc] initWithItemIdentifier:identifier];
140 if(item->args.label) { 175 if(item->args.label) {
141 NSString *label = [[NSString alloc] initWithUTF8String:item->args.label]; 176 NSString *label = [[NSString alloc] initWithUTF8String:item->args.label];
142 [tbItem setLabel:label]; 177 button.paletteLabel = label;
143 } 178 button.label = label;
144 return tbItem; 179 }
145 } 180 objc_setAssociatedObject(button, "eventdata", event, OBJC_ASSOCIATION_RETAIN);
181
182 NSSegmentedControl *seg;
183 if(!item->args.icon) {
184 NSArray *labels = @[[[NSString alloc] initWithUTF8String:item->args.label]];
185 seg = [NSSegmentedControl segmentedControlWithLabels:labels trackingMode:NSSegmentSwitchTrackingSelectAny target:event action:@selector(handleEvent:)];
186 button.view = seg;
187 } else {
188 NSArray *images = @[ui_cocoa_named_icon(item->args.icon)];
189 seg = [NSSegmentedControl segmentedControlWithImages:images trackingMode:NSSegmentSwitchTrackingSelectAny target:event action:@selector(handleEvent:)];
190 }
191 button.view = seg;
192
193 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, NULL, item->args.varname, UI_VAR_INTEGER);
194 if(var) {
195 event.var = var;
196 UiInteger *i = var->value;
197 if(i->get) {
198 if(ui_get(i) != 0) {
199 [seg setEnabled:YES forSegment:0];
200 }
201
202 }
203 i->obj = (__bridge void*)seg;
204 i->get = ui_toolbar_seg_toggleitem_get;
205 i->set = ui_toolbar_seg_toggleitem_set;
206 }
207
208 return button;
209 }
210
211 int64_t ui_toolbar_seg_toggleitem_get(UiInteger *i) {
212 NSSegmentedControl *seg = (__bridge NSSegmentedControl*)i->obj;
213 i->value = [seg isSelectedForSegment:0];
214 return i->value;
215 }
216
217 void ui_toolbar_seg_toggleitem_set(UiInteger *i, int64_t value) {
218 NSSegmentedControl *seg = (__bridge NSSegmentedControl*)i->obj;
219 i->value = value;
220 [seg setSelected:value != 0 forSegment:0];
221 }

mercurial