#include "../simple_dialog.h"
#include "../stat_menu.h"
#include "../progress_dlg.h"
-#include "../color.h"
#include "../tempfile.h"
#include <wsutil/file_util.h>
#include "gtk/rtp_stream_dlg.h"
#include "gtk/utf8_entities.h"
+#include "gtk/old-gtk-compat.h"
+
enum
{
PACKET_COLUMN,
};
/****************************************************************************/
-
-typedef struct column_arrows {
- GtkWidget *table;
- GtkWidget *ascend_pm;
- GtkWidget *descend_pm;
-} column_arrows;
-
#define NUM_COLS 7
#define NUM_GRAPH_ITEMS 100000
#define MAX_YSCALE 16
GtkWidget *display_button;
int hf_index;
GdkColor color;
- GdkGC *gc;
gchar title[100];
} dialog_graph_graph_t;
struct _dialog_graph_graph_t graph[MAX_GRAPHS];
GtkWidget *window;
GtkWidget *draw_area;
+#if GTK_CHECK_VERSION(2,22,0)
+ cairo_surface_t *surface;
+#else
GdkPixmap *pixmap;
+#endif
GtkAdjustment *scrollbar_adjustment;
GtkWidget *scrollbar;
- int pixmap_width;
- int pixmap_height;
+ int surface_width;
+ int surface_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 */
TAP_RTP_PADDING_ERROR,
TAP_RTP_SHORT_FRAME,
TAP_RTP_FILE_OPEN_ERROR,
+ TAP_RTP_FILE_WRITE_ERROR,
TAP_RTP_NO_DATA
} error_type_t;
}
/****************************************************************************/
-static int iax2_packet_add_graph(dialog_graph_graph_t *dgg, tap_iax2_stat_t *statinfo, packet_info *pinfo, guint32 value)
+static gboolean iax2_packet_add_graph(dialog_graph_graph_t *dgg, tap_iax2_stat_t *statinfo, packet_info *pinfo, guint32 value)
{
dialog_graph_graph_item_t *it;
- int idx;
+ guint32 idx;
double rtp_time;
/* we sometimes get called when dgg is disabled.
this is a bug since the tap listener should be removed first */
if(!dgg->display){
- return 0;
+ return FALSE;
}
dgg->ud->dlg.dialog_graph.needs_redraw=TRUE;
/*
- * Find which interval this is supposed to to in and store the
+ * Find which interval this is supposed to go in and store the
* interval index as idx
*/
if (dgg->ud->dlg.dialog_graph.start_time == -1){ /* it is the first */
dgg->ud->dlg.dialog_graph.start_time = statinfo->start_time;
}
- rtp_time = nstime_to_sec(&pinfo->fd->rel_ts) - dgg->ud->dlg.dialog_graph.start_time;
+ rtp_time = nstime_to_msec(&pinfo->fd->rel_ts) - dgg->ud->dlg.dialog_graph.start_time;
if(rtp_time<0){
return FALSE;
}
- idx = (guint32)(rtp_time*1000)/dgg->ud->dlg.dialog_graph.interval;
+ idx = (guint32)(rtp_time)/dgg->ud->dlg.dialog_graph.interval;
/* some sanity checks */
- if((idx<0)||(idx>=NUM_GRAPH_ITEMS)){
+ if(idx>=NUM_GRAPH_ITEMS){
return FALSE;
}
/* update num_items */
- if((guint32)idx > dgg->ud->dlg.dialog_graph.num_items){
+ if(idx > dgg->ud->dlg.dialog_graph.num_items){
dgg->ud->dlg.dialog_graph.num_items=idx;
dgg->ud->dlg.dialog_graph.max_interval=idx*dgg->ud->dlg.dialog_graph.interval;
}
}
+#if 0
static const GdkColor COLOR_DEFAULT = {0, 0xffff, 0xffff, 0xffff};
static const GdkColor COLOR_ERROR = {0, 0xffff, 0xbfff, 0xbfff};
static const GdkColor COLOR_WARNING = {0, 0xffff, 0xdfff, 0xbfff};
static const GdkColor COLOR_CN = {0, 0xbfff, 0xbfff, 0xffff};
static const GdkColor COLOR_FOREGROUND = {0, 0x0000, 0x0000, 0x0000};
+#endif
/****************************************************************************/
/* adds statistics information from the packet to the list */
struct tm *tm_tmp;
time_t then;
gchar status[40];
- GdkColor color = COLOR_DEFAULT;
+ /* GdkColor color = COLOR_DEFAULT; */
gchar color_str[14];
then = pinfo->fd->abs_ts.secs;
msecs = (guint16)(pinfo->fd->abs_ts.nsecs/1000000);
if (statinfo->flags & STAT_FLAG_WRONG_SEQ) {
g_snprintf(status,sizeof(status),"Wrong sequence nr.");
- color = COLOR_ERROR;
+ /* color = COLOR_ERROR; */
g_snprintf(color_str,sizeof(color_str),"#ffffbfffbfff");
}
else if (statinfo->flags & STAT_FLAG_REG_PT_CHANGE) {
g_snprintf(status,sizeof(status),"Payload changed to PT=%u", statinfo->pt);
- color = COLOR_WARNING;
+ /* color = COLOR_WARNING; */
g_snprintf(color_str,sizeof(color_str),"#ffffdfffbfff");
}
else if (statinfo->flags & STAT_FLAG_WRONG_TIMESTAMP) {
g_snprintf(status,sizeof(status),"Incorrect timestamp");
- color = COLOR_WARNING;
+ /* color = COLOR_WARNING; */
g_snprintf(color_str,sizeof(color_str),"#ffffdfffbfff");
}
else if ((statinfo->flags & STAT_FLAG_PT_CHANGE)
&& (statinfo->flags & STAT_FLAG_FOLLOW_PT_CN)
&& !(statinfo->flags & STAT_FLAG_MARKER)) {
g_snprintf(status,sizeof(status),"Marker missing?");
- color = COLOR_WARNING;
+ /* color = COLOR_WARNING; */
g_snprintf(color_str,sizeof(color_str),"#ffffdfffbfff");
}
else {
if (statinfo->flags & STAT_FLAG_MARKER) {
- color = COLOR_WARNING;
+ /* color = COLOR_WARNING; */
g_snprintf(color_str,sizeof(color_str),"#ffffdfffbfff");
}
g_snprintf(status,sizeof(status),OK_TEXT);
if (iax2info->payload_len > 0) {
data = iax2info->payload_data;
- nchars=fwrite(data, sizeof(unsigned char), iax2info->payload_len, saveinfo->fp);
+ nchars = fwrite(data, sizeof(unsigned char), iax2info->payload_len, saveinfo->fp);
+ if (nchars != iax2info->payload_len) {
+ /* Write error or short write */
+ saveinfo->saved = FALSE;
+ saveinfo->error_type = TAP_RTP_FILE_WRITE_ERROR;
+ return;
+ }
saveinfo->count+=iax2info->payload_len;
- fflush(saveinfo->fp);
+ if (fflush(saveinfo->fp) == EOF) {
+ /* Write error */
+ saveinfo->saved = FALSE;
+ saveinfo->error_type = TAP_RTP_FILE_WRITE_ERROR;
+ return;
+ }
saveinfo->saved = TRUE;
return;
}
/****************************************************************************/
static void on_notebook_switch_page(GtkNotebook *notebook _U_,
- GtkNotebookPage *page _U_,
+ gpointer *page _U_,
gint page_num,
gpointer data)
{
int label_width_mid, label_height_mid;
guint32 draw_width, draw_height;
char label_string[15];
+ GtkAllocation widget_alloc;
+ cairo_t *cr;
/* new variables */
guint32 num_time_intervals;
/*
* Clear out old plot
*/
- gdk_draw_rectangle(user_data->dlg.dialog_graph.pixmap,
- user_data->dlg.dialog_graph.draw_area->style->white_gc,
- TRUE,
- 0, 0,
- user_data->dlg.dialog_graph.draw_area->allocation.width,
- user_data->dlg.dialog_graph.draw_area->allocation.height);
+#if GTK_CHECK_VERSION(2,22,0)
+ cr = cairo_create (user_data->dlg.dialog_graph.surface);
+#else
+ cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
+#endif
+ cairo_set_source_rgb (cr, 1, 1, 1);
+ gtk_widget_get_allocation(user_data->dlg.dialog_graph.draw_area, &widget_alloc);
+ cairo_rectangle (cr,
+ 0,
+ 0,
+ widget_alloc.width,
+ widget_alloc.height);
+ cairo_fill (cr);
+ cairo_destroy (cr);
/*
/*
* Calculate the size of the drawing area for the actual plot
*/
- draw_width=user_data->dlg.dialog_graph.pixmap_width-right_x_border-left_x_border;
- draw_height=user_data->dlg.dialog_graph.pixmap_height-top_y_border-bottom_y_border;
+ draw_width=user_data->dlg.dialog_graph.surface_width-right_x_border-left_x_border;
+ draw_height=user_data->dlg.dialog_graph.surface_height-top_y_border-bottom_y_border;
/*
* Draw the y axis and labels
* (we always draw the y scale with 11 ticks along the axis)
*/
- gdk_draw_line(user_data->dlg.dialog_graph.pixmap, user_data->dlg.dialog_graph.draw_area->style->black_gc,
- user_data->dlg.dialog_graph.pixmap_width-right_x_border+1,
- top_y_border,
- user_data->dlg.dialog_graph.pixmap_width-right_x_border+1,
- user_data->dlg.dialog_graph.pixmap_height-bottom_y_border);
+#if GTK_CHECK_VERSION(2,22,0)
+ cr = cairo_create (user_data->dlg.dialog_graph.surface);
+#else
+ cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
+#endif
+ cairo_set_line_width (cr, 1.0);
+ cairo_move_to(cr, user_data->dlg.dialog_graph.surface_width-right_x_border+1.5, top_y_border+0.5);
+ cairo_line_to(cr, user_data->dlg.dialog_graph.surface_width-right_x_border+1.5, user_data->dlg.dialog_graph.surface_height-bottom_y_border+0.5);
+ cairo_stroke(cr);
+ cairo_destroy(cr);
+
for(i=0;i<=10;i++){
int xwidth;
xwidth=10;
}
/* draw the tick */
- gdk_draw_line(user_data->dlg.dialog_graph.pixmap, user_data->dlg.dialog_graph.draw_area->style->black_gc,
- user_data->dlg.dialog_graph.pixmap_width-right_x_border+1,
- user_data->dlg.dialog_graph.pixmap_height-bottom_y_border-draw_height*i/10,
- user_data->dlg.dialog_graph.pixmap_width-right_x_border+1+xwidth,
- user_data->dlg.dialog_graph.pixmap_height-bottom_y_border-draw_height*i/10);
+#if GTK_CHECK_VERSION(2,22,0)
+ cr = cairo_create (user_data->dlg.dialog_graph.surface);
+#else
+ cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
+#endif
+ cairo_set_line_width (cr, 1.0);
+ cairo_move_to(cr,
+ user_data->dlg.dialog_graph.surface_width-right_x_border+1.5,
+ user_data->dlg.dialog_graph.surface_height-bottom_y_border-draw_height*i/10+0.5);
+
+ cairo_line_to(cr,
+ user_data->dlg.dialog_graph.surface_width-right_x_border+1.5+xwidth,
+ user_data->dlg.dialog_graph.surface_height-bottom_y_border-draw_height*i/10+0.5);
+ cairo_stroke(cr);
+ cairo_destroy(cr);
/* draw the labels */
if(i==0){
print_time_scale_string(label_string, sizeof(label_string), (max_y*i/10));
pango_layout_set_text(layout, label_string, -1);
pango_layout_get_pixel_size(layout, &lwidth, NULL);
- gdk_draw_layout(user_data->dlg.dialog_graph.pixmap,
- user_data->dlg.dialog_graph.draw_area->style->black_gc,
- user_data->dlg.dialog_graph.pixmap_width-right_x_border+15+label_width-lwidth,
- user_data->dlg.dialog_graph.pixmap_height-bottom_y_border-draw_height*i/10-label_height/2,
- layout);
+#if GTK_CHECK_VERSION(2,22,0)
+ cr = cairo_create (user_data->dlg.dialog_graph.surface);
+#else
+ cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
+#endif
+ cairo_move_to (cr,
+ user_data->dlg.dialog_graph.surface_width-right_x_border+15+label_width-lwidth,
+ user_data->dlg.dialog_graph.surface_height-bottom_y_border-draw_height*i/10-label_height/2);
+ pango_cairo_show_layout (cr, layout);
+ cairo_destroy (cr);
+ cr = NULL;
}
if(i==5){
print_time_scale_string(label_string, sizeof(label_string), (max_y*i/10));
pango_layout_set_text(layout, label_string, -1);
pango_layout_get_pixel_size(layout, &lwidth, NULL);
- gdk_draw_layout(user_data->dlg.dialog_graph.pixmap,
- user_data->dlg.dialog_graph.draw_area->style->black_gc,
- user_data->dlg.dialog_graph.pixmap_width-right_x_border+15+label_width-lwidth,
- user_data->dlg.dialog_graph.pixmap_height-bottom_y_border-draw_height*i/10-label_height/2,
- layout);
+#if GTK_CHECK_VERSION(2,22,0)
+ cr = cairo_create (user_data->dlg.dialog_graph.surface);
+#else
+ cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
+#endif
+ cairo_move_to (cr,
+ user_data->dlg.dialog_graph.surface_width-right_x_border+15+label_width-lwidth,
+ user_data->dlg.dialog_graph.surface_height-bottom_y_border-draw_height*i/10-label_height/2);
+ pango_cairo_show_layout (cr, layout);
+ cairo_destroy (cr);
+ cr = NULL;
}
if(i==10){
print_time_scale_string(label_string, sizeof(label_string), (max_y*i/10));
pango_layout_set_text(layout, label_string, -1);
pango_layout_get_pixel_size(layout, &lwidth, NULL);
- gdk_draw_layout(user_data->dlg.dialog_graph.pixmap,
- user_data->dlg.dialog_graph.draw_area->style->black_gc,
- user_data->dlg.dialog_graph.pixmap_width-right_x_border+15+label_width-lwidth,
- user_data->dlg.dialog_graph.pixmap_height-bottom_y_border-draw_height*i/10-label_height/2,
- layout);
+#if GTK_CHECK_VERSION(2,22,0)
+ cr = cairo_create (user_data->dlg.dialog_graph.surface);
+#else
+ cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
+#endif
+ cairo_move_to (cr,
+ user_data->dlg.dialog_graph.surface_width-right_x_border+15+label_width-lwidth,
+ user_data->dlg.dialog_graph.surface_height-bottom_y_border-draw_height*i/10-label_height/2);
+ pango_cairo_show_layout (cr, layout);
+ cairo_destroy (cr);
+ cr = NULL;
}
}
/*XXX*/
/* plot the x-scale */
- gdk_draw_line(user_data->dlg.dialog_graph.pixmap, user_data->dlg.dialog_graph.draw_area->style->black_gc, left_x_border, user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+1, user_data->dlg.dialog_graph.pixmap_width-right_x_border+1, user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+1);
+#if GTK_CHECK_VERSION(2,22,0)
+ cr = cairo_create (user_data->dlg.dialog_graph.surface);
+#else
+ cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
+#endif
+ cairo_set_line_width (cr, 1.0);
+ cairo_move_to(cr, left_x_border+0.5, user_data->dlg.dialog_graph.surface_height-bottom_y_border+1.5);
+ cairo_line_to(cr, user_data->dlg.dialog_graph.surface_width-right_x_border+1.5,user_data->dlg.dialog_graph.surface_height-bottom_y_border+1.5);
+ cairo_stroke(cr);
+ cairo_destroy(cr);
if((last_interval/user_data->dlg.dialog_graph.interval)>draw_width/user_data->dlg.dialog_graph.pixels_per_tick+1){
first_interval=(last_interval/user_data->dlg.dialog_graph.interval)-draw_width/user_data->dlg.dialog_graph.pixels_per_tick+1;
}
x=draw_width+left_x_border-((last_interval-current_interval)/user_data->dlg.dialog_graph.interval)*user_data->dlg.dialog_graph.pixels_per_tick;
- gdk_draw_line(user_data->dlg.dialog_graph.pixmap, user_data->dlg.dialog_graph.draw_area->style->black_gc,
- x-1-user_data->dlg.dialog_graph.pixels_per_tick/2,
- user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+1,
- x-1-user_data->dlg.dialog_graph.pixels_per_tick/2,
- user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+xlen+1);
+#if GTK_CHECK_VERSION(2,22,0)
+ cr = cairo_create (user_data->dlg.dialog_graph.surface);
+#else
+ cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
+#endif
+ cairo_set_line_width (cr, 1.0);
+ cairo_move_to(cr, x-1-user_data->dlg.dialog_graph.pixels_per_tick/2+0.5, user_data->dlg.dialog_graph.surface_height-bottom_y_border+1.5);
+ cairo_line_to(cr, x-1-user_data->dlg.dialog_graph.pixels_per_tick/2+0.5, user_data->dlg.dialog_graph.surface_height-bottom_y_border+xlen+1.5);
+ cairo_stroke(cr);
+ cairo_destroy(cr);
if(xlen==17){
if(user_data->dlg.dialog_graph.interval>=1000){
}
pango_layout_set_text(layout, label_string, -1);
pango_layout_get_pixel_size(layout, &lwidth, NULL);
- gdk_draw_layout(user_data->dlg.dialog_graph.pixmap,
- user_data->dlg.dialog_graph.draw_area->style->black_gc,
- x-1-user_data->dlg.dialog_graph.pixels_per_tick/2-lwidth/2,
- user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+20,
- layout);
+#if GTK_CHECK_VERSION(2,22,0)
+ cr = cairo_create (user_data->dlg.dialog_graph.surface);
+#else
+ cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
+#endif
+ cairo_move_to (cr,
+ x-1-user_data->dlg.dialog_graph.pixels_per_tick/2-lwidth/2,
+ user_data->dlg.dialog_graph.surface_height-bottom_y_border+20);
+ pango_cairo_show_layout (cr, layout);
+ cairo_destroy (cr);
+ cr = NULL;
}
}
* Draw "x" for Sequence Errors and "m" for Marks
*/
/* Draw the labels Fwd and Rev */
- g_strlcpy(label_string, UTF8_LEFTWARDS_ARROW "Fwd", sizeof(label_string));
+ g_strlcpy(label_string, UTF8_LEFTWARDS_ARROW "Fwd",sizeof(label_string));
pango_layout_set_text(layout, label_string, -1);
pango_layout_get_pixel_size(layout, &lwidth, NULL);
- gdk_draw_layout(user_data->dlg.dialog_graph.pixmap,
- user_data->dlg.dialog_graph.draw_area->style->black_gc,
- user_data->dlg.dialog_graph.pixmap_width-right_x_border+33-lwidth,
- user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+3,
- layout);
- g_strlcpy(label_string, UTF8_LEFTWARDS_ARROW "Rev", sizeof(label_string));
+#if GTK_CHECK_VERSION(2,22,0)
+ cr = cairo_create (user_data->dlg.dialog_graph.surface);
+#else
+ cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
+#endif
+ cairo_move_to (cr,
+ user_data->dlg.dialog_graph.surface_width-right_x_border+33-lwidth,
+ user_data->dlg.dialog_graph.surface_height-bottom_y_border+3);
+ pango_cairo_show_layout (cr, layout);
+ cairo_destroy (cr);
+ cr = NULL;
+
+ g_strlcpy(label_string, UTF8_LEFTWARDS_ARROW "Rev",sizeof(label_string));
pango_layout_set_text(layout, label_string, -1);
pango_layout_get_pixel_size(layout, &lwidth, NULL);
- gdk_draw_layout(user_data->dlg.dialog_graph.pixmap,
- user_data->dlg.dialog_graph.draw_area->style->black_gc,
- user_data->dlg.dialog_graph.pixmap_width-right_x_border+33-lwidth,
- user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+3+9,
- layout);
+#if GTK_CHECK_VERSION(2,22,0)
+ cr = cairo_create (user_data->dlg.dialog_graph.surface);
+#else
+ cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
+#endif
+ cairo_move_to (cr,
+ user_data->dlg.dialog_graph.surface_width-right_x_border+33-lwidth,
+ user_data->dlg.dialog_graph.surface_height-bottom_y_border+3+9);
+ pango_cairo_show_layout (cr, layout);
+ cairo_destroy (cr);
+ cr = NULL;
/* Draw the marks */
for(i=MAX_GRAPHS-1;i>=0;i--){
guint32 interval;
- guint32 x_pos, prev_x_pos;
+ guint32 x_pos/*, prev_x_pos*/;
/* XXX for fwd or rev, the flag info for jitter and diff is the same, and here I loop twice */
if (!user_data->dlg.dialog_graph.graph[i].display){
continue;
}
/* initialize prev x/y to the low left corner of the graph */
- prev_x_pos=draw_width-1-user_data->dlg.dialog_graph.pixels_per_tick*((last_interval-first_interval)/user_data->dlg.dialog_graph.interval+1)+left_x_border;
+ /* prev_x_pos=draw_width-1-user_data->dlg.dialog_graph.pixels_per_tick*((last_interval-first_interval)/user_data->dlg.dialog_graph.interval+1)+left_x_border; */
for(interval=first_interval+user_data->dlg.dialog_graph.interval;interval<=last_interval;interval+=user_data->dlg.dialog_graph.interval){
x_pos=draw_width-1-user_data->dlg.dialog_graph.pixels_per_tick*((last_interval-interval)/user_data->dlg.dialog_graph.interval+1)+left_x_border;
pango_layout_set_text(layout, label_string, -1);
pango_layout_get_pixel_size(layout, &lwidth, NULL);
- gdk_draw_layout(user_data->dlg.dialog_graph.pixmap,
- user_data->dlg.dialog_graph.draw_area->style->black_gc,
- x_pos-1-lwidth/2,
- user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+3+7*(i/2),
- layout);
+#if GTK_CHECK_VERSION(2,22,0)
+ cr = cairo_create (user_data->dlg.dialog_graph.surface);
+#else
+ cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
+#endif
+ cairo_move_to (cr,
+ x_pos-1-lwidth/2,
+ user_data->dlg.dialog_graph.surface_height-bottom_y_border+3+7*(i/2));
+ pango_cairo_show_layout (cr, layout);
+ cairo_destroy (cr);
+ cr = NULL;
}
- prev_x_pos=x_pos;
+ /* prev_x_pos=x_pos; */
}
}
*/
for(i=MAX_GRAPHS-1;i>=0;i--){
guint32 interval;
- guint32 x_pos, y_pos, prev_x_pos, prev_y_pos;
+ guint32 x_pos, y_pos, /*prev_x_pos,*/ prev_y_pos;
if (!user_data->dlg.dialog_graph.graph[i].display){
continue;
}
/* initialize prev x/y to the low left corner of the graph */
- prev_x_pos=draw_width-1-user_data->dlg.dialog_graph.pixels_per_tick*((last_interval-first_interval)/user_data->dlg.dialog_graph.interval+1)+left_x_border;
+ /* prev_x_pos=draw_width-1-user_data->dlg.dialog_graph.pixels_per_tick*((last_interval-first_interval)/user_data->dlg.dialog_graph.interval+1)+left_x_border; */
prev_y_pos=draw_height-1+top_y_border;
for(interval=first_interval+user_data->dlg.dialog_graph.interval;interval<=last_interval;interval+=user_data->dlg.dialog_graph.interval){
*/
if( (prev_y_pos==0) && (y_pos==0) ){
prev_y_pos=y_pos;
- prev_x_pos=x_pos;
+ /* prev_x_pos=x_pos; */
continue;
}
if(val){
- gdk_draw_line(user_data->dlg.dialog_graph.pixmap, user_data->dlg.dialog_graph.graph[i].gc,
- x_pos, draw_height-1+top_y_border,
- x_pos, y_pos);
+#if GTK_CHECK_VERSION(2,22,0)
+ cr = cairo_create (user_data->dlg.dialog_graph.surface);
+#else
+ cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
+#endif
+ gdk_cairo_set_source_color (cr, &user_data->dlg.dialog_graph.graph[i].color);
+ cairo_set_line_width (cr, 1.0);
+ cairo_move_to(cr, x_pos+0.5, draw_height-1+top_y_border+0.5);
+ cairo_line_to(cr, x_pos+0.5, y_pos+0.5);
+ cairo_stroke(cr);
+ cairo_destroy(cr);
}
prev_y_pos=y_pos;
- prev_x_pos=x_pos;
+ /* prev_x_pos=x_pos; */
}
}
- gdk_draw_pixmap(user_data->dlg.dialog_graph.draw_area->window,
- user_data->dlg.dialog_graph.draw_area->style->fg_gc[GTK_WIDGET_STATE(user_data->dlg.dialog_graph.draw_area)],
- user_data->dlg.dialog_graph.pixmap,
- 0, 0,
- 0, 0,
- user_data->dlg.dialog_graph.pixmap_width, user_data->dlg.dialog_graph.pixmap_height);
+ cr = gdk_cairo_create (gtk_widget_get_window(user_data->dlg.dialog_graph.draw_area));
+
+#if GTK_CHECK_VERSION(2,22,0)
+ cairo_set_source_surface (cr, user_data->dlg.dialog_graph.surface, 0, 0);
+#else
+ gdk_cairo_set_source_pixmap (cr, user_data->dlg.dialog_graph.pixmap, 0, 0);
+#endif
+ cairo_rectangle (cr, 0, 0, user_data->dlg.dialog_graph.surface_width, user_data->dlg.dialog_graph.surface_height);
+ cairo_fill (cr);
+
+ cairo_destroy (cr);
/* update the scrollbar */
- user_data->dlg.dialog_graph.scrollbar_adjustment->upper=(gfloat) user_data->dlg.dialog_graph.max_interval;
- user_data->dlg.dialog_graph.scrollbar_adjustment->step_increment=(gfloat) ((last_interval-first_interval)/10);
- user_data->dlg.dialog_graph.scrollbar_adjustment->page_increment=(gfloat) (last_interval-first_interval);
+ gtk_adjustment_set_upper(user_data->dlg.dialog_graph.scrollbar_adjustment, (gfloat) user_data->dlg.dialog_graph.max_interval);
+ gtk_adjustment_set_step_increment(user_data->dlg.dialog_graph.scrollbar_adjustment, (gfloat) ((last_interval-first_interval)/10));
+ gtk_adjustment_set_page_increment(user_data->dlg.dialog_graph.scrollbar_adjustment, (gfloat) (last_interval-first_interval));
if((last_interval-first_interval)*100 < user_data->dlg.dialog_graph.max_interval){
- user_data->dlg.dialog_graph.scrollbar_adjustment->page_size=(gfloat) (user_data->dlg.dialog_graph.max_interval/100);
+ gtk_adjustment_set_page_size(user_data->dlg.dialog_graph.scrollbar_adjustment, (gfloat) (user_data->dlg.dialog_graph.max_interval/100));
} else {
- user_data->dlg.dialog_graph.scrollbar_adjustment->page_size=(gfloat) (last_interval-first_interval);
+ gtk_adjustment_set_page_size(user_data->dlg.dialog_graph.scrollbar_adjustment, (gfloat) (last_interval-first_interval));
}
- user_data->dlg.dialog_graph.scrollbar_adjustment->value=last_interval-user_data->dlg.dialog_graph.scrollbar_adjustment->page_size;
+ gtk_adjustment_set_value(user_data->dlg.dialog_graph.scrollbar_adjustment, last_interval - gtk_adjustment_get_page_size(user_data->dlg.dialog_graph.scrollbar_adjustment));
gtk_adjustment_changed(user_data->dlg.dialog_graph.scrollbar_adjustment);
gtk_adjustment_value_changed(user_data->dlg.dialog_graph.scrollbar_adjustment);
static gboolean draw_area_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data)
{
user_data_t *user_data = data;
+ cairo_t *cr = gdk_cairo_create (gtk_widget_get_window(widget));
+
+#if GTK_CHECK_VERSION(2,22,0)
+ cairo_set_source_surface (cr, user_data->dlg.dialog_graph.surface, 0, 0);
+#else
+ gdk_cairo_set_source_pixmap (cr, user_data->dlg.dialog_graph.pixmap, 0, 0);
+#endif
+ cairo_rectangle (cr, event->area.x, event->area.y, event->area.width, event->area.height);
+ cairo_fill (cr);
- gdk_draw_pixmap(widget->window,
- widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
- user_data->dlg.dialog_graph.pixmap,
- event->area.x, event->area.y,
- event->area.x, event->area.y,
- event->area.width, event->area.height);
+ cairo_destroy (cr);
return FALSE;
}
static gboolean draw_area_configure_event(GtkWidget *widget, GdkEventConfigure *event _U_, gpointer data)
{
user_data_t *user_data = data;
- int i;
-
+ GtkAllocation widget_alloc;
+ cairo_t *cr;
+
+#if GTK_CHECK_VERSION(2,22,0)
+ if(user_data->dlg.dialog_graph.surface){
+ g_object_unref(user_data->dlg.dialog_graph.surface);
+ user_data->dlg.dialog_graph.surface=NULL;
+ }
+ gtk_widget_get_allocation(widget, &widget_alloc);
+ user_data->dlg.dialog_graph.surface = gdk_window_create_similar_surface (gtk_widget_get_window(widget),
+ CAIRO_CONTENT_COLOR,
+ widget_alloc.width,
+ widget_alloc.height);
+#else
if(user_data->dlg.dialog_graph.pixmap){
- gdk_pixmap_unref(user_data->dlg.dialog_graph.pixmap);
+ g_object_unref(user_data->dlg.dialog_graph.pixmap);
user_data->dlg.dialog_graph.pixmap=NULL;
}
- user_data->dlg.dialog_graph.pixmap=gdk_pixmap_new(widget->window,
- widget->allocation.width,
- widget->allocation.height,
+ gtk_widget_get_allocation(widget, &widget_alloc);
+ user_data->dlg.dialog_graph.pixmap=gdk_pixmap_new(gtk_widget_get_window(widget),
+ widget_alloc.width,
+ widget_alloc.height,
-1);
- user_data->dlg.dialog_graph.pixmap_width=widget->allocation.width;
- user_data->dlg.dialog_graph.pixmap_height=widget->allocation.height;
-
- gdk_draw_rectangle(user_data->dlg.dialog_graph.pixmap,
- widget->style->white_gc,
- TRUE,
- 0, 0,
- widget->allocation.width,
- widget->allocation.height);
+#endif
+ user_data->dlg.dialog_graph.surface_width=widget_alloc.width;
+ user_data->dlg.dialog_graph.surface_height=widget_alloc.height;
- /* set up the colors and the GC structs for this pixmap */
- for(i=0;i<MAX_GRAPHS;i++){
- user_data->dlg.dialog_graph.graph[i].gc=gdk_gc_new(user_data->dlg.dialog_graph.pixmap);
- gdk_gc_set_rgb_fg_color(user_data->dlg.dialog_graph.graph[i].gc, &user_data->dlg.dialog_graph.graph[i].color);
- }
+#if GTK_CHECK_VERSION(2,22,0)
+ cr = cairo_create (user_data->dlg.dialog_graph.surface);
+#else
+ cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
+#endif
+ cairo_rectangle (cr, 0, 0, widget_alloc.width, widget_alloc.height);
+ cairo_set_source_rgb (cr, 1, 1, 1);
+ cairo_fill (cr);
+ cairo_destroy (cr);
dialog_graph_redraw(user_data);
return TRUE;
user_data_t *user_data = data;
guint32 mi;
- mi=(guint32) (user_data->dlg.dialog_graph.scrollbar_adjustment->value+user_data->dlg.dialog_graph.scrollbar_adjustment->page_size);
+ mi=(guint32) (gtk_adjustment_get_value(user_data->dlg.dialog_graph.scrollbar_adjustment) + gtk_adjustment_get_page_size(user_data->dlg.dialog_graph.scrollbar_adjustment));
if(user_data->dlg.dialog_graph.last_interval==mi){
return;
}
user_data->dlg.dialog_graph.draw_area=gtk_drawing_area_new();
g_signal_connect(user_data->dlg.dialog_graph.draw_area, "destroy", G_CALLBACK(draw_area_destroy_cb), user_data);
- gtk_widget_set_size_request(user_data->dlg.dialog_graph.draw_area, user_data->dlg.dialog_graph.pixmap_width, user_data->dlg.dialog_graph.pixmap_height);
+ gtk_widget_set_size_request(user_data->dlg.dialog_graph.draw_area, user_data->dlg.dialog_graph.surface_width, user_data->dlg.dialog_graph.surface_height);
/* signals needed to handle backing pixmap */
g_signal_connect(user_data->dlg.dialog_graph.draw_area, "expose_event", G_CALLBACK(draw_area_expose_event), user_data);
label=gtk_label_new(dgg->title);
gtk_widget_show(label);
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
-
+#if GTK_CHECK_VERSION(3,0,0)
+ /* Fix me: Add the GTK 3.0 equivalents */
+#else
gtk_widget_modify_fg(label, GTK_STATE_NORMAL, &dgg->color);
gtk_widget_modify_fg(label, GTK_STATE_ACTIVE, &dgg->color);
gtk_widget_modify_fg(label, GTK_STATE_PRELIGHT, &dgg->color);
gtk_widget_modify_fg(label, GTK_STATE_SELECTED, &dgg->color);
gtk_widget_modify_fg(label, GTK_STATE_INSENSITIVE, &dgg->color);
-
+#endif
return;
}
static void yscale_select(GtkWidget *item, gpointer data)
{
user_data_t *user_data = data;
- int i;
+ int i;
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);
+ user_data->dlg.dialog_graph.max_y_units=yscale_max[i];
+ dialog_graph_redraw(user_data);
}
/****************************************************************************/
static void pixels_per_tick_select(GtkWidget *item, gpointer data)
{
user_data_t *user_data = data;
- int i;
+ int i;
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);
+ user_data->dlg.dialog_graph.pixels_per_tick=pixels_per_tick[i];
+ dialog_graph_redraw(user_data);
}
/****************************************************************************/
static void tick_interval_select(GtkWidget *item, gpointer data)
{
user_data_t *user_data = data;
- int i;
+ int i;
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);
+ 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);
}
/****************************************************************************/
static GtkWidget *
create_yscale_max_menu_items(user_data_t* user_data)
{
- char str[15];
- GtkWidget *combo_box;
- int i;
+ char str[15];
+ GtkWidget *combo_box;
+ int i;
- combo_box = gtk_combo_box_new_text ();
+ combo_box = gtk_combo_box_text_new();
- for(i=0;i<MAX_YSCALE;i++){
- if(yscale_max[i]==AUTO_MAX_YSCALE){
+ for(i=0;i<MAX_YSCALE;i++){
+ if(yscale_max[i]==AUTO_MAX_YSCALE){
g_strlcpy(str,"Auto",sizeof(str));
- } else if (yscale_max[i] < 1000000) {
+ } else if (yscale_max[i] < 1000000) {
g_snprintf(str, sizeof(str), "%u ms", yscale_max[i]/1000);
- } else {
+ } 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_text_append_text (GTK_COMBO_BOX_TEXT (combo_box), str);
+ }
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), user_data);
static GtkWidget *
create_pixels_per_tick_menu_items(user_data_t *user_data)
{
- char str[5];
- GtkWidget *combo_box;
- int i;
+ char str[5];
+ GtkWidget *combo_box;
+ int i;
- combo_box = gtk_combo_box_new_text ();
+ combo_box = gtk_combo_box_text_new();
- 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);
- }
+ for(i=0;i<MAX_PIXELS_PER_TICK;i++){
+ g_snprintf(str, sizeof(str), "%u", pixels_per_tick[i]);
+ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_box), str);
+ }
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), user_data);
create_tick_interval_menu_items(user_data_t *user_data)
{
GtkWidget *combo_box;
- char str[15];
- int i;
+ char str[15];
+ int i;
- combo_box = gtk_combo_box_new_text ();
+ combo_box = gtk_combo_box_text_new();
for(i=0;i<MAX_TICK_VALUES;i++){
- if(tick_interval_values[i]>=1000){
- g_snprintf(str, sizeof(str), "%u sec", tick_interval_values[i]/1000);
- } else if(tick_interval_values[i]>=100){
- g_snprintf(str, sizeof(str), "0.%1u sec", (tick_interval_values[i]/100)%10);
- } else if(tick_interval_values[i]>=10){
- g_snprintf(str, sizeof(str), "0.%02u sec", (tick_interval_values[i]/10)%10);
- } else {
- g_snprintf(str, sizeof(str), "0.%03u sec", (tick_interval_values[i])%10);
- }
- gtk_combo_box_append_text (GTK_COMBO_BOX (combo_box), str);
+ if(tick_interval_values[i]>=1000){
+ g_snprintf(str, sizeof(str), "%u sec", tick_interval_values[i]/1000);
+ } else if(tick_interval_values[i]>=100){
+ g_snprintf(str, sizeof(str), "0.%1u sec", (tick_interval_values[i]/100)%10);
+ } else if(tick_interval_values[i]>=10){
+ g_snprintf(str, sizeof(str), "0.%02u sec", (tick_interval_values[i]/10)%10);
+ } else {
+ g_snprintf(str, sizeof(str), "0.%03u sec", (tick_interval_values[i])%10);
+ }
+ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_box), str);
}
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), user_data);
/****************************************************************************/
static void create_ctrl_menu(user_data_t* user_data, GtkWidget *box, const char *name, GtkWidget *(*func)(user_data_t* user_data))
{
- GtkWidget *hbox;
- GtkWidget *label;
- GtkWidget *combo_box;
-
- hbox=gtk_hbox_new(FALSE, 0);
- gtk_container_add(GTK_CONTAINER(box), hbox);
- gtk_box_set_child_packing(GTK_BOX(box), hbox, FALSE, FALSE, 0, GTK_PACK_START);
- gtk_widget_show(hbox);
-
- label=gtk_label_new(name);
- gtk_widget_show(label);
- gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
-
- combo_box = (*func)(user_data);
- gtk_box_pack_end(GTK_BOX(hbox), combo_box, FALSE, FALSE, 0);
- gtk_widget_show(combo_box);
+ GtkWidget *hbox;
+ GtkWidget *label;
+ GtkWidget *combo_box;
+
+ hbox=gtk_hbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(box), hbox);
+ gtk_box_set_child_packing(GTK_BOX(box), hbox, FALSE, FALSE, 0, GTK_PACK_START);
+ gtk_widget_show(hbox);
+
+ label=gtk_label_new(name);
+ gtk_widget_show(label);
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+
+ combo_box = (*func)(user_data);
+ gtk_box_pack_end(GTK_BOX(hbox), combo_box, FALSE, FALSE, 0);
+ gtk_widget_show(combo_box);
}
/****************************************************************************/
both = (GtkWidget*)g_object_get_data(G_OBJECT(fc), "both_rb");
user_data = (user_data_t*)g_object_get_data(G_OBJECT(fc), "user_data");
- if (GTK_TOGGLE_BUTTON(forw)->active || GTK_TOGGLE_BUTTON(both)->active) {
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(forw)) || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(both))) {
fp = ws_fopen(g_dest, "w");
if (fp == NULL) {
open_failure_alert_box(g_dest, errno, TRUE);
return TRUE; /* we're done */
}
- if (GTK_TOGGLE_BUTTON(both)->active) {
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(both))) {
fprintf(fp, "Forward\n");
if (ferror(fp)) {
write_failure_alert_box(g_dest, errno);
}
}
- if (GTK_TOGGLE_BUTTON(rev)->active || GTK_TOGGLE_BUTTON(both)->active) {
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rev)) || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(both))) {
- if (GTK_TOGGLE_BUTTON(both)->active) {
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(both))) {
fp = ws_fopen(g_dest, "a");
if (fp == NULL) {
open_failure_alert_box(g_dest, errno, TRUE);
GtkWidget *table1;
GtkWidget *label_format;
GtkWidget *channels_label;
- GSList *channels_group = NULL;
GtkWidget *forward_rb;
GtkWidget *reversed_rb;
GtkWidget *both_rb;
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
NULL);
-#if GTK_CHECK_VERSION(2,8,0)
gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(user_data->dlg.save_csv_as_w), TRUE);
-#endif
gtk_window_set_transient_for(GTK_WINDOW(user_data->dlg.save_csv_as_w),GTK_WINDOW(user_data->dlg.window));
/* Build our "extra widget" to be added to the file chooser widget */
gtk_misc_set_alignment (GTK_MISC (channels_label), 0, 0.5f);
forward_rb = gtk_radio_button_new_with_label (NULL, "forward ");
- channels_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (forward_rb));
gtk_widget_show (forward_rb);
gtk_table_attach (GTK_TABLE (table1), forward_rb, 1, 2, 1, 2,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
- reversed_rb = gtk_radio_button_new_with_label (channels_group, "reversed ");
+ reversed_rb = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON(forward_rb), "reversed ");
gtk_widget_show (reversed_rb);
gtk_table_attach (GTK_TABLE (table1), reversed_rb, 2, 3, 1, 2,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
- both_rb = gtk_radio_button_new_with_label (channels_group, "both");
+ both_rb = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON(forward_rb), "both");
gtk_widget_show (both_rb);
gtk_table_attach (GTK_TABLE (table1), both_rb, 3, 4, 1, 2,
(GtkAttachOptions) (GTK_FILL),
window_present(user_data->dlg.save_csv_as_w);
/* "Run" the GtkFileChooserDialog. */
- /* Upon exit: If "Accept" run the OK callback. */
- /* If the OK callback returns with a FALSE status, re-run the dialog.*/
- /* Destroy the window. */
- /* XXX: If the OK callback pops up an alert box (eg: for an error) it *must* */
- /* return with a TRUE status so that the dialog window will be destroyed. */
+ /* Upon exit: If "Accept" run the OK callback. */
+ /* If the OK callback returns with a FALSE status, re-run the dialog.*/
+ /* Destroy the window. */
+ /* XXX: If the OK callback pops up an alert box (eg: for an error) it *must* */
+ /* return with a TRUE status so that the dialog window will be destroyed. */
/* Trying to re-run the dialog after popping up an alert box will not work */
- /* since the user will not be able to dismiss the alert box. */
+ /* since the user will not be able to dismiss the alert box. */
/* The (somewhat unfriendly) effect: the user must re-invoke the */
/* GtkFileChooserDialog whenever the OK callback pops up an alert box. */
/* */
- /* ToDo: use GtkFileChooserWidget in a dialog window instead of */
+ /* ToDo: use GtkFileChooserWidget in a dialog window instead of */
/* GtkFileChooserDialog. */
while (gtk_dialog_run(GTK_DIALOG(user_data->dlg.save_csv_as_w)) == GTK_RESPONSE_ACCEPT) {
if (save_csv_as_ok_cb(NULL, user_data->dlg.save_csv_as_w)) {
progdlg_t *progbar;
guint32 progbar_count, progbar_quantum, progbar_nextstep = 0, count = 0;
gboolean stop_flag = FALSE;
- size_t nchars;
+ /*size_t nchars;*/
forw_fd = ws_open(user_data->f_tempname, O_RDONLY | O_BINARY, 0000 /* no creation so don't matter */);
if (forw_fd < 0)
{
/* First we write the .au header. XXX Hope this is endian independant */
/* the magic word 0x2e736e64 == .snd */
+ /* XXX: Should we be checking for write errors below ? */
phtonl(pd, 0x2e736e64);
- nchars=ws_write(to_fd, pd, 4);
+ fwritten = ws_write(to_fd, pd, 4);
+ if ((fwritten < 4) || (fwritten < 0) || (fread_cnt < 0)) {
+ ws_close(forw_fd);
+ ws_close(rev_fd);
+ ws_close(to_fd);
+ destroy_progress_dlg(progbar);
+ return FALSE;
+ }
/* header offset == 24 bytes */
phtonl(pd, 24);
- nchars=ws_write(to_fd, pd, 4);
+ fwritten = ws_write(to_fd, pd, 4);
+ if ((fwritten < 4) || (fwritten < 0) || (fread_cnt < 0)) {
+ ws_close(forw_fd);
+ ws_close(rev_fd);
+ ws_close(to_fd);
+ destroy_progress_dlg(progbar);
+ return FALSE;
+ }
/* total length, it is permited to set this to 0xffffffff */
phtonl(pd, -1);
- nchars=ws_write(to_fd, pd, 4);
+ fwritten = ws_write(to_fd, pd, 4);
+ if ((fwritten < 4) || (fwritten < 0) || (fread_cnt < 0)) {
+ ws_close(forw_fd);
+ ws_close(rev_fd);
+ ws_close(to_fd);
+ destroy_progress_dlg(progbar);
+ return FALSE;
+ }
/* encoding format == 16-bit linear PCM */
phtonl(pd, 3);
- nchars=ws_write(to_fd, pd, 4);
+ fwritten = ws_write(to_fd, pd, 4);
+ if ((fwritten < 4) || (fwritten < 0) || (fread_cnt < 0)) {
+ ws_close(forw_fd);
+ ws_close(rev_fd);
+ ws_close(to_fd);
+ destroy_progress_dlg(progbar);
+ return FALSE;
+ }
/* sample rate == 8000 Hz */
phtonl(pd, 8000);
- nchars=ws_write(to_fd, pd, 4);
+ fwritten = ws_write(to_fd, pd, 4);
+ if ((fwritten < 4) || (fwritten < 0) || (fread_cnt < 0)) {
+ ws_close(forw_fd);
+ ws_close(rev_fd);
+ ws_close(to_fd);
+ destroy_progress_dlg(progbar);
+ return FALSE;
+ }
/* channels == 1 */
phtonl(pd, 1);
- nchars=ws_write(to_fd, pd, 4);
-
+ fwritten = ws_write(to_fd, pd, 4);
+ if ((fwritten < 4) || (fwritten < 0) || (fread_cnt < 0)) {
+ ws_close(forw_fd);
+ ws_close(rev_fd);
+ ws_close(to_fd);
+ destroy_progress_dlg(progbar);
+ return FALSE;
+ }
switch (channels) {
/* only forward direction */
*/
/* we can not save in both directions */
- if ((user_data->forward.saveinfo.saved == FALSE) && (user_data->reversed.saveinfo.saved == FALSE) && (GTK_TOGGLE_BUTTON (both)->active)) {
+ if ((user_data->forward.saveinfo.saved == FALSE) && (user_data->reversed.saveinfo.saved == FALSE) && (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (both)))) {
/* there are many combinations here, we just exit when first matches */
if ((user_data->forward.saveinfo.error_type == TAP_RTP_WRONG_CODEC) ||
(user_data->reversed.saveinfo.error_type == TAP_RTP_WRONG_CODEC))
return TRUE; /* we're done */
}
/* we can not save forward direction */
- else if ((user_data->forward.saveinfo.saved == FALSE) && ((GTK_TOGGLE_BUTTON (forw)->active) ||
- (GTK_TOGGLE_BUTTON (both)->active))) {
+ else if ((user_data->forward.saveinfo.saved == FALSE) && ((gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (forw))) ||
+ (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (both))))) {
if (user_data->forward.saveinfo.error_type == TAP_RTP_WRONG_CODEC)
simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
"Can't save forward direction in a file: Unsupported codec!");
return TRUE; /* we're done */
}
/* we can not save reversed direction */
- else if ((user_data->reversed.saveinfo.saved == FALSE) && ((GTK_TOGGLE_BUTTON (rev)->active) ||
- (GTK_TOGGLE_BUTTON (both)->active))) {
+ else if ((user_data->reversed.saveinfo.saved == FALSE) && ((gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (rev))) ||
+ (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (both))))) {
if (user_data->reversed.saveinfo.error_type == TAP_RTP_WRONG_CODEC)
simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
"Can't save reversed direction in a file: Unsupported codec!");
}
#if 0
- if (GTK_TOGGLE_BUTTON (wav)->active)
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (wav)))
format = SAVE_WAV_FORMAT;
else
#endif
- if (GTK_TOGGLE_BUTTON (au)->active)
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (au)))
format = SAVE_AU_FORMAT;
#if 0
- else if (GTK_TOGGLE_BUTTON (sw)->active)
+ else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (sw)))
format = SAVE_SW_FORMAT;
#endif
- else if (GTK_TOGGLE_BUTTON (raw)->active)
+ else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (raw)))
format = SAVE_RAW_FORMAT;
else
format = SAVE_NONE_FORMAT;
- if (GTK_TOGGLE_BUTTON (rev)->active)
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (rev)))
channels = SAVE_REVERSE_DIRECTION_MASK;
- else if (GTK_TOGGLE_BUTTON (both)->active)
+ else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (both)))
channels = SAVE_BOTH_DIRECTION_MASK;
else
channels = SAVE_FORWARD_DIRECTION_MASK;
GtkWidget *table1;
GtkWidget *label_format;
GtkWidget *channels_label;
- GSList *format_group = NULL;
- GSList *channels_group = NULL;
GtkWidget *forward_rb;
GtkWidget *reversed_rb;
GtkWidget *both_rb;
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
NULL);
-#if GTK_CHECK_VERSION(2,8,0)
gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(user_data->dlg.save_voice_as_w), TRUE);
-#endif
gtk_window_set_transient_for(GTK_WINDOW(user_data->dlg.save_voice_as_w),GTK_WINDOW(user_data->dlg.window));
/* Container for each row of widgets */
gtk_misc_set_alignment (GTK_MISC (label_format), 0, 0.5f);
raw_rb = gtk_radio_button_new_with_label (NULL, ".raw");
- format_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (raw_rb));
gtk_widget_show (raw_rb);
gtk_table_attach (GTK_TABLE (table1), raw_rb, 1, 2, 0, 1,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
- au_rb = gtk_radio_button_new_with_label (format_group, ".au");
+ au_rb = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON(raw_rb), ".au");
gtk_widget_show (au_rb);
gtk_table_attach (GTK_TABLE (table1), au_rb, 3, 4, 0, 1,
(GtkAttachOptions) (GTK_FILL),
#if 0
/* we support .au - ulaw*/
- wav_rb = gtk_radio_button_new_with_label (format_group, ".wav");
- format_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (wav_rb));
+ wav_rb = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON(raw_rb), ".wav");
gtk_widget_show (wav_rb);
gtk_table_attach (GTK_TABLE (table1), wav_rb, 1, 2, 0, 1,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
- sw_rb = gtk_radio_button_new_with_label (format_group, "8 kHz, 16 bit ");
- format_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (sw_rb));
+ sw_rb = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON(raw_rb), "8 kHz, 16 bit ");
gtk_widget_show (sw_rb);
gtk_table_attach (GTK_TABLE (table1), sw_rb, 2, 3, 0, 1,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
- au_rb = gtk_radio_button_new_with_label (format_group, ".au");
- format_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (au_rb));
+ au_rb = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON(raw_rb), ".au");
gtk_widget_show (au_rb);
gtk_table_attach (GTK_TABLE (table1), au_rb, 3, 4, 0, 1,
(GtkAttachOptions) (GTK_FILL),
gtk_misc_set_alignment (GTK_MISC (channels_label), 0, 0.5f);
forward_rb = gtk_radio_button_new_with_label (NULL, "forward ");
- channels_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (forward_rb));
gtk_widget_show (forward_rb);
gtk_table_attach (GTK_TABLE (table1), forward_rb, 1, 2, 1, 2,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
- reversed_rb = gtk_radio_button_new_with_label (channels_group, "reversed ");
+ reversed_rb = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON(forward_rb), "reversed ");
gtk_widget_show (reversed_rb);
gtk_table_attach (GTK_TABLE (table1), reversed_rb, 2, 3, 1, 2,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
- both_rb = gtk_radio_button_new_with_label (channels_group, "both");
+ both_rb = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON(forward_rb), "both");
gtk_widget_show (both_rb);
gtk_table_attach (GTK_TABLE (table1), both_rb, 3, 4, 1, 2,
(GtkAttachOptions) (GTK_FILL),
* :
* should generally be preferred when inserting rows in a sorted list store.
*/
-#if GTK_CHECK_VERSION(2,6,0)
gtk_list_store_insert_with_values( list_store , &user_data->dlg.iter, G_MAXINT,
PACKET_COLUMN, number,
DELTA_COLUMN, delta,
BACKGROUND_COLOR_COL, (char *)color_str,
-1);
-#else
- gtk_list_store_append (list_store, &user_data->dlg.iter);
- gtk_list_store_set (list_store, &user_data->dlg.iter,
- PACKET_COLUMN, number,
- DELTA_COLUMN, delta,
- JITTER_COLUMN, jitter,
- IPBW_COLUMN, bandwidth,
- STATUS_COLUMN, (char *)status,
- DATE_COLUMN, (char *)timeStr,
- LENGTH_COLUMN, pkt_len,
- FOREGROUND_COLOR_COL, NULL,
- BACKGROUND_COLOR_COL, (char *)color_str,
- -1);
-#endif
if(flags & STAT_FLAG_FIRST){
/* Set first row as active */
gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(list)), &user_data->dlg.iter);
*/
/* Present floats with two decimals */
-void
+static void
iax2_float_data_func (GtkTreeViewColumn *column _U_,
GtkCellRenderer *renderer,
GtkTreeModel *model,
list_view = GTK_TREE_VIEW(list);
sortable = GTK_TREE_SORTABLE(list_store);
-#if GTK_CHECK_VERSION(2,6,0)
/* Speed up the list display */
gtk_tree_view_set_fixed_height_mode(list_view, TRUE);
-#endif
/* Setup the sortable columns */
gtk_tree_sortable_set_sort_column_id(sortable, PACKET_COLUMN, GTK_SORT_ASCENDING);
close_bt = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
gtk_container_add(GTK_CONTAINER(box4), close_bt);
+#if GTK_CHECK_VERSION(2,18,0)
+ gtk_widget_set_can_default(close_bt, TRUE);
+#else
GTK_WIDGET_SET_FLAGS(close_bt, GTK_CAN_DEFAULT);
+#endif
gtk_widget_show(close_bt);
window_set_cancel_button(window, close_bt, window_cancel_button_cb);
user_data_t *user_data;
int fd;
int i;
- static color_t col[MAX_GRAPHS] = {
- {0, 0x0000, 0x0000, 0x0000},
+ static GdkColor col[MAX_GRAPHS] = {
+ {0, 0x0000, 0x0000, 0x0000},
{0, 0xffff, 0x0000, 0x0000},
{0, 0x0000, 0xffff, 0x0000},
{0, 0x0000, 0x0000, 0xffff}
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;
+#if GTK_CHECK_VERSION(2,22,0)
+ user_data->dlg.dialog_graph.surface=NULL;
+#else
user_data->dlg.dialog_graph.pixmap=NULL;
+#endif
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.surface_width=500;
+ user_data->dlg.dialog_graph.surface_height=200;
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.start_time = -1;
for(i=0;i<MAX_GRAPHS;i++){
- user_data->dlg.dialog_graph.graph[i].gc=NULL;
user_data->dlg.dialog_graph.graph[i].color.pixel=0;
user_data->dlg.dialog_graph.graph[i].color.red=col[i].red;
user_data->dlg.dialog_graph.graph[i].color.green=col[i].green;
epan_dissect_init(&edt, TRUE, FALSE);
epan_dissect_prime_dfilter(&edt, sfcode);
epan_dissect_run(&edt, &cf->pseudo_header, cf->pd, fdata, NULL);
- frame_matched = dfilter_apply_edt(sfcode, &edt);
/* if it is not an iax2 frame, show an error dialog */
frame_matched = dfilter_apply_edt(sfcode, &edt);