149 e.eventdata = NULL; |
149 e.eventdata = NULL; |
150 e.intval = gtk_toggle_button_get_active(widget); |
150 e.intval = gtk_toggle_button_get_active(widget); |
151 event->callback(&e, event->userdata); |
151 event->callback(&e, event->userdata); |
152 } |
152 } |
153 |
153 |
|
154 static void ui_togglebutton_enable_state_callback(GtkToggleButton *widget, UiEventData *event) { |
|
155 if(gtk_toggle_button_get_active(widget)) { |
|
156 ui_set_group(event->obj->ctx, event->value); |
|
157 } else { |
|
158 ui_unset_group(event->obj->ctx, event->value); |
|
159 } |
|
160 } |
|
161 |
154 void ui_setup_togglebutton( |
162 void ui_setup_togglebutton( |
155 UiObject *obj, |
163 UiObject *obj, |
156 GtkWidget *togglebutton, |
164 GtkWidget *togglebutton, |
157 const char *label, |
165 const char *label, |
158 const char *icon, |
166 const char *icon, |
159 const char *varname, |
167 const char *varname, |
160 UiInteger *value, |
168 UiInteger *value, |
161 ui_callback onchange, |
169 ui_callback onchange, |
162 void *onchangedata) |
170 void *onchangedata, |
|
171 int enable_state) |
163 { |
172 { |
164 if(label) { |
173 if(label) { |
165 gtk_button_set_label(GTK_BUTTON(togglebutton), label); |
174 gtk_button_set_label(GTK_BUTTON(togglebutton), label); |
166 } |
175 } |
167 ui_button_set_icon_name(togglebutton, icon); |
176 ui_button_set_icon_name(togglebutton, icon); |
185 void (*setfunc)(UiInteger*, int64_t), |
197 void (*setfunc)(UiInteger*, int64_t), |
186 const char *varname, |
198 const char *varname, |
187 UiInteger *value, |
199 UiInteger *value, |
188 void (*toggled_callback)(void*, void*), |
200 void (*toggled_callback)(void*, void*), |
189 ui_callback onchange, |
201 ui_callback onchange, |
190 void *onchangedata) |
202 void *onchangedata, |
|
203 void (*enable_state_func)(void*, void*), |
|
204 int enable_state) |
191 { |
205 { |
192 UiObject* current = uic_current_obj(obj); |
206 UiObject* current = uic_current_obj(obj); |
193 UiVar* var = uic_widget_var(obj->ctx, current->ctx, value, varname, UI_VAR_INTEGER); |
207 UiVar* var = uic_widget_var(obj->ctx, current->ctx, value, varname, UI_VAR_INTEGER); |
194 if (var) { |
208 if (var) { |
195 UiInteger* value = (UiInteger*)var->value; |
209 UiInteger* value = (UiInteger*)var->value; |
233 widget, |
247 widget, |
234 "destroy", |
248 "destroy", |
235 G_CALLBACK(ui_destroy_userdata), |
249 G_CALLBACK(ui_destroy_userdata), |
236 event); |
250 event); |
237 } |
251 } |
|
252 |
|
253 if(enable_state > 0) { |
|
254 UiEventData *event = malloc(sizeof(UiEventData)); |
|
255 event->obj = obj; |
|
256 event->userdata = NULL; |
|
257 event->callback = NULL; |
|
258 event->value = enable_state; |
|
259 event->customdata = NULL; |
|
260 |
|
261 g_signal_connect( |
|
262 widget, |
|
263 "toggled", |
|
264 G_CALLBACK(enable_state_func), |
|
265 event); |
|
266 g_signal_connect( |
|
267 widget, |
|
268 "destroy", |
|
269 G_CALLBACK(ui_destroy_userdata), |
|
270 event); |
|
271 } |
238 } |
272 } |
239 |
273 |
240 static UIWIDGET togglebutton_create(UiObject *obj, GtkWidget *widget, UiToggleArgs args) { |
274 static UIWIDGET togglebutton_create(UiObject *obj, GtkWidget *widget, UiToggleArgs args) { |
241 UiObject* current = uic_current_obj(obj); |
275 UiObject* current = uic_current_obj(obj); |
242 |
276 |
243 ui_setup_togglebutton(current, widget, args.label, args.icon, args.varname, args.value, args.onchange, args.onchangedata); |
277 ui_setup_togglebutton( |
|
278 current, |
|
279 widget, |
|
280 args.label, |
|
281 args.icon, |
|
282 args.varname, |
|
283 args.value, |
|
284 args.onchange, |
|
285 args.onchangedata, |
|
286 args.enable_group); |
244 ui_set_name_and_style(widget, args.name, args.style_class); |
287 ui_set_name_and_style(widget, args.name, args.style_class); |
245 ui_set_widget_groups(obj->ctx, widget, args.groups); |
288 ui_set_widget_groups(obj->ctx, widget, args.groups); |
246 |
289 |
247 UI_APPLY_LAYOUT1(current, args); |
290 UI_APPLY_LAYOUT1(current, args); |
248 current->container->add(current->container, widget, FALSE); |
291 current->container->add(current->container, widget, FALSE); |
274 e.window = event->obj->window; |
317 e.window = event->obj->window; |
275 e.document = event->obj->ctx->document; |
318 e.document = event->obj->ctx->document; |
276 e.eventdata = NULL; |
319 e.eventdata = NULL; |
277 e.intval = gtk_check_button_get_active(widget); |
320 e.intval = gtk_check_button_get_active(widget); |
278 event->callback(&e, event->userdata); |
321 event->callback(&e, event->userdata); |
|
322 } |
|
323 |
|
324 static void ui_checkbox_enable_state(GtkCheckButton *widget, UiEventData *event) { |
|
325 if(gtk_check_button_get_active(widget)) { |
|
326 ui_set_group(event->obj->ctx, event->value); |
|
327 } else { |
|
328 ui_unset_group(event->obj->ctx, event->value); |
|
329 } |
279 } |
330 } |
280 |
331 |
281 UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs args) { |
332 UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs args) { |
282 UiObject* current = uic_current_obj(obj); |
333 UiObject* current = uic_current_obj(obj); |
283 |
334 |
289 ui_check_button_set, |
340 ui_check_button_set, |
290 args.varname, |
341 args.varname, |
291 args.value, |
342 args.value, |
292 (ui_toggled_func)ui_checkbox_callback, |
343 (ui_toggled_func)ui_checkbox_callback, |
293 args.onchange, |
344 args.onchange, |
294 args.onchangedata); |
345 args.onchangedata, |
|
346 (ui_toggled_func)ui_checkbox_enable_state, |
|
347 args.enable_group); |
295 |
348 |
296 ui_set_name_and_style(widget, args.name, args.style_class); |
349 ui_set_name_and_style(widget, args.name, args.style_class); |
297 ui_set_widget_groups(obj->ctx, widget, args.groups); |
350 ui_set_widget_groups(obj->ctx, widget, args.groups); |
298 |
351 |
299 UI_APPLY_LAYOUT1(current, args); |
352 UI_APPLY_LAYOUT1(current, args); |