diff options
author | Gerald Combs <gerald@wireshark.org> | 2005-09-21 03:28:22 +0000 |
---|---|---|
committer | Gerald Combs <gerald@wireshark.org> | 2005-09-21 03:28:22 +0000 |
commit | ad99e218ca9eeb0a8d7f997676d76f8d4f96230f (patch) | |
tree | 9607af15bf4323da2a5ebbc3e3af179cb55be5d0 /gtk | |
parent | 13e99476e60e3176664892541d0015ab5a007c4f (diff) |
In an attempt to fix bug 396, switch over to GStrings. There still appears
to be a problem with formatting, but we don't crash any more.
svn path=/trunk/; revision=15923
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/graph_analysis.c | 1632 |
1 files changed, 805 insertions, 827 deletions
diff --git a/gtk/graph_analysis.c b/gtk/graph_analysis.c index 456ea668b0..f8dfa0a418 100644 --- a/gtk/graph_analysis.c +++ b/gtk/graph_analysis.c @@ -121,7 +121,7 @@ static void graph_analysis_reset(graph_analysis_data_t* user_data) g_free((void *)user_data->nodes[i].data); user_data->nodes[i].data = NULL; } - + user_data->dlg.first_node=0; user_data->dlg.first_item=0; user_data->dlg.left_x_border=0; @@ -141,24 +141,24 @@ static void graph_analysis_init_dlg(graph_analysis_data_t* user_data) user_data->nodes[i].len = 0; user_data->nodes[i].data = NULL; } - + user_data->dlg.first_node=0; user_data->dlg.first_item=0; user_data->dlg.left_x_border=0; user_data->dlg.selected_item=0xFFFFFFFF; /*not item selected */ - /* init dialog_graph */ - user_data->dlg.needs_redraw=TRUE; - user_data->dlg.draw_area_time=NULL; - user_data->dlg.draw_area=NULL; - user_data->dlg.pixmap=NULL; - user_data->dlg.pixmap_time=NULL; + /* init dialog_graph */ + user_data->dlg.needs_redraw=TRUE; + user_data->dlg.draw_area_time=NULL; + user_data->dlg.draw_area=NULL; + user_data->dlg.pixmap=NULL; + user_data->dlg.pixmap_time=NULL; user_data->dlg.draw_area_comments=NULL; - user_data->dlg.pixmap_comments=NULL; - user_data->dlg.v_scrollbar=NULL; - user_data->dlg.v_scrollbar_adjustment=NULL; + user_data->dlg.pixmap_comments=NULL; + user_data->dlg.v_scrollbar=NULL; + user_data->dlg.v_scrollbar_adjustment=NULL; user_data->dlg.hpane=NULL; user_data->dlg.pixmap_width = 350; - user_data->dlg.pixmap_height=400; + user_data->dlg.pixmap_height=400; user_data->dlg.first_node=0; user_data->dlg.first_item=0; user_data->dlg.left_x_border=0; @@ -206,30 +206,21 @@ static void draw_arrow(GdkDrawable *pixmap, GdkGC *gc, gint x, gint y, gboolean arrow_point[2].y = y+HEIGHT_ARROW/2;; if (GDK_IS_DRAWABLE(pixmap)) { - gdk_draw_polygon(pixmap, gc, TRUE, - arrow_point, 3); + gdk_draw_polygon(pixmap, gc, TRUE, arrow_point, 3); } } /****************************************************************************/ -/* adds trailing characters to complete the requested length */ -/* NB: does not allocate new memory for the string, there must be enough */ +/* Adds trailing characters to complete the requested length. */ /****************************************************************************/ -static void enlarge_string(char *string, guint32 length, char pad){ +static void enlarge_string(GString *gstr, guint32 length, char pad){ - guint32 i,l; + guint32 i; - l = strlen(string); - - if (l>=length){ - return; - } - - for (i=l;i<length;i++){ - string[i]=pad; + for (i = gstr->len; i < length; i++){ + g_string_append_c(gstr, pad); } - string[length]='\0'; } /****************************************************************************/ @@ -238,30 +229,35 @@ static void enlarge_string(char *string, guint32 length, char pad){ /* NB: it does not check that p1 and p2 fit into string */ /****************************************************************************/ -static void overwrite (char *string, char *text_to_insert, guint32 p1, guint32 p2){ +static void overwrite (GString *gstr, char *text_to_insert, guint32 p1, guint32 p2){ - guint32 first, last, i; + guint32 pos, len; if (p1 == p2) return; if (p1 > p2){ - first = p2; - last = p1; + pos = p2; + len = p1 - p2; } else{ - first = p1; - last = p2; + pos = p1; + len = p2 - p1; } - if ((unsigned int)(last - first)>strlen(text_to_insert)){ - last = first + strlen(text_to_insert); + if (len > strlen(text_to_insert)){ + len = strlen(text_to_insert); } - for (i=first;i<last;i++){ - string[i]=text_to_insert[i-first]; - } - return; + if (pos > gstr->len) + pos = gstr->len; + + if (pos + len > gstr->len) + g_string_truncate(gstr, pos); + else + g_string_erase(gstr, pos, len); + + g_string_insert(gstr, pos, text_to_insert); } @@ -269,203 +265,190 @@ static void overwrite (char *string, char *text_to_insert, guint32 p1, guint32 p static gboolean dialog_graph_dump_to_file(graph_analysis_data_t* user_data) { guint32 i, first_node, display_items, display_nodes; - guint32 start_position, end_position, item_width, header_length; + guint32 start_position, end_position, item_width, header_length; guint32 current_item; - graph_analysis_item_t *gai; - guint16 first_conv_num; - gboolean several_convs = FALSE; - gboolean first_packet = TRUE; - - char label_string[MAX_COMMENT]; - char *empty_line,* separator_line,*tmp_str, *tmp_str2, *empty_header; - char src_port[8],dst_port[8]; - - GList* list; - - FILE *of; - - of = fopen(user_data->dlg.save_file,"w"); - if (of==NULL){ - return FALSE; - } + graph_analysis_item_t *gai; + guint16 first_conv_num; + gboolean several_convs = FALSE; + gboolean first_packet = TRUE; - /* get the items to display and fill the matrix array */ - list = g_list_first(user_data->graph_info->list); - current_item = 0; - i = 0; - while (list) - { - gai = list->data; - if (gai->display){ - user_data->dlg.items[current_item].frame_num = gai->frame_num; - user_data->dlg.items[current_item].time = gai->time; - user_data->dlg.items[current_item].port_src = gai->port_src; - user_data->dlg.items[current_item].port_dst = gai->port_dst; - user_data->dlg.items[current_item].frame_label = gai->frame_label; - user_data->dlg.items[current_item].comment = gai->comment; - if (first_packet){ - first_conv_num = gai->conv_num; - first_packet=FALSE; - } - if (user_data->dlg.items[current_item].conv_num != first_conv_num){ - several_convs = TRUE; - } - user_data->dlg.items[current_item].conv_num = gai->conv_num; - user_data->dlg.items[current_item].src_node = gai->src_node; - user_data->dlg.items[current_item].dst_node = gai->dst_node; - current_item++; - i++; - } + GString *label_string, *empty_line,*separator_line, *tmp_str, *tmp_str2; + char *empty_header; + char src_port[8],dst_port[8]; + + GList* list; - list = g_list_next(list); + FILE *of; + + of = fopen(user_data->dlg.save_file,"w"); + if (of==NULL){ + return FALSE; + } + + label_string = g_string_new(""); + empty_line = g_string_new(""); + separator_line = g_string_new(""); + tmp_str = g_string_new(""); + tmp_str2 = g_string_new(""); + + /* get the items to display and fill the matrix array */ + list = g_list_first(user_data->graph_info->list); + current_item = 0; + i = 0; + while (list) + { + gai = list->data; + if (gai->display){ + user_data->dlg.items[current_item].frame_num = gai->frame_num; + user_data->dlg.items[current_item].time = gai->time; + user_data->dlg.items[current_item].port_src = gai->port_src; + user_data->dlg.items[current_item].port_dst = gai->port_dst; + user_data->dlg.items[current_item].frame_label = gai->frame_label; + user_data->dlg.items[current_item].comment = gai->comment; + user_data->dlg.items[current_item].conv_num = gai->conv_num; + user_data->dlg.items[current_item].src_node = gai->src_node; + user_data->dlg.items[current_item].dst_node = gai->dst_node; + if (first_packet){ + first_conv_num = gai->conv_num; + first_packet=FALSE; + } + if (user_data->dlg.items[current_item].conv_num != first_conv_num){ + several_convs = TRUE; + } + current_item++; + i++; } - display_items = current_item; - /* if not items to display */ - if (display_items == 0) return TRUE; + list = g_list_next(list); + } + display_items = current_item; - display_nodes=user_data->num_nodes; + /* if not items to display */ + if (display_items == 0) return TRUE; - first_node = user_data->dlg.first_node; + display_nodes = user_data->num_nodes; - /* Write the conv. and time headers */ + first_node = user_data->dlg.first_node; - if (several_convs){ - fprintf (of, CONV_TIME_HEADER); - empty_header = g_strdup(CONV_TIME_EMPTY_HEADER); - header_length=CONV_TIME_HEADER_LENGTH; - } - else{ - fprintf (of, TIME_HEADER); - empty_header = g_strdup(TIME_EMPTY_HEADER); - header_length=TIME_HEADER_LENGTH; - } - - empty_line = g_strdup(""); - - - /* Write the node names on top */ - for (i=0; i<display_nodes; i++){ - /* print the node identifiers */ - g_snprintf(label_string, NODE_CHARS_WIDTH, "| %s", - get_addr_name(&(user_data->nodes[i+first_node]))); - enlarge_string(label_string,NODE_CHARS_WIDTH,' '); - fprintf(of,label_string); - strcpy(label_string,"| "); - enlarge_string(label_string,NODE_CHARS_WIDTH,' '); - tmp_str = g_strdup(empty_line); - g_free(empty_line); - empty_line = g_strdup_printf("%s%s",tmp_str,label_string); - g_free(tmp_str); - } - tmp_str = g_strdup(empty_line); - g_free(empty_line); - empty_line = g_strdup_printf("%s|",tmp_str); - g_free(tmp_str); + /* Write the conv. and time headers */ - separator_line = g_malloc(strlen(empty_line)+header_length+1); - separator_line[0]='\0'; - enlarge_string(separator_line,strlen(empty_line)+header_length,'-'); - separator_line[strlen(separator_line)-1]='\n'; + if (several_convs){ + fprintf (of, CONV_TIME_HEADER); + empty_header = CONV_TIME_EMPTY_HEADER; + header_length = CONV_TIME_HEADER_LENGTH; + } + else{ + fprintf (of, TIME_HEADER); + empty_header = TIME_EMPTY_HEADER; + header_length = TIME_HEADER_LENGTH; + } + /* Write the node names on top */ + for (i=0; i<display_nodes; i++){ + /* print the node identifiers */ + g_string_sprintf(label_string, "| %s", + get_addr_name(&(user_data->nodes[i+first_node]))); + enlarge_string(label_string, NODE_CHARS_WIDTH, ' '); + fprintf(of, "%s", label_string->str); + g_string_sprintf(label_string, "| "); + enlarge_string(label_string, NODE_CHARS_WIDTH, ' '); + g_string_append(empty_line, label_string->str); + } + g_string_append_c(empty_line, '|'); - fprintf(of,"|\n"); + enlarge_string(separator_line, empty_line->len + header_length, '-'); - /* - * Draw the items - */ + fprintf(of, "|\n"); - for (current_item=0; current_item<display_items; current_item++){ + /* + * Draw the items + */ - start_position = (user_data->dlg.items[current_item].src_node-first_node)*NODE_CHARS_WIDTH+NODE_CHARS_WIDTH/2; + for (current_item=0; current_item<display_items; current_item++){ - end_position = (user_data->dlg.items[current_item].dst_node-first_node)*NODE_CHARS_WIDTH+NODE_CHARS_WIDTH/2; - - if (start_position > end_position){ - item_width=start_position-end_position; - } - else if (start_position < end_position){ - item_width=end_position-start_position; - } - else{ /* same origin and destination address */ - end_position = start_position+NODE_CHARS_WIDTH; - item_width = NODE_CHARS_WIDTH; - } + start_position = (user_data->dlg.items[current_item].src_node-first_node)*NODE_CHARS_WIDTH+NODE_CHARS_WIDTH/2; - /* separator between conversations */ - if (user_data->dlg.items[current_item].conv_num != first_conv_num){ - fprintf(of,separator_line); - first_conv_num=user_data->dlg.items[current_item].conv_num; - } + end_position = (user_data->dlg.items[current_item].dst_node-first_node)*NODE_CHARS_WIDTH+NODE_CHARS_WIDTH/2; - /* write the conversation number */ - if (several_convs){ - g_snprintf(label_string, 5, "%i", user_data->dlg.items[current_item].conv_num); - enlarge_string(label_string,5,' '); - fprintf(of,"%s",label_string); - } + if (start_position > end_position){ + item_width=start_position-end_position; + } + else if (start_position < end_position){ + item_width=end_position-start_position; + } + else{ /* same origin and destination address */ + end_position = start_position+NODE_CHARS_WIDTH; + item_width = NODE_CHARS_WIDTH; + } - /* write the time */ - g_snprintf(label_string, 10, "|%.3f", user_data->dlg.items[current_item].time); - enlarge_string(label_string,10,' '); - fprintf(of,"%s",label_string); - - /* write the frame label */ + /* separator between conversations */ + if (user_data->dlg.items[current_item].conv_num != first_conv_num){ + fprintf(of, "%s\n", separator_line->str); + first_conv_num=user_data->dlg.items[current_item].conv_num; + } - tmp_str = g_strdup(empty_line); - overwrite(tmp_str,user_data->dlg.items[current_item].frame_label, - start_position, - end_position - ); - fprintf(of,tmp_str); + /* write the conversation number */ + if (several_convs){ + g_string_sprintf(label_string, "%i", user_data->dlg.items[current_item].conv_num); + enlarge_string(label_string, 5, ' '); + fprintf(of, "%s", label_string->str); + } - /* write the comments */ - g_snprintf(label_string, MAX_COMMENT, "%s", user_data->dlg.items[current_item].comment); - fprintf(of,"%s\n",label_string); - - /* write the arrow and frame label*/ - fprintf(of,empty_header); + /* write the time */ + g_string_sprintf(label_string, "|%.3f", user_data->dlg.items[current_item].time); + enlarge_string(label_string, 10, ' '); + fprintf(of, "%s", label_string->str); - tmp_str = g_strdup(empty_line); + /* write the frame label */ - tmp_str2 = g_malloc(item_width); + g_string_sprintf(tmp_str, empty_line->str); + overwrite(tmp_str,user_data->dlg.items[current_item].frame_label, + start_position, + end_position + ); + fprintf(of, "%s", tmp_str->str); - tmp_str2[0]='\0'; - enlarge_string(tmp_str2,item_width-1,'-'); + /* write the comments */ + fprintf(of, "%s\n", user_data->dlg.items[current_item].comment); - if (start_position<end_position){ - tmp_str2[item_width-1]='>'; - } - else{ - tmp_str2[0]='<'; - } + /* write the arrow and frame label*/ + fprintf(of, "%s", empty_header); - overwrite(tmp_str,tmp_str2, - start_position, - end_position - ); + g_string_sprintf(tmp_str, empty_line->str); - g_snprintf(src_port,7,"(%i)", user_data->dlg.items[current_item].port_src); - g_snprintf(dst_port,7,"(%i)", user_data->dlg.items[current_item].port_dst); + g_string_truncate(tmp_str2, 0); - if (start_position<end_position){ - overwrite(tmp_str,src_port,start_position-9,start_position-1); - overwrite(tmp_str,dst_port,end_position+1,end_position+9); - } - else{ - overwrite(tmp_str,src_port,start_position+1,start_position+9); - overwrite(tmp_str,dst_port,end_position-9,end_position+1); - } + if (start_position<end_position){ + enlarge_string(tmp_str2, item_width-2, '-'); + g_string_append_c(tmp_str2, '>'); + } + else{ + g_string_sprintf(tmp_str2, "<"); + enlarge_string(tmp_str2, item_width-1, '-'); + } - fprintf(of,"%s\n",tmp_str); - g_free(tmp_str); - g_free(tmp_str2); + overwrite(tmp_str,tmp_str2->str, + start_position, + end_position + ); + g_snprintf(src_port,8,"(%i)", user_data->dlg.items[current_item].port_src); + g_snprintf(dst_port,8,"(%i)", user_data->dlg.items[current_item].port_dst); + if (start_position<end_position){ + overwrite(tmp_str,src_port,start_position-9,start_position-1); + overwrite(tmp_str,dst_port,end_position+1,end_position+9); } - - fclose (of); - return TRUE; + else{ + overwrite(tmp_str,src_port,start_position+1,start_position+9); + overwrite(tmp_str,dst_port,end_position-9,end_position+1); + } + + fprintf(of,"%s\n",tmp_str->str); + } + + fclose (of); + return TRUE; } @@ -484,19 +467,19 @@ static void save_to_file_destroy_cb(GtkWidget *win _U_, gpointer user_data _U_) static void overwrite_existing_file_cb(gpointer dialog _U_, gint btn, gpointer user_data _U_) { graph_analysis_data_t *user_data_p; - + user_data_p = user_data; - switch(btn) { - case(ESD_BTN_YES): - /* overwrite the file*/ - dialog_graph_dump_to_file(user_data); - break; - case(ESD_BTN_NO): - break; - default: - g_assert_not_reached(); - } + switch(btn) { + case(ESD_BTN_YES): + /* overwrite the file*/ + dialog_graph_dump_to_file(user_data); + break; + case(ESD_BTN_NO): + break; + default: + g_assert_not_reached(); + } } /* and then the save in a file dialog itself */ @@ -506,7 +489,7 @@ static void save_to_file_ok_cb(GtkWidget *ok_bt _U_, gpointer user_data _U_) FILE *file_test; gpointer dialog; graph_analysis_data_t *user_data_p; - + user_data_p = user_data; user_data_p->dlg.save_file = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION (save_to_file_w))); @@ -533,7 +516,7 @@ static void save_to_file_ok_cb(GtkWidget *ok_bt _U_, gpointer user_data _U_) simple_dialog_set_cb(dialog, overwrite_existing_file_cb, user_data); fclose(file_test); } - + else{ if (!dialog_graph_dump_to_file(user_data)) return; @@ -547,8 +530,6 @@ static void on_save_bt_clicked (GtkButton *button _U_, gpointer user_data _U_) { - - GtkWidget *vertb; GtkWidget *ok_bt; @@ -571,7 +552,7 @@ on_save_bt_clicked (GtkButton *button _U_, SIGNAL_CONNECT(ok_bt, "clicked", save_to_file_ok_cb, user_data); window_set_cancel_button(save_to_file_w, - GTK_FILE_SELECTION(save_to_file_w)->cancel_button, window_cancel_button_cb); + GTK_FILE_SELECTION(save_to_file_w)->cancel_button, window_cancel_button_cb); SIGNAL_CONNECT(save_to_file_w, "delete_event", window_delete_event_cb, NULL); SIGNAL_CONNECT(save_to_file_w, "destroy", save_to_file_destroy_cb, @@ -579,33 +560,33 @@ on_save_bt_clicked (GtkButton *button _U_, gtk_widget_show(save_to_file_w); window_present(save_to_file_w); - - + + } /****************************************************************************/ static void dialog_graph_draw(graph_analysis_data_t* user_data) { guint32 i, last_item, first_item, display_items; - guint32 start_arrow, end_arrow, label_x, src_port_x, dst_port_x, arrow_width; + guint32 start_arrow, end_arrow, label_x, src_port_x, dst_port_x, arrow_width; guint32 current_item; guint32 left_x_border; guint32 right_x_border; guint32 top_y_border; guint32 bottom_y_border; - graph_analysis_item_t *gai; - guint16 first_conv_num; - gboolean several_convs = FALSE; - gboolean first_packet = TRUE; - - GdkGC *frame_fg_color; - GdkGC *frame_bg_color; - GdkGC *div_line_color; + graph_analysis_item_t *gai; + guint16 first_conv_num; + gboolean several_convs = FALSE; + gboolean first_packet = TRUE; + + GdkGC *frame_fg_color; + GdkGC *frame_bg_color; + GdkGC *div_line_color; #if GTK_MAJOR_VERSION < 2 GdkFont *font; - FONT_TYPE *big_font; - FONT_TYPE *small_font; + FONT_TYPE *big_font; + FONT_TYPE *small_font; #else PangoLayout *layout; PangoLayout *big_layout; @@ -614,117 +595,117 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data) guint32 label_width, label_height; guint32 draw_width, draw_height; char label_string[MAX_COMMENT]; - GList* list; + GList* list; /* new variables */ #if GTK_MAJOR_VERSION <2 font = user_data->dlg.draw_area->style->font; - big_font = gdk_font_load("-adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1"); - small_font = gdk_font_load("-adobe-helvetica-bold-r-normal--10-120-75-75-p-70-iso8859-1"); + big_font = gdk_font_load("-adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1"); + small_font = gdk_font_load("-adobe-helvetica-bold-r-normal--10-120-75-75-p-70-iso8859-1"); #endif if(!user_data->dlg.needs_redraw){ return; } user_data->dlg.needs_redraw=FALSE; - /* Clear out old plt */ - if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap_time) ) - gdk_draw_rectangle(user_data->dlg.pixmap_time, - user_data->dlg.draw_area_time->style->white_gc, - TRUE, - 0, 0, - user_data->dlg.draw_area_time->allocation.width, - user_data->dlg.draw_area_time->allocation.height); - - if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap) ) - gdk_draw_rectangle(user_data->dlg.pixmap, - user_data->dlg.draw_area->style->white_gc, - TRUE, - 0, 0, - user_data->dlg.draw_area->allocation.width, - user_data->dlg.draw_area->allocation.height); - - if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap_comments) ) - gdk_draw_rectangle(user_data->dlg.pixmap_comments, - user_data->dlg.draw_area->style->white_gc, - TRUE, - 0, 0, - user_data->dlg.draw_area_comments->allocation.width, - user_data->dlg.draw_area_comments->allocation.height); - - /* Calculate the y border */ + /* Clear out old plt */ + if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap_time) ) + gdk_draw_rectangle(user_data->dlg.pixmap_time, + user_data->dlg.draw_area_time->style->white_gc, + TRUE, + 0, 0, + user_data->dlg.draw_area_time->allocation.width, + user_data->dlg.draw_area_time->allocation.height); + + if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap) ) + gdk_draw_rectangle(user_data->dlg.pixmap, + user_data->dlg.draw_area->style->white_gc, + TRUE, + 0, 0, + user_data->dlg.draw_area->allocation.width, + user_data->dlg.draw_area->allocation.height); + + if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap_comments) ) + gdk_draw_rectangle(user_data->dlg.pixmap_comments, + user_data->dlg.draw_area->style->white_gc, + TRUE, + 0, 0, + user_data->dlg.draw_area_comments->allocation.width, + user_data->dlg.draw_area_comments->allocation.height); + + /* Calculate the y border */ top_y_border=TOP_Y_BORDER; /* to display the node address */ bottom_y_border=2; - draw_height=user_data->dlg.draw_area->allocation.height-top_y_border-bottom_y_border; - - first_item = user_data->dlg.first_item; - display_items = draw_height/ITEM_HEIGHT; - last_item = first_item+display_items-1; - - /* get the items to display and fill the matrix array */ - list = g_list_first(user_data->graph_info->list); - current_item = 0; - i = 0; - while (list) - { - gai = list->data; - if (gai->display){ - if (current_item>=display_items) break; /* the item is outside the display */ - if (i>=first_item){ - user_data->dlg.items[current_item].frame_num = gai->frame_num; - user_data->dlg.items[current_item].time = gai->time; - user_data->dlg.items[current_item].port_src = gai->port_src; - user_data->dlg.items[current_item].port_dst = gai->port_dst; - /* Add "..." if the length is 50 characters */ - if (strlen(gai->frame_label) > 48) { - gai->frame_label[48] = '.'; - gai->frame_label[47] = '.'; - gai->frame_label[46] = '.'; - } - user_data->dlg.items[current_item].frame_label = gai->frame_label; - user_data->dlg.items[current_item].comment = gai->comment; - user_data->dlg.items[current_item].conv_num = gai->conv_num; - - if (first_packet){ - first_conv_num = gai->conv_num; - first_packet=FALSE; - } - - if (user_data->dlg.items[current_item].conv_num != first_conv_num){ - several_convs = TRUE; - } - - user_data->dlg.items[current_item].src_node = gai->src_node; - user_data->dlg.items[current_item].dst_node = gai->dst_node; - user_data->dlg.items[current_item].line_style = gai->line_style; - current_item++; + draw_height=user_data->dlg.draw_area->allocation.height-top_y_border-bottom_y_border; + + first_item = user_data->dlg.first_item; + display_items = draw_height/ITEM_HEIGHT; + last_item = first_item+display_items-1; + + /* get the items to display and fill the matrix array */ + list = g_list_first(user_data->graph_info->list); + current_item = 0; + i = 0; + while (list) + { + gai = list->data; + if (gai->display){ + if (current_item>=display_items) break; /* the item is outside the display */ + if (i>=first_item){ + user_data->dlg.items[current_item].frame_num = gai->frame_num; + user_data->dlg.items[current_item].time = gai->time; + user_data->dlg.items[current_item].port_src = gai->port_src; + user_data->dlg.items[current_item].port_dst = gai->port_dst; + /* Add "..." if the length is 50 characters */ + if (strlen(gai->frame_label) > 48) { + gai->frame_label[48] = '.'; + gai->frame_label[47] = '.'; + gai->frame_label[46] = '.'; } - i++; - } + user_data->dlg.items[current_item].frame_label = gai->frame_label; + user_data->dlg.items[current_item].comment = gai->comment; + user_data->dlg.items[current_item].conv_num = gai->conv_num; - list = g_list_next(list); - } - /* in case the windows is resized so we have to move the top item */ - if ((first_item + display_items) > user_data->num_items){ - if (display_items>user_data->num_items) - first_item=0; - else - first_item = user_data->num_items - display_items; + if (first_packet){ + first_conv_num = gai->conv_num; + first_packet=FALSE; + } + + if (user_data->dlg.items[current_item].conv_num != first_conv_num){ + several_convs = TRUE; + } + + user_data->dlg.items[current_item].src_node = gai->src_node; + user_data->dlg.items[current_item].dst_node = gai->dst_node; + user_data->dlg.items[current_item].line_style = gai->line_style; + current_item++; + } + i++; } - - /* in case there are less items than possible displayed */ - display_items = current_item; - last_item = first_item+display_items-1; - /* if not items to display */ - if (display_items == 0) return; + list = g_list_next(list); + } + /* in case the windows is resized so we have to move the top item */ + if ((first_item + display_items) > user_data->num_items){ + if (display_items>user_data->num_items) + first_item=0; + else + first_item = user_data->num_items - display_items; + } + /* in case there are less items than possible displayed */ + display_items = current_item; + last_item = first_item+display_items-1; - /* Calculate the x borders */ - /* We use time from the last display item to calcultate the x left border */ - g_snprintf(label_string, MAX_LABEL, "%.3f", user_data->dlg.items[display_items-1].time); + /* if not items to display */ + if (display_items == 0) return; + + + /* Calculate the x borders */ + /* We use time from the last display item to calcultate the x left border */ + g_snprintf(label_string, MAX_LABEL, "%.3f", user_data->dlg.items[display_items-1].time); #if GTK_MAJOR_VERSION < 2 label_width=gdk_string_width(font, label_string); label_height=gdk_string_height(font, label_string); @@ -733,124 +714,124 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data) big_layout = gtk_widget_create_pango_layout(user_data->dlg.draw_area_time, label_string); small_layout = gtk_widget_create_pango_layout(user_data->dlg.draw_area_time, label_string); - /* XXX - to prevent messages like "Couldn't load font x, falling back to y", I've changed font - description from "Helvetica-Bold 8" to "Helvetica,Sans,Bold 8", this seems to be + /* XXX - to prevent messages like "Couldn't load font x, falling back to y", I've changed font + description from "Helvetica-Bold 8" to "Helvetica,Sans,Bold 8", this seems to be conforming to the API, see http://developer.gnome.org/doc/API/2.0/pango/pango-Fonts.html */ - pango_layout_set_font_description(big_layout, pango_font_description_from_string("Helvetica,Sans,Bold 8")); - pango_layout_set_font_description(small_layout, pango_font_description_from_string("Helvetica,Sans,Bold 7")); + pango_layout_set_font_description(big_layout, pango_font_description_from_string("Helvetica,Sans,Bold 8")); + pango_layout_set_font_description(small_layout, pango_font_description_from_string("Helvetica,Sans,Bold 7")); pango_layout_get_pixel_size(layout, &label_width, &label_height); #endif - /* resize the "time" draw area */ + /* resize the "time" draw area */ left_x_border=3; - user_data->dlg.left_x_border = left_x_border; + user_data->dlg.left_x_border = left_x_border; right_x_border=2; draw_width=user_data->dlg.pixmap_width-right_x_border-left_x_border; - /* Paint time title background */ - if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap_time) ) - gdk_draw_rectangle(user_data->dlg.pixmap_time, - user_data->dlg.draw_area_time->style->bg_gc[2], - TRUE, - 0, - 0, - user_data->dlg.draw_area_time->allocation.width, - top_y_border); - /* Paint main title background */ - if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap) ) - gdk_draw_rectangle(user_data->dlg.pixmap, - user_data->dlg.draw_area->style->bg_gc[2], - TRUE, - 0, - 0, - user_data->dlg.draw_area->allocation.width, - top_y_border); - /* Paint main comment background */ - if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap_comments) ) - gdk_draw_rectangle(user_data->dlg.pixmap_comments, - user_data->dlg.draw_area_comments->style->bg_gc[2], - TRUE, - 0, - 0, - user_data->dlg.draw_area_comments->allocation.width, - top_y_border); - - - /* Draw the word "Time" on top of time column */ - g_snprintf(label_string, label_width, "%s", "Time"); + /* Paint time title background */ + if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap_time) ) + gdk_draw_rectangle(user_data->dlg.pixmap_time, + user_data->dlg.draw_area_time->style->bg_gc[2], + TRUE, + 0, + 0, + user_data->dlg.draw_area_time->allocation.width, + top_y_border); + /* Paint main title background */ + if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap) ) + gdk_draw_rectangle(user_data->dlg.pixmap, + user_data->dlg.draw_area->style->bg_gc[2], + TRUE, + 0, + 0, + user_data->dlg.draw_area->allocation.width, + top_y_border); + /* Paint main comment background */ + if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap_comments) ) + gdk_draw_rectangle(user_data->dlg.pixmap_comments, + user_data->dlg.draw_area_comments->style->bg_gc[2], + TRUE, + 0, + 0, + user_data->dlg.draw_area_comments->allocation.width, + top_y_border); + + + /* Draw the word "Time" on top of time column */ + g_snprintf(label_string, label_width, "%s", "Time"); #if GTK_MAJOR_VERSION < 2 label_width=gdk_string_width(font, label_string); label_height=gdk_string_height(font, label_string); - gdk_draw_string(user_data->dlg.pixmap_time, + gdk_draw_string(user_data->dlg.pixmap_time, font, user_data->dlg.draw_area_time->style->black_gc, left_x_border+4, top_y_border/2-label_height/2, label_string); #else - pango_layout_set_text(layout, label_string, -1); + pango_layout_set_text(layout, label_string, -1); pango_layout_get_pixel_size(layout, &label_width, &label_height); - if (GDK_IS_DRAWABLE(user_data->dlg.pixmap_time)) { - gdk_draw_layout(user_data->dlg.pixmap_time, - user_data->dlg.draw_area_time->style->black_gc, - left_x_border, - top_y_border/2-label_height/2, - layout); - } -#endif + if (GDK_IS_DRAWABLE(user_data->dlg.pixmap_time)) { + gdk_draw_layout(user_data->dlg.pixmap_time, + user_data->dlg.draw_area_time->style->black_gc, + left_x_border, + top_y_border/2-label_height/2, + layout); + } +#endif - /* Draw the word "Comment" on top of comment column */ - g_snprintf(label_string, label_width, "%s", "Comment"); + /* Draw the word "Comment" on top of comment column */ + g_snprintf(label_string, label_width, "%s", "Comment"); #if GTK_MAJOR_VERSION < 2 label_width=gdk_string_width(font, label_string); label_height=gdk_string_height(font, label_string); - gdk_draw_string(user_data->dlg.pixmap_comments, + gdk_draw_string(user_data->dlg.pixmap_comments, font, user_data->dlg.draw_area_comments->style->black_gc, MAX_COMMENT/2-label_width/2, top_y_border/2-label_height/2, label_string); #else - pango_layout_set_text(layout, label_string, -1); + pango_layout_set_text(layout, label_string, -1); pango_layout_get_pixel_size(layout, &label_width, &label_height); - if (GDK_IS_DRAWABLE(user_data->dlg.pixmap_comments)) { - gdk_draw_layout(user_data->dlg.pixmap_comments, - user_data->dlg.draw_area_comments->style->black_gc, - MAX_COMMENT/2-label_width/2, - top_y_border/2-label_height/2, - layout); - } + if (GDK_IS_DRAWABLE(user_data->dlg.pixmap_comments)) { + gdk_draw_layout(user_data->dlg.pixmap_comments, + user_data->dlg.draw_area_comments->style->black_gc, + MAX_COMMENT/2-label_width/2, + top_y_border/2-label_height/2, + layout); + } #endif - /* Paint the background items */ - for (current_item=0; current_item<display_items; current_item++){ - /*select the color. if it is the selected item select blue color */ - if ( current_item+first_item == user_data->dlg.selected_item ) { - frame_bg_color = user_data->dlg.bg_gc[0]; - } else { - frame_bg_color = user_data->dlg.bg_gc[1+user_data->dlg.items[current_item].conv_num%MAX_NUM_COL_CONV]; - } - - /* Paint background */ - if (GDK_IS_DRAWABLE(user_data->dlg.pixmap)) { - gdk_draw_rectangle(user_data->dlg.pixmap, - frame_bg_color, - TRUE, - left_x_border, - top_y_border+current_item*ITEM_HEIGHT, - draw_width, - ITEM_HEIGHT); - } + /* Paint the background items */ + for (current_item=0; current_item<display_items; current_item++){ + /*select the color. if it is the selected item select blue color */ + if ( current_item+first_item == user_data->dlg.selected_item ) { + frame_bg_color = user_data->dlg.bg_gc[0]; + } else { + frame_bg_color = user_data->dlg.bg_gc[1+user_data->dlg.items[current_item].conv_num%MAX_NUM_COL_CONV]; + } + + /* Paint background */ + if (GDK_IS_DRAWABLE(user_data->dlg.pixmap)) { + gdk_draw_rectangle(user_data->dlg.pixmap, + frame_bg_color, + TRUE, + left_x_border, + top_y_border+current_item*ITEM_HEIGHT, + draw_width, + ITEM_HEIGHT); } - /* Draw the node names on top and the division lines */ - for (i=0; i<user_data->num_nodes; i++){ - /* print the node identifiers */ - /* XXX we assign 5 pixels per character in the node identity */ - g_snprintf(label_string, NODE_WIDTH/5, "%s", - get_addr_name(&(user_data->nodes[i]))); + } + /* Draw the node names on top and the division lines */ + for (i=0; i<user_data->num_nodes; i++){ + /* print the node identifiers */ + /* XXX we assign 5 pixels per character in the node identity */ + g_snprintf(label_string, NODE_WIDTH/5, "%s", + get_addr_name(&(user_data->nodes[i]))); #if GTK_MAJOR_VERSION < 2 label_width=gdk_string_width(font, label_string); label_height=gdk_string_height(font, label_string); @@ -861,32 +842,32 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data) top_y_border/2-label_height/2, label_string); #else - pango_layout_set_text(layout, label_string, -1); + pango_layout_set_text(layout, label_string, -1); pango_layout_get_pixel_size(layout, &label_width, &label_height); - if (GDK_IS_DRAWABLE(user_data->dlg.pixmap)) { - gdk_draw_layout(user_data->dlg.pixmap, - user_data->dlg.draw_area->style->black_gc, - left_x_border+NODE_WIDTH/2-label_width/2+NODE_WIDTH*i, - top_y_border/2-label_height/2, - layout); - } -#endif - - /* draw the node division lines */ - if (GDK_IS_DRAWABLE(user_data->dlg.pixmap) ) { - gdk_draw_line(user_data->dlg.pixmap, user_data->dlg.div_line_gc[0], - left_x_border+NODE_WIDTH/2+NODE_WIDTH*i, - top_y_border, - left_x_border+NODE_WIDTH/2+NODE_WIDTH*i, - user_data->dlg.draw_area->allocation.height-bottom_y_border); - } + if (GDK_IS_DRAWABLE(user_data->dlg.pixmap)) { + gdk_draw_layout(user_data->dlg.pixmap, + user_data->dlg.draw_area->style->black_gc, + left_x_border+NODE_WIDTH/2-label_width/2+NODE_WIDTH*i, + top_y_border/2-label_height/2, + layout); + } +#endif + /* draw the node division lines */ + if (GDK_IS_DRAWABLE(user_data->dlg.pixmap) ) { + gdk_draw_line(user_data->dlg.pixmap, user_data->dlg.div_line_gc[0], + left_x_border+NODE_WIDTH/2+NODE_WIDTH*i, + top_y_border, + left_x_border+NODE_WIDTH/2+NODE_WIDTH*i, + user_data->dlg.draw_area->allocation.height-bottom_y_border); } - /* Draw the items */ - for (current_item=0; current_item<display_items; current_item++){ - /* draw the time */ - g_snprintf(label_string, MAX_LABEL, "%.3f", user_data->dlg.items[current_item].time); + } + + /* Draw the items */ + for (current_item=0; current_item<display_items; current_item++){ + /* draw the time */ + g_snprintf(label_string, MAX_LABEL, "%.3f", user_data->dlg.items[current_item].time); #if GTK_MAJOR_VERSION < 2 label_width=gdk_string_width(font, label_string); label_height=gdk_string_height(font, label_string); @@ -897,229 +878,229 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data) top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT/2+label_height/4, label_string); #else - pango_layout_set_text(layout, label_string, -1); + pango_layout_set_text(layout, label_string, -1); pango_layout_get_pixel_size(layout, &label_width, &label_height); - if (GDK_IS_DRAWABLE(user_data->dlg.pixmap_time)) { - gdk_draw_layout(user_data->dlg.pixmap_time, - user_data->dlg.draw_area->style->black_gc, - 3, - top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT/2-label_height/2, - layout); - } + if (GDK_IS_DRAWABLE(user_data->dlg.pixmap_time)) { + gdk_draw_layout(user_data->dlg.pixmap_time, + user_data->dlg.draw_area->style->black_gc, + 3, + top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT/2-label_height/2, + layout); + } #endif - - /*draw the comments */ - g_snprintf(label_string, MAX_COMMENT, "%s", user_data->dlg.items[current_item].comment); + + /*draw the comments */ + g_snprintf(label_string, MAX_COMMENT, "%s", user_data->dlg.items[current_item].comment); #if GTK_MAJOR_VERSION < 2 - label_width=gdk_string_width(small_font, label_string); - label_height=gdk_string_height(small_font, label_string); - gdk_draw_string(user_data->dlg.pixmap_comments, + label_width=gdk_string_width(small_font, label_string); + label_height=gdk_string_height(small_font, label_string); + gdk_draw_string(user_data->dlg.pixmap_comments, small_font, user_data->dlg.draw_area_comments->style->black_gc, 2, top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT/2+label_height/4, label_string); #else - pango_layout_set_text(small_layout, label_string, -1); - pango_layout_get_pixel_size(small_layout, &label_width, &label_height); - if (GDK_IS_DRAWABLE(user_data->dlg.pixmap_comments)) { - gdk_draw_layout(user_data->dlg.pixmap_comments, - user_data->dlg.draw_area->style->black_gc, - 2, - top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT/2-label_height/2, - small_layout); - } + pango_layout_set_text(small_layout, label_string, -1); + pango_layout_get_pixel_size(small_layout, &label_width, &label_height); + if (GDK_IS_DRAWABLE(user_data->dlg.pixmap_comments)) { + gdk_draw_layout(user_data->dlg.pixmap_comments, + user_data->dlg.draw_area->style->black_gc, + 2, + top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT/2-label_height/2, + small_layout); + } #endif - /* select colors */ - if ( current_item+first_item == user_data->dlg.selected_item ){ - frame_fg_color = user_data->dlg.draw_area->style->white_gc; - div_line_color = user_data->dlg.div_line_gc[1]; - } else { - frame_fg_color = user_data->dlg.draw_area->style->black_gc; - div_line_color = user_data->dlg.div_line_gc[0]; - } - /* draw the arrow line */ - start_arrow = left_x_border+(user_data->dlg.items[current_item].src_node)*NODE_WIDTH+NODE_WIDTH/2; - end_arrow = left_x_border+(user_data->dlg.items[current_item].dst_node)*NODE_WIDTH+NODE_WIDTH/2; - - if (GDK_IS_DRAWABLE(user_data->dlg.pixmap) ) { - gdk_draw_line(user_data->dlg.pixmap, frame_fg_color, - start_arrow, - top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-7, - end_arrow, - top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-7); - } - - /* draw the additional line when line style is 2 pixels width */ - if (user_data->dlg.items[current_item].line_style == 2 && GDK_IS_DRAWABLE(user_data->dlg.pixmap)){ - gdk_draw_line(user_data->dlg.pixmap, frame_fg_color, - start_arrow, - top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-6, - end_arrow, - top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-6); - } + /* select colors */ + if ( current_item+first_item == user_data->dlg.selected_item ){ + frame_fg_color = user_data->dlg.draw_area->style->white_gc; + div_line_color = user_data->dlg.div_line_gc[1]; + } else { + frame_fg_color = user_data->dlg.draw_area->style->black_gc; + div_line_color = user_data->dlg.div_line_gc[0]; + } + /* draw the arrow line */ + start_arrow = left_x_border+(user_data->dlg.items[current_item].src_node)*NODE_WIDTH+NODE_WIDTH/2; + end_arrow = left_x_border+(user_data->dlg.items[current_item].dst_node)*NODE_WIDTH+NODE_WIDTH/2; + + if (GDK_IS_DRAWABLE(user_data->dlg.pixmap) ) { + gdk_draw_line(user_data->dlg.pixmap, frame_fg_color, + start_arrow, + top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-7, + end_arrow, + top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-7); + } + + /* draw the additional line when line style is 2 pixels width */ + if (user_data->dlg.items[current_item].line_style == 2 && GDK_IS_DRAWABLE(user_data->dlg.pixmap)){ + gdk_draw_line(user_data->dlg.pixmap, frame_fg_color, + start_arrow, + top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-6, + end_arrow, + top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-6); + } - /* draw the arrow */ - if (start_arrow<end_arrow) - draw_arrow(user_data->dlg.pixmap, frame_fg_color, end_arrow-WIDTH_ARROW,top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-7, RIGHT_ARROW); - else - draw_arrow(user_data->dlg.pixmap, frame_fg_color, end_arrow+WIDTH_ARROW,top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-7, LEFT_ARROW); + /* draw the arrow */ + if (start_arrow<end_arrow) + draw_arrow(user_data->dlg.pixmap, frame_fg_color, end_arrow-WIDTH_ARROW,top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-7, RIGHT_ARROW); + else + draw_arrow(user_data->dlg.pixmap, frame_fg_color, end_arrow+WIDTH_ARROW,top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-7, LEFT_ARROW); - /* draw the frame comment */ - g_snprintf(label_string, MAX_LABEL, "%s", user_data->dlg.items[current_item].frame_label); + /* draw the frame comment */ + g_snprintf(label_string, MAX_LABEL, "%s", user_data->dlg.items[current_item].frame_label); #if GTK_MAJOR_VERSION < 2 - label_width=gdk_string_width(big_font, label_string); - label_height=gdk_string_height(big_font, label_string); + label_width=gdk_string_width(big_font, label_string); + label_height=gdk_string_height(big_font, label_string); #else - pango_layout_set_text(big_layout, label_string, -1); - pango_layout_get_pixel_size(big_layout, &label_width, &label_height); + pango_layout_set_text(big_layout, label_string, -1); + pango_layout_get_pixel_size(big_layout, &label_width, &label_height); #endif - if (start_arrow<end_arrow){ - arrow_width = end_arrow-start_arrow; - label_x = arrow_width/2+start_arrow; - } - else { - arrow_width = start_arrow-end_arrow; - label_x = arrow_width/2+end_arrow; - } - - if (label_width>arrow_width) arrow_width = label_width; - - if ((int)left_x_border > ((int)label_x-(int)label_width/2)) - label_x = left_x_border + label_width/2; - + if (start_arrow<end_arrow){ + arrow_width = end_arrow-start_arrow; + label_x = arrow_width/2+start_arrow; + } + else { + arrow_width = start_arrow-end_arrow; + label_x = arrow_width/2+end_arrow; + } + + if (label_width>arrow_width) arrow_width = label_width; + + if ((int)left_x_border > ((int)label_x-(int)label_width/2)) + label_x = left_x_border + label_width/2; + #if GTK_MAJOR_VERSION < 2 - gdk_draw_string(user_data->dlg.pixmap, - big_font, - frame_fg_color, - label_x - label_width/2, - top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT/2+label_height/4-3, - label_string); + gdk_draw_string(user_data->dlg.pixmap, + big_font, + frame_fg_color, + label_x - label_width/2, + top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT/2+label_height/4-3, + label_string); #else - if (GDK_IS_DRAWABLE(user_data->dlg.pixmap)) { - gdk_draw_layout(user_data->dlg.pixmap, - frame_fg_color, - label_x - label_width/2, - top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT/2-label_height/2-3, - big_layout); - } + if (GDK_IS_DRAWABLE(user_data->dlg.pixmap)) { + gdk_draw_layout(user_data->dlg.pixmap, + frame_fg_color, + label_x - label_width/2, + top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT/2-label_height/2-3, + big_layout); + } #endif - - /* draw the source port number */ - g_snprintf(label_string, MAX_LABEL, "(%i)", user_data->dlg.items[current_item].port_src); + + /* draw the source port number */ + g_snprintf(label_string, MAX_LABEL, "(%i)", user_data->dlg.items[current_item].port_src); #if GTK_MAJOR_VERSION < 2 - label_width=gdk_string_width(small_font, label_string); - label_height=gdk_string_height(small_font, label_string); + label_width=gdk_string_width(small_font, label_string); + label_height=gdk_string_height(small_font, label_string); #else - pango_layout_set_text(small_layout, label_string, -1); - pango_layout_get_pixel_size(small_layout, &label_width, &label_height); + pango_layout_set_text(small_layout, label_string, -1); + pango_layout_get_pixel_size(small_layout, &label_width, &label_height); #endif - if (start_arrow<end_arrow){ - src_port_x = start_arrow - label_width - 2; - } - else { - src_port_x = start_arrow + 2; - } + if (start_arrow<end_arrow){ + src_port_x = start_arrow - label_width - 2; + } + else { + src_port_x = start_arrow + 2; + } #if GTK_MAJOR_VERSION < 2 - gdk_draw_string(user_data->dlg.pixmap, - small_font, - div_line_color, - src_port_x, - top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-2+label_height/4-2, - label_string); + gdk_draw_string(user_data->dlg.pixmap, + small_font, + div_line_color, + src_port_x, + top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-2+label_height/4-2, + label_string); #else - if (GDK_IS_DRAWABLE(user_data->dlg.pixmap)) { - gdk_draw_layout(user_data->dlg.pixmap, - div_line_color, - src_port_x, - top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-2-label_height/2-2, - small_layout); - } + if (GDK_IS_DRAWABLE(user_data->dlg.pixmap)) { + gdk_draw_layout(user_data->dlg.pixmap, + div_line_color, + src_port_x, + top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-2-label_height/2-2, + small_layout); + } #endif - /* draw the destination port number */ - g_snprintf(label_string, MAX_LABEL, "(%i)", user_data->dlg.items[current_item].port_dst); + /* draw the destination port number */ + g_snprintf(label_string, MAX_LABEL, "(%i)", user_data->dlg.items[current_item].port_dst); #if GTK_MAJOR_VERSION < 2 - label_width=gdk_string_width(small_font, label_string); - label_height=gdk_string_height(small_font, label_string); + label_width=gdk_string_width(small_font, label_string); + label_height=gdk_string_height(small_font, label_string); #else - pango_layout_set_text(small_layout, label_string, -1); - pango_layout_get_pixel_size(small_layout, &label_width, &label_height); + pango_layout_set_text(small_layout, label_string, -1); + pango_layout_get_pixel_size(small_layout, &label_width, &label_height); #endif - if (start_arrow<end_arrow){ - dst_port_x = end_arrow + 2; - } - else { - dst_port_x = end_arrow - label_width - 2; - } + if (start_arrow<end_arrow){ + dst_port_x = end_arrow + 2; + } + else { + dst_port_x = end_arrow - label_width - 2; + } #if GTK_MAJOR_VERSION < 2 - gdk_draw_string(user_data->dlg.pixmap, - small_font, - div_line_color, - dst_port_x, - top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-2+label_height/4-2, - label_string); + gdk_draw_string(user_data->dlg.pixmap, + small_font, + div_line_color, + dst_port_x, + top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-2+label_height/4-2, + label_string); #else - if (GDK_IS_DRAWABLE(user_data->dlg.pixmap)) { - gdk_draw_layout(user_data->dlg.pixmap, - div_line_color, - dst_port_x, - top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-2-label_height/2-2, - small_layout); - } + if (GDK_IS_DRAWABLE(user_data->dlg.pixmap)) { + gdk_draw_layout(user_data->dlg.pixmap, + div_line_color, + dst_port_x, + top_y_border+current_item*ITEM_HEIGHT+ITEM_HEIGHT-2-label_height/2-2, + small_layout); + } #endif - /* draw the div line of the selected item with soft gray*/ - if ( current_item+first_item == user_data->dlg.selected_item ) - for (i=0; i<user_data->num_nodes; i++){ - if (GDK_IS_DRAWABLE(user_data->dlg.pixmap) ) { - gdk_draw_line(user_data->dlg.pixmap, user_data->dlg.div_line_gc[1], - left_x_border+NODE_WIDTH/2+NODE_WIDTH*i, - (user_data->dlg.selected_item-first_item)*ITEM_HEIGHT+TOP_Y_BORDER, - left_x_border+NODE_WIDTH/2+NODE_WIDTH*i, - (user_data->dlg.selected_item-first_item)*ITEM_HEIGHT+TOP_Y_BORDER+ITEM_HEIGHT); - } + /* draw the div line of the selected item with soft gray*/ + if ( current_item+first_item == user_data->dlg.selected_item ) + for (i=0; i<user_data->num_nodes; i++){ + if (GDK_IS_DRAWABLE(user_data->dlg.pixmap) ) { + gdk_draw_line(user_data->dlg.pixmap, user_data->dlg.div_line_gc[1], + left_x_border+NODE_WIDTH/2+NODE_WIDTH*i, + (user_data->dlg.selected_item-first_item)*ITEM_HEIGHT+TOP_Y_BORDER, + left_x_border+NODE_WIDTH/2+NODE_WIDTH*i, + (user_data->dlg.selected_item-first_item)*ITEM_HEIGHT+TOP_Y_BORDER+ITEM_HEIGHT); } - } - + } + } + #if GTK_MAJOR_VERSION >= 2 - g_object_unref(G_OBJECT(layout)); + g_object_unref(G_OBJECT(layout)); #endif - - /* refresh the draw areas */ - if (GDK_IS_DRAWABLE(user_data->dlg.draw_area_time->window) ) - gdk_draw_pixmap(user_data->dlg.draw_area_time->window, - user_data->dlg.draw_area_time->style->fg_gc[GTK_WIDGET_STATE(user_data->dlg.draw_area_time)], - user_data->dlg.pixmap_time, - 0, 0, - 0, 0, - user_data->dlg.draw_area_time->allocation.width, user_data->dlg.draw_area_time->allocation.height); - - if (GDK_IS_DRAWABLE(user_data->dlg.draw_area->window) ) - gdk_draw_pixmap(user_data->dlg.draw_area->window, - user_data->dlg.draw_area->style->fg_gc[GTK_WIDGET_STATE(user_data->dlg.draw_area)], - user_data->dlg.pixmap, - 0, 0, - 0, 0, - user_data->dlg.draw_area->allocation.width, user_data->dlg.draw_area->allocation.height); - - if (GDK_IS_DRAWABLE(user_data->dlg.draw_area_comments->window) ) - gdk_draw_pixmap(user_data->dlg.draw_area_comments->window, - user_data->dlg.draw_area_comments->style->fg_gc[GTK_WIDGET_STATE(user_data->dlg.draw_area_comments)], - user_data->dlg.pixmap_comments, - 0, 0, - 0, 0, - user_data->dlg.draw_area_comments->allocation.width, user_data->dlg.draw_area_comments->allocation.height); - - /* update the v_scrollbar */ + + /* refresh the draw areas */ + if (GDK_IS_DRAWABLE(user_data->dlg.draw_area_time->window) ) + gdk_draw_pixmap(user_data->dlg.draw_area_time->window, + user_data->dlg.draw_area_time->style->fg_gc[GTK_WIDGET_STATE(user_data->dlg.draw_area_time)], + user_data->dlg.pixmap_time, + 0, 0, + 0, 0, + user_data->dlg.draw_area_time->allocation.width, user_data->dlg.draw_area_time->allocation.height); + + if (GDK_IS_DRAWABLE(user_data->dlg.draw_area->window) ) + gdk_draw_pixmap(user_data->dlg.draw_area->window, + user_data->dlg.draw_area->style->fg_gc[GTK_WIDGET_STATE(user_data->dlg.draw_area)], + user_data->dlg.pixmap, + 0, 0, + 0, 0, + user_data->dlg.draw_area->allocation.width, user_data->dlg.draw_area->allocation.height); + + if (GDK_IS_DRAWABLE(user_data->dlg.draw_area_comments->window) ) + gdk_draw_pixmap(user_data->dlg.draw_area_comments->window, + user_data->dlg.draw_area_comments->style->fg_gc[GTK_WIDGET_STATE(user_data->dlg.draw_area_comments)], + user_data->dlg.pixmap_comments, + 0, 0, + 0, 0, + user_data->dlg.draw_area_comments->allocation.width, user_data->dlg.draw_area_comments->allocation.height); + + /* update the v_scrollbar */ user_data->dlg.v_scrollbar_adjustment->upper=(gfloat) user_data->num_items-1; user_data->dlg.v_scrollbar_adjustment->step_increment=1; user_data->dlg.v_scrollbar_adjustment->page_increment=(gfloat) (last_item-first_item); user_data->dlg.v_scrollbar_adjustment->page_size=(gfloat) (last_item-first_item); user_data->dlg.v_scrollbar_adjustment->value=(gfloat) first_item; - gtk_adjustment_changed(user_data->dlg.v_scrollbar_adjustment); + gtk_adjustment_changed(user_data->dlg.v_scrollbar_adjustment); gtk_adjustment_value_changed(user_data->dlg.v_scrollbar_adjustment); } @@ -1127,7 +1108,7 @@ static void dialog_graph_draw(graph_analysis_data_t* user_data) static void dialog_graph_redraw(graph_analysis_data_t* user_data) { user_data->dlg.needs_redraw=TRUE; - dialog_graph_draw(user_data); + dialog_graph_draw(user_data); } /****************************************************************************/ @@ -1138,18 +1119,18 @@ static gint button_press_event(GtkWidget *widget, GdkEventButton *event _U_) user_data=(graph_analysis_data_t *)OBJECT_GET_DATA(widget, "graph_analysis_data_t"); - if (event->type != GDK_BUTTON_PRESS) return TRUE; + if (event->type != GDK_BUTTON_PRESS) return TRUE; + + if (event->y<TOP_Y_BORDER) return TRUE; - if (event->y<TOP_Y_BORDER) return TRUE; + /* get the item clicked */ + item = ((guint32)event->y - TOP_Y_BORDER) / ITEM_HEIGHT; + user_data->dlg.selected_item = item + user_data->dlg.first_item; - /* get the item clicked */ - item = ((guint32)event->y - TOP_Y_BORDER) / ITEM_HEIGHT; - user_data->dlg.selected_item = item + user_data->dlg.first_item; + user_data->dlg.needs_redraw=TRUE; + dialog_graph_draw(user_data); - user_data->dlg.needs_redraw=TRUE; - dialog_graph_draw(user_data); - - cf_goto_frame(&cfile, user_data->dlg.items[item].frame_num); + cf_goto_frame(&cfile, user_data->dlg.items[item].frame_num); return TRUE; } @@ -1160,32 +1141,32 @@ static gint button_press_event(GtkWidget *widget, GdkEventButton *event _U_) static gint scroll_event(GtkWidget *widget, GdkEventScroll *event) { graph_analysis_data_t *user_data; - + user_data=(graph_analysis_data_t *)OBJECT_GET_DATA(widget, "graph_analysis_data_t"); - + /* Up scroll */ - switch(event->direction) { - case(GDK_SCROLL_UP): + switch(event->direction) { + case(GDK_SCROLL_UP): if (user_data->dlg.first_item == 0) return TRUE; - if (user_data->dlg.first_item < 3) + if (user_data->dlg.first_item < 3) user_data->dlg.first_item = 0; else user_data->dlg.first_item -= 3; - break; - case(GDK_SCROLL_DOWN): + break; + case(GDK_SCROLL_DOWN): if ((user_data->dlg.first_item+user_data->dlg.v_scrollbar_adjustment->page_size+1 == user_data->num_items)) return TRUE; - if ((user_data->dlg.first_item+user_data->dlg.v_scrollbar_adjustment->page_size+1) > (user_data->num_items-3)) + if ((user_data->dlg.first_item+user_data->dlg.v_scrollbar_adjustment->page_size+1) > (user_data->num_items-3)) user_data->dlg.first_item = user_data->num_items-(guint32)user_data->dlg.v_scrollbar_adjustment->page_size-1; else user_data->dlg.first_item += 3; - break; - case(GDK_SCROLL_LEFT): - case(GDK_SCROLL_RIGHT): - /* nothing to do */ - break; + break; + case(GDK_SCROLL_LEFT): + case(GDK_SCROLL_RIGHT): + /* nothing to do */ + break; } dialog_graph_redraw(user_data); - + return TRUE; } #endif @@ -1194,11 +1175,11 @@ static gint scroll_event(GtkWidget *widget, GdkEventScroll *event) static gint key_press_event(GtkWidget *widget, GdkEventKey *event _U_) { graph_analysis_data_t *user_data; - + user_data=(graph_analysis_data_t *)OBJECT_GET_DATA(widget, "graph_analysis_data_t"); /* if there is nothing selected, just return */ - if (user_data->dlg.selected_item == 0xFFFFFFFF) return TRUE; + if (user_data->dlg.selected_item == 0xFFFFFFFF) return TRUE; /* Up arrow */ if (event->keyval == GDK_Up){ @@ -1216,12 +1197,12 @@ static gint key_press_event(GtkWidget *widget, GdkEventKey *event _U_) if (user_data->dlg.first_node == 0) return TRUE; user_data->dlg.first_node--; } else return TRUE; - + user_data->dlg.needs_redraw=TRUE; dialog_graph_draw(user_data); cf_goto_frame(&cfile, user_data->dlg.items[user_data->dlg.selected_item-user_data->dlg.first_item].frame_num); - + return TRUE; } @@ -1235,14 +1216,13 @@ static gint expose_event(GtkWidget *widget, GdkEventExpose *event) exit(10); } - - if (GDK_IS_DRAWABLE(widget->window) ) - gdk_draw_pixmap(widget->window, - widget->style->fg_gc[GTK_WIDGET_STATE(widget)], - user_data->dlg.pixmap, - event->area.x, event->area.y, - event->area.x, event->area.y, - event->area.width, event->area.height); + if (GDK_IS_DRAWABLE(widget->window) ) + gdk_draw_pixmap(widget->window, + widget->style->fg_gc[GTK_WIDGET_STATE(widget)], + user_data->dlg.pixmap, + event->area.x, event->area.y, + event->area.x, event->area.y, + event->area.width, event->area.height); return FALSE; } @@ -1257,14 +1237,13 @@ static gint expose_event_comments(GtkWidget *widget, GdkEventExpose *event) exit(10); } - - if (GDK_IS_DRAWABLE(widget->window) ) - gdk_draw_pixmap(widget->window, - widget->style->fg_gc[GTK_WIDGET_STATE(widget)], - user_data->dlg.pixmap_comments, - event->area.x, event->area.y, - event->area.x, event->area.y, - event->area.width, event->area.height); + if (GDK_IS_DRAWABLE(widget->window) ) + gdk_draw_pixmap(widget->window, + widget->style->fg_gc[GTK_WIDGET_STATE(widget)], + user_data->dlg.pixmap_comments, + event->area.x, event->area.y, + event->area.x, event->area.y, + event->area.width, event->area.height); return FALSE; } @@ -1279,14 +1258,13 @@ static gint expose_event_time(GtkWidget *widget, GdkEventExpose *event) exit(10); } - - if (GDK_IS_DRAWABLE(widget->window) ) - gdk_draw_pixmap(widget->window, - widget->style->fg_gc[GTK_WIDGET_STATE(widget)], - user_data->dlg.pixmap_time, - event->area.x, event->area.y, - event->area.x, event->area.y, - event->area.width, event->area.height); + if (GDK_IS_DRAWABLE(widget->window) ) + gdk_draw_pixmap(widget->window, + widget->style->fg_gc[GTK_WIDGET_STATE(widget)], + user_data->dlg.pixmap_time, + event->area.x, event->area.y, + event->area.x, event->area.y, + event->area.width, event->area.height); return FALSE; } @@ -1295,28 +1273,28 @@ static gint expose_event_time(GtkWidget *widget, GdkEventExpose *event) static gint configure_event(GtkWidget *widget, GdkEventConfigure *event _U_) { graph_analysis_data_t *user_data; - int i; - - /* gray and soft gray colors */ - static GdkColor color_div_line[2] = { - {0, 0x64ff, 0x64ff, 0x64ff}, - {0, 0x7fff, 0x7fff, 0x7fff} - }; - - /* the first calor is blue to highlight the selected item */ - static GdkColor col[MAX_NUM_COL_CONV+1] = { - {0, 0x00FF, 0x00FF, 0xFFFF}, - {0, 0x33FF, 0xFFFF, 0x33FF}, - {0, 0x00FF, 0xCCFF, 0xCCFF}, - {0, 0x66FF, 0xFFFF, 0xFFFF}, - {0, 0x99FF, 0x66FF, 0xFFFF}, - {0, 0xFFFF, 0xFFFF, 0x33FF}, - {0, 0xCCFF, 0x99FF, 0xFFFF}, - {0, 0xCCFF, 0xFFFF, 0x33FF}, - {0, 0xFFFF, 0xCCFF, 0xCCFF}, - {0, 0xFFFF, 0x99FF, 0x66FF}, - {0, 0xFFFF, 0xFFFF, 0x99FF} - }; + int i; + + /* gray and soft gray colors */ + static GdkColor color_div_line[2] = { + {0, 0x64ff, 0x64ff, 0x64ff}, + {0, 0x7fff, 0x7fff, 0x7fff} + }; + + /* the first calor is blue to highlight the selected item */ + static GdkColor col[MAX_NUM_COL_CONV+1] = { + {0, 0x00FF, 0x00FF, 0xFFFF}, + {0, 0x33FF, 0xFFFF, 0x33FF}, + {0, 0x00FF, 0xCCFF, 0xCCFF}, + {0, 0x66FF, 0xFFFF, 0xFFFF}, + {0, 0x99FF, 0x66FF, 0xFFFF}, + {0, 0xFFFF, 0xFFFF, 0x33FF}, + {0, 0xCCFF, 0x99FF, 0xFFFF}, + {0, 0xCCFF, 0xFFFF, 0x33FF}, + {0, 0xFFFF, 0xCCFF, 0xCCFF}, + {0, 0xFFFF, 0x99FF, 0x66FF}, + {0, 0xFFFF, 0xFFFF, 0x99FF} + }; user_data=(graph_analysis_data_t *)OBJECT_GET_DATA(widget, "graph_analysis_data_t"); @@ -1334,44 +1312,44 @@ static gint configure_event(GtkWidget *widget, GdkEventConfigure *event _U_) widget->allocation.height, -1); - if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap) ) - gdk_draw_rectangle(user_data->dlg.pixmap, - widget->style->white_gc, - TRUE, - 0, 0, - widget->allocation.width, - widget->allocation.height); - - /* create gc for division lines and set the line stype to dash*/ - for (i=0; i<2; i++){ - user_data->dlg.div_line_gc[i]=gdk_gc_new(user_data->dlg.pixmap); - gdk_gc_set_line_attributes(user_data->dlg.div_line_gc[i], 1, GDK_LINE_ON_OFF_DASH, 0, 0); + if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap) ) + gdk_draw_rectangle(user_data->dlg.pixmap, + widget->style->white_gc, + TRUE, + 0, 0, + widget->allocation.width, + widget->allocation.height); + + /* create gc for division lines and set the line stype to dash*/ + for (i=0; i<2; i++){ + user_data->dlg.div_line_gc[i]=gdk_gc_new(user_data->dlg.pixmap); + gdk_gc_set_line_attributes(user_data->dlg.div_line_gc[i], 1, GDK_LINE_ON_OFF_DASH, 0, 0); #if GTK_MAJOR_VERSION < 2 - colormap = gtk_widget_get_colormap (widget); - if (!gdk_color_alloc (colormap, &color_div_line[i])){ - g_warning ("Couldn't allocate color"); - } - gdk_gc_set_foreground(user_data->dlg.div_line_gc[i], &color_div_line[i]); + colormap = gtk_widget_get_colormap (widget); + if (!gdk_color_alloc (colormap, &color_div_line[i])){ + g_warning ("Couldn't allocate color"); + } + gdk_gc_set_foreground(user_data->dlg.div_line_gc[i], &color_div_line[i]); #else - gdk_gc_set_rgb_fg_color(user_data->dlg.div_line_gc[i], &color_div_line[i]); + gdk_gc_set_rgb_fg_color(user_data->dlg.div_line_gc[i], &color_div_line[i]); #endif - } + } - /* create gcs for the background items */ - for (i=0; i<MAX_NUM_COL_CONV+1; i++){ - user_data->dlg.bg_gc[i]=gdk_gc_new(user_data->dlg.pixmap); + /* create gcs for the background items */ + for (i=0; i<MAX_NUM_COL_CONV+1; i++){ + user_data->dlg.bg_gc[i]=gdk_gc_new(user_data->dlg.pixmap); #if GTK_MAJOR_VERSION < 2 - colormap = gtk_widget_get_colormap (widget); - if (!gdk_color_alloc (colormap, &col[i])){ - g_warning ("Couldn't allocate color"); - } - gdk_gc_set_foreground(user_data->dlg.bg_gc[i], &col[i]); + colormap = gtk_widget_get_colormap (widget); + if (!gdk_color_alloc (colormap, &col[i])){ + g_warning ("Couldn't allocate color"); + } + gdk_gc_set_foreground(user_data->dlg.bg_gc[i], &col[i]); #else - gdk_gc_set_rgb_fg_color(user_data->dlg.bg_gc[i], &col[i]); + gdk_gc_set_rgb_fg_color(user_data->dlg.bg_gc[i], &col[i]); #endif - } - - dialog_graph_redraw(user_data); + } + + dialog_graph_redraw(user_data); return TRUE; } @@ -1397,15 +1375,15 @@ static gint configure_event_comments(GtkWidget *widget, GdkEventConfigure *event widget->allocation.height, -1); - if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap) ) - gdk_draw_rectangle(user_data->dlg.pixmap_comments, - widget->style->white_gc, - TRUE, - 0, 0, - widget->allocation.width, - widget->allocation.height); + if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap) ) + gdk_draw_rectangle(user_data->dlg.pixmap_comments, + widget->style->white_gc, + TRUE, + 0, 0, + widget->allocation.width, + widget->allocation.height); - dialog_graph_redraw(user_data); + dialog_graph_redraw(user_data); return TRUE; } @@ -1430,15 +1408,15 @@ static gint configure_event_time(GtkWidget *widget, GdkEventConfigure *event _U_ widget->allocation.height, -1); - if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap_time) ) - gdk_draw_rectangle(user_data->dlg.pixmap_time, - widget->style->white_gc, - TRUE, - 0, 0, - widget->allocation.width, - widget->allocation.height); + if ( GDK_IS_DRAWABLE(user_data->dlg.pixmap_time) ) + gdk_draw_rectangle(user_data->dlg.pixmap_time, + widget->style->white_gc, + TRUE, + 0, 0, + widget->allocation.width, + widget->allocation.height); - dialog_graph_redraw(user_data); + dialog_graph_redraw(user_data); return TRUE; } @@ -1451,19 +1429,19 @@ static gint pane_callback(GtkWidget *widget, GParamSpec *pspec, gpointer data) if(!user_data){ exit(10); } - if (gtk_paned_get_position(GTK_PANED(user_data->dlg.hpane)) > user_data->dlg.pixmap_width) - gtk_paned_set_position(GTK_PANED(user_data->dlg.hpane), user_data->dlg.pixmap_width); - else if (gtk_paned_get_position(GTK_PANED(user_data->dlg.hpane)) < NODE_WIDTH*2) - gtk_paned_set_position(GTK_PANED(user_data->dlg.hpane), NODE_WIDTH*2); - /* repaint the comment area because when moving the pane position thre are times that the expose_event_comments is not called */ - if (GDK_IS_DRAWABLE(user_data->dlg.draw_area_comments->window) ) - gdk_draw_pixmap(user_data->dlg.draw_area_comments->window, - user_data->dlg.draw_area_comments->style->fg_gc[GTK_WIDGET_STATE(widget)], - user_data->dlg.pixmap_comments, - 0,0, - 0,0, - user_data->dlg.draw_area_comments->allocation.width, - user_data->dlg.draw_area_comments->allocation.height); + if (gtk_paned_get_position(GTK_PANED(user_data->dlg.hpane)) > user_data->dlg.pixmap_width) + gtk_paned_set_position(GTK_PANED(user_data->dlg.hpane), user_data->dlg.pixmap_width); + else if (gtk_paned_get_position(GTK_PANED(user_data->dlg.hpane)) < NODE_WIDTH*2) + gtk_paned_set_position(GTK_PANED(user_data->dlg.hpane), NODE_WIDTH*2); + /* repaint the comment area because when moving the pane position thre are times that the expose_event_comments is not called */ + if (GDK_IS_DRAWABLE(user_data->dlg.draw_area_comments->window) ) + gdk_draw_pixmap(user_data->dlg.draw_area_comments->window, + user_data->dlg.draw_area_comments->style->fg_gc[GTK_WIDGET_STATE(widget)], + user_data->dlg.pixmap_comments, + 0,0, + 0,0, + user_data->dlg.draw_area_comments->allocation.width, + user_data->dlg.draw_area_comments->allocation.height); return TRUE; } #endif @@ -1471,28 +1449,28 @@ static gint pane_callback(GtkWidget *widget, GParamSpec *pspec, gpointer data) /****************************************************************************/ static gint v_scrollbar_changed(GtkWidget *widget _U_, gpointer data) { - graph_analysis_data_t *user_data=(graph_analysis_data_t *)data; - if ((user_data->dlg.first_item+user_data->dlg.v_scrollbar_adjustment->page_size+1 == user_data->num_items) + graph_analysis_data_t *user_data=(graph_analysis_data_t *)data; + if ((user_data->dlg.first_item+user_data->dlg.v_scrollbar_adjustment->page_size+1 == user_data->num_items) && (user_data->dlg.v_scrollbar_adjustment->value >= user_data->dlg.first_item )) return TRUE; if (user_data->dlg.first_item == user_data->dlg.v_scrollbar_adjustment->value) return TRUE; - - user_data->dlg.first_item = (guint32) user_data->dlg.v_scrollbar_adjustment->value; + + user_data->dlg.first_item = (guint32) user_data->dlg.v_scrollbar_adjustment->value; dialog_graph_redraw(user_data); - return TRUE; + return TRUE; } /****************************************************************************/ static void create_draw_area(graph_analysis_data_t* user_data, GtkWidget *box) { - GtkWidget *vbox; + GtkWidget *vbox; GtkWidget *hbox; - GtkWidget *viewport; - GtkWidget *scroll_window_comments; - GtkWidget *viewport_comments; + GtkWidget *viewport; + GtkWidget *scroll_window_comments; + GtkWidget *viewport_comments; hbox=gtk_hbox_new(FALSE, 0); gtk_widget_show(hbox); @@ -1500,47 +1478,47 @@ static void create_draw_area(graph_analysis_data_t* user_data, GtkWidget *box) vbox=gtk_vbox_new(FALSE, 0); gtk_widget_show(vbox); - /* create "time" draw area */ + /* create "time" draw area */ user_data->dlg.draw_area_time=gtk_drawing_area_new(); WIDGET_SET_SIZE(user_data->dlg.draw_area_time, TIME_WIDTH, user_data->dlg.pixmap_height); OBJECT_SET_DATA(user_data->dlg.draw_area_time, "graph_analysis_data_t", user_data); - - /* create "comments" draw area */ + + /* create "comments" draw area */ user_data->dlg.draw_area_comments=gtk_drawing_area_new(); WIDGET_SET_SIZE(user_data->dlg.draw_area_comments, COMMENT_WIDTH, user_data->dlg.pixmap_height); - scroll_window_comments=gtk_scrolled_window_new(NULL, NULL); - WIDGET_SET_SIZE(scroll_window_comments, COMMENT_WIDTH/2, user_data->dlg.pixmap_height); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll_window_comments), GTK_POLICY_ALWAYS, GTK_POLICY_NEVER); - viewport_comments = gtk_viewport_new(gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(scroll_window_comments)), gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(scroll_window_comments))); - gtk_container_add(GTK_CONTAINER(viewport_comments), user_data->dlg.draw_area_comments); - gtk_container_add(GTK_CONTAINER(scroll_window_comments), viewport_comments); - gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport_comments), GTK_SHADOW_NONE); + scroll_window_comments=gtk_scrolled_window_new(NULL, NULL); + WIDGET_SET_SIZE(scroll_window_comments, COMMENT_WIDTH/2, user_data->dlg.pixmap_height); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll_window_comments), GTK_POLICY_ALWAYS, GTK_POLICY_NEVER); + viewport_comments = gtk_viewport_new(gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(scroll_window_comments)), gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(scroll_window_comments))); + gtk_container_add(GTK_CONTAINER(viewport_comments), user_data->dlg.draw_area_comments); + gtk_container_add(GTK_CONTAINER(scroll_window_comments), viewport_comments); + gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport_comments), GTK_SHADOW_NONE); OBJECT_SET_DATA(user_data->dlg.draw_area_comments, "graph_analysis_data_t", user_data); - gtk_widget_add_events (user_data->dlg.draw_area_comments, GDK_BUTTON_PRESS_MASK); + gtk_widget_add_events (user_data->dlg.draw_area_comments, GDK_BUTTON_PRESS_MASK); #if GTK_MAJOR_VERSION >= 2 - SIGNAL_CONNECT(user_data->dlg.draw_area_comments, "scroll_event", scroll_event, user_data); + SIGNAL_CONNECT(user_data->dlg.draw_area_comments, "scroll_event", scroll_event, user_data); #endif - /* create main Graph draw area */ + /* create main Graph draw area */ user_data->dlg.draw_area=gtk_drawing_area_new(); - if (user_data->num_nodes < 2) - user_data->dlg.pixmap_width = 2 * NODE_WIDTH; - else - user_data->dlg.pixmap_width = user_data->num_nodes * NODE_WIDTH; + if (user_data->num_nodes < 2) + user_data->dlg.pixmap_width = 2 * NODE_WIDTH; + else + user_data->dlg.pixmap_width = user_data->num_nodes * NODE_WIDTH; WIDGET_SET_SIZE(user_data->dlg.draw_area, user_data->dlg.pixmap_width, user_data->dlg.pixmap_height); - user_data->dlg.scroll_window=gtk_scrolled_window_new(NULL, NULL); - if ( user_data->num_nodes < 6) - WIDGET_SET_SIZE(user_data->dlg.scroll_window, NODE_WIDTH*user_data->num_nodes, user_data->dlg.pixmap_height); - else - WIDGET_SET_SIZE(user_data->dlg.scroll_window, NODE_WIDTH*5, user_data->dlg.pixmap_height); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(user_data->dlg.scroll_window), GTK_POLICY_ALWAYS, GTK_POLICY_NEVER); - viewport = gtk_viewport_new(gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(user_data->dlg.scroll_window)), gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(user_data->dlg.scroll_window))); - gtk_container_add(GTK_CONTAINER(viewport), user_data->dlg.draw_area); - gtk_container_add(GTK_CONTAINER(user_data->dlg.scroll_window), viewport); - gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport), GTK_SHADOW_NONE); + user_data->dlg.scroll_window=gtk_scrolled_window_new(NULL, NULL); + if ( user_data->num_nodes < 6) + WIDGET_SET_SIZE(user_data->dlg.scroll_window, NODE_WIDTH*user_data->num_nodes, user_data->dlg.pixmap_height); + else + WIDGET_SET_SIZE(user_data->dlg.scroll_window, NODE_WIDTH*5, user_data->dlg.pixmap_height); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(user_data->dlg.scroll_window), GTK_POLICY_ALWAYS, GTK_POLICY_NEVER); + viewport = gtk_viewport_new(gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(user_data->dlg.scroll_window)), gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(user_data->dlg.scroll_window))); + gtk_container_add(GTK_CONTAINER(viewport), user_data->dlg.draw_area); + gtk_container_add(GTK_CONTAINER(user_data->dlg.scroll_window), viewport); + gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport), GTK_SHADOW_NONE); OBJECT_SET_DATA(user_data->dlg.draw_area, "graph_analysis_data_t", user_data); - GTK_WIDGET_SET_FLAGS(user_data->dlg.draw_area, GTK_CAN_FOCUS); - gtk_widget_grab_focus(user_data->dlg.draw_area); + GTK_WIDGET_SET_FLAGS(user_data->dlg.draw_area, GTK_CAN_FOCUS); + gtk_widget_grab_focus(user_data->dlg.draw_area); /* signals needed to handle backing pixmap */ SIGNAL_CONNECT(user_data->dlg.draw_area, "expose_event", expose_event, NULL); @@ -1554,40 +1532,40 @@ static void create_draw_area(graph_analysis_data_t* user_data, GtkWidget *box) SIGNAL_CONNECT(user_data->dlg.draw_area_time, "expose_event", expose_event_time, NULL); SIGNAL_CONNECT(user_data->dlg.draw_area_time, "configure_event", configure_event_time, user_data); - gtk_widget_add_events (user_data->dlg.draw_area, GDK_BUTTON_PRESS_MASK); - SIGNAL_CONNECT(user_data->dlg.draw_area, "button_press_event", button_press_event, user_data); + gtk_widget_add_events (user_data->dlg.draw_area, GDK_BUTTON_PRESS_MASK); + SIGNAL_CONNECT(user_data->dlg.draw_area, "button_press_event", button_press_event, user_data); #if GTK_MAJOR_VERSION >= 2 - SIGNAL_CONNECT(user_data->dlg.draw_area, "scroll_event", scroll_event, user_data); + SIGNAL_CONNECT(user_data->dlg.draw_area, "scroll_event", scroll_event, user_data); #endif - SIGNAL_CONNECT(user_data->dlg.draw_area, "key_press_event", key_press_event, user_data); + SIGNAL_CONNECT(user_data->dlg.draw_area, "key_press_event", key_press_event, user_data); - gtk_widget_show(user_data->dlg.draw_area_time); + gtk_widget_show(user_data->dlg.draw_area_time); gtk_widget_show(user_data->dlg.draw_area); - gtk_widget_show(viewport); - gtk_widget_show(user_data->dlg.draw_area_comments); - gtk_widget_show(viewport_comments); - - gtk_widget_show(user_data->dlg.scroll_window); - gtk_widget_show(scroll_window_comments); + gtk_widget_show(viewport); + gtk_widget_show(user_data->dlg.draw_area_comments); + gtk_widget_show(viewport_comments); + + gtk_widget_show(user_data->dlg.scroll_window); + gtk_widget_show(scroll_window_comments); gtk_box_pack_start(GTK_BOX(hbox), user_data->dlg.draw_area_time, FALSE, FALSE, 0); - user_data->dlg.hpane = gtk_hpaned_new(); - gtk_paned_pack1(GTK_PANED (user_data->dlg.hpane), user_data->dlg.scroll_window, FALSE, TRUE); - gtk_paned_pack2(GTK_PANED (user_data->dlg.hpane), scroll_window_comments, TRUE, TRUE); + user_data->dlg.hpane = gtk_hpaned_new(); + gtk_paned_pack1(GTK_PANED (user_data->dlg.hpane), user_data->dlg.scroll_window, FALSE, TRUE); + gtk_paned_pack2(GTK_PANED (user_data->dlg.hpane), scroll_window_comments, TRUE, TRUE); #if GTK_MAJOR_VERSION >= 2 - SIGNAL_CONNECT(user_data->dlg.hpane, "notify::position", pane_callback, user_data); + SIGNAL_CONNECT(user_data->dlg.hpane, "notify::position", pane_callback, user_data); #endif - gtk_widget_show(user_data->dlg.hpane); + gtk_widget_show(user_data->dlg.hpane); gtk_box_pack_start(GTK_BOX(hbox), user_data->dlg.hpane, TRUE, TRUE, 0); /* create the associated v_scrollbar */ - user_data->dlg.v_scrollbar_adjustment=(GtkAdjustment *)gtk_adjustment_new(0,0,0,0,0,0); + user_data->dlg.v_scrollbar_adjustment=(GtkAdjustment *)gtk_adjustment_new(0,0,0,0,0,0); user_data->dlg.v_scrollbar=gtk_vscrollbar_new(user_data->dlg.v_scrollbar_adjustment); gtk_widget_show(user_data->dlg.v_scrollbar); gtk_box_pack_end(GTK_BOX(hbox), user_data->dlg.v_scrollbar, FALSE, FALSE, 0); - SIGNAL_CONNECT(user_data->dlg.v_scrollbar_adjustment, "value_changed", v_scrollbar_changed, user_data); + SIGNAL_CONNECT(user_data->dlg.v_scrollbar_adjustment, "value_changed", v_scrollbar_changed, user_data); gtk_box_pack_start(GTK_BOX(box), hbox, TRUE, TRUE, 0); @@ -1604,7 +1582,7 @@ static void dialog_graph_create_window(graph_analysis_data_t* user_data) GtkWidget *hbuttonbox; GtkWidget *bt_close; GtkWidget *bt_save; - GtkTooltips *tooltips = gtk_tooltips_new(); + GtkTooltips *tooltips = gtk_tooltips_new(); /* create the main window */ user_data->dlg.window=window_new(GTK_WINDOW_TOPLEVEL, "Graph Analysis"); @@ -1617,27 +1595,27 @@ static void dialog_graph_create_window(graph_analysis_data_t* user_data) create_draw_area(user_data, vbox); /* button row */ - hbuttonbox = gtk_hbutton_box_new (); - gtk_box_pack_start (GTK_BOX (vbox), hbuttonbox, FALSE, FALSE, 0); - gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox), GTK_BUTTONBOX_SPREAD); - gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbuttonbox), 30); - gtk_widget_show(hbuttonbox); - - bt_save = BUTTON_NEW_FROM_STOCK(GTK_STOCK_SAVE_AS); - gtk_container_add(GTK_CONTAINER(hbuttonbox), bt_save); - gtk_widget_show(bt_save); - SIGNAL_CONNECT(bt_save, "clicked", on_save_bt_clicked, user_data); - gtk_tooltips_set_tip (tooltips, bt_save, "Save an ASCII representation of the graph to a file", NULL); - - bt_close = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CLOSE); - gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_close); - GTK_WIDGET_SET_FLAGS(bt_close, GTK_CAN_DEFAULT); - gtk_widget_show(bt_close); - gtk_tooltips_set_tip (tooltips, bt_close, "Close this dialog", NULL); + hbuttonbox = gtk_hbutton_box_new (); + gtk_box_pack_start (GTK_BOX (vbox), hbuttonbox, FALSE, FALSE, 0); + gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox), GTK_BUTTONBOX_SPREAD); + gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbuttonbox), 30); + gtk_widget_show(hbuttonbox); + + bt_save = BUTTON_NEW_FROM_STOCK(GTK_STOCK_SAVE_AS); + gtk_container_add(GTK_CONTAINER(hbuttonbox), bt_save); + gtk_widget_show(bt_save); + SIGNAL_CONNECT(bt_save, "clicked", on_save_bt_clicked, user_data); + gtk_tooltips_set_tip (tooltips, bt_save, "Save an ASCII representation of the graph to a file", NULL); + + bt_close = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CLOSE); + gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_close); + GTK_WIDGET_SET_FLAGS(bt_close, GTK_CAN_DEFAULT); + gtk_widget_show(bt_close); + gtk_tooltips_set_tip (tooltips, bt_close, "Close this dialog", NULL); window_set_cancel_button(user_data->dlg.window, bt_close, window_cancel_button_cb); SIGNAL_CONNECT(user_data->dlg.window, "delete_event", window_delete_event_cb, NULL); - SIGNAL_CONNECT(user_data->dlg.window, "destroy", on_destroy, user_data); + SIGNAL_CONNECT(user_data->dlg.window, "destroy", on_destroy, user_data); gtk_widget_show(user_data->dlg.window); window_present(user_data->dlg.window); @@ -1770,7 +1748,7 @@ void graph_analysis_create(graph_analysis_data_t* user_data) dialog_graph_create_window(user_data); /* redraw the graph */ - dialog_graph_redraw(user_data); + dialog_graph_redraw(user_data); return; } @@ -1785,16 +1763,16 @@ void graph_analysis_update(graph_analysis_data_t* user_data) get_nodes(user_data); user_data->dlg.pixmap_width = user_data->num_nodes * NODE_WIDTH; - WIDGET_SET_SIZE(user_data->dlg.draw_area, user_data->dlg.pixmap_width, user_data->dlg.pixmap_height); - if ( user_data->num_nodes < 6) - WIDGET_SET_SIZE(user_data->dlg.scroll_window, NODE_WIDTH*user_data->num_nodes, user_data->dlg.pixmap_height); - else - WIDGET_SET_SIZE(user_data->dlg.scroll_window, NODE_WIDTH*5, user_data->dlg.pixmap_height); + WIDGET_SET_SIZE(user_data->dlg.draw_area, user_data->dlg.pixmap_width, user_data->dlg.pixmap_height); + if ( user_data->num_nodes < 6) + WIDGET_SET_SIZE(user_data->dlg.scroll_window, NODE_WIDTH*user_data->num_nodes, user_data->dlg.pixmap_height); + else + WIDGET_SET_SIZE(user_data->dlg.scroll_window, NODE_WIDTH*5, user_data->dlg.pixmap_height); /* redraw the graph */ - dialog_graph_redraw(user_data); + dialog_graph_redraw(user_data); - window_present(user_data->dlg.window); + window_present(user_data->dlg.window); return; } |