forked from osmocom/wireshark
Update all time columns when changing the time precision.
Not implemented for conversation relative and delta time yet, because this will need a reload as they are set by the dissectors and does not exist in the frame data. svn path=/trunk/; revision=25452
This commit is contained in:
parent
98325a69c9
commit
c64847fe16
|
@ -341,6 +341,17 @@ have_custom_cols(column_info *cinfo)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
col_has_time_fmt(column_info *cinfo, gint col)
|
||||
{
|
||||
return ((cinfo->fmt_matx[col][COL_CLS_TIME]) ||
|
||||
(cinfo->fmt_matx[col][COL_ABS_TIME]) ||
|
||||
(cinfo->fmt_matx[col][COL_ABS_DATE_TIME]) ||
|
||||
(cinfo->fmt_matx[col][COL_REL_TIME]) ||
|
||||
(cinfo->fmt_matx[col][COL_DELTA_TIME]) ||
|
||||
(cinfo->fmt_matx[col][COL_DELTA_TIME_DIS]));
|
||||
}
|
||||
|
||||
static void
|
||||
col_do_append_sep_va_fstr(column_info *cinfo, gint el, const gchar *separator,
|
||||
const gchar *format, va_list ap)
|
||||
|
@ -936,14 +947,8 @@ col_set_epoch_time(frame_data *fd, column_info *cinfo, int col)
|
|||
g_strlcpy(cinfo->col_expr.col_expr[col],"frame.time_delta",COL_MAX_LEN);
|
||||
g_strlcpy(cinfo->col_expr.col_expr_val[col],cinfo->col_buf[col],COL_MAX_LEN);
|
||||
}
|
||||
/* Set the format of the variable time format.
|
||||
XXX - this is called from "file.c" when the user changes the time
|
||||
format they want for "command-line-specified" time; it's a bit ugly
|
||||
that we have to export it, but if we go to a CList-like widget that
|
||||
invokes callbacks to get the text for the columns rather than
|
||||
requiring us to stuff the text into the widget from outside, we
|
||||
might be able to clean this up. */
|
||||
void
|
||||
|
||||
static void
|
||||
col_set_cls_time(frame_data *fd, column_info *cinfo, gint col)
|
||||
{
|
||||
switch (timestamp_get_type()) {
|
||||
|
@ -972,9 +977,55 @@ col_set_cls_time(frame_data *fd, column_info *cinfo, gint col)
|
|||
break;
|
||||
|
||||
case TS_NOT_SET:
|
||||
/* code is missing for this case, but I don't know which [jmayer20051219] */
|
||||
g_assert(FALSE);
|
||||
break;
|
||||
/* code is missing for this case, but I don't know which [jmayer20051219] */
|
||||
g_assert(FALSE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Set the format of the variable time format.
|
||||
XXX - this is called from "file.c" when the user changes the time
|
||||
format they want for "command-line-specified" time; it's a bit ugly
|
||||
that we have to export it, but if we go to a CList-like widget that
|
||||
invokes callbacks to get the text for the columns rather than
|
||||
requiring us to stuff the text into the widget from outside, we
|
||||
might be able to clean this up. */
|
||||
void
|
||||
col_set_fmt_time(frame_data *fd, column_info *cinfo, gint fmt, gint col)
|
||||
{
|
||||
switch (fmt) {
|
||||
case COL_CLS_TIME:
|
||||
col_set_cls_time(fd, cinfo, col);
|
||||
break;
|
||||
|
||||
case COL_ABS_TIME:
|
||||
col_set_abs_time(fd, cinfo, col);
|
||||
break;
|
||||
|
||||
case COL_ABS_DATE_TIME:
|
||||
col_set_abs_date_time(fd, cinfo, col);
|
||||
break;
|
||||
|
||||
case COL_REL_TIME:
|
||||
col_set_rel_time(fd, cinfo, col);
|
||||
break;
|
||||
|
||||
case COL_DELTA_TIME:
|
||||
col_set_delta_time(fd, cinfo, col);
|
||||
break;
|
||||
|
||||
case COL_DELTA_TIME_DIS:
|
||||
col_set_delta_time_dis(fd, cinfo, col);
|
||||
break;
|
||||
|
||||
case COL_REL_CONV_TIME:
|
||||
case COL_DELTA_CONV_TIME:
|
||||
/* Will be set by various dissectors */
|
||||
break;
|
||||
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ extern void col_init(column_info *cinfo);
|
|||
*
|
||||
* Internal, don't use this in dissectors!
|
||||
*/
|
||||
extern void col_set_cls_time(frame_data *, column_info *cinfo, gint col);
|
||||
extern void col_set_fmt_time(frame_data *fd, column_info *cinfo, gint fmt, gint col);
|
||||
|
||||
/** Fill in all columns of the given packet.
|
||||
*
|
||||
|
@ -152,6 +152,7 @@ void col_custom_prime_edt(epan_dissect_t *edt, column_info *cinfo);
|
|||
|
||||
/* For internal Wireshark use only. Not to be called from dissectors. */
|
||||
gboolean have_custom_cols(column_info *cinfo);
|
||||
gboolean col_has_time_fmt(column_info *cinfo, gint col);
|
||||
|
||||
/** Append the given text to a column element, the text will be copied.
|
||||
*
|
||||
|
|
|
@ -82,10 +82,11 @@ col_custom_set_fstr
|
|||
col_format_desc
|
||||
col_format_to_string
|
||||
col_get_writable
|
||||
col_has_time_fmt
|
||||
col_prepend_fence_fstr
|
||||
col_prepend_fstr
|
||||
col_set_cls_time
|
||||
col_set_fence
|
||||
col_set_fmt_time
|
||||
col_set_str
|
||||
col_set_time
|
||||
col_set_writable
|
||||
|
|
23
file.c
23
file.c
|
@ -2504,7 +2504,6 @@ cf_change_time_formats(capture_file *cf)
|
|||
gchar status_str[100];
|
||||
int progbar_nextstep;
|
||||
int progbar_quantum;
|
||||
int first, last;
|
||||
gboolean sorted_by_frame_column;
|
||||
|
||||
|
||||
|
@ -2517,14 +2516,16 @@ cf_change_time_formats(capture_file *cf)
|
|||
XXX - we have to force the "column is writable" flag on, as it
|
||||
might be off from the last frame that was dissected. */
|
||||
col_set_writable(&cf->cinfo, TRUE);
|
||||
if (!check_col(&cf->cinfo, COL_CLS_TIME)) {
|
||||
if (!check_col(&cf->cinfo, COL_CLS_TIME) &&
|
||||
!check_col(&cf->cinfo, COL_ABS_TIME) &&
|
||||
!check_col(&cf->cinfo, COL_ABS_DATE_TIME) &&
|
||||
!check_col(&cf->cinfo, COL_REL_TIME) &&
|
||||
!check_col(&cf->cinfo, COL_DELTA_TIME) &&
|
||||
!check_col(&cf->cinfo, COL_DELTA_TIME_DIS)) {
|
||||
/* No, there aren't any columns in that format, so we have no work
|
||||
to do. */
|
||||
return;
|
||||
}
|
||||
first = cf->cinfo.col_first[COL_CLS_TIME];
|
||||
g_assert(first >= 0);
|
||||
last = cf->cinfo.col_last[COL_CLS_TIME];
|
||||
|
||||
/* Freeze the packet list while we redo it, so we don't get any
|
||||
screen updates while it happens. */
|
||||
|
@ -2630,12 +2631,12 @@ cf_change_time_formats(capture_file *cf)
|
|||
if (row != -1) {
|
||||
/* This packet is in the summary list, on row "row". */
|
||||
|
||||
for (i = first; i <= last; i++) {
|
||||
if (cf->cinfo.fmt_matx[i][COL_CLS_TIME]) {
|
||||
for (i = 0; i < cf->cinfo.num_cols; i++) {
|
||||
if (col_has_time_fmt(&cf->cinfo, i)) {
|
||||
/* This is one of the columns that shows the time in
|
||||
"command-line-specified" format; update it. */
|
||||
cf->cinfo.col_buf[i][0] = '\0';
|
||||
col_set_cls_time(fdata, &cf->cinfo, i);
|
||||
col_set_fmt_time(fdata, &cf->cinfo, cf->cinfo.col_fmt[i], i);
|
||||
packet_list_set_text(row, i, cf->cinfo.col_data[i]);
|
||||
}
|
||||
}
|
||||
|
@ -2649,9 +2650,9 @@ cf_change_time_formats(capture_file *cf)
|
|||
|
||||
/* Set the column widths of those columns that show the time in
|
||||
"command-line-specified" format. */
|
||||
for (i = first; i <= last; i++) {
|
||||
if (cf->cinfo.fmt_matx[i][COL_CLS_TIME]) {
|
||||
packet_list_set_cls_time_width(i);
|
||||
for (i = 0; i < cf->cinfo.num_cols; i++) {
|
||||
if (col_has_time_fmt(&cf->cinfo, i)) {
|
||||
packet_list_set_time_width(cf->cinfo.col_fmt[i], i);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -808,7 +808,7 @@ packet_list_set_text(gint row, gint column, const gchar *text)
|
|||
/* Set the column widths of those columns that show the time in
|
||||
* "command-line-specified" format. */
|
||||
void
|
||||
packet_list_set_cls_time_width(gint column)
|
||||
packet_list_set_time_width(gint col_fmt, gint column)
|
||||
{
|
||||
gint width = -1;
|
||||
PangoLayout *layout;
|
||||
|
@ -818,7 +818,7 @@ packet_list_set_cls_time_width(gint column)
|
|||
}
|
||||
if (width == -1) {
|
||||
layout = gtk_widget_create_pango_layout(packet_list,
|
||||
get_column_longest_string(COL_CLS_TIME));
|
||||
get_column_longest_string(col_fmt));
|
||||
pango_layout_get_pixel_size(layout, &width, NULL);
|
||||
g_object_unref(G_OBJECT(layout));
|
||||
}
|
||||
|
|
|
@ -64,7 +64,7 @@ gint packet_list_append(const gchar *text[], gpointer data);
|
|||
void packet_list_set_colors(gint, color_t *, color_t *);
|
||||
gint packet_list_find_row_from_data(gpointer);
|
||||
void packet_list_set_text(gint, gint, const gchar *);
|
||||
void packet_list_set_cls_time_width(gint);
|
||||
void packet_list_set_time_width(gint, gint);
|
||||
gpointer packet_list_get_row_data(gint);
|
||||
void packet_list_set_selected_row(gint);
|
||||
gint packet_list_get_sort_column(void);
|
||||
|
|
Loading…
Reference in New Issue