#include #include #include Evas_Object *_mainwin; Evas_Object *_egraph; Eina_List *_vertice_list = NULL; Eina_List *_group_list = NULL; static void _cb_add_edge(void *data, Evas_Object *obj, void *event_info) { Egraph_Vertice *a, *b; int ran, count; char buf[64]; if (!_egraph) return; count = eina_list_count(_vertice_list); if (count == 0) { a = egraph_vertice_add(_egraph, "first", NULL); _vertice_list = eina_list_append(_vertice_list, a); } else { ran = random() % count; a = eina_list_nth(_vertice_list, ran); } b = egraph_vertice_add(_egraph, NULL, NULL); snprintf(buf, sizeof(buf), "%d", b->id); egraph_vertice_rename(_egraph, b, buf); _vertice_list = eina_list_append(_vertice_list, b); egraph_edge_add(_egraph, a, b, NULL); } static void _cb_add_50edges(void *data, Evas_Object *obj, void *event_info) { int i; if (!_egraph) return; for (i=0; i<50; i++) _cb_add_edge(data, obj, event_info); } static void _cb_add_500edges(void *data, Evas_Object *obj, void *event_info) { int i; if (!_egraph) return; for (i=0; i<500; i++) _cb_add_edge(data, obj, event_info); } static void _cb_del_edges(void *data, Evas_Object *obj, void *event_info) { Eina_List *l; Egraph_Vertice *v; if (!_egraph) return; egraph_clear(_egraph); _vertice_list = eina_list_free(_vertice_list); _group_list = eina_list_free(_group_list); } static void _cb_add_node(void *data, Evas_Object *obj, void *event_info) { Egraph_Vertice *v; char buf[64]; if (!_egraph) return; v = egraph_vertice_add(_egraph, NULL, NULL); snprintf(buf, sizeof(buf), "%d", v->id); egraph_vertice_rename(_egraph, v, buf); _vertice_list = eina_list_append(_vertice_list, v); } static void _cb_send_100blobs(void *data, Evas_Object *obj, void *event_info) { Egraph_Vertice *a, *b; int count, ran, i; count = eina_list_count(_vertice_list); if (!count) return; for (i=0; i<100; i++) { ran = random() % count; a = eina_list_nth(_vertice_list, ran); ran = random() % count; b = eina_list_nth(_vertice_list, ran); egraph_vertice_send_blob(_egraph, a, b, 5, 0xFF000000); } } static void _cb_add_10n_group(void *data, Evas_Object *obj, void *event_info) { Egraph_Vertice *group, *v; char buf[64]; int i; if (!_egraph) return; group = egraph_group_add(_egraph, NULL, NULL); snprintf(buf, sizeof(buf), "%d-group", group->id); egraph_vertice_rename(_egraph, group, buf); _group_list = eina_list_append(_group_list, group); for (i=0; i<10; i++) { v = egraph_vertice_add(_egraph, NULL, NULL); snprintf(buf, sizeof(buf), "%d-child(%d)", v->id, group->id); egraph_vertice_rename(_egraph, v, buf); egraph_group_vertice_attach(_egraph, group, v); _vertice_list = eina_list_append(_vertice_list, v); } } static void _cb_show_nodes(void *data, Evas_Object *obj, void *event_info) { egraph_display_vertices_set(_egraph, elm_check_state_get(obj)); } static void _cb_show_labels(void *data, Evas_Object *obj, void *event_info) { if (!_egraph) return; egraph_display_names_set(_egraph, elm_check_state_get(obj)); } static void _cb_show_edges(void *data, Evas_Object *obj, void *event_info) { if (!_egraph) return; egraph_display_edges_set(_egraph, elm_check_state_get(obj)); } static void _cb_use_animations(void *data, Evas_Object *obj, void *event_info) { if (!_egraph) return; egraph_use_animations_set(_egraph, elm_check_state_get(obj)); } static void _cb_do_improvements(void *data, Evas_Object *obj, void *event_info) { if (!_egraph) return; egraph_do_improvements_set(_egraph, elm_check_state_get(obj)); } static void _cb_use_theme_e(void *data, Evas_Object *obj, void *event_info) { if (!_egraph) return; egraph_theme_edges_set(_egraph, elm_check_state_get(obj)); } static void _cb_layout_changed(void *data, Evas_Object *obj, void *event_info) { Elm_Object_Item *it; char *selected; int layout; if (!_egraph) return; it = event_info; selected = elm_object_item_text_get(it); layout = EGRAPH_LAYOUT_DEFAULT; if (!strcmp(selected, "Kamada K.")) layout = EGRAPH_LAYOUT_KAMADAKAWAI; else if (!strcmp(selected, "GraphOpt")) layout = EGRAPH_LAYOUT_GRAPHOPT; else if (!strcmp(selected, "Fruchterman R.")) layout = EGRAPH_LAYOUT_FRUCHTERMANREINGOLD; egraph_layout_set(_egraph, layout); } static void _cb_on_done(void *data, Evas_Object *obj, void *event_info) { elm_exit(); } EAPI_MAIN int elm_main(int argc, char **argv) { Evas_Object *win, *bg, *egraph, *panes; Evas_Object *bx, *tb, *tb_it, *ck, *sc, *seg_it, *lb; Evas *evas; int retval = -1; win = elm_win_add(NULL, "panes", ELM_WIN_BASIC); evas = evas_object_evas_get(win); elm_win_title_set(win, "Egraph demo app"); evas_object_smart_callback_add(win, "delete,request", _cb_on_done, NULL); bg = elm_bg_add(win); elm_win_resize_object_add(win, bg); evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_color_set(bg, 0, 0, 0, 255); evas_object_show(bg); bx = elm_box_add(win); elm_box_horizontal_set(bx, EINA_TRUE); evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(win, bx); evas_object_show(bx); tb = elm_toolbar_add(win); elm_toolbar_homogeneous_set(tb, EINA_FALSE); elm_toolbar_horizontal_set(tb, EINA_FALSE); elm_toolbar_shrink_mode_set(tb, ELM_TOOLBAR_SHRINK_EXPAND); elm_toolbar_select_mode_set(tb, ELM_OBJECT_SELECT_MODE_ALWAYS); elm_toolbar_transverse_expanded_set(tb, EINA_TRUE); elm_object_style_set(tb, "item_centered"); evas_object_size_hint_weight_set(tb, 0.0, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_box_pack_end(bx, tb); evas_object_show(tb); elm_toolbar_item_append(tb, "object-rotate-right", "Add 1 edge", _cb_add_edge, NULL); elm_toolbar_item_append(tb, "object-rotate-right", "Add 50 edges", _cb_add_50edges, NULL); elm_toolbar_item_append(tb, "object-rotate-right", "Add 500 edges", _cb_add_500edges, NULL); elm_toolbar_item_append(tb, "object-rotate-right", "Add 1 node alone", _cb_add_node, NULL); elm_toolbar_item_append(tb, "edit-delete", "Delete all", _cb_del_edges, NULL); elm_toolbar_item_append(tb, "object-rotate-right", "Send 100 blobs", _cb_send_100blobs, NULL); elm_toolbar_item_append(tb, "object-rotate-right", "Add a 10n group", _cb_add_10n_group, NULL); elm_toolbar_item_separator_set(elm_toolbar_item_append(tb, NULL, NULL, NULL, NULL), EINA_FALSE); lb = elm_label_add(win); elm_object_text_set(lb, "Layout"); evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL); tb_it = elm_toolbar_item_append(tb, NULL, NULL, NULL, NULL); elm_object_item_part_content_set(tb_it, "object", lb); sc = elm_segment_control_add(win); //evas_object_size_hint_weight_set(sc, em->weight.w, em->weight.h); //evas_object_size_hint_align_set(sc, em->align.x, em->align.y); seg_it = elm_segment_control_item_add(sc, NULL, "GraphOpt"); elm_segment_control_item_selected_set(seg_it, EINA_TRUE); seg_it = elm_segment_control_item_add(sc, NULL, "Kamada K."); elm_segment_control_item_selected_set(seg_it, EINA_FALSE); seg_it = elm_segment_control_item_add(sc, NULL, "Fruchterman R."); elm_segment_control_item_selected_set(seg_it, EINA_FALSE); evas_object_smart_callback_add(sc, "changed", _cb_layout_changed, NULL); evas_object_show(sc); tb_it = elm_toolbar_item_append(tb, NULL, NULL, NULL, NULL); elm_object_item_part_content_set(tb_it, "object", sc); //elm_toolbar_item_separator_set(elm_toolbar_item_append(tb, NULL, NULL, NULL, NULL), EINA_FALSE); ck = elm_check_add(win); elm_object_text_set(ck, "Show Node"); elm_check_state_set(ck, EINA_TRUE); evas_object_show(ck); evas_object_smart_callback_add(ck, "changed", _cb_show_nodes, NULL); tb_it = elm_toolbar_item_append(tb, NULL, NULL, NULL, NULL); elm_object_item_part_content_set(tb_it, "object", ck); ck = elm_check_add(win); elm_object_text_set(ck, "Show Label"); elm_check_state_set(ck, EINA_TRUE); evas_object_show(ck); evas_object_smart_callback_add(ck, "changed", _cb_show_labels, NULL); tb_it = elm_toolbar_item_append(tb, NULL, NULL, NULL, NULL); elm_object_item_part_content_set(tb_it, "object", ck); ck = elm_check_add(win); elm_object_text_set(ck, "Show Edges"); elm_check_state_set(ck, EINA_TRUE); evas_object_show(ck); evas_object_smart_callback_add(ck, "changed", _cb_show_edges, NULL); tb_it = elm_toolbar_item_append(tb, NULL, NULL, NULL, NULL); elm_object_item_part_content_set(tb_it, "object", ck); ck = elm_check_add(win); elm_object_text_set(ck, "Use animations"); elm_check_state_set(ck, EINA_TRUE); evas_object_show(ck); evas_object_smart_callback_add(ck, "changed", _cb_use_animations, NULL); tb_it = elm_toolbar_item_append(tb, NULL, NULL, NULL, NULL); elm_object_item_part_content_set(tb_it, "object", ck); ck = elm_check_add(win); elm_object_text_set(ck, "Do improvements"); elm_check_state_set(ck, EINA_TRUE); evas_object_show(ck); evas_object_smart_callback_add(ck, "changed", _cb_do_improvements, NULL); tb_it = elm_toolbar_item_append(tb, NULL, NULL, NULL, NULL); elm_object_item_part_content_set(tb_it, "object", ck); ck = elm_check_add(win); elm_object_text_set(ck, "Use theme for edges"); elm_check_state_set(ck, EINA_TRUE); evas_object_show(ck); evas_object_smart_callback_add(ck, "changed", _cb_use_theme_e, NULL); tb_it = elm_toolbar_item_append(tb, NULL, NULL, NULL, NULL); elm_object_item_part_content_set(tb_it, "object", ck); //elm_toolbar_item_separator_set(elm_toolbar_item_append(tb, NULL, NULL, NULL, NULL), EINA_FALSE); elm_toolbar_item_append(tb, "exit", "Quit", _cb_on_done, NULL); panes = elm_panes_add(win); evas_object_size_hint_weight_set(panes, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(panes, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_panes_content_right_size_set(panes, 0.0); elm_box_pack_end(bx, panes); evas_object_show(panes); egraph = egraph_new(evas, 1); if (!egraph) goto quit; evas_object_size_hint_weight_set(egraph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(egraph, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_show(egraph); elm_object_part_content_set(panes, "left", egraph); lb = elm_label_add(win); elm_object_style_set(lb, "marker"); evas_object_color_set(lb, 255, 255, 255, 255); elm_object_text_set(lb, "Demo application for Egraph
" "
" "Enjoy !
"); evas_object_show(lb); elm_object_part_content_set(panes, "right", lb); evas_object_resize(win, 150, 150); // XXX workaround elm sizing issue evas_object_show(win); evas_object_resize(win, 950, 715); evas_object_show(win); _egraph = egraph; _mainwin = win; _cb_add_50edges(NULL, NULL, NULL); elm_run(); retval = 0; quit: elm_shutdown(); return retval; } ELM_MAIN()