Auto size COL_NUMBER, COL_PACKET_LENGTH and COL_CUMULATIVE_BYTES

svn path=/trunk/; revision=29778
This commit is contained in:
Kovarththanan Rajaratnam 2009-09-07 18:53:17 +00:00
parent 1ce02f035d
commit 33b8efd375
3 changed files with 141 additions and 69 deletions

View File

@ -138,7 +138,7 @@ void nstime_sum(nstime_t *sum, const nstime_t *a, const nstime_t *b)
* a < b : < 0
*/
int nstime_cmp (nstime_t *a, const nstime_t *b )
int nstime_cmp (const nstime_t *a, const nstime_t *b )
{
if (a->secs == b->secs) {
return a->nsecs - b->nsecs;

View File

@ -78,7 +78,7 @@ extern void nstime_sum(nstime_t *sum, const nstime_t *b, const nstime_t *a );
* a = b : 0
* a < b : < 0
*/
extern int nstime_cmp(nstime_t *a, const nstime_t *b );
extern int nstime_cmp (const nstime_t *a, const nstime_t *b );
/* converts nstime to double, time base is milli seconds */
extern double nstime_to_msec(const nstime_t *nstime);

View File

@ -41,8 +41,9 @@
#include "ui_util.h"
#include <epan/epan_dissect.h>
#include "epan/column_info.h"
#include "epan/column.h"
#include <epan/column_info.h>
#include <epan/column.h>
#include <epan/nstime.h>
#include "color.h"
#include "color_filters.h"
@ -678,7 +679,7 @@ packet_list_change_record(PacketList *packet_list, guint row, gint col, column_i
if (!record->fdata->col_text) {
record->fdata->col_text_len = se_alloc0(sizeof(record->fdata->col_text) *
(packet_list->n_columns-1));
(packet_list->n_columns-1));
record->fdata->col_text = se_alloc0(sizeof(record->fdata->col_text) *
(packet_list->n_columns-1));
}
@ -732,7 +733,7 @@ packet_list_change_record(PacketList *packet_list, guint row, gint col, column_i
default:
record->fdata->col_text_len[col] = (guint) strlen(cinfo->col_data[col]);
record->fdata->col_text[col] = se_memdup(cinfo->col_data[col],
record->fdata->col_text_len[col] + 1);
record->fdata->col_text_len[col] + 1);
break;
}
}
@ -772,73 +773,73 @@ packet_list_dissect_and_cache_all(PacketList *packet_list)
{
PacketListRecord *record;
int progbar_nextstep;
int progbar_quantum;
gboolean progbar_stop_flag;
GTimeVal progbar_start_time;
float progbar_val;
progdlg_t *progbar = NULL;
gchar progbar_status_str[100];
gint progbar_loop_max;
gint progbar_loop_var;
gint progbar_updates = 100 /* 100% */;
int progbar_nextstep;
int progbar_quantum;
gboolean progbar_stop_flag;
GTimeVal progbar_start_time;
float progbar_val;
progdlg_t *progbar = NULL;
gchar progbar_status_str[100];
gint progbar_loop_max;
gint progbar_loop_var;
gint progbar_updates = 100 /* 100% */;
g_assert(packet_list->columnized == FALSE);
progbar_loop_max = PACKET_LIST_RECORD_COUNT(packet_list->physical_rows);
/* Update the progress bar when it gets to this value. */
progbar_nextstep = 0;
/* When we reach the value that triggers a progress bar update,
bump that value by this amount. */
progbar_quantum = progbar_loop_max/progbar_updates;
/* Progress so far. */
progbar_val = 0.0f;
progbar_loop_max = PACKET_LIST_RECORD_COUNT(packet_list->physical_rows);
/* Update the progress bar when it gets to this value. */
progbar_nextstep = 0;
/* When we reach the value that triggers a progress bar update,
bump that value by this amount. */
progbar_quantum = progbar_loop_max/progbar_updates;
/* Progress so far. */
progbar_val = 0.0f;
progbar_stop_flag = FALSE;
g_get_current_time(&progbar_start_time);
progbar_stop_flag = FALSE;
g_get_current_time(&progbar_start_time);
main_window_update();
main_window_update();
for (progbar_loop_var = 0; progbar_loop_var < progbar_loop_max; ++progbar_loop_var) {
record = PACKET_LIST_RECORD_GET(packet_list->physical_rows, progbar_loop_var);
packet_list_dissect_and_cache_record(packet_list, record, TRUE, FALSE);
for (progbar_loop_var = 0; progbar_loop_var < progbar_loop_max; ++progbar_loop_var) {
record = PACKET_LIST_RECORD_GET(packet_list->physical_rows, progbar_loop_var);
packet_list_dissect_and_cache_record(packet_list, record, TRUE, FALSE);
/* Create the progress bar if necessary.
We check on every iteration of the loop, so that it takes no
longer than the standard time to create it (otherwise, for a
large file, we might take considerably longer than that standard
time in order to get to the next progress bar step). */
if (progbar == NULL)
progbar = delayed_create_progress_dlg("Construct", "Columns",
TRUE, &progbar_stop_flag,
&progbar_start_time, progbar_val);
/* Create the progress bar if necessary.
We check on every iteration of the loop, so that it takes no
longer than the standard time to create it (otherwise, for a
large file, we might take considerably longer than that standard
time in order to get to the next progress bar step). */
if (progbar == NULL)
progbar = delayed_create_progress_dlg("Construct", "Columns",
TRUE, &progbar_stop_flag,
&progbar_start_time, progbar_val);
if (progbar_loop_var >= progbar_nextstep) {
/* let's not divide by zero. We should never be started
* with count == 0, so let's assert that */
g_assert(progbar_loop_max > 0);
if (progbar_loop_var >= progbar_nextstep) {
/* let's not divide by zero. We should never be started
* with count == 0, so let's assert that */
g_assert(progbar_loop_max > 0);
progbar_val = (gfloat) progbar_loop_var / progbar_loop_max;
progbar_val = (gfloat) progbar_loop_var / progbar_loop_max;
if (progbar != NULL) {
g_snprintf(progbar_status_str, sizeof(progbar_status_str),
"%u of %u frames", progbar_loop_var+1, progbar_loop_max);
update_progress_dlg(progbar, progbar_val, progbar_status_str);
}
if (progbar != NULL) {
g_snprintf(progbar_status_str, sizeof(progbar_status_str),
"%u of %u frames", progbar_loop_var+1, progbar_loop_max);
update_progress_dlg(progbar, progbar_val, progbar_status_str);
}
progbar_nextstep += progbar_quantum;
}
progbar_nextstep += progbar_quantum;
}
if (progbar_stop_flag) {
/* Well, the user decided to abort the resizing... */
break;
}
}
if (progbar_stop_flag) {
/* Well, the user decided to abort the resizing... */
break;
}
}
/* We're done resizing the columns; destroy the progress bar if it
was created. */
if (progbar != NULL)
destroy_progress_dlg(progbar);
/* We're done resizing the columns; destroy the progress bar if it
was created. */
if (progbar != NULL)
destroy_progress_dlg(progbar);
packet_list->columnized = TRUE;
}
@ -1125,29 +1126,100 @@ packet_list_get_widest_column_string(PacketList *packet_list, gint col)
return "";
if (col_based_on_frame_data(&cfile.cinfo, col)) {
/* TODO: Calculate according to column */
return get_column_width_string(get_column_format(col), col);
PacketListRecord *record;
guint vis_idx;
guint32 widest_column_val = 0;
nstime_t widest_column_time;
nstime_set_zero(&widest_column_time);
for(vis_idx = 0; vis_idx < PACKET_LIST_RECORD_COUNT(packet_list->visible_rows); ++vis_idx) {
record = PACKET_LIST_RECORD_GET(packet_list->visible_rows, vis_idx);
switch (cfile.cinfo.col_fmt[col]) {
case COL_NUMBER:
if (record->fdata->num > widest_column_val)
widest_column_val = record->fdata->num;
break;
case COL_PACKET_LENGTH:
if (record->fdata->pkt_len > widest_column_val)
widest_column_val = record->fdata->pkt_len;
break;
case COL_CUMULATIVE_BYTES:
if (record->fdata->cum_bytes > widest_column_val)
widest_column_val = record->fdata->cum_bytes;
break;
case COL_ABS_TIME:
if (nstime_cmp(&record->fdata->abs_ts, &widest_column_time))
widest_column_time = record->fdata->abs_ts;
break;
case COL_REL_TIME:
if (nstime_cmp(&record->fdata->rel_ts, &widest_column_time))
widest_column_time = record->fdata->rel_ts;
break;
case COL_DELTA_TIME:
if (nstime_cmp(&record->fdata->del_cap_ts, &widest_column_time))
widest_column_time = record->fdata->del_cap_ts;
break;
case COL_DELTA_TIME_DIS:
if (nstime_cmp(&record->fdata->del_dis_ts, &widest_column_time))
widest_column_time = record->fdata->del_dis_ts;
break;
case COL_CLS_TIME:
case COL_ABS_DATE_TIME:
/* TODO: Implement */
break;
default:
g_assert_not_reached();
}
}
switch (cfile.cinfo.col_fmt[col]) {
case COL_NUMBER:
case COL_PACKET_LENGTH:
case COL_CUMULATIVE_BYTES:
return ep_strdup_printf("%u", widest_column_val);
case COL_ABS_TIME:
case COL_REL_TIME:
case COL_DELTA_TIME:
case COL_DELTA_TIME_DIS:
/* TODO: Implement */
return get_column_width_string(get_column_format(col), col);
case COL_CLS_TIME:
case COL_ABS_DATE_TIME:
/* TODO: Implement */
return get_column_width_string(get_column_format(col), col);
default:
g_assert_not_reached();
return NULL;
}
}
else {
PacketListRecord *record;
guint vis_idx;
guint widest_column_idx = 0;
gchar *widest_column_str = NULL;
guint widest_column_len = 0;
if (!packet_list->columnized)
packet_list_dissect_and_cache_all(packet_list);
if (!packet_list->columnized)
packet_list_dissect_and_cache_all(packet_list);
for(vis_idx = 0; vis_idx < PACKET_LIST_RECORD_COUNT(packet_list->visible_rows); ++vis_idx) {
record = PACKET_LIST_RECORD_GET(packet_list->visible_rows, vis_idx);
if (record->fdata->col_text_len[col] > widest_column_len) {
widest_column_idx = vis_idx;
widest_column_str = record->fdata->col_text[col];
widest_column_len = record->fdata->col_text_len[col];
}
}
g_assert(widest_column_idx < PACKET_LIST_RECORD_COUNT(packet_list->visible_rows));
record = PACKET_LIST_RECORD_GET(packet_list->visible_rows, widest_column_idx);
return record->fdata->col_text[col];
return widest_column_str;
}
}