Enlightenment CVS committal Author : lordchaos Project : e17 Module : proto
Dir : e17/proto/entropy/src/dialogs Modified Files: etk_file_cache_debug_dialog.c Log Message: * Hook up the file cache dialog. Also supports sorting by # of listeners. More details to come * Fix logic flaw in event cycle for file listing and file-decaching (success #1 for file cache debug dialog) =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/entropy/src/dialogs/etk_file_cache_debug_dialog.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- etk_file_cache_debug_dialog.c 6 Mar 2006 08:26:13 -0000 1.2 +++ etk_file_cache_debug_dialog.c 6 Mar 2006 10:41:40 -0000 1.3 @@ -1,18 +1,89 @@ #include "entropy.h" #include <Etk.h> +static int _etk_file_cache_dialog_running = 0; +void etk_file_cache_dialog_refresh(Etk_Widget* tree); + +static int _entropy_etk_file_cache_dialog_listener_compare_cb +(Etk_Tree *tree, Etk_Tree_Row *row1, Etk_Tree_Row *row2, Etk_Tree_Col *col, void *data) +{ + int val1, val2; + + etk_tree_row_fields_get(row1, col, &val1, NULL); + etk_tree_row_fields_get(row2, col, &val2, NULL); + + if (val1 < val2) + return 1; + else if (val1 > val2) + return -1; + else + return 0; + +} + +static Etk_Bool +_etk_file_cache_debug_dialog_delete_cb (Etk_Object * object, void *data) +{ + _etk_file_cache_dialog_running = 0; + etk_object_destroy(object); + + return ETK_TRUE; +} + +void _etk_file_cache_dialog_refresh_cb(Etk_Object* object, void* data) +{ + etk_file_cache_dialog_refresh(ETK_WIDGET(data)); +} + +void etk_file_cache_dialog_refresh(Etk_Widget* tree) +{ + Etk_Tree_Col* col1; + Etk_Tree_Col* col2; + + char* key; + char buffer[PATH_MAX]; + Ecore_List* keys; + + etk_tree_clear(ETK_TREE(tree)); + + /*Populate the tree*/ + col1 = etk_tree_nth_col_get(ETK_TREE(tree), 0); + col2 = etk_tree_nth_col_get(ETK_TREE(tree), 1); + + etk_tree_freeze(ETK_TREE(tree)); + + keys = entropy_core_file_cache_keys_retrieve(); + while ( (key = ecore_list_remove_first(keys))) { + entropy_file_listener* listen = entropy_core_file_cache_retrieve(key); + + if (listen) { + snprintf(buffer, PATH_MAX, "%s/%s", listen->file->path, listen->file->filename); + + etk_tree_append(ETK_TREE(tree), + col1, listen->count, + col2, buffer, + NULL); + } + + } + ecore_list_destroy(keys); + + etk_tree_thaw(ETK_TREE(tree)); +} + void etk_file_cache_dialog_create() { Etk_Widget* window = NULL; Etk_Widget* tree = NULL; Etk_Tree_Col* tree_col; + Etk_Widget* button; + Etk_Widget* vbox; - Etk_Tree_Col* col1; - Etk_Tree_Col* col2; - char* key; - entropy_mime_action* action; - Ecore_List* keys; + if (_etk_file_cache_dialog_running) + return; + + _etk_file_cache_dialog_running = 1; window = etk_window_new(); @@ -21,23 +92,37 @@ etk_widget_size_request_set(ETK_WIDGET(window), 450, 500); + vbox = etk_vbox_new(ETK_FALSE,0); + etk_container_add(ETK_CONTAINER(window), vbox); + tree = etk_tree_new(); + etk_box_pack_start(ETK_BOX(vbox), tree, ETK_TRUE, ETK_TRUE, 0); + etk_tree_mode_set(ETK_TREE(tree), ETK_TREE_MODE_LIST); - tree_col = etk_tree_col_new(ETK_TREE(tree), _("File Type"), - etk_tree_model_text_new(ETK_TREE(tree)), 125); + tree_col = etk_tree_col_new(ETK_TREE(tree), _("Listeners"), + etk_tree_model_int_new(ETK_TREE(tree)), 125); + + etk_tree_col_sort_func_set(tree_col, _entropy_etk_file_cache_dialog_listener_compare_cb, ETK_TRUE, NULL); - tree_col = etk_tree_col_new(ETK_TREE(tree), _("Executable"), + tree_col = etk_tree_col_new(ETK_TREE(tree), _("Filename"), etk_tree_model_text_new(ETK_TREE(tree)), 150); etk_tree_col_expand_set(tree_col, ETK_TRUE); etk_tree_build(ETK_TREE(tree)); - etk_container_add(ETK_CONTAINER(window), tree); + + etk_file_cache_dialog_refresh(tree); - /*Populate the tree*/ - col1 = etk_tree_nth_col_get(ETK_TREE(tree), 0); - col2 = etk_tree_nth_col_get(ETK_TREE(tree), 1); + button = etk_button_new_with_label("Refresh"); + etk_signal_connect("pressed", ETK_OBJECT(button), ETK_CALLBACK(_etk_file_cache_dialog_refresh_cb), tree); + + + etk_box_pack_end(ETK_BOX(vbox), button, ETK_FALSE, ETK_FALSE, 0); + + + etk_signal_connect ("delete_event", ETK_OBJECT (window), + ETK_CALLBACK (_etk_file_cache_debug_dialog_delete_cb), window); etk_widget_show_all(window); } ------------------------------------------------------- This SF.Net email is sponsored by xPML, a groundbreaking scripting language that extends applications into web and mobile media. Attend the live webcast and join the prime developer group breaking into this new coding territory! http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs