From 5f16133f507054edf95e61cefdc3fd04552b0925 Mon Sep 17 00:00:00 2001 From: compudj Date: Mon, 29 Sep 2003 12:11:26 +0000 Subject: [PATCH] test data sent from hook file, square insert implemented git-svn-id: http://ltt.polymtl.ca/svn@277 04897980-b3bd-0310-b5e0-8ef037075253 --- .../poly/lttv/modules/guiControlFlow/CFV.c | 2 + .../lttv/modules/guiControlFlow/Drawing.c | 109 +++++++++++++++++ .../lttv/modules/guiControlFlow/Drawing.h | 14 +++ .../lttv/modules/guiControlFlow/Event_Hooks.c | 91 +++++++++++++++ .../lttv/modules/guiControlFlow/Event_Hooks.h | 3 + .../modules/guiControlFlow/Process_List.c | 110 ------------------ .../modules/guiControlFlow/Process_List.h | 24 ++++ 7 files changed, 243 insertions(+), 110 deletions(-) diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/CFV.c b/ltt/branches/poly/lttv/modules/guiControlFlow/CFV.c index d69617a4..2233e332 100644 --- a/ltt/branches/poly/lttv/modules/guiControlFlow/CFV.c +++ b/ltt/branches/poly/lttv/modules/guiControlFlow/CFV.c @@ -147,6 +147,8 @@ GuiControlFlow(void) g_slist_append(gControl_Flow_Data_List,Control_Flow_Data); + send_test_data(Control_Flow_Data->Process_List); + return Control_Flow_Data; } diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.c b/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.c index a7120b93..572f4510 100644 --- a/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.c +++ b/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.c @@ -322,3 +322,112 @@ void Drawing_Resize(Drawing_t *Drawing, guint h, guint w) } +/* Insert a square corresponding to a new process in the list */ +/* Applies to whole Drawing->width */ +void Drawing_Insert_Square(Drawing_t *Drawing, + guint y, + guint height) +{ + GdkRectangle update_rect; + + /* Allocate a new pixmap with new height */ + GdkPixmap *Pixmap = gdk_pixmap_new(Drawing->Drawing_Area_V->window, + Drawing->width, + Drawing->height + height, + -1); + + /* Copy the high region */ + gdk_draw_drawable (Pixmap, + Drawing->Drawing_Area_V->style->black_gc, + Drawing->Pixmap, + 0, 0, + 0, 0, + Drawing->width, y); + + + + + /* add an empty square */ + gdk_draw_rectangle (Pixmap, + Drawing->Drawing_Area_V->style->white_gc, + TRUE, + 0, y, + Drawing->width, // do not overlap + height); + + + + /* copy the bottom of the region */ + gdk_draw_drawable (Pixmap, + Drawing->Drawing_Area_V->style->black_gc, + Drawing->Pixmap, + 0, y, + 0, y + height, + Drawing->width, Drawing->height - y); + + + + + if (Drawing->Pixmap) + gdk_pixmap_unref(Drawing->Pixmap); + + Drawing->Pixmap = Pixmap; + + Drawing->height+=height; + + /* Rectangle to update, from new Drawing dimensions */ + update_rect.x = 0 ; + update_rect.y = y ; + update_rect.width = Drawing->width; + update_rect.height = Drawing->height - y ; + gtk_widget_draw( Drawing->Drawing_Area_V, &update_rect); +} + + +/* Remove a square corresponding to a removed process in the list */ +void Drawing_Remove_Square(Drawing_t *Drawing, + guint y, + guint height) +{ + GdkRectangle update_rect; + + /* Allocate a new pixmap with new height */ + GdkPixmap *Pixmap = gdk_pixmap_new( + Drawing->Drawing_Area_V->window, + Drawing->width, + Drawing->height - height, + -1); + + /* Copy the high region */ + gdk_draw_drawable (Pixmap, + Drawing->Drawing_Area_V->style->black_gc, + Drawing->Pixmap, + 0, 0, + 0, 0, + Drawing->width, y); + + + + /* Copy up the bottom of the region */ + gdk_draw_drawable (Pixmap, + Drawing->Drawing_Area_V->style->black_gc, + Drawing->Pixmap, + 0, y + height, + 0, y, + Drawing->width, Drawing->height - y - height); + + + if (Drawing->Pixmap) + gdk_pixmap_unref(Drawing->Pixmap); + + Drawing->Pixmap = Pixmap; + + Drawing->height-=height; + + /* Rectangle to update, from new Drawing dimensions */ + update_rect.x = 0 ; + update_rect.y = y ; + update_rect.width = Drawing->width; + update_rect.height = Drawing->height - y ; + gtk_widget_draw( Drawing->Drawing_Area_V, &update_rect); +} diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.h b/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.h index 22d2224b..947f9bfd 100644 --- a/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.h +++ b/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.h @@ -13,6 +13,10 @@ * Refresh the physical screen with the pixmap * A helper function is provided here to convert from time and process * identifier to pixels and the contrary (will be useful for mouse selection). + * Insert an empty square in the drawing, moving the bottom part. + * + * The pixmap used has the width of the physical window, but the height + * of the shown processes. */ typedef struct _Drawing_t Drawing_t; @@ -37,6 +41,16 @@ void Drawing_draw_line( Drawing_t *Drawing, // guint xdest, guint ydest, // guint width, guint height); +/* Insert a square corresponding to a new process in the list */ +void Drawing_Insert_Square(Drawing_t *Drawing, + guint y, + guint height); + +/* Remove a square corresponding to a removed process in the list */ +void Drawing_Remove_Square(Drawing_t *Drawing, + guint y, + guint height); + //void Drawing_Resize(Drawing_t *Drawing, guint h, guint w); diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/Event_Hooks.c b/ltt/branches/poly/lttv/modules/guiControlFlow/Event_Hooks.c index 781f772b..bc278874 100644 --- a/ltt/branches/poly/lttv/modules/guiControlFlow/Event_Hooks.c +++ b/ltt/branches/poly/lttv/modules/guiControlFlow/Event_Hooks.c @@ -5,11 +5,102 @@ #include #include +#include + #include #include #include "Event_Hooks.h" #include "CFV.h" +#include "Process_List.h" + +void send_test_data(ProcessList *Process_List) +{ + 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<10; 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) + )); + + } + +} + + /** * Event Viewer's constructor hook diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/Event_Hooks.h b/ltt/branches/poly/lttv/modules/guiControlFlow/Event_Hooks.h index ef430875..329718d0 100644 --- a/ltt/branches/poly/lttv/modules/guiControlFlow/Event_Hooks.h +++ b/ltt/branches/poly/lttv/modules/guiControlFlow/Event_Hooks.h @@ -9,6 +9,9 @@ #include #include +#include "Process_List.h" + +void send_test_data(ProcessList *Process_List); GtkWidget *hGuiControlFlow(mainWindow *pmParentWindow); diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/Process_List.c b/ltt/branches/poly/lttv/modules/guiControlFlow/Process_List.c index 2e416d07..a9da1fda 100644 --- a/ltt/branches/poly/lttv/modules/guiControlFlow/Process_List.c +++ b/ltt/branches/poly/lttv/modules/guiControlFlow/Process_List.c @@ -8,27 +8,6 @@ * 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 { @@ -153,93 +132,6 @@ gint process_sort_func ( GtkTreeModel *model, } -void send_test_data(ProcessList *Process_List) -{ - 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<10; 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) - )); - - } - -} - - guint hash_fct(gconstpointer key) { return ((ProcessInfo*)key)->pid; @@ -361,8 +253,6 @@ ProcessList *ProcessList_construct(void) Process_List, (GDestroyNotify)ProcessList_destroy); - send_test_data(Process_List); - return Process_List; } void ProcessList_destroy(ProcessList *Process_List) diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/Process_List.h b/ltt/branches/poly/lttv/modules/guiControlFlow/Process_List.h index ef38a9a2..1daabdd6 100644 --- a/ltt/branches/poly/lttv/modules/guiControlFlow/Process_List.h +++ b/ltt/branches/poly/lttv/modules/guiControlFlow/Process_List.h @@ -15,8 +15,32 @@ * note : the sync with drawing is left to the caller. * provides helper function to convert a process unique identifier to * pixels (in height). + * + * //FIXME : connect the scrolled window adjustment with the 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; + +}; + + typedef struct _ProcessList ProcessList; ProcessList *ProcessList_construct(void); -- 2.34.1