Enlightenment CVS committal Author : moom Project : e17 Module : libs/etk
Dir : e17/libs/etk/src/bin Modified Files: Makefile.am etk_test.c etk_test.h etk_tree_test.c Removed Files: etk_tree2_test.c Log Message: * Replace Etk_Tree by Etk_Tree2. The old tree is now removed.. =================================================================== RCS file: /cvs/e/e17/libs/etk/src/bin/Makefile.am,v retrieving revision 1.19 retrieving revision 1.20 diff -u -3 -r1.19 -r1.20 --- Makefile.am 28 Nov 2006 21:40:06 -0000 1.19 +++ Makefile.am 16 Jan 2007 23:49:26 -0000 1.20 @@ -28,7 +28,6 @@ etk_canvas_test.c \ etk_colorpicker_test.c \ etk_tree_test.c \ -etk_tree2_test.c \ etk_paned_test.c \ etk_scrolled_view_test.c \ etk_menu_test.c \ =================================================================== RCS file: /cvs/e/e17/libs/etk/src/bin/etk_test.c,v retrieving revision 1.32 retrieving revision 1.33 diff -u -3 -r1.32 -r1.33 --- etk_test.c 28 Nov 2006 21:40:06 -0000 1.32 +++ etk_test.c 16 Jan 2007 23:49:26 -0000 1.33 @@ -68,11 +68,6 @@ ETK_TEST_ADVANCED_WIDGET }, { - "Tree2", - etk_test_tree2_window_create, - ETK_TEST_ADVANCED_WIDGET - }, - { "Paned", etk_test_paned_window_create, ETK_TEST_CONTAINER =================================================================== RCS file: /cvs/e/e17/libs/etk/src/bin/etk_test.h,v retrieving revision 1.19 retrieving revision 1.20 diff -u -3 -r1.19 -r1.20 --- etk_test.h 28 Nov 2006 21:40:07 -0000 1.19 +++ etk_test.h 16 Jan 2007 23:49:26 -0000 1.20 @@ -11,7 +11,6 @@ void etk_test_colorpicker_window_create(void *data); void etk_test_canvas_window_create(void *data); void etk_test_tree_window_create(void *data); -void etk_test_tree2_window_create(void *data); void etk_test_paned_window_create(void *data); void etk_test_scrolled_view_window_create(void *data); void etk_test_menu_window_create(void *data); =================================================================== RCS file: /cvs/e/e17/libs/etk/src/bin/etk_tree_test.c,v retrieving revision 1.36 retrieving revision 1.37 diff -u -3 -r1.36 -r1.37 --- etk_tree_test.c 29 Dec 2006 22:10:12 -0000 1.36 +++ etk_tree_test.c 16 Jan 2007 23:49:26 -0000 1.37 @@ -1,38 +1,23 @@ #include "etk_test.h" -#include <string.h> #include <stdlib.h> +#include <string.h> #include "config.h" -static void _etk_test_tree_drag_drop_cb(Etk_Object *object, void *event, void *data); -static void _etk_test_tree_drag_begin_cb(Etk_Object *object, void *data); -static void _etk_test_tree_add_items(Etk_Tree *tree, int n); -static void _etk_test_tree_row_selected(Etk_Object *object, Etk_Tree_Row *row, void *data); -static void _etk_test_tree_row_unselected(Etk_Object *object, Etk_Tree_Row *row, void *data); -static void _etk_test_tree_row_clicked(Etk_Object *object, Etk_Tree_Row *row, Etk_Event_Mouse_Up *event, void *data); -static void _etk_test_tree_row_activated(Etk_Object *object, Etk_Tree_Row *row, void *data); +static void _etk_test_tree_key_down_cb(Etk_Object *object, Etk_Event_Key_Down *event, void *data); +static void _etk_test_tree_row_clicked_cb(Etk_Object *object, Etk_Tree_Row *row, Etk_Event_Mouse_Up *event, void *data); static void _etk_test_tree_checkbox_toggled_cb(Etk_Object *object, Etk_Tree_Row *row, void *data); -static void _etk_test_tree_clear_list_cb(Etk_Object *object, void *data); -static void _etk_test_tree_add_5_cb(Etk_Object *object, void *data); -static void _etk_test_tree_add_50_cb(Etk_Object *object, void *data); -static void _etk_test_tree_add_500_cb(Etk_Object *object, void *data); -static void _etk_test_tree_add_5000_cb(Etk_Object *object, void *data); -static void _etk_test_tree_sort_cb(Etk_Object *object, void *data); -static int _etk_test_tree_compare_cb(Etk_Tree *tree, Etk_Tree_Row *row1, Etk_Tree_Row *row2, Etk_Tree_Col *col, void *data); - -static Etk_Bool ascendant = ETK_TRUE; /* Creates the window for the tree test */ void etk_test_tree_window_create(void *data) { static Etk_Widget *win = NULL; + Etk_Widget *vbox; Etk_Widget *tree; - Etk_Tree_Row *row; Etk_Tree_Col *col1, *col2, *col3, *col4; - Etk_Widget *table; - Etk_Widget *label; - Etk_Widget *frame; - Etk_Widget *button; - Etk_Widget *hbox; + Etk_Tree_Row *row; + Etk_Widget *statusbar; + char row_name[128]; + const char *stock_key; int i; if (win) @@ -41,296 +26,158 @@ return; } + /* Create the window and the vbox where the widgets will be packed into */ win = etk_window_new(); etk_window_title_set(ETK_WINDOW(win), "Etk Tree Test"); + etk_window_resize(ETK_WINDOW(win), 440, 500); etk_signal_connect("delete_event", ETK_OBJECT(win), ETK_CALLBACK(etk_window_hide_on_delete), NULL); - - table = etk_table_new(2, 3, ETK_FALSE); - etk_container_add(ETK_CONTAINER(win), table); - - /* The tree: */ - label = etk_label_new("<h1>Tree:</h1>"); - etk_table_attach(ETK_TABLE(table), label, 0, 0, 0, 0, 0, 0, ETK_TABLE_FILL); - + + vbox = etk_vbox_new(ETK_FALSE, 0); + etk_container_add(ETK_CONTAINER(win), vbox); + + /* Create the tree widget */ tree = etk_tree_new(); - etk_widget_size_request_set(tree, 320, 400); - etk_table_attach_default(ETK_TABLE(table), tree, 0, 0, 1, 1); - etk_tree_mode_set(ETK_TREE(tree), ETK_TREE_MODE_TREE); etk_tree_multiple_select_set(ETK_TREE(tree), ETK_TRUE); - col1 = etk_tree_col_new(ETK_TREE(tree), "Column 1", etk_tree_model_icon_text_new(ETK_TREE(tree), ETK_TREE_FROM_EDJE), 90); - col2 = etk_tree_col_new(ETK_TREE(tree), "Column 2", etk_tree_model_double_new(ETK_TREE(tree)), 60); - col3 = etk_tree_col_new(ETK_TREE(tree), "Column 3", etk_tree_model_image_new(ETK_TREE(tree), ETK_TREE_FROM_FILE), 60); - col4 = etk_tree_col_new(ETK_TREE(tree), "Column 4", etk_tree_model_checkbox_new(ETK_TREE(tree)), 40); - etk_tree_build(ETK_TREE(tree)); - etk_signal_connect("cell_value_changed", ETK_OBJECT(col4), ETK_CALLBACK(_etk_test_tree_checkbox_toggled_cb), NULL); + etk_widget_padding_set(tree, 5, 5, 5, 5); + etk_box_append(ETK_BOX(vbox), tree, ETK_BOX_START, ETK_BOX_EXPAND_FILL, 0); + /* We first create the columns of the tree, and then we "build" the tree with etk_tree_build() */ + col1 = etk_tree_col_new(ETK_TREE(tree), "Column 1", 130, 0.0); + etk_tree_col_model_add(col1, etk_tree_model_image_new()); + etk_tree_col_model_add(col1, etk_tree_model_text_new()); + + col2 = etk_tree_col_new(ETK_TREE(tree), "Column 2", 60, 1.0); + etk_tree_col_model_add(col2, etk_tree_model_double_new()); + + col3 = etk_tree_col_new(ETK_TREE(tree), "Column 3", 60, 0.0); + etk_tree_col_model_add(col3, etk_tree_model_image_new()); + + col4 = etk_tree_col_new(ETK_TREE(tree), "Column 4", 60, 0.5); + etk_tree_col_model_add(col4, etk_tree_model_checkbox_new()); + + etk_tree_build(ETK_TREE(tree)); + + /* Then we add the rows to the tree. etk_tree_freeze/thaw() is used to improve + * the speed when you insert a lot of rows. It is not really important if you + * insert only some thousands of rows (here, we insert 3000 rows) */ etk_tree_freeze(ETK_TREE(tree)); for (i = 0; i < 1000; i++) { - row = etk_tree_append(ETK_TREE(tree), col1, etk_theme_icon_get(), "places/user-home_16", "Row1", - col2, 10.0, col3, PACKAGE_DATA_DIR "/images/1star.png", col4, ETK_FALSE, NULL); - row = etk_tree_append_to_row(row, col1, etk_theme_icon_get(), "places/folder_16", "Row2", - col2, 20.0, col3, PACKAGE_DATA_DIR "/images/2stars.png", col4, ETK_FALSE, NULL); - etk_tree_append_to_row(row, col1, etk_theme_icon_get(), "mimetypes/text-x-generic_16", "Row3", - col2, 30.0, col3, PACKAGE_DATA_DIR "/images/3stars.png", col4, ETK_FALSE, NULL); + sprintf(row_name, "Row %d", (i * 3) + 1); + stock_key = etk_stock_key_get(ETK_STOCK_PLACES_USER_HOME, ETK_STOCK_SMALL); + row = etk_tree_row_append(ETK_TREE(tree), NULL, + col1, etk_theme_icon_get(), stock_key, row_name, + col2, 10.0, + col3, PACKAGE_DATA_DIR "/images/1star.png", NULL, + col4, ETK_FALSE, + NULL); + + sprintf(row_name, "Row %d", (i * 3) + 2); + stock_key = etk_stock_key_get(ETK_STOCK_PLACES_FOLDER, ETK_STOCK_SMALL); + row = etk_tree_row_append(ETK_TREE(tree), row, + col1, etk_theme_icon_get(), stock_key, row_name, + col2, 20.0, + col3, PACKAGE_DATA_DIR "/images/2stars.png", NULL, + col4, ETK_TRUE, + NULL); + + sprintf(row_name, "Row %d", (i * 3) + 3); + stock_key = etk_stock_key_get(ETK_STOCK_TEXT_X_GENERIC, ETK_STOCK_SMALL); + etk_tree_row_append(ETK_TREE(tree), row, + col1, etk_theme_icon_get(), stock_key, row_name, + col2, 30.0, + col3, PACKAGE_DATA_DIR "/images/3stars.png", NULL, + col4, ETK_TRUE, + NULL); } etk_tree_thaw(ETK_TREE(tree)); - - /* The list: */ - label = etk_label_new("<h1>List:</h1>"); - etk_table_attach(ETK_TABLE(table), label, 1, 1, 0, 0, 0, 0, ETK_TABLE_FILL); - - tree = etk_tree_new(); - etk_widget_dnd_source_set(ETK_WIDGET(tree), ETK_TRUE); - etk_widget_dnd_dest_set(ETK_WIDGET(tree), ETK_TRUE); - etk_signal_connect("drag_drop", ETK_OBJECT(tree), ETK_CALLBACK(_etk_test_tree_drag_drop_cb), NULL); - etk_signal_connect("drag_begin", ETK_OBJECT(tree), ETK_CALLBACK(_etk_test_tree_drag_begin_cb), NULL); - etk_widget_size_request_set(tree, 320, 400); - etk_table_attach_default(ETK_TABLE(table), tree, 1, 1, 1, 1); - - etk_tree_mode_set(ETK_TREE(tree), ETK_TREE_MODE_LIST); - etk_tree_multiple_select_set(ETK_TREE(tree), ETK_TRUE); - col1 = etk_tree_col_new(ETK_TREE(tree), "Column 1", etk_tree_model_icon_text_new(ETK_TREE(tree), ETK_TREE_FROM_FILE), 90); - col2 = etk_tree_col_new(ETK_TREE(tree), "Column 2", etk_tree_model_int_new(ETK_TREE(tree)), 90); - etk_tree_col_sort_func_set(col2, _etk_test_tree_compare_cb, NULL); - col3 = etk_tree_col_new(ETK_TREE(tree), "Column 3", etk_tree_model_image_new(ETK_TREE(tree), ETK_TREE_FROM_FILE), 90); - etk_tree_build(ETK_TREE(tree)); - - _etk_test_tree_add_items(ETK_TREE(tree), 5000); - etk_signal_connect("row_selected", ETK_OBJECT(tree), ETK_CALLBACK(_etk_test_tree_row_selected), NULL); - etk_signal_connect("row_unselected", ETK_OBJECT(tree), ETK_CALLBACK(_etk_test_tree_row_unselected), NULL); - etk_signal_connect("row_clicked", ETK_OBJECT(tree), ETK_CALLBACK(_etk_test_tree_row_clicked), NULL); - etk_signal_connect("row_activated", ETK_OBJECT(tree), ETK_CALLBACK(_etk_test_tree_row_activated), NULL); - - /* Frame */ - frame = etk_frame_new("List Actions"); - etk_table_attach(ETK_TABLE(table), frame, 0, 1, 2, 2, 0, 0, ETK_TABLE_FILL); - hbox = etk_hbox_new(ETK_TRUE, 10); - etk_container_add(ETK_CONTAINER(frame), hbox); - - button = etk_button_new_with_label("Clear"); - etk_signal_connect("clicked", ETK_OBJECT(button), ETK_CALLBACK(_etk_test_tree_clear_list_cb), tree); - etk_box_append(ETK_BOX(hbox), button, ETK_BOX_START, ETK_BOX_EXPAND_FILL, 0); - - button = etk_button_new_with_label("Add 5 rows"); - etk_signal_connect("clicked", ETK_OBJECT(button), ETK_CALLBACK(_etk_test_tree_add_5_cb), tree); - etk_box_append(ETK_BOX(hbox), button, ETK_BOX_START, ETK_BOX_EXPAND_FILL, 0); - - button = etk_button_new_with_label("Add 50 rows"); - etk_signal_connect("clicked", ETK_OBJECT(button), ETK_CALLBACK(_etk_test_tree_add_50_cb), tree); - etk_box_append(ETK_BOX(hbox), button, ETK_BOX_START, ETK_BOX_EXPAND_FILL, 0); - - button = etk_button_new_with_label("Add 500 rows"); - etk_signal_connect("clicked", ETK_OBJECT(button), ETK_CALLBACK(_etk_test_tree_add_500_cb), tree); - etk_box_append(ETK_BOX(hbox), button, ETK_BOX_START, ETK_BOX_EXPAND_FILL, 0); - - button = etk_button_new_with_label("Add 5000 rows"); - etk_signal_connect("clicked", ETK_OBJECT(button), ETK_CALLBACK(_etk_test_tree_add_5000_cb), tree); - etk_box_append(ETK_BOX(hbox), button, ETK_BOX_START, ETK_BOX_EXPAND_FILL, 0); - - button = etk_button_new_with_label("Sort"); - etk_signal_connect("clicked", ETK_OBJECT(button), ETK_CALLBACK(_etk_test_tree_sort_cb), tree); - etk_box_append(ETK_BOX(hbox), button, ETK_BOX_START, ETK_BOX_EXPAND_FILL, 0); - + + /* Finally we create the statusbar used to display the events on the tree */ + statusbar = etk_statusbar_new(); + etk_box_append(ETK_BOX(vbox), statusbar, ETK_BOX_START, ETK_BOX_FILL, 0); + + etk_signal_connect("key_down", ETK_OBJECT(tree), + ETK_CALLBACK(_etk_test_tree_key_down_cb), NULL); + etk_signal_connect("row_clicked", ETK_OBJECT(tree), + ETK_CALLBACK(_etk_test_tree_row_clicked_cb), statusbar); + etk_signal_connect("cell_value_changed", ETK_OBJECT(col4), + ETK_CALLBACK(_etk_test_tree_checkbox_toggled_cb), statusbar); + etk_widget_show_all(win); } -/* TODO: doc */ -static void _etk_test_tree_drag_drop_cb(Etk_Object *object, void *event, void *data) -{ - Etk_Tree *tree; - Etk_Tree_Row *row; - char *col1_string, *col3_path; - int col2_value; - - tree = ETK_TREE(object); - row = etk_tree_selected_row_get(tree); - etk_tree_row_fields_get(row, etk_tree_nth_col_get(tree, 0), NULL, &col1_string, etk_tree_nth_col_get(tree, 1), &col2_value, etk_tree_nth_col_get(tree, 2), &col3_path, NULL); - printf("Row dropped on %p: \"%s\" %d %s\n", row, col1_string, col2_value, col3_path); -} - -/* TODO: doc */ -static void _etk_test_tree_drag_begin_cb(Etk_Object *object, void *data) +/* Called when a key is pressed while the tree is focused: + * we use this to delete the selected rows if "DEL" is pressed */ +static void _etk_test_tree_key_down_cb(Etk_Object *object, Etk_Event_Key_Down *event, void *data) { Etk_Tree *tree; - Etk_Tree_Row *row; - char *col1_string, *col3_path; - int col2_value; - const char **types; - unsigned int num_types; - char *drag_data; - Etk_Drag *drag; - Etk_Widget *button; - - tree = ETK_TREE(object); - row = etk_tree_selected_row_get(tree); - - drag = ETK_DRAG((ETK_WIDGET(tree))->drag); - - etk_tree_row_fields_get(row, etk_tree_nth_col_get(tree, 0), NULL, &col1_string, etk_tree_nth_col_get(tree, 1), &col2_value, etk_tree_nth_col_get(tree, 2), &col3_path, NULL); - - types = calloc(1, sizeof(char*)); - num_types = 1; - types[0] = strdup("text/plain"); - drag_data = strdup(col1_string); - - etk_drag_types_set(drag, types, num_types); - etk_drag_data_set(drag, drag_data, strlen(drag_data) + 1); - button = etk_button_new_with_label(col1_string); - etk_button_image_set(ETK_BUTTON(button), ETK_IMAGE(etk_image_new_from_file(col3_path, NULL))); - etk_container_add(ETK_CONTAINER(drag), button); -} - -/* Adds n items to the tree */ -static void _etk_test_tree_add_items(Etk_Tree *tree, int n) -{ - int i; - Etk_Tree_Col *col1, *col2, *col3; - char row_name[256]; - char star_path[256]; - int rand_value; - - if (!tree) + Etk_Tree_Row *r; + + if (!(tree = ETK_TREE(object))) return; - - col1 = etk_tree_nth_col_get(tree, 0); - col2 = etk_tree_nth_col_get(tree, 1); - col3 = etk_tree_nth_col_get(tree, 2); - - etk_tree_freeze(tree); - for (i = 0; i < n; i++) + + if (strcmp(event->keyname, "Delete") == 0) { - snprintf(row_name, 256, "Row%d", i); - if (i % 3 == 0) - strncpy(star_path, PACKAGE_DATA_DIR "/images/1star.png", 256); - else if (i % 3 == 1) - strncpy(star_path, PACKAGE_DATA_DIR "/images/2stars.png", 256); - else - strncpy(star_path, PACKAGE_DATA_DIR "/images/3stars.png", 256); - rand_value = rand() % 10000; - etk_tree_append(ETK_TREE(tree), col1, PACKAGE_DATA_DIR "/images/1star.png", row_name, col2, rand_value, col3, star_path, NULL); + /* We walk through all the rows of the tree, and we delete those which are selected. + * Note that we can safely manipulate "r" with etk_tree_row_walk_next(), even if it + * has been deleted with etk_tree_row_delete(), because etk_tree_row_delete() just + * marks the row as deleted, but the row is not effectively deleted immediately */ + for (r = etk_tree_first_row_get(tree); r; r = etk_tree_row_walk_next(r, ETK_TRUE)) + { + if (etk_tree_row_is_selected(r)) + etk_tree_row_delete(r); + } + + etk_signal_stop(); } - etk_tree_thaw(tree); -} - -/* Called when a row is selected */ -static void _etk_test_tree_row_selected(Etk_Object *object, Etk_Tree_Row *row, void *data) -{ - Etk_Tree *tree; - char *col1_string, *col3_path; - int col2_value; - - tree = ETK_TREE(object); - etk_tree_row_fields_get(row, etk_tree_nth_col_get(tree, 0), NULL, &col1_string, etk_tree_nth_col_get(tree, 1), &col2_value, etk_tree_nth_col_get(tree, 2), &col3_path, NULL); - printf("Row selected %p: \"%s\" %d %s\n", row, col1_string, col2_value, col3_path); -} - -/* Called when a row is unselected */ -static void _etk_test_tree_row_unselected(Etk_Object *object, Etk_Tree_Row *row, void *data) -{ - printf("Row unselected %p\n", row); -} - -/* Called when a row is clicked */ -static void _etk_test_tree_row_clicked(Etk_Object *object, Etk_Tree_Row *row, Etk_Event_Mouse_Up *event, void *data) -{ - printf("Row clicked %p. Button: %d. ", row, event->button); - if (event->flags & ETK_MOUSE_TRIPLE_CLICK) - printf("Triple Click\n"); - else if (event->flags & ETK_MOUSE_DOUBLE_CLICK) - printf("Double Click\n"); - else - printf("Single Click\n"); } -/* Called when a row is activated */ -static void _etk_test_tree_row_activated(Etk_Object *object, Etk_Tree_Row *row, void *data) +/* Called when a row of the tree is clicked: we display the clicked row in the statusbar */ +/* TODO: sometimes it's a Etk_Event_Mouse_Up, sometimes a Etk_Event_Mouse_Down... */ +static void _etk_test_tree_row_clicked_cb(Etk_Object *object, Etk_Tree_Row *row, Etk_Event_Mouse_Up *event, void *data) { Etk_Tree *tree; - char *col1_string, *col3_path; - int col2_value; - - tree = ETK_TREE(object); - etk_tree_row_fields_get(row, etk_tree_nth_col_get(tree, 0), NULL, &col1_string, etk_tree_nth_col_get(tree, 1), &col2_value, etk_tree_nth_col_get(tree, 2), &col3_path, NULL); - printf("Row activated %p: \"%s\" %d %s\n", row, col1_string, col2_value, col3_path); -} - -/* Called when a checkbox of the tree is toggled */ -static void _etk_test_tree_checkbox_toggled_cb(Etk_Object *object, Etk_Tree_Row *row, void *data) -{ - Etk_Bool checked; - Etk_Tree_Col *col; + Etk_Statusbar *statusbar; + char *row_name; + char message[1024]; - if (!(col = ETK_TREE_COL(object)) || !row) + if (!(tree = ETK_TREE(object)) || !(statusbar = ETK_STATUSBAR(data)) || !row || !event) return; - etk_tree_row_fields_get(row, col, &checked, NULL); - if (checked) - printf("Checkbox activated\n"); - else - printf("Checkbox deactivated\n"); -} - -/* Called when the "Clear" button is clicked */ -static void _etk_test_tree_clear_list_cb(Etk_Object *object, void *data) -{ - Etk_Tree *tree; - - if (!(tree = ETK_TREE(data))) - return; - etk_tree_clear(tree); -} - -/* Called when the "Add 5 items" button is clicked */ -static void _etk_test_tree_add_5_cb(Etk_Object *object, void *data) -{ - _etk_test_tree_add_items(ETK_TREE(data), 5); -} - -/* Called when the "Add 50 items" button is clicked */ -static void _etk_test_tree_add_50_cb(Etk_Object *object, void *data) -{ - _etk_test_tree_add_items(ETK_TREE(data), 50); -} - -/* Called when the "Add 500 items" button is clicked */ -static void _etk_test_tree_add_500_cb(Etk_Object *object, void *data) -{ - _etk_test_tree_add_items(ETK_TREE(data), 500); -} - -/* Called when the "Add 5000 items" button is clicked */ -static void _etk_test_tree_add_5000_cb(Etk_Object *object, void *data) -{ - _etk_test_tree_add_items(ETK_TREE(data), 5000); + /* We retrieve the name of the row: this information is located in the first column, + * and it corresponds to the third param of the model (the two first params correspond + * to the icon used, we ignore them here (that's why there are two NULL params)). + * etk_tree_row_fields_get() has to be terminated by NULL */ + etk_tree_row_fields_get(row, etk_tree_nth_col_get(tree, 0), NULL, NULL, &row_name, NULL); + + sprintf(message, "Row \"%s\" clicked (%s)", row_name, + (event->flags & ETK_MOUSE_TRIPLE_CLICK) ? "Triple" : + ((event->flags & ETK_MOUSE_DOUBLE_CLICK) ? "Double" : "Single")); + + etk_statusbar_message_push(statusbar, message, 0); } -/* Called when the "Sort" button is clicked */ -static void _etk_test_tree_sort_cb(Etk_Object *object, void *data) +/* Called when a checkbox of the tree is toggled: we display its new state in the statusbar */ +static void _etk_test_tree_checkbox_toggled_cb(Etk_Object *object, Etk_Tree_Row *row, void *data) { Etk_Tree *tree; + Etk_Tree_Col *col; + Etk_Statusbar *statusbar; + Etk_Bool checked; + char *row_name; + char message[1024]; - if (!(tree = ETK_TREE(data))) + if (!(col = ETK_TREE_COL(object)) || !(statusbar = ETK_STATUSBAR(data)) || !row) return; - etk_tree_sort(tree, _etk_test_tree_compare_cb, ascendant, etk_tree_nth_col_get(tree, 1), NULL); - ascendant = !ascendant; -} - -/* Compares two rows of the tree */ -static int _etk_test_tree_compare_cb(Etk_Tree *tree, Etk_Tree_Row *row1, Etk_Tree_Row *row2, Etk_Tree_Col *col, void *data) -{ - int row1_value, row2_value; - if (!tree || !row1 || !row2 || !col) - return 0; + tree = etk_tree_col_tree_get(col); + + /* We retrieve the name of the row: see _etk_test_tree_row_clicked_cb() for more info*/ + etk_tree_row_fields_get(row, etk_tree_nth_col_get(tree, 0), NULL, NULL, &row_name, NULL); + /* We then retrieve the new state of the checkbox */ + etk_tree_row_fields_get(row, col, &checked, NULL); - etk_tree_row_fields_get(row1, col, &row1_value, NULL); - etk_tree_row_fields_get(row2, col, &row2_value, NULL); - if (row1_value < row2_value) - return -1; - else if (row1_value > row2_value) - return 1; - else - return 0; + sprintf(message, "Row \"%s\" has been %s", row_name, checked ? "checked" : "unchecked"); + etk_statusbar_message_push(statusbar, message, 0); } ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs