Indicate default column alignment in the popup menu.
authorStig Bjørlykke <stig@bjorlykke.org>
Wed, 2 Dec 2009 13:53:33 +0000 (13:53 -0000)
committerStig Bjørlykke <stig@bjorlykke.org>
Wed, 2 Dec 2009 13:53:33 +0000 (13:53 -0000)
svn path=/trunk/; revision=31150

gtk/menus.c
gtk/menus.h
gtk/new_packet_list.c

index b44ad115dc484fe58b831e325a053f2d8954d075..d2b4057326a41a5c3bc25f5c4ee45a330d75a10c 100644 (file)
@@ -770,7 +770,6 @@ static GtkItemFactoryEntry packet_list_heading_items[] =
 
     {"/<separator>", NULL, NULL, 0, "<Separator>", 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, "<StockItem>", GTK_STOCK_JUSTIFY_LEFT,},
     {"/Align Center", NULL, GTK_MENU_FUNC(new_packet_list_column_menu_cb), COLUMN_SELECTED_ALIGN_CENTER, "<StockItem>", GTK_STOCK_JUSTIFY_CENTER,},
     {"/Align Right", NULL, GTK_MENU_FUNC(new_packet_list_column_menu_cb), COLUMN_SELECTED_ALIGN_RIGHT, "<StockItem>", 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)
 {
index 8a4d990b2c97871ba41eb5419f790896b6ab8f18..7793c8408d5531b5fc1316c811076e60cd12f92c 100644 (file)
@@ -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. */
index 560a33bc3960adc6600b0ea192719b8777bf697b..01245036730084c7abede4a8f559743c27f0c9c6 100644 (file)
@@ -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,