| 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 } |