ui/gtk/button.c

branch
newapi
changeset 359
c51e58359db8
parent 350
70305d427f25
equal deleted inserted replaced
358:98b26a19cbeb 359:c51e58359db8
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);
173 ui_toggle_button_set, 182 ui_toggle_button_set,
174 varname, 183 varname,
175 value, 184 value,
176 (ui_toggled_func)ui_toggled_callback, 185 (ui_toggled_func)ui_toggled_callback,
177 onchange, 186 onchange,
178 onchangedata); 187 onchangedata,
188 (ui_toggled_func)ui_togglebutton_enable_state_callback,
189 enable_state
190 );
179 } 191 }
180 192
181 void ui_bind_togglebutton( 193 void ui_bind_togglebutton(
182 UiObject *obj, 194 UiObject *obj,
183 GtkWidget *widget, 195 GtkWidget *widget,
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);

mercurial