X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2FguiControlFlow%2FProcess_List.c;h=5e75afc9e5d0f5bf055a150a30f8b81ae7692fce;hb=14963be07f6a9c7c2db0d988f557b870ebd5dead;hp=84c66ecaf779ee7bd769cc59dc86cd03ff169028;hpb=fa2c4dbef9d6f7f509a1d13ca8b7d16f95236100;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/Process_List.c b/ltt/branches/poly/lttv/modules/guiControlFlow/Process_List.c index 84c66eca..5e75afc9 100644 --- a/ltt/branches/poly/lttv/modules/guiControlFlow/Process_List.c +++ b/ltt/branches/poly/lttv/modules/guiControlFlow/Process_List.c @@ -2,531 +2,511 @@ #include #include #include "Process_List.h" - +#include "Draw_Item.h" /***************************************************************************** * Methods to synchronize process list * *****************************************************************************/ -typedef struct _ProcessInfo { - - guint pid; - LttTime birth; - -} ProcessInfo; - - -struct _ProcessList { - - GtkWidget *Process_List_VC; - GtkListStore *Store_M; - - /* A hash table by PID to speed up process position find in the list */ - GHashTable *Process_Hash; - - guint Number_Of_Process; - -}; - - /* Enumeration of the columns */ enum { - PROCESS_COLUMN, - PID_COLUMN, - BIRTH_S_COLUMN, - BIRTH_NS_COLUMN, - N_COLUMNS + PROCESS_COLUMN, + PID_COLUMN, + BIRTH_S_COLUMN, + BIRTH_NS_COLUMN, + N_COLUMNS }; -gint process_sort_func ( GtkTreeModel *model, - GtkTreeIter *it_a, - GtkTreeIter *it_b, - gpointer user_data) -{ - GValue a, b; - - memset(&a, 0, sizeof(GValue)); - memset(&b, 0, sizeof(GValue)); - - /* Order by PID */ - gtk_tree_model_get_value( model, - it_a, - PID_COLUMN, - &a); - - gtk_tree_model_get_value( model, - it_b, - PID_COLUMN, - &b); - - if(G_VALUE_TYPE(&a) == G_TYPE_UINT - && G_VALUE_TYPE(&b) == G_TYPE_UINT ) - { - if(g_value_get_uint(&a) > g_value_get_uint(&b)) - { - g_value_unset(&a); - g_value_unset(&b); - return 1; - } - if(g_value_get_uint(&a) < g_value_get_uint(&b)) - { - g_value_unset(&a); - g_value_unset(&b); - return 0; - } - } - - g_value_unset(&a); - g_value_unset(&b); - - - /* Order by birth second */ - gtk_tree_model_get_value( model, - it_a, - BIRTH_S_COLUMN, - &a); - - gtk_tree_model_get_value( model, - it_b, - BIRTH_S_COLUMN, - &b); - - - if(G_VALUE_TYPE(&a) == G_TYPE_ULONG - && G_VALUE_TYPE(&b) == G_TYPE_ULONG ) - { - if(g_value_get_ulong(&a) > g_value_get_ulong(&b)) - { - g_value_unset(&a); - g_value_unset(&b); - return 1; - } - if(g_value_get_ulong(&a) < g_value_get_ulong(&b)) - { - g_value_unset(&a); - g_value_unset(&b); - return 0; - } - - } - - g_value_unset(&a); - g_value_unset(&b); - - /* Order by birth nanosecond */ - gtk_tree_model_get_value( model, - it_a, - BIRTH_NS_COLUMN, - &a); - - gtk_tree_model_get_value( model, - it_b, - BIRTH_NS_COLUMN, - &b); - - - if(G_VALUE_TYPE(&a) == G_TYPE_ULONG - && G_VALUE_TYPE(&b) == G_TYPE_ULONG ) - { - if(g_value_get_ulong(&a) > g_value_get_ulong(&b)) - { - g_value_unset(&a); - g_value_unset(&b); - return 1; - } - // Final condition - //if(g_value_get_ulong(&a) < g_value_get_ulong(&b)) - //{ - // g_value_unset(&a); - // g_value_unset(&b); - // return 0; - //} - - } - - g_value_unset(&a); - g_value_unset(&b); - - return 0; - -} - -void send_test_data(ProcessList *Process_List) +gint process_sort_func ( GtkTreeModel *model, + GtkTreeIter *it_a, + GtkTreeIter *it_b, + gpointer user_data) { - guint height; - int i; - ProcessInfo Process_Info = {10000, 12000, 55600}; - //ProcessInfo Process_Info = {156, 14000, 55500}; - GtkTreeRowReference *got_RowRef; - - LttTime birth; - birth.tv_sec = 12000; - birth.tv_nsec = 55500; - - ProcessList_add(Process_List, - 1, - &birth, - &height); - - g_critical("height : %u", height); - - birth.tv_sec = 14000; - birth.tv_nsec = 55500; - - ProcessList_add(Process_List, - 156, - &birth, - &height); - - g_critical("height : %u", height); - - birth.tv_sec = 12000; - birth.tv_nsec = 55700; - - ProcessList_add(Process_List, - 10, - &birth, - &height); - - for(i=0; i<150; i++) - { - birth.tv_sec = i*12000; - birth.tv_nsec = i*55700; - - ProcessList_add(Process_List, - i, - &birth, - &height); - - } - g_critical("height : %u", height); - - birth.tv_sec = 12000; - birth.tv_nsec = 55600; - - ProcessList_add(Process_List, - 10, - &birth, - &height); - g_critical("height : %u", height); - - ProcessList_add(Process_List, - 10000, - &birth, - &height); - g_critical("height : %u", height); - - - ProcessList_remove( Process_List, - 10000, - &birth); - - if(got_RowRef = - (GtkTreeRowReference*)g_hash_table_lookup( - Process_List->Process_Hash, - &Process_Info)) - { - g_critical("key found"); - g_critical("position in the list : %s", - gtk_tree_path_to_string ( - gtk_tree_row_reference_get_path( - (GtkTreeRowReference*)got_RowRef) - )); - - } + GValue a, b; + + memset(&a, 0, sizeof(GValue)); + memset(&b, 0, sizeof(GValue)); + + /* Order by PID */ + gtk_tree_model_get_value( model, + it_a, + PID_COLUMN, + &a); + + gtk_tree_model_get_value( model, + it_b, + PID_COLUMN, + &b); + + if(G_VALUE_TYPE(&a) == G_TYPE_UINT + && G_VALUE_TYPE(&b) == G_TYPE_UINT ) + { + if(g_value_get_uint(&a) > g_value_get_uint(&b)) + { + g_value_unset(&a); + g_value_unset(&b); + return 1; + } + if(g_value_get_uint(&a) < g_value_get_uint(&b)) + { + g_value_unset(&a); + g_value_unset(&b); + return 0; + } + } + + g_value_unset(&a); + g_value_unset(&b); + + + /* Order by birth second */ + gtk_tree_model_get_value( model, + it_a, + BIRTH_S_COLUMN, + &a); + + gtk_tree_model_get_value( model, + it_b, + BIRTH_S_COLUMN, + &b); + + + if(G_VALUE_TYPE(&a) == G_TYPE_ULONG + && G_VALUE_TYPE(&b) == G_TYPE_ULONG ) + { + if(g_value_get_ulong(&a) > g_value_get_ulong(&b)) + { + g_value_unset(&a); + g_value_unset(&b); + return 1; + } + if(g_value_get_ulong(&a) < g_value_get_ulong(&b)) + { + g_value_unset(&a); + g_value_unset(&b); + return 0; + } + + } + + g_value_unset(&a); + g_value_unset(&b); + + /* Order by birth nanosecond */ + gtk_tree_model_get_value( model, + it_a, + BIRTH_NS_COLUMN, + &a); + + gtk_tree_model_get_value( model, + it_b, + BIRTH_NS_COLUMN, + &b); + + + if(G_VALUE_TYPE(&a) == G_TYPE_ULONG + && G_VALUE_TYPE(&b) == G_TYPE_ULONG ) + { + if(g_value_get_ulong(&a) > g_value_get_ulong(&b)) + { + g_value_unset(&a); + g_value_unset(&b); + return 1; + } + // Final condition + //if(g_value_get_ulong(&a) < g_value_get_ulong(&b)) + //{ + // g_value_unset(&a); + // g_value_unset(&b); + // return 0; + //} + + } + + g_value_unset(&a); + g_value_unset(&b); + + return 0; } - guint hash_fct(gconstpointer key) { - return ((ProcessInfo*)key)->pid; + return ((ProcessInfo*)key)->pid; } gboolean equ_fct(gconstpointer a, gconstpointer b) { - if(((ProcessInfo*)a)->pid != ((ProcessInfo*)b)->pid) - return 0; - g_critical("compare %u and %u",((ProcessInfo*)a)->pid,((ProcessInfo*)b)->pid); - if(((ProcessInfo*)a)->birth.tv_sec != ((ProcessInfo*)b)->birth.tv_sec) - return 0; - g_critical("compare %u and %u",((ProcessInfo*)a)->birth.tv_sec,((ProcessInfo*)b)->birth.tv_sec); - - if(((ProcessInfo*)a)->birth.tv_nsec != ((ProcessInfo*)b)->birth.tv_nsec) - return 0; - g_critical("compare %u and %u",((ProcessInfo*)a)->birth.tv_nsec,((ProcessInfo*)b)->birth.tv_nsec); - - return 1; + if(((ProcessInfo*)a)->pid != ((ProcessInfo*)b)->pid) + return 0; +// g_critical("compare %u and %u",((ProcessInfo*)a)->pid,((ProcessInfo*)b)->pid); + if(((ProcessInfo*)a)->birth.tv_sec != ((ProcessInfo*)b)->birth.tv_sec) + return 0; +// g_critical("compare %u and %u",((ProcessInfo*)a)->birth.tv_sec,((ProcessInfo*)b)->birth.tv_sec); + + if(((ProcessInfo*)a)->birth.tv_nsec != ((ProcessInfo*)b)->birth.tv_nsec) + return 0; +// g_critical("compare %u and %u",((ProcessInfo*)a)->birth.tv_nsec,((ProcessInfo*)b)->birth.tv_nsec); + + return 1; } -void Destroy_hash_key(gpointer key); +void destroy_hash_key(gpointer key); -void Destroy_hash_data(gpointer data); +void destroy_hash_data(gpointer data); -ProcessList *ProcessList_construct(void) +ProcessList *processlist_construct(void) { - GtkTreeViewColumn *column; - GtkCellRenderer *renderer; - - ProcessList* Process_List = g_new(ProcessList,1); - - Process_List->Number_Of_Process = 0; - - /* Create the Process list */ - Process_List->Store_M = gtk_list_store_new ( N_COLUMNS, - G_TYPE_STRING, - G_TYPE_UINT, - G_TYPE_ULONG, - G_TYPE_ULONG); - - - Process_List->Process_List_VC = - gtk_tree_view_new_with_model - (GTK_TREE_MODEL (Process_List->Store_M)); - - g_object_unref (G_OBJECT (Process_List->Store_M)); - - gtk_tree_sortable_set_sort_func( - GTK_TREE_SORTABLE(Process_List->Store_M), - PID_COLUMN, - process_sort_func, - NULL, - NULL); - - gtk_tree_sortable_set_sort_column_id( - GTK_TREE_SORTABLE(Process_List->Store_M), - PID_COLUMN, - GTK_SORT_ASCENDING); - - Process_List->Process_Hash = g_hash_table_new_full( - hash_fct, equ_fct, - Destroy_hash_key, Destroy_hash_data - ); - - - gtk_tree_view_set_headers_visible( - GTK_TREE_VIEW(Process_List->Process_List_VC), FALSE); - - /* Create a column, associating the "text" attribute of the - * cell_renderer to the first column of the model */ - /* Columns alignment : 0.0 : Left 0.5 : Center 1.0 : Right */ - renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes ( "Process", - renderer, - "text", - PROCESS_COLUMN, - NULL); - gtk_tree_view_column_set_alignment (column, 0.0); - gtk_tree_view_column_set_fixed_width (column, 45); - gtk_tree_view_append_column ( - GTK_TREE_VIEW (Process_List->Process_List_VC), column); - - column = gtk_tree_view_column_new_with_attributes ( "PID", - renderer, - "text", - PID_COLUMN, - NULL); - gtk_tree_view_append_column ( - GTK_TREE_VIEW (Process_List->Process_List_VC), column); - - - column = gtk_tree_view_column_new_with_attributes ( "Birth sec", - renderer, - "text", - BIRTH_S_COLUMN, - NULL); - gtk_tree_view_append_column ( - GTK_TREE_VIEW (Process_List->Process_List_VC), column); - - //gtk_tree_view_column_set_visible(column, 0); - // - column = gtk_tree_view_column_new_with_attributes ( "Birth nsec", - renderer, - "text", - BIRTH_NS_COLUMN, - NULL); - gtk_tree_view_append_column ( - GTK_TREE_VIEW (Process_List->Process_List_VC), column); - - //gtk_tree_view_column_set_visible(column, 0); - - g_object_set_data_full( - G_OBJECT(Process_List->Process_List_VC), - "Process_List_Data", - Process_List, - (GDestroyNotify)ProcessList_destroy); - - send_test_data(Process_List); - - return Process_List; + GtkTreeViewColumn *column; + GtkCellRenderer *renderer; + + ProcessList* process_list = g_new(ProcessList,1); + + process_list->number_of_process = 0; + + /* Create the Process list */ + process_list->Store_M = gtk_list_store_new ( N_COLUMNS, + G_TYPE_STRING, + G_TYPE_UINT, + G_TYPE_ULONG, + G_TYPE_ULONG); + + + process_list->process_list_VC = + gtk_tree_view_new_with_model + (GTK_TREE_MODEL (process_list->Store_M)); + + g_object_unref (G_OBJECT (process_list->Store_M)); + + gtk_tree_sortable_set_sort_func( + GTK_TREE_SORTABLE(process_list->Store_M), + PID_COLUMN, + process_sort_func, + NULL, + NULL); + + gtk_tree_sortable_set_sort_column_id( + GTK_TREE_SORTABLE(process_list->Store_M), + PID_COLUMN, + GTK_SORT_ASCENDING); + + process_list->process_hash = g_hash_table_new_full( + hash_fct, equ_fct, + destroy_hash_key, destroy_hash_data + ); + + + gtk_tree_view_set_headers_visible( + GTK_TREE_VIEW(process_list->process_list_VC), FALSE); + + /* Create a column, associating the "text" attribute of the + * cell_renderer to the first column of the model */ + /* Columns alignment : 0.0 : Left 0.5 : Center 1.0 : Right */ + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes ( "Process", + renderer, + "text", + PROCESS_COLUMN, + NULL); + gtk_tree_view_column_set_alignment (column, 0.0); + gtk_tree_view_column_set_fixed_width (column, 45); + gtk_tree_view_append_column ( + GTK_TREE_VIEW (process_list->process_list_VC), column); + + column = gtk_tree_view_column_new_with_attributes ( "PID", + renderer, + "text", + PID_COLUMN, + NULL); + gtk_tree_view_append_column ( + GTK_TREE_VIEW (process_list->process_list_VC), column); + + + column = gtk_tree_view_column_new_with_attributes ( "Birth sec", + renderer, + "text", + BIRTH_S_COLUMN, + NULL); + gtk_tree_view_append_column ( + GTK_TREE_VIEW (process_list->process_list_VC), column); + + //gtk_tree_view_column_set_visible(column, 0); + // + column = gtk_tree_view_column_new_with_attributes ( "Birth nsec", + renderer, + "text", + BIRTH_NS_COLUMN, + NULL); + gtk_tree_view_append_column ( + GTK_TREE_VIEW (process_list->process_list_VC), column); + + //gtk_tree_view_column_set_visible(column, 0); + + g_object_set_data_full( + G_OBJECT(process_list->process_list_VC), + "process_list_Data", + process_list, + (GDestroyNotify)processlist_destroy); + + process_list->Test_Process_Sent = 0; + + return process_list; } -void ProcessList_destroy(ProcessList *Process_List) +void processlist_destroy(ProcessList *process_list) { - g_hash_table_destroy(Process_List->Process_Hash); - Process_List->Process_Hash = NULL; + g_hash_table_destroy(process_list->process_hash); + process_list->process_hash = NULL; - g_free(Process_List); + g_free(process_list); } -GtkWidget *ProcessList_getWidget(ProcessList *Process_List) +GtkWidget *processlist_get_widget(ProcessList *process_list) { - return Process_List->Process_List_VC; + return process_list->process_list_VC; } gint get_cell_height(GtkTreeView *TreeView) { - gint height; - GtkTreeViewColumn *Column = gtk_tree_view_get_column(TreeView, 0); - GList *Render_List = gtk_tree_view_column_get_cell_renderers(Column); - GtkCellRenderer *Renderer = g_list_first(Render_List)->data; - - gtk_tree_view_column_cell_get_size(Column, NULL, NULL, NULL, NULL, &height); - g_critical("cell 0 height : %u",height); - - return height; + gint height; + GtkTreeViewColumn *Column = gtk_tree_view_get_column(TreeView, 0); + //GList *Render_List = gtk_tree_view_column_get_cell_renderers(Column); + //GtkCellRenderer *Renderer = g_list_first(Render_List)->data; + + //g_list_free(Render_List); + gtk_tree_view_column_cell_get_size(Column, NULL, NULL, NULL, NULL, &height); + //g_critical("cell 0 height : %u",height); + + return height; +} + +void destroy_hash_key(gpointer key) +{ + g_free(key); } -void Destroy_hash_key(gpointer key) +void destroy_hash_data(gpointer data) { - g_free(key); + g_free(data); } -void Destroy_hash_data(gpointer data) +int processlist_add( ProcessList *process_list, + guint pid, + LttTime *birth, + gchar *name, + guint *height, + HashedProcessData **pmhashed_process_data) { - g_free(data); + GtkTreeIter iter ; + ProcessInfo *Process_Info = g_new(ProcessInfo, 1); + HashedProcessData *hashed_process_data = g_new(HashedProcessData, 1); + *pmhashed_process_data = hashed_process_data; + + Process_Info->pid = pid; + Process_Info->birth = *birth; + + hashed_process_data->draw_context = g_new(DrawContext, 1); + hashed_process_data->draw_context->drawable = NULL; + hashed_process_data->draw_context->gc = NULL; + hashed_process_data->draw_context->pango_layout = NULL; + hashed_process_data->draw_context->current = g_new(DrawInfo,1); + hashed_process_data->draw_context->current->over = g_new(ItemInfo,1); + hashed_process_data->draw_context->current->over->x = -1; + hashed_process_data->draw_context->current->over->y = -1; + hashed_process_data->draw_context->current->middle = g_new(ItemInfo,1); + hashed_process_data->draw_context->current->middle->x = -1; + hashed_process_data->draw_context->current->middle->y = -1; + hashed_process_data->draw_context->current->under = g_new(ItemInfo,1); + hashed_process_data->draw_context->current->under->x = -1; + hashed_process_data->draw_context->current->under->y = -1; + hashed_process_data->draw_context->current->modify_over = g_new(ItemInfo,1); + hashed_process_data->draw_context->current->modify_over->x = -1; + hashed_process_data->draw_context->current->modify_over->y = -1; + hashed_process_data->draw_context->current->modify_middle = g_new(ItemInfo,1); + hashed_process_data->draw_context->current->modify_middle->x = -1; + hashed_process_data->draw_context->current->modify_middle->y = -1; + hashed_process_data->draw_context->current->modify_under = g_new(ItemInfo,1); + hashed_process_data->draw_context->current->modify_under->x = -1; + hashed_process_data->draw_context->current->modify_under->y = -1; + hashed_process_data->draw_context->current->status = LTTV_STATE_UNNAMED; + hashed_process_data->draw_context->previous = g_new(DrawInfo,1); + hashed_process_data->draw_context->previous->over = g_new(ItemInfo,1); + hashed_process_data->draw_context->previous->over->x = -1; + hashed_process_data->draw_context->previous->over->y = -1; + hashed_process_data->draw_context->previous->middle = g_new(ItemInfo,1); + hashed_process_data->draw_context->previous->middle->x = -1; + hashed_process_data->draw_context->previous->middle->y = -1; + hashed_process_data->draw_context->previous->under = g_new(ItemInfo,1); + hashed_process_data->draw_context->previous->under->x = -1; + hashed_process_data->draw_context->previous->under->y = -1; + hashed_process_data->draw_context->previous->modify_over = g_new(ItemInfo,1); + hashed_process_data->draw_context->previous->modify_over->x = -1; + hashed_process_data->draw_context->previous->modify_over->y = -1; + hashed_process_data->draw_context->previous->modify_middle = g_new(ItemInfo,1); + hashed_process_data->draw_context->previous->modify_middle->x = -1; + hashed_process_data->draw_context->previous->modify_middle->y = -1; + hashed_process_data->draw_context->previous->modify_under = g_new(ItemInfo,1); + hashed_process_data->draw_context->previous->modify_under->x = -1; + hashed_process_data->draw_context->previous->modify_under->y = -1; + hashed_process_data->draw_context->previous->status = LTTV_STATE_UNNAMED; + + /* Add a new row to the model */ + gtk_list_store_append ( process_list->Store_M, &iter); + //g_critical ( "iter before : %s", gtk_tree_path_to_string ( + // gtk_tree_model_get_path ( + // GTK_TREE_MODEL(process_list->Store_M), + // &iter))); + gtk_list_store_set ( process_list->Store_M, &iter, + PROCESS_COLUMN, name, + PID_COLUMN, pid, + BIRTH_S_COLUMN, birth->tv_sec, + BIRTH_NS_COLUMN, birth->tv_nsec, + -1); + hashed_process_data->RowRef = gtk_tree_row_reference_new ( + GTK_TREE_MODEL(process_list->Store_M), + gtk_tree_model_get_path( + GTK_TREE_MODEL(process_list->Store_M), + &iter)); + g_hash_table_insert( process_list->process_hash, + (gpointer)Process_Info, + (gpointer)hashed_process_data); + + //g_critical ( "iter after : %s", gtk_tree_path_to_string ( + // gtk_tree_model_get_path ( + // GTK_TREE_MODEL(process_list->Store_M), + // &iter))); + process_list->number_of_process++; + + *height = get_cell_height(GTK_TREE_VIEW(process_list->process_list_VC)) + * process_list->number_of_process ; + + + return 0; + } -int ProcessList_add( ProcessList *Process_List, - guint pid, - LttTime *birth, - guint *height) +int processlist_remove( ProcessList *process_list, + guint pid, + LttTime *birth) { - GtkTreeIter iter ; - ProcessInfo *Process_Info = g_new(ProcessInfo, 1); - GtkTreeRowReference *RowRef; - - Process_Info->pid = pid; - Process_Info->birth = *birth; - - /* Add a new row to the model */ - gtk_list_store_append ( Process_List->Store_M, &iter); - g_critical ( "iter before : %s", gtk_tree_path_to_string ( - gtk_tree_model_get_path ( - GTK_TREE_MODEL(Process_List->Store_M), - &iter))); - gtk_list_store_set ( Process_List->Store_M, &iter, - PROCESS_COLUMN, "name", - PID_COLUMN, pid, - BIRTH_S_COLUMN, birth->tv_sec, - BIRTH_NS_COLUMN, birth->tv_nsec, - -1); - RowRef = gtk_tree_row_reference_new ( - GTK_TREE_MODEL(Process_List->Store_M), - gtk_tree_model_get_path( - GTK_TREE_MODEL(Process_List->Store_M), - &iter)); - - g_hash_table_insert( Process_List->Process_Hash, - (gpointer)Process_Info, - (gpointer)RowRef); - - g_critical ( "iter after : %s", gtk_tree_path_to_string ( - gtk_tree_model_get_path ( - GTK_TREE_MODEL(Process_List->Store_M), - &iter))); - Process_List->Number_Of_Process++; - - *height = get_cell_height(GTK_TREE_VIEW(Process_List->Process_List_VC)) - * Process_List->Number_Of_Process ; - - - return 0; - + ProcessInfo Process_Info; + gint *path_indices; + HashedProcessData *hashed_process_data; + GtkTreeIter iter; + + Process_Info.pid = pid; + Process_Info.birth = *birth; + + + if(hashed_process_data = + (HashedProcessData*)g_hash_table_lookup( + process_list->process_hash, + &Process_Info)) + { + gtk_tree_model_get_iter ( + GTK_TREE_MODEL(process_list->Store_M), + &iter, + gtk_tree_row_reference_get_path( + (GtkTreeRowReference*)hashed_process_data->RowRef) + ); + + gtk_list_store_remove (process_list->Store_M, &iter); + + g_free(hashed_process_data->draw_context->previous->modify_under); + g_free(hashed_process_data->draw_context->previous->modify_middle); + g_free(hashed_process_data->draw_context->previous->modify_over); + g_free(hashed_process_data->draw_context->previous->under); + g_free(hashed_process_data->draw_context->previous->middle); + g_free(hashed_process_data->draw_context->previous->over); + g_free(hashed_process_data->draw_context->previous); + g_free(hashed_process_data->draw_context->current->modify_under); + g_free(hashed_process_data->draw_context->current->modify_middle); + g_free(hashed_process_data->draw_context->current->modify_over); + g_free(hashed_process_data->draw_context->current->under); + g_free(hashed_process_data->draw_context->current->middle); + g_free(hashed_process_data->draw_context->current->over); + g_free(hashed_process_data->draw_context->current); + g_free(hashed_process_data->draw_context); + g_free(hashed_process_data); + + g_hash_table_remove(process_list->process_hash, + &Process_Info); + + process_list->number_of_process--; + + return 0; + } else { + return 1; + } } -int ProcessList_remove( ProcessList *Process_List, - guint pid, - LttTime *birth) + +guint processlist_get_height(ProcessList *process_list) { - ProcessInfo Process_Info; - gint *path_indices; - GtkTreeRowReference *got_RowRef; - GtkTreeIter iter; - - Process_Info.pid = pid; - Process_Info.birth = *birth; - - if(got_RowRef = - (GtkTreeRowReference*)g_hash_table_lookup( - Process_List->Process_Hash, - &Process_Info)) - { - gtk_tree_model_get_iter ( - GTK_TREE_MODEL(Process_List->Store_M), - &iter, - gtk_tree_row_reference_get_path( - (GtkTreeRowReference*)got_RowRef) - ); - - gtk_list_store_remove (Process_List->Store_M, &iter); - - g_hash_table_remove(Process_List->Process_Hash, - &Process_Info); - - Process_List->Number_Of_Process--; - - return 0; - } else { - return 1; - } + return get_cell_height(GTK_TREE_VIEW(process_list->process_list_VC)) + * process_list->number_of_process ; } -guint ProcessList_get_height(ProcessList *Process_List) +gint processlist_get_process_pixels( ProcessList *process_list, + guint pid, LttTime *birth, + guint *y, + guint *height, + HashedProcessData **pmhashed_process_data) { - return get_cell_height(GTK_TREE_VIEW(Process_List->Process_List_VC)) - * Process_List->Number_Of_Process ; + ProcessInfo Process_Info; + gint *path_indices; + GtkTreePath *tree_path; + HashedProcessData *hashed_process_data = NULL; + + Process_Info.pid = pid; + Process_Info.birth = *birth; + + if(hashed_process_data = + (HashedProcessData*)g_hash_table_lookup( + process_list->process_hash, + &Process_Info)) + { + tree_path = gtk_tree_row_reference_get_path( + hashed_process_data->RowRef); + path_indices = gtk_tree_path_get_indices (tree_path); + + *height = get_cell_height( + GTK_TREE_VIEW(process_list->process_list_VC)); + *y = *height * path_indices[0]; + *pmhashed_process_data = hashed_process_data; + return 0; + } else { + *pmhashed_process_data = hashed_process_data; + return 1; + } + } -gint ProcessList_get_process_pixels( ProcessList *Process_List, - guint pid, LttTime *birth, - guint *x, - guint *height) +gint processlist_get_pixels_from_data( ProcessList *process_list, + ProcessInfo *process_info, + HashedProcessData *hashed_process_data, + guint *y, + guint *height) { - ProcessInfo Process_Info; - gint *path_indices; - GtkTreeRowReference *got_RowRef; - - Process_Info.pid = pid; - Process_Info.birth = *birth; - - if(got_RowRef = - (GtkTreeRowReference*)g_hash_table_lookup( - Process_List->Process_Hash, - &Process_Info)) - { - path_indices = gtk_tree_path_get_indices ( - gtk_tree_row_reference_get_path( - (GtkTreeRowReference*)got_RowRef) - ); - - *height = get_cell_height( - GTK_TREE_VIEW(Process_List->Process_List_VC)); - *x = *height * path_indices[0]; - - return 0; - } else { - return 1; - } + gint *path_indices; + GtkTreePath *tree_path; + + tree_path = gtk_tree_row_reference_get_path( + hashed_process_data->RowRef); + path_indices = gtk_tree_path_get_indices (tree_path); + *height = get_cell_height( + GTK_TREE_VIEW(process_list->process_list_VC)); + *y = *height * path_indices[0]; + return 0; }