aboutsummaryrefslogtreecommitdiffstats
path: root/gtk/rtp_analysis.c
diff options
context:
space:
mode:
authorwmeier <wmeier@f5534014-38df-0310-8fa8-9805f1628bb7>2010-08-19 22:04:37 +0000
committerwmeier <wmeier@f5534014-38df-0310-8fa8-9805f1628bb7>2010-08-19 22:04:37 +0000
commit6ae906328f9cbd245eb2439f7fe26526eda58413 (patch)
tree430a830e267e582c2a921f3cfd66a315a0201a0b /gtk/rtp_analysis.c
parentfb668b5260ca23cd44def571e588e28847d810f7 (diff)
Minor cleanup of rtp graph:
- Display current value in combo boxes (pixels_per_tick, etc) to always match actual values being used to create graph; - yscale combo box entries: show values >= 1 sec as sec (not s000 ms); - Determine max yscale label width properly as the largest of the top or middle label lengths; - Cleanup some indentation. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@33855 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'gtk/rtp_analysis.c')
-rw-r--r--gtk/rtp_analysis.c51
1 files changed, 36 insertions, 15 deletions
diff --git a/gtk/rtp_analysis.c b/gtk/rtp_analysis.c
index e5219fde61..3107a0bb53 100644
--- a/gtk/rtp_analysis.c
+++ b/gtk/rtp_analysis.c
@@ -114,6 +114,7 @@ enum
#define NUM_COLS 9
#define NUM_GRAPH_ITEMS 100000
#define MAX_YSCALE 16
+#define AUTO_MAX_YSCALE_INDEX 0
#define AUTO_MAX_YSCALE 0
#define MAX_GRAPHS 4
#define GRAPH_FWD_JITTER 0
@@ -123,12 +124,12 @@ enum
static guint32 yscale_max[MAX_YSCALE] = {AUTO_MAX_YSCALE, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 200000, 500000, 1000000, 2000000, 5000000, 10000000, 20000000, 50000000};
#define MAX_PIXELS_PER_TICK 4
-#define DEFAULT_PIXELS_PER_TICK 1
+#define DEFAULT_PIXELS_PER_TICK_INDEX 1
static guint32 pixels_per_tick[MAX_PIXELS_PER_TICK] = {1, 2, 5, 10};
static const char *graph_descr[4] = {"Fwd Jitter", "Fwd Difference", "Rvr Jitter", "Rvr Difference"};
/* unit is in ms */
#define MAX_TICK_VALUES 5
-#define DEFAULT_TICK_VALUE 1
+#define DEFAULT_TICK_INTERVAL_VALUES_INDEX 1
static guint tick_interval_values[MAX_TICK_VALUES] = { 1, 10, 100, 1000, 10000 };
typedef struct _dialog_graph_graph_item_t {
guint32 value;
@@ -150,9 +151,10 @@ typedef struct _dialog_graph_graph_t {
typedef struct _dialog_graph_t {
gboolean needs_redraw;
- gint32 interval; /* measurement interval in ms */
+ gint32 interval_index; /* index into tick_interval_values_array */
+ gint32 interval; /* measurement interval in ms */
guint32 last_interval;
- guint32 max_interval; /* XXX max_interval and num_items are redundant */
+ guint32 max_interval; /* XXX max_interval and num_items are redundant */
guint32 num_items;
struct _dialog_graph_graph_t graph[MAX_GRAPHS];
GtkWidget *window;
@@ -162,7 +164,9 @@ typedef struct _dialog_graph_t {
GtkWidget *scrollbar;
int pixmap_width;
int pixmap_height;
+ int pixels_per_tick_index; /* index into pixels_per_tick array */
int pixels_per_tick;
+ int max_y_units_index; /* index into yscale_max array */
int max_y_units;
double start_time;
} dialog_graph_t;
@@ -908,6 +912,7 @@ static void dialog_graph_draw(user_data_t* user_data)
guint32 bottom_y_border;
PangoLayout *layout;
int label_width, label_height;
+ int label_width_mid, label_height_mid;
guint32 draw_width, draw_height;
char label_string[15];
@@ -988,12 +993,19 @@ static void dialog_graph_draw(user_data_t* user_data)
/*
* Calculate size of borders surrounding the plot
* The border on the right side needs to be adjusted depending
- * on the width of the text labels. For simplicity we assume that the
- * top y scale label will be the widest one
+ * on the width of the text labels.
*/
print_time_scale_string(label_string, sizeof(label_string), max_y);
layout = gtk_widget_create_pango_layout(user_data->dlg.dialog_graph.draw_area, label_string);
pango_layout_get_pixel_size(layout, &label_width, &label_height);
+ print_time_scale_string(label_string, sizeof(label_string), max_y*5/10);
+ layout = gtk_widget_create_pango_layout(user_data->dlg.dialog_graph.draw_area, label_string);
+ pango_layout_get_pixel_size(layout, &label_width_mid, &label_height_mid);
+ if (label_width_mid > label_width) {
+ label_width = label_width_mid;
+ label_height = label_height_mid;
+ }
+
left_x_border=10;
right_x_border=label_width+20;
top_y_border=10;
@@ -1499,6 +1511,7 @@ static void yscale_select(GtkWidget *item, gpointer key)
user_data=(user_data_t *)key;
i = gtk_combo_box_get_active (GTK_COMBO_BOX(item));
+ user_data->dlg.dialog_graph.max_y_units_index=i;
user_data->dlg.dialog_graph.max_y_units=yscale_max[i];
dialog_graph_redraw(user_data);
}
@@ -1511,6 +1524,8 @@ static void pixels_per_tick_select(GtkWidget *item, gpointer key)
user_data=(user_data_t *)key;
i = gtk_combo_box_get_active (GTK_COMBO_BOX(item));
+
+ user_data->dlg.dialog_graph.pixels_per_tick_index=i;
user_data->dlg.dialog_graph.pixels_per_tick=pixels_per_tick[i];
dialog_graph_redraw(user_data);
}
@@ -1524,6 +1539,7 @@ static void tick_interval_select(GtkWidget *item, gpointer key)
user_data=(user_data_t *)key;
i = gtk_combo_box_get_active (GTK_COMBO_BOX(item));
+ user_data->dlg.dialog_graph.interval_index=i;
user_data->dlg.dialog_graph.interval=tick_interval_values[i];
cf_retap_packets(&cfile);
dialog_graph_redraw(user_data);
@@ -1542,12 +1558,14 @@ create_yscale_max_menu_items(user_data_t* user_data)
for(i=0;i<MAX_YSCALE;i++){
if(yscale_max[i]==AUTO_MAX_YSCALE){
g_strlcpy(str,"Auto",sizeof(str));
- } else {
+ } else if (yscale_max[i] < 1000000) {
g_snprintf(str, sizeof(str), "%u ms", yscale_max[i]/1000);
+ } else {
+ g_snprintf(str, sizeof(str), "%u s", yscale_max[i]/1000000);
}
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_box), str);
}
- gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box), 0);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box), user_data->dlg.dialog_graph.max_y_units_index);
g_signal_connect(combo_box, "changed", G_CALLBACK(yscale_select), (gpointer)user_data);
return combo_box;
@@ -1565,13 +1583,13 @@ create_pixels_per_tick_menu_items(user_data_t *user_data)
for(i=0;i<MAX_PIXELS_PER_TICK;i++){
g_snprintf(str, sizeof(str), "%u", pixels_per_tick[i]);
- gtk_combo_box_append_text (GTK_COMBO_BOX (combo_box), str);
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo_box), str);
}
- gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box), DEFAULT_PIXELS_PER_TICK);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box), user_data->dlg.dialog_graph.pixels_per_tick_index);
- g_signal_connect(combo_box, "changed", G_CALLBACK(pixels_per_tick_select), (gpointer)user_data);
+ g_signal_connect(combo_box, "changed", G_CALLBACK(pixels_per_tick_select), (gpointer)user_data);
- return combo_box;
+ return combo_box;
}
/****************************************************************************/
@@ -1596,7 +1614,7 @@ create_tick_interval_menu_items(user_data_t *user_data)
}
gtk_combo_box_append_text (GTK_COMBO_BOX (combo_box), str);
}
- gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box), 0);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box), user_data->dlg.dialog_graph.interval_index);
g_signal_connect(combo_box, "changed", G_CALLBACK(tick_interval_select), (gpointer)user_data);
return combo_box;
@@ -3561,14 +3579,17 @@ void rtp_analysis(
/* init dialog_graph */
user_data->dlg.dialog_graph.needs_redraw=TRUE;
- user_data->dlg.dialog_graph.interval=tick_interval_values[DEFAULT_TICK_VALUE];
+ user_data->dlg.dialog_graph.interval_index=DEFAULT_TICK_INTERVAL_VALUES_INDEX;
+ user_data->dlg.dialog_graph.interval=tick_interval_values[DEFAULT_TICK_INTERVAL_VALUES_INDEX];
user_data->dlg.dialog_graph.draw_area=NULL;
user_data->dlg.dialog_graph.pixmap=NULL;
user_data->dlg.dialog_graph.scrollbar=NULL;
user_data->dlg.dialog_graph.scrollbar_adjustment=NULL;
user_data->dlg.dialog_graph.pixmap_width=500;
user_data->dlg.dialog_graph.pixmap_height=200;
- user_data->dlg.dialog_graph.pixels_per_tick=pixels_per_tick[DEFAULT_PIXELS_PER_TICK];
+ user_data->dlg.dialog_graph.pixels_per_tick_index=DEFAULT_PIXELS_PER_TICK_INDEX;
+ user_data->dlg.dialog_graph.pixels_per_tick=pixels_per_tick[DEFAULT_PIXELS_PER_TICK_INDEX];
+ user_data->dlg.dialog_graph.max_y_units_index=AUTO_MAX_YSCALE_INDEX;
user_data->dlg.dialog_graph.max_y_units=AUTO_MAX_YSCALE;
user_data->dlg.dialog_graph.last_interval=0xffffffff;
user_data->dlg.dialog_graph.max_interval=0;