ui/gtk/button.c

changeset 1112
9250601f9d9a
parent 1096
655349c3021e
equal deleted inserted replaced
1111:3910be3b2ac6 1112:9250601f9d9a
186 e.document = event->obj->ctx->document; 186 e.document = event->obj->ctx->document;
187 e.eventdata = NULL; 187 e.eventdata = NULL;
188 e.eventdatatype = 0; 188 e.eventdatatype = 0;
189 e.intval = gtk_toggle_button_get_active(widget); 189 e.intval = gtk_toggle_button_get_active(widget);
190 e.set = ui_get_setop(); 190 e.set = ui_get_setop();
191 event->callback(&e, event->userdata); 191
192 if(event->callback) {
193 event->callback(&e, event->userdata);
194 }
195
196 if(event->action) {
197 uic_action_callback(&e, event->action);
198 }
192 } 199 }
193 200
194 static void ui_togglebutton_enable_state_callback(GtkToggleButton *widget, UiEventData *event) { 201 static void ui_togglebutton_enable_state_callback(GtkToggleButton *widget, UiEventData *event) {
195 if(gtk_toggle_button_get_active(widget)) { 202 if(gtk_toggle_button_get_active(widget)) {
196 ui_set_state(event->obj->ctx, event->value); 203 ui_set_state(event->obj->ctx, event->value);
207 const char *tooltip, 214 const char *tooltip,
208 const char *varname, 215 const char *varname,
209 UiInteger *value, 216 UiInteger *value,
210 ui_callback onchange, 217 ui_callback onchange,
211 void *onchangedata, 218 void *onchangedata,
219 const char *action,
212 int enable_state) 220 int enable_state)
213 { 221 {
214 if(label) { 222 if(label) {
215 gtk_button_set_label(GTK_BUTTON(togglebutton), label); 223 gtk_button_set_label(GTK_BUTTON(togglebutton), label);
216 } 224 }
217 ui_button_set_icon_name(togglebutton, icon); 225 ui_button_set_icon_name(togglebutton, icon);
218 if(tooltip) { 226 if(tooltip) {
219 gtk_widget_set_tooltip_text(togglebutton, tooltip); 227 gtk_widget_set_tooltip_text(togglebutton, tooltip);
228 }
229
230 if(action) {
231 uic_bind_action(obj->ctx, action, togglebutton, (ui_enablefunc)ui_set_enabled);
232 UiAction *ui_action = uic_resolve_action(obj->ctx, action);
233 if(!ui_action) {
234 ui_set_enabled(togglebutton, FALSE);
235 }
220 } 236 }
221 237
222 ui_bind_togglebutton( 238 ui_bind_togglebutton(
223 obj, 239 obj,
224 togglebutton, 240 togglebutton,
227 varname, 243 varname,
228 value, 244 value,
229 (ui_toggled_func)ui_toggled_callback, 245 (ui_toggled_func)ui_toggled_callback,
230 onchange, 246 onchange,
231 onchangedata, 247 onchangedata,
248 action,
232 (ui_toggled_func)ui_togglebutton_enable_state_callback, 249 (ui_toggled_func)ui_togglebutton_enable_state_callback,
233 enable_state 250 enable_state
234 ); 251 );
235 } 252 }
236 253
242 const char *varname, 259 const char *varname,
243 UiInteger *value, 260 UiInteger *value,
244 void (*toggled_callback)(void*, void*), 261 void (*toggled_callback)(void*, void*),
245 ui_callback onchange, 262 ui_callback onchange,
246 void *onchangedata, 263 void *onchangedata,
264 const char *action,
247 void (*enable_state_func)(void*, void*), 265 void (*enable_state_func)(void*, void*),
248 int enable_state) 266 int enable_state)
249 { 267 {
250 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, value, varname, UI_VAR_INTEGER); 268 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, value, varname, UI_VAR_INTEGER);
251 if (var) { 269 if (var) {
278 if(onchange) { 296 if(onchange) {
279 UiEventData *event = malloc(sizeof(UiEventData)); 297 UiEventData *event = malloc(sizeof(UiEventData));
280 event->obj = obj; 298 event->obj = obj;
281 event->userdata = onchangedata; 299 event->userdata = onchangedata;
282 event->callback = onchange; 300 event->callback = onchange;
301 event->action = action ? strdup(action) : NULL,
283 event->value = 0; 302 event->value = 0;
284 event->customdata = NULL; 303 event->customdata = NULL;
285 event->customint = 0; 304 event->customint = 0;
286 305
287 g_signal_connect( 306 g_signal_connect(
290 G_CALLBACK(toggled_callback), 309 G_CALLBACK(toggled_callback),
291 event); 310 event);
292 g_signal_connect( 311 g_signal_connect(
293 widget, 312 widget,
294 "destroy", 313 "destroy",
295 G_CALLBACK(ui_destroy_userdata), 314 G_CALLBACK(ui_destroy_eventdata),
296 event); 315 event);
297 } 316 }
298 317
299 if(enable_state > 0) { 318 if(enable_state > 0) {
300 UiEventData *event = malloc(sizeof(UiEventData)); 319 UiEventData *event = malloc(sizeof(UiEventData));
301 event->obj = obj; 320 event->obj = obj;
302 event->userdata = NULL; 321 event->userdata = NULL;
303 event->callback = NULL; 322 event->callback = NULL;
327 args->tooltip, 346 args->tooltip,
328 args->varname, 347 args->varname,
329 args->value, 348 args->value,
330 args->onchange, 349 args->onchange,
331 args->onchangedata, 350 args->onchangedata,
351 args->action,
332 args->enable_state); 352 args->enable_state);
333 ui_set_name_and_style(widget, args->name, args->style_class); 353 ui_set_name_and_style(widget, args->name, args->style_class);
334 ui_set_widget_states(obj->ctx, widget, args->states); 354 ui_set_widget_states(obj->ctx, widget, args->states);
335 355
336 UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end; 356 UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
389 args->varname, 409 args->varname,
390 args->value, 410 args->value,
391 (ui_toggled_func)ui_checkbox_callback, 411 (ui_toggled_func)ui_checkbox_callback,
392 args->onchange, 412 args->onchange,
393 args->onchangedata, 413 args->onchangedata,
414 args->action,
394 (ui_toggled_func)ui_checkbox_enable_state, 415 (ui_toggled_func)ui_checkbox_enable_state,
395 args->enable_state); 416 args->enable_state);
396 417
397 ui_set_name_and_style(widget, args->name, args->style_class); 418 ui_set_name_and_style(widget, args->name, args->style_class);
398 ui_set_widget_states(obj->ctx, widget, args->states); 419 ui_set_widget_states(obj->ctx, widget, args->states);

mercurial