/** * @brief Sets the label of the frame * @param frame a frame * @param label the label to set */ void etk_frame_label_set(Etk_Frame *frame, const char *label) { if (!frame) return; if (label != frame->label) { free(frame->label); frame->label = label ? strdup(label) : NULL; } if (!frame->label || frame->label[0] == '\0') { etk_widget_theme_part_text_set(ETK_WIDGET(frame), "etk.text.label", ""); etk_widget_theme_signal_emit(ETK_WIDGET(frame), "etk,action,hide,label", ETK_TRUE); } else { etk_widget_theme_part_text_set(ETK_WIDGET(frame), "etk.text.label", frame->label); etk_widget_theme_signal_emit(ETK_WIDGET(frame), "etk,action,show,label", ETK_TRUE); } if (label != frame->label) etk_object_notify(ETK_OBJECT(frame), "label"); }
/* Menu_Item_Ckeck: Initializes the check menu item */ static void _etk_menu_item_check_constructor(Etk_Menu_Item_Check *check_item) { Etk_Menu_Item *menu_item; if (!(menu_item = ETK_MENU_ITEM(check_item))) return; check_item->active = ETK_FALSE; check_item->toggled_handler = _etk_menu_item_check_toggled_handler; check_item->active_set = _etk_menu_item_check_active_set; menu_item->left_widget = etk_widget_new(ETK_WIDGET_TYPE, "theme-group", ETK_IS_MENU_ITEM_RADIO(check_item) ? "radiobox" : "checkbox", "theme-parent", check_item, "pass-mouse-events", ETK_TRUE, "visible", ETK_TRUE, NULL); etk_widget_parent_set(menu_item->left_widget, ETK_WIDGET(menu_item)); etk_widget_swallow_widget(ETK_WIDGET(menu_item), "etk.swallow.left_widget", menu_item->left_widget); etk_widget_theme_signal_emit(ETK_WIDGET(menu_item), "etk,action,show,left_widget", ETK_TRUE); if (check_item->active) etk_widget_theme_signal_emit(menu_item->left_widget, "etk,state,on", ETK_FALSE); else etk_widget_theme_signal_emit(menu_item->left_widget, "etk,state,off", ETK_FALSE); etk_signal_connect_by_code(ETK_WIDGET_REALIZED_SIGNAL, ETK_OBJECT(menu_item->left_widget), ETK_CALLBACK(_etk_menu_item_check_box_realized_cb), menu_item); etk_signal_connect_by_code(ETK_MENU_ITEM_ACTIVATED_SIGNAL, ETK_OBJECT(menu_item), ETK_CALLBACK(_etk_menu_item_check_activated_cb), menu_item); }
/** * @brief Sets the image of the menu-item. The image will be displayed on the left of the label * @param image_item an image menu-item * @param image the image to set (NULL to remove the image) */ void etk_menu_item_image_set(Etk_Menu_Item_Image *image_item, Etk_Image *image) { Etk_Menu_Item *menu_item; Etk_Widget *image_widget; if (!(menu_item = ETK_MENU_ITEM(image_item))) return; if (menu_item->left_widget) { etk_widget_parent_set(menu_item->left_widget, NULL); menu_item->left_widget = NULL; } if ((image_widget = ETK_WIDGET(image))) { menu_item->left_widget = image_widget; etk_widget_parent_set(menu_item->left_widget, ETK_WIDGET(menu_item)); etk_widget_pass_mouse_events_set(menu_item->left_widget, ETK_TRUE); etk_widget_swallow_widget(ETK_WIDGET(menu_item), "etk.swallow.left_widget", image_widget); etk_widget_theme_signal_emit(ETK_WIDGET(menu_item), "etk,action,show,left_widget", ETK_TRUE); } else etk_widget_theme_signal_emit(ETK_WIDGET(menu_item), "etk,action,hide,left_widget", ETK_TRUE); etk_widget_size_recalc_queue(ETK_WIDGET(menu_item)); }
/** * @brief Sets the submenu of the menu-item: the submenu will be popped up when the menu-item is selected * @param menu_item a menu-item * @param submenu the submenu to attach to the menu-item */ void etk_menu_item_submenu_set(Etk_Menu_Item *menu_item, Etk_Menu *submenu) { if (!menu_item || menu_item->submenu == submenu) return; if (menu_item->submenu) { menu_item->submenu->parent_item = NULL; etk_object_notify(ETK_OBJECT(menu_item->submenu), "parent-item"); } menu_item->submenu = submenu; if (menu_item->submenu) { menu_item->submenu->parent_item = menu_item; etk_object_notify(ETK_OBJECT(menu_item->submenu), "parent-item"); } if (menu_item->submenu) etk_widget_theme_signal_emit(ETK_WIDGET(menu_item), "etk,action,show,arrow", ETK_TRUE); else etk_widget_theme_signal_emit(ETK_WIDGET(menu_item), "etk,action,hide,arrow", ETK_TRUE); etk_widget_size_recalc_queue(ETK_WIDGET(menu_item)); etk_object_notify(ETK_OBJECT(menu_item), "submenu"); }
/* Default handler for the "unselected" signal */ static Etk_Bool _etk_menu_item_unselected_handler(Etk_Menu_Item *menu_item) { if (!menu_item) return ETK_TRUE; etk_widget_theme_signal_emit(ETK_WIDGET(menu_item), "etk,state,unselected", ETK_FALSE); etk_widget_theme_signal_emit(ETK_WIDGET(menu_item->left_widget), "etk,state,unselected", ETK_FALSE); return ETK_TRUE; }
/* Default handler for the "activated" signal */ static Etk_Bool _etk_menu_item_activated_handler(Etk_Menu_Item *menu_item) { if (!menu_item) return ETK_TRUE; /* TODO: rename signal */ etk_widget_theme_signal_emit(ETK_WIDGET(menu_item), "etk,state,activate", ETK_FALSE); etk_widget_theme_signal_emit(ETK_WIDGET(menu_item->left_widget), "etk,state,activate", ETK_FALSE); return ETK_TRUE; }
/* Default handler for the "toggled" signal */ static Etk_Bool _etk_menu_item_check_toggled_handler(Etk_Menu_Item_Check *check_item) { if (check_item && ETK_MENU_ITEM(check_item)->left_widget) { if (check_item->active) etk_widget_theme_signal_emit(ETK_MENU_ITEM(check_item)->left_widget, "etk,state,on", ETK_FALSE); else etk_widget_theme_signal_emit(ETK_MENU_ITEM(check_item)->left_widget, "etk,state,off", ETK_FALSE); } return ETK_TRUE; }
/** * @brief Sets whether the statusbar has a resize-grip. The resize-grip is a small grip at the right of the statusbar * that the user can use to resize the window * @param statusbar a statusbar * @param has_resize_grip if @a has_resize_grip is ETK_TRUE to make the statusbar have a resize-grip */ void etk_statusbar_has_resize_grip_set(Etk_Statusbar *statusbar, Etk_Bool has_resize_grip) { if (!statusbar || statusbar->has_resize_grip == has_resize_grip) return; statusbar->has_resize_grip = has_resize_grip; if (statusbar->has_resize_grip) etk_widget_theme_signal_emit(ETK_WIDGET(statusbar), "etk,action,show,resize_grip", ETK_TRUE); else etk_widget_theme_signal_emit(ETK_WIDGET(statusbar), "etk,action,hide,resize_grip", ETK_TRUE); etk_object_notify(ETK_OBJECT(statusbar), "has-resize-grip"); }
/* Called when the checkbox of the check item is realized */ static Etk_Bool _etk_menu_item_check_box_realized_cb(Etk_Object *object, void *data) { Etk_Menu_Item *menu_item; if (!(menu_item = ETK_MENU_ITEM(data)) || !menu_item->left_widget) return ETK_TRUE; if (ETK_MENU_ITEM_CHECK(menu_item)->active) etk_widget_theme_signal_emit(menu_item->left_widget, "etk,state,on", ETK_FALSE); else etk_widget_theme_signal_emit(menu_item->left_widget, "etk,state,off", ETK_FALSE); return ETK_TRUE; }
/* Called when the statusbar is realized */ static Etk_Bool _etk_statusbar_realized_cb(Etk_Object *object, void *data) { Etk_Statusbar *statusbar; Etk_Widget *statusbar_widget; if (!(statusbar = ETK_STATUSBAR(object))) return ETK_TRUE; statusbar_widget = ETK_WIDGET(statusbar); if (statusbar->has_resize_grip) etk_widget_theme_signal_emit(statusbar_widget, "etk,action,show,resize_grip", ETK_TRUE); else etk_widget_theme_signal_emit(statusbar_widget, "etk,action,hide,resize_grip", ETK_TRUE); _etk_statusbar_update(statusbar); if (statusbar_widget->theme_object) { edje_object_signal_callback_add(statusbar_widget->theme_object, "*", "etk.event.resize", _etk_statusbar_resize_grip_cb, object); } return ETK_TRUE; }