49 UiLayout layout = UI_INIT_LAYOUT(args); |
49 UiLayout layout = UI_INIT_LAYOUT(args); |
50 ui_container_add(obj, button, &layout, FALSE); |
50 ui_container_add(obj, button, &layout, FALSE); |
51 |
51 |
52 return (__bridge void*)button; |
52 return (__bridge void*)button; |
53 } |
53 } |
|
54 |
|
55 |
|
56 static void togglebutton_eventdata(id button, UiVar *var, void **eventdata, int *value) { |
|
57 NSButton *btn = (NSButton*)button; |
|
58 NSControlStateValue state = btn.state; |
|
59 *value = (int)state; |
|
60 } |
|
61 |
|
62 UIWIDGET togglebutton_create(UiObject* obj, UiToggleArgs args, enum NSButtonType type) { |
|
63 NSButton *button = [[NSButton alloc] init]; |
|
64 [button setButtonType:type]; |
|
65 //[button setAllowsMixedState:YES]; |
|
66 |
|
67 if(args.label) { |
|
68 NSString *label = [[NSString alloc] initWithUTF8String:args.label]; |
|
69 button.title = label; |
|
70 } |
|
71 |
|
72 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER); |
|
73 if(var) { |
|
74 UiInteger *i = var->value; |
|
75 i->obj = (__bridge void*)button; |
|
76 i->get = ui_togglebutton_get; |
|
77 i->set = ui_togglebutton_set; |
|
78 } |
|
79 |
|
80 if(args.onchange) { |
|
81 EventData *event = [[EventData alloc] init:args.onchange userdata:args.onchangedata]; |
|
82 event.get_eventdata = togglebutton_eventdata; |
|
83 event.obj = obj; |
|
84 event.var = var; |
|
85 event.vartype = UI_VAR_INTEGER; |
|
86 button.target = event; |
|
87 button.action = @selector(handleEventWithEventData:); |
|
88 objc_setAssociatedObject(button, "eventdata", event, OBJC_ASSOCIATION_RETAIN); |
|
89 } |
|
90 |
|
91 UiLayout layout = UI_INIT_LAYOUT(args); |
|
92 ui_container_add(obj, button, &layout, FALSE); |
|
93 |
|
94 return (__bridge void*)button; |
|
95 } |
|
96 |
|
97 int64_t ui_togglebutton_get(UiInteger *i) { |
|
98 NSButton *button = (__bridge NSButton*)i->obj; |
|
99 NSControlStateValue state = button.state; |
|
100 i->value = (int64_t)state; |
|
101 return (int64_t)state; |
|
102 } |
|
103 |
|
104 void ui_togglebutton_set(UiInteger *i, int64_t value) { |
|
105 NSButton *button = (__bridge NSButton*)i->obj; |
|
106 NSControlStateValue state; |
|
107 switch(value) { |
|
108 case 0: state = NSControlStateValueOff; break; |
|
109 case 1: state = NSControlStateValueOff; break; |
|
110 default: state = NSControlStateValueMixed; |
|
111 } |
|
112 i->value = (int64_t)state; |
|
113 button.state = state; |
|
114 } |
|
115 |
|
116 UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs args) { |
|
117 return togglebutton_create(obj, args, NSButtonTypePushOnPushOff); |
|
118 } |
|
119 |
|
120 UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs args) { |
|
121 return togglebutton_create(obj, args, NSButtonTypeSwitch); |
|
122 } |
|
123 |
|
124 static void switch_eventdata(id button, UiVar *var, void **eventdata, int *value) { |
|
125 NSSwitch *btn = (NSSwitch*)button; |
|
126 NSControlStateValue state = btn.state; |
|
127 *value = (int)state; |
|
128 } |
|
129 |
|
130 UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs args) { |
|
131 NSSwitch *button = [[NSSwitch alloc] init]; |
|
132 |
|
133 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER); |
|
134 if(var) { |
|
135 UiInteger *i = var->value; |
|
136 i->obj = (__bridge void*)button; |
|
137 i->get = ui_switch_get; |
|
138 i->set = ui_switch_set; |
|
139 } |
|
140 |
|
141 if(args.onchange) { |
|
142 EventData *event = [[EventData alloc] init:args.onchange userdata:args.onchangedata]; |
|
143 event.get_eventdata = switch_eventdata; |
|
144 event.obj = obj; |
|
145 event.var = var; |
|
146 event.vartype = UI_VAR_INTEGER; |
|
147 button.target = event; |
|
148 button.action = @selector(handleEventWithEventData:); |
|
149 objc_setAssociatedObject(button, "eventdata", event, OBJC_ASSOCIATION_RETAIN); |
|
150 } |
|
151 |
|
152 UiLayout layout = UI_INIT_LAYOUT(args); |
|
153 ui_container_add(obj, button, &layout, FALSE); |
|
154 |
|
155 return (__bridge void*)button; |
|
156 } |
|
157 |
|
158 int64_t ui_switch_get(UiInteger *i) { |
|
159 NSSwitch *button = (__bridge NSSwitch*)i->obj; |
|
160 NSControlStateValue state = button.state; |
|
161 i->value = (int64_t)state; |
|
162 return (int64_t)state; |
|
163 } |
|
164 |
|
165 void ui_switch_set(UiInteger *i, int64_t value) { |
|
166 NSSwitch *button = (__bridge NSSwitch*)i->obj; |
|
167 NSControlStateValue state; |
|
168 switch(value) { |
|
169 case 0: state = NSControlStateValueOff; break; |
|
170 case 1: state = NSControlStateValueOff; break; |
|
171 default: state = NSControlStateValueMixed; |
|
172 } |
|
173 i->value = (int64_t)state; |
|
174 button.state = state; |
|
175 } |
|
176 |
|
177 static void radiobutton_eventdata(id button, UiVar *var, void **eventdata, int *value) { |
|
178 if(var) { |
|
179 printf("switch radiobutton\n"); |
|
180 } |
|
181 } |
|
182 |
|
183 UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs args) { |
|
184 NSButton *button = [[NSButton alloc] init]; |
|
185 [button setButtonType:NSButtonTypeRadio]; |
|
186 |
|
187 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER); |
|
188 NSMutableArray *buttons = nil; |
|
189 if(var) { |
|
190 UiInteger *i = var->value; |
|
191 buttons = (__bridge NSMutableArray*)i->obj; |
|
192 if(!buttons) { |
|
193 buttons = [[NSMutableArray alloc] init]; |
|
194 i->obj = (__bridge void*)buttons; |
|
195 i->get = ui_radiobuttons_get; |
|
196 i->set = ui_radiobuttons_set; |
|
197 } |
|
198 [buttons addObject:button]; |
|
199 objc_setAssociatedObject(button, "radiogroup", buttons, OBJC_ASSOCIATION_RETAIN); |
|
200 } |
|
201 |
|
202 if(args.onchange || var) { |
|
203 EventData *event = [[EventData alloc] init:args.onchange userdata:args.onchangedata]; |
|
204 event.get_eventdata = radiobutton_eventdata; |
|
205 event.obj = obj; |
|
206 event.var = var; |
|
207 event.vartype = UI_VAR_INTEGER; |
|
208 button.target = event; |
|
209 |
|
210 |
|
211 button.action = @selector(handleEventWithEventData:); |
|
212 |
|
213 objc_setAssociatedObject(button, "eventdata", event, OBJC_ASSOCIATION_RETAIN); |
|
214 } |
|
215 |
|
216 UiLayout layout = UI_INIT_LAYOUT(args); |
|
217 ui_container_add(obj, button, &layout, FALSE); |
|
218 |
|
219 return (__bridge void*)button; |
|
220 } |
|
221 |
|
222 int64_t ui_radiobuttons_get(UiInteger *i) { |
|
223 return 0; |
|
224 } |
|
225 |
|
226 void ui_radiobuttons_set(UiInteger *i, int64_t value) { |
|
227 |
|
228 } |