ui/cocoa/button.m

changeset 457
3a825867cfe7
parent 454
57a2c6c04966
child 562
88ed463e5433
equal deleted inserted replaced
456:6712b08e4f74 457:3a825867cfe7
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 }

mercurial