g_slist_append(gControl_Flow_Data_List,Control_Flow_Data);
+ send_test_data(Control_Flow_Data->Process_List);
+
return Control_Flow_Data;
}
}
+/* 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);
+}
* 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;
// 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);
#include <gtk/gtk.h>
#include <gdk/gdk.h>
+#include <glib.h>
+
#include <lttv/hook.h>
#include <lttv/common.h>
#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
#include <gtk/gtk.h>
#include <lttv/mainWindow.h>
+#include "Process_List.h"
+
+void send_test_data(ProcessList *Process_List);
GtkWidget *hGuiControlFlow(mainWindow *pmParentWindow);
* 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
{
}
-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;
Process_List,
(GDestroyNotify)ProcessList_destroy);
- send_test_data(Process_List);
-
return Process_List;
}
void ProcessList_destroy(ProcessList *Process_List)
* 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);