Minor cleanup of iax2 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 ms values as ms (not x000 usecs);
   show us values with unit "us" (not "ms");
- Determine max yscale label width properly as the largest of the
  top or middle label lengths;
- Cleanup some indentation.

svn path=/trunk/; revision=33834
This commit is contained in:
Bill Meier 2010-08-18 00:04:53 +00:00
parent 6ebc2acff4
commit d97116bd7a
1 changed files with 50 additions and 29 deletions

View File

@ -111,22 +111,23 @@ typedef struct column_arrows {
#define NUM_COLS 7
#define NUM_GRAPH_ITEMS 100000
#define MAX_YSCALE 16
#define MAX_YSCALE 17
#define AUTO_MAX_YSCALE_INDEX 0
#define AUTO_MAX_YSCALE 0
#define MAX_GRAPHS 4
#define GRAPH_FWD_JITTER 0
#define GRAPH_FWD_DIFF 1
#define GRAPH_REV_JITTER 2
#define GRAPH_REV_DIFF 3
static guint32 yscale_max[MAX_YSCALE] = {AUTO_MAX_YSCALE, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 200000, 500000, 1000000, 2000000, 5000000, 10000000, 20000000, 50000000};
static guint32 yscale_max[MAX_YSCALE] = {AUTO_MAX_YSCALE, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 200000, 500000, 1000000, 2000000, 5000000, 10000000, 20000000, 50000000, 100000000};
#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;
@ -148,9 +149,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;
@ -160,7 +162,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;
@ -881,6 +885,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];
@ -961,12 +966,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;
@ -1462,11 +1474,12 @@ static void create_filter_area(user_data_t* user_data, GtkWidget *box)
static void yscale_select(GtkWidget *item, gpointer key)
{
int i;
user_data_t *user_data;
user_data_t *user_data;
user_data=(user_data_t *)key;
i = gtk_combo_box_get_active (GTK_COMBO_BOX(item));
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]/1000;
dialog_graph_redraw(user_data);
}
@ -1478,7 +1491,8 @@ static void pixels_per_tick_select(GtkWidget *item, gpointer key)
user_data_t *user_data;
user_data=(user_data_t *)key;
i = gtk_combo_box_get_active (GTK_COMBO_BOX(item));
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);
}
@ -1487,11 +1501,12 @@ static void pixels_per_tick_select(GtkWidget *item, gpointer key)
static void tick_interval_select(GtkWidget *item, gpointer key)
{
int i;
user_data_t *user_data;
user_data_t *user_data;
user_data=(user_data_t *)key;
i = gtk_combo_box_get_active (GTK_COMBO_BOX(item));
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);
@ -1505,20 +1520,23 @@ create_yscale_max_menu_items(user_data_t* user_data)
GtkWidget *combo_box;
int i;
combo_box = gtk_combo_box_new_text ();
combo_box = gtk_combo_box_new_text ();
for(i=0;i<MAX_YSCALE;i++){
if(yscale_max[i]==AUTO_MAX_YSCALE){
g_strlcpy(str,"Auto",sizeof(str));
g_strlcpy(str,"Auto",sizeof(str));
} else if (yscale_max[i] < 1000000) {
g_snprintf(str, sizeof(str), "%u us", yscale_max[i]/1000);
} else {
g_snprintf(str, sizeof(str), "%u ms", yscale_max[i]/1000);
}
g_snprintf(str, sizeof(str), "%u ms", 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);
g_signal_connect(combo_box, "changed", G_CALLBACK(yscale_select), (gpointer)user_data);
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;
return combo_box;
}
/****************************************************************************/
@ -1529,17 +1547,17 @@ create_pixels_per_tick_menu_items(user_data_t *user_data)
GtkWidget *combo_box;
int i;
combo_box = gtk_combo_box_new_text ();
combo_box = gtk_combo_box_new_text ();
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;
}
/****************************************************************************/
@ -1564,7 +1582,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;
@ -3340,14 +3358,17 @@ void iax2_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;