2004-07-20 06:06:41 +00:00
/* conversations_table.c
* conversations_table 2003 Ronnie Sahlberg
* Helper routines common to all endpoint conversations tap .
2003-08-23 09:09:35 +00:00
*
2006-05-21 05:12:17 +00:00
* Wireshark - Network traffic analyzer
* By Gerald Combs < gerald @ wireshark . org >
2003-08-23 09:09:35 +00:00
* Copyright 1998 Gerald Combs
2004-06-03 21:46:27 +00:00
*
2003-08-23 09:09:35 +00:00
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
* of the License , or ( at your option ) any later version .
2004-06-03 21:46:27 +00:00
*
2003-08-23 09:09:35 +00:00
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
2004-06-03 21:46:27 +00:00
*
2003-08-23 09:09:35 +00:00
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
2012-06-28 22:56:06 +00:00
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA .
2003-08-23 09:09:35 +00:00
*/
2012-09-20 01:48:30 +00:00
# include "config.h"
2003-08-23 09:09:35 +00:00
# include <string.h>
2004-02-13 00:53:37 +00:00
2003-08-23 09:09:35 +00:00
# include <gtk/gtk.h>
2004-02-13 00:53:37 +00:00
2005-01-01 12:49:54 +00:00
# include <epan/addr_resolv.h>
2008-04-13 00:55:59 +00:00
2014-07-03 20:30:12 +00:00
# include <epan/stat_groups.h>
2013-05-24 03:10:56 +00:00
2012-01-16 01:07:52 +00:00
# include "ui/simple_dialog.h"
2012-08-01 19:18:49 +00:00
# include "ui/utf8_entities.h"
2012-01-16 01:07:52 +00:00
2012-01-15 21:59:11 +00:00
# include "ui/gtk/conversations_table.h"
# include "ui/gtk/filter_utils.h"
# include "ui/gtk/gtkglobals.h"
# include "ui/gtk/gui_utils.h"
2012-11-11 18:32:47 +00:00
# include "ui/gtk/gui_stat_menu.h"
2012-01-15 21:59:11 +00:00
# include "ui/gtk/dlg_utils.h"
# include "ui/gtk/help_dlg.h"
# include "ui/gtk/main.h"
# include "ui/gtk/stock_icons.h"
# include "ui/gtk/follow_tcp.h"
# include "ui/gtk/follow_udp.h"
# include "ui/gtk/keys.h"
2008-04-13 00:55:59 +00:00
2011-07-21 17:44:02 +00:00
2007-11-20 18:35:41 +00:00
# define COL_STR_LEN 16
2005-09-16 16:25:53 +00:00
# define CONV_PTR_KEY "conversations-pointer"
2007-11-20 18:35:41 +00:00
# define NB_PAGES_KEY "notebook-pages"
2010-06-23 16:49:17 +00:00
# define FOLLOW_STREAM_BT_KEY "follow-stream-button"
2012-11-11 18:32:47 +00:00
# define GRAPH_A_B_BT_KEY "graph-a-b-button"
# define GRAPH_B_A_BT_KEY "graph-b-a-button"
2007-11-20 18:35:41 +00:00
# define NO_BPS_STR "N / A"
2013-03-21 18:39:16 +00:00
# define CONV_DLG_HEIGHT 550
2003-08-23 09:09:35 +00:00
2009-03-19 17:44:57 +00:00
# define CMP_NUM(n1, n2) \
if ( ( n1 ) > ( n2 ) ) \
return 1 ; \
else if ( ( n1 ) < ( n2 ) ) \
return - 1 ; \
else \
return 0 ;
2003-09-04 11:07:51 +00:00
2003-09-04 23:11:03 +00:00
static void
2004-07-20 21:39:54 +00:00
reset_ct_table_data ( conversations_table * ct )
2003-08-23 09:09:35 +00:00
{
2012-06-03 22:03:05 +00:00
char * display_name ;
2004-06-03 21:46:27 +00:00
char title [ 256 ] ;
2008-02-17 00:35:55 +00:00
GString * error_string ;
const char * filter ;
2009-10-06 07:44:48 +00:00
GtkListStore * store ;
2005-09-16 16:25:53 +00:00
2008-02-17 00:35:55 +00:00
if ( ct - > use_dfilter ) {
filter = gtk_entry_get_text ( GTK_ENTRY ( main_display_filter_widget ) ) ;
} else {
filter = ct - > filter ;
}
2014-12-31 15:47:28 +00:00
error_string = set_tap_dfilter ( & ct - > hash , filter ) ;
2008-02-17 00:35:55 +00:00
if ( error_string ) {
2008-10-31 09:53:56 +00:00
simple_dialog ( ESD_TYPE_ERROR , ESD_BTN_OK , " %s " , error_string - > str ) ;
2008-02-17 00:35:55 +00:00
g_string_free ( error_string , TRUE ) ;
return ;
}
2004-07-20 21:39:54 +00:00
if ( ct - > page_lb ) {
2014-08-05 20:10:44 +00:00
display_name = cf_get_display_name ( & cfile ) ;
2012-06-03 22:03:05 +00:00
g_snprintf ( title , sizeof ( title ) , " Conversations: %s " , display_name ) ;
g_free ( display_name ) ;
2004-07-20 21:39:54 +00:00
gtk_window_set_title ( GTK_WINDOW ( ct - > win ) , title ) ;
2009-03-19 17:44:57 +00:00
g_snprintf ( title , sizeof ( title ) , " %s " , ct - > name ) ;
2004-07-20 21:39:54 +00:00
gtk_label_set_text ( GTK_LABEL ( ct - > page_lb ) , title ) ;
gtk_widget_set_sensitive ( ct - > page_lb , FALSE ) ;
2008-02-17 00:35:55 +00:00
if ( ct - > use_dfilter ) {
if ( filter & & strlen ( filter ) ) {
2009-03-19 17:44:57 +00:00
g_snprintf ( title , sizeof ( title ) , " %s Conversations - Filter: %s " , ct - > name , filter ) ;
2008-02-17 00:35:55 +00:00
} else {
2009-03-19 17:44:57 +00:00
g_snprintf ( title , sizeof ( title ) , " %s Conversations - No Filter " , ct - > name ) ;
2008-02-17 00:35:55 +00:00
}
} else {
2009-03-19 17:44:57 +00:00
g_snprintf ( title , sizeof ( title ) , " %s Conversations " , ct - > name ) ;
2008-02-17 00:35:55 +00:00
}
gtk_label_set_text ( GTK_LABEL ( ct - > name_lb ) , title ) ;
2004-05-02 17:25:10 +00:00
} else {
2014-08-05 20:10:44 +00:00
display_name = cf_get_display_name ( & cfile ) ;
2012-06-03 22:03:05 +00:00
g_snprintf ( title , sizeof ( title ) , " %s Conversations: %s " , ct - > name , display_name ) ;
g_free ( display_name ) ;
2004-07-20 21:39:54 +00:00
gtk_window_set_title ( GTK_WINDOW ( ct - > win ) , title ) ;
2004-05-02 17:25:10 +00:00
}
2003-08-23 09:09:35 +00:00
2009-10-06 07:44:48 +00:00
/* remove all entries from the list */
store = GTK_LIST_STORE ( gtk_tree_view_get_model ( GTK_TREE_VIEW ( ct - > table ) ) ) ;
gtk_list_store_clear ( store ) ;
2003-08-23 09:09:35 +00:00
2004-07-20 21:39:54 +00:00
/* delete all conversations */
2014-04-29 15:10:27 +00:00
reset_conversation_table_data ( & ct - > hash ) ;
2003-08-23 09:09:35 +00:00
}
2005-01-01 12:49:54 +00:00
static void
reset_ct_table_data_cb ( void * arg )
{
2014-07-23 17:38:55 +00:00
conv_hash_t * hash = ( conv_hash_t * ) arg ;
reset_ct_table_data ( ( conversations_table * ) hash - > user_data ) ;
2005-01-01 12:49:54 +00:00
}
2003-08-30 01:18:16 +00:00
2003-09-04 23:11:03 +00:00
static void
2004-07-20 20:56:53 +00:00
ct_win_destroy_cb ( GtkWindow * win _U_ , gpointer data )
2003-09-04 23:11:03 +00:00
{
2009-03-19 17:44:57 +00:00
conversations_table * conversations = ( conversations_table * ) data ;
2003-09-04 23:11:03 +00:00
2014-07-23 17:38:55 +00:00
remove_tap_listener ( & conversations - > hash ) ;
2003-09-04 23:11:03 +00:00
2009-03-19 17:44:57 +00:00
reset_ct_table_data ( conversations ) ;
g_free ( conversations ) ;
2003-09-04 23:11:03 +00:00
}
2003-08-23 09:09:35 +00:00
static gint
2009-10-06 07:44:48 +00:00
ct_sort_func ( GtkTreeModel * model ,
2010-07-23 14:01:47 +00:00
GtkTreeIter * a ,
GtkTreeIter * b ,
gpointer user_data )
2003-08-23 09:09:35 +00:00
{
2009-03-19 17:44:57 +00:00
guint32 idx1 , idx2 ;
2009-10-06 07:44:48 +00:00
/* The col to get data from is in userdata */
gint data_column = GPOINTER_TO_INT ( user_data ) ;
2013-03-08 06:07:26 +00:00
conversations_table * ct = ( conversations_table * ) g_object_get_data ( G_OBJECT ( model ) , CONV_PTR_KEY ) ;
2014-04-29 15:10:27 +00:00
conv_item_t * conv1 = NULL ;
conv_item_t * conv2 = NULL ;
2009-03-19 17:44:57 +00:00
double duration1 , duration2 ;
2014-04-29 15:10:27 +00:00
gtk_tree_model_get ( model , a , CONV_INDEX_COLUMN , & idx1 , - 1 ) ;
gtk_tree_model_get ( model , b , CONV_INDEX_COLUMN , & idx2 , - 1 ) ;
2009-03-19 17:44:57 +00:00
2014-04-29 15:10:27 +00:00
if ( ! ct | | idx1 > = ct - > hash . conv_array - > len | | idx2 > = ct - > hash . conv_array - > len )
2009-03-19 17:44:57 +00:00
return 0 ;
2014-04-29 15:10:27 +00:00
conv1 = & g_array_index ( ct - > hash . conv_array , conv_item_t , idx1 ) ;
conv2 = & g_array_index ( ct - > hash . conv_array , conv_item_t , idx2 ) ;
2009-03-19 17:44:57 +00:00
2009-10-06 07:44:48 +00:00
switch ( data_column ) {
2014-04-29 15:10:27 +00:00
case CONV_COLUMN_SRC_ADDR : /* Source address */
2009-03-19 17:44:57 +00:00
return ( CMP_ADDRESS ( & conv1 - > src_address , & conv2 - > src_address ) ) ;
2014-04-29 15:10:27 +00:00
case CONV_COLUMN_DST_ADDR : /* Destination address */
2009-03-19 17:44:57 +00:00
return ( CMP_ADDRESS ( & conv1 - > dst_address , & conv2 - > dst_address ) ) ;
2014-04-29 15:10:27 +00:00
case CONV_COLUMN_SRC_PORT : /* Source port */
2009-03-19 17:44:57 +00:00
CMP_NUM ( conv1 - > src_port , conv2 - > src_port ) ;
2014-04-29 15:10:27 +00:00
case CONV_COLUMN_DST_PORT : /* Destination port */
2009-03-19 17:44:57 +00:00
CMP_NUM ( conv1 - > dst_port , conv2 - > dst_port ) ;
2014-04-29 15:10:27 +00:00
case CONV_COLUMN_START : /* Start time */
2009-03-19 17:44:57 +00:00
return nstime_cmp ( & conv1 - > start_time , & conv2 - > start_time ) ;
2009-10-06 07:44:48 +00:00
}
duration1 = nstime_to_sec ( & conv1 - > stop_time ) - nstime_to_sec ( & conv1 - > start_time ) ;
duration2 = nstime_to_sec ( & conv2 - > stop_time ) - nstime_to_sec ( & conv2 - > start_time ) ;
2010-07-23 14:01:47 +00:00
2009-10-06 07:44:48 +00:00
switch ( data_column ) {
2014-04-29 15:10:27 +00:00
case CONV_COLUMN_DURATION : /* Duration */
2009-03-19 17:44:57 +00:00
CMP_NUM ( duration1 , duration2 ) ;
2014-04-29 15:10:27 +00:00
case CONV_COLUMN_BPS_AB : /* bps A->B */
2009-03-19 17:44:57 +00:00
if ( duration1 > 0 & & conv1 - > tx_frames > 1 & & duration2 > 0 & & conv2 - > tx_frames > 1 ) {
CMP_NUM ( ( gint64 ) conv1 - > tx_bytes / duration1 , ( gint64 ) conv2 - > tx_bytes / duration2 ) ;
} else {
CMP_NUM ( conv1 - > tx_bytes , conv2 - > tx_bytes ) ;
}
2014-04-29 15:10:27 +00:00
case CONV_COLUMN_BPS_BA : /* bps A<-B */
2009-03-19 17:44:57 +00:00
if ( duration1 > 0 & & conv1 - > rx_frames > 1 & & duration2 > 0 & & conv2 - > rx_frames > 1 ) {
CMP_NUM ( ( gint64 ) conv1 - > rx_bytes / duration1 , ( gint64 ) conv2 - > rx_bytes / duration2 ) ;
} else {
CMP_NUM ( conv1 - > rx_bytes , conv2 - > rx_bytes ) ;
}
default :
g_assert_not_reached ( ) ;
}
2005-09-16 16:25:53 +00:00
2009-03-19 17:44:57 +00:00
return 0 ;
2003-08-23 09:09:35 +00:00
}
2003-08-27 12:10:21 +00:00
static void
2004-07-20 20:56:53 +00:00
ct_select_filter_cb ( GtkWidget * widget _U_ , gpointer callback_data , guint callback_action )
2003-08-27 12:10:21 +00:00
{
2014-04-29 15:10:27 +00:00
conv_direction_e direction ;
2010-01-29 16:13:26 +00:00
guint32 idx = 0 ;
2009-03-19 17:44:57 +00:00
conversations_table * ct = ( conversations_table * ) callback_data ;
2009-10-06 07:44:48 +00:00
GtkTreeIter iter ;
GtkTreeModel * model ;
GtkTreeSelection * sel ;
2015-01-10 19:20:06 +00:00
const char * str ;
2014-04-29 15:10:27 +00:00
conv_item_t * conv ;
2009-03-19 17:44:57 +00:00
2014-04-29 15:10:27 +00:00
direction = ( conv_direction_e ) FILTER_EXTRA ( callback_action ) ;
2009-03-19 17:44:57 +00:00
2009-10-06 07:44:48 +00:00
sel = gtk_tree_view_get_selection ( GTK_TREE_VIEW ( ct - > table ) ) ;
if ( ! gtk_tree_selection_get_selected ( sel , & model , & iter ) )
return ;
2010-07-23 14:01:47 +00:00
gtk_tree_model_get ( model , & iter ,
2014-04-29 15:10:27 +00:00
CONV_INDEX_COLUMN , & idx ,
2009-10-06 07:44:48 +00:00
- 1 ) ;
2014-04-29 15:10:27 +00:00
if ( idx > = ct - > hash . conv_array - > len ) {
2009-03-19 17:44:57 +00:00
simple_dialog ( ESD_TYPE_ERROR , ESD_BTN_OK , " No conversation selected " ) ;
return ;
}
2014-04-29 15:10:27 +00:00
conv = & g_array_index ( ct - > hash . conv_array , conv_item_t , idx ) ;
2003-08-27 12:10:21 +00:00
2014-04-29 15:10:27 +00:00
str = get_conversation_filter ( conv , direction ) ;
2003-08-27 12:10:21 +00:00
2014-04-29 15:10:27 +00:00
apply_selected_filter ( callback_action , str ) ;
2015-01-10 19:20:06 +00:00
g_free ( ( char * ) str ) ;
2003-08-27 12:10:21 +00:00
}
2010-07-30 12:41:56 +00:00
static gboolean
2004-07-20 21:39:54 +00:00
ct_show_popup_menu_cb ( void * widg _U_ , GdkEvent * event , conversations_table * ct )
2003-08-27 12:10:21 +00:00
{
2007-12-04 07:50:44 +00:00
GdkEventButton * bevent = ( GdkEventButton * ) event ;
2003-08-27 12:10:21 +00:00
2007-12-04 07:50:44 +00:00
if ( event - > type = = GDK_BUTTON_PRESS & & bevent - > button = = 3 ) {
gtk_menu_popup ( GTK_MENU ( ct - > menu ) , NULL , NULL , NULL , NULL ,
2009-03-19 17:44:57 +00:00
bevent - > button , bevent - > time ) ;
2004-05-05 20:12:50 +00:00
}
2003-08-27 12:10:21 +00:00
2007-12-04 07:50:44 +00:00
return FALSE ;
2003-08-27 12:10:21 +00:00
}
2010-08-19 19:05:11 +00:00
/* As Selected */
static void
2011-04-30 08:36:00 +00:00
conv_apply_as_selected_AtofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_SELECTED , CONV_DIR_A_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_as_selected_AtoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_SELECTED , CONV_DIR_A_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_as_selected_AfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_SELECTED , CONV_DIR_A_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_as_selected_AtofromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_SELECTED , CONV_DIR_A_TO_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_as_selected_AtoAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_SELECTED , CONV_DIR_A_TO_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_as_selected_AfromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_SELECTED , CONV_DIR_A_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_as_selected_AnytofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_SELECTED , CONV_DIR_ANY_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_as_selected_AnyfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_SELECTED , CONV_DIR_ANY_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_as_selected_AnytoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_SELECTED , CONV_DIR_ANY_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
/* As Not Selected */
static void
2011-04-30 08:36:00 +00:00
conv_apply_as_not_selected_AtofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_NOT_SELECTED , CONV_DIR_A_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_as_not_selected_AtoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_NOT_SELECTED , CONV_DIR_A_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_as_not_selected_AfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_NOT_SELECTED , CONV_DIR_A_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_as_not_selected_AtofromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_NOT_SELECTED , CONV_DIR_A_TO_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_as_not_selected_AtoAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_NOT_SELECTED , CONV_DIR_A_TO_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_as_not_selected_AfromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_NOT_SELECTED , CONV_DIR_A_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_as_not_selected_AnytofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_NOT_SELECTED , CONV_DIR_ANY_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_as_not_selected_AnyfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_NOT_SELECTED , CONV_DIR_ANY_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_as_not_selected_AnytoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_NOT_SELECTED , CONV_DIR_ANY_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
/* And Selected */
static void
2011-04-30 08:36:00 +00:00
conv_apply_and_selected_AtofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_AND_SELECTED , CONV_DIR_A_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_and_selected_AtoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_AND_SELECTED , CONV_DIR_A_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_and_selected_AfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_AND_SELECTED , CONV_DIR_A_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_and_selected_AtofromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_AND_SELECTED , CONV_DIR_A_TO_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_and_selected_AtoAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_AND_SELECTED , CONV_DIR_A_TO_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_and_selected_AfromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_AND_SELECTED , CONV_DIR_A_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_and_selected_AnytofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_AND_SELECTED , CONV_DIR_ANY_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_and_selected_AnyfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_AND_SELECTED , CONV_DIR_ANY_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_and_selected_AnytoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_AND_SELECTED , CONV_DIR_ANY_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
/* Or Selected */
static void
2011-04-30 08:36:00 +00:00
conv_apply_or_selected_AtofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_OR_SELECTED , CONV_DIR_A_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_or_selected_AtoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_OR_SELECTED , CONV_DIR_A_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_or_selected_AfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_OR_SELECTED , CONV_DIR_A_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_or_selected_AtofromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_OR_SELECTED , CONV_DIR_A_TO_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_or_selected_AtoAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_OR_SELECTED , CONV_DIR_A_TO_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_or_selected_AfromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_OR_SELECTED , CONV_DIR_A_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_or_selected_AnytofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_OR_SELECTED , CONV_DIR_ANY_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_or_selected_AnyfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_OR_SELECTED , CONV_DIR_ANY_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_or_selected_AnytoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_OR_SELECTED , CONV_DIR_ANY_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
/* And Not Selected */
static void
2011-04-30 08:36:00 +00:00
conv_apply_and_not_selected_AtofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_AND_NOT_SELECTED , CONV_DIR_A_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_and_not_selected_AtoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_AND_NOT_SELECTED , CONV_DIR_A_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_and_not_selected_AfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_AND_NOT_SELECTED , CONV_DIR_A_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_and_not_selected_AtofromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_AND_NOT_SELECTED , CONV_DIR_A_TO_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_and_not_selected_AtoAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_AND_NOT_SELECTED , CONV_DIR_A_TO_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_and_not_selected_AfromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_AND_NOT_SELECTED , CONV_DIR_A_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_and_not_selected_AnytofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_AND_NOT_SELECTED , CONV_DIR_ANY_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_and_not_selected_AnyfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_AND_NOT_SELECTED , CONV_DIR_ANY_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_and_not_selected_AnytoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_AND_NOT_SELECTED , CONV_DIR_ANY_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
/* Or Not Selected */
static void
2011-04-30 08:36:00 +00:00
conv_apply_or_not_selected_AtofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_OR_NOT_SELECTED , CONV_DIR_A_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_or_not_selected_AtoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_AND_NOT_SELECTED , CONV_DIR_A_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_or_not_selected_AfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_OR_NOT_SELECTED , CONV_DIR_A_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_or_not_selected_AtofromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_OR_NOT_SELECTED , CONV_DIR_A_TO_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_or_not_selected_AtoAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_OR_NOT_SELECTED , CONV_DIR_A_TO_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_or_not_selected_AfromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_OR_NOT_SELECTED , CONV_DIR_A_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_or_not_selected_AnytofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_OR_NOT_SELECTED , CONV_DIR_ANY_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_or_not_selected_AnyfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_OR_NOT_SELECTED , CONV_DIR_ANY_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_apply_or_not_selected_AnytoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_MATCH ( ACTYPE_OR_NOT_SELECTED , CONV_DIR_ANY_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
/* Prepare As Selected*/
static void
2011-04-30 08:36:00 +00:00
conv_prepare_as_selected_AtofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_SELECTED , CONV_DIR_A_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_as_selected_AtoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_SELECTED , CONV_DIR_A_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_as_selected_AfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_SELECTED , CONV_DIR_A_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_as_selected_AtofromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_SELECTED , CONV_DIR_A_TO_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_as_selected_AtoAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_SELECTED , CONV_DIR_A_TO_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_as_selected_AfromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_SELECTED , CONV_DIR_A_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_as_selected_AnytofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_SELECTED , CONV_DIR_ANY_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_as_selected_AnyfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_SELECTED , CONV_DIR_ANY_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_as_selected_AnytoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_SELECTED , CONV_DIR_ANY_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
/* Prepare As Not Selected */
static void
2011-04-30 08:36:00 +00:00
conv_prepare_as_not_selected_AtofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_NOT_SELECTED , CONV_DIR_A_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_as_not_selected_AtoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_NOT_SELECTED , CONV_DIR_A_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_as_not_selected_AfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_NOT_SELECTED , CONV_DIR_A_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_as_not_selected_AtofromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_NOT_SELECTED , CONV_DIR_A_TO_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_as_not_selected_AtoAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_NOT_SELECTED , CONV_DIR_A_TO_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_as_not_selected_AfromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_NOT_SELECTED , CONV_DIR_A_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_as_not_selected_AnytofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_NOT_SELECTED , CONV_DIR_ANY_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_as_not_selected_AnyfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_NOT_SELECTED , CONV_DIR_ANY_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_as_not_selected_AnytoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_NOT_SELECTED , CONV_DIR_ANY_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
/* Prepare And Selected */
static void
2011-04-30 08:36:00 +00:00
conv_prepare_and_selected_AtofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_AND_SELECTED , CONV_DIR_A_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_and_selected_AtoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_AND_SELECTED , CONV_DIR_A_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_and_selected_AfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_AND_SELECTED , CONV_DIR_A_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_and_selected_AtofromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_AND_SELECTED , CONV_DIR_A_TO_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_and_selected_AtoAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_AND_SELECTED , CONV_DIR_A_TO_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_and_selected_AfromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_AND_SELECTED , CONV_DIR_A_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_and_selected_AnytofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_AND_SELECTED , CONV_DIR_ANY_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_and_selected_AnyfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_AND_SELECTED , CONV_DIR_ANY_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_and_selected_AnytoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_AND_SELECTED , CONV_DIR_ANY_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
/* Prepare Or Selected */
static void
2011-04-30 08:36:00 +00:00
conv_prepare_or_selected_AtofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_OR_SELECTED , CONV_DIR_A_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_or_selected_AtoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_OR_SELECTED , CONV_DIR_A_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_or_selected_AfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_OR_SELECTED , CONV_DIR_A_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_or_selected_AtofromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_OR_SELECTED , CONV_DIR_A_TO_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_or_selected_AtoAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_OR_SELECTED , CONV_DIR_A_TO_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_or_selected_AfromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_OR_SELECTED , CONV_DIR_A_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_or_selected_AnytofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_OR_SELECTED , CONV_DIR_ANY_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_or_selected_AnyfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_OR_SELECTED , CONV_DIR_ANY_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_or_selected_AnytoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_OR_SELECTED , CONV_DIR_ANY_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
/* Prepare And Not Selected */
static void
2011-04-30 08:36:00 +00:00
conv_prepare_and_not_selected_AtofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_AND_NOT_SELECTED , CONV_DIR_A_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_and_not_selected_AtoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_AND_NOT_SELECTED , CONV_DIR_A_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_and_not_selected_AfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_AND_NOT_SELECTED , CONV_DIR_A_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_and_not_selected_AtofromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_AND_NOT_SELECTED , CONV_DIR_A_TO_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_and_not_selected_AtoAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_AND_NOT_SELECTED , CONV_DIR_A_TO_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_and_not_selected_AfromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_AND_NOT_SELECTED , CONV_DIR_A_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_and_not_selected_AnytofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_AND_NOT_SELECTED , CONV_DIR_ANY_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_and_not_selected_AnyfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_AND_NOT_SELECTED , CONV_DIR_ANY_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_and_not_selected_AnytoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_AND_NOT_SELECTED , CONV_DIR_ANY_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
/* Prepare Or Not Selected */
static void
2011-04-30 08:36:00 +00:00
conv_prepare_or_not_selected_AtofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_OR_NOT_SELECTED , CONV_DIR_A_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_or_not_selected_AtoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_AND_NOT_SELECTED , CONV_DIR_A_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_or_not_selected_AfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_OR_NOT_SELECTED , CONV_DIR_A_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_or_not_selected_AtofromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_OR_NOT_SELECTED , CONV_DIR_A_TO_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_or_not_selected_AtoAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_OR_NOT_SELECTED , CONV_DIR_A_TO_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_or_not_selected_AfromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_OR_NOT_SELECTED , CONV_DIR_A_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_or_not_selected_AnytofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_OR_NOT_SELECTED , CONV_DIR_ANY_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_or_not_selected_AnyfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_OR_NOT_SELECTED , CONV_DIR_ANY_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_prepare_or_not_selected_AnytoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_PREPARE ( ACTYPE_OR_NOT_SELECTED , CONV_DIR_ANY_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
/* Find packet */
static void
2011-04-30 08:36:00 +00:00
conv_find_AtofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_FRAME ( ACTYPE_SELECTED , CONV_DIR_A_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_AtoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_FRAME ( ACTYPE_SELECTED , CONV_DIR_A_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_AfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_FRAME ( ACTYPE_SELECTED , CONV_DIR_A_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_AtofromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_FRAME ( ACTYPE_SELECTED , CONV_DIR_A_TO_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_AtoAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_FRAME ( ACTYPE_SELECTED , CONV_DIR_A_TO_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_AfromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_FRAME ( ACTYPE_SELECTED , CONV_DIR_A_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_AnytofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_FRAME ( ACTYPE_SELECTED , CONV_DIR_ANY_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_AnyfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_FRAME ( ACTYPE_SELECTED , CONV_DIR_ANY_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_AnytoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_FRAME ( ACTYPE_SELECTED , CONV_DIR_ANY_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
/* Find next */
static void
2011-04-30 08:36:00 +00:00
conv_find_next_AtofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_NEXT ( ACTYPE_NOT_SELECTED , CONV_DIR_A_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_next_AtoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_NEXT ( ACTYPE_NOT_SELECTED , CONV_DIR_A_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_next_AfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_NEXT ( ACTYPE_NOT_SELECTED , CONV_DIR_A_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_next_AtofromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_NEXT ( ACTYPE_NOT_SELECTED , CONV_DIR_A_TO_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_next_AtoAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_NEXT ( ACTYPE_NOT_SELECTED , CONV_DIR_A_TO_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_next_AfromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_NEXT ( ACTYPE_NOT_SELECTED , CONV_DIR_A_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_next_AnytofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_NEXT ( ACTYPE_NOT_SELECTED , CONV_DIR_ANY_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_next_AnyfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_NEXT ( ACTYPE_NOT_SELECTED , CONV_DIR_ANY_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_next_AnytoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_NEXT ( ACTYPE_NOT_SELECTED , CONV_DIR_ANY_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
/* Find Previous */
static void
2011-04-30 08:36:00 +00:00
conv_find_previous_AtofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_PREVIOUS ( ACTYPE_AND_SELECTED , CONV_DIR_A_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_previous_AtoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_PREVIOUS ( ACTYPE_AND_SELECTED , CONV_DIR_A_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_previous_AfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_PREVIOUS ( ACTYPE_AND_SELECTED , CONV_DIR_A_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_previous_AtofromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_PREVIOUS ( ACTYPE_AND_SELECTED , CONV_DIR_A_TO_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_previous_AtoAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_PREVIOUS ( ACTYPE_AND_SELECTED , CONV_DIR_A_TO_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_previous_AfromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_PREVIOUS ( ACTYPE_AND_SELECTED , CONV_DIR_A_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_previous_AnytofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_PREVIOUS ( ACTYPE_AND_SELECTED , CONV_DIR_ANY_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_previous_AnyfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_PREVIOUS ( ACTYPE_AND_SELECTED , CONV_DIR_ANY_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_find_previous_AnytoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_FIND_PREVIOUS ( ACTYPE_AND_SELECTED , CONV_DIR_ANY_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
/* Colorize Conversation */
static void
2011-04-30 08:36:00 +00:00
conv_color_AtofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_COLORIZE ( ACTYPE_SELECTED , CONV_DIR_A_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_color_AtoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_COLORIZE ( ACTYPE_SELECTED , CONV_DIR_A_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_color_AfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_COLORIZE ( ACTYPE_SELECTED , CONV_DIR_A_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_color_AtofromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_COLORIZE ( ACTYPE_SELECTED , CONV_DIR_A_TO_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_color_AtoAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_COLORIZE ( ACTYPE_SELECTED , CONV_DIR_A_TO_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_color_AfromAny_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_COLORIZE ( ACTYPE_SELECTED , CONV_DIR_A_FROM_ANY ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_color_AnytofromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_COLORIZE ( ACTYPE_SELECTED , CONV_DIR_ANY_TO_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_color_AnyfromB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_COLORIZE ( ACTYPE_SELECTED , CONV_DIR_ANY_FROM_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static void
2011-04-30 08:36:00 +00:00
conv_color_AnytoB_cb ( GtkAction * action _U_ , gpointer user_data )
2010-08-19 19:05:11 +00:00
{
2014-04-29 15:10:27 +00:00
ct_select_filter_cb ( NULL , user_data , CALLBACK_COLORIZE ( ACTYPE_SELECTED , CONV_DIR_ANY_TO_B ) ) ;
2010-08-19 19:05:11 +00:00
}
static const char * ui_desc_conv_filter_popup =
" <ui> \n "
" <popup name='ConversationFilterPopup' action='PopupAction'> \n "
" <menu name= 'ApplyAsFilter' action='/Apply as Filter'> \n "
" <menu name= 'ApplyAsFilterSelected' action='/Apply as Filter/Selected'> \n "
" <menuitem action='/Apply as Filter/Selected/A_to_from_B'/> \n "
" <menuitem action='/Apply as Filter/Selected/A_to_B'/> \n "
" <menuitem action='/Apply as Filter/Selected/A_from_B'/> \n "
" <menuitem action='/Apply as Filter/Selected/A_to_from_Any'/> \n "
" <menuitem action='/Apply as Filter/Selected/A_to_Any'/> \n "
" <menuitem action='/Apply as Filter/Selected/A_from_Any'/> \n "
" <menuitem action='/Apply as Filter/Selected/Any_tofrom_B'/> \n "
" <menuitem action='/Apply as Filter/Selected/Any_from_B'/> \n "
" <menuitem action='/Apply as Filter/Selected/Any_to_B'/> \n "
" </menu> \n "
" <menu name= 'ApplyAsFilterNotSelected' action='/Apply as Filter/Not Selected'> \n "
" <menuitem action='/Apply as Filter/Not Selected/A_to_from_B'/> \n "
" <menuitem action='/Apply as Filter/Not Selected/A_to_B'/> \n "
" <menuitem action='/Apply as Filter/Not Selected/A_from_B'/> \n "
" <menuitem action='/Apply as Filter/Not Selected/A_to_from_Any'/> \n "
" <menuitem action='/Apply as Filter/Not Selected/A_to_Any'/> \n "
" <menuitem action='/Apply as Filter/Not Selected/A_from_Any'/> \n "
" <menuitem action='/Apply as Filter/Not Selected/Any_tofrom_B'/> \n "
" <menuitem action='/Apply as Filter/Not Selected/Any_from_B'/> \n "
" <menuitem action='/Apply as Filter/Not Selected/Any_to_B'/> \n "
" </menu> \n "
2010-10-03 16:09:25 +00:00
" <menu name= 'ApplyAsFilterAndSelected' action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected'> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_to_from_B'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_to_B'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_from_B'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_to_from_Any'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_to_Any'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_from_Any'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/Any_tofrom_B'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/Any_from_B'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/Any_to_B'/> \n "
2010-08-19 19:05:11 +00:00
" </menu> \n "
2010-10-03 16:09:25 +00:00
" <menu name= 'ApplyAsFilterOrSelected' action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected'> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_to_from_B'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_to_B'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_from_B'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_to_from_Any'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_to_Any'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_from_Any'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/Any_tofrom_B'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/Any_from_B'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/Any_to_B'/> \n "
2010-08-19 19:05:11 +00:00
" </menu> \n "
2010-10-03 16:09:25 +00:00
" <menu name= 'ApplyAsFilterAndNotSelected' action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected'> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_to_from_B'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_to_B'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_from_B'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_to_from_Any'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_to_Any'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_from_Any'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/Any_tofrom_B'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/Any_from_B'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/Any_to_B'/> \n "
2010-08-19 19:05:11 +00:00
" </menu> \n "
2010-10-03 16:09:25 +00:00
" <menu name= 'ApplyAsFilterOrNotSelected' action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected'> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_to_from_B'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_to_B'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_from_B'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_to_from_Any'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_to_Any'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_from_Any'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/Any_tofrom_B'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/Any_from_B'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/Any_to_B'/> \n "
2010-10-03 15:22:16 +00:00
" </menu> \n "
2010-08-19 19:05:11 +00:00
" </menu> \n "
" <menu name= 'PrepareAFilter' action='/Prepare a Filter'> \n "
" <menu name= 'PrepareAFilterSelected' action='/Prepare a Filter/Selected'> \n "
" <menuitem action='/Prepare a Filter/Selected/A_to_from_B'/> \n "
" <menuitem action='/Prepare a Filter/Selected/A_to_B'/> \n "
" <menuitem action='/Prepare a Filter/Selected/A_from_B'/> \n "
" <menuitem action='/Prepare a Filter/Selected/A_to_from_Any'/> \n "
" <menuitem action='/Prepare a Filter/Selected/A_to_Any'/> \n "
" <menuitem action='/Prepare a Filter/Selected/A_from_Any'/> \n "
" <menuitem action='/Prepare a Filter/Selected/Any_tofrom_B'/> \n "
" <menuitem action='/Prepare a Filter/Selected/Any_from_B'/> \n "
" <menuitem action='/Prepare a Filter/Selected/Any_to_B'/> \n "
" </menu> \n "
" <menu name= 'PrepareAFilterNotSelected' action='/Prepare a Filter/Not Selected'> \n "
" <menuitem action='/Prepare a Filter/Not Selected/A_to_from_B'/> \n "
" <menuitem action='/Prepare a Filter/Not Selected/A_to_B'/> \n "
" <menuitem action='/Prepare a Filter/Not Selected/A_from_B'/> \n "
" <menuitem action='/Prepare a Filter/Not Selected/A_to_from_Any'/> \n "
" <menuitem action='/Prepare a Filter/Not Selected/A_to_Any'/> \n "
" <menuitem action='/Prepare a Filter/Not Selected/A_from_Any'/> \n "
" <menuitem action='/Prepare a Filter/Not Selected/Any_tofrom_B'/> \n "
" <menuitem action='/Prepare a Filter/Not Selected/Any_from_B'/> \n "
" <menuitem action='/Prepare a Filter/Not Selected/Any_to_B'/> \n "
" </menu> \n "
2010-10-03 16:09:25 +00:00
" <menu name= 'PrepareAFilterAndSelected' action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected'> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_to_from_B'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_to_B'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_from_B'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_to_from_Any'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_to_Any'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_from_Any'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/Any_tofrom_B'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/Any_from_B'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/Any_to_B'/> \n "
2010-08-19 19:05:11 +00:00
" </menu> \n "
2010-10-03 16:09:25 +00:00
" <menu name= 'PrepareAFilterOrSelected' action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected'> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_to_from_B'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_to_B'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_from_B'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_to_from_Any'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_to_Any'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_from_Any'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/Any_tofrom_B'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/Any_from_B'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/Any_to_B'/> \n "
2010-08-19 19:05:11 +00:00
" </menu> \n "
2010-10-03 16:09:25 +00:00
" <menu name= 'PrepareAFilterAndNotSelected' action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected'> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_to_from_B'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_to_B'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_from_B'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_to_from_Any'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_to_Any'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_from_Any'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/Any_tofrom_B'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/Any_from_B'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/Any_to_B'/> \n "
2010-08-19 19:05:11 +00:00
" </menu> \n "
2010-10-03 16:09:25 +00:00
" <menu name= 'PrepareAFilterOrNotSelected' action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected'> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_to_from_B'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_to_B'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_from_B'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_to_from_Any'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_to_Any'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_from_Any'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/Any_tofrom_B'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/Any_from_B'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/Any_to_B'/> \n "
2010-10-03 15:22:16 +00:00
" </menu> \n "
2010-08-19 19:05:11 +00:00
" </menu> \n "
" <menu name= 'FindPacket' action='/Find Packet'> \n "
" <menu name= 'FindPacketFindPacket' action='/Find Packet/Find Packet'> \n "
" <menuitem action='/Find Packet/Find Packet/A_to_from_B'/> \n "
" <menuitem action='/Find Packet/Find Packet/A_to_B'/> \n "
" <menuitem action='/Find Packet/Find Packet/A_from_B'/> \n "
" <menuitem action='/Find Packet/Find Packet/A_to_from_Any'/> \n "
" <menuitem action='/Find Packet/Find Packet/A_to_Any'/> \n "
" <menuitem action='/Find Packet/Find Packet/A_from_Any'/> \n "
" <menuitem action='/Find Packet/Find Packet/Any_tofrom_B'/> \n "
" <menuitem action='/Find Packet/Find Packet/Any_from_B'/> \n "
" <menuitem action='/Find Packet/Find Packet/Any_to_B'/> \n "
" </menu> \n "
" <menu name= 'FindPacketFindNext' action='/Find Packet/Find Next'> \n "
" <menuitem action='/Find Packet/Find Next/A_to_from_B'/> \n "
" <menuitem action='/Find Packet/Find Next/A_to_B'/> \n "
" <menuitem action='/Find Packet/Find Next/A_from_B'/> \n "
" <menuitem action='/Find Packet/Find Next/A_to_from_Any'/> \n "
" <menuitem action='/Find Packet/Find Next/A_to_Any'/> \n "
" <menuitem action='/Find Packet/Find Next/A_from_Any'/> \n "
" <menuitem action='/Find Packet/Find Next/Any_tofrom_B'/> \n "
" <menuitem action='/Find Packet/Find Next/Any_from_B'/> \n "
" <menuitem action='/Find Packet/Find Next/Any_to_B'/> \n "
" </menu> \n "
" <menu name= 'FindPacketFindPrevious' action='/Find Packet/Find Previous'> \n "
" <menuitem action='/Find Packet/Find Previous/A_to_from_B'/> \n "
" <menuitem action='/Find Packet/Find Previous/A_to_B'/> \n "
" <menuitem action='/Find Packet/Find Previous/A_from_B'/> \n "
" <menuitem action='/Find Packet/Find Previous/A_to_from_Any'/> \n "
" <menuitem action='/Find Packet/Find Previous/A_to_Any'/> \n "
" <menuitem action='/Find Packet/Find Previous/A_from_Any'/> \n "
" <menuitem action='/Find Packet/Find Previous/Any_tofrom_B'/> \n "
" <menuitem action='/Find Packet/Find Previous/Any_from_B'/> \n "
" <menuitem action='/Find Packet/Find Previous/Any_to_B'/> \n "
" </menu> \n "
" </menu> \n "
" <menu name= 'ColorizeConversation' action='/Colorize Conversation'> \n "
" <menuitem action='/Colorize Conversation/A_to_from_B'/> \n "
" <menuitem action='/Colorize Conversation/A_to_B'/> \n "
" <menuitem action='/Colorize Conversation/A_from_B'/> \n "
" <menuitem action='/Colorize Conversation/A_to_from_Any'/> \n "
" <menuitem action='/Colorize Conversation/A_to_Any'/> \n "
" <menuitem action='/Colorize Conversation/A_from_Any'/> \n "
" <menuitem action='/Colorize Conversation/Any_tofrom_B'/> \n "
" <menuitem action='/Colorize Conversation/Any_from_B'/> \n "
" <menuitem action='/Colorize Conversation/Any_to_B'/> \n "
" </menu> \n "
" </popup> \n "
" </ui> \n " ;
2011-06-23 18:06:13 +00:00
/*
2010-08-19 19:05:11 +00:00
* GtkActionEntry
* typedef struct {
* const gchar * name ;
* const gchar * stock_id ;
* const gchar * label ;
* const gchar * accelerator ;
* const gchar * tooltip ;
* GCallback callback ;
* } GtkActionEntry ;
2011-06-23 18:06:13 +00:00
* const gchar * name ; The name of the action .
* const gchar * stock_id ; The stock id for the action , or the name of an icon from the icon theme .
* const gchar * label ; The label for the action . This field should typically be marked for translation ,
* see gtk_action_group_set_translation_domain ( ) .
* If label is NULL , the label of the stock item with id stock_id is used .
* const gchar * accelerator ; The accelerator for the action , in the format understood by gtk_accelerator_parse ( ) .
* const gchar * tooltip ; The tooltip for the action . This field should typically be marked for translation ,
* see gtk_action_group_set_translation_domain ( ) .
* GCallback callback ; The function to call when the action is activated .
2010-08-19 19:05:11 +00:00
*
*/
static const GtkActionEntry conv_filter_menu_entries [ ] = {
2011-06-23 18:06:13 +00:00
/* Top level */
{ " /Apply as Filter " , NULL , " Apply as Filter " , NULL , NULL , NULL } ,
{ " /Prepare a Filter " , NULL , " Prepare a Filter " , NULL , NULL , NULL } ,
{ " /Find Packet " , NULL , " Find Packet " , NULL , NULL , NULL } ,
{ " /Colorize Conversation " , NULL , " Colorize Conversation " , NULL , NULL , NULL } ,
/* Apply as */
{ " /Apply as Filter/Selected " , NULL , " Selected " , NULL , NULL , NULL } ,
{ " /Apply as Filter/Not Selected " , NULL , " Not Selected " , NULL , NULL , NULL } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " and Selected " , NULL , NULL , NULL } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " or Selected " , NULL , NULL , NULL } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " and not Selected " , NULL , NULL , NULL } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " or not Selected " , NULL , NULL , NULL } ,
/* Apply as Selected */
{ " /Apply as Filter/Selected/A_to_from_B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_apply_as_selected_AtofromB_cb ) } ,
{ " /Apply as Filter/Selected/A_to_B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_as_selected_AtoB_cb ) } ,
{ " /Apply as Filter/Selected/A_from_B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_as_selected_AfromB_cb ) } ,
{ " /Apply as Filter/Selected/A_to_from_Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , G_CALLBACK ( conv_apply_as_selected_AtofromAny_cb ) } ,
{ " /Apply as Filter/Selected/A_to_Any " , NULL , " A " UTF8_RIGHTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_apply_as_selected_AtoAny_cb ) } ,
{ " /Apply as Filter/Selected/A_from_Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_apply_as_selected_AfromAny_cb ) } ,
{ " /Apply as Filter/Selected/Any_tofrom_B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_apply_as_selected_AnytofromB_cb ) } ,
{ " /Apply as Filter/Selected/Any_to_B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_as_selected_AnytoB_cb ) } ,
{ " /Apply as Filter/Selected/Any_from_B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_as_selected_AnyfromB_cb ) } ,
/* Apply as Not Selected */
{ " /Apply as Filter/Not Selected/A_to_from_B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_apply_as_not_selected_AtofromB_cb ) } ,
{ " /Apply as Filter/Not Selected/A_to_B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_as_not_selected_AtoB_cb ) } ,
{ " /Apply as Filter/Not Selected/A_from_B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_as_not_selected_AfromB_cb ) } ,
{ " /Apply as Filter/Not Selected/A_to_from_Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , G_CALLBACK ( conv_apply_as_not_selected_AtofromAny_cb ) } ,
{ " /Apply as Filter/Not Selected/A_to_Any " , NULL , " A " UTF8_RIGHTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_apply_as_not_selected_AtoAny_cb ) } ,
{ " /Apply as Filter/Not Selected/A_from_Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_apply_as_not_selected_AfromAny_cb ) } ,
{ " /Apply as Filter/Not Selected/Any_tofrom_B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_apply_as_not_selected_AnytofromB_cb ) } ,
{ " /Apply as Filter/Not Selected/Any_to_B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_as_not_selected_AnytoB_cb ) } ,
{ " /Apply as Filter/Not Selected/Any_from_B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_as_not_selected_AnyfromB_cb ) } ,
/* Apply as ... and Selected */
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_to_from_B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_apply_and_selected_AtofromB_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_to_B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_and_selected_AtoB_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_from_B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_and_selected_AfromB_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_to_from_Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , G_CALLBACK ( conv_apply_and_selected_AtofromAny_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_to_Any " , NULL , " A " UTF8_RIGHTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_apply_and_selected_AtoAny_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_from_Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_apply_and_selected_AfromAny_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/Any_tofrom_B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_apply_and_selected_AnytofromB_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/Any_to_B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_and_selected_AnytoB_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/Any_from_B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_and_selected_AnyfromB_cb ) } ,
/* Apply as ... or Selected */
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_to_from_B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_apply_or_selected_AtofromB_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_to_B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_or_selected_AtoB_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_from_B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_or_selected_AfromB_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_to_from_Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , G_CALLBACK ( conv_apply_or_selected_AtofromAny_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_to_Any " , NULL , " A " UTF8_RIGHTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_apply_or_selected_AtoAny_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_from_Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_apply_or_selected_AfromAny_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/Any_tofrom_B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_apply_or_selected_AnytofromB_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/Any_to_B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_or_selected_AnytoB_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/Any_from_B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_or_selected_AnyfromB_cb ) } ,
/* Apply as ... and not Selected */
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_to_from_B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_apply_and_not_selected_AtofromB_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_to_B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_and_not_selected_AtoB_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_from_B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_and_not_selected_AfromB_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_to_from_Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , G_CALLBACK ( conv_apply_and_not_selected_AtofromAny_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_to_Any " , NULL , " A " UTF8_RIGHTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_apply_and_not_selected_AtoAny_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_from_Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_apply_and_not_selected_AfromAny_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/Any_tofrom_B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_apply_and_not_selected_AnytofromB_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/Any_to_B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_and_not_selected_AnytoB_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/Any_from_B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_and_not_selected_AnyfromB_cb ) } ,
/* Apply as ... or not Selected */
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_to_from_B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_apply_or_not_selected_AtofromB_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_to_B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_or_not_selected_AtoB_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_from_B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_or_not_selected_AfromB_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_to_from_Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , G_CALLBACK ( conv_apply_or_not_selected_AtofromAny_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_to_Any " , NULL , " A " UTF8_RIGHTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_apply_or_not_selected_AtoAny_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_from_Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_apply_or_not_selected_AfromAny_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/Any_tofrom_B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_apply_or_not_selected_AnytofromB_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/Any_to_B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_or_not_selected_AnytoB_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/Any_from_B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_apply_or_not_selected_AnyfromB_cb ) } ,
/* Prepare a */
{ " /Prepare a Filter/Selected " , NULL , " Selected " , NULL , NULL , NULL } ,
{ " /Prepare a Filter/Not Selected " , NULL , " Not Selected " , NULL , NULL , NULL } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " and Selected " , NULL , NULL , NULL } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " or Selected " , NULL , NULL , NULL } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " and not Selected " , NULL , NULL , NULL } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " or not Selected " , NULL , NULL , NULL } ,
/* Prepare as Selected */
{ " /Prepare a Filter/Selected/A_to_from_B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_prepare_as_selected_AtofromB_cb ) } ,
{ " /Prepare a Filter/Selected/A_to_B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_as_selected_AtoB_cb ) } ,
{ " /Prepare a Filter/Selected/A_from_B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_as_selected_AfromB_cb ) } ,
{ " /Prepare a Filter/Selected/A_to_from_Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , G_CALLBACK ( conv_prepare_as_selected_AtofromAny_cb ) } ,
{ " /Prepare a Filter/Selected/A_to_Any " , NULL , " A " UTF8_RIGHTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_prepare_as_selected_AtoAny_cb ) } ,
{ " /Prepare a Filter/Selected/A_from_Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_prepare_as_selected_AfromAny_cb ) } ,
{ " /Prepare a Filter/Selected/Any_tofrom_B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_prepare_as_selected_AnytofromB_cb ) } ,
{ " /Prepare a Filter/Selected/Any_to_B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_as_selected_AnytoB_cb ) } ,
{ " /Prepare a Filter/Selected/Any_from_B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_as_selected_AnyfromB_cb ) } ,
/* Prepare a Not Selected */
{ " /Prepare a Filter/Not Selected/A_to_from_B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_prepare_as_not_selected_AtofromB_cb ) } ,
{ " /Prepare a Filter/Not Selected/A_to_B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_as_not_selected_AtoB_cb ) } ,
{ " /Prepare a Filter/Not Selected/A_from_B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_as_not_selected_AfromB_cb ) } ,
{ " /Prepare a Filter/Not Selected/A_to_from_Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , G_CALLBACK ( conv_prepare_as_not_selected_AtofromAny_cb ) } ,
{ " /Prepare a Filter/Not Selected/A_to_Any " , NULL , " A " UTF8_RIGHTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_prepare_as_not_selected_AtoAny_cb ) } ,
{ " /Prepare a Filter/Not Selected/A_from_Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_prepare_as_not_selected_AfromAny_cb ) } ,
{ " /Prepare a Filter/Not Selected/Any_tofrom_B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_prepare_as_not_selected_AnytofromB_cb ) } ,
{ " /Prepare a Filter/Not Selected/Any_to_B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_as_not_selected_AnytoB_cb ) } ,
{ " /Prepare a Filter/Not Selected/Any_from_B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_as_not_selected_AnyfromB_cb ) } ,
/* Prepare a ... and Selected */
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_to_from_B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_prepare_and_selected_AtofromB_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_to_B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_and_selected_AtoB_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_from_B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_and_selected_AfromB_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_to_from_Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , G_CALLBACK ( conv_prepare_and_selected_AtofromAny_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_to_Any " , NULL , " A " UTF8_RIGHTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_prepare_and_selected_AtoAny_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/A_from_Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_prepare_and_selected_AfromAny_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/Any_tofrom_B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_prepare_and_selected_AnytofromB_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/Any_to_B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_and_selected_AnytoB_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected/Any_from_B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_and_selected_AnyfromB_cb ) } ,
/* Prepare a ... or Selected */
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_to_from_B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_prepare_or_selected_AtofromB_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_to_B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_or_selected_AtoB_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_from_B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_or_selected_AfromB_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_to_from_Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , G_CALLBACK ( conv_prepare_or_selected_AtofromAny_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_to_Any " , NULL , " A " UTF8_RIGHTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_prepare_or_selected_AtoAny_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/A_from_Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_prepare_or_selected_AfromAny_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/Any_tofrom_B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_prepare_or_selected_AnytofromB_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/Any_to_B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_or_selected_AnytoB_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected/Any_from_B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_or_selected_AnyfromB_cb ) } ,
/* Prepare a ... and not Selected */
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_to_from_B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_prepare_and_not_selected_AtofromB_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_to_B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_and_not_selected_AtoB_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_from_B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_and_not_selected_AfromB_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_to_from_Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , G_CALLBACK ( conv_prepare_and_not_selected_AtofromAny_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_to_Any " , NULL , " A " UTF8_RIGHTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_prepare_and_not_selected_AtoAny_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/A_from_Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_prepare_and_not_selected_AfromAny_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/Any_tofrom_B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_prepare_and_not_selected_AnytofromB_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/Any_to_B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_and_not_selected_AnytoB_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected/Any_from_B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_and_not_selected_AnyfromB_cb ) } ,
/* Prepare a ... or not Selected */
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_to_from_B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_prepare_or_not_selected_AtofromB_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_to_B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_or_not_selected_AtoB_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_from_B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_or_not_selected_AfromB_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_to_from_Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , G_CALLBACK ( conv_prepare_or_not_selected_AtofromAny_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_to_Any " , NULL , " A " UTF8_RIGHTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_prepare_or_not_selected_AtoAny_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/A_from_Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_prepare_or_not_selected_AfromAny_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/Any_tofrom_B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_prepare_or_not_selected_AnytofromB_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/Any_to_B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_or_not_selected_AnytoB_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected/Any_from_B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_prepare_or_not_selected_AnyfromB_cb ) } ,
/* Find packet*/
{ " /Find Packet/Find Packet " , NULL , " Find Packet " , NULL , NULL , NULL } ,
{ " /Find Packet/Find Next " , NULL , " Find Next " , NULL , NULL , NULL } ,
{ " /Find Packet/Find Previous " , NULL , " Find Previous " , NULL , NULL , NULL } ,
/* Find packet*/
{ " /Find Packet/Find Packet/A_to_from_B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_find_AtofromB_cb ) } ,
{ " /Find Packet/Find Packet/A_to_B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_find_AtoB_cb ) } ,
{ " /Find Packet/Find Packet/A_from_B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_find_AfromB_cb ) } ,
{ " /Find Packet/Find Packet/A_to_from_Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , G_CALLBACK ( conv_find_AtofromAny_cb ) } ,
{ " /Find Packet/Find Packet/A_to_Any " , NULL , " A " UTF8_RIGHTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_find_AtoAny_cb ) } ,
{ " /Find Packet/Find Packet/A_from_Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_find_AfromAny_cb ) } ,
{ " /Find Packet/Find Packet/Any_tofrom_B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_find_AnytofromB_cb ) } ,
{ " /Find Packet/Find Packet/Any_to_B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_find_AnytoB_cb ) } ,
{ " /Find Packet/Find Packet/Any_from_B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_find_AnyfromB_cb ) } ,
/* Find Next*/
{ " /Find Packet/Find Next/A_to_from_B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_find_next_AtofromB_cb ) } ,
{ " /Find Packet/Find Next/A_to_B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_find_next_AtoB_cb ) } ,
{ " /Find Packet/Find Next/A_from_B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_find_next_AfromB_cb ) } ,
{ " /Find Packet/Find Next/A_to_from_Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , G_CALLBACK ( conv_find_next_AtofromAny_cb ) } ,
{ " /Find Packet/Find Next/A_to_Any " , NULL , " A " UTF8_RIGHTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_find_next_AtoAny_cb ) } ,
{ " /Find Packet/Find Next/A_from_Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_find_next_AfromAny_cb ) } ,
{ " /Find Packet/Find Next/Any_tofrom_B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_find_next_AnytofromB_cb ) } ,
{ " /Find Packet/Find Next/Any_to_B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_find_next_AnytoB_cb ) } ,
{ " /Find Packet/Find Next/Any_from_B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_find_next_AnyfromB_cb ) } ,
/* Find packet*/
{ " /Find Packet/Find Previous/A_to_from_B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_find_previous_AtofromB_cb ) } ,
{ " /Find Packet/Find Previous/A_to_B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_find_previous_AtoB_cb ) } ,
{ " /Find Packet/Find Previous/A_from_B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_find_previous_AfromB_cb ) } ,
{ " /Find Packet/Find Previous/A_to_from_Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , G_CALLBACK ( conv_find_previous_AtofromAny_cb ) } ,
{ " /Find Packet/Find Previous/A_to_Any " , NULL , " A " UTF8_RIGHTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_find_previous_AtoAny_cb ) } ,
{ " /Find Packet/Find Previous/A_from_Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_find_previous_AfromAny_cb ) } ,
{ " /Find Packet/Find Previous/Any_tofrom_B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_find_previous_AnytofromB_cb ) } ,
{ " /Find Packet/Find Previous/Any_to_B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_find_previous_AnytoB_cb ) } ,
{ " /Find Packet/Find Previous/Any_from_B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_find_previous_AnyfromB_cb ) } ,
2010-08-19 19:05:11 +00:00
/* Colorize Conversation */
2011-06-23 18:06:13 +00:00
{ " /Colorize Conversation/A_to_from_B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_color_AtofromB_cb ) } ,
{ " /Colorize Conversation/A_to_B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , NULL , " A " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_color_AtoB_cb ) } ,
{ " /Colorize Conversation/A_from_B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , NULL , " A " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_color_AfromB_cb ) } ,
{ " /Colorize Conversation/A_to_from_Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , NULL , " A " UTF8_LEFT_RIGHT_ARROW " Any " , G_CALLBACK ( conv_color_AtofromAny_cb ) } ,
{ " /Colorize Conversation/A_to_Any " , NULL , " A " UTF8_RIGHTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_color_AtoAny_cb ) } ,
{ " /Colorize Conversation/A_from_Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , NULL , " A " UTF8_LEFTWARDS_ARROW " Any " , G_CALLBACK ( conv_color_AfromAny_cb ) } ,
{ " /Colorize Conversation/Any_tofrom_B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , NULL , " Any " UTF8_LEFT_RIGHT_ARROW " B " , G_CALLBACK ( conv_color_AnytofromB_cb ) } ,
{ " /Colorize Conversation/Any_to_B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , NULL , " Any " UTF8_RIGHTWARDS_ARROW " B " , G_CALLBACK ( conv_color_AnytoB_cb ) } ,
{ " /Colorize Conversation/Any_from_B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , NULL , " Any " UTF8_LEFTWARDS_ARROW " B " , G_CALLBACK ( conv_color_AnyfromB_cb ) } ,
2010-08-19 19:05:11 +00:00
} ;
2003-08-27 12:10:21 +00:00
static void
2004-07-20 21:39:54 +00:00
ct_create_popup_menu ( conversations_table * ct )
2003-08-27 12:10:21 +00:00
{
2011-06-23 18:06:13 +00:00
GtkUIManager * ui_manager ;
GtkActionGroup * action_group ;
GError * error = NULL ;
action_group = gtk_action_group_new ( " ConvActionGroup " ) ;
gtk_action_group_add_actions ( action_group , /* the action group */
2013-03-21 02:29:09 +00:00
( GtkActionEntry * ) conv_filter_menu_entries , /* an array of action descriptions */
2011-06-23 18:06:13 +00:00
G_N_ELEMENTS ( conv_filter_menu_entries ) , /* the number of entries */
( gpointer ) ct ) ; /* data to pass to the action callbacks */
ui_manager = gtk_ui_manager_new ( ) ;
gtk_ui_manager_insert_action_group ( ui_manager , action_group , 0 ) ;
gtk_ui_manager_add_ui_from_string ( ui_manager , ui_desc_conv_filter_popup , - 1 , & error ) ;
if ( error ! = NULL )
{
fprintf ( stderr , " Warning: building conversation filter popup failed: %s \n " ,
error - > message ) ;
g_error_free ( error ) ;
error = NULL ;
}
ct - > menu = gtk_ui_manager_get_widget ( ui_manager , " /ConversationFilterPopup " ) ;
g_signal_connect ( ct - > table , " button_press_event " , G_CALLBACK ( ct_show_popup_menu_cb ) , ct ) ;
2010-08-19 19:05:11 +00:00
2003-08-27 12:10:21 +00:00
}
2004-07-27 18:34:02 +00:00
/* Refresh the address fields of all entries in the list */
2004-06-03 21:46:27 +00:00
static void
2004-07-20 21:39:54 +00:00
draw_ct_table_addresses ( conversations_table * ct )
2004-05-03 22:15:22 +00:00
{
2014-04-29 15:10:27 +00:00
guint idx ;
2009-10-06 07:44:48 +00:00
GtkListStore * store ;
2014-04-29 15:10:27 +00:00
GtkTreeIter iter ;
gboolean iter_valid ;
2010-07-23 14:01:47 +00:00
store = GTK_LIST_STORE ( gtk_tree_view_get_model ( ct - > table ) ) ;
2009-10-06 07:44:48 +00:00
g_object_ref ( store ) ;
gtk_tree_view_set_model ( GTK_TREE_VIEW ( ct - > table ) , NULL ) ;
2014-04-29 15:10:27 +00:00
iter_valid = gtk_tree_model_get_iter_first ( GTK_TREE_MODEL ( store ) , & iter ) ;
while ( iter_valid ) {
conv_item_t * conv_item ;
2015-02-13 17:05:26 +00:00
char * src_addr , * dst_addr , * src_port , * dst_port ;
2014-04-29 15:10:27 +00:00
gtk_tree_model_get ( GTK_TREE_MODEL ( store ) , & iter , CONV_INDEX_COLUMN , & idx , - 1 ) ;
conv_item = & g_array_index ( ct - > hash . conv_array , conv_item_t , idx ) ;
2015-01-05 02:40:05 +00:00
src_addr = ( char * ) get_conversation_address ( NULL , & conv_item - > src_address , ct - > resolve_names ) ;
dst_addr = ( char * ) get_conversation_address ( NULL , & conv_item - > dst_address , ct - > resolve_names ) ;
2015-01-07 21:24:17 +00:00
src_port = ( char * ) get_conversation_port ( NULL , conv_item - > src_port , conv_item - > ptype , ct - > resolve_names ) ;
dst_port = ( char * ) get_conversation_port ( NULL , conv_item - > dst_port , conv_item - > ptype , ct - > resolve_names ) ;
2014-04-29 15:10:27 +00:00
gtk_list_store_set ( store , & iter ,
2015-01-05 02:40:05 +00:00
CONV_COLUMN_SRC_ADDR , src_addr ,
2015-01-07 21:24:17 +00:00
CONV_COLUMN_SRC_PORT , src_port ,
2015-01-05 02:40:05 +00:00
CONV_COLUMN_DST_ADDR , dst_addr ,
2015-01-07 21:24:17 +00:00
CONV_COLUMN_DST_PORT , dst_port ,
2009-10-06 07:44:48 +00:00
- 1 ) ;
2014-04-29 15:10:27 +00:00
iter_valid = gtk_tree_model_iter_next ( GTK_TREE_MODEL ( store ) , & iter ) ;
2015-01-05 02:40:05 +00:00
wmem_free ( NULL , src_addr ) ;
wmem_free ( NULL , dst_addr ) ;
2015-01-07 21:24:17 +00:00
wmem_free ( NULL , src_port ) ;
wmem_free ( NULL , dst_port ) ;
2004-06-03 21:46:27 +00:00
}
2010-07-23 14:01:47 +00:00
2009-10-06 07:44:48 +00:00
gtk_tree_view_set_model ( GTK_TREE_VIEW ( ct - > table ) , GTK_TREE_MODEL ( store ) ) ;
g_object_unref ( store ) ;
2004-05-03 22:15:22 +00:00
}
2004-06-03 21:46:27 +00:00
static void
2004-07-20 21:39:54 +00:00
draw_ct_table_data ( conversations_table * ct )
2003-09-04 23:11:03 +00:00
{
2014-04-29 15:10:27 +00:00
guint idx , new_idx ;
2004-06-03 21:46:27 +00:00
char title [ 256 ] ;
2009-10-06 07:44:48 +00:00
GtkListStore * store ;
2014-04-29 15:10:27 +00:00
GtkTreeIter iter , reselect_iter ;
gboolean iter_valid ;
2009-10-06 07:44:48 +00:00
gboolean first = TRUE ;
2004-05-02 17:25:10 +00:00
2004-07-20 21:39:54 +00:00
if ( ct - > page_lb ) {
2014-04-29 15:10:27 +00:00
if ( ct - > hash . conv_array & & ct - > hash . conv_array - > len ) {
g_snprintf ( title , sizeof ( title ) , " %s: %u " , ct - > name , ct - > hash . conv_array - > len ) ;
2004-05-02 17:25:10 +00:00
} else {
2009-03-19 17:44:57 +00:00
g_snprintf ( title , sizeof ( title ) , " %s " , ct - > name ) ;
2004-05-02 17:25:10 +00:00
}
2004-07-20 21:39:54 +00:00
gtk_label_set_text ( GTK_LABEL ( ct - > page_lb ) , title ) ;
2014-04-29 15:10:27 +00:00
gtk_widget_set_sensitive ( ct - > page_lb , ct - > hash . conv_array & & ct - > hash . conv_array - > len ) ;
2008-02-17 00:35:55 +00:00
} else {
2014-04-29 15:10:27 +00:00
if ( ct - > hash . conv_array & & ct - > hash . conv_array - > len ) {
g_snprintf ( title , sizeof ( title ) , " %s Conversations: %u " , ct - > name , ct - > hash . conv_array - > len ) ;
2008-02-17 00:35:55 +00:00
} else {
2009-03-19 17:44:57 +00:00
g_snprintf ( title , sizeof ( title ) , " %s Conversations " , ct - > name ) ;
2008-02-17 00:35:55 +00:00
}
gtk_label_set_text ( GTK_LABEL ( ct - > name_lb ) , title ) ;
2004-05-02 17:25:10 +00:00
}
2010-07-23 14:01:47 +00:00
store = GTK_LIST_STORE ( gtk_tree_view_get_model ( ct - > table ) ) ;
2014-04-29 15:10:27 +00:00
iter_valid = gtk_tree_model_get_iter_first ( GTK_TREE_MODEL ( store ) , & iter ) ;
new_idx = gtk_tree_model_iter_n_children ( GTK_TREE_MODEL ( store ) , NULL ) ;
2003-09-04 23:11:03 +00:00
2014-04-29 15:10:27 +00:00
/* Update list items (which may not be in "idx" order), then add new items */
while ( iter_valid | | ( ct - > hash . conv_array & & new_idx < ct - > hash . conv_array - > len ) ) {
2009-10-06 07:44:48 +00:00
char start_time [ COL_STR_LEN ] , duration [ COL_STR_LEN ] ,
txbps [ COL_STR_LEN ] , rxbps [ COL_STR_LEN ] ;
2012-12-26 05:57:06 +00:00
const char * tx_ptr , * rx_ptr ;
2009-10-06 07:44:48 +00:00
double duration_s ;
2014-04-29 15:10:27 +00:00
conv_item_t * conv_item ;
2014-09-06 08:32:29 +00:00
if ( ! ct - > hash . conv_array ) {
continue ;
}
2014-04-29 15:10:27 +00:00
if ( iter_valid ) {
gtk_tree_model_get ( GTK_TREE_MODEL ( store ) , & iter , CONV_INDEX_COLUMN , & idx , - 1 ) ;
} else {
idx = new_idx ;
new_idx + + ;
}
conv_item = & g_array_index ( ct - > hash . conv_array , conv_item_t , idx ) ;
2003-09-04 23:11:03 +00:00
2014-04-29 15:10:27 +00:00
if ( ! conv_item - > modified ) {
iter_valid = gtk_tree_model_iter_next ( GTK_TREE_MODEL ( store ) , & iter ) ;
2009-10-06 07:44:48 +00:00
continue ;
2014-04-29 15:10:27 +00:00
}
if ( iter_valid & & ( int ) idx = = ct - > reselection_idx ) {
reselect_iter = iter ;
}
2010-07-23 14:01:47 +00:00
2009-10-06 07:44:48 +00:00
if ( first ) {
g_object_ref ( store ) ;
gtk_tree_view_set_model ( GTK_TREE_VIEW ( ct - > table ) , NULL ) ;
2003-09-04 23:11:03 +00:00
2009-10-06 07:44:48 +00:00
first = FALSE ;
}
2014-04-29 15:10:27 +00:00
duration_s = nstime_to_sec ( & conv_item - > stop_time ) - nstime_to_sec ( & conv_item - > start_time ) ;
g_snprintf ( start_time , COL_STR_LEN , " %.9f " , nstime_to_sec ( & conv_item - > start_time ) ) ;
2009-10-06 07:44:48 +00:00
g_snprintf ( duration , COL_STR_LEN , " %.4f " , duration_s ) ;
2003-09-04 23:11:03 +00:00
2014-04-29 15:10:27 +00:00
if ( duration_s > 0 & & conv_item - > tx_frames > 1 ) {
g_snprintf ( txbps , COL_STR_LEN , " %.2f " , ( gint64 ) conv_item - > tx_bytes * 8 / duration_s ) ;
2009-10-06 07:44:48 +00:00
tx_ptr = txbps ;
2007-11-20 18:35:41 +00:00
} else {
2014-04-29 15:10:27 +00:00
tx_ptr = NO_BPS_STR ;
2007-11-20 18:35:41 +00:00
}
2014-04-29 15:10:27 +00:00
if ( duration_s > 0 & & conv_item - > rx_frames > 1 ) {
g_snprintf ( rxbps , COL_STR_LEN , " %.2f " , ( gint64 ) conv_item - > rx_bytes * 8 / duration_s ) ;
2009-10-06 07:44:48 +00:00
rx_ptr = rxbps ;
2007-11-20 18:35:41 +00:00
} else {
2009-10-06 07:44:48 +00:00
rx_ptr = NO_BPS_STR ;
}
2014-04-29 15:10:27 +00:00
conv_item - > modified = FALSE ;
if ( iter_valid ) {
/* Existing row. Only changeable entries */
gtk_list_store_set ( store , & iter ,
CONV_COLUMN_PACKETS , conv_item - > tx_frames + conv_item - > rx_frames ,
CONV_COLUMN_BYTES , conv_item - > tx_bytes + conv_item - > rx_bytes ,
CONV_COLUMN_PKT_AB , conv_item - > tx_frames ,
CONV_COLUMN_BYTES_AB , conv_item - > tx_bytes ,
CONV_COLUMN_PKT_BA , conv_item - > rx_frames ,
CONV_COLUMN_BYTES_BA , conv_item - > rx_bytes ,
CONV_COLUMN_START , start_time ,
CONV_COLUMN_DURATION , duration ,
CONV_COLUMN_BPS_AB , tx_ptr ,
CONV_COLUMN_BPS_BA , rx_ptr ,
2009-10-06 07:44:48 +00:00
- 1 ) ;
2014-04-29 15:10:27 +00:00
} else {
2015-01-07 21:24:17 +00:00
char * src_addr , * dst_addr , * src_port , * dst_port ;
2015-01-05 02:40:05 +00:00
src_addr = ( char * ) get_conversation_address ( NULL , & conv_item - > src_address , ct - > resolve_names ) ;
dst_addr = ( char * ) get_conversation_address ( NULL , & conv_item - > dst_address , ct - > resolve_names ) ;
2015-01-07 21:24:17 +00:00
src_port = ( char * ) get_conversation_port ( NULL , conv_item - > src_port , conv_item - > ptype , ct - > resolve_names ) ;
dst_port = ( char * ) get_conversation_port ( NULL , conv_item - > dst_port , conv_item - > ptype , ct - > resolve_names ) ;
2014-04-29 15:10:27 +00:00
/* New row. All entries, including fixed ones */
gtk_list_store_insert_with_values ( store , & iter , G_MAXINT ,
2015-01-05 02:40:05 +00:00
CONV_COLUMN_SRC_ADDR , src_addr ,
2015-01-07 21:24:17 +00:00
CONV_COLUMN_SRC_PORT , src_port ,
2015-01-05 02:40:05 +00:00
CONV_COLUMN_DST_ADDR , dst_addr ,
2015-01-07 21:24:17 +00:00
CONV_COLUMN_DST_PORT , dst_port ,
2014-04-29 15:10:27 +00:00
CONV_COLUMN_PACKETS , conv_item - > tx_frames + conv_item - > rx_frames ,
CONV_COLUMN_BYTES , conv_item - > tx_bytes + conv_item - > rx_bytes ,
CONV_COLUMN_PKT_AB , conv_item - > tx_frames ,
CONV_COLUMN_BYTES_AB , conv_item - > tx_bytes ,
CONV_COLUMN_PKT_BA , conv_item - > rx_frames ,
CONV_COLUMN_BYTES_BA , conv_item - > rx_bytes ,
CONV_COLUMN_START , start_time ,
CONV_COLUMN_DURATION , duration ,
CONV_COLUMN_BPS_AB , tx_ptr ,
CONV_COLUMN_BPS_BA , rx_ptr ,
CONV_INDEX_COLUMN , idx ,
2009-10-06 07:44:48 +00:00
- 1 ) ;
2015-01-05 02:40:05 +00:00
wmem_free ( NULL , src_addr ) ;
wmem_free ( NULL , dst_addr ) ;
2015-01-07 21:24:17 +00:00
wmem_free ( NULL , src_port ) ;
wmem_free ( NULL , dst_port ) ;
2007-11-20 18:35:41 +00:00
}
2014-04-29 15:10:27 +00:00
iter_valid = gtk_tree_model_iter_next ( GTK_TREE_MODEL ( store ) , & iter ) ;
2004-06-03 21:46:27 +00:00
}
2014-04-29 15:10:27 +00:00
2009-10-06 07:44:48 +00:00
if ( ! first ) {
2014-04-29 15:10:27 +00:00
if ( ! ct - > fixed_col & & ct - > hash . conv_array & & ct - > hash . conv_array - > len > = 1000 ) {
2010-07-23 14:01:47 +00:00
/* finding the right size for a column isn't easy
* let it run in autosize a little ( 1000 is arbitrary )
* and then switch to fixed width .
*/
ct - > fixed_col = TRUE ;
switch_to_fixed_col ( ct - > table ) ;
}
2005-09-16 16:25:53 +00:00
2010-07-23 14:01:47 +00:00
gtk_tree_view_set_model ( GTK_TREE_VIEW ( ct - > table ) , GTK_TREE_MODEL ( store ) ) ;
g_object_unref ( store ) ;
2009-10-06 07:44:48 +00:00
}
2012-11-14 02:53:41 +00:00
/* Restore conversation selection */
2014-04-29 15:10:27 +00:00
if ( ct - > hash . conv_array & & ct - > reselection_idx ! = - 1 ) {
/* XXX This generates Gtk-CRITICAL **: GtkTreePath *gtk_list_store_get_path ... */
gtk_tree_selection_select_iter ( gtk_tree_view_get_selection ( GTK_TREE_VIEW ( ct - > table ) ) ,
& reselect_iter ) ;
2012-11-14 02:53:41 +00:00
}
2003-09-04 23:11:03 +00:00
}
2003-08-27 12:10:21 +00:00
2005-01-01 12:49:54 +00:00
static void
draw_ct_table_data_cb ( void * arg )
{
2014-07-23 17:38:55 +00:00
conv_hash_t * hash = ( conv_hash_t * ) arg ;
draw_ct_table_data ( ( conversations_table * ) hash - > user_data ) ;
2005-01-01 12:49:54 +00:00
}
2003-08-27 12:10:21 +00:00
2009-10-06 07:44:48 +00:00
typedef struct {
2010-07-23 14:01:47 +00:00
int nb_cols ;
2014-04-29 15:10:27 +00:00
gint columns_order [ CONV_NUM_COLUMNS ] ;
2010-07-23 14:01:47 +00:00
GString * CSV_str ;
2009-10-06 07:44:48 +00:00
conversations_table * talkers ;
} csv_t ;
/* output in C locale */
static gboolean
csv_handle ( GtkTreeModel * model , GtkTreePath * path _U_ , GtkTreeIter * iter ,
gpointer data )
{
2010-07-23 14:01:47 +00:00
csv_t * csv = ( csv_t * ) data ;
gchar * table_text ;
int i ;
2013-01-04 05:22:43 +00:00
guint idx ;
2014-04-29 15:10:27 +00:00
conv_item_t * conv ;
2010-07-23 14:01:47 +00:00
double duration_s ;
guint64 value ;
2014-04-29 15:10:27 +00:00
gtk_tree_model_get ( model , iter , CONV_INDEX_COLUMN , & idx , - 1 ) ;
conv = & g_array_index ( csv - > talkers - > hash . conv_array , conv_item_t , idx ) ;
2010-07-23 14:01:47 +00:00
duration_s = nstime_to_sec ( & conv - > stop_time ) - nstime_to_sec ( & conv - > start_time ) ;
for ( i = 0 ; i < csv - > nb_cols ; i + + ) {
if ( i )
g_string_append ( csv - > CSV_str , " , " ) ;
switch ( csv - > columns_order [ i ] ) {
2014-04-29 15:10:27 +00:00
case CONV_COLUMN_SRC_ADDR :
case CONV_COLUMN_SRC_PORT :
case CONV_COLUMN_DST_ADDR :
case CONV_COLUMN_DST_PORT :
2010-07-23 14:01:47 +00:00
gtk_tree_model_get ( model , iter , csv - > columns_order [ i ] , & table_text , - 1 ) ;
if ( table_text ) {
2010-11-17 03:29:12 +00:00
g_string_append_printf ( csv - > CSV_str , " \" %s \" " , table_text ) ;
2010-07-23 14:01:47 +00:00
g_free ( table_text ) ;
}
break ;
2014-04-29 15:10:27 +00:00
case CONV_COLUMN_PACKETS :
case CONV_COLUMN_BYTES :
case CONV_COLUMN_PKT_AB :
case CONV_COLUMN_BYTES_AB :
case CONV_COLUMN_PKT_BA :
case CONV_COLUMN_BYTES_BA :
2010-07-23 14:01:47 +00:00
gtk_tree_model_get ( model , iter , csv - > columns_order [ i ] , & value , - 1 ) ;
2010-11-17 03:29:12 +00:00
g_string_append_printf ( csv - > CSV_str , " \" % " G_GINT64_MODIFIER " u \" " , value ) ;
2010-07-23 14:01:47 +00:00
break ;
2014-04-29 15:10:27 +00:00
case CONV_COLUMN_START :
2011-09-09 02:11:53 +00:00
g_string_append_printf ( csv - > CSV_str , " \" %.9f \" " , nstime_to_sec ( & conv - > start_time ) ) ;
2010-07-23 14:01:47 +00:00
break ;
2014-04-29 15:10:27 +00:00
case CONV_COLUMN_DURATION :
2010-11-17 03:29:12 +00:00
g_string_append_printf ( csv - > CSV_str , " \" %.4f \" " , duration_s ) ;
2010-07-23 14:01:47 +00:00
break ;
2014-04-29 15:10:27 +00:00
case CONV_COLUMN_BPS_AB :
2010-07-23 14:01:47 +00:00
if ( duration_s > 0 & & conv - > tx_frames > 1 ) {
2010-11-17 03:29:12 +00:00
g_string_append_printf ( csv - > CSV_str , " \" %.2f \" " , ( gint64 ) conv - > tx_bytes * 8 / duration_s ) ;
2010-07-23 14:01:47 +00:00
} else {
2010-11-17 03:29:12 +00:00
g_string_append ( csv - > CSV_str , " \" " NO_BPS_STR " \" " ) ;
2010-07-23 14:01:47 +00:00
}
break ;
2014-04-29 15:10:27 +00:00
case CONV_COLUMN_BPS_BA :
2010-07-23 14:01:47 +00:00
if ( duration_s > 0 & & conv - > rx_frames > 1 ) {
2010-11-17 03:29:12 +00:00
g_string_append_printf ( csv - > CSV_str , " \" %.2f \" " , ( gint64 ) conv - > rx_bytes * 8 / duration_s ) ;
2010-07-23 14:01:47 +00:00
} else {
2010-11-17 03:29:12 +00:00
g_string_append ( csv - > CSV_str , " \" " NO_BPS_STR " \" " ) ;
2009-10-06 07:44:48 +00:00
}
2010-07-23 14:01:47 +00:00
break ;
default :
break ;
}
}
g_string_append ( csv - > CSV_str , " \n " ) ;
2009-10-06 07:44:48 +00:00
2010-07-23 14:01:47 +00:00
return FALSE ;
2009-10-06 07:44:48 +00:00
}
2004-07-22 16:36:50 +00:00
static void
2007-11-20 18:35:41 +00:00
copy_as_csv_cb ( GtkWindow * copy_bt , gpointer data _U_ )
2004-07-22 16:36:50 +00:00
{
2010-07-23 14:01:47 +00:00
GtkClipboard * cb ;
GList * columns , * list ;
2009-10-06 07:44:48 +00:00
GtkTreeViewColumn * column ;
2010-07-23 14:01:47 +00:00
GtkListStore * store ;
csv_t csv ;
2009-10-06 07:44:48 +00:00
2013-03-08 06:07:26 +00:00
csv . talkers = ( conversations_table * ) g_object_get_data ( G_OBJECT ( copy_bt ) , CONV_PTR_KEY ) ;
2009-10-06 07:44:48 +00:00
if ( ! csv . talkers )
2009-03-19 17:44:57 +00:00
return ;
2009-10-06 07:44:48 +00:00
csv . CSV_str = g_string_new ( " " ) ;
columns = gtk_tree_view_get_columns ( GTK_TREE_VIEW ( csv . talkers - > table ) ) ;
csv . nb_cols = 0 ;
2009-10-09 09:06:22 +00:00
list = columns ;
2009-10-06 07:44:48 +00:00
while ( columns ) {
2013-03-08 06:07:26 +00:00
column = ( GtkTreeViewColumn * ) columns - > data ;
2009-10-06 07:44:48 +00:00
if ( gtk_tree_view_column_get_visible ( column ) ) {
csv . columns_order [ csv . nb_cols ] = gtk_tree_view_column_get_sort_column_id ( column ) ;
if ( csv . nb_cols )
g_string_append ( csv . CSV_str , " , " ) ;
2010-11-17 03:29:12 +00:00
g_string_append_printf ( csv . CSV_str , " \" %s \" " , gtk_tree_view_column_get_title ( column ) ) ;
2009-10-06 07:44:48 +00:00
csv . nb_cols + + ;
2009-03-19 17:44:57 +00:00
}
2009-10-06 07:44:48 +00:00
columns = g_list_next ( columns ) ;
2005-09-16 16:25:53 +00:00
}
2009-10-09 09:06:22 +00:00
g_list_free ( list ) ;
2009-10-06 07:44:48 +00:00
g_string_append ( csv . CSV_str , " \n " ) ;
store = GTK_LIST_STORE ( gtk_tree_view_get_model ( GTK_TREE_VIEW ( csv . talkers - > table ) ) ) ;
gtk_tree_model_foreach ( GTK_TREE_MODEL ( store ) , csv_handle , & csv ) ;
2004-07-22 16:36:50 +00:00
2009-03-19 17:44:57 +00:00
/* Now that we have the CSV data, copy it into the default clipboard */
cb = gtk_clipboard_get ( GDK_SELECTION_CLIPBOARD ) ; /* Get the default clipboard */
2009-10-06 07:44:48 +00:00
gtk_clipboard_set_text ( cb , csv . CSV_str - > str , - 1 ) ; /* Copy the CSV data into the clipboard */
g_string_free ( csv . CSV_str , TRUE ) ; /* Free the memory */
}
2014-04-29 15:10:27 +00:00
static gint default_col_size [ CONV_NUM_COLUMNS ] ;
2009-10-06 07:44:48 +00:00
static void
init_default_col_size ( GtkWidget * view )
{
2014-04-29 15:10:27 +00:00
default_col_size [ CONV_COLUMN_SRC_ADDR ] = get_default_col_size ( view , " 00000000.000000000000 " ) ;
default_col_size [ CONV_COLUMN_DST_ADDR ] = default_col_size [ CONV_COLUMN_SRC_ADDR ] ;
default_col_size [ CONV_COLUMN_SRC_PORT ] = get_default_col_size ( view , " 000000 " ) ;
default_col_size [ CONV_COLUMN_DST_PORT ] = default_col_size [ CONV_COLUMN_SRC_PORT ] ;
default_col_size [ CONV_COLUMN_PACKETS ] = get_default_col_size ( view , " 00 000 000 " ) ;
default_col_size [ CONV_COLUMN_BYTES ] = get_default_col_size ( view , " 0 000 000 000 " ) ;
default_col_size [ CONV_COLUMN_PKT_AB ] = default_col_size [ CONV_COLUMN_PACKETS ] ;
default_col_size [ CONV_COLUMN_PKT_BA ] = default_col_size [ CONV_COLUMN_PACKETS ] ;
default_col_size [ CONV_COLUMN_BYTES_AB ] = default_col_size [ CONV_COLUMN_BYTES ] ;
default_col_size [ CONV_COLUMN_BYTES_BA ] = default_col_size [ CONV_COLUMN_BYTES ] ;
default_col_size [ CONV_COLUMN_START ] = get_default_col_size ( view , " 000000.000000000 " ) ;
default_col_size [ CONV_COLUMN_DURATION ] = get_default_col_size ( view , " 000000.0000 " ) ;
default_col_size [ CONV_COLUMN_BPS_AB ] = get_default_col_size ( view , " 000000000.00 " ) ;
default_col_size [ CONV_COLUMN_BPS_BA ] = default_col_size [ CONV_COLUMN_BPS_AB ] ;
2009-10-06 07:44:48 +00:00
}
2004-07-22 16:36:50 +00:00
2005-01-01 12:49:54 +00:00
static gboolean
2010-07-23 14:01:47 +00:00
init_ct_table_page ( conversations_table * conversations , GtkWidget * vbox , gboolean hide_ports , const char * table_name , const char * tap_name , const char * filter ,
2009-10-06 07:44:48 +00:00
tap_packet_cb packet_func )
2003-08-23 09:09:35 +00:00
{
2004-06-03 21:46:27 +00:00
int i ;
GString * error_string ;
char title [ 256 ] ;
2003-08-23 09:09:35 +00:00
2009-10-06 07:44:48 +00:00
GtkListStore * store ;
GtkWidget * tree ;
GtkTreeViewColumn * column ;
GtkCellRenderer * renderer ;
GtkTreeSortable * sortable ;
GtkTreeSelection * sel ;
static gboolean col_size = FALSE ;
2004-07-22 16:36:50 +00:00
conversations - > page_lb = NULL ;
conversations - > resolve_names = TRUE ;
2005-09-16 16:25:53 +00:00
conversations - > has_ports = ! hide_ports ;
2009-10-06 07:44:48 +00:00
conversations - > fixed_col = FALSE ;
2014-04-29 15:10:27 +00:00
for ( i = 0 ; i < CONV_NUM_COLUMNS ; i + + ) {
2014-08-06 17:07:42 +00:00
conversations - > default_titles [ i ] = conv_column_titles [ i ] ;
2014-04-29 15:10:27 +00:00
}
2009-10-06 07:44:48 +00:00
2006-03-02 20:50:33 +00:00
if ( strcmp ( table_name , " NCP " ) = = 0 ) {
2014-08-06 17:07:42 +00:00
conversations - > default_titles [ CONV_COLUMN_SRC_PORT ] = conv_conn_a_title ;
conversations - > default_titles [ CONV_COLUMN_DST_PORT ] = conv_conn_b_title ;
2006-03-02 20:50:33 +00:00
}
2004-07-22 16:36:50 +00:00
2009-03-19 17:44:57 +00:00
g_snprintf ( title , sizeof ( title ) , " %s Conversations " , table_name ) ;
2008-02-17 00:35:55 +00:00
conversations - > name_lb = gtk_label_new ( title ) ;
2003-09-04 23:11:03 +00:00
2010-07-23 14:01:47 +00:00
2009-10-06 07:44:48 +00:00
/* Create the store */
2014-04-29 15:10:27 +00:00
store = gtk_list_store_new ( CONV_NUM_COLUMNS + 1 , /* Total number of columns */
2010-07-23 14:01:47 +00:00
G_TYPE_STRING , /* Address A */
G_TYPE_STRING , /* Port A */
G_TYPE_STRING , /* Address B */
G_TYPE_STRING , /* Port B */
G_TYPE_UINT64 , /* Packets */
G_TYPE_UINT64 , /* Bytes */
G_TYPE_UINT64 , /* Packets A->B */
G_TYPE_UINT64 , /* Bytes A->B */
G_TYPE_UINT64 , /* Packets A<-B */
G_TYPE_UINT64 , /* Bytes A<-B */
G_TYPE_STRING , /* Start */
G_TYPE_STRING , /* Duration */
G_TYPE_STRING , /* bps A->B */
G_TYPE_STRING , /* bps A<-B */
G_TYPE_UINT ) ; /* Index */
2009-10-06 07:44:48 +00:00
gtk_box_pack_start ( GTK_BOX ( vbox ) , conversations - > name_lb , FALSE , FALSE , 0 ) ;
2003-08-23 09:09:35 +00:00
2004-07-20 20:56:53 +00:00
conversations - > scrolled_window = scrolled_window_new ( NULL , NULL ) ;
gtk_box_pack_start ( GTK_BOX ( vbox ) , conversations - > scrolled_window , TRUE , TRUE , 0 ) ;
2003-09-04 23:11:03 +00:00
2009-10-06 07:44:48 +00:00
tree = gtk_tree_view_new_with_model ( GTK_TREE_MODEL ( store ) ) ;
conversations - > table = GTK_TREE_VIEW ( tree ) ;
sortable = GTK_TREE_SORTABLE ( store ) ;
2003-09-04 23:11:03 +00:00
2009-10-06 07:44:48 +00:00
if ( ! col_size ) {
col_size = TRUE ;
init_default_col_size ( GTK_WIDGET ( conversations - > table ) ) ;
2004-06-03 21:46:27 +00:00
}
2003-08-23 09:09:35 +00:00
2009-10-06 07:44:48 +00:00
/* The view now holds a reference. We can get rid of our own reference */
g_object_unref ( G_OBJECT ( store ) ) ;
2003-08-23 09:09:35 +00:00
2009-10-06 07:44:48 +00:00
g_object_set_data ( G_OBJECT ( store ) , CONV_PTR_KEY , conversations ) ;
g_object_set_data ( G_OBJECT ( conversations - > table ) , CONV_PTR_KEY , conversations ) ;
2003-08-23 09:09:35 +00:00
2014-04-29 15:10:27 +00:00
for ( i = 0 ; i < CONV_NUM_COLUMNS ; i + + ) {
2009-10-06 07:44:48 +00:00
renderer = gtk_cell_renderer_text_new ( ) ;
g_object_set ( renderer , " ypad " , 0 , NULL ) ;
2009-10-09 08:52:36 +00:00
switch ( i ) {
2014-04-29 15:10:27 +00:00
case CONV_COLUMN_SRC_ADDR : /* addresses and ports */
case CONV_COLUMN_SRC_PORT :
case CONV_COLUMN_DST_ADDR :
case CONV_COLUMN_DST_PORT :
2010-07-23 14:01:47 +00:00
column = gtk_tree_view_column_new_with_attributes ( conversations - > default_titles [ i ] , renderer , " text " ,
i , NULL ) ;
2009-10-06 07:44:48 +00:00
if ( hide_ports & & ( i = = 1 | | i = = 3 ) ) {
/* hide srcport and dstport if we don't use ports */
gtk_tree_view_column_set_visible ( column , FALSE ) ;
}
gtk_tree_sortable_set_sort_func ( sortable , i , ct_sort_func , GINT_TO_POINTER ( i ) , NULL ) ;
2009-10-09 08:52:36 +00:00
break ;
2014-04-29 15:10:27 +00:00
case CONV_COLUMN_PACKETS : /* counts */
case CONV_COLUMN_BYTES :
case CONV_COLUMN_PKT_AB :
case CONV_COLUMN_BYTES_AB :
case CONV_COLUMN_PKT_BA :
case CONV_COLUMN_BYTES_BA :
2009-10-09 08:52:36 +00:00
g_object_set ( G_OBJECT ( renderer ) , " xalign " , 1.0 , NULL ) ;
column = gtk_tree_view_column_new_with_attributes ( conversations - > default_titles [ i ] , renderer , NULL ) ;
gtk_tree_view_column_set_cell_data_func ( column , renderer , u64_data_func , GINT_TO_POINTER ( i ) , NULL ) ;
break ;
default : /* times and bps */
g_object_set ( G_OBJECT ( renderer ) , " xalign " , 1.0 , NULL ) ;
2010-07-23 14:01:47 +00:00
column = gtk_tree_view_column_new_with_attributes ( conversations - > default_titles [ i ] , renderer , " text " ,
i , NULL ) ;
2009-10-09 08:52:36 +00:00
gtk_tree_sortable_set_sort_func ( sortable , i , ct_sort_func , GINT_TO_POINTER ( i ) , NULL ) ;
break ;
2009-10-06 07:44:48 +00:00
}
gtk_tree_view_column_set_sort_column_id ( column , i ) ;
gtk_tree_view_column_set_resizable ( column , TRUE ) ;
gtk_tree_view_column_set_reorderable ( column , TRUE ) ;
gtk_tree_view_column_set_min_width ( column , 40 ) ;
gtk_tree_view_column_set_fixed_width ( column , default_col_size [ i ] ) ;
gtk_tree_view_append_column ( conversations - > table , column ) ;
#if 0
/* for capture with ten thousands conversations it's too slow */
if ( i = = PACKETS_COLUMN ) {
gtk_tree_view_column_clicked ( column ) ;
2010-07-23 14:01:47 +00:00
gtk_tree_view_column_clicked ( column ) ;
2009-10-06 07:44:48 +00:00
}
# endif
2007-11-20 18:35:41 +00:00
}
2004-07-20 20:56:53 +00:00
gtk_container_add ( GTK_CONTAINER ( conversations - > scrolled_window ) , ( GtkWidget * ) conversations - > table ) ;
2009-10-06 07:44:48 +00:00
gtk_tree_view_set_rules_hint ( conversations - > table , TRUE ) ;
gtk_tree_view_set_headers_clickable ( conversations - > table , TRUE ) ;
gtk_tree_view_set_reorderable ( conversations - > table , TRUE ) ;
2003-08-23 09:09:35 +00:00
2014-07-23 17:38:55 +00:00
conversations - > hash . conv_array = NULL ;
conversations - > hash . hashtable = NULL ;
conversations - > hash . user_data = conversations ;
2003-08-23 09:09:35 +00:00
2009-10-06 07:44:48 +00:00
sel = gtk_tree_view_get_selection ( GTK_TREE_VIEW ( conversations - > table ) ) ;
gtk_tree_selection_set_mode ( sel , GTK_SELECTION_SINGLE ) ;
2003-08-27 12:10:21 +00:00
2004-06-03 21:46:27 +00:00
/* create popup menu for this table */
2004-07-20 20:56:53 +00:00
ct_create_popup_menu ( conversations ) ;
2003-09-04 23:11:03 +00:00
2004-06-03 21:46:27 +00:00
/* register the tap and rerun the taps on the packet list */
2014-07-23 17:38:55 +00:00
error_string = register_tap_listener ( tap_name , & conversations - > hash , filter , 0 , reset_ct_table_data_cb , packet_func ,
2009-10-06 07:44:48 +00:00
draw_ct_table_data_cb ) ;
2004-06-03 21:46:27 +00:00
if ( error_string ) {
2008-10-31 09:53:56 +00:00
simple_dialog ( ESD_TYPE_ERROR , ESD_BTN_OK , " %s " , error_string - > str ) ;
2004-06-03 21:46:27 +00:00
g_string_free ( error_string , TRUE ) ;
return FALSE ;
}
2003-09-04 23:11:03 +00:00
2004-05-02 17:25:10 +00:00
return TRUE ;
}
2012-11-11 18:32:47 +00:00
static void
graph_cb ( GtkWidget * follow_stream_bt , gboolean reverse_direction )
{
2013-03-08 06:07:26 +00:00
conversations_table * ct = ( conversations_table * ) g_object_get_data ( G_OBJECT ( follow_stream_bt ) , CONV_PTR_KEY ) ;
2012-11-11 18:32:47 +00:00
GtkTreeIter iter ;
GtkTreeModel * model ;
GtkTreeSelection * sel ;
guint32 idx = 0 ;
2014-04-29 15:10:27 +00:00
conv_item_t * conv ;
2012-11-11 18:32:47 +00:00
2014-04-29 15:10:27 +00:00
if ( ! ct | | ! ct - > hash . conv_array )
2012-11-11 18:32:47 +00:00
return ;
/* Check for a current selection and that index has associated data */
sel = gtk_tree_view_get_selection ( GTK_TREE_VIEW ( ct - > table ) ) ;
if ( ! gtk_tree_selection_get_selected ( sel , & model , & iter ) ) {
simple_dialog ( ESD_TYPE_ERROR , ESD_BTN_OK , " No conversation selected " ) ;
return ;
}
2014-04-29 15:10:27 +00:00
gtk_tree_model_get ( model , & iter , CONV_INDEX_COLUMN , & idx , - 1 ) ;
if ( idx > = ct - > hash . conv_array - > len ) {
2012-11-11 18:32:47 +00:00
simple_dialog ( ESD_TYPE_ERROR , ESD_BTN_OK , " No conversation selected " ) ;
return ;
}
/* Look up the conversation for this index */
2014-04-29 15:10:27 +00:00
conv = & g_array_index ( ct - > hash . conv_array , conv_item_t , idx ) ;
2012-11-11 18:32:47 +00:00
if ( strcmp ( ct - > name , " TCP " ) = = 0 ) {
/* Invoke the graph */
if ( ! reverse_direction ) {
tcp_graph_known_stream_launch ( & conv - > src_address , conv - > src_port ,
2013-12-05 14:45:03 +00:00
& conv - > dst_address , conv - > dst_port ,
conv - > conv_id ) ;
2012-11-11 18:32:47 +00:00
}
else {
tcp_graph_known_stream_launch ( & conv - > dst_address , conv - > dst_port ,
2013-12-05 14:45:03 +00:00
& conv - > src_address , conv - > src_port ,
conv - > conv_id ) ;
2012-11-11 18:32:47 +00:00
}
}
else {
simple_dialog ( ESD_TYPE_ERROR , ESD_BTN_OK , " Unknown stream: %s " , ct - > name ) ;
}
2012-11-14 02:53:41 +00:00
/* Remember index of selected conversation you can try to restore after next redrawing */
ct - > reselection_idx = idx ;
2012-11-11 18:32:47 +00:00
}
2010-06-23 19:49:33 +00:00
static void
follow_stream_cb ( GtkWidget * follow_stream_bt , gpointer data _U_ )
{
2013-03-08 06:07:26 +00:00
conversations_table * ct = ( conversations_table * ) g_object_get_data ( G_OBJECT ( follow_stream_bt ) , CONV_PTR_KEY ) ;
2010-06-23 19:49:33 +00:00
GtkTreeIter iter ;
GtkTreeModel * model ;
GtkTreeSelection * sel ;
guint32 idx = 0 ;
2012-05-23 06:36:47 +00:00
gchar * filter = NULL ;
2014-04-29 15:10:27 +00:00
conv_item_t * conv ;
2010-06-23 19:49:33 +00:00
2014-04-29 15:10:27 +00:00
if ( ! ct | | ! ct - > hash . conv_array )
2011-08-23 01:54:13 +00:00
return ;
2010-06-23 19:49:33 +00:00
sel = gtk_tree_view_get_selection ( GTK_TREE_VIEW ( ct - > table ) ) ;
if ( ! gtk_tree_selection_get_selected ( sel , & model , & iter ) ) {
simple_dialog ( ESD_TYPE_ERROR , ESD_BTN_OK , " No conversation selected " ) ;
return ;
}
2014-04-29 15:10:27 +00:00
gtk_tree_model_get ( model , & iter , CONV_INDEX_COLUMN , & idx , - 1 ) ;
if ( idx > = ct - > hash . conv_array - > len ) {
2010-06-23 19:49:33 +00:00
simple_dialog ( ESD_TYPE_ERROR , ESD_BTN_OK , " No conversation selected " ) ;
return ;
}
2014-04-29 15:10:27 +00:00
conv = & g_array_index ( ct - > hash . conv_array , conv_item_t , idx ) ;
2012-05-23 06:36:47 +00:00
2014-12-26 22:21:35 +00:00
/* Generate and apply a display filter to isolate the conversation.
2012-05-23 06:36:47 +00:00
*/
2014-04-29 15:10:27 +00:00
switch ( conv - > ptype ) {
case PT_TCP :
2012-05-23 06:36:47 +00:00
filter = g_strdup_printf ( " tcp.stream eq %d " , conv - > conv_id ) ;
2014-04-29 15:10:27 +00:00
break ;
case PT_UDP :
filter = g_strdup_printf ( " udp.stream eq %d " , conv - > conv_id ) ;
break ;
default :
filter = g_strdup ( " INVALID " ) ;
2012-05-23 06:36:47 +00:00
}
2014-04-29 15:10:27 +00:00
2012-05-23 06:36:47 +00:00
apply_selected_filter ( ACTYPE_SELECTED | ACTION_MATCH , filter ) ;
g_free ( filter ) ;
filter = NULL ;
/* For TCP or UDP conversations, take things one step further and present
* the Follow Stream dialog . Other conversation types ? Not so much .
*/
2010-07-23 14:01:47 +00:00
if ( strcmp ( ct - > name , " TCP " ) = = 0 )
2012-05-23 06:36:47 +00:00
follow_tcp_stream_cb ( follow_stream_bt , data ) ;
2010-07-23 14:01:47 +00:00
else if ( strcmp ( ct - > name , " UDP " ) = = 0 )
2012-05-23 06:36:47 +00:00
follow_udp_stream_cb ( follow_stream_bt , data ) ;
2010-07-23 14:01:47 +00:00
else
2010-06-23 19:49:33 +00:00
simple_dialog ( ESD_TYPE_ERROR , ESD_BTN_OK , " Unknown stream: %s " , ct - > name ) ;
2012-11-14 02:53:41 +00:00
/* Remember index of selected conversation you can try to restore after next redrawing */
ct - > reselection_idx = idx ;
2010-06-23 19:49:33 +00:00
}
2004-05-02 17:25:10 +00:00
void
2014-07-23 17:38:55 +00:00
init_conversation_table ( struct register_ct * ct , const char * filter )
2004-05-02 17:25:10 +00:00
{
2004-07-20 20:56:53 +00:00
conversations_table * conversations ;
2012-06-03 22:03:05 +00:00
char * display_name ;
2004-06-03 21:46:27 +00:00
char title [ 256 ] ;
2014-07-23 17:38:55 +00:00
const char * table_name = proto_get_protocol_short_name ( find_protocol_by_id ( get_conversation_proto_id ( ct ) ) ) ;
2004-05-02 17:25:10 +00:00
GtkWidget * vbox ;
GtkWidget * bbox ;
2005-01-20 23:17:23 +00:00
GtkWidget * close_bt , * help_bt ;
2004-05-02 17:25:10 +00:00
gboolean ret ;
2010-06-23 19:49:33 +00:00
GtkWidget * copy_bt , * follow_stream_bt ;
2012-11-11 19:16:06 +00:00
GtkWidget * graph_a_b_bt ;
GtkWidget * graph_b_a_bt ;
2010-06-23 19:49:33 +00:00
gboolean add_follow_stream_button = FALSE ;
2012-11-11 18:32:47 +00:00
gboolean add_graph_buttons = FALSE ;
2013-03-21 18:39:16 +00:00
window_geometry_t tl_geom ;
2004-06-03 21:46:27 +00:00
2013-03-08 06:07:26 +00:00
conversations = g_new0 ( conversations_table , 1 ) ;
2004-05-02 17:25:10 +00:00
2004-07-20 20:56:53 +00:00
conversations - > name = table_name ;
2008-02-17 00:35:55 +00:00
conversations - > filter = filter ;
conversations - > use_dfilter = FALSE ;
2012-06-03 22:03:05 +00:00
display_name = cf_get_display_name ( & cfile ) ;
g_snprintf ( title , sizeof ( title ) , " %s Conversations: %s " , table_name , display_name ) ;
g_free ( display_name ) ;
2010-07-23 14:01:47 +00:00
conversations - > win = dlg_window_new ( title ) ; /* transient_for top_level */
gtk_window_set_destroy_with_parent ( GTK_WINDOW ( conversations - > win ) , TRUE ) ;
2004-07-22 16:36:50 +00:00
2013-03-21 18:39:16 +00:00
window_get_geometry ( top_level , & tl_geom ) ;
gtk_window_set_default_size ( GTK_WINDOW ( conversations - > win ) , tl_geom . width * 8 / 10 , CONV_DLG_HEIGHT ) ;
2004-05-02 17:25:10 +00:00
2013-03-21 18:39:16 +00:00
vbox = ws_gtk_box_new ( GTK_ORIENTATION_VERTICAL , DLG_LABEL_SPACING , FALSE ) ;
2004-07-20 20:56:53 +00:00
gtk_container_add ( GTK_CONTAINER ( conversations - > win ) , vbox ) ;
2013-03-21 18:39:16 +00:00
gtk_container_set_border_width ( GTK_CONTAINER ( vbox ) , DLG_OUTER_MARGIN ) ;
2004-05-02 17:25:10 +00:00
2014-04-29 15:10:27 +00:00
ret = init_ct_table_page ( conversations , vbox ,
2014-07-23 17:38:55 +00:00
get_conversation_hide_ports ( ct ) ,
table_name , proto_get_protocol_filter_name ( get_conversation_proto_id ( ct ) ) ,
filter , get_conversation_packet_func ( ct ) ) ;
2004-05-02 17:25:10 +00:00
if ( ret = = FALSE ) {
2004-07-20 20:56:53 +00:00
g_free ( conversations ) ;
2004-05-02 17:25:10 +00:00
return ;
}
2012-11-11 19:16:06 +00:00
/* Button row. */
/* XXX - maybe we want to have a "Copy as CSV" stock button here? */
/*copy_bt = gtk_button_new_with_label ("Copy content to clipboard as CSV");*/
2012-11-11 18:32:47 +00:00
if ( strcmp ( table_name , " TCP " ) = = 0 ) {
add_graph_buttons = TRUE ;
2012-11-11 19:16:06 +00:00
add_follow_stream_button = TRUE ;
bbox = dlg_button_row_new (
GTK_STOCK_CLOSE ,
GTK_STOCK_COPY ,
WIRESHARK_STOCK_FOLLOW_STREAM ,
WIRESHARK_STOCK_GRAPH_A_B ,
WIRESHARK_STOCK_GRAPH_B_A ,
GTK_STOCK_HELP , NULL ) ;
}
else if ( strcmp ( table_name , " UDP " ) = = 0 ) {
add_follow_stream_button = TRUE ;
bbox = dlg_button_row_new (
GTK_STOCK_CLOSE ,
GTK_STOCK_COPY ,
WIRESHARK_STOCK_FOLLOW_STREAM ,
GTK_STOCK_HELP , NULL ) ;
}
else {
bbox = dlg_button_row_new (
GTK_STOCK_CLOSE ,
GTK_STOCK_COPY ,
GTK_STOCK_HELP , NULL ) ;
2012-11-11 18:32:47 +00:00
}
2010-06-23 19:49:33 +00:00
2004-06-03 21:46:27 +00:00
gtk_box_pack_end ( GTK_BOX ( vbox ) , bbox , FALSE , FALSE , 0 ) ;
2004-04-12 07:10:11 +00:00
2013-03-08 06:07:26 +00:00
close_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( bbox ) , GTK_STOCK_CLOSE ) ;
2004-07-20 20:56:53 +00:00
window_set_cancel_button ( conversations - > win , close_bt , window_cancel_button_cb ) ;
2004-04-12 07:10:11 +00:00
2013-03-08 06:07:26 +00:00
copy_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( bbox ) , GTK_STOCK_COPY ) ;
2011-06-20 10:33:35 +00:00
gtk_widget_set_tooltip_text ( copy_bt , " Copy all statistical values of this page to the clipboard in CSV (Comma Separated Values) format. " ) ;
2008-04-11 16:26:32 +00:00
g_object_set_data ( G_OBJECT ( copy_bt ) , CONV_PTR_KEY , conversations ) ;
2008-04-11 21:20:51 +00:00
g_signal_connect ( copy_bt , " clicked " , G_CALLBACK ( copy_as_csv_cb ) , NULL ) ;
2007-11-20 18:35:41 +00:00
2010-06-23 19:49:33 +00:00
if ( add_follow_stream_button ) {
2013-03-08 06:07:26 +00:00
follow_stream_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( bbox ) , WIRESHARK_STOCK_FOLLOW_STREAM ) ;
2010-06-23 19:49:33 +00:00
g_object_set_data ( G_OBJECT ( follow_stream_bt ) , E_DFILTER_TE_KEY , main_display_filter_widget ) ;
g_object_set_data ( G_OBJECT ( follow_stream_bt ) , CONV_PTR_KEY , conversations ) ;
g_signal_connect ( follow_stream_bt , " clicked " , G_CALLBACK ( follow_stream_cb ) , NULL ) ;
}
2012-11-11 19:16:06 +00:00
if ( add_graph_buttons ) {
/* Graph A->B */
2013-03-08 06:07:26 +00:00
graph_a_b_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( bbox ) , WIRESHARK_STOCK_GRAPH_A_B ) ;
2013-03-21 18:39:16 +00:00
gtk_widget_set_tooltip_text ( graph_a_b_bt , " Graph traffic from address A to address B. " ) ;
2012-11-11 19:16:06 +00:00
g_object_set_data ( G_OBJECT ( graph_a_b_bt ) , E_DFILTER_TE_KEY , main_display_filter_widget ) ;
g_object_set_data ( G_OBJECT ( graph_a_b_bt ) , CONV_PTR_KEY , conversations ) ;
g_signal_connect ( graph_a_b_bt , " clicked " , G_CALLBACK ( graph_cb ) , ( gpointer ) FALSE ) ;
2013-06-16 02:35:51 +00:00
/* Graph A<-B */
2013-03-08 06:07:26 +00:00
graph_b_a_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( bbox ) , WIRESHARK_STOCK_GRAPH_B_A ) ;
2013-03-21 18:39:16 +00:00
gtk_widget_set_tooltip_text ( graph_b_a_bt , " Graph traffic from address B to address A. " ) ;
2012-11-11 19:16:06 +00:00
g_object_set_data ( G_OBJECT ( graph_b_a_bt ) , E_DFILTER_TE_KEY , main_display_filter_widget ) ;
g_object_set_data ( G_OBJECT ( graph_b_a_bt ) , CONV_PTR_KEY , conversations ) ;
g_signal_connect ( graph_b_a_bt , " clicked " , G_CALLBACK ( graph_cb ) , ( gpointer ) TRUE ) ;
}
2013-03-08 06:07:26 +00:00
help_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( bbox ) , GTK_STOCK_HELP ) ;
2008-06-21 13:36:31 +00:00
g_signal_connect ( help_bt , " clicked " , G_CALLBACK ( topic_cb ) , ( gpointer ) HELP_STATS_CONVERSATIONS_DIALOG ) ;
2005-01-20 23:17:23 +00:00
2008-04-11 21:20:51 +00:00
g_signal_connect ( conversations - > win , " delete_event " , G_CALLBACK ( window_delete_event_cb ) , NULL ) ;
g_signal_connect ( conversations - > win , " destroy " , G_CALLBACK ( ct_win_destroy_cb ) , conversations ) ;
2004-04-12 07:10:11 +00:00
2012-11-14 02:53:41 +00:00
/* Initially there is no conversation selection to reselect */
conversations - > reselection_idx = - 1 ;
2004-07-20 20:56:53 +00:00
gtk_widget_show_all ( conversations - > win ) ;
window_present ( conversations - > win ) ;
2004-05-23 23:24:07 +00:00
2009-06-05 22:42:47 +00:00
cf_retap_packets ( & cfile ) ;
2011-02-07 18:41:38 +00:00
gdk_window_raise ( gtk_widget_get_window ( conversations - > win ) ) ;
2004-05-02 17:25:10 +00:00
}
2007-11-20 18:35:41 +00:00
static void
2011-07-13 22:32:05 +00:00
ct_nb_switch_page_cb ( GtkNotebook * nb , gpointer * pg _U_ , guint page , gpointer data )
2007-11-20 18:35:41 +00:00
{
2012-05-19 16:55:22 +00:00
GtkWidget * copy_bt = ( GtkWidget * ) data ;
2013-03-08 06:07:26 +00:00
GtkWidget * graph_a_b_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( nb ) , GRAPH_A_B_BT_KEY ) ;
GtkWidget * graph_b_a_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( nb ) , GRAPH_B_A_BT_KEY ) ;
GtkWidget * follow_stream_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( nb ) , FOLLOW_STREAM_BT_KEY ) ;
void * * pages = ( void * * ) g_object_get_data ( G_OBJECT ( nb ) , NB_PAGES_KEY ) ;
2007-11-20 18:35:41 +00:00
page + + ;
2012-05-19 16:55:22 +00:00
/* XXX: is the 'if' test really needed ?? */
if ( pages & & ( page > 0 ) & & ( ( int ) page < = GPOINTER_TO_INT ( pages [ 0 ] ) ) ) {
2008-04-11 16:26:32 +00:00
g_object_set_data ( G_OBJECT ( copy_bt ) , CONV_PTR_KEY , pages [ page ] ) ;
2010-06-23 16:49:17 +00:00
g_object_set_data ( G_OBJECT ( follow_stream_bt ) , CONV_PTR_KEY , pages [ page ] ) ;
2012-11-11 18:32:47 +00:00
g_object_set_data ( G_OBJECT ( graph_a_b_bt ) , CONV_PTR_KEY , pages [ page ] ) ;
g_object_set_data ( G_OBJECT ( graph_b_a_bt ) , CONV_PTR_KEY , pages [ page ] ) ;
2010-06-23 16:49:17 +00:00
2012-05-19 16:55:22 +00:00
/* Filter Stream only available for TCP and UDP */
if ( strcmp ( ( ( conversations_table * ) pages [ page ] ) - > name , " TCP " ) = = 0 ) {
gtk_widget_set_tooltip_text ( follow_stream_bt , " Follow TCP Stream. " ) ;
gtk_widget_set_sensitive ( follow_stream_bt , TRUE ) ;
2013-03-21 18:39:16 +00:00
gtk_widget_set_tooltip_text ( follow_stream_bt , " Graph traffic from address A to address B. " ) ;
2012-11-11 18:32:47 +00:00
gtk_widget_set_sensitive ( graph_a_b_bt , TRUE ) ;
gtk_widget_set_sensitive ( graph_b_a_bt , TRUE ) ;
2012-05-19 16:55:22 +00:00
} else if ( strcmp ( ( ( conversations_table * ) pages [ page ] ) - > name , " UDP " ) = = 0 ) {
gtk_widget_set_tooltip_text ( follow_stream_bt , " Follow UDP Stream. " ) ;
2012-11-11 18:32:47 +00:00
gtk_widget_set_sensitive ( graph_a_b_bt , FALSE ) ;
gtk_widget_set_sensitive ( graph_b_a_bt , FALSE ) ;
2012-05-19 16:55:22 +00:00
gtk_widget_set_sensitive ( follow_stream_bt , TRUE ) ;
} else {
gtk_widget_set_tooltip_text ( follow_stream_bt , " Follow TCP or UDP Stream. " ) ;
2012-11-11 18:32:47 +00:00
gtk_widget_set_sensitive ( graph_a_b_bt , FALSE ) ;
gtk_widget_set_sensitive ( graph_b_a_bt , FALSE ) ;
2012-05-19 16:55:22 +00:00
gtk_widget_set_sensitive ( follow_stream_bt , FALSE ) ;
}
2007-11-20 18:35:41 +00:00
}
}
2004-05-02 17:25:10 +00:00
static void
2004-07-20 20:56:53 +00:00
ct_win_destroy_notebook_cb ( GtkWindow * win _U_ , gpointer data )
2004-05-02 17:25:10 +00:00
{
2013-03-08 06:07:26 +00:00
void * * pages = ( void * * ) data ;
2004-05-02 17:25:10 +00:00
int page ;
/* first "page" contains the number of pages */
for ( page = 1 ; page < = GPOINTER_TO_INT ( pages [ 0 ] ) ; page + + ) {
2004-07-20 20:56:53 +00:00
ct_win_destroy_cb ( NULL , pages [ page ] ) ;
2004-05-02 17:25:10 +00:00
}
2007-11-20 18:35:41 +00:00
g_free ( pages ) ;
2004-05-02 17:25:10 +00:00
}
2004-07-20 06:06:41 +00:00
static conversations_table *
2014-07-23 17:38:55 +00:00
init_ct_notebook_page_cb ( register_ct_t * table , const char * filter )
2004-05-02 17:25:10 +00:00
{
gboolean ret ;
GtkWidget * page_vbox ;
2004-07-20 20:56:53 +00:00
conversations_table * conversations ;
2004-05-02 17:25:10 +00:00
2013-03-08 06:07:26 +00:00
conversations = g_new0 ( conversations_table , 1 ) ;
2014-07-23 17:38:55 +00:00
conversations - > name = proto_get_protocol_short_name ( find_protocol_by_id ( get_conversation_proto_id ( table ) ) ) ;
2008-02-17 00:35:55 +00:00
conversations - > filter = filter ;
2004-07-20 20:56:53 +00:00
conversations - > resolve_names = TRUE ;
2008-02-17 00:35:55 +00:00
conversations - > use_dfilter = FALSE ;
2004-05-02 17:25:10 +00:00
2012-04-20 14:56:24 +00:00
page_vbox = ws_gtk_box_new ( GTK_ORIENTATION_VERTICAL , 6 , FALSE ) ;
2004-07-20 20:56:53 +00:00
conversations - > win = page_vbox ;
2004-06-03 21:46:27 +00:00
gtk_container_set_border_width ( GTK_CONTAINER ( page_vbox ) , 6 ) ;
2004-05-02 17:25:10 +00:00
2014-07-23 17:38:55 +00:00
ret = init_ct_table_page ( conversations , page_vbox , get_conversation_hide_ports ( table ) , conversations - > name ,
proto_get_protocol_filter_name ( get_conversation_proto_id ( table ) ) , filter , get_conversation_packet_func ( table ) ) ;
2004-05-02 17:25:10 +00:00
if ( ret = = FALSE ) {
2004-07-20 20:56:53 +00:00
g_free ( conversations ) ;
2004-05-02 17:25:10 +00:00
return NULL ;
}
2004-07-20 20:56:53 +00:00
return conversations ;
2004-05-02 17:25:10 +00:00
}
2004-05-03 22:15:22 +00:00
static void
2004-07-20 20:56:53 +00:00
ct_resolve_toggle_dest ( GtkWidget * widget , gpointer data )
2004-05-03 22:15:22 +00:00
{
int page ;
2013-03-08 06:07:26 +00:00
void * * pages = ( void * * ) data ;
2004-05-03 22:15:22 +00:00
gboolean resolve_names ;
2004-07-20 20:56:53 +00:00
conversations_table * conversations ;
2004-05-03 22:15:22 +00:00
resolve_names = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( widget ) ) ;
for ( page = 1 ; page < = GPOINTER_TO_INT ( pages [ 0 ] ) ; page + + ) {
2013-03-08 06:07:26 +00:00
conversations = ( conversations_table * ) pages [ page ] ;
2004-07-20 20:56:53 +00:00
conversations - > resolve_names = resolve_names ;
2004-05-03 22:15:22 +00:00
2004-07-20 20:56:53 +00:00
draw_ct_table_addresses ( conversations ) ;
2004-07-27 18:34:02 +00:00
2004-05-03 22:15:22 +00:00
}
}
2008-02-17 00:35:55 +00:00
static void
ct_filter_toggle_dest ( GtkWidget * widget , gpointer data )
{
int page ;
2013-03-08 06:07:26 +00:00
void * * pages = ( void * * ) data ;
2008-02-17 00:35:55 +00:00
gboolean use_filter ;
2008-10-13 18:16:35 +00:00
conversations_table * conversations = NULL ;
2008-02-17 00:35:55 +00:00
use_filter = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( widget ) ) ;
for ( page = 1 ; page < = GPOINTER_TO_INT ( pages [ 0 ] ) ; page + + ) {
2013-03-08 06:07:26 +00:00
conversations = ( conversations_table * ) pages [ page ] ;
2008-02-17 00:35:55 +00:00
conversations - > use_dfilter = use_filter ;
reset_ct_table_data ( conversations ) ;
}
2009-06-05 22:42:47 +00:00
cf_retap_packets ( & cfile ) ;
2008-10-13 18:16:35 +00:00
if ( conversations ) {
2011-02-07 18:41:38 +00:00
gdk_window_raise ( gtk_widget_get_window ( conversations - > win ) ) ;
2008-10-13 18:16:35 +00:00
}
2008-02-17 00:35:55 +00:00
}
2014-07-23 17:38:55 +00:00
typedef struct _init_ct_page_data {
int page ;
void * * pages ;
GtkWidget * nb ;
GtkWidget * win ;
} init_ct_page_data ;
static void
init_ct_page ( gpointer data , gpointer user_data )
{
register_ct_t * table = ( register_ct_t * ) data ;
init_ct_page_data * ct_page_data = ( init_ct_page_data * ) user_data ;
conversations_table * conversations ;
GtkWidget * page_lb ;
conversations = init_ct_notebook_page_cb ( table , NULL /*filter*/ ) ;
if ( conversations ) {
g_object_set_data ( G_OBJECT ( conversations - > win ) , CONV_PTR_KEY , conversations ) ;
page_lb = gtk_label_new ( " " ) ;
gtk_notebook_append_page ( GTK_NOTEBOOK ( ct_page_data - > nb ) , conversations - > win , page_lb ) ;
conversations - > win = ct_page_data - > win ;
conversations - > page_lb = page_lb ;
ct_page_data - > pages [ + + ct_page_data - > page ] = conversations ;
}
}
2008-02-17 00:35:55 +00:00
2004-05-02 17:25:10 +00:00
void
2004-07-20 20:56:53 +00:00
init_conversation_notebook_cb ( GtkWidget * w _U_ , gpointer d _U_ )
2004-05-02 17:25:10 +00:00
{
2012-06-03 22:03:05 +00:00
char * display_name ;
2004-06-03 21:46:27 +00:00
char title [ 256 ] ;
2004-05-02 17:25:10 +00:00
GtkWidget * vbox ;
2004-05-03 22:15:22 +00:00
GtkWidget * hbox ;
2004-05-02 17:25:10 +00:00
GtkWidget * bbox ;
2005-01-20 23:17:23 +00:00
GtkWidget * close_bt , * help_bt ;
2004-05-02 17:25:10 +00:00
GtkWidget * win ;
2004-05-03 22:15:22 +00:00
GtkWidget * resolv_cb ;
2008-02-17 00:35:55 +00:00
GtkWidget * filter_cb ;
2004-05-02 17:25:10 +00:00
void * * pages ;
GtkWidget * nb ;
2007-11-20 18:35:41 +00:00
GtkWidget * copy_bt ;
2010-06-23 16:49:17 +00:00
GtkWidget * follow_stream_bt ;
2012-11-11 18:32:47 +00:00
GtkWidget * graph_a_b_bt ;
GtkWidget * graph_b_a_bt ;
2013-03-21 18:39:16 +00:00
window_geometry_t tl_geom ;
2014-07-23 17:38:55 +00:00
init_ct_page_data ct_page_iter_data ;
2004-05-02 17:25:10 +00:00
2014-07-23 17:38:55 +00:00
pages = ( void * * ) g_malloc ( sizeof ( void * ) * ( conversation_table_get_num ( ) + 1 ) ) ;
2004-05-02 17:25:10 +00:00
2012-06-03 22:03:05 +00:00
display_name = cf_get_display_name ( & cfile ) ;
g_snprintf ( title , sizeof ( title ) , " Conversations: %s " , display_name ) ;
g_free ( display_name ) ;
2010-07-23 14:01:47 +00:00
win = dlg_window_new ( title ) ; /* transient_for top_level */
gtk_window_set_destroy_with_parent ( GTK_WINDOW ( win ) , TRUE ) ;
2009-06-21 20:42:07 +00:00
2013-03-21 18:39:16 +00:00
window_get_geometry ( top_level , & tl_geom ) ;
gtk_window_set_default_size ( GTK_WINDOW ( win ) , tl_geom . width * 8 / 10 , CONV_DLG_HEIGHT ) ;
2004-05-02 17:25:10 +00:00
2013-03-21 18:39:16 +00:00
vbox = ws_gtk_box_new ( GTK_ORIENTATION_VERTICAL , DLG_LABEL_SPACING , FALSE ) ;
2004-06-03 21:46:27 +00:00
gtk_container_add ( GTK_CONTAINER ( win ) , vbox ) ;
2013-03-21 18:39:16 +00:00
gtk_container_set_border_width ( GTK_CONTAINER ( vbox ) , DLG_OUTER_MARGIN ) ;
2004-05-02 17:25:10 +00:00
nb = gtk_notebook_new ( ) ;
2012-07-19 14:02:47 +00:00
gtk_box_pack_start ( GTK_BOX ( vbox ) , nb , TRUE , TRUE , 0 ) ;
2008-04-11 16:26:32 +00:00
g_object_set_data ( G_OBJECT ( nb ) , NB_PAGES_KEY , pages ) ;
2004-05-02 17:25:10 +00:00
2014-07-23 17:38:55 +00:00
ct_page_iter_data . page = 0 ;
ct_page_iter_data . pages = pages ;
ct_page_iter_data . nb = nb ;
ct_page_iter_data . win = win ;
conversation_table_iterate_tables ( init_ct_page , & ct_page_iter_data ) ;
2004-05-02 17:25:10 +00:00
2014-07-23 17:38:55 +00:00
pages [ 0 ] = GINT_TO_POINTER ( ct_page_iter_data . page ) ;
2004-05-02 17:25:10 +00:00
2013-03-21 18:39:16 +00:00
hbox = ws_gtk_box_new ( GTK_ORIENTATION_HORIZONTAL , DLG_UNRELATED_SPACING , FALSE ) ;
2004-06-03 21:46:27 +00:00
gtk_box_pack_start ( GTK_BOX ( vbox ) , hbox , FALSE , FALSE , 0 ) ;
2004-05-03 22:15:22 +00:00
2008-04-11 19:04:34 +00:00
resolv_cb = gtk_check_button_new_with_mnemonic ( " Name resolution " ) ;
2013-03-20 22:41:51 +00:00
gtk_box_pack_start ( GTK_BOX ( hbox ) , resolv_cb , FALSE , FALSE , 0 ) ;
2008-06-29 15:51:43 +00:00
gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( resolv_cb ) , TRUE ) ;
2011-06-20 10:33:35 +00:00
gtk_widget_set_tooltip_text ( resolv_cb , " Show results of name resolutions rather than the \" raw \" values. "
" Please note: The corresponding name resolution must be enabled. " ) ;
2008-04-11 21:20:51 +00:00
g_signal_connect ( resolv_cb , " toggled " , G_CALLBACK ( ct_resolve_toggle_dest ) , pages ) ;
2004-05-03 22:15:22 +00:00
2008-04-11 19:04:34 +00:00
filter_cb = gtk_check_button_new_with_mnemonic ( " Limit to display filter " ) ;
2013-03-21 18:39:16 +00:00
gtk_box_pack_start ( GTK_BOX ( hbox ) , filter_cb , FALSE , FALSE , 0 ) ;
2008-06-29 15:51:43 +00:00
gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( filter_cb ) , FALSE ) ;
2011-06-20 10:33:35 +00:00
gtk_widget_set_tooltip_text ( filter_cb , " Limit the list to conversations matching the current display filter. " ) ;
2008-04-11 21:20:51 +00:00
g_signal_connect ( filter_cb , " toggled " , G_CALLBACK ( ct_filter_toggle_dest ) , pages ) ;
2008-02-17 00:35:55 +00:00
2004-06-03 21:46:27 +00:00
/* Button row. */
2007-11-20 18:35:41 +00:00
/* XXX - maybe we want to have a "Copy as CSV" stock button here? */
/*copy_bt = gtk_button_new_with_label ("Copy content to clipboard as CSV");*/
2012-11-11 18:32:47 +00:00
bbox = dlg_button_row_new ( GTK_STOCK_CLOSE , GTK_STOCK_COPY ,
WIRESHARK_STOCK_FOLLOW_STREAM ,
WIRESHARK_STOCK_GRAPH_A_B ,
WIRESHARK_STOCK_GRAPH_B_A ,
GTK_STOCK_HELP , NULL ) ;
2008-04-07 03:46:01 +00:00
2004-06-03 21:46:27 +00:00
gtk_box_pack_end ( GTK_BOX ( vbox ) , bbox , FALSE , FALSE , 0 ) ;
2004-05-02 17:25:10 +00:00
2012-11-11 18:32:47 +00:00
/* Close */
2013-03-08 06:07:26 +00:00
close_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( bbox ) , GTK_STOCK_CLOSE ) ;
2004-05-23 23:24:07 +00:00
window_set_cancel_button ( win , close_bt , window_cancel_button_cb ) ;
2004-05-02 17:25:10 +00:00
2012-11-11 18:32:47 +00:00
/* Copy */
2013-03-08 06:07:26 +00:00
copy_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( bbox ) , GTK_STOCK_COPY ) ;
2011-06-20 10:33:35 +00:00
gtk_widget_set_tooltip_text ( copy_bt , " Copy all statistical values of this page to the clipboard in CSV (Comma Separated Values) format. " ) ;
2008-04-11 21:20:51 +00:00
g_signal_connect ( copy_bt , " clicked " , G_CALLBACK ( copy_as_csv_cb ) , NULL ) ;
2014-07-23 17:38:55 +00:00
g_object_set_data ( G_OBJECT ( copy_bt ) , CONV_PTR_KEY , pages [ ct_page_iter_data . page ] ) ;
2007-11-20 18:35:41 +00:00
2012-11-11 18:32:47 +00:00
/* Graph A->B */
2013-03-08 06:07:26 +00:00
graph_a_b_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( bbox ) , WIRESHARK_STOCK_GRAPH_A_B ) ;
2013-03-21 18:39:16 +00:00
gtk_widget_set_tooltip_text ( graph_a_b_bt , " Graph traffic from address A to address B. " ) ;
2012-11-11 18:32:47 +00:00
g_object_set_data ( G_OBJECT ( graph_a_b_bt ) , E_DFILTER_TE_KEY , main_display_filter_widget ) ;
2014-07-23 17:38:55 +00:00
g_object_set_data ( G_OBJECT ( graph_a_b_bt ) , CONV_PTR_KEY , pages [ ct_page_iter_data . page ] ) ;
2012-11-11 18:32:47 +00:00
g_signal_connect ( graph_a_b_bt , " clicked " , G_CALLBACK ( graph_cb ) , ( gpointer ) FALSE ) ;
g_object_set_data ( G_OBJECT ( nb ) , GRAPH_A_B_BT_KEY , graph_a_b_bt ) ;
/* Graph B->A */
2013-03-08 06:07:26 +00:00
graph_b_a_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( bbox ) , WIRESHARK_STOCK_GRAPH_B_A ) ;
2013-03-21 18:39:16 +00:00
gtk_widget_set_tooltip_text ( graph_b_a_bt , " Graph traffic from address B to address A. " ) ;
2012-11-11 18:32:47 +00:00
g_object_set_data ( G_OBJECT ( graph_b_a_bt ) , E_DFILTER_TE_KEY , main_display_filter_widget ) ;
2014-07-23 17:38:55 +00:00
g_object_set_data ( G_OBJECT ( graph_b_a_bt ) , CONV_PTR_KEY , pages [ ct_page_iter_data . page ] ) ;
2012-11-11 18:32:47 +00:00
g_signal_connect ( graph_b_a_bt , " clicked " , G_CALLBACK ( graph_cb ) , ( gpointer ) TRUE ) ;
g_object_set_data ( G_OBJECT ( nb ) , GRAPH_B_A_BT_KEY , graph_b_a_bt ) ;
/* Follow stream */
2013-03-08 06:07:26 +00:00
follow_stream_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( bbox ) , WIRESHARK_STOCK_FOLLOW_STREAM ) ;
2011-06-20 10:33:35 +00:00
gtk_widget_set_tooltip_text ( follow_stream_bt , " Follow Stream. " ) ;
2010-06-23 16:49:17 +00:00
g_object_set_data ( G_OBJECT ( follow_stream_bt ) , E_DFILTER_TE_KEY , main_display_filter_widget ) ;
2014-07-23 17:38:55 +00:00
g_object_set_data ( G_OBJECT ( follow_stream_bt ) , CONV_PTR_KEY , pages [ ct_page_iter_data . page ] ) ;
2010-06-23 16:49:17 +00:00
g_signal_connect ( follow_stream_bt , " clicked " , G_CALLBACK ( follow_stream_cb ) , NULL ) ;
g_object_set_data ( G_OBJECT ( nb ) , FOLLOW_STREAM_BT_KEY , follow_stream_bt ) ;
2012-11-11 18:32:47 +00:00
2008-04-11 21:20:51 +00:00
g_signal_connect ( nb , " switch-page " , G_CALLBACK ( ct_nb_switch_page_cb ) , copy_bt ) ;
2007-11-20 18:35:41 +00:00
2012-11-11 18:32:47 +00:00
/* Help */
2013-03-08 06:07:26 +00:00
help_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( bbox ) , GTK_STOCK_HELP ) ;
2008-06-21 13:36:31 +00:00
g_signal_connect ( help_bt , " clicked " , G_CALLBACK ( topic_cb ) , ( gpointer ) HELP_STATS_CONVERSATIONS_DIALOG ) ;
2005-01-20 23:17:23 +00:00
2008-04-11 21:20:51 +00:00
g_signal_connect ( win , " delete_event " , G_CALLBACK ( window_delete_event_cb ) , NULL ) ;
g_signal_connect ( win , " destroy " , G_CALLBACK ( ct_win_destroy_notebook_cb ) , pages ) ;
2004-05-02 17:25:10 +00:00
2004-06-03 21:46:27 +00:00
gtk_widget_show_all ( win ) ;
2004-05-23 23:24:07 +00:00
window_present ( win ) ;
2009-06-05 22:42:47 +00:00
cf_retap_packets ( & cfile ) ;
2011-02-07 18:41:38 +00:00
gdk_window_raise ( gtk_widget_get_window ( win ) ) ;
2009-10-06 07:44:48 +00:00
}
2014-07-23 17:38:55 +00:00
void conversation_endpoint_cb ( register_ct_t * table )
{
char cmd_str [ 50 ] ;
g_snprintf ( cmd_str , 50 , " conv,%s " , proto_get_protocol_filter_name ( get_conversation_proto_id ( table ) ) ) ;
dissector_conversation_init ( cmd_str , table ) ;
}
2007-11-20 18:35:41 +00:00
/*
* Editor modelines
*
* Local Variables :
* c - basic - offset : 4
* tab - width : 8
* indent - tabs - mode : nil
* End :
*
2011-09-21 17:49:11 +00:00
* ex : set shiftwidth = 4 tabstop = 8 expandtab :
2007-11-20 18:35:41 +00:00
* : indentSize = 4 : tabSize = 8 : noTabs = true :
*/