/* Gets the list of the children of the toolbar */ Eina_List *_etk_toolbar_children_get(Etk_Container *container) { Etk_Toolbar *toolbar; if (!(toolbar = ETK_TOOLBAR(container))) return NULL; return etk_container_children_get(ETK_CONTAINER(toolbar->box)); }
/* Removes the child from the toolbar */ void _etk_toolbar_child_remove(Etk_Container *container, Etk_Widget *widget) { Etk_Toolbar *toolbar; if (!(toolbar = ETK_TOOLBAR(container)) || !widget) return; etk_container_remove(widget); }
/* Adds a child to the toolbar */ void _etk_toolbar_child_add(Etk_Container *container, Etk_Widget *widget) { Etk_Toolbar *toolbar; if (!(toolbar = ETK_TOOLBAR(container)) || !widget) return; etk_toolbar_append(toolbar, widget, ETK_BOX_START); }
/* Calculates the ideal size of the toolbar */ static void _etk_toolbar_size_request(Etk_Widget *widget, Etk_Size *size) { Etk_Toolbar *toolbar; if (!(toolbar = ETK_TOOLBAR(widget)) || !size) return; etk_widget_size_request(ETK_WIDGET(toolbar->box), size); }
/* Resizes the toolbar to the allocated size */ static void _etk_toolbar_size_allocate(Etk_Widget *widget, Etk_Geometry geometry) { Etk_Toolbar *toolbar; Etk_Size size; if (!(toolbar = ETK_TOOLBAR(widget))) return; etk_widget_size_request(toolbar->box, &size); geometry.w = ETK_MAX(geometry.w, size.w); etk_widget_size_allocate(ETK_WIDGET(toolbar->box), geometry); }
/* Called when a widget is removed from the toolbar's box */ static Etk_Bool _etk_toolbar_child_removed_cb(Etk_Object *object, Etk_Widget *child, void *data) { Etk_Toolbar *toolbar; if (!(toolbar = ETK_TOOLBAR(data)) || !child) return ETK_TRUE; if (etk_widget_theme_parent_get(child) == ETK_WIDGET(toolbar)) etk_widget_theme_parent_set(child, NULL); etk_signal_emit(ETK_CONTAINER_CHILD_REMOVED_SIGNAL, ETK_OBJECT(toolbar), child); return ETK_TRUE; }
/* Gets the value of the property whose id is "property_id" */ static void _etk_toolbar_property_get(Etk_Object *object, int property_id, Etk_Property_Value *value) { Etk_Toolbar *toolbar; if (!(toolbar = ETK_TOOLBAR(object)) || !value) return; switch (property_id) { case ETK_TOOLBAR_ORIENTATION_PROPERTY: etk_property_value_int_set(value, toolbar->orientation); break; case ETK_TOOLBAR_STYLE_PROPERTY: etk_property_value_int_set(value, toolbar->style); break; case ETK_TOOLBAR_STOCK_SIZE_PROPERTY: etk_property_value_int_set(value, toolbar->stock_size); break; default: break; } }
void evolve_gui_placeholder_replace(Evolve_Widget *parent, Evolve_Widget *child, Etk_Widget *placeholder) { if (!parent || !parent->type || !child || !child->type || !placeholder) return; if (!strcmp(parent->type, "hbox") || !strcmp(parent->type, "vbox")) { int pos; Etk_Box_Group group; char *group_str; char pos_str[5]; Evolve_Widget_Property *prop; etk_box_child_position_get(ETK_BOX(parent->widget), placeholder, &group, &pos); group_str = evolve_widget_packing_property_to_str_convert("box", "group", group); prop = calloc(1, sizeof(Evolve_Widget_Property)); prop->name = strdup("group"); prop->value = group_str; prop->type = EVOLVE_WIDGET_PROP_INT; eina_hash_add(child->packing_props, "group", prop); prop = calloc(1, sizeof(Evolve_Widget_Property)); snprintf(pos_str, sizeof(pos_str), "%d", pos); prop->name = strdup("position"); prop->value = strdup(pos_str); prop->type = EVOLVE_WIDGET_PROP_INT; eina_hash_add(child->packing_props, "position", prop); } else if (!strcmp(parent->type, "toolbar")) { /* [TODO] [3] We are accessing the toolbar's internals, better way? */ int pos; char pos_str[5]; Evolve_Widget_Property *prop; etk_box_child_position_get(ETK_BOX(ETK_TOOLBAR(parent->widget)->box), placeholder, NULL, &pos); prop = calloc(1, sizeof(Evolve_Widget_Property)); snprintf(pos_str, sizeof(pos_str), "%d", pos); prop->name = strdup("position"); prop->value = strdup(pos_str); prop->type = EVOLVE_WIDGET_PROP_INT; eina_hash_add(child->packing_props, "position", prop); } else if (!strcmp(parent->type, "table")) { int la, ra, ta, ba; char la_str[5], ra_str[5], ta_str[5], ba_str[5]; Evolve_Widget_Property *prop; etk_table_child_position_get(ETK_TABLE(parent->widget), placeholder, &la, &ra, &ta, &ba); prop = calloc(1, sizeof(Evolve_Widget_Property)); snprintf(la_str, sizeof(la_str), "%d", la); prop->name = strdup("left_attach"); prop->value = strdup(la_str); prop->type = EVOLVE_WIDGET_PROP_INT; eina_hash_add(child->packing_props, "left_attach", prop); prop = calloc(1, sizeof(Evolve_Widget_Property)); snprintf(ra_str, sizeof(ra_str), "%d", ra); prop->name = strdup("right_attach"); prop->value = strdup(ra_str); prop->type = EVOLVE_WIDGET_PROP_INT; eina_hash_add(child->packing_props, "right_attach", prop); prop = calloc(1, sizeof(Evolve_Widget_Property)); snprintf(ta_str, sizeof(ta_str), "%d", ta); prop->name = strdup("top_attach"); prop->value = strdup(ta_str); prop->type = EVOLVE_WIDGET_PROP_INT; eina_hash_add(child->packing_props, "top_attach", prop); prop = calloc(1, sizeof(Evolve_Widget_Property)); snprintf(ba_str, sizeof(ba_str), "%d", ba); prop->name = strdup("bottom_attach"); prop->value = strdup(ba_str); prop->type = EVOLVE_WIDGET_PROP_INT; eina_hash_add(child->packing_props, "bottom_attach", prop); } else if (!strcmp(parent->type, "notebook")) { int pos; char pos_str[5]; const char *label; Evolve_Widget_Property *prop; pos = etk_notebook_page_index_get(ETK_NOTEBOOK(parent->widget), placeholder); label = etk_notebook_page_tab_label_get(ETK_NOTEBOOK(parent->widget), pos); prop = calloc(1, sizeof(Evolve_Widget_Property)); snprintf(pos_str, sizeof(pos_str), "%d", pos); prop->name = strdup("position"); prop->value = strdup(pos_str); prop->type = EVOLVE_WIDGET_PROP_INT; eina_hash_add(child->packing_props, "position", prop); if (label) { prop = calloc(1, sizeof(Evolve_Widget_Property)); prop->name = strdup("tab_label"); prop->value = strdup(label); prop->type = EVOLVE_WIDGET_PROP_STR; eina_hash_add(child->packing_props, "tab_label", prop); } } etk_container_remove(placeholder); }
/* Called when a widget is added to the toolbar's box */ static Etk_Bool _etk_toolbar_child_added_cb(Etk_Object *object, Etk_Widget *child, void *data) { Etk_Toolbar *toolbar; if (!(toolbar = ETK_TOOLBAR(data)) || !child) return ETK_TRUE; /* Sets the style and the stock size if the new child is a tool-item */ if (ETK_IS_TOOL_ITEM(child)) { Etk_Button_Style button_style; switch (toolbar->style) { case ETK_TOOLBAR_ICON: button_style = ETK_BUTTON_ICON; break; case ETK_TOOLBAR_TEXT: button_style = ETK_BUTTON_TEXT; break; case ETK_TOOLBAR_BOTH_VERT: button_style = ETK_BUTTON_BOTH_VERT; break; case ETK_TOOLBAR_BOTH_HORIZ: button_style = ETK_BUTTON_BOTH_HORIZ; break; default: button_style = ETK_BUTTON_BOTH_VERT; break; } etk_button_style_set(ETK_BUTTON(child), button_style); etk_button_stock_size_set(ETK_BUTTON(child), toolbar->stock_size); } /* Reorientate the separators */ else if (toolbar->reorientating && (((toolbar->orientation == ETK_TOOLBAR_HORIZ) && ETK_IS_VSEPARATOR(child)) || ((toolbar->orientation == ETK_TOOLBAR_VERT) && ETK_IS_HSEPARATOR(child)))) { Etk_Bool visible; Etk_Box_Fill_Policy policy; Etk_Box_Group group; int pos, padding; visible = etk_widget_is_visible(child); etk_box_child_position_get(ETK_BOX(toolbar->box), child, &group, &pos); etk_box_child_packing_get(ETK_BOX(toolbar->box), child, &policy, &padding); etk_object_destroy(ETK_OBJECT(child)); if (toolbar->orientation == ETK_TOOLBAR_HORIZ) child = etk_vseparator_new(); else child = etk_hseparator_new(); etk_box_insert_at(ETK_BOX(toolbar->box), child, group, pos, policy, padding); if (visible) etk_widget_show(child); } if (etk_theme_group_exists(etk_widget_theme_file_get(ETK_WIDGET(toolbar)), etk_widget_theme_group_get(child), etk_widget_theme_group_get(ETK_WIDGET(toolbar)))) { etk_widget_theme_parent_set(child, ETK_WIDGET(toolbar)); } //etk_signal_emit(ETK_CONTAINER_CHILD_ADDED_SIGNAL, ETK_OBJECT(toolbar), child); return ETK_TRUE; }