From 942d6e41f8c828685bbfb26631163472aefdc548 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stig=20Bj=C3=B8rlykke?= Date: Wed, 2 Dec 2009 13:53:33 +0000 Subject: [PATCH] Indicate default column alignment in the popup menu. svn path=/trunk/; revision=31150 --- gtk/menus.c | 39 ++++++++++++++++++++++++++++++++++++++- gtk/menus.h | 3 +++ gtk/new_packet_list.c | 22 +++++++++++++++++----- 3 files changed, 58 insertions(+), 6 deletions(-) diff --git a/gtk/menus.c b/gtk/menus.c index b44ad115dc..d2b4057326 100644 --- a/gtk/menus.c +++ b/gtk/menus.c @@ -770,7 +770,6 @@ static GtkItemFactoryEntry packet_list_heading_items[] = {"/", NULL, NULL, 0, "", NULL,}, - {"/Default Alignment", NULL, GTK_MENU_FUNC(new_packet_list_column_menu_cb), COLUMN_SELECTED_ALIGN_DEFAULT, NULL, NULL,}, {"/Align Left", NULL, GTK_MENU_FUNC(new_packet_list_column_menu_cb), COLUMN_SELECTED_ALIGN_LEFT, "", GTK_STOCK_JUSTIFY_LEFT,}, {"/Align Center", NULL, GTK_MENU_FUNC(new_packet_list_column_menu_cb), COLUMN_SELECTED_ALIGN_CENTER, "", GTK_STOCK_JUSTIFY_CENTER,}, {"/Align Right", NULL, GTK_MENU_FUNC(new_packet_list_column_menu_cb), COLUMN_SELECTED_ALIGN_RIGHT, "", GTK_STOCK_JUSTIFY_RIGHT,}, @@ -3189,6 +3188,44 @@ rebuild_protocol_prefs_menu (module_t *prefs, gboolean preferences) } +void +menus_set_column_align_default (gboolean right_justify) +{ + GtkWidget *submenu, *menu_item_child; + GList *child_list, *child_list_item; + const gchar *menu_item_name; + gint menu_item_len; + + /* get the submenu container item */ + submenu = packet_list_heading_factory->widget; + + /* find the corresponding menu items to update */ + child_list = gtk_container_get_children(GTK_CONTAINER(submenu)); + child_list_item = child_list; + while(child_list_item) { + menu_item_child = (GTK_BIN(child_list_item->data))->child; + if (menu_item_child != NULL) { + menu_item_name = gtk_label_get_text(GTK_LABEL(menu_item_child)); + menu_item_len = strlen (menu_item_name); + if(strncmp(menu_item_name, "Align Left", 10) == 0) { + if (!right_justify && menu_item_len == 10) { + gtk_label_set_text(GTK_LABEL(menu_item_child), "Align Left\t(default)"); + } else if (right_justify && menu_item_len > 10) { + gtk_label_set_text(GTK_LABEL(menu_item_child), "Align Left"); + } + } else if (strncmp (menu_item_name, "Align Right", 11) == 0) { + if (right_justify && menu_item_len == 11) { + gtk_label_set_text(GTK_LABEL(menu_item_child), "Align Right\t(default)"); + } else if (!right_justify && menu_item_len > 11) { + gtk_label_set_text(GTK_LABEL(menu_item_child), "Align Right"); + } + } + } + child_list_item = g_list_next(child_list_item); + } + g_list_free(child_list); +} + void set_menus_for_selected_tree_row(capture_file *cf) { diff --git a/gtk/menus.h b/gtk/menus.h index 8a4d990b2c..7793c8408d 100644 --- a/gtk/menus.h +++ b/gtk/menus.h @@ -111,6 +111,9 @@ extern void set_menus_for_file_set(gboolean file_set, gboolean previous_file, gb /** The popup menu. */ extern GtkWidget *popup_menu_object; +/* Update the packet list heading menu to indicate default + column justification. */ +void menus_set_column_align_default (gboolean right_justify); /* Enable or disable menu items based on whether a tree row is selected and and on whether a "Match Selected" can be done. */ diff --git a/gtk/new_packet_list.c b/gtk/new_packet_list.c index 560a33bc39..0124503673 100644 --- a/gtk/new_packet_list.c +++ b/gtk/new_packet_list.c @@ -280,7 +280,7 @@ new_packet_list_column_clicked_cb (GtkTreeViewColumn *col, gpointer user_data _U } static gdouble -get_xalign_value (gchar xalign, gint col_id) +get_xalign_value (gchar xalign, gboolean right_justify) { double value; @@ -296,7 +296,7 @@ get_xalign_value (gchar xalign, gint col_id) break; case COLUMN_XALIGN_DEFAULT: default: - if (right_justify_column (col_id)) { + if (right_justify) { value = 1.0f; } else { value = 0.0f; @@ -315,7 +315,8 @@ new_packet_list_xalign_column (gint col_id, GtkTreeViewColumn *col, gchar xalign #else GList *renderers = gtk_tree_view_column_get_cell_renderers (col); #endif - gdouble value = get_xalign_value (xalign, col_id); + gboolean right_justify = right_justify_column(col_id); + gdouble value = get_xalign_value (xalign, right_justify); GList *entry; GtkCellRenderer *renderer; @@ -327,6 +328,12 @@ new_packet_list_xalign_column (gint col_id, GtkTreeViewColumn *col, gchar xalign } g_list_free (renderers); + if ((xalign == COLUMN_XALIGN_LEFT && !right_justify) || + (xalign == COLUMN_XALIGN_RIGHT && right_justify)) { + /* Default value selected, save default in the recent settings */ + xalign = COLUMN_XALIGN_DEFAULT; + } + recent_set_column_xalign (col_id, xalign); gtk_widget_queue_draw (packetlist->view); } @@ -393,7 +400,10 @@ new_packet_list_column_button_pressed_cb (GtkWidget *widget, GdkEvent *event, gp { GtkWidget *col = (GtkWidget *) data; GtkWidget *menu = g_object_get_data(G_OBJECT(popup_menu_object), PM_PACKET_LIST_COL_KEY); + gint col_id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(col), E_MPACKET_LIST_COL_KEY)); + gboolean right_justify = right_justify_column (col_id); + menus_set_column_align_default (right_justify); g_object_set_data(G_OBJECT(packetlist->view), E_MPACKET_LIST_COLUMN_KEY, col); popup_menu_handler (widget, event, menu); } @@ -407,6 +417,7 @@ create_view_and_model(void) gint i, col_width; gchar xalign; gdouble value; + gboolean right_justify; GtkWidget *title_lb; gchar *tooltip_text; header_field_info *hfi; @@ -441,10 +452,11 @@ create_view_and_model(void) xalign = recent_get_column_xalign(i); col = gtk_tree_view_column_new(); gtk_tree_view_column_pack_start(col, renderer, TRUE); + right_justify = right_justify_column (i); if (xalign != COLUMN_XALIGN_DEFAULT) { - value = get_xalign_value(xalign, i); + value = get_xalign_value(xalign, right_justify); g_object_set(G_OBJECT(renderer), "xalign", value, NULL); - } else if (right_justify_column (i)) { + } else if (right_justify) { g_object_set(G_OBJECT(renderer), "xalign", 1.0,