Indicate default column alignment in the popup menu.

svn path=/trunk/; revision=31150
This commit is contained in:
Stig Bjørlykke 2009-12-02 13:53:33 +00:00
parent 40b377bd66
commit 942d6e41f8
3 changed files with 58 additions and 6 deletions

View 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)
{

View 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. */

View 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,