Mercurial > geeqie
diff src/bar_histogram.c @ 1667:0806ccdfe06b
simplified menu_item_add_radio usage
author | nadvornik |
---|---|
date | Sat, 27 Jun 2009 20:12:56 +0000 |
parents | 24a12aa0cb54 |
children | 6146ec0c9ab9 |
line wrap: on
line diff
--- a/src/bar_histogram.c Sat Jun 27 17:54:31 2009 +0000 +++ b/src/bar_histogram.c Sat Jun 27 20:12:56 2009 +0000 @@ -198,123 +198,55 @@ static void bar_pane_histogram_popup_channels_cb(GtkWidget *widget, gpointer data) { - PaneHistogramData *phd; + PaneHistogramData *phd = data; gint channel; if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) return; - phd = submenu_item_get_data(widget); - if (!phd) return; - channel = GPOINTER_TO_INT(data); + channel = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "menu_item_radio_data")); if (channel == histogram_get_channel(phd->histogram)) return; histogram_set_channel(phd->histogram, channel); bar_pane_histogram_update(phd); } -static void bar_pane_histogram_popup_logmode_cb(GtkWidget *widget, gpointer data) +static void bar_pane_histogram_popup_mode_cb(GtkWidget *widget, gpointer data) { - PaneHistogramData *phd; + PaneHistogramData *phd = data; gint logmode; if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) return; - phd = submenu_item_get_data(widget); - if (!phd) return; - logmode = GPOINTER_TO_INT(data); + logmode = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "menu_item_radio_data")); if (logmode == histogram_get_mode(phd->histogram)) return; histogram_set_mode(phd->histogram, logmode); bar_pane_histogram_update(phd); } -static GtkWidget *bar_pane_histogram_add_radio(GtkWidget *menu, GtkWidget *parent, - const gchar *label, - GCallback func, gint value, - gboolean show_current, gint current_value) -{ - GtkWidget *item; - - if (show_current) - { - item = menu_item_add_radio(menu, parent, - label, (value == current_value), - func, GINT_TO_POINTER((gint)value)); - } - else - { - item = menu_item_add(menu, label, - func, GINT_TO_POINTER((gint)value)); - } - - return item; -} - -GtkWidget *bar_pane_histogram_add_channels(GtkWidget *menu, GCallback func, gpointer data, - gboolean show_current, gint current_value) -{ - GtkWidget *submenu; - GtkWidget *parent; - - submenu = gtk_menu_new(); - g_object_set_data(G_OBJECT(submenu), "submenu_data", data); - - parent = bar_pane_histogram_add_radio(submenu, NULL, _("_Red"), func, HCHAN_R, show_current, current_value); - bar_pane_histogram_add_radio(submenu, parent, _("_Green"), func, HCHAN_G, show_current, current_value); - bar_pane_histogram_add_radio(submenu, parent, _("_Blue"),func, HCHAN_B, show_current, current_value); - bar_pane_histogram_add_radio(submenu, parent, _("_RGB"),func, HCHAN_RGB, show_current, current_value); - bar_pane_histogram_add_radio(submenu, parent, _("_Value"),func, HCHAN_MAX, show_current, current_value); - - if (menu) - { - GtkWidget *item; - - item = menu_item_add(menu, _("Channels"), NULL, NULL); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); - return item; - } - - return submenu; -} -GtkWidget *bar_pane_histogram_add_logmode(GtkWidget *menu, GCallback func, gpointer data, - gboolean show_current, gint current_value) -{ - GtkWidget *submenu; - GtkWidget *parent; - - submenu = gtk_menu_new(); - g_object_set_data(G_OBJECT(submenu), "submenu_data", data); - - parent = bar_pane_histogram_add_radio(submenu, NULL, _("_Linear"), func, 0, show_current, current_value); - bar_pane_histogram_add_radio(submenu, parent, _("Lo_garithmical"), func, 1, show_current, current_value); - - if (menu) - { - GtkWidget *item; - - item = menu_item_add(menu, _("Mode"), NULL, NULL); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); - return item; - } - - return submenu; -} - - static GtkWidget *bar_pane_histogram_menu(PaneHistogramData *phd) { GtkWidget *menu; - static gboolean show_current = TRUE; + gint channel = histogram_get_channel(phd->histogram); + gint mode = histogram_get_mode(phd->histogram); menu = popup_menu_short_lived(); - bar_pane_histogram_add_channels(menu, G_CALLBACK(bar_pane_histogram_popup_channels_cb), phd, - show_current, histogram_get_channel(phd->histogram)); - bar_pane_histogram_add_logmode(menu, G_CALLBACK(bar_pane_histogram_popup_logmode_cb), phd, - show_current, histogram_get_mode(phd->histogram)); + + /* use the same strings as in layout_util.c */ + menu_item_add_radio(menu, _("Histogram on _Red"), GINT_TO_POINTER(HCHAN_R), (channel == HCHAN_R), G_CALLBACK(bar_pane_histogram_popup_channels_cb), phd); + menu_item_add_radio(menu, _("Histogram on _Green"), GINT_TO_POINTER(HCHAN_G), (channel == HCHAN_G), G_CALLBACK(bar_pane_histogram_popup_channels_cb), phd); + menu_item_add_radio(menu, _("Histogram on _Blue"), GINT_TO_POINTER(HCHAN_B), (channel == HCHAN_B), G_CALLBACK(bar_pane_histogram_popup_channels_cb), phd); + menu_item_add_radio(menu, _("_Histogram on RGB"), GINT_TO_POINTER(HCHAN_RGB), (channel == HCHAN_RGB), G_CALLBACK(bar_pane_histogram_popup_channels_cb), phd); + menu_item_add_radio(menu, _("Histogram on _Value"), GINT_TO_POINTER(HCHAN_MAX), (channel == HCHAN_MAX), G_CALLBACK(bar_pane_histogram_popup_channels_cb), phd); + + menu_item_add_divider(menu); + + menu_item_add_radio(menu, _("Li_near Histogram"), GINT_TO_POINTER(0), (mode == 0), G_CALLBACK(bar_pane_histogram_popup_mode_cb), phd); + menu_item_add_radio(menu, _("L_og Histogram"), GINT_TO_POINTER(1), (mode == 1), G_CALLBACK(bar_pane_histogram_popup_mode_cb), phd); return menu; }